stcg
Version:
Scripted Template Content Generator
114 lines (94 loc) • 3.55 kB
Markdown
# 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`