Package Exports
- polyflow
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (polyflow) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
PolyFlow
PolyFlow is a flow-based programming framework. It is made to be highly asynchronous.
Nano
A nano is an elementary component of a graph.
var param = {
inputs: ['in1', 'in2'],
outputs: {
out: ['out1'], /* standard output */
other: ['out1', 'out2']
err: ['error']
}
}
polyflow.nano('nano1', param, function ($inputs, $outputs) {
if (/* condition */) {
$outputs.out($inputs.in1 + $inputs.in2);
} else if (/* condition */) {
$outputs.other($inputs.in1, $inputs.in2)
} else {
$outputs.err(new Error('error'));
}
});Graph
A graph defines a workflow.
var graph = polyflow.graph('graph');
graph.begin()
.then('nano1', 'A') /* named node */
.then('nano2')
.then('nano3')
.label('B')
.then('nano6');
/* ... */
graph.select('A').on('other')
.then('nano4')
.then('nano5')
.then('B');
graph.select('A').on('err')
.then(function ($flow) {
console.log($flow.error);
});
var network = graph.compile();
network.digest({
in1: 1,
in2: 2
});Binder
Inputs and/or outputs of nano could be bound to something in the flow or to a constant value. For example:
var graph = polyflow.graph('graph');
graph.begin()
.then('nano1', 'A') /* named node */
.then('nano2')
/* ... */
graph.select('A')
.bind.input('in1').to('obj1')
.bind.input('in2').to([1, 2, 3])
.bind.output('out', 'out1').to('obj1.field')
/* ... */
var network = graph.compile();
network.digest({
obj1: 1
});Shortcut
A nano could defined a shortcut. Shortcuts are used to define a graph. For example:
var graph = polyflow.graph('graph');
graph.begin()
.set('values', [])
.forEach([1, 2, 3]).as('value')
.append('value').to('values')
.end()
.then(function ($flow) {
console.log($flow.values);
});
var network = graph.compile();
network.digest();Service
PolyFlow has a dependency injection system which allows nano and/or service to depend on other services.
polyflow.service('service1', function () {
return /* the service */;
});
polyflow.service('service2', function (service1) {
return /* the service */;
});
polyflow.nano('nano1', param, function ($inputs, service2) {
/* ... */
});