Skip to content

easily create dsl's from json by evaluating json keys and values, json decode on steroids

License

Notifications You must be signed in to change notification settings

coderofsalvation/json-dsl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Generate your own minilanguages fast using json as a startingpoint. No parsetrees, no lexical analyzers, just plain json.

Usage

$ npm install json-dsl

in your code

jdsl = require('json-dsl').parse
output = jdsl( yourjson )

basics: xml

By default nested json is converted into xml

{
  "div": {
    "div": {
      "div": "foo"
    }
  }
}

gets converted into

<div><div><div>foo</div></div></div>

customize key evaluation

lets evaluate the keys in a different way:

jsondsl = require('json-dsl')
jsondsl.parseKey = function(k) {
  return k + "[%s]";
};
output = jdsl( yourjson )

output:

div[div[div[foo]]]

customize value evaluation

lets take the previous example and lets add parseValue

data = { foo: "bar" }
jsondsl.parseValue = function(v,data) {
  return data[v]
}
output = jdsl( yourjson, data )

output:

div[div[div[bar]]]

example: html template language

NOTE: the dsl below is a stripped down version of the brown template engine, a hyperminimalistic template dsl which borrows from emmet and mustache.

setup dsl:

var jdsl = require('json-dsl');
var zen = require('zen-coding');

jdsl.parseKey = function(k) {
  return zen(k + '>{%s}');
};

jdsl.parseValue = function(v, data) {
  return data[v];
};

lets test it:

var json = {
  'div#foo.flop>fieldset>div>ul': {
    'li.one>a[href="/"]': 'one',
    'li.two>a[href="/"]': 'two'
  }
};

var data = {
  'one': 'hello',
  'two': 'world'
};

console.log(JSON.stringify(json, null, 2));
console.log(jdsl.parse(json, data));

outputs:

<div id="foo" class="flop"><fieldset><div><ul><li class="one"><a href="/">hello</a></li><li class="two"><a href="/">world</a></li></ul></div></fieldset></div>

About

easily create dsl's from json by evaluating json keys and values, json decode on steroids

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Packages

No packages published