0.0.9 • Published 4 years ago

entyre v0.0.9

Weekly downloads
16
License
MIT
Repository
github
Last release
4 years ago

Entyre

Entyre is built around the concept of a Single File Package (SFP), inspired by Vue.js's Single File Components. Instead of packages having X number of javascript files, a package.json, a readme.md, and other files for publishing, instead a package should be able to be made of a single file. In Entyre's case this single file is an index.md (perhaps in the future a readme.md.


NOTICE: Active Development

Entyre is still in its early stages of development. Feel free to watch this project as it grows.

Nothing in this project promises to be stable until we reach v0.1.0.


Inception

Over the past few months I have decided to start working on a monorepo for ALL of my projects. The amount of overhead to start a new project was always massive. You could prototype and publish quickly, but for all the Developer Experience related stuff like compilation, formatting, githooks, publishing, changelogs, versioning, testing, etc. it is just a painful experience. A monorepo approach removed this problem for me. So I started working on a tool called KI/KD inspired by Lerna that would serve as a monorepo tool for an entire "company" of one developer. The goal was to be able to match Google's monorepo approach and efficiency in providing new products to the world.

Over time, I discovered that I was able to reduce each package into a single index.js file with no package.json for just use in development. For publishing though, I still needed KI/KD to create a package.json to track the versioning and a readme.md because publishing to NPM without a readme.md is dumb. While at Vue Conf US 2018 in New Orleans, I had come up with a cool idea to mix Literate Programming into my build system to be able to write docs with my code because I was running into a problem where I had 60+ potential packages, but I had no documentation for ANY of them. One night out drinking, something clicked. Vue.js Single File Components, were just a bunch of "sections" in a single file that were marked. At that moment I realized that I could literally make Single File Packages if I combined the concept of Front Matter from static site generators like Jekyll with Literate Programming where code was in "sections" and the package.json was in its own "section". And the rest is history.


SFP Example

A single file is a markdown file that looks like the following:

Single File Package


Parts

The single file is made up of several parts:

Front Matter

This concept is borrowed from static site generators... like Jekyll. The core concept is that at the beginning of a markdown document, one can define its metadata via yaml properties in a fenced block. From above, this is the Front Matter:

---
version: 0.0.1
license: MIT
description: Description of the package to be published.
---

In Entyre Front Matter is used to define the equivalent of a package's package.json file. Tools working with SFPs will auto modify this Front Matter with new versions or new dependencies. With this metadata other files could be included, like a particular LICENSE file in the final compilation.

Code Blocks

The next major piece is borrowed from Literate Programming, well a more rudimentary version of Literate Programming. The idea is that your SFP's code blocks are your code interspersed within the document. Your file is docs first, code second. This allows you to give full context to a given package's code and it sits right next to the documentation for it. The code will never fall out of sync, but the docs may have to be updated here and there. Entyre preprocesses the SFP and extracts all of the code blocks as the actual code before running it through Babel to run the code.

The Readme

Outside of that, the ENTIRE (get it?) file is your readme.md document and the only place you work. Docs, package.json, and code all in one sweet place.


Prior Art

Thank you to the following projects:

  • Literate Programming by Donald Knuth - Wonderful idea to combine docs and code to change the design experience of coding
  • lit-node by Rich Harris - Used his compile code as a starting point
  • Vue.js - For introducing the powerful Single File Component concept and the amazing US Vue Conf 2018 in New Orleans
  • Jekyll - And other static generators for the concept of Front Matter
  • Babel - Thank you for an amazing transpilation tool
0.0.9

4 years ago

0.0.8

4 years ago

0.0.5

4 years ago

0.0.7

4 years ago

0.0.6

4 years ago

0.0.4

4 years ago

0.0.3

7 years ago

0.0.2

7 years ago

0.0.1

7 years ago