INTRODUCTION
    Jex is a simple packaging/dependency system for TypeScript/JavaScript
    projects.

    As of now, Jex is a glorified shell script that automates a lot of the
    tedium in building sidekick, JR, etc.  Jex is very much a work in progress,
    so these instructions are subject to change.

    Jex is currently hyper-specialized to our use cases inside of Vanillae, and
    is probably (currently) unsuitable for your use case.  For instance, Jex
    assumes you are running a UNIX-like system with standard UNIX programs
    installed (e.g. tree, rsync, tar, etc).  It also makes very strong
    assumptions about your project structure and how you want to distribute
    your project.

    Our long-term goal is to build Jex out into a proper secure packaging
    system, and completely remove any dependency on NPM.  NPM comes with a lot
    of unfixable security issues that present an unacceptable risk in a
    business context.  Developing software for the business context is the
    focus of the Vanillae project.

jex.eterms CONFIG FILE
    Every project requires a file called `jex.eterms` in the root of the
    project.

    The config file is a list of Erlang terms separated by `.`s

    The following keys must exist, the rest are ignored

        {type, library | external | extension}.
            This key implies other settings in the build process

            library ->
                The standard option. Pulls in dependencies and builds them,
                assuming normal project layout. This is what you want in most
                cases, even for things that are not libraries.

            external ->
                This is for external pre-built packages that we didn't develop,
                such as TweetNaCl. This does not run `tsc`, etc. Jex assumes
                the project has already been built, and so "install" etc just
                copies stuff.

            extension ->
                Used for Jack Russell. Extensions have a much more complicated
                build process because there are three different execution
                contexts with three different constraint sets.

        {realm, atom()}.
        {name, atom()}.
        {version, string()}.
        {deps, [string()]}.

PROJECT STRUCTURE
    Jex makes very strong assumptions about your project structure

        README.md       used by documentation tool `typedoc`
        jex.eterms      explained above
        tsconfig.json   needed for tsc
        src/            typescript source code
