nullable-json-pn

JSON templates in prefix notation


License
MIT
Install
npm install nullable-json-pn@1.0.1

Documentation

nullable-json-pn

Fork of json-pn

with support of nullable fields for more flaky operations



Simple JSON template language in Polish notation

Motivation

Sometimes you would like to encode JSON template by JSON object.

Features

  • Template encoded by JSON object in Polish notation
  • Support of mathematical and logical operations
  • Support of custom operations
  • Conditional operator
  • Map operator

Usage

Include

import { createCompiler } from 'json-pn'

Create compiler

const compiler = createCompiler()

Create template function

const hello = compiler({ '@add': ['Hello', { '@': 'value' }] })

Use template function

console.log(hello({ value: ' word' })) //Hello word

Custom operators

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

Operators

Operators types

Unar operators

Unar operator use value as single parameter

// ! true
{'@not': true}

N-ar operatprs

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']}

Operators grpups

Template parameters

@ operator

Unar operator expects string or string[] in operand.

Special

@escape operator

Unar operator. Just copy operand value without any transformations.

Mathematical

@add

Binar operator.

@rem

Binar operator.

@mul

Binar operator.

@div

Binar operator.

Logical

@not

Unar operator.

@and

Binar operator.

@or

Binar operator.

Comparation

@lt

Binar operator.

@le

Binar operator.

@eq

Binar operator.

@ge

Binar operator.

@gt

Binar operator.

Array operators

@map 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"
    ]
}