JavaScript interpreter for JSONScript
npm install jsonscript-js
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.
See JSONScript language documentation for more information.