@bevorai/sdk 0.2.0-rc4 → 0.2.0-rc6

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 (36) hide show
  1. package/README.md +1 -1
  2. package/dist/graph/call-node.d.ts +22 -4
  3. package/dist/graph/call-node.d.ts.map +1 -1
  4. package/dist/graph/call-node.js +284 -79
  5. package/dist/graph/call-node.js.map +1 -1
  6. package/dist/graph/graph.js +1 -1
  7. package/dist/graph/graph.js.map +1 -1
  8. package/dist/resources/analyses.d.ts +16 -44
  9. package/dist/resources/analyses.d.ts.map +1 -1
  10. package/dist/resources/analyses.js +24 -86
  11. package/dist/resources/analyses.js.map +1 -1
  12. package/dist/resources/findings.d.ts +10 -10
  13. package/dist/resources/findings.d.ts.map +1 -1
  14. package/dist/resources/findings.js +12 -12
  15. package/dist/resources/findings.js.map +1 -1
  16. package/dist/resources/projects.d.ts +7 -0
  17. package/dist/resources/projects.d.ts.map +1 -1
  18. package/dist/resources/projects.js +11 -0
  19. package/dist/resources/projects.js.map +1 -1
  20. package/dist/types/graph-data.d.ts +12 -4
  21. package/dist/types/graph-data.d.ts.map +1 -1
  22. package/dist/types/literals.d.ts +6 -5
  23. package/dist/types/literals.d.ts.map +1 -1
  24. package/dist/types/node-types.d.ts +2 -0
  25. package/dist/types/node-types.d.ts.map +1 -1
  26. package/dist/types/node-types.js +126 -0
  27. package/dist/types/node-types.js.map +1 -1
  28. package/dist/types/requests.d.ts +3 -5
  29. package/dist/types/requests.d.ts.map +1 -1
  30. package/dist/types/responses.d.ts +54 -45
  31. package/dist/types/responses.d.ts.map +1 -1
  32. package/package.json +1 -1
  33. package/dist/types/graph_data.d.ts +0 -137
  34. package/dist/types/graph_data.d.ts.map +0 -1
  35. package/dist/types/graph_data.js +0 -3
  36. package/dist/types/graph_data.js.map +0 -1
package/README.md CHANGED
@@ -85,7 +85,7 @@ console.log(findings.results.length);
85
85
 
86
86
  ### Streaming
87
87
 
88
- `analyses.run`, `analyses.retry`, `codes.uploadFolderZip`, `codes.createPublicRepo` and
88
+ `analyses.run`, `codes.uploadFolderZip`, `codes.createPublicRepo` and
89
89
  `codes.createConnectedRepo` accept `withStreaming: true` and return an `EventResource`. Its
90
90
  `streamCompletion()` yields progress events until processing finishes. Status events
91
91
  (`analysis.pipeline`, `code.status`) refresh `.data`; the others (`analysis.run`, `code.step`) are
@@ -1,6 +1,7 @@
1
1
  import type { GraphCallNode, GraphResolvedStorageAccess } from "../types/graph-data.js";
2
- import type { EdgeType } from "../types/literals.js";
2
+ import type { EdgeType, LowLevelKind } from "../types/literals.js";
3
3
  import type { Graph } from "./graph.js";
4
+ export type Detail = "full" | "dedup" | "summary";
4
5
  export declare class CallNode {
5
6
  #private;
6
7
  nodeId: string | null;
@@ -10,20 +11,37 @@ export declare class CallNode {
10
11
  edgeId: string | null;
11
12
  edgeType: EdgeType | null;
12
13
  lowLevelName: string | null;
14
+ lowLevelKind: LowLevelKind | null;
13
15
  targetEffectId: string | null;
14
- isConditional: boolean;
15
- isArg: boolean;
16
16
  isCyclic: boolean;
17
17
  srcFieldNames: string[];
18
18
  dstFieldNames: string[];
19
19
  resolvedBindings: GraphResolvedStorageAccess[];
20
20
  children: CallNode[];
21
21
  constructor(init?: Partial<CallNode>);
22
+ get isArg(): boolean;
23
+ get args(): CallNode[];
24
+ get body(): CallNode[];
22
25
  /** A shallow copy, like `dataclasses.replace`. */
23
26
  clone(overrides?: Partial<CallNode>): CallNode;
27
+ /** Every node in this node's body, at any depth, each once: bodies can be shared. */
28
+ bodyNodes(): Generator<CallNode>;
29
+ /** Whether nothing in this node's body writes storage or leaves the contract. */
30
+ isPure(): boolean;
31
+ /** This node's body as its effects: storage touched, and calls leaving the contract. */
32
+ summary(): string[];
24
33
  toSchema(): GraphCallNode[];
25
34
  static fromSchema(nodes: GraphCallNode[]): CallNode;
26
- toText(): string;
35
+ displayName(): string;
36
+ label(): string;
37
+ /** `[edge phrase, label plus field details]`: renderers style the two parts separately. */
38
+ lineParts(parent: CallNode | null): [string, string];
39
+ line(parent: CallNode | null): string;
40
+ /**
41
+ * The chain as indented text. A collapsed call keeps its line and arguments, and shows its
42
+ * body as a summary of effects. Calls to `expand` (node ids) are never collapsed.
43
+ */
44
+ toText(detail?: Detail, expand?: Iterable<string>): string;
27
45
  static build(graph: Graph, nodeId: string): CallNode;
28
46
  }
29
47
  //# sourceMappingURL=call-node.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"call-node.d.ts","sourceRoot":"","sources":["../../src/graph/call-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,aAAa,EAEb,0BAA0B,EAI1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAkKxC,qBAAa,QAAQ;;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC7B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC9B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC7B,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAQ;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IACnC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IACrC,aAAa,UAAS;IACtB,KAAK,UAAS;IACd,QAAQ,UAAS;IACjB,aAAa,EAAE,MAAM,EAAE,CAAM;IAC7B,aAAa,EAAE,MAAM,EAAE,CAAM;IAC7B,gBAAgB,EAAE,0BAA0B,EAAE,CAAM;IACpD,QAAQ,EAAE,QAAQ,EAAE,CAAM;IAE1B,YAAY,IAAI,GAAE,OAAO,CAAC,QAAQ,CAAM,EAEvC;IAED,kDAAkD;IAClD,KAAK,CAAC,SAAS,GAAE,OAAO,CAAC,QAAQ,CAAM,GAAG,QAAQ,CAEjD;IAED,QAAQ,IAAI,aAAa,EAAE,CAsC1B;IAED,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,QAAQ,CAwClD;IAkCD,MAAM,IAAI,MAAM,CAwBf;IAkBD,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAiInD;CACD"}
1
+ {"version":3,"file":"call-node.d.ts","sourceRoot":"","sources":["../../src/graph/call-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,aAAa,EAEb,0BAA0B,EAI1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,QAAQ,EAAY,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AA+CxC,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAoMlD,qBAAa,QAAQ;;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC7B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC9B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC7B,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAQ;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IACnC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAQ;IACzC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IACrC,QAAQ,UAAS;IACjB,aAAa,EAAE,MAAM,EAAE,CAAM;IAC7B,aAAa,EAAE,MAAM,EAAE,CAAM;IAC7B,gBAAgB,EAAE,0BAA0B,EAAE,CAAM;IACpD,QAAQ,EAAE,QAAQ,EAAE,CAAM;IAE1B,YAAY,IAAI,GAAE,OAAO,CAAC,QAAQ,CAAM,EAEvC;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,IAAI,IAAI,IAAI,QAAQ,EAAE,CAErB;IAED,IAAI,IAAI,IAAI,QAAQ,EAAE,CAErB;IAED,kDAAkD;IAClD,KAAK,CAAC,SAAS,GAAE,OAAO,CAAC,QAAQ,CAAM,GAAG,QAAQ,CAkBjD;IAED,qFAAqF;IACpF,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,CAUhC;IAED,iFAAiF;IACjF,MAAM,IAAI,OAAO,CAUhB;IAED,wFAAwF;IACxF,OAAO,IAAI,MAAM,EAAE,CAkBlB;IAED,QAAQ,IAAI,aAAa,EAAE,CAsC1B;IAED,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,QAAQ,CAuClD;IAED,WAAW,IAAI,MAAM,CAGpB;IAED,KAAK,IAAI,MAAM,CAGd;IAED,2FAA2F;IAC3F,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBnD;IAED,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,MAAM,CAGpC;IAED;;;OAGG;IACH,MAAM,CAAC,MAAM,GAAE,MAAe,EAAE,MAAM,GAAE,QAAQ,CAAC,MAAM,CAAM,GAAG,MAAM,CA+DrE;IAwBD,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAkLnD;CACD"}
@@ -1,15 +1,53 @@
1
- const SKIP_EDGES = new Set([
2
- "overrides",
3
- "inherits",
4
- "has_ref_comment",
5
- "initializes",
6
- ]);
1
+ const CALLCHAIN_RULES = {
2
+ solidity: {
3
+ stopEdges: new Set([
4
+ "overrides",
5
+ "inherits",
6
+ "has_ref_comment",
7
+ "initializes",
8
+ "typed_as",
9
+ ]),
10
+ boundaryEdges: new Set(["calls_external"]),
11
+ },
12
+ rust: {
13
+ stopEdges: new Set([
14
+ "overrides",
15
+ "implements",
16
+ "extends",
17
+ "initializes",
18
+ ]),
19
+ boundaryEdges: new Set(["calls_external"]),
20
+ },
21
+ python: {
22
+ stopEdges: new Set(["typed_as"]),
23
+ boundaryEdges: new Set(),
24
+ },
25
+ };
7
26
  const CALL_EDGES = new Set(["calls", "calls_external"]);
27
+ const STATE_EDGES = new Set([
28
+ "reads",
29
+ "writes",
30
+ "accesses",
31
+ ]);
32
+ const WRITE_EDGES = new Set(["writes", "accesses"]);
33
+ const EXTERNAL_EDGES = new Set(["calls_external"]);
8
34
  const join = (...parts) => parts.filter((part) => Boolean(part)).join(".") || null;
35
+ const touches = (fields, accessed) => {
36
+ for (const field of fields) {
37
+ for (const access of accessed) {
38
+ if (field === access ||
39
+ access.startsWith(`${field}.`) ||
40
+ field.startsWith(`${access}.`))
41
+ return true;
42
+ }
43
+ }
44
+ return false;
45
+ };
9
46
  const isParameterFact = (fact) => "start_byte" in fact;
47
+ const bindingKey = (nodeId, binding) => JSON.stringify([nodeId, binding]);
10
48
  /**
11
- * One function invocation: its stored storage facts, plus what its storage parameters are bound to
12
- * by the call that invoked it.
49
+ * A unit bound by one call: its stored storage facts, resolved against what the call binds its
50
+ * storage parameters to.
13
51
  */
14
52
  class Frame {
15
53
  graph;
@@ -20,6 +58,7 @@ class Frame {
20
58
  refs = new Map();
21
59
  accesses = [];
22
60
  #byPos = new Map();
61
+ #binding = new Set();
23
62
  constructor(graph, node, paramSlots, path) {
24
63
  this.graph = graph;
25
64
  this.node = node;
@@ -55,11 +94,26 @@ class Frame {
55
94
  }
56
95
  }
57
96
  }
97
+ get binding() {
98
+ return [...this.paramSlots.entries()]
99
+ .sort(([a], [b]) => a - b)
100
+ .map(([index, slots]) => [index, slots]);
101
+ }
58
102
  /** The frame `call`'s callee runs in, bound by this frame's resolution of its arguments. */
59
103
  callee(call) {
60
- if (!call.dst_id || this.path.includes(call.dst_id))
104
+ if (!call.dst_id ||
105
+ this.path.includes(call.dst_id) ||
106
+ this.#binding.has(call.id))
61
107
  return null;
62
- return new Frame(this.graph, this.graph.getNode(call.dst_id), this.bind(call), [...this.path, this.node.id]);
108
+ // resolving this call's arguments can come back to the call itself (`x = f(x)`, or two
109
+ // calls feeding each other): it then binds as if that argument were unknown
110
+ this.#binding.add(call.id);
111
+ try {
112
+ return new Frame(this.graph, this.graph.getNode(call.dst_id), this.bind(call), [...this.path, this.node.id]);
113
+ }
114
+ finally {
115
+ this.#binding.delete(call.id);
116
+ }
63
117
  }
64
118
  /** Concrete slots for a stored root, with `field` appended to the path. */
65
119
  resolve(fact, field) {
@@ -124,9 +178,8 @@ export class CallNode {
124
178
  edgeId = null;
125
179
  edgeType = null;
126
180
  lowLevelName = null;
181
+ lowLevelKind = null;
127
182
  targetEffectId = null;
128
- isConditional = false;
129
- isArg = false;
130
183
  isCyclic = false;
131
184
  srcFieldNames = [];
132
185
  dstFieldNames = [];
@@ -135,9 +188,74 @@ export class CallNode {
135
188
  constructor(init = {}) {
136
189
  Object.assign(this, init);
137
190
  }
191
+ get isArg() {
192
+ return this.targetEffectId !== null;
193
+ }
194
+ get args() {
195
+ return this.children.filter((child) => child.isArg);
196
+ }
197
+ get body() {
198
+ return this.children.filter((child) => !child.isArg);
199
+ }
138
200
  /** A shallow copy, like `dataclasses.replace`. */
139
201
  clone(overrides = {}) {
140
- return new CallNode({ ...this, ...overrides });
202
+ return new CallNode({
203
+ nodeId: this.nodeId,
204
+ shortId: this.shortId,
205
+ name: this.name,
206
+ nodeType: this.nodeType,
207
+ edgeId: this.edgeId,
208
+ edgeType: this.edgeType,
209
+ lowLevelName: this.lowLevelName,
210
+ lowLevelKind: this.lowLevelKind,
211
+ targetEffectId: this.targetEffectId,
212
+ isCyclic: this.isCyclic,
213
+ srcFieldNames: this.srcFieldNames,
214
+ dstFieldNames: this.dstFieldNames,
215
+ resolvedBindings: this.resolvedBindings,
216
+ children: this.children,
217
+ ...overrides,
218
+ });
219
+ }
220
+ /** Every node in this node's body, at any depth, each once: bodies can be shared. */
221
+ *bodyNodes() {
222
+ const seen = new Set();
223
+ const stack = [...this.body];
224
+ while (stack.length) {
225
+ const cn = stack.pop();
226
+ if (seen.has(cn))
227
+ continue;
228
+ seen.add(cn);
229
+ yield cn;
230
+ stack.push(...cn.children);
231
+ }
232
+ }
233
+ /** Whether nothing in this node's body writes storage or leaves the contract. */
234
+ isPure() {
235
+ for (const cn of this.bodyNodes()) {
236
+ if ((cn.edgeType && WRITE_EDGES.has(cn.edgeType)) ||
237
+ (cn.edgeType && EXTERNAL_EDGES.has(cn.edgeType)) ||
238
+ cn.lowLevelName)
239
+ return false;
240
+ }
241
+ return true;
242
+ }
243
+ /** This node's body as its effects: storage touched, and calls leaving the contract. */
244
+ summary() {
245
+ const effects = new Map();
246
+ for (const cn of this.bodyNodes()) {
247
+ if (cn.edgeType === null)
248
+ continue;
249
+ if (STATE_EDGES.has(cn.edgeType) ||
250
+ EXTERNAL_EDGES.has(cn.edgeType) ||
251
+ cn.lowLevelName) {
252
+ const verb = cn.edgeType.replaceAll("_", " ");
253
+ const targets = effects.get(verb) ?? new Map();
254
+ targets.set(cn.lineParts(null)[1], null);
255
+ effects.set(verb, targets);
256
+ }
257
+ }
258
+ return [...effects.entries()].map(([verb, targets]) => `${verb}: ${[...targets.keys()].join(", ")}`);
141
259
  }
142
260
  toSchema() {
143
261
  const positions = new Map([[this, 0]]);
@@ -165,8 +283,8 @@ export class CallNode {
165
283
  edge_id: node.edgeId,
166
284
  edge_type: node.edgeType,
167
285
  low_level_name: node.lowLevelName,
286
+ low_level_kind: node.lowLevelKind,
168
287
  target_effect_id: node.targetEffectId,
169
- is_conditional: node.isConditional,
170
288
  is_arg: node.isArg,
171
289
  is_cyclic: node.isCyclic,
172
290
  src_field_names: [...node.srcFieldNames],
@@ -189,9 +307,8 @@ export class CallNode {
189
307
  edgeId: n.edge_id,
190
308
  edgeType: n.edge_type,
191
309
  lowLevelName: n.low_level_name,
310
+ lowLevelKind: n.low_level_kind,
192
311
  targetEffectId: n.target_effect_id,
193
- isConditional: n.is_conditional,
194
- isArg: n.is_arg,
195
312
  isCyclic: n.is_cyclic,
196
313
  srcFieldNames: [...n.src_field_names],
197
314
  dstFieldNames: [...n.dst_field_names],
@@ -216,56 +333,101 @@ export class CallNode {
216
333
  throw new Error("call chain has no nodes");
217
334
  return root;
218
335
  }
219
- // text
220
- #label() {
336
+ displayName() {
221
337
  if (this.shortId)
222
- return `${this.name || this.lowLevelName || "?"} [${this.shortId}]`;
338
+ return this.name || this.lowLevelName || "?";
223
339
  return `low-level method ${this.lowLevelName || this.name || "?"}`;
224
340
  }
225
- #line(parent) {
226
- const label = this.#label();
227
- let head = label;
341
+ label() {
342
+ const name = this.displayName();
343
+ return this.shortId ? `${name} [${this.shortId}]` : name;
344
+ }
345
+ /** `[edge phrase, label plus field details]`: renderers style the two parts separately. */
346
+ lineParts(parent) {
347
+ let phrase = "";
228
348
  if (this.edgeType) {
229
349
  const verb = this.edgeType.replaceAll("_", " ");
230
- // an input runs exactly when its effect does: only show its own condition if it differs
231
- const inheritsCondition = this.isArg && parent?.isConditional === true;
232
- if (parent?.edgeType === "has_condition" && !this.isConditional) {
233
- head = `in condition ${verb} ${label}`;
234
- }
235
- else if (this.isConditional && !inheritsCondition) {
236
- head = `conditionally ${verb} ${label}`;
237
- }
238
- else {
239
- head = `${verb} ${label}`;
240
- }
350
+ phrase =
351
+ parent?.edgeType === "has_condition" && !this.isArg
352
+ ? `conditionally ${verb}`
353
+ : verb;
241
354
  }
242
- const tail = [];
355
+ const rest = [this.label()];
356
+ if (this.lowLevelName && this.lowLevelKind)
357
+ rest.push(`(${this.lowLevelKind})`);
243
358
  if (this.srcFieldNames.length)
244
- tail.push(`src: [${this.srcFieldNames.join(",")}]`);
359
+ rest.push(`src: [${this.srcFieldNames.join(",")}]`);
245
360
  if (this.dstFieldNames.length)
246
- tail.push(`dst: [${this.dstFieldNames.join(",")}]`);
247
- return tail.length ? `${head} ${tail.join(" ")}` : head;
361
+ rest.push(`dst: [${this.dstFieldNames.join(",")}]`);
362
+ return [phrase, rest.join(" ")];
363
+ }
364
+ line(parent) {
365
+ const [phrase, rest] = this.lineParts(parent);
366
+ return phrase ? `${phrase} ${rest}` : rest;
248
367
  }
249
- toText() {
368
+ /**
369
+ * The chain as indented text. A collapsed call keeps its line and arguments, and shows its
370
+ * body as a summary of effects. Calls to `expand` (node ids) are never collapsed.
371
+ */
372
+ toText(detail = "full", expand = []) {
373
+ const expandSet = new Set(expand);
250
374
  const lines = [];
375
+ const shown = new Set();
376
+ const identities = new WeakMap();
377
+ let nextId = 0;
378
+ const objectId = (cn) => {
379
+ const existing = identities.get(cn);
380
+ if (existing !== undefined)
381
+ return existing;
382
+ const id = nextId++;
383
+ identities.set(cn, id);
384
+ return id;
385
+ };
386
+ const collapsed = (cn, body) => {
387
+ if (detail === "full" ||
388
+ body.length === 0 ||
389
+ !cn.edgeType ||
390
+ !CALL_EDGES.has(cn.edgeType))
391
+ return false;
392
+ const key = body.map(objectId).join(",");
393
+ const repeat = shown.has(key);
394
+ shown.add(key);
395
+ if (cn.nodeId && expandSet.has(cn.nodeId))
396
+ return false;
397
+ return repeat || (detail === "summary" && cn.isPure());
398
+ };
251
399
  const visit = (cn, depth, parent) => {
252
- const line = cn.#line(parent);
253
- lines.push(" ".repeat(depth) + (cn.isCyclic ? `[CYCLIC] ${line}` : line));
400
+ const pad = " ".repeat(depth);
401
+ const body = cn.body;
402
+ const hide = collapsed(cn, body);
403
+ let line = cn.line(parent);
404
+ if (cn.isCyclic)
405
+ line = `[CYCLIC] ${line}`;
406
+ if (hide)
407
+ line = `${line} [COLLAPSED]`;
408
+ lines.push(pad + line);
254
409
  const args = cn.children.filter((child) => child.isArg);
255
410
  if (args.length) {
256
- lines.push(" ".repeat(depth + 1) +
257
- (cn.edgeType && CALL_EDGES.has(cn.edgeType) ? "args" : "using"));
411
+ const header = cn.edgeType && CALL_EDGES.has(cn.edgeType)
412
+ ? "args"
413
+ : cn.edgeType === "has_condition"
414
+ ? "tests"
415
+ : "using";
416
+ lines.push(" ".repeat(depth + 1) + header);
258
417
  for (const child of args)
259
418
  visit(child, depth + 2, cn);
260
419
  }
261
- for (const child of cn.children)
262
- if (!child.isArg)
263
- visit(child, depth + 1, cn);
420
+ if (hide) {
421
+ for (const s of cn.summary())
422
+ lines.push(`${pad} ${s}`);
423
+ return;
424
+ }
425
+ for (const child of body)
426
+ visit(child, depth + 1, cn);
264
427
  };
265
428
  visit(this, 0, null);
266
429
  return lines.join("\n");
267
430
  }
268
- // build
269
431
  /** Points a struct-typed access at the concrete storage it hits. */
270
432
  #resolveTo(access) {
271
433
  this.edgeType = access.edge_type;
@@ -274,11 +436,22 @@ export class CallNode {
274
436
  this.name = access.bound_to_name;
275
437
  this.dstFieldNames = access.field ? [access.field] : [];
276
438
  }
277
- static #prune(cn) {
278
- cn.children = cn.children.filter((child) => CallNode.#prune(child));
279
- return !(cn.edgeType === "has_condition" && cn.children.length === 0);
439
+ /** Drop condition nodes with nothing under them. */
440
+ #prune() {
441
+ const done = new Set();
442
+ const keep = (cn) => {
443
+ if (!done.has(cn)) {
444
+ done.add(cn);
445
+ cn.children = cn.children.filter((child) => keep(child));
446
+ }
447
+ return !(cn.edgeType === "has_condition" && cn.children.length === 0);
448
+ };
449
+ keep(this);
280
450
  }
281
451
  static build(graph, nodeId) {
452
+ const rules = CALLCHAIN_RULES[graph.getNode(nodeId).language];
453
+ // the body of each callee, by its binding: another call with the same binding shares it
454
+ const bodies = new Map();
282
455
  const childFrame = (edge, frame) => {
283
456
  // a condition node belongs to the same function instance
284
457
  if (edge.edge_type === "has_condition")
@@ -295,9 +468,7 @@ export class CallNode {
295
468
  if (accesses.length === 0)
296
469
  return [child];
297
470
  return accesses.map((access) => {
298
- const cn = child.clone({
299
- children: child.children.filter((c) => c.isArg),
300
- });
471
+ const cn = child.clone({ children: child.args });
301
472
  cn.#resolveTo(access);
302
473
  cn.children.push(...walk(access.bound_to_node_id, null, null, path, new Map())
303
474
  .children);
@@ -305,29 +476,64 @@ export class CallNode {
305
476
  });
306
477
  };
307
478
  const attachArgs = (cn, edge, path, callerArgs) => {
308
- // inputs run in the caller's frame, with the caller's stack
479
+ // Inputs run in the caller's frame, with the caller's stack.
309
480
  if (edge === null)
310
481
  return;
311
482
  for (const [argEdge, argFrame] of callerArgs.get(edge.id) ?? []) {
312
- const child = walk(argEdge.dst_id ?? null, argEdge, childFrame(argEdge, argFrame), path, callerArgs, true);
483
+ const child = walk(argEdge.dst_id ?? null, argEdge, childFrame(argEdge, argFrame), path, callerArgs);
313
484
  cn.children.push(...resolved(child, argFrame.at(argEdge.src_start_pos), path));
314
485
  }
315
486
  };
487
+ const walkBody = (node, edge, frame, stack) => {
488
+ const childEdges = graph.getEdgesForNode(node.id, { direction: "out" });
489
+ // Inputs belong to this frame: they're walked under the effect they feed, with this frame.
490
+ const myArgs = new Map();
491
+ for (const childEdge of childEdges) {
492
+ if (!childEdge.target_effect_id)
493
+ continue;
494
+ const entries = myArgs.get(childEdge.target_effect_id);
495
+ if (entries)
496
+ entries.push([childEdge, frame]);
497
+ else
498
+ myArgs.set(childEdge.target_effect_id, [[childEdge, frame]]);
499
+ }
500
+ // reached through specific fields (`accesses Accounts dst: [pool]`): only the edges about
501
+ // those fields apply, not the ones about the node's other fields or the node as a whole
502
+ let accessed = [];
503
+ if (edge !== null &&
504
+ !CALL_EDGES.has(edge.edge_type) &&
505
+ edge.edge_type !== "has_condition")
506
+ accessed = [...edge.dst_field_names];
507
+ const body = [];
508
+ if (edge?.edge_type === "has_condition") {
509
+ for (const [argEdge, argFrame] of myArgs.get(edge.id) ?? []) {
510
+ const child = walk(argEdge.dst_id ?? null, argEdge, childFrame(argEdge, argFrame), stack, myArgs);
511
+ body.push(...resolved(child, argFrame.at(argEdge.src_start_pos), stack));
512
+ }
513
+ }
514
+ for (const childEdge of childEdges) {
515
+ if (childEdge.target_effect_id)
516
+ continue;
517
+ if (accessed.length && !touches(childEdge.src_field_names, accessed))
518
+ continue;
519
+ const child = walk(childEdge.dst_id ?? null, childEdge, childFrame(childEdge, frame), stack, myArgs);
520
+ body.push(...resolved(child, frame.at(childEdge.src_start_pos), stack));
521
+ }
522
+ return body;
523
+ };
316
524
  /** `frame` is the frame this node's body runs in: a fresh one for a callee, the enclosing one for a condition node. */
317
- const walk = (nid, edge, frame, path, callerArgs, isArg = false) => {
525
+ const walk = (nid, edge, frame, path, callerArgs) => {
318
526
  const node = nid ? graph.getNode(nid) : null;
319
- const lowLevelName = edge?.low_level_name ?? null;
320
527
  const cn = new CallNode({
321
528
  nodeId: nid,
322
529
  shortId: node?.short_id ?? null,
323
- name: node !== null ? node.name : lowLevelName,
530
+ name: node !== null ? node.name : (edge?.low_level_name ?? null),
324
531
  nodeType: node?.node_type ?? null,
325
532
  edgeId: edge?.id ?? null,
326
533
  edgeType: edge?.edge_type ?? null,
327
- lowLevelName,
534
+ lowLevelName: edge?.low_level_name ?? null,
535
+ lowLevelKind: edge?.low_level_kind ?? null,
328
536
  targetEffectId: edge?.target_effect_id ?? null,
329
- isConditional: edge ? Boolean(edge.is_conditional) : false,
330
- isArg,
331
537
  isCyclic: nid ? path.includes(nid) : false,
332
538
  srcFieldNames: [...(edge?.src_field_names ?? [])],
333
539
  dstFieldNames: [...(edge?.dst_field_names ?? [])],
@@ -336,28 +542,27 @@ export class CallNode {
336
542
  attachArgs(cn, edge, path, callerArgs);
337
543
  return cn;
338
544
  }
339
- if (cn.edgeType && SKIP_EDGES.has(cn.edgeType))
545
+ if (cn.edgeType && rules.stopEdges.has(cn.edgeType))
546
+ return cn;
547
+ if (cn.edgeType && rules.boundaryEdges.has(cn.edgeType)) {
548
+ attachArgs(cn, edge, path, callerArgs);
340
549
  return cn;
550
+ }
341
551
  // no caller context: an entrypoint, or a node started from directly
342
552
  const bodyFrame = frame ?? new Frame(graph, node, new Map(), path);
343
- const childEdges = graph.getEdgesForNode(node.id, { direction: "out" });
344
- // inputs belong to this frame: they're walked under the effect they feed, with this frame
345
- const myArgs = new Map();
346
- for (const childEdge of childEdges) {
347
- if (!childEdge.target_effect_id)
348
- continue;
349
- const entries = myArgs.get(childEdge.target_effect_id);
350
- if (entries)
351
- entries.push([childEdge, bodyFrame]);
352
- else
353
- myArgs.set(childEdge.target_effect_id, [[childEdge, bodyFrame]]);
553
+ const key = edge !== null && CALL_EDGES.has(edge.edge_type)
554
+ ? bindingKey(node.id, bodyFrame.binding)
555
+ : null;
556
+ let body = key ? bodies.get(key) : undefined;
557
+ if (body === undefined) {
558
+ body = walkBody(node, edge, bodyFrame, [...path, node.id]);
559
+ cn.children = [...body];
560
+ // a body that cut a cycle depends on the stack above it: not shared
561
+ if (key && ![...cn.bodyNodes()].some((child) => child.isCyclic))
562
+ bodies.set(key, body);
354
563
  }
355
- const stack = [...path, node.id];
356
- for (const childEdge of childEdges) {
357
- if (childEdge.target_effect_id)
358
- continue;
359
- const child = walk(childEdge.dst_id ?? null, childEdge, childFrame(childEdge, bodyFrame), stack, myArgs);
360
- cn.children.push(...resolved(child, bodyFrame.at(childEdge.src_start_pos), stack));
564
+ else {
565
+ cn.children = [...body];
361
566
  }
362
567
  if (edge === null || edge.edge_type !== "has_condition")
363
568
  cn.resolvedBindings = bodyFrame.accesses;
@@ -365,7 +570,7 @@ export class CallNode {
365
570
  return cn;
366
571
  };
367
572
  const root = walk(nodeId, null, null, [], new Map());
368
- CallNode.#prune(root);
573
+ root.#prune();
369
574
  return root;
370
575
  }
371
576
  }
@@ -1 +1 @@
1
- {"version":3,"file":"call-node.js","sourceRoot":"","sources":["../../src/graph/call-node.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,GAA0B,IAAI,GAAG,CAAC;IACjD,WAAW;IACX,UAAU;IACV,iBAAiB;IACjB,aAAa;CACb,CAAC,CAAC;AACH,MAAM,UAAU,GAA0B,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAoB/E,MAAM,IAAI,GAAG,CAAC,GAAG,KAAoC,EAAiB,EAAE,CACvE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;AAEzE,MAAM,eAAe,GAAG,CACvB,IAAiB,EACuB,EAAE,CAAC,YAAY,IAAI,IAAI,CAAC;AAEjE;;;GAGG;AACH,MAAM,KAAK;IACD,KAAK,CAAQ;IACb,IAAI,CAAoB;IACxB,UAAU,CAA8B;IACxC,IAAI,CAAO;IACpB,8FAA8F;IACrF,IAAI,GAAG,IAAI,GAAG,EAA6B,CAAC;IAC5C,QAAQ,GAAiC,EAAE,CAAC;IAC5C,MAAM,GAAG,IAAI,GAAG,EAAwC,CAAC;IAElE,YACC,KAAY,EACZ,IAAuB,EACvB,UAAuC,EACvC,IAAU;QAEV,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,MAAM,KAAK,GAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,EAAY,EAAE;gBAC/D,SAAS,EAAE,KAAK;aAChB,CAAC,EAAE,CAAC;gBACJ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;gBACxC,IAAI,IAAI,CAAC,SAAS,KAAK,eAAe,IAAI,IAAI,CAAC,MAAM;oBACpD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;QACF,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;YAC1C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnD,MAAM,MAAM,GAA+B;oBAC1C,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;oBAC/C,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,gBAAgB,EAAE,IAAI,CAAC,MAAM;oBAC7B,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ;oBACtD,aAAa,EAAE,IAAI,CAAC,IAAI;oBACxB,KAAK,EAAE,IAAI,CAAC,KAAK;iBACjB,CAAC;gBACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,UAAU,CAAC;gBACrD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACnC,IAAI,KAAK;oBAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;oBACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YACrC,CAAC;QACF,CAAC;IACF,CAAC;IAED,4FAA4F;IAC5F,MAAM,CAAC,IAAuB;QAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QACjE,OAAO,IAAI,KAAK,CACf,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EACf,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAC5B,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,OAAO,CAAC,IAAiB,EAAE,KAAgC;QAC1D,wFAAwF;QACxF,8DAA8D;QAC9D,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC;YACvC,CAAC,CAAC,IAAI,CAAC,WAAW;YAClB,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;QAC7B,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC7D,GAAG,IAAI;gBACP,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;aAC9B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS;YACxE,OAAO,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACjD,IAAI,CAAC,GAAG,EAAE,MAAM;YAAE,OAAO,EAAE,CAAC;QAE5B,IACC,IAAI,CAAC,qBAAqB,KAAK,IAAI;YACnC,IAAI,CAAC,qBAAqB,KAAK,SAAS,EACvC,CAAC;YACF,sEAAsE;YACtE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC9C,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,qFAAqF;QACrF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAW,EAAE,CAAC;QACvB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YAC7C,IAAI,GAAG,CAAC,SAAS,KAAK,IAAI,CAAC,qBAAqB;gBAAE,SAAS;YAC3D,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC5D,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACvD,CAAC;QACF,CAAC;QACD,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,0FAA0F;IAC1F,IAAI,CAAC,IAAuB;QAC3B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;QACtC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;YAC5D,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC9C,IAAI,QAAQ;gBAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;;gBACjC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,EAAE,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;CACD;AAKD,MAAM,OAAO,QAAQ;IACpB,MAAM,GAAkB,IAAI,CAAC;IAC7B,OAAO,GAAkB,IAAI,CAAC;IAC9B,IAAI,GAAkB,IAAI,CAAC;IAC3B,QAAQ,GAAkB,IAAI,CAAC;IAC/B,MAAM,GAAkB,IAAI,CAAC;IAC7B,QAAQ,GAAoB,IAAI,CAAC;IACjC,YAAY,GAAkB,IAAI,CAAC;IACnC,cAAc,GAAkB,IAAI,CAAC;IACrC,aAAa,GAAG,KAAK,CAAC;IACtB,KAAK,GAAG,KAAK,CAAC;IACd,QAAQ,GAAG,KAAK,CAAC;IACjB,aAAa,GAAa,EAAE,CAAC;IAC7B,aAAa,GAAa,EAAE,CAAC;IAC7B,gBAAgB,GAAiC,EAAE,CAAC;IACpD,QAAQ,GAAe,EAAE,CAAC;IAE1B,YAAY,IAAI,GAAsB,EAAE;QACvC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,SAAS,GAAsB,EAAE;QACtC,OAAO,IAAI,QAAQ,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,QAAQ;QACP,MAAM,SAAS,GAAG,IAAI,GAAG,CAAmB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,KAAK,GAAe,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,KAAK,GAAoB,EAAE,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnC,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC/B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBACvB,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;oBACnB,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC1B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,IAAI,CAAC,MAAM;gBACpB,QAAQ,EAAE,IAAI,CAAC,OAAO;gBACtB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,IAAI,CAAC,QAAQ;gBACxB,OAAO,EAAE,IAAI,CAAC,MAAM;gBACpB,SAAS,EAAE,IAAI,CAAC,QAAQ;gBACxB,cAAc,EAAE,IAAI,CAAC,YAAY;gBACjC,gBAAgB,EAAE,IAAI,CAAC,cAAc;gBACrC,cAAc,EAAE,IAAI,CAAC,aAAa;gBAClC,MAAM,EAAE,IAAI,CAAC,KAAK;gBAClB,SAAS,EAAE,IAAI,CAAC,QAAQ;gBACxB,eAAe,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;gBACxC,eAAe,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;gBACxC,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBAC1D,GAAG,OAAO;iBACV,CAAC,CAAC;gBACH,QAAQ;aACR,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,KAAsB;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CACtB,CAAC,CAAC,EAAE,EAAE,CACL;YACC,IAAI,QAAQ,CAAC;gBACZ,MAAM,EAAE,CAAC,CAAC,OAAO;gBACjB,OAAO,EAAE,CAAC,CAAC,QAAQ;gBACnB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,SAAS;gBACrB,MAAM,EAAE,CAAC,CAAC,OAAO;gBACjB,QAAQ,EAAE,CAAC,CAAC,SAAS;gBACrB,YAAY,EAAE,CAAC,CAAC,cAAc;gBAC9B,cAAc,EAAE,CAAC,CAAC,gBAAgB;gBAClC,aAAa,EAAE,CAAC,CAAC,cAAc;gBAC/B,KAAK,EAAE,CAAC,CAAC,MAAM;gBACf,QAAQ,EAAE,CAAC,CAAC,SAAS;gBACrB,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC;gBACrC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC;gBACrC,gBAAgB,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBACvD,GAAG,OAAO;iBACV,CAAC,CAAC;gBACH,QAAQ,EAAE,EAAE;aACZ,CAAC;YACF,CAAC;SACQ,CACX,CAAC;QACF,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAE1C,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACtC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzB,IAAI,KAAK,KAAK,SAAS;oBACtB,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,kBAAkB,CAAC,CAAC;gBACpE,OAAO,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO;IAEP,MAAM;QACL,IAAI,IAAI,CAAC,OAAO;YACf,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,IAAI,GAAG,KAAK,IAAI,CAAC,OAAO,GAAG,CAAC;QACrE,OAAO,oBAAoB,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,MAAuB;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAChD,wFAAwF;YACxF,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;YACvE,IAAI,MAAM,EAAE,QAAQ,KAAK,eAAe,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACjE,IAAI,GAAG,gBAAgB,IAAI,IAAI,KAAK,EAAE,CAAC;YACxC,CAAC;iBAAM,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACrD,IAAI,GAAG,iBAAiB,IAAI,IAAI,KAAK,EAAE,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACP,IAAI,GAAG,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;YAC3B,CAAC;QACF,CAAC;QAED,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM;YAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM;YAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,CAAC;IAED,MAAM;QACL,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,CACb,EAAY,EACZ,KAAa,EACb,MAAuB,EAChB,EAAE;YACT,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC9B,KAAK,CAAC,IAAI,CACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAC9D,CAAC;YACF,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,KAAK,CAAC,IAAI,CACT,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;oBACrB,CAAC,EAAE,CAAC,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAChE,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,IAAI;oBAAE,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YACvD,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,QAAQ;gBAC9B,IAAI,CAAC,KAAK,CAAC,KAAK;oBAAE,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC;QACF,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,QAAQ;IAER,oEAAoE;IACpE,UAAU,CAAC,MAAkC;QAC5C,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,EAAY;QACzB,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,CAAC,EAAE,CAAC,QAAQ,KAAK,eAAe,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,KAAY,EAAE,MAAc;QACxC,MAAM,UAAU,GAAG,CAClB,IAAuB,EACvB,KAAY,EACG,EAAE;YACjB,yDAAyD;YACzD,IAAI,IAAI,CAAC,SAAS,KAAK,eAAe;gBAAE,OAAO,KAAK,CAAC;YACrD,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBAAE,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC;QACb,CAAC,CAAC;QAEF;;;WAGG;QACH,MAAM,QAAQ,GAAG,CAChB,KAAe,EACf,QAA+C,EAC/C,IAAU,EACG,EAAE;YACf,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YAC1C,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC9B,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC;oBACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;iBAC/C,CAAC,CAAC;gBACH,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACtB,EAAE,CAAC,QAAQ,CAAC,IAAI,CACf,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC;qBAC3D,QAAQ,CACV,CAAC;gBACF,OAAO,EAAE,CAAC;YACX,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,CAClB,EAAY,EACZ,IAA8B,EAC9B,IAAU,EACV,UAA2C,EACpC,EAAE;YACT,4DAA4D;YAC5D,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO;YAC1B,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjE,MAAM,KAAK,GAAG,IAAI,CACjB,OAAO,CAAC,MAAM,IAAI,IAAI,EACtB,OAAO,EACP,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC7B,IAAI,EACJ,UAAU,EACV,IAAI,CACJ,CAAC;gBACF,EAAE,CAAC,QAAQ,CAAC,IAAI,CACf,GAAG,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,CAC5D,CAAC;YACH,CAAC;QACF,CAAC,CAAC;QAEF,uHAAuH;QACvH,MAAM,IAAI,GAAG,CACZ,GAAkB,EAClB,IAA8B,EAC9B,KAAmB,EACnB,IAAU,EACV,UAA2C,EAC3C,KAAK,GAAG,KAAK,EACF,EAAE;YACb,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7C,MAAM,YAAY,GAAG,IAAI,EAAE,cAAc,IAAI,IAAI,CAAC;YAElD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC;gBACvB,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,IAAI,EAAE,QAAQ,IAAI,IAAI;gBAC/B,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY;gBAC9C,QAAQ,EAAE,IAAI,EAAE,SAAS,IAAI,IAAI;gBACjC,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI;gBACxB,QAAQ,EAAE,IAAI,EAAE,SAAS,IAAI,IAAI;gBACjC,YAAY;gBACZ,cAAc,EAAE,IAAI,EAAE,gBAAgB,IAAI,IAAI;gBAC9C,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK;gBAC1D,KAAK;gBACL,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK;gBAC1C,aAAa,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,IAAI,EAAE,CAAC,CAAC;gBACjD,aAAa,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,IAAI,EAAE,CAAC,CAAC;aACjD,CAAC,CAAC;YAEH,IAAI,EAAE,CAAC,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;gBACvC,OAAO,EAAE,CAAC;YACX,CAAC;YACD,IAAI,EAAE,CAAC,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC;gBAAE,OAAO,EAAE,CAAC;YAC1D,oEAAoE;YACpE,MAAM,SAAS,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;YAEnE,MAAM,UAAU,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YAExE,0FAA0F;YAC1F,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;YAC7C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACpC,IAAI,CAAC,SAAS,CAAC,gBAAgB;oBAAE,SAAS;gBAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;gBACvD,IAAI,OAAO;oBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;;oBAC7C,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;YACvE,CAAC;YAED,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YACjC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACpC,IAAI,SAAS,CAAC,gBAAgB;oBAAE,SAAS;gBACzC,MAAM,KAAK,GAAG,IAAI,CACjB,SAAS,CAAC,MAAM,IAAI,IAAI,EACxB,SAAS,EACT,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,EAChC,KAAK,EACL,MAAM,CACN,CAAC;gBACF,EAAE,CAAC,QAAQ,CAAC,IAAI,CACf,GAAG,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,CAChE,CAAC;YACH,CAAC;YAED,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,eAAe;gBACtD,EAAE,CAAC,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC;YAE1C,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;YACvC,OAAO,EAAE,CAAC;QACX,CAAC,CAAC;QAEF,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACrD,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACb,CAAC;CACD"}
1
+ {"version":3,"file":"call-node.js","sourceRoot":"","sources":["../../src/graph/call-node.ts"],"names":[],"mappings":"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"}