Code Monkey home page Code Monkey logo

json-pn's Introduction

json-pn

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

json-pn's People

Contributors

dmshpak avatar

Stargazers

Yevhenii Ponomar avatar

Watchers

 avatar

Forkers

gcoda

json-pn's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.