flowquery 1.0.69 → 1.0.71

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.
Files changed (147) hide show
  1. package/README.md +682 -86
  2. package/dist/compute/provenance.d.ts +201 -0
  3. package/dist/compute/provenance.d.ts.map +1 -0
  4. package/dist/compute/provenance.js +216 -0
  5. package/dist/compute/provenance.js.map +1 -0
  6. package/dist/compute/runner.d.ts +202 -3
  7. package/dist/compute/runner.d.ts.map +1 -1
  8. package/dist/compute/runner.js +309 -2
  9. package/dist/compute/runner.js.map +1 -1
  10. package/dist/flowquery.min.js +1 -1
  11. package/dist/graph/bindings.d.ts +78 -0
  12. package/dist/graph/bindings.d.ts.map +1 -0
  13. package/dist/graph/bindings.js +224 -0
  14. package/dist/graph/bindings.js.map +1 -0
  15. package/dist/graph/data_cache.d.ts +4 -0
  16. package/dist/graph/data_cache.d.ts.map +1 -1
  17. package/dist/graph/data_cache.js +15 -3
  18. package/dist/graph/data_cache.js.map +1 -1
  19. package/dist/graph/data_resolver.d.ts.map +1 -1
  20. package/dist/graph/data_resolver.js +23 -4
  21. package/dist/graph/data_resolver.js.map +1 -1
  22. package/dist/graph/database.d.ts +4 -2
  23. package/dist/graph/database.d.ts.map +1 -1
  24. package/dist/graph/database.js +45 -9
  25. package/dist/graph/database.js.map +1 -1
  26. package/dist/graph/physical_node.d.ts +7 -2
  27. package/dist/graph/physical_node.d.ts.map +1 -1
  28. package/dist/graph/physical_node.js +22 -26
  29. package/dist/graph/physical_node.js.map +1 -1
  30. package/dist/graph/physical_relationship.d.ts +7 -2
  31. package/dist/graph/physical_relationship.d.ts.map +1 -1
  32. package/dist/graph/physical_relationship.js +22 -26
  33. package/dist/graph/physical_relationship.js.map +1 -1
  34. package/dist/graph/relationship_match_collector.d.ts.map +1 -1
  35. package/dist/graph/relationship_match_collector.js +9 -0
  36. package/dist/graph/relationship_match_collector.js.map +1 -1
  37. package/dist/graph/virtual_sources.d.ts +8 -0
  38. package/dist/graph/virtual_sources.d.ts.map +1 -0
  39. package/dist/graph/virtual_sources.js +31 -0
  40. package/dist/graph/virtual_sources.js.map +1 -0
  41. package/dist/graph/virtual_statement.d.ts +41 -0
  42. package/dist/graph/virtual_statement.d.ts.map +1 -0
  43. package/dist/graph/virtual_statement.js +143 -0
  44. package/dist/graph/virtual_statement.js.map +1 -0
  45. package/dist/index.browser.d.ts +3 -3
  46. package/dist/index.browser.d.ts.map +1 -1
  47. package/dist/index.browser.js.map +1 -1
  48. package/dist/index.node.d.ts +3 -3
  49. package/dist/index.node.d.ts.map +1 -1
  50. package/dist/index.node.js.map +1 -1
  51. package/dist/parsing/ast_node.d.ts +9 -0
  52. package/dist/parsing/ast_node.d.ts.map +1 -1
  53. package/dist/parsing/ast_node.js +21 -4
  54. package/dist/parsing/ast_node.js.map +1 -1
  55. package/dist/parsing/expressions/binding_reference.d.ts +16 -0
  56. package/dist/parsing/expressions/binding_reference.d.ts.map +1 -0
  57. package/dist/parsing/expressions/binding_reference.js +34 -0
  58. package/dist/parsing/expressions/binding_reference.js.map +1 -0
  59. package/dist/parsing/operations/aggregated_return.d.ts +10 -0
  60. package/dist/parsing/operations/aggregated_return.d.ts.map +1 -1
  61. package/dist/parsing/operations/aggregated_return.js +56 -3
  62. package/dist/parsing/operations/aggregated_return.js.map +1 -1
  63. package/dist/parsing/operations/aggregated_with.d.ts +20 -0
  64. package/dist/parsing/operations/aggregated_with.d.ts.map +1 -1
  65. package/dist/parsing/operations/aggregated_with.js +33 -1
  66. package/dist/parsing/operations/aggregated_with.js.map +1 -1
  67. package/dist/parsing/operations/create_node.d.ts +5 -1
  68. package/dist/parsing/operations/create_node.d.ts.map +1 -1
  69. package/dist/parsing/operations/create_node.js +12 -2
  70. package/dist/parsing/operations/create_node.js.map +1 -1
  71. package/dist/parsing/operations/create_relationship.d.ts +5 -1
  72. package/dist/parsing/operations/create_relationship.d.ts.map +1 -1
  73. package/dist/parsing/operations/create_relationship.js +12 -2
  74. package/dist/parsing/operations/create_relationship.js.map +1 -1
  75. package/dist/parsing/operations/drop_binding.d.ts +15 -0
  76. package/dist/parsing/operations/drop_binding.d.ts.map +1 -0
  77. package/dist/parsing/operations/drop_binding.js +42 -0
  78. package/dist/parsing/operations/drop_binding.js.map +1 -0
  79. package/dist/parsing/operations/group_by.d.ts +32 -0
  80. package/dist/parsing/operations/group_by.d.ts.map +1 -1
  81. package/dist/parsing/operations/group_by.js +103 -0
  82. package/dist/parsing/operations/group_by.js.map +1 -1
  83. package/dist/parsing/operations/let.d.ts +36 -0
  84. package/dist/parsing/operations/let.d.ts.map +1 -0
  85. package/dist/parsing/operations/let.js +154 -0
  86. package/dist/parsing/operations/let.js.map +1 -0
  87. package/dist/parsing/operations/load.d.ts +31 -0
  88. package/dist/parsing/operations/load.d.ts.map +1 -1
  89. package/dist/parsing/operations/load.js +102 -2
  90. package/dist/parsing/operations/load.js.map +1 -1
  91. package/dist/parsing/operations/merge.d.ts +158 -0
  92. package/dist/parsing/operations/merge.d.ts.map +1 -0
  93. package/dist/parsing/operations/merge.js +338 -0
  94. package/dist/parsing/operations/merge.js.map +1 -0
  95. package/dist/parsing/operations/order_by.d.ts +6 -0
  96. package/dist/parsing/operations/order_by.d.ts.map +1 -1
  97. package/dist/parsing/operations/order_by.js +10 -1
  98. package/dist/parsing/operations/order_by.js.map +1 -1
  99. package/dist/parsing/operations/refresh_binding.d.ts +15 -0
  100. package/dist/parsing/operations/refresh_binding.d.ts.map +1 -0
  101. package/dist/parsing/operations/refresh_binding.js +42 -0
  102. package/dist/parsing/operations/refresh_binding.js.map +1 -0
  103. package/dist/parsing/operations/refresh_node.d.ts +11 -0
  104. package/dist/parsing/operations/refresh_node.d.ts.map +1 -0
  105. package/dist/parsing/operations/refresh_node.js +46 -0
  106. package/dist/parsing/operations/refresh_node.js.map +1 -0
  107. package/dist/parsing/operations/refresh_relationship.d.ts +11 -0
  108. package/dist/parsing/operations/refresh_relationship.d.ts.map +1 -0
  109. package/dist/parsing/operations/refresh_relationship.js +46 -0
  110. package/dist/parsing/operations/refresh_relationship.js.map +1 -0
  111. package/dist/parsing/operations/return.d.ts +34 -0
  112. package/dist/parsing/operations/return.d.ts.map +1 -1
  113. package/dist/parsing/operations/return.js +102 -3
  114. package/dist/parsing/operations/return.js.map +1 -1
  115. package/dist/parsing/operations/union.d.ts +19 -2
  116. package/dist/parsing/operations/union.d.ts.map +1 -1
  117. package/dist/parsing/operations/union.js +47 -11
  118. package/dist/parsing/operations/union.js.map +1 -1
  119. package/dist/parsing/operations/union_all.d.ts +5 -1
  120. package/dist/parsing/operations/union_all.d.ts.map +1 -1
  121. package/dist/parsing/operations/union_all.js +8 -2
  122. package/dist/parsing/operations/union_all.js.map +1 -1
  123. package/dist/parsing/operations/update.d.ts +27 -0
  124. package/dist/parsing/operations/update.d.ts.map +1 -0
  125. package/dist/parsing/operations/update.js +88 -0
  126. package/dist/parsing/operations/update.js.map +1 -0
  127. package/dist/parsing/operations/update_delete.d.ts +43 -0
  128. package/dist/parsing/operations/update_delete.d.ts.map +1 -0
  129. package/dist/parsing/operations/update_delete.js +105 -0
  130. package/dist/parsing/operations/update_delete.js.map +1 -0
  131. package/dist/parsing/parser.d.ts +70 -1
  132. package/dist/parsing/parser.d.ts.map +1 -1
  133. package/dist/parsing/parser.js +704 -10
  134. package/dist/parsing/parser.js.map +1 -1
  135. package/dist/parsing/statement_info_crawler.d.ts +106 -0
  136. package/dist/parsing/statement_info_crawler.d.ts.map +1 -1
  137. package/dist/parsing/statement_info_crawler.js +231 -12
  138. package/dist/parsing/statement_info_crawler.js.map +1 -1
  139. package/dist/tokenization/keyword.d.ts +21 -1
  140. package/dist/tokenization/keyword.d.ts.map +1 -1
  141. package/dist/tokenization/keyword.js +20 -0
  142. package/dist/tokenization/keyword.js.map +1 -1
  143. package/dist/tokenization/token.d.ts +24 -0
  144. package/dist/tokenization/token.d.ts.map +1 -1
  145. package/dist/tokenization/token.js +73 -0
  146. package/dist/tokenization/token.js.map +1 -1
  147. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/compute/runner.ts"],"names":[],"mappings":"AAEA,OAAO,OAAO,MAAM,qBAAqB,CAAC;AAQ1C,OAA6B,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAExF,YAAY,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,6BAA6B,EAAE,MAAM,CAAC;IACtC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,6BAA6B,EAAE,MAAM,CAAC;IACtC;;;OAGG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;CACxB;AAQD;;;;;;;;;;;;;;;;;GAiBG;AACH,cAAM,MAAM;IACR,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,SAAS,CAAiB;IAElC;;;;;;;OAOG;gBAEC,SAAS,GAAE,MAAM,GAAG,IAAW,EAC/B,GAAG,GAAE,OAAO,GAAG,IAAW,EAC1B,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAW;IAqB3C,OAAO,CAAC,MAAM,CAAC,WAAW;IAQ1B;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAqBvB;;;;;OAKG;IACU,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBjC;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAetB;;;;OAIG;IACH,IAAW,OAAO,IAAI,GAAG,CAExB;IAED;;;;;OAKG;IACH,IAAW,QAAQ,IAAI,cAAc,CASpC;CACJ;AAED,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/compute/runner.ts"],"names":[],"mappings":"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"}
@@ -12,15 +12,25 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
+ const bindings_1 = __importDefault(require("../graph/bindings"));
15
16
  const data_cache_1 = __importDefault(require("../graph/data_cache"));
16
17
  const data_resolver_1 = __importDefault(require("../graph/data_resolver"));
18
+ const node_1 = __importDefault(require("../graph/node"));
19
+ const relationship_1 = __importDefault(require("../graph/relationship"));
20
+ const binding_reference_1 = __importDefault(require("../parsing/expressions/binding_reference"));
17
21
  const parameter_reference_1 = __importDefault(require("../parsing/expressions/parameter_reference"));
22
+ const aggregated_with_1 = __importDefault(require("../parsing/operations/aggregated_with"));
18
23
  const create_node_1 = __importDefault(require("../parsing/operations/create_node"));
19
24
  const create_relationship_1 = __importDefault(require("../parsing/operations/create_relationship"));
20
25
  const delete_node_1 = __importDefault(require("../parsing/operations/delete_node"));
21
26
  const delete_relationship_1 = __importDefault(require("../parsing/operations/delete_relationship"));
27
+ const load_1 = __importDefault(require("../parsing/operations/load"));
28
+ const match_1 = __importDefault(require("../parsing/operations/match"));
29
+ const return_1 = __importDefault(require("../parsing/operations/return"));
30
+ const union_1 = __importDefault(require("../parsing/operations/union"));
22
31
  const parser_1 = __importDefault(require("../parsing/parser"));
23
32
  const statement_info_crawler_1 = __importDefault(require("../parsing/statement_info_crawler"));
33
+ const provenance_1 = require("./provenance");
24
34
  /**
25
35
  * Executes a FlowQuery statement and retrieves the results.
26
36
  *
@@ -46,14 +56,17 @@ class Runner {
46
56
  * @param statement - The FlowQuery statement to execute (may contain semicolon-separated statements)
47
57
  * @param ast - An optional pre-parsed AST to use instead of parsing the statement
48
58
  * @param args - Optional parameters to inject into $-prefixed parameter references
59
+ * @param options - Optional configuration (e.g. `{ provenance: true }`)
49
60
  * @throws {Error} If the statement is null, empty, or contains syntax errors
50
61
  */
51
- constructor(statement = null, ast = null, args = null) {
62
+ constructor(statement = null, ast = null, args = null, options = {}) {
52
63
  this._args = null;
64
+ this._provenance = null;
53
65
  if ((statement === null || statement === "") && ast === null) {
54
66
  throw new Error("Either statement or AST must be provided");
55
67
  }
56
68
  this._args = args;
69
+ this._options = options;
57
70
  if (ast !== null) {
58
71
  this._isTopLevel = false;
59
72
  this._statements = [Runner.toStatement(ast)];
@@ -111,10 +124,25 @@ class Runner {
111
124
  return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
112
125
  try {
113
126
  if (this._isTopLevel) {
114
- data_resolver_1.default.getInstance().dataCache = new data_cache_1.default();
127
+ data_resolver_1.default.getInstance().dataCache = new data_cache_1.default(this._options.provenance === true);
128
+ }
129
+ if (this._options.provenance) {
130
+ this._provenance = [];
131
+ this.enableProvenance();
115
132
  }
116
133
  for (const stmt of this._statements) {
117
134
  this.bindParameters(stmt.ast);
135
+ // Refresh any stale refreshable bindings referenced
136
+ // by this statement. Sub-query evaluation is
137
+ // async, but BindingReference.value() is sync;
138
+ // populating the cache up-front keeps reads cheap
139
+ // and synchronous.
140
+ const bindingNames = new Set();
141
+ this.collectBindingNames(stmt.ast, bindingNames);
142
+ const bindings = bindings_1.default.getInstance();
143
+ for (const name of bindingNames) {
144
+ yield bindings.materialize(name);
145
+ }
118
146
  yield stmt.first.initialize();
119
147
  yield stmt.first.run();
120
148
  yield stmt.first.finish();
@@ -127,6 +155,121 @@ class Runner {
127
155
  }));
128
156
  });
129
157
  }
158
+ /**
159
+ * Walks the terminal statement's operation chain and wires every
160
+ * MATCH-bound `Node` / `Relationship` slot to the operation that
161
+ * will project it. Aggregation boundaries (`AggregatedWith`,
162
+ * `AggregatedReturn`) absorb upstream sites into their group-level
163
+ * accumulation; aggregations downstream of one another chain via
164
+ * each `AggregatedWith` re-exposing itself as a provenance source
165
+ * for the next consumer.
166
+ *
167
+ * Only the last statement may produce rows; preceding statements
168
+ * are limited to CREATE / DELETE / REFRESH / DROP and never need
169
+ * row-level provenance.
170
+ */
171
+ enableProvenance() {
172
+ if (this._statements.length === 0)
173
+ return;
174
+ const stmt = this._statements[this._statements.length - 1];
175
+ Runner.wireProvenance(stmt.first, this._provenance);
176
+ }
177
+ /**
178
+ * Walk `first..terminal`, accumulating live MATCH sites into the
179
+ * "active" source list and handing it off at every aggregation
180
+ * boundary. Each `AggregatedWith` consumes the active list and then
181
+ * re-publishes itself as the single active source going forward.
182
+ * `Load` operations contribute per-row data-source bindings.
183
+ *
184
+ * Exposed as a public static so other components (e.g. `Let` when
185
+ * running a sub-query right-hand side) can wire provenance for an
186
+ * operation chain they drive directly, without going through the
187
+ * full `Runner.run` lifecycle.
188
+ */
189
+ static wireProvenance(first, sink) {
190
+ const makeSites = () => {
191
+ const s = new provenance_1.ProvenanceSites();
192
+ s.captureProperties = true;
193
+ return s;
194
+ };
195
+ let activeSites = makeSites();
196
+ // Extra (non-site) sources contributed by upstream aggregations.
197
+ let activeAggregations = [];
198
+ // Per-row `Load` operations contributing data-source bindings.
199
+ let activeLoads = [];
200
+ let op = first;
201
+ let terminal = null;
202
+ while (op !== null) {
203
+ if (op instanceof match_1.default) {
204
+ for (const pattern of op.patterns) {
205
+ Runner.collectSitesFromPattern(pattern, activeSites);
206
+ }
207
+ }
208
+ else if (op instanceof load_1.default) {
209
+ activeLoads.push(op.asProvenanceSource());
210
+ }
211
+ else if (op instanceof aggregated_with_1.default) {
212
+ // Aggregation boundary: hand off current sources and
213
+ // re-publish the aggregation as the new source.
214
+ if (!activeSites.isEmpty) {
215
+ op.addProvenanceSource(activeSites);
216
+ }
217
+ for (const a of activeAggregations) {
218
+ op.addProvenanceSource(a.asProvenanceSource());
219
+ }
220
+ for (const l of activeLoads) {
221
+ op.addProvenanceSource(l);
222
+ }
223
+ activeSites = makeSites();
224
+ activeAggregations = [op];
225
+ activeLoads = [];
226
+ }
227
+ if (op.next === null) {
228
+ terminal = op;
229
+ }
230
+ op = op.next;
231
+ }
232
+ if (terminal === null)
233
+ return;
234
+ if (terminal instanceof union_1.default) {
235
+ // UNION composes results from two independent sub-pipelines;
236
+ // wire each branch separately and let Union merge.
237
+ const leftSink = [];
238
+ const rightSink = [];
239
+ Runner.wireProvenance(terminal.left, leftSink);
240
+ Runner.wireProvenance(terminal.right, rightSink);
241
+ terminal.enableProvenance(leftSink, rightSink, sink);
242
+ return;
243
+ }
244
+ if (terminal instanceof return_1.default) {
245
+ // AggregatedReturn folds sources into its GroupBy; plain Return
246
+ // snapshots them per emitted row. Both share the same source
247
+ // registration API. We always enable the sink so even
248
+ // source-less queries (`WITH ... RETURN`) emit one
249
+ // `{nodes:[], relationships:[]}` per result row for shape
250
+ // consistency with the results array.
251
+ if (!activeSites.isEmpty) {
252
+ terminal.addProvenanceSource(activeSites);
253
+ }
254
+ for (const a of activeAggregations) {
255
+ terminal.addProvenanceSource(a.asProvenanceSource());
256
+ }
257
+ for (const l of activeLoads) {
258
+ terminal.addProvenanceSource(l);
259
+ }
260
+ terminal.enableProvenance(sink);
261
+ }
262
+ }
263
+ static collectSitesFromPattern(pattern, sites) {
264
+ for (const element of pattern.chain) {
265
+ if (element instanceof node_1.default) {
266
+ sites.addNode(element);
267
+ }
268
+ else if (element instanceof relationship_1.default) {
269
+ sites.addRelationship(element);
270
+ }
271
+ }
272
+ }
130
273
  /**
131
274
  * Recursively walks the AST to bind ParameterReference nodes
132
275
  * to the args provided to this Runner.
@@ -149,6 +292,19 @@ class Runner {
149
292
  this.bindParameters(child);
150
293
  }
151
294
  }
295
+ /**
296
+ * Recursively walks the AST to collect the names of all
297
+ * `BindingReference`s. Used to refresh stale refreshable
298
+ * bindings before statement execution begins.
299
+ */
300
+ collectBindingNames(node, names) {
301
+ if (node instanceof binding_reference_1.default) {
302
+ names.add(node.name);
303
+ }
304
+ for (const child of node.getChildren()) {
305
+ this.collectBindingNames(child, names);
306
+ }
307
+ }
152
308
  /**
153
309
  * Gets the results from the executed statement.
154
310
  *
@@ -173,6 +329,157 @@ class Runner {
173
329
  info: m.info ? statement_info_crawler_1.default.clone(m.info) : undefined,
174
330
  };
175
331
  }
332
+ /**
333
+ * Row-level data lineage aligned by index with {@link results}.
334
+ *
335
+ * Each {@link RowProvenance} entry lists the concrete `id` values of the
336
+ * node slots and the `(left_id, right_id, type)` hops of the
337
+ * relationship slots that were bound while the corresponding result row
338
+ * was being projected.
339
+ *
340
+ * Returns an empty array unless the runner was constructed with
341
+ * `{ provenance: true }` or the query produced no rows.
342
+ */
343
+ get provenance() {
344
+ var _a;
345
+ return (_a = this._provenance) !== null && _a !== void 0 ? _a : [];
346
+ }
347
+ /**
348
+ * Convenience method that bundles structural lineage with row-level
349
+ * provenance for a single result row. Returns one {@link CellTrace}
350
+ * per output column, pairing the column's
351
+ * {@link ColumnLineage | structural lineage} (from
352
+ * {@link metadata}`.info.returns`) with the node / relationship
353
+ * bindings (from {@link provenance}) whose alias matches one of the
354
+ * column's references.
355
+ *
356
+ * Equivalent to manually correlating `metadata.info.returns[col]`
357
+ * with `provenance[rowIndex].nodes` / `.relationships`, but with
358
+ * the `(alias, property) -> binding` join and the per-property
359
+ * value extraction done for you.
360
+ *
361
+ * @param rowIndex - Zero-based index into {@link results}.
362
+ * @returns A `{column -> CellTrace}` map aligned with the row.
363
+ * @throws {RangeError} If `rowIndex` is out of bounds for `results`.
364
+ */
365
+ traceRow(rowIndex) {
366
+ var _a, _b, _c;
367
+ const rows = this.results;
368
+ const length = Array.isArray(rows) ? rows.length : 0;
369
+ if (rowIndex < 0 || rowIndex >= length) {
370
+ throw new RangeError(`Runner.traceRow: rowIndex ${rowIndex} out of bounds (results.length=${length})`);
371
+ }
372
+ const row = rows[rowIndex];
373
+ const returns = (_b = (_a = this._metadata.info) === null || _a === void 0 ? void 0 : _a.returns) !== null && _b !== void 0 ? _b : {};
374
+ const rowProv = this._provenance ? ((_c = this._provenance[rowIndex]) !== null && _c !== void 0 ? _c : null) : null;
375
+ const out = {};
376
+ for (const column of Object.keys(row)) {
377
+ const lineageRaw = returns[column];
378
+ const lineage = lineageRaw
379
+ ? Runner.cloneColumnLineage(lineageRaw)
380
+ : null;
381
+ const bindings = [];
382
+ if (rowProv !== null && lineage !== null) {
383
+ for (const ref of lineage.references) {
384
+ if (ref.kind === "node") {
385
+ for (const n of rowProv.nodes) {
386
+ if (n.alias === ref.alias) {
387
+ bindings.push({
388
+ reference: ref,
389
+ value: Runner.readNodeProperty(n, ref.property),
390
+ node: n,
391
+ });
392
+ }
393
+ }
394
+ }
395
+ else {
396
+ for (const r of rowProv.relationships) {
397
+ if (r.alias === ref.alias) {
398
+ bindings.push({
399
+ reference: ref,
400
+ value: Runner.readRelationshipProperty(r, ref.property),
401
+ relationship: r,
402
+ });
403
+ }
404
+ }
405
+ }
406
+ }
407
+ }
408
+ out[column] = { column, value: row[column], lineage, bindings };
409
+ }
410
+ return out;
411
+ }
412
+ /**
413
+ * One-shot combined lineage and provenance report for the entire
414
+ * Runner execution. Returns the structural per-column lineage
415
+ * (deep copy of `metadata.info?.returns`) alongside one
416
+ * {@link traceRow} map per result row.
417
+ *
418
+ * Useful as a single object to hand to a UI, dump to a log, or
419
+ * snapshot for debugging. For per-cell lookups during normal flow,
420
+ * {@link traceRow} is cheaper.
421
+ */
422
+ lineage() {
423
+ var _a, _b, _c;
424
+ const rows = (_a = this.results) !== null && _a !== void 0 ? _a : [];
425
+ const length = Array.isArray(rows) ? rows.length : 0;
426
+ const returnsRaw = (_c = (_b = this._metadata.info) === null || _b === void 0 ? void 0 : _b.returns) !== null && _c !== void 0 ? _c : {};
427
+ const columns = {};
428
+ for (const [k, v] of Object.entries(returnsRaw)) {
429
+ columns[k] = Runner.cloneColumnLineage(v);
430
+ }
431
+ const rowsOut = [];
432
+ for (let i = 0; i < length; i++) {
433
+ rowsOut.push(this.traceRow(i));
434
+ }
435
+ return { columns, rows: rowsOut };
436
+ }
437
+ static cloneColumnLineage(lineage) {
438
+ const copy = {
439
+ references: lineage.references.map((r) => ({
440
+ alias: r.alias,
441
+ kind: r.kind,
442
+ labels: [...r.labels],
443
+ property: r.property,
444
+ })),
445
+ kind: lineage.kind,
446
+ };
447
+ if (lineage.aggregate !== undefined)
448
+ copy.aggregate = lineage.aggregate;
449
+ return copy;
450
+ }
451
+ /**
452
+ * Resolve `binding.property` against a captured `NodeBinding`.
453
+ * The built-in `id` lives at the top of the binding (it's excluded
454
+ * from `properties`); everything else comes from `properties`.
455
+ */
456
+ static readNodeProperty(binding, property) {
457
+ var _a;
458
+ if (property === "id")
459
+ return binding.id;
460
+ return (_a = binding.properties) === null || _a === void 0 ? void 0 : _a[property];
461
+ }
462
+ /**
463
+ * Resolve `binding.property` against a captured `RelationshipBinding`.
464
+ * Returns the value from `hops[0]`: the built-ins `left_id`,
465
+ * `right_id`, and `type` come from the hop itself, while everything
466
+ * else comes from `hops[0].properties`. For variable-length matches
467
+ * with heterogeneous hops, inspect `relationship.hops` directly to
468
+ * see per-hop values.
469
+ */
470
+ static readRelationshipProperty(binding, property) {
471
+ var _a;
472
+ const firstHop = binding.hops[0];
473
+ if (firstHop === undefined)
474
+ return undefined;
475
+ if (property === "left_id")
476
+ return firstHop.left_id;
477
+ if (property === "right_id")
478
+ return firstHop.right_id;
479
+ if (property === "type")
480
+ return firstHop.type;
481
+ return (_a = firstHop.properties) === null || _a === void 0 ? void 0 : _a[property];
482
+ }
176
483
  }
177
484
  exports.default = Runner;
178
485
  //# sourceMappingURL=runner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/compute/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/compute/runner.ts"],"names":[],"mappings":"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"}