@ifc-lite/flow 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +373 -0
- package/README.md +63 -0
- package/dist/availability.d.ts +28 -0
- package/dist/availability.d.ts.map +1 -0
- package/dist/availability.js +37 -0
- package/dist/availability.js.map +1 -0
- package/dist/digest.d.ts +14 -0
- package/dist/digest.d.ts.map +1 -0
- package/dist/digest.js +73 -0
- package/dist/digest.js.map +1 -0
- package/dist/document.d.ts +73 -0
- package/dist/document.d.ts.map +1 -0
- package/dist/document.js +158 -0
- package/dist/document.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/introspect.d.ts +61 -0
- package/dist/introspect.d.ts.map +1 -0
- package/dist/introspect.js +51 -0
- package/dist/introspect.js.map +1 -0
- package/dist/lift.d.ts +58 -0
- package/dist/lift.d.ts.map +1 -0
- package/dist/lift.js +213 -0
- package/dist/lift.js.map +1 -0
- package/dist/orphans.d.ts +32 -0
- package/dist/orphans.d.ts.map +1 -0
- package/dist/orphans.js +73 -0
- package/dist/orphans.js.map +1 -0
- package/dist/prepare.d.ts +13 -0
- package/dist/prepare.d.ts.map +1 -0
- package/dist/prepare.js +40 -0
- package/dist/prepare.js.map +1 -0
- package/dist/registry.d.ts +99 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +44 -0
- package/dist/registry.js.map +1 -0
- package/dist/scheduler.d.ts +91 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +341 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/table.d.ts +64 -0
- package/dist/table.d.ts.map +1 -0
- package/dist/table.js +132 -0
- package/dist/table.js.map +1 -0
- package/dist/tracking.d.ts +86 -0
- package/dist/tracking.d.ts.map +1 -0
- package/dist/tracking.js +136 -0
- package/dist/tracking.js.map +1 -0
- package/dist/values.d.ts +102 -0
- package/dist/values.d.ts.map +1 -0
- package/dist/values.js +64 -0
- package/dist/values.js.map +1 -0
- package/dist/wiring.d.ts +20 -0
- package/dist/wiring.d.ts.map +1 -0
- package/dist/wiring.js +56 -0
- package/dist/wiring.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `*.flow.json` document: a git-diffable description of a graph.
|
|
3
|
+
*
|
|
4
|
+
* Hand-validated like extension manifests (no schema library), with a
|
|
5
|
+
* migration chain keyed on `flowVersion`. Positions live here; tracked
|
|
6
|
+
* element sets do not (they are model-specific and live in a sidecar, see
|
|
7
|
+
* `tracking.ts`).
|
|
8
|
+
*/
|
|
9
|
+
import type { Lacing } from './values.js';
|
|
10
|
+
export declare const FLOW_VERSION = 1;
|
|
11
|
+
export type TrackingMode = 'update' | 'replace' | 'disabled';
|
|
12
|
+
/** Player input kinds — what a form can ask for (Dynamo Player parity). */
|
|
13
|
+
export type InputKind = 'scalar' | 'enum' | 'entitySet' | 'storey' | 'file' | 'table';
|
|
14
|
+
export interface FlowNode {
|
|
15
|
+
readonly id: string;
|
|
16
|
+
readonly type: string;
|
|
17
|
+
readonly params?: Readonly<Record<string, unknown>>;
|
|
18
|
+
readonly lacing?: Lacing;
|
|
19
|
+
readonly tracking?: TrackingMode;
|
|
20
|
+
/** User-visible identity of a write node's output; drives GlobalIds. */
|
|
21
|
+
readonly trackingKey?: string;
|
|
22
|
+
readonly label?: string;
|
|
23
|
+
readonly pos?: readonly [number, number];
|
|
24
|
+
}
|
|
25
|
+
export interface FlowEdge {
|
|
26
|
+
readonly from: readonly [nodeId: string, port: string];
|
|
27
|
+
readonly to: readonly [nodeId: string, port: string];
|
|
28
|
+
}
|
|
29
|
+
/** "Is Input": a node param the Player form sets. */
|
|
30
|
+
export interface FlowInput {
|
|
31
|
+
readonly nodeId: string;
|
|
32
|
+
readonly param: string;
|
|
33
|
+
readonly label: string;
|
|
34
|
+
readonly kind: InputKind;
|
|
35
|
+
readonly options?: readonly string[];
|
|
36
|
+
}
|
|
37
|
+
/** "Is Output": a node port shown as a result. */
|
|
38
|
+
export interface FlowOutput {
|
|
39
|
+
readonly nodeId: string;
|
|
40
|
+
readonly port: string;
|
|
41
|
+
readonly label: string;
|
|
42
|
+
}
|
|
43
|
+
export interface FlowDocument {
|
|
44
|
+
readonly flowVersion: number;
|
|
45
|
+
readonly id: string;
|
|
46
|
+
readonly name: string;
|
|
47
|
+
readonly description?: string;
|
|
48
|
+
readonly capabilities: readonly string[];
|
|
49
|
+
readonly inputs: readonly FlowInput[];
|
|
50
|
+
readonly outputs: readonly FlowOutput[];
|
|
51
|
+
readonly nodes: readonly FlowNode[];
|
|
52
|
+
readonly edges: readonly FlowEdge[];
|
|
53
|
+
/** Per-graph override of the cross-lacing guard. */
|
|
54
|
+
readonly maxCross?: number;
|
|
55
|
+
}
|
|
56
|
+
export interface DocumentProblem {
|
|
57
|
+
readonly path: string;
|
|
58
|
+
readonly message: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Structural validation of an untrusted document. Node *types* are checked
|
|
62
|
+
* against a registry by the scheduler, not here, so a document can be
|
|
63
|
+
* validated without one.
|
|
64
|
+
*/
|
|
65
|
+
export declare function validateFlowDocument(value: unknown): DocumentProblem[];
|
|
66
|
+
/** Parse + validate; throws with every problem listed. */
|
|
67
|
+
export declare function parseFlowDocument(text: string): FlowDocument;
|
|
68
|
+
/**
|
|
69
|
+
* Migration chain: each step lifts `flowVersion` by one. There is only
|
|
70
|
+
* version 1 today; the chain exists so a v1 file keeps opening after v2.
|
|
71
|
+
*/
|
|
72
|
+
export declare function migrateFlowDocument(value: unknown): unknown;
|
|
73
|
+
//# sourceMappingURL=document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"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"}
|
package/dist/document.js
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
export const FLOW_VERSION = 1;
|
|
5
|
+
const LACINGS = ['shortest', 'longest', 'cross'];
|
|
6
|
+
const TRACKINGS = ['update', 'replace', 'disabled'];
|
|
7
|
+
const INPUT_KINDS = ['scalar', 'enum', 'entitySet', 'storey', 'file', 'table'];
|
|
8
|
+
function isRecord(v) {
|
|
9
|
+
return !!v && typeof v === 'object' && !Array.isArray(v);
|
|
10
|
+
}
|
|
11
|
+
function str(v) {
|
|
12
|
+
return typeof v === 'string' && v.length > 0;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Structural validation of an untrusted document. Node *types* are checked
|
|
16
|
+
* against a registry by the scheduler, not here, so a document can be
|
|
17
|
+
* validated without one.
|
|
18
|
+
*/
|
|
19
|
+
export function validateFlowDocument(value) {
|
|
20
|
+
const problems = [];
|
|
21
|
+
const add = (path, message) => problems.push({ path, message });
|
|
22
|
+
if (!isRecord(value))
|
|
23
|
+
return [{ path: '', message: 'must be an object' }];
|
|
24
|
+
if (value.flowVersion !== FLOW_VERSION)
|
|
25
|
+
add('flowVersion', `must be ${FLOW_VERSION} (run migrateFlowDocument first)`);
|
|
26
|
+
if (!str(value.id))
|
|
27
|
+
add('id', 'must be a non-empty string');
|
|
28
|
+
if (!str(value.name))
|
|
29
|
+
add('name', 'must be a non-empty string');
|
|
30
|
+
if (value.description !== undefined && typeof value.description !== 'string')
|
|
31
|
+
add('description', 'must be a string');
|
|
32
|
+
// `!Number.isFinite` first: `NaN < 1` is false, so a NaN bound would pass a
|
|
33
|
+
// one-ended check and then disable the cross guard entirely (every
|
|
34
|
+
// `size > NaN` is false).
|
|
35
|
+
if (value.maxCross !== undefined && (typeof value.maxCross !== 'number' || !Number.isFinite(value.maxCross) || value.maxCross < 1))
|
|
36
|
+
add('maxCross', 'must be a finite number >= 1');
|
|
37
|
+
for (const key of ['capabilities', 'inputs', 'outputs', 'nodes', 'edges']) {
|
|
38
|
+
if (!Array.isArray(value[key]))
|
|
39
|
+
add(key, 'must be an array');
|
|
40
|
+
}
|
|
41
|
+
if (problems.length > 0)
|
|
42
|
+
return problems;
|
|
43
|
+
value.capabilities.forEach((c, i) => {
|
|
44
|
+
if (!str(c))
|
|
45
|
+
add(`capabilities[${i}]`, 'must be a non-empty string');
|
|
46
|
+
});
|
|
47
|
+
const nodeIds = new Set();
|
|
48
|
+
value.nodes.forEach((n, i) => {
|
|
49
|
+
const p = `nodes[${i}]`;
|
|
50
|
+
if (!isRecord(n))
|
|
51
|
+
return add(p, 'must be an object');
|
|
52
|
+
if (!str(n.id))
|
|
53
|
+
add(`${p}.id`, 'must be a non-empty string');
|
|
54
|
+
else if (nodeIds.has(n.id))
|
|
55
|
+
add(`${p}.id`, `duplicate node id "${n.id}"`);
|
|
56
|
+
else
|
|
57
|
+
nodeIds.add(n.id);
|
|
58
|
+
if (!str(n.type))
|
|
59
|
+
add(`${p}.type`, 'must be a non-empty string');
|
|
60
|
+
if (n.params !== undefined && !isRecord(n.params))
|
|
61
|
+
add(`${p}.params`, 'must be an object');
|
|
62
|
+
if (n.lacing !== undefined && !LACINGS.includes(n.lacing))
|
|
63
|
+
add(`${p}.lacing`, `must be one of ${LACINGS.join(', ')}`);
|
|
64
|
+
if (n.tracking !== undefined && !TRACKINGS.includes(n.tracking))
|
|
65
|
+
add(`${p}.tracking`, `must be one of ${TRACKINGS.join(', ')}`);
|
|
66
|
+
if (n.trackingKey !== undefined && !str(n.trackingKey))
|
|
67
|
+
add(`${p}.trackingKey`, 'must be a non-empty string');
|
|
68
|
+
if (n.label !== undefined && typeof n.label !== 'string')
|
|
69
|
+
add(`${p}.label`, 'must be a string');
|
|
70
|
+
if (n.pos !== undefined && !(Array.isArray(n.pos) && n.pos.length === 2 && n.pos.every((x) => typeof x === 'number')))
|
|
71
|
+
add(`${p}.pos`, 'must be [x, y]');
|
|
72
|
+
});
|
|
73
|
+
const endpoint = (v, p) => {
|
|
74
|
+
if (!Array.isArray(v) || v.length !== 2 || !str(v[0]) || !str(v[1])) {
|
|
75
|
+
add(p, 'must be [nodeId, port]');
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
if (!nodeIds.has(v[0])) {
|
|
79
|
+
add(p, `unknown node "${v[0]}"`);
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
return true;
|
|
83
|
+
};
|
|
84
|
+
const targets = new Set();
|
|
85
|
+
value.edges.forEach((e, i) => {
|
|
86
|
+
const p = `edges[${i}]`;
|
|
87
|
+
if (!isRecord(e))
|
|
88
|
+
return add(p, 'must be an object');
|
|
89
|
+
endpoint(e.from, `${p}.from`);
|
|
90
|
+
if (endpoint(e.to, `${p}.to`)) {
|
|
91
|
+
const k = `${e.to[0]}.${e.to[1]}`;
|
|
92
|
+
if (targets.has(k))
|
|
93
|
+
add(`${p}.to`, `input ${k} has more than one incoming edge`);
|
|
94
|
+
targets.add(k);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
value.inputs.forEach((inp, i) => {
|
|
98
|
+
const p = `inputs[${i}]`;
|
|
99
|
+
if (!isRecord(inp))
|
|
100
|
+
return add(p, 'must be an object');
|
|
101
|
+
if (!str(inp.nodeId) || !nodeIds.has(inp.nodeId))
|
|
102
|
+
add(`${p}.nodeId`, 'must name a node');
|
|
103
|
+
if (!str(inp.param))
|
|
104
|
+
add(`${p}.param`, 'must be a non-empty string');
|
|
105
|
+
if (!str(inp.label))
|
|
106
|
+
add(`${p}.label`, 'must be a non-empty string');
|
|
107
|
+
if (!INPUT_KINDS.includes(inp.kind))
|
|
108
|
+
add(`${p}.kind`, `must be one of ${INPUT_KINDS.join(', ')}`);
|
|
109
|
+
if (inp.options !== undefined && !(Array.isArray(inp.options) && inp.options.every(str)))
|
|
110
|
+
add(`${p}.options`, 'must be an array of strings');
|
|
111
|
+
});
|
|
112
|
+
value.outputs.forEach((o, i) => {
|
|
113
|
+
const p = `outputs[${i}]`;
|
|
114
|
+
if (!isRecord(o))
|
|
115
|
+
return add(p, 'must be an object');
|
|
116
|
+
if (!str(o.nodeId) || !nodeIds.has(o.nodeId))
|
|
117
|
+
add(`${p}.nodeId`, 'must name a node');
|
|
118
|
+
if (!str(o.port))
|
|
119
|
+
add(`${p}.port`, 'must be a non-empty string');
|
|
120
|
+
if (!str(o.label))
|
|
121
|
+
add(`${p}.label`, 'must be a non-empty string');
|
|
122
|
+
});
|
|
123
|
+
return problems;
|
|
124
|
+
}
|
|
125
|
+
/** Parse + validate; throws with every problem listed. */
|
|
126
|
+
export function parseFlowDocument(text) {
|
|
127
|
+
let value;
|
|
128
|
+
try {
|
|
129
|
+
value = JSON.parse(text);
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
throw new Error(`flow document is not valid JSON: ${err.message}`);
|
|
133
|
+
}
|
|
134
|
+
const migrated = migrateFlowDocument(value);
|
|
135
|
+
const problems = validateFlowDocument(migrated);
|
|
136
|
+
if (problems.length > 0) {
|
|
137
|
+
throw new Error(`invalid flow document:\n${problems.map((p) => ` ${p.path || '<root>'}: ${p.message}`).join('\n')}`);
|
|
138
|
+
}
|
|
139
|
+
return migrated;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Migration chain: each step lifts `flowVersion` by one. There is only
|
|
143
|
+
* version 1 today; the chain exists so a v1 file keeps opening after v2.
|
|
144
|
+
*/
|
|
145
|
+
export function migrateFlowDocument(value) {
|
|
146
|
+
if (!isRecord(value))
|
|
147
|
+
return value;
|
|
148
|
+
let doc = value;
|
|
149
|
+
while (typeof doc.flowVersion === 'number' && doc.flowVersion < FLOW_VERSION) {
|
|
150
|
+
const step = MIGRATIONS[doc.flowVersion];
|
|
151
|
+
if (!step)
|
|
152
|
+
break;
|
|
153
|
+
doc = step(doc);
|
|
154
|
+
}
|
|
155
|
+
return doc;
|
|
156
|
+
}
|
|
157
|
+
const MIGRATIONS = {};
|
|
158
|
+
//# sourceMappingURL=document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document.js","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export { item, list, group, flatten, asGroup, countItems, isAssignable, SINGLE_BRANCH, } from './values.js';
|
|
2
|
+
export type { Access, Lacing, GroupKey, FlowData, Scalar, EntityRef, Point, Polyline, Placement, Profile, ValueKind, PortType, } from './values.js';
|
|
3
|
+
export { COLUMN_TYPES, validateTable, column, rowKey, groupRows, pivot } from './table.js';
|
|
4
|
+
export type { ColumnType, Column, Cell, Row, Table, TableProblem, GroupedRows } from './table.js';
|
|
5
|
+
export { canonicalJson, digest, digestFlowData, trackingGuid } from './digest.js';
|
|
6
|
+
export { NodeRegistry, resolveParams } from './registry.js';
|
|
7
|
+
export type { PortDef, ParamDef, ParamKind, LogLevel, LaneTracking, NodeRunContext, NodeOutputs, NodeDef } from './registry.js';
|
|
8
|
+
export { planLift, assemble, CrossProductTooLarge } from './lift.js';
|
|
9
|
+
export type { LiftInput, Lane, LiftPlan, LiftOptions } from './lift.js';
|
|
10
|
+
export { FLOW_VERSION, validateFlowDocument, parseFlowDocument, migrateFlowDocument } from './document.js';
|
|
11
|
+
export type { TrackingMode, InputKind, FlowNode, FlowEdge, FlowInput, FlowOutput, FlowDocument, DocumentProblem, } from './document.js';
|
|
12
|
+
export { TRACKING_SIDECAR_VERSION, emptyTrackedSet, planTracking, trackedSetFrom, withTrackedSet, TrackingPinMismatch, isTrackedSet, trackedSetsFrom, MemoryTrackingStore, } from './tracking.js';
|
|
13
|
+
export type { TrackedEntry, TrackedSet, TrackingSidecar, TrackingStore, DesiredLane, TrackingPlan } from './tracking.js';
|
|
14
|
+
export { validateFlowWiring } from './wiring.js';
|
|
15
|
+
export { describeFlowIO, declaredInputKeys, resolveDeclaredParam, unknownInputKeys } from './introspect.js';
|
|
16
|
+
export type { FlowIO, FlowInputInfo, FlowOutputInfo } from './introspect.js';
|
|
17
|
+
export { nodeAvailability, checkAvailability } from './availability.js';
|
|
18
|
+
export type { HostFeatures, AvailabilityStatus, NodeAvailability } from './availability.js';
|
|
19
|
+
export { runFlow, topologicalOrder, MemoCache, FlowCycleError, DEFAULT_MAX_CROSS } from './scheduler.js';
|
|
20
|
+
export { trackingKeyOf, ORPHAN_NODE_ID } from './orphans.js';
|
|
21
|
+
export type { RunOptions, RunResult, RunLogEntry, NodeReport, NodeStatus, GraphOutputValue } from './scheduler.js';
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,OAAO,EACP,OAAO,EACP,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,MAAM,EACN,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,SAAS,EACT,OAAO,EACP,SAAS,EACT,QAAQ,GACT,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC3F,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAElG,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAElF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5D,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEhI,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACrE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC3G,YAAY,EACV,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,UAAU,EACV,YAAY,EACZ,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEzH,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5G,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACxE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE5F,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACzG,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC7D,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
export { item, list, group, flatten, asGroup, countItems, isAssignable, SINGLE_BRANCH, } from './values.js';
|
|
5
|
+
export { COLUMN_TYPES, validateTable, column, rowKey, groupRows, pivot } from './table.js';
|
|
6
|
+
export { canonicalJson, digest, digestFlowData, trackingGuid } from './digest.js';
|
|
7
|
+
export { NodeRegistry, resolveParams } from './registry.js';
|
|
8
|
+
export { planLift, assemble, CrossProductTooLarge } from './lift.js';
|
|
9
|
+
export { FLOW_VERSION, validateFlowDocument, parseFlowDocument, migrateFlowDocument } from './document.js';
|
|
10
|
+
export { TRACKING_SIDECAR_VERSION, emptyTrackedSet, planTracking, trackedSetFrom, withTrackedSet, TrackingPinMismatch, isTrackedSet, trackedSetsFrom, MemoryTrackingStore, } from './tracking.js';
|
|
11
|
+
export { validateFlowWiring } from './wiring.js';
|
|
12
|
+
export { describeFlowIO, declaredInputKeys, resolveDeclaredParam, unknownInputKeys } from './introspect.js';
|
|
13
|
+
export { nodeAvailability, checkAvailability } from './availability.js';
|
|
14
|
+
export { runFlow, topologicalOrder, MemoCache, FlowCycleError, DEFAULT_MAX_CROSS } from './scheduler.js';
|
|
15
|
+
export { trackingKeyOf, ORPHAN_NODE_ID } from './orphans.js';
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,OAAO,EACP,OAAO,EACP,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AAgBrB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAG3F,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAElF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG5D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAGrE,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAY3G,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE5G,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGxE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACzG,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared flow introspection + input-validation helpers used by every
|
|
3
|
+
* headless caller of a `.flow.json` graph: the CLI's `flow describe`/`flow
|
|
4
|
+
* run` and MCP's `describe_flow`/`run_flow`.
|
|
5
|
+
*
|
|
6
|
+
* Kept in one place because the input-validation rule here is a
|
|
7
|
+
* correctness rule, not a formatting choice. The CLI had exactly this bug
|
|
8
|
+
* once: `--input rating=REI90` (missing the node id) named no declared
|
|
9
|
+
* parameter, was silently dropped, and the graph ran on its defaults while
|
|
10
|
+
* reporting success (issue #5167). A second, independently written copy of
|
|
11
|
+
* "is this key a declared parameter" in another caller is exactly how that
|
|
12
|
+
* regresses somewhere else — so both go through {@link resolveDeclaredParam}.
|
|
13
|
+
*/
|
|
14
|
+
import type { FlowDocument, InputKind } from './document.js';
|
|
15
|
+
import type { NodeRegistry, ParamDef, ParamKind } from './registry.js';
|
|
16
|
+
import type { Access, ValueKind } from './values.js';
|
|
17
|
+
export interface FlowInputInfo {
|
|
18
|
+
readonly key: string;
|
|
19
|
+
readonly label: string;
|
|
20
|
+
readonly kind: InputKind;
|
|
21
|
+
readonly options?: readonly string[];
|
|
22
|
+
readonly default?: unknown;
|
|
23
|
+
readonly paramKind?: ParamKind;
|
|
24
|
+
}
|
|
25
|
+
export interface FlowOutputInfo {
|
|
26
|
+
readonly key: string;
|
|
27
|
+
readonly label: string;
|
|
28
|
+
readonly kind?: ValueKind;
|
|
29
|
+
readonly access?: Access;
|
|
30
|
+
}
|
|
31
|
+
export interface FlowIO {
|
|
32
|
+
readonly id: string;
|
|
33
|
+
readonly name: string;
|
|
34
|
+
readonly description?: string;
|
|
35
|
+
readonly capabilities: readonly string[];
|
|
36
|
+
readonly inputs: readonly FlowInputInfo[];
|
|
37
|
+
readonly outputs: readonly FlowOutputInfo[];
|
|
38
|
+
}
|
|
39
|
+
/** The declared inputs/outputs schema of a graph — the Hops `/io` equivalent. */
|
|
40
|
+
export declare function describeFlowIO(doc: FlowDocument, registry: NodeRegistry<unknown>): FlowIO;
|
|
41
|
+
/** `nodeId.param` for every declared Player input — the list a caller echoes back on a bad key. */
|
|
42
|
+
export declare function declaredInputKeys(doc: FlowDocument): readonly string[];
|
|
43
|
+
/**
|
|
44
|
+
* Resolve a `nodeId.param` input key against the document + registry — the
|
|
45
|
+
* ONE lookup every caller uses to decide whether a key is a declared
|
|
46
|
+
* parameter. Returns undefined for a malformed key (no dot), a key naming
|
|
47
|
+
* no node, or a node with no such param — regardless of whether the key
|
|
48
|
+
* also appears in `doc.inputs` (a node can accept a param override the
|
|
49
|
+
* Player form never exposed).
|
|
50
|
+
*/
|
|
51
|
+
export declare function resolveDeclaredParam(key: string, doc: FlowDocument, registry: NodeRegistry<unknown>): {
|
|
52
|
+
readonly nodeId: string;
|
|
53
|
+
readonly param: ParamDef;
|
|
54
|
+
} | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Every key in `inputs` that names no declared parameter. Empty when every
|
|
57
|
+
* key resolves. A run must refuse rather than silently ignore any key this
|
|
58
|
+
* returns — see the module doc for why.
|
|
59
|
+
*/
|
|
60
|
+
export declare function unknownInputKeys(inputs: Readonly<Record<string, unknown>> | undefined, doc: FlowDocument, registry: NodeRegistry<unknown>): readonly string[];
|
|
61
|
+
//# sourceMappingURL=introspect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspect.d.ts","sourceRoot":"","sources":["../src/introspect.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;CAC7C;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,MAAM,CAYzF;AAED,mGAAmG;AACnG,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,SAAS,MAAM,EAAE,CAEtE;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,YAAY,EACjB,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,GAC9B;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,GAAG,SAAS,CAQnE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,EACrD,GAAG,EAAE,YAAY,EACjB,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,GAC9B,SAAS,MAAM,EAAE,CAGnB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/** The declared inputs/outputs schema of a graph — the Hops `/io` equivalent. */
|
|
5
|
+
export function describeFlowIO(doc, registry) {
|
|
6
|
+
const inputs = doc.inputs.map((i) => {
|
|
7
|
+
const def = registry.get(doc.nodes.find((n) => n.id === i.nodeId)?.type ?? '');
|
|
8
|
+
const param = def?.params.find((p) => p.name === i.param);
|
|
9
|
+
return { key: `${i.nodeId}.${i.param}`, label: i.label, kind: i.kind, options: i.options, default: param?.default, paramKind: param?.kind };
|
|
10
|
+
});
|
|
11
|
+
const outputs = doc.outputs.map((o) => {
|
|
12
|
+
const def = registry.get(doc.nodes.find((n) => n.id === o.nodeId)?.type ?? '');
|
|
13
|
+
const port = def?.outputs.find((p) => p.name === o.port);
|
|
14
|
+
return { key: `${o.nodeId}.${o.port}`, label: o.label, kind: port?.type.kind, access: port?.type.access };
|
|
15
|
+
});
|
|
16
|
+
return { id: doc.id, name: doc.name, description: doc.description, capabilities: doc.capabilities, inputs, outputs };
|
|
17
|
+
}
|
|
18
|
+
/** `nodeId.param` for every declared Player input — the list a caller echoes back on a bad key. */
|
|
19
|
+
export function declaredInputKeys(doc) {
|
|
20
|
+
return doc.inputs.map((i) => `${i.nodeId}.${i.param}`);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Resolve a `nodeId.param` input key against the document + registry — the
|
|
24
|
+
* ONE lookup every caller uses to decide whether a key is a declared
|
|
25
|
+
* parameter. Returns undefined for a malformed key (no dot), a key naming
|
|
26
|
+
* no node, or a node with no such param — regardless of whether the key
|
|
27
|
+
* also appears in `doc.inputs` (a node can accept a param override the
|
|
28
|
+
* Player form never exposed).
|
|
29
|
+
*/
|
|
30
|
+
export function resolveDeclaredParam(key, doc, registry) {
|
|
31
|
+
const dot = key.lastIndexOf('.');
|
|
32
|
+
if (dot <= 0)
|
|
33
|
+
return undefined;
|
|
34
|
+
const nodeId = key.slice(0, dot);
|
|
35
|
+
const node = doc.nodes.find((n) => n.id === nodeId);
|
|
36
|
+
if (!node)
|
|
37
|
+
return undefined;
|
|
38
|
+
const param = registry.get(node.type)?.params.find((p) => p.name === key.slice(dot + 1));
|
|
39
|
+
return param ? { nodeId, param } : undefined;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Every key in `inputs` that names no declared parameter. Empty when every
|
|
43
|
+
* key resolves. A run must refuse rather than silently ignore any key this
|
|
44
|
+
* returns — see the module doc for why.
|
|
45
|
+
*/
|
|
46
|
+
export function unknownInputKeys(inputs, doc, registry) {
|
|
47
|
+
if (!inputs)
|
|
48
|
+
return [];
|
|
49
|
+
return Object.keys(inputs).filter((key) => !resolveDeclaredParam(key, doc, registry));
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=introspect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspect.js","sourceRoot":"","sources":["../src/introspect.ts"],"names":[],"mappings":"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"}
|
package/dist/lift.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lifting: how a node declared over items/lists/groups is applied to the
|
|
3
|
+
* structured data that actually arrives on its ports.
|
|
4
|
+
*
|
|
5
|
+
* Rules (the whole data-tree story fits in these):
|
|
6
|
+
* 1. A `group` port receives the input as a group (an item or list becomes
|
|
7
|
+
* the single branch `""`). No lifting.
|
|
8
|
+
* 2. If any `item`/`list` port receives a group, the node is lifted over
|
|
9
|
+
* the union of branch keys, and branches match **by key**, never by
|
|
10
|
+
* position. A key absent on a required port is reported under
|
|
11
|
+
* `missing`, and that lane is skipped.
|
|
12
|
+
* 3. Inside a branch (or at top level), `item` ports that receive lists are
|
|
13
|
+
* laced: `shortest`, `longest` (repeat last), or `cross` (cartesian, key
|
|
14
|
+
* `i|j`). `list` ports receive the whole list. A single `item` value is
|
|
15
|
+
* broadcast.
|
|
16
|
+
* 4. Lane keys come from the driving entity's GlobalId when there is one,
|
|
17
|
+
* else from the index — which is reported as a warning, because index
|
|
18
|
+
* lanes shift when the driving list changes and tracking then updates
|
|
19
|
+
* the wrong element.
|
|
20
|
+
* 5. A `null` arriving on a non-nullable `item` port short-circuits that
|
|
21
|
+
* lane: `run` is not called and every output of the lane is `null`.
|
|
22
|
+
*/
|
|
23
|
+
import type { NodeOutputs, PortDef } from './registry.js';
|
|
24
|
+
import type { FlowData, GroupKey, Lacing } from './values.js';
|
|
25
|
+
export interface LiftInput {
|
|
26
|
+
readonly port: PortDef;
|
|
27
|
+
/** `undefined` when the port is unconnected. */
|
|
28
|
+
readonly data: FlowData | undefined;
|
|
29
|
+
}
|
|
30
|
+
export interface Lane {
|
|
31
|
+
readonly laneKey: GroupKey | null;
|
|
32
|
+
readonly branchKey: GroupKey | null;
|
|
33
|
+
readonly args: Readonly<Record<string, unknown>>;
|
|
34
|
+
/** True when a non-nullable item port received `null`: run is skipped. */
|
|
35
|
+
readonly nullLane: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface LiftPlan {
|
|
38
|
+
readonly lifted: boolean;
|
|
39
|
+
readonly overGroup: boolean;
|
|
40
|
+
readonly lanes: readonly Lane[];
|
|
41
|
+
/** Per port, the branch keys it lacked while other ports had them. */
|
|
42
|
+
readonly missing: Readonly<Record<string, readonly GroupKey[]>>;
|
|
43
|
+
readonly warnings: readonly string[];
|
|
44
|
+
}
|
|
45
|
+
export interface LiftOptions {
|
|
46
|
+
readonly lacing: Lacing;
|
|
47
|
+
readonly maxCross: number;
|
|
48
|
+
readonly laneKeyPort?: string;
|
|
49
|
+
}
|
|
50
|
+
export declare class CrossProductTooLarge extends Error {
|
|
51
|
+
readonly size: number;
|
|
52
|
+
readonly limit: number;
|
|
53
|
+
constructor(size: number, limit: number);
|
|
54
|
+
}
|
|
55
|
+
export declare function planLift(inputs: readonly LiftInput[], opts: LiftOptions): LiftPlan;
|
|
56
|
+
/** Reassemble per-lane outputs into structured data, one entry per output port. */
|
|
57
|
+
export declare function assemble(plan: LiftPlan, outputs: readonly PortDef[], results: readonly (NodeOutputs | null)[]): Map<string, FlowData>;
|
|
58
|
+
//# sourceMappingURL=lift.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lift.d.ts","sourceRoot":"","sources":["../src/lift.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,KAAK,EAAqB,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEjF,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,gDAAgD;IAChD,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;CACrC;AAED,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAC,CAAC,CAAC;IAChE,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM;gBAApC,IAAI,EAAE,MAAM,EAAW,KAAK,EAAE,MAAM;CAI1D;AA8ED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,GAAG,QAAQ,CAyElF;AAED,mFAAmF;AACnF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAkCrI"}
|