JSPM

  • Created
  • Published
  • Downloads 595054
  • Score
    100M100P100Q214255F
  • License MIT

code-red

Package Exports

  • code-red

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (code-red) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

code-red

Experimental toolkit for writing x-to-JavaScript compilers. May end up getting used in Svelte, if it works.

API

The code-red package exposes three core functions — b, x and print.

b and x take a template literal and return an ESTree program body, or a single node:

import { b, x } from 'code-red';

const expression = x`i + j`;

assert.equal(expression.type, 'AssignmentExpression');
assert.equal(expression.operator, '+');
assert.equal(expression.left.name, 'i');
assert.equal(expression.right.name, 'j');

const body = b`
    const i = 1;
    const j = 2;
    const k = i + j;
`;

assert.equal(body.length, 3);
assert.equal(body[0].type, 'VariableDeclaration');

Expressions in template literals correspond to replacement nodes — so you could express the above like so:

const i = x`i`;
const j = x`j`;
const expression = x`${i} + ${j}`;

const body = b`
    const ${i} = 1;
    const ${j} = 2;
    const k = ${expression};
`;

The print function takes a node and turns it into a {code, map} object:

const add = x`
    function add(${i}, ${j}) {
        return ${expression};
    }
`;

print(add).code;
/*
function add(i, j) {
    return i + j;
}
*/

i.name = 'foo';
j.name = 'bar';

print(add).code;
/*
function add(foo, bar) {
    return foo + bar;
}
*/

Optimiser

TODO add an optimiser that e.g. collapses consecutive identical if blocks

Compiler

TODO add a code-red/compiler module that replaces template literals with the nodes they evaluate to, so that there's nothing to parse at runtime.

Sourcemaps

TODO support source mappings for inserted nodes with location information.

License

MIT