@swim/dataflow implements a compiler from
@swim/structure
selectors, operators, and functions, to continuously updated data structures
driven by @swim/streamlet
dataflow graphs. @swim/dataflow turns dynamic data structures into living
documents. @swim/dataflow is written in TypeScript, but can be used from
either TypeScript or JavaScript. @swim/dataflow is part of the
@swim/core framework.
A live updated data structure is represented as a RecordScope, which extends
Record from @swim/structure. An ordinary Record can be recursively
compiled into a RecordScope by invoking the RecordScope.from factory method.
A compiled RecordScope has all of its nested expressions replaced by their
evaluated state. But unlike evaluating a Record with an Interpreter, if a
member of a RecordScope changes, all expressions that transitively depend on
that member get flagged for recomputation, which occurs the next time
recohereInput gets invoked on the RecordScope.
The Dataflow.compile method can also be used to compile an arbitrary
@swim/structure expression into an Outlet that updates whenever
the state of any of its transitively dependend expressions changes.
For an npm-managed project, npm install @swim/dataflow to
make it a dependency. TypeScript sources will be installed into
node_modules/@swim/dataflow/main. Transpiled JavaScript and TypeScript
definition files install into node_modules/@swim/dataflow/lib/main.
And a pre-built UMD script can be found in
node_modules/@swim/dataflow/dist/main/swim-dataflow.js.
Browser applications can load swim-core.js, which comes bundled with the
@swim/dataflow library, directly from the SwimOS CDN.
<!-- Development --><scriptsrc="https://cdn.swimos.org/js/latest/swim-core.js"></script><!-- Production --><scriptsrc="https://cdn.swimos.org/js/latest/swim-core.min.js"></script>
Alternatively, the standalone swim-system.js script may be loaded
from the SwimOS CDN, which bundles @swim/dataflow together with all other
@swim/system
libraries.
<!-- Development --><scriptsrc="https://cdn.swimos.org/js/latest/swim-system.js"></script><!-- Production --><scriptsrc="https://cdn.swimos.org/js/latest/swim-system.min.js"></script>
When loaded by a web browser, the swim-core.js script adds all
@swim/dataflow library exports to the global swim namespace.
The swim-system.js script also adds all @swim/dataflow library exports
to the global swim namespace, making it a drop-in replacement for
swim-core.js when additional @swim/system libraries are needed.
@swim/dataflow
@swim/dataflow implements a compiler from @swim/structure selectors, operators, and functions, to continuously updated data structures driven by @swim/streamlet dataflow graphs. @swim/dataflow turns dynamic data structures into living documents. @swim/dataflow is written in TypeScript, but can be used from either TypeScript or JavaScript. @swim/dataflow is part of the @swim/core framework.
Overview
A live updated data structure is represented as a
RecordScope, which extendsRecordfrom @swim/structure. An ordinaryRecordcan be recursively compiled into aRecordScopeby invoking theRecordScope.fromfactory method. A compiledRecordScopehas all of its nested expressions replaced by their evaluated state. But unlike evaluating aRecordwith anInterpreter, if a member of aRecordScopechanges, all expressions that transitively depend on that member get flagged for recomputation, which occurs the next timerecohereInputgets invoked on theRecordScope.The
Dataflow.compilemethod can also be used to compile an arbitrary @swim/structure expression into anOutletthat updates whenever the state of any of its transitively dependend expressions changes.Installation
npm
For an npm-managed project,
npm install @swim/dataflowto make it a dependency. TypeScript sources will be installed intonode_modules/@swim/dataflow/main. Transpiled JavaScript and TypeScript definition files install intonode_modules/@swim/dataflow/lib/main. And a pre-built UMD script can be found innode_modules/@swim/dataflow/dist/main/swim-dataflow.js.Browser
Browser applications can load
swim-core.js, which comes bundled with the @swim/dataflow library, directly from the SwimOS CDN.Alternatively, the standalone
swim-system.jsscript may be loaded from the SwimOS CDN, which bundles @swim/dataflow together with all other @swim/system libraries.Usage
ES6/TypeScript
@swim/dataflow can be imported as an ES6 module from TypeScript and other ES6-compatible environments.
CommonJS/Node.js
@swim/dataflow can also be used as a CommonJS module in Node.js applications.
Browser
When loaded by a web browser, the
swim-core.jsscript adds all @swim/dataflow library exports to the globalswimnamespace.The
swim-system.jsscript also adds all @swim/dataflow library exports to the globalswimnamespace, making it a drop-in replacement forswim-core.jswhen additional @swim/system libraries are needed.