polyflow
Version:
A flow-based programming framework
65 lines (54 loc) • 1.57 kB
JavaScript
'use strict';
module.exports = function (polyflow) {
var Builder = function (build) {
this.build = build;
};
Builder.prototype.$initialize = function (source) {
this.source = source;
};
Builder.prototype.as = function (value, key) {
return this.build({
inputs: {
src: this.source,
},
outputs: {
out: {
value: value || null,
key: key || null
}
}
});
};
polyflow.nano('core.forEach', {
shortcut: 'forEach',
Builder: Builder,
inputs: ['src'],
outputs: {
out: {
subflow: true,
args: ['value', 'key']
},
$finished: []
},
allowMultipleOutputs: true,
fn: function ($inputs, $outputs, $flow) {
var keys = Object.keys($inputs.src);
if (keys.length === 0) {
$outputs.$finished();
$outputs.$done();
}
var counter = keys.length;
keys.forEach(function (key) {
var subflow = $flow.$createSubflow();
subflow.$on('die', function () {
--counter;
if (counter === 0) {
$outputs.$finished();
$outputs.$done();
}
});
$outputs.out(subflow, $inputs.src[key], key);
});
}
});
};