Core DataFlow namespace. Contains all the classes and methods related to building and interacting with basic data-flows. A data flow is a graph of connected nodes. When one node changes (i.e. its value changed) all its downstream nodes are notified of the new value so they can process it. If their own value changes as a result of this, then they notify their own downstream nodes, and so on and so forth, until the graph stabilises (i.e. no more changes in nodes).
See Introduction to data flows for an overview.
Classes
- AbstractList
- AbstractMap
- AnimatedFlowSource
- Color
- FlowSource
- FunctionSignature
- List
- Map
- OBoolean
- ONumber
- OString
- Proxy
- RootContext
- SimpleContext
- SlotManager
- Vector2
Members
-
<package, static> Config :string
-
DF Config
Type:
- string
Properties:
Name Type Default Description NODE_CREATION_THRESHOLD
string df.nodeCreationThreshold -
<static> currentExecutingNode :olympe.df.ExecutionContext|undefined
-
Stores the current executing node, that is the node used as creator node.
Type:
- olympe.df.ExecutionContext | undefined
-
<static> Enumerable :function
-
Type:
- function
-
<static> logger :olympe.logging.Channel|undefined
-
Used by the DF module, will be injected at runtime by the container.
Type:
- olympe.logging.Channel | undefined
-
<static> rootExecutingNode :olympe.df.ExecutionContext|undefined
-
Stores the root node, that is the node at the top of the nodes tree.
Type:
- olympe.df.ExecutionContext | undefined
Methods
-
<static> createFlowSource(valueType, callback [, debugName])
-
Creates a Flow Source of a specified type. A flow source is a special type of node that gets its value from an external source, like a timer or a UI event. This methods takes a simple callback that will be provided an instance of the
FlowSource
interface. Callingupdate
from this object will update the value of the node.Example:
const rng = olympe.df.createFlowSource(olympe.df.ONumber, (source) => { setInterval( () => { source.update(olympe.df.oNumber(Math.floor(Math.random() * 100) + 1)); }, 1000 ); } );
Creates a data flow that generates a new random number every second.
Parameters:
Name Type Argument Default Description valueType
function The type of the data flow
callback
olympe.df.FlowSourceCallback.<T> The initialisation callback that will receive the updater
debugName
string <optional>
'flowSource' An optional name for debugging purposes.
- Deprecated:
-
- User
newFlowSource
instead.
- User
Returns:
the created data-flow
- Type
- olympe.df.Proxy.<T> | T
-
<static> createNode( [valueType] [, processingFunction] [, processingScope] [, args] [, argsToResolve] [, debugName] [, debug] [, alternateCallingAFunction])
-
Creates a node.
Parameters:
Name Type Argument Description valueType
function | Object <optional>
Type of the value of the node (i.e. the constructor of the value of the node)
processingFunction
function | string <optional>
The internal node function, called as soon as all arguments and scope are ready
processingScope
olympe.df.Node | Object <optional>
The scope of the internal function, can be a Node as well. If it's a node it needs to be resolved before running the function (i.e. a function cannot be run with an unresolved 'this')
args
Array <optional>
<nullable>
Array of values (can include nodes, if nodes needs to be resolved then specify their index in argsToResolve)
argsToResolve
Array.<number> <optional>
<nullable>
An array containing the index of the arguments to be resolve (zero based)
debugName
string <optional>
Name to be displayed for the node in debug mode
debug
boolean <optional>
Turn this to true to get debugging information for this node, nota: can be highly verbose
alternateCallingAFunction
function <optional>
Function to handle method calls on the proxy. This is needed for some specific nodes
- See:
Returns:
the created
Node
- Type
- olympe.df.Node.<T>
-
<static> createNodeExecutingContext(logger)
-
Creates the root executing node and set it as current node Note: this helper should only be used in container run callbacks !
Parameters:
Name Type Description logger
olympe.logging.Channel -
<static> createProxy( [type] [, initialValue] [, debugName])
-
Creates a proxy for a specific class with an optional initial value.
Parameters:
Name Type Argument Description type
function | Object <optional>
Type of the proxy.
initialValue
olympe.df.Proxy.<T> | olympe.df.Node.<T> | T <optional>
Initial value of the proxy.
debugName
string <optional>
An optional name for debugging purposes.
- See:
Returns:
- Type
- olympe.df.Proxy.<T> | T
-
<static> dumpContextStack()
-
Logs on the console the name of the current context and of its ancestors
-
<static> dumpDataFlow(proxy [, info] [, displayStack])
-
Dumps a proxy to the console.
Parameters:
Name Type Argument Default Description proxy
olympe.df.Proxy <nullable>
Proxy object to dump
info
string <optional>
Informational message
displayStack
boolean <optional>
false true
to display a stack trace. -
<static> dumpObjectNode(node [, info] [, displayStack])
-
Dumps a node's values to the console
Parameters:
Name Type Argument Default Description node
olympe.df.Node <nullable>
Node to dump
info
string <optional>
Informational message
displayStack
boolean <optional>
false Wether to display a stack trace or not
-
<static> fakeCurrentExecutingNode(nodeToUseAsCreator, callback, args)
-
Executes the specified callback in the context of another node.
Parameters:
Name Type Argument Description nodeToUseAsCreator
olympe.df.Node Node to use as current executing node.
callback
function Callback function to execute
args
* <repeatable>
arguments to pass to the callback
- Deprecated:
-
- Use
olympe.df.ExecutionContext.run()
instead.
- Use
Returns:
Return value of the callback if any
- Type
- *
-
<static> fromJSON(json)
-
Parameters:
Name Type Description json
string | Object Returns:
- Type
- *
-
<static> getCurrentContext()
-
Returns the current execution context.
Returns:
-
<static> getCurrentValue(nodeOrProxy [, defaultValue])
-
Gets the current value of the specified node or proxy. When a
Node
hasn't been resolved yet the provided default value is returned.Parameters:
Name Type Argument Description nodeOrProxy
olympe.df.Node.<T> | olympe.df.Proxy.<T> | olympe.df.FlowSource.<T> Node
,Proxy
or other object to get the current value from.defaultValue
T <optional>
Optional default value to return if the current value is undefined.
Returns:
- Type
- T | undefined
-
<static> getGlobalContext()
-
Returns the Global Execution Context, also known as the root node. That context can not be destroyed.
Returns:
-
<static> if(testValue, callbackIfTrue [, callbackIfFalse] [, returnType] [, callbackArgs] [, debugName])
-
Create a 'If' node with two callbacks. The first one is triggered when the test value is true and the second, optional, one when the test value is false.
Parameters:
Name Type Argument Description testValue
olympe.df.POBoolean | olympe.df.FlowSource.<olympe.df.OBoolean> | boolean | olympe.df.Node The boolean expression to test.
callbackIfTrue
function Can return a value of type T
callbackIfFalse
function <optional>
Can return a value of type T
returnType
function <optional>
the return type of the callbacks.
callbackArgs
Array <optional>
Arguments to pass to the callbacks.
debugName
string <optional>
An optional name for debugging purposes.
Returns:
The created Proxy.
- Type
- T | olympe.df.Proxy.<T>
-
<static> isExecutionContext(value)
-
Checks whether an object is an
ExecutionContext
.Parameters:
Name Type Description value
* The object to be tested.
- See:
Returns:
true
if this object is anExecutionContext
.- Type
- boolean
-
<static> isFlowSource(value)
-
Checks whether an object is a
FlowSource
.Parameters:
Name Type Description value
* The object to be tested.
- See:
Returns:
true
if this object is anFlowSource
.- Type
- boolean
-
<static> isNode(value)
-
Checks whether an object is a Node.
Parameters:
Name Type Description value
* The object to be tested
- See:
Returns:
true is the object is a Node.
- Type
- boolean
-
<static> isNodeOrProxy(value)
-
Checks whether an object is a Node or a Proxy.
Parameters:
Name Type Description value
* The object to be tested.
- See:
Returns:
true
if the object is aNode
or aProxy
.- Type
- boolean
-
<static> isPrimitiveOType(value)
-
Check whether a value is a primitive olympe type
olympe.df.OBoolean
,olympe.df.ONumber
, orolympe.df.OString
.Parameters:
Name Type Description value
* Returns:
- Type
- boolean
-
<static> isProxy(value)
-
Checks whether an object is a Proxy or not.
Parameters:
Name Type Description value
* The object to be tested.
- See:
Returns:
true
if the object is a Proxy.- Type
- boolean
-
<static> newAnimatedFlowSource(duration [, easingFunction])
-
Creates an animated numerical Flow Source, that smoothly transitions, over the specified duration, to the new value when it is updated.
Example:
const animatedAngle = olympe.df.newAnimatedFlowSource(200) .setEasing(olympe.df.ONumber.EASING.EaseOutQuad); olympe.df.if(isCollapsedFS.getFlow(), () => animatedAngle.update(0), () => animatedAngle.update(90));
Creates a data flow that smoothly transition between 90 and 0 degrees over a 200 milliseconds period.
Parameters:
Name Type Argument Default Description duration
olympe.df.PONumber | number The duration in milliseconds.
easingFunction
olympe.df.ONumber.EASING <optional>
olympe.df.ONumber.EASING.LinearTween The optional easing function.
Returns:
the created FlowSource
-
<static> newFlowSource(valueType [, debugName])
-
Creates a Flow Source of a specified type. A flow source is a special type of node that gets its value from an external source, like a timer or a UI event.
Example:
const rng = olympe.df.newFlowSource(olympe.df.ONumber); setInterval( () => { rng.update(olympe.df.oNumber(Math.floor(Math.random() * 100) + 1)); }, 1000 ); const random = rng.getFLow();
Creates a data flow that generates a new random number every second.
Parameters:
Name Type Argument Default Description valueType
function The type of the data flow
debugName
string <optional>
'flowSource' An optional name for debugging purposes.
Returns:
the created FlowSource
- Type
- olympe.df.FlowSource.<T>
-
<static> oAnimate(value, duration [, animationFunction] [, onDone])
-
Compute the animation with requestAnimationFrame. A new duration value is not taken into account if there is an animation running.
Parameters:
Name Type Argument Description value
olympe.df.ONumber | number | olympe.df.Proxy | olympe.df.Node duration
olympe.df.ONumber | number | olympe.df.Proxy | olympe.df.Node animationFunction
function <optional>
animation function takes as first parameter a number between 0 and 1 (time) and returns a number (the position)
onDone
olympe.df.ONumber.AnimateCallback <optional>
function to be called when animation is finished
Returns:
- Type
- olympe.df.PONumber
-
<static> oBoolean( [value])
-
Returns an instance of
OBoolean
. This static factory is the preferred way to createOBooleans
as it avoids creating unnecessary instances.Parameters:
Name Type Argument Default Description value
olympe.df.OBoolean | boolean | Boolean <optional>
<nullable>
false The boolean value to assign to this
OBoolean
Returns:
The instance of
OBoolean
- Type
- olympe.df.OBoolean
-
<static> oDateTime(date)
-
Returns an instance of
ODateTime
. This static factory is the preferred way to createODateTimes
.Parameters:
Name Type Description date
Date Returns:
The instance of
ODateTime
.- Type
- olympe.df.ODateTime
-
<static> onResolved(nodeOrProxy, callback [, returnType] [, debugName])
-
Executes the callback when the node (or proxy) is resolved. This creates a node with a single entry, the callback as the associated function and the specified return type.
Parameters:
Name Type Argument Description nodeOrProxy
olympe.df.Node.<T> | olympe.df.Proxy.<T> | olympe.df.FlowSource.<T> | T The node or proxy to use as entry for the node
callback
function The function to invoke when the entry node is resolved and every time it is updated.
returnType
function <optional>
The return type of the function. Default is
undefined
, which means no return value.debugName
string <optional>
An optional name for debugging purposes.
Returns:
The created
Node
- Type
- olympe.df.Node.<T> | T
-
<static> oNumber( [value])
-
Returns an instance of
ONumber
. Default value is ZERO. This is the preferred way to createONumbers
as it is optimised to avoid creating unnecessary instances.Parameters:
Name Type Argument Default Description value
olympe.df.ONumber | number | Number <optional>
0 The numerical value to assign to this
ONumber
Returns:
The instance of
ONumber
.- Type
- olympe.df.ONumber
-
<static> oString( [value])
-
Returns an instance of
OString
. This will attempt to convert the value passed in the argument into a string. For instanceoString(false)
will return anOString
containing"false"
whileoString(102)
with return anOString
containing"102"
. This is the preferred way to createOStrings
as it is optimised to avoid creating unnecessary instances.Parameters:
Name Type Argument Default Description value
olympe.df.OString | olympe.df.ONumber | olympe.df.OBoolean | string | number | boolean | String <optional>
'' The value to convert into an
OString
.Returns:
The instance of
OString
- Type
- olympe.df.OString
-
<static> pColor( [r] [, g] [, b] [, a])
-
Creates a proxy of Color. This function can be invoked in two forms:
var c1 = pColor(color); // Creates a proxy of an existing Color instance var c2 = pColor(255, 255, 255, 0.5); // Creates a Color and its associated Proxy.
Parameters:
Name Type Argument Default Description r
number | olympe.df.PONumber | olympe.df.Color | olympe.df.Node <optional>
0 The red channel initial value, or the initial
olympe.df.Color
.g
number | olympe.df.PONumber | olympe.df.Node <optional>
0 The green channel initial value.
b
number | olympe.df.PONumber | olympe.df.Node <optional>
0 The blue channel initial value.
a
number | olympe.df.PONumber | olympe.df.Node <optional>
1 The alpha channel initial value, default value is 1 (opaque).
Returns:
The created Proxy.
- Type
- olympe.df.PColor
-
<static> pOBoolean( [value])
-
Creates a proxy of a
OBoolean
. If no value is specified the created proxy will be 'unresolved'.Parameters:
Name Type Argument Description value
olympe.df.OBoolean | boolean | olympe.df.Proxy | olympe.df.Node <optional>
The initial value to assign to this
OBoolean
Returns:
The created proxy.
- Type
- olympe.df.POBoolean
-
<static> pODateTime( [date])
-
Creates a proxy of a ODateTime.
Parameters:
Name Type Argument Description date
Date <optional>
Returns:
The created proxy.
- Type
- olympe.df.PODateTime
-
<static> pONumber( [value])
-
Creates a proxy of an
ONumber
. If no value is specified the created proxy will be 'unresolved'.Parameters:
Name Type Argument Description value
olympe.df.PONumber | number | olympe.df.Node <optional>
The initial value.
Returns:
The created proxy.
- Type
- olympe.df.PONumber
-
<static> pOString( [value])
-
Creates a proxy of an
OString
. If no value is specified the created proxy will be 'unresolved'.Parameters:
Name Type Argument Description value
olympe.df.POString | string | number | boolean | olympe.df.Node <optional>
The initial value.
Returns:
The created proxy.
- Type
- olympe.df.POString
-
<static> processFlows(flows, processFunction [, debugName])
-
Applies a specified processing to a set of flows. The processing function is called every time the value of one of the flows changes and all flows have a valid value.
Important Note: If none of the elements in the array are flows (i.e. they are all fixed values), the execution happens immediately and only once.
Example:
olympe.df.processFlows( [p], v => { console.log(`value changed to ${v.valueOf()}`); } );
Parameters:
Name Type Argument Default Description flows
Array the set of flows to process
processFunction
function the processing function to apply to the flows
debugName
string <optional>
'processFlows' An optional name for debugging purposes.
-
<static> processFlowsOnce(flows, processFunction [, debugName])
-
Applies a specified processing to a set of flows only once. The processing function is called once all flows have a valid value.
Example:
olympe.df.processFlowsOnce( [p], v => { console.log(`value changed to ${v.valueOf()}`); } );
Parameters:
Name Type Argument Default Description flows
Array the set of flows to process
processFunction
function the processing function to apply to the flows
debugName
string <optional>
'processFlowsOnce' An optional name for debugging purposes.
-
<static> processFutureFlows(flows, processFunction [, debugName])
-
Applies a specified processing to a set of flows, but does not execute immediately even if all flows are resolved at invocation time. The processing function is called every time the value of one of the flows changes and all flows have a valid value.
Note: If none of the flows are actual flows (Proxy, FlowSource, or Node) then this becomes a no-op.
Example:
olympe.df.processFutureFlows( [p], v => { console.log(`value changed to ${v.valueOf()}`); } );
Parameters:
Name Type Argument Default Description flows
Array the set of flows to process
processFunction
function the processing function to apply to the flows
debugName
string <optional>
'processFlows' An optional name for debugging purposes.
-
<static> processFutureFlowsOnce(flows, processFunction [, debugName])
-
Applies a specified processing to a set of flows, but does not execute immediately even if all flows are resolved at invocation time, and only once. The processing function is called the first time the value of one of the flows changes and all flows have a valid value.
Note: If none of the flows are actual flows (Proxy, FlowSource, or Node) then this becomes a no-op.
Example:
olympe.df.processFutureFlowsOnce( [p], v => { console.log(`value changed to ${v.valueOf()}`); } );
Parameters:
Name Type Argument Default Description flows
Array the set of flows to process
processFunction
function the processing function to apply to the flows
debugName
string <optional>
'processFlows' An optional name for debugging purposes.
-
<static> pVector2( [x] [, y])
-
Creates a proxy of a
Vector2
. If x or y is defined creates a initialised node otherwise returns an unresolved typed node.Parameters:
Name Type Argument Default Description x
olympe.df.PONumber | number | olympe.df.Node <optional>
0 Initial value for the
x
coordinate.y
olympe.df.PONumber | number | olympe.df.Node <optional>
0 Initial value for the
y
coordinate.Returns:
The created Proxy.
- Type
- olympe.df.PVector2
-
<static> setCurrentContext(context)
-
Sets the current executing context to the specified one. Returns the previous one.
Parameters:
Name Type Description context
olympe.df.ExecutionContext The new execution context.
Returns:
Previous context.
-
<static> setDefaultValue(nodeOrProxy, value)
-
Sets the default value for a data flow. This is the value that this flow will revert back to when it is unresolved.
Parameters:
Name Type Description nodeOrProxy
olympe.df.Proxy.<T> | olympe.df.Node.<T> | olympe.df.FlowSource.<T> The data flow.
value
T | olympe.df.Proxy.<T> The value to use as a default.
Returns:
- Type
- !olympe.df.Proxy.<T> | !olympe.df.Node.<T>
-
<static> syncNodes(nodesOrProxies, callback [, returnType] [, debugName])
-
Triggers the callback when all the nodes have a value and when any of the nodes is updated with a new value.
Parameters:
Name Type Argument Description nodesOrProxies
Array The nodes, or proxies, to synchronize.
callback
function The function to execute.
returnType
function <optional>
The return type of the callback. Default is 'undefined'.
debugName
string <optional>
An optional name for debugging purposes.
Returns:
The created node.
- Type
- olympe.df.Node.<T>
-
<static> syncProxies(nodesOrProxies, callback [, returnType] [, debugName])
-
Triggers the callback when all the nodes have a value and when any of them is updated with a new value. In essence this creates an anonymous node whose function is the callback and the upstream nodes (or parameters) are the proxies specified as argument.
Example:
olympe.df.syncProxies( [p], v => { console.log(`value changed to ${v.valueOf()}`); } );
Parameters:
Name Type Argument Default Description nodesOrProxies
Array The nodes, or proxies, to synchronize.
callback
function the function to execute
returnType
function <optional>
the return type of the callback function, default is
undefined
debugName
string <optional>
'syncProxies' An optional name for debugging purposes.
Returns:
A proxy to the return value of the callback.
- Type
- olympe.df.Proxy.<T> | T
-
<static> syncProxiesOnce(nodesOrProxies, callback [, returnType] [, debugName])
-
Wait for all the proxies to be resolved, and execute the callback only once.
Parameters:
Name Type Argument Default Description nodesOrProxies
Array The nodes, or proxies, to synchronize.
callback
function the function to execute
returnType
function <optional>
the return type of the callback function
debugName
string <optional>
'syncProxiesOnce' An optional name for debugging purposes.
-
<static> transformFlows(flows, transformFunction, returnType [, debugName] [, defaultValue])
-
Creates a data flow that is the result of transforming, via the specified transformation function, a set of flows. The transformation function is called every time the value of one of the flows changes and all flows have a valid value.
Important Note: If none of the elements in the array are flows (i.e. they are all fixed values), the execution happens immediately and only once, in which case the results is also a fixed value.
Example:
res = olympe.df.transformFlows( [a1, a2], (v1, v2) => olympe.df.oNumber(v1.valueOf() ** v2.valueOf()), olympe.df.ONumber );
Parameters:
Name Type Argument Default Description flows
Array The set of flows to transform.
transformFunction
function The transformation function to apply to the flows.
returnType
function The return type of the transformation function.
debugName
string <optional>
'TransformFlows' An optional name for debugging purposes.
defaultValue
T <optional>
An optional default value to use when the flow is unresolved.
Returns:
The resulting data-flow or value.
- Type
- !olympe.df.Proxy.<T> | T
-
<static> withCurrentExecutingNode(callback)
-
Returns a function that wraps the specified callback in the context of the current executing node.
Parameters:
Name Type Description callback
function The function to wrap.
- Deprecated:
-
- Use
olympe.df.ExecutionContext.boundTo()
instead.
- Use
Returns:
The created function.
- Type
- function
Type Definitions
-
FlowSourceCallback(setter)
-
Flow source callback. Takes a
FlowSource
parameter.Parameters:
Name Type Description setter
olympe.df.FlowSource -
PColor
-
Type:
-
POBoolean
-
Type:
-
PODateTime
-
Type:
-
PONumber
-
Type:
-
POString
-
Type:
-
PPrimitive
-
Type:
- olympe.df.POString | olympe.df.PONumber | olympe.df.POBoolean | olympe.df.PODateTime | olympe.df.PColor
-
PVector2
-
Type: