Skip to content

Latest commit

 

History

History
90 lines (65 loc) · 2.4 KB

File metadata and controls

90 lines (65 loc) · 2.4 KB

jsonscript-js

JavaScript interpreter for JSONScript

Build Status npm version Code Climate Coverage Status

Install

npm install jsonscript-js

Getting started

Sequential execution of script commands:

var JSONScript = require('jsonscript-js');
var js = JSONScript();

js.addExecutor('router', getRouter());

var script = [
  { '$$router': { path: '/resource/1' } },
  { '$$router.put': { path: '/resource/1', body: { test: 'test' } } }
];

js.evaluate(script).then(function (res) {
  console.log(res);
  /**
   *  [
   *    { response: 'loaded /resource/1' },
   *    { response: 'updated /resource/1 with {"test":"test"}' }
   *  ]
   */
});


function getRouter() {
  function router(args) {
    return router.get(args);
  }

  router.get = function (args) {
    var response = 'loaded ' + args.path;
    return Promise.resolve({ response: response });
  };

  router.put = function (args) {
    var body = JSON.stringify(args.body);
    var response = 'updated ' + args.path + ' with ' + body;
    return Promise.resolve({ response: response });
  };

  return router;
}

In the example above the second request is sent only after the first result is received, so you can both get the current resource value and and update it in one script call.

Parallel execution:

var script = {
  res1: { '$$router.get': { path: '/resource/1' } },
  res2: { '$$router.get': { path: '/resource/2' } }
};

js.evaluate(script).then(function (res) {
  console.log(res);
  /**
   *  {
   *    res1: { response: 'loaded /resource/1' },
   *    res2: { response: 'loaded /resource/2' }
   *  }
   */
});

In the example above the second request is sent in parallel, without waiting for the response from the first request.

Language

See JSONScript language documentation for more information.