Simple JSON template language in Polish notation
Sometimes you would like to encode JSON template by JSON object.
- Template encoded by JSON object in Polish notation
- Support of mathematical and logical operations
- Support of custom operations
- Conditional operator
- Map operator
import {createCompiler} from 'json-pn'
const compiler = createCompiler()
const hello = compiler({'@add': ["Hello", {'@':'value'}]})
console.log(hello({value:' word'})) //Hello word
You can manually set list of supported operators.
import {createCompiler, defaultOperationsMap} from 'json-pn'
const compiler = createCompiler(defaultOperationsMap)
You can register your own operator during compiler creation
import {createCompiler, defaultOperationsMap} from 'json-pn'
const double = compiler => value => {
const subtemplate = compiler(value)
return props => subtemplate(props) * 2
}
const compiler = createCompiler({
...defaultOperationsMap,
'@double': double
})
const four = compiler({'@double': 2)
console.log(four())//4
Unar operator use value as single parameter
// ! true
{'@not': true}
N-ar operators always expects array fixed length. According to operands count can be defined binar, triar, and other operators
// 2 + 4
{'@add': [ 2, 4 ]}
//if (true) {return 'foo'} else {return 'baz'}
{'@if': [true, 'foo', 'baz']}
Unar operator expects string or string[] in operand.
Unar operator. Just copy operand value without any transformations.
Binar operator.
Binar operator.
Binar operator.
Binar operator.
Unar operator.
Binar operator.
Binar operator.
Binar operator.
Binar operator.
Binar operator.
Binar operator.
Binar operator.
Tetrar operator. Allows to use template for each array item.
Operand number | Operand value |
---|---|
0 | Target array |
1 | Template |
2 | Array item name it template parameters |
3 | Array item index name in template parameters |
//[1,2,3].map((x,i) => 2 * x + i)
{
"@map" : [
[1, 2, 3], {
"@add": [
"@mul" : [ 2, {"@":"x"}],
{"@":"i"}
]
},
"x","i"
]
}