'use strict' let $module /* let contextProto = this.context; while (contextProto = Object.getPrototypeOf(contextProto)) { completionGroups.push(Object.getOwnPropertyNames(contextProto)); } */ function handle (data) { let idx = data.idx , child = data.child , method = data.method , args = data.args , callback = function () { let _args = Array.prototype.slice.call(arguments) if (_args[0] instanceof Error) { let e = _args[0] _args[0] = { '$error' : '$error' , 'type' : e.constructor.name , 'message' : e.message , 'stack' : e.stack } Object.keys(e).forEach(function(key) { _args[0][key] = e[key] }) } process.send({ idx: idx, child: child, args: _args }) } , exec if (method == null && typeof $module == 'function') exec = $module else if (typeof $module[method] == 'function') exec = $module[method] if (!exec) return console.error('NO SUCH METHOD:', method) exec.apply(null, args.concat([ callback ])) } process.on('message', function (data) { if (!$module) return $module = require(data.module) if (data == 'die') return process.exit(0) handle(data) })