exports.id = 'code'; exports.title = 'Code'; exports.group = 'Common'; exports.color = '#656D78'; exports.input = true; exports.output = 1; exports.author = 'Peter Širka'; exports.icon = 'code'; exports.version = '1.2.0'; exports.options = { outputs: 1, code: 'send(0, value);', keepmessage: true }; exports.html = `
@(Number of outputs)
@(Minimum is 1)
@(Code)
@(Keep message instance)
`; exports.readme = `# Code This component executes custom JavaScript code as it is and it doesn't contain any secure scope. \`\`\`javascript // value {Object} contains received data // send(outputIndex, newValue) sends a new value // error(value) sends an error // instance {Object} a current component instance // flowdata {Object} a current flowdata // repository {Object} a current repository of flowdata // Example: // send() can be execute multiple times send(0, value); \`\`\``; exports.install = function(instance) { var fn; instance.on('data', function(response) { if (fn) { try { fn(response.data, instance, response, instance.options, response.repository, require); } catch (e) { response.data = e; instance.throw(response); } } }); instance.reconfigure = function() { try { if (instance.options.code) { instance.status(''); var code = 'var send = function(index, value) { if (options.keepmessage) { flowdata.data = value; instance.send2(index, flowdata); } else instance.send2(index, value);}; var error = function(err) { instance.throw(err); }; ' + instance.options.code; fn = new Function('value', 'instance', 'flowdata', 'options', 'repository', 'require', code); } else { instance.status('Not configured', 'red'); fn = null; } } catch (e) { fn = null; instance.error('Code: ' + e.message); } }; instance.on('options', instance.reconfigure); instance.reconfigure(); };