@smikhalevski/codegen

Language-agnostic codegen utils.

Usage no npm install needed!

<script type="module">
  import smikhalevskiCodegen from 'https://cdn.skypack.dev/@smikhalevski/codegen';
</script>

README

codegen build

Language-agnostic codegen utils.

npm install --save-prod @smikhalevski/codegen

Usage

import {template as _, compileJsSource} from '@smikhalevski/codegen';

const kebabVar = _.var();
const indexVar = _.var();
const valueVar = _.var();

const functionBlock = _.block`function makeKebab(${valueVar}){${[
  _.assignment(kebabVar, _`""`),

  _`for(let ${indexVar}=0;${indexVar}<${valueVar}.length;${indexVar}++){`,
  _`${kebabVar}+="-"+${valueVar}.charAt(${indexVar});`,
  _`}`,

  _`return ${kebabVar}`,
]}}`;

compileJsSource(functionBlock);
// → 'function makeKebab(a){let b="";for(let c=0;c<a.length;c++){b+="-"+a.charAt(c);}return b}'

Codegen can optimize code by inlining assignments and eliminating redundant variable declarations.

import {template as _, compileJsSource, inlineVarAssignments} from '@smikhalevski/codegen';

const aVar = _.var();
const bVar = _.var();
const cVar = _.var();

const block = _(
    _.assignment(aVar, 3),
    _.assignment(bVar, 2),
    _.assignment(cVar, _`${aVar}+${bVar}`),

    _`console.log(${cVar})`,
);

// This operation mutates block
inlineVarAssignments(block);

compileJsSource(block);
// → 'console.log(3+2)'