Valence
view release on metacpan or search on metacpan
valence/app/valence.js view on Meta::CPAN
//
// Copyright 2015-2016 Doug Hoyte
//
// This project is licensed under the 2-clause BSD license.
//
"use strict";
var readline = require('readline');
var object_map = {};
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false
});
rl.on('line', function(line) {
var msg = JSON.parse(line);
if (msg['cmd'] === 'call') {
// Acquire object
var obj;
if (msg['obj'] === undefined) {
obj = module;
} else {
obj = object_map[msg['obj']];
}
// Manipulate arguments
if (msg['args_cb']) {
msg['args_cb'].map(function(spec) {
var cb_id = spec[1];
msg['args'][spec[0]] = (function() {
var args_array = [];
for (var i=0; i<arguments.length; i++) {
args_array.push(arguments[i]);
}
var output = {
cmd: 'cb',
cb: cb_id,
args: args_array
};
process.stdout.write(stringify(output) + "\n");
});
});
}
// Execute call
var result;
if (msg['method'] === 'new') {
// FIXME: how to get this to work with variable number of args?
result = new obj(msg['args'][0]);
} else {
result = obj[msg['method']].apply(obj, msg['args'] || []);
}
( run in 0.761 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )