UNPKG

stcg

Version:

Scripted Template Content Generator

114 lines (94 loc) 3.55 kB
# stcg Scripted Template Content Generator. Designed to produce text content from a template containing script and text. Used mostly for generating code based on a json data model. ## Contributing & bugs Please fork the repository, make the changes in your fork and include tests. Once you're done making changes, send in a pull request. ### Bug reports Please include a test which shows why the code fails. ## Features * Creates and runs a script from a custom template format (text mixed with javascript) * Runs in a secure ([vm2](https://www.npmjs.com/package/vm2)) environment * Supports addition of extra global data/functions * Configurable template code/output markers * Built-in jsonpath evaluator for interaction with the data model ## Usage ### Simple library usage Simple C structure data generation ```javascript var Stcg = require('stcg').Stcg; var data = { "data" : [ {"name": 1, "address": 2, "custom": 3}, {"name": 4, "address": 5, "custom": 6} ] }; var template = 'struct my_struct data[[>stcg.dpath(\"$.data.length\")<]] = \n' + '{\n' + '[!stcg.dpath(\"$.data.*\").forEach((elem, ind) => {!]\n' + ' {\n' + ' .elem = [>`${elem["name"]}`<],\n' + ' .address = [>`${elem["name"]}`<],\n' + ' .elem = [>`${elem["custom"]}`<]\n' + ' },\n' + '[!})!]\n' + '};\n' var stcg = new Stcg(template); console.log(stcg.run(data)); ``` Will produce the following code ``` struct my_struct data[2] = { { .elem = 1, .address = 1, .elem = 3 }, { .elem = 4, .address = 4, .elem = 6 }, }; ``` ### Simple CLI usage Run the generator on given input file. Before you can use stcg in command line, install it globally with `npm install stcg -g`. ``` usage: stcg [-h] [-v] [--code_begin CODE_BEGIN] [--code_end CODE_END] [--output_begin OUTPUT_BEGIN] [--output_end OUTPUT_END] [-s SCHEMA] [-d DATA] [-o OUTPUT] template Scripted Template Content Generator Positional arguments: template Template file Optional arguments: -h, --help Show this help message and exit. -v, --version Show program's version number and exit. --code_begin CODE_BEGIN Code begin block marker --code_end CODE_END Code end block marker --output_begin OUTPUT_BEGIN Output begin block marker --output_end OUTPUT_END Output end block marker -s SCHEMA, --schema SCHEMA Data model json schema file -d DATA, --data DATA Data model json file -o OUTPUT, --output OUTPUT Output file ``` ## Documentation ### Options * `codeBegin` - Code begin marker, defaults to: `[!`. * `codeEnd` - Code end marker, defaults to: `!]`. * `outputBegin` - Output begin marker, defaults to: `[>`. * `outputEnd` - Output end marker, defaults to: `<]`. * `trimAfterCode` - Ignore all whitespaces and the first newline after a code run. * `debugLen` - Determines the number of characters a Error will include in in it's info. ### Built-in functions/data * `stcg.out(string)` - Prints. * `stcg.outl(string)` - Prints with newline. * `stcg.dpath(path)` - Evaluates path on the data model and returns the data. See ([jsonpath](https://www.npmjs.com/package/jsonpath)). * `stcg.data` - The data object received by Stcg.run(data). ## Deployment 1. Update the `package.json` version number 2. Commit the changes 3. Run `npm publish`