0.1.2 • Published 5 years ago

@derhuerst/flow-of-computations v0.1.2

Weekly downloads
1
License
ISC
Repository
github
Last release
5 years ago

@derhuerst/flow-of-computations

Filter, transform and merge sets of data.

  • A directed acyclic graph of operations. Each operation gets data from its >=1 predecessors and transforms it.
  • Data sources can be static or streaming/live, as they emit diffs (looks like asplice call) just like every operation.
  • The computation of the whole graph is done step by step via an iterator.

npm version build status ISC-licensed minimum Node.js version chat with me on Gitter support me on Patreon

Installation

npm install @derhuerst/flow-of-computations

Usage

const {withStore, createFlow, flowRunner} = require('@derhuerst/flow-of-computations')
const {add, zip, sum, print} = require('@derhuerst/flow-of-computations/ops')

// Our data sources, called inputs. Each is a list of diffs.
const dataSourceA = [
	[0, 0, [10, 20, 30]], // insert 10, 20, 30
	[1, 1, [50]] // replace 2nd by 50
] // evaluates to [10, 50, 30]
const dataSourceB = [
	[0, 0, [10, 100, 1000]] // insert 10, 100, 1000
] // evaluates to [10, 100, 1000]

// Use withStore to access the data of an operation (all diffs "applied") at any time.
const sumOp = withStore(sum())

const zipOp = zip(2)
const flow = createFlow([ // list of data sources
	dataSourceA, dataSourceB
], [ // list of op connections
	[dataSourceA, add(3), zipOp],
	[dataSourceB, zipOp],
	[zipOp, sumOp, print('diff printer')]
])

// Because our data sources are static, we can use a loop to iterate over each step of
// the computation.
for (const _ of flowRunner(flow)) {}
console.log('data in sumOp:', sumOp.data())
diff printer { idx: 0, del: 0, newItems: [ 13, 23, 33 ] }
diff printer { idx: 0, del: 3, newItems: [ 23, 123, 1033 ] }
diff printer { idx: 0, del: 3, newItems: [ 23, 153, 1033 ] }
data in sumOp: [ 23, 153, 1033 ]

Contributing

If you have a question or need support using @derhuerst/flow-of-computations, please double-check your code and setup first. If you think you have found a bug or want to propose a feature, refer to the issues page.