@ttsc/graph 0.16.6 → 0.16.8

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 (59) hide show
  1. package/README.md +45 -25
  2. package/lib/TtscGraphApplication.js +39 -16
  3. package/lib/TtscGraphApplication.js.map +1 -1
  4. package/lib/model/TtscGraphMemory.js +43 -4
  5. package/lib/model/TtscGraphMemory.js.map +1 -1
  6. package/lib/model/loadGraph.js +74 -90
  7. package/lib/model/loadGraph.js.map +1 -1
  8. package/lib/reduce.js +34 -3
  9. package/lib/reduce.js.map +1 -1
  10. package/lib/server/createServer.js +650 -247
  11. package/lib/server/createServer.js.map +1 -1
  12. package/lib/server/pathPolicy.js +35 -0
  13. package/lib/server/pathPolicy.js.map +1 -0
  14. package/lib/server/resultGuide.js +16 -0
  15. package/lib/server/resultGuide.js.map +1 -0
  16. package/lib/server/runDetails.js +71 -10
  17. package/lib/server/runDetails.js.map +1 -1
  18. package/lib/server/runEntrypoints.js +3 -4
  19. package/lib/server/runEntrypoints.js.map +1 -1
  20. package/lib/server/runLookup.js +21 -9
  21. package/lib/server/runLookup.js.map +1 -1
  22. package/lib/server/runOverview.js +13 -6
  23. package/lib/server/runOverview.js.map +1 -1
  24. package/lib/server/runTour.js +737 -0
  25. package/lib/server/runTour.js.map +1 -0
  26. package/lib/server/runTrace.js +108 -22
  27. package/lib/server/runTrace.js.map +1 -1
  28. package/lib/structures/ITtscGraphNext.js +3 -0
  29. package/lib/structures/ITtscGraphNext.js.map +1 -0
  30. package/lib/structures/ITtscGraphTour.js +3 -0
  31. package/lib/structures/ITtscGraphTour.js.map +1 -0
  32. package/lib/structures/index.js +2 -0
  33. package/lib/structures/index.js.map +1 -1
  34. package/package.json +3 -8
  35. package/src/TtscGraphApplication.ts +49 -16
  36. package/src/model/TtscGraphMemory.ts +46 -4
  37. package/src/reduce.ts +37 -5
  38. package/src/server/createServer.ts +7 -2
  39. package/src/server/pathPolicy.ts +43 -0
  40. package/src/server/resultGuide.ts +20 -0
  41. package/src/server/runDetails.ts +90 -6
  42. package/src/server/runEntrypoints.ts +9 -4
  43. package/src/server/runLookup.ts +33 -6
  44. package/src/server/runOverview.ts +24 -8
  45. package/src/server/runTour.ts +881 -0
  46. package/src/server/runTrace.ts +151 -23
  47. package/src/structures/ITtscGraphApplication.ts +126 -57
  48. package/src/structures/ITtscGraphDetails.ts +74 -11
  49. package/src/structures/ITtscGraphEntrypoints.ts +46 -15
  50. package/src/structures/ITtscGraphEscape.ts +19 -9
  51. package/src/structures/ITtscGraphLookup.ts +36 -15
  52. package/src/structures/ITtscGraphNext.ts +23 -0
  53. package/src/structures/ITtscGraphOverview.ts +20 -5
  54. package/src/structures/ITtscGraphTour.ts +150 -0
  55. package/src/structures/ITtscGraphTrace.ts +58 -21
  56. package/src/structures/index.ts +2 -0
  57. package/lib/server/instructions.js +0 -80
  58. package/lib/server/instructions.js.map +0 -1
  59. package/src/server/instructions.ts +0 -76
package/README.md CHANGED
@@ -1,36 +1,28 @@
1
1
  # `@ttsc/graph`
2
2
 
3
- ![banner of @ttsc/graph](https://ttsc.dev/og.jpg)
3
+ ![banner of @ttsc/graph](https://ttsc.dev/og-graph.png)
4
4
 
5
5
  [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/samchon/ttsc/blob/master/LICENSE) [![NPM Version](https://img.shields.io/npm/v/@ttsc/graph.svg)](https://www.npmjs.com/package/@ttsc/graph) [![NPM Downloads](https://img.shields.io/npm/dm/@ttsc/graph.svg)](https://www.npmjs.com/package/@ttsc/graph) [![Build Status](https://github.com/samchon/ttsc/workflows/test/badge.svg)](https://github.com/samchon/ttsc/actions?query=workflow%3Atest) [![Guide Documents](https://img.shields.io/badge/Guide-Documents-forestgreen)](https://ttsc.dev/docs/graph) [![Discord Badge](https://img.shields.io/badge/discord-samchon-d91965?style=flat&labelColor=5866f2&logo=discord&logoColor=white&link=https://discord.gg/E94XhzrUCZ)](https://discord.gg/E94XhzrUCZ)
6
6
 
7
- Gives your AI coding agent a **map of your TypeScript codebase**, over MCP, so it answers "how does this work?" without opening file after file.
7
+ `@ttsc/graph` gives your coding agent a **graph of your TypeScript codebase** over MCP: what calls what, what depends on what, where each piece lives.
8
8
 
9
- Ask an agent like Claude Code or Codex about your project and it works file by file: open one, follow an import, open the next, until it has pieced the picture together by hand. Slow, token-hungry, and every relationship is a guess from reading text.
9
+ It is drawn by the real TypeScript compiler, so it is exact, and every claim is anchored to a file and line you can open.
10
10
 
11
- `@ttsc/graph` hands it the map up front: what calls what, what depends on what, where each piece lives. Drawn by the real TypeScript compiler, so it is exact, not skimmed.
11
+ The agent answers structural questions from the graph instead of crawling file by file, which cuts its tokens by roughly 10x on open-ended "how does this work?" questions.
12
12
 
13
- On a public benchmark, an agent answered while reading **zero files**, cutting tokens by **77% to 86%** and tool calls by **94% to 95%** (see the [benchmark](https://ttsc.dev/docs/benchmark/graph)).
14
-
15
- You can also browse the whole map. This is TypeORM in 3D, colored by kind ([live viewer](https://ttsc.dev/docs/graph/viewer)):
16
-
17
- [![The TypeORM code graph rendered in 3D](https://ttsc.dev/graph/typeorm.png)](https://ttsc.dev/docs/graph/viewer)
13
+ For why I built it, how it works in depth, and how it compares to `codegraph`, `codebase-memory-mcp`, and `serena`, read the launch post: https://ttsc.dev/blog/i-made-ts-compiler-graph-mcp
18
14
 
19
15
  ## Setup
20
16
 
21
- ### Install
22
-
23
17
  ```bash
24
18
  npm install -D ttsc @ttsc/graph typescript@rc
25
19
  ```
26
20
 
27
- `@ttsc/graph` reads the map from the program `ttsc` already type-checked, so install the two together.
28
-
29
- ### Connect your agent
21
+ `@ttsc/graph` reads the graph from the program `ttsc` type-checked, so install the two together.
30
22
 
31
- Add the server to your agent's MCP config, once.
23
+ `ttsc` runs on the TypeScript-Go (TypeScript v7) runtime, which is still a release candidate, so the install pins `typescript@rc`. It does not run on stable TypeScript v6.x yet.
32
24
 
33
- For Claude Code, that is a `.mcp.json` in your project root:
25
+ Add the server to your agent's MCP config, once. For Claude Code, that is a `.mcp.json` in your project root:
34
26
 
35
27
  ```json
36
28
  {
@@ -43,16 +35,50 @@ For Claude Code, that is a `.mcp.json` in your project root:
43
35
  }
44
36
  ```
45
37
 
46
- Start your agent from your project root so the server finds your `tsconfig.json`. The agent queries the map on its own; you never call it by hand.
38
+ Start your agent from your project root so the server finds your `tsconfig.json`. The agent queries the graph on its own; you never call it by hand.
39
+
40
+ The example says Claude Code, but any MCP-capable agent works (Codex, Cursor, and others).
41
+
42
+ ## How it works
43
+
44
+ The whole MCP surface is one tool, `inspect_typescript_graph`. You ask in plain language, and a short required chain of thought inside the tool (`question`, `draft`, `review`) plans the smallest query and picks one operation.
45
+
46
+ ![The forced chain of thought inside one tool call](https://ttsc.dev/blog/images/cot-pipeline.svg)
47
+
48
+ - **An index, not source bodies.** It returns names, edges, signatures, and spans, never code, so the response stays flat as the repository grows.
49
+ - **Built on the real compiler.** It reads the program `ttsc` type-checked, so `tsconfig` aliases, pnpm monorepos, symlinks, and re-exports resolve exactly, where a text parser can only guess.
50
+ - **It does not force itself.** It states when the graph is the right source and offers a first-class `escape` for everything else.
51
+ - **Errors and lint too.** `tsc` compile errors and `@ttsc/lint` and plugin (typia, nestia) findings ride the same graph, so "what is broken here?" answers from one index.
52
+
53
+ The operations (`tour`, `entrypoints`, `lookup`, `trace`, `details`, `overview`, `escape`) and the full request and result contract are in the Design guide: https://ttsc.dev/docs/graph/design
54
+
55
+ ## Benchmark
47
56
 
48
- ### Browse it in 3D
57
+ ![Common prompt median token use on Codex GPT-5.4 Mini](https://ttsc.dev/benchmark/svg/graph-common-codex-gpt-5.4-mini.svg)
49
58
 
50
- Run this in your own project to open that 3D map in your browser, served from a local port:
59
+ Across eight real repositories, `@ttsc/graph` holds a flat, low median token cost while the alternatives swing with repository size.
60
+
61
+ The full benchmark has the interactive charts, every model, and the method: https://ttsc.dev/docs/benchmark/graph
62
+
63
+ ## Browse it in 3D
64
+
65
+ Run this in your own project to open the graph in your browser, served from a local port:
51
66
 
52
67
  ```bash
53
68
  npx @ttsc/graph view
54
69
  ```
55
70
 
71
+ This is TypeORM in 3D, colored by kind ([live viewer](https://ttsc.dev/docs/graph/viewer)):
72
+
73
+ [![The TypeORM code graph rendered in 3D](https://ttsc.dev/graph/typeorm.png)](https://ttsc.dev/docs/graph/viewer)
74
+
75
+ ## Learn more
76
+
77
+ - [Launch post](https://ttsc.dev/blog/i-made-ts-compiler-graph-mcp): why I built it, and how it compares to `codegraph`, `codebase-memory-mcp`, and `serena`.
78
+ - [Design](https://ttsc.dev/docs/graph/design): the one tool, its request and result branches, and the node and edge kinds.
79
+ - [Comparison](https://ttsc.dev/docs/graph/compare): the head-to-head with other graph and language-server MCP tools.
80
+ - [Benchmark](https://ttsc.dev/docs/benchmark/graph): the interactive charts, every model, and the method.
81
+
56
82
  ## Sponsors
57
83
 
58
84
  [![Sponsors](https://raw.githubusercontent.com/samchon/sponsor-images/refs/heads/master/public/circle.svg)](https://github.com/sponsors/samchon)
@@ -60,9 +86,3 @@ npx @ttsc/graph view
60
86
  Thanks for your support.
61
87
 
62
88
  Your [donation](https://github.com/sponsors/samchon) encourages `ttsc` development.
63
-
64
- ## References
65
-
66
- `@ttsc/graph` is inspired by [codegraph](https://github.com/colbymchenry/codegraph), which first put a code graph in front of an agent over MCP. The [benchmark](https://ttsc.dev/docs/benchmark/graph) here is a faithful port of codegraph's.
67
-
68
- The difference is where the map comes from. codegraph parses the shape of your code and infers how the pieces connect, while `@ttsc/graph` asks the real TypeScript compiler, which has already resolved every import and reference, so the map is exact rather than inferred.
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TtscGraphApplication = void 0;
4
+ const resultGuide_1 = require("./server/resultGuide");
4
5
  const runDetails_1 = require("./server/runDetails");
5
6
  const runEntrypoints_1 = require("./server/runEntrypoints");
6
7
  const runLookup_1 = require("./server/runLookup");
7
8
  const runOverview_1 = require("./server/runOverview");
9
+ const runTour_1 = require("./server/runTour");
8
10
  const runTrace_1 = require("./server/runTrace");
9
11
  /**
10
12
  * The MCP tool surface as a plain class over the resident
@@ -25,35 +27,56 @@ class TtscGraphApplication {
25
27
  constructor(source) {
26
28
  this.graph = typeof source === "function" ? source : () => source;
27
29
  }
28
- query(props) {
30
+ inspect_typescript_graph(props) {
31
+ if (props.request.type === "escape") {
32
+ const result = this.escape(props.request.reason);
33
+ if (props.request.nextStep !== undefined) {
34
+ result.nextStep = props.request.nextStep;
35
+ }
36
+ return {
37
+ result,
38
+ };
39
+ }
29
40
  switch (props.request.type) {
30
41
  case "entrypoints":
31
- return { result: (0, runEntrypoints_1.runEntrypoints)(this.graph(), props.request) };
42
+ return {
43
+ result: (0, runEntrypoints_1.runEntrypoints)(this.graph(), props.request),
44
+ };
32
45
  case "lookup":
33
- return { result: (0, runLookup_1.runLookup)(this.graph(), props.request) };
46
+ return {
47
+ result: (0, runLookup_1.runLookup)(this.graph(), props.request),
48
+ };
34
49
  case "trace":
35
- return { result: (0, runTrace_1.runTrace)(this.graph(), props.request) };
50
+ return {
51
+ result: (0, runTrace_1.runTrace)(this.graph(), props.request),
52
+ };
36
53
  case "details":
37
- return { result: (0, runDetails_1.runDetails)(this.graph(), props.request) };
54
+ return {
55
+ result: (0, runDetails_1.runDetails)(this.graph(), props.request),
56
+ };
38
57
  case "overview":
39
- return { result: (0, runOverview_1.runOverview)(this.graph(), props.request) };
40
- case "escape": {
41
- const result = {
42
- type: "escape",
43
- skipped: true,
44
- reason: props.request.reason,
58
+ return {
59
+ result: (0, runOverview_1.runOverview)(this.graph(), props.request),
45
60
  };
46
- if (props.request.nextStep !== undefined) {
47
- result.nextStep = props.request.nextStep;
48
- }
61
+ case "tour":
49
62
  return {
50
- result,
63
+ result: (0, runTour_1.runTour)(this.graph(), props.request),
51
64
  };
52
- }
53
65
  default:
54
66
  throw new Error("Unknown graph request type");
55
67
  }
56
68
  }
69
+ escape(reason, nextStep, action = "outside") {
70
+ return {
71
+ type: "escape",
72
+ skipped: true,
73
+ reason,
74
+ next: (0, resultGuide_1.resultNext)(action, nextStep ??
75
+ "Graph evidence is exhausted or not the next evidence source."),
76
+ guide: (0, resultGuide_1.resultGuide)("Finish from existing graph evidence, state the graph gap, or ask for clarification."),
77
+ ...(nextStep !== undefined ? { nextStep } : {}),
78
+ };
79
+ }
57
80
  }
58
81
  exports.TtscGraphApplication = TtscGraphApplication;
59
82
  //# sourceMappingURL=TtscGraphApplication.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TtscGraphApplication.js","sourceRoot":"","sources":["../src/TtscGraphApplication.ts"],"names":[],"mappings":";;;AACA,oDAAiD;AACjD,4DAAyD;AACzD,kDAA+C;AAC/C,sDAAmD;AACnD,gDAA6C;AAM7C;;;;;;;;;;;;;GAaG;AACH;IACmB,KAAK,CAAwB;IAE9C,YAAmB,MAAuB;QACxC,IAAI,CAAC,KAAK,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;IACpE,CAAC;IAEM,KAAK,CACV,KAAmC;QAEnC,QAAQ,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC3B,KAAK,aAAa;gBAChB,OAAO,EAAE,MAAM,EAAE,IAAA,+BAAc,EAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACjE,KAAK,QAAQ;gBACX,OAAO,EAAE,MAAM,EAAE,IAAA,qBAAS,EAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5D,KAAK,OAAO;gBACV,OAAO,EAAE,MAAM,EAAE,IAAA,mBAAQ,EAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3D,KAAK,SAAS;gBACZ,OAAO,EAAE,MAAM,EAAE,IAAA,uBAAU,EAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7D,KAAK,UAAU;gBACb,OAAO,EAAE,MAAM,EAAE,IAAA,yBAAW,EAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9D,KAAK,QAAQ,EAAE,CAAC;gBACd,MAAM,MAAM,GAAqB;oBAC/B,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;iBAC7B,CAAC;gBACF,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;oBACzC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAC3C,CAAC;gBACD,OAAO;oBACL,MAAM;iBACP,CAAC;YACJ,CAAC;YACD;gBACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"TtscGraphApplication.js","sourceRoot":"","sources":["../src/TtscGraphApplication.ts"],"names":[],"mappings":";;;AACA,sDAA+D;AAC/D,oDAAiD;AACjD,4DAAyD;AACzD,kDAA+C;AAC/C,sDAAmD;AACnD,8CAA2C;AAC3C,gDAA6C;AAM7C;;;;;;;;;;;;;GAaG;AACH;IACmB,KAAK,CAAwB;IAE9C,YAAmB,MAAuB;QACxC,IAAI,CAAC,KAAK,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;IACpE,CAAC;IAEM,wBAAwB,CAC7B,KAAmC;QAEnC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACzC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC3C,CAAC;YACD,OAAO;gBACL,MAAM;aACP,CAAC;QACJ,CAAC;QACD,QAAQ,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC3B,KAAK,aAAa;gBAChB,OAAO;oBACL,MAAM,EAAE,IAAA,+BAAc,EAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC;iBACpD,CAAC;YACJ,KAAK,QAAQ;gBACX,OAAO;oBACL,MAAM,EAAE,IAAA,qBAAS,EAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC;iBAC/C,CAAC;YACJ,KAAK,OAAO;gBACV,OAAO;oBACL,MAAM,EAAE,IAAA,mBAAQ,EAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC;iBAC9C,CAAC;YACJ,KAAK,SAAS;gBACZ,OAAO;oBACL,MAAM,EAAE,IAAA,uBAAU,EAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC;iBAChD,CAAC;YACJ,KAAK,UAAU;gBACb,OAAO;oBACL,MAAM,EAAE,IAAA,yBAAW,EAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC;iBACjD,CAAC;YACJ,KAAK,MAAM;gBACT,OAAO;oBACL,MAAM,EAAE,IAAA,iBAAO,EAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC;iBAC7C,CAAC;YACJ;gBACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAEO,MAAM,CACZ,MAAc,EACd,QAAiB,EACjB,MAAM,GAAqC,SAAS;QAEpD,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,IAAI;YACb,MAAM;YACN,IAAI,EAAE,IAAA,wBAAU,EACd,MAAM,EACN,QAAQ;gBACN,8DAA8D,CACjE;YACD,KAAK,EAAE,IAAA,yBAAW,EAChB,qFAAqF,CACtF;YACD,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChD,CAAC;IACJ,CAAC;CACF"}
@@ -7,9 +7,9 @@ exports.TtscGraphMemory = void 0;
7
7
  * It loads one `ttscgraph dump` — the checker-resolved fact graph — then
8
8
  * synthesizes the structural relationships the dump deliberately leaves to this
9
9
  * layer: `file` container nodes, the `contains` ownership tree, and `exports`
10
- * edges, plus the refinement of a class-member `variable` to a `property`.
11
- * Every tool call is then a lookup or a traversal over the indexes built here;
12
- * nothing recompiles.
10
+ * edges, plus class/interface member implementation edges and the refinement of
11
+ * a class-member `variable` to a `property`. Every tool call is then a lookup
12
+ * or a traversal over the indexes built here; nothing recompiles.
13
13
  */
14
14
  class TtscGraphMemory {
15
15
  byId;
@@ -159,10 +159,13 @@ function synthesize(dump) {
159
159
  // Ownership: a member is contained by its owner; a top-level declaration by
160
160
  // its file. Exports: a file exports each of its public nodes.
161
161
  const structural = [];
162
+ const membersByOwner = new Map();
162
163
  for (const node of nodes) {
163
164
  if (node.external || node.file === "")
164
165
  continue;
165
166
  const parent = owner(node);
167
+ if (parent !== undefined)
168
+ push(membersByOwner, parent.id, node);
166
169
  const container = parent ? parent.id : fileNodeId(node.file);
167
170
  structural.push({
168
171
  from: container,
@@ -177,9 +180,45 @@ function synthesize(dump) {
177
180
  });
178
181
  }
179
182
  }
183
+ const synthesized = [...edges, ...structural];
184
+ const edgeKeys = new Set(synthesized.map((edge) => `${edge.kind}\0${edge.from}\0${edge.to}`));
185
+ const byId = new Map(nodes.map((node) => [node.id, node]));
186
+ for (const edge of edges) {
187
+ const kind = edge.kind === "implements"
188
+ ? "implements"
189
+ : edge.kind === "extends"
190
+ ? "overrides"
191
+ : undefined;
192
+ if (kind === undefined)
193
+ continue;
194
+ const derived = byId.get(edge.from);
195
+ const base = byId.get(edge.to);
196
+ if (derived === undefined || base === undefined)
197
+ continue;
198
+ const derivedMembers = membersByOwner.get(derived.id) ?? [];
199
+ const baseMembers = membersByOwner.get(base.id) ?? [];
200
+ for (const baseMember of baseMembers) {
201
+ const derivedMember = derivedMembers.find((member) => member.name === baseMember.name &&
202
+ implementationMemberKinds.has(member.kind) &&
203
+ implementationMemberKinds.has(baseMember.kind));
204
+ if (derivedMember === undefined)
205
+ continue;
206
+ const key = `${kind}\0${derivedMember.id}\0${baseMember.id}`;
207
+ if (edgeKeys.has(key))
208
+ continue;
209
+ edgeKeys.add(key);
210
+ synthesized.push({
211
+ from: derivedMember.id,
212
+ to: baseMember.id,
213
+ kind,
214
+ evidence: derivedMember.implementation ?? derivedMember.evidence,
215
+ });
216
+ }
217
+ }
180
218
  return {
181
219
  nodes: [...nodes, ...fileNodes.values()],
182
- edges: [...edges, ...structural],
220
+ edges: synthesized,
183
221
  };
184
222
  }
223
+ const implementationMemberKinds = new Set(["method", "property"]);
185
224
  //# sourceMappingURL=TtscGraphMemory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TtscGraphMemory.js","sourceRoot":"","sources":["../../src/model/TtscGraphMemory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TtscGraphMemory.js","sourceRoot":"","sources":["../../src/model/TtscGraphMemory.ts"],"names":[],"mappings":"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"}
@@ -89,12 +89,41 @@ function parseDump(json) {
89
89
  throw new Error(`@ttsc/graph: dump output is not valid JSON: ${error instanceof Error ? error.message : String(error)}`);
90
90
  }
91
91
  return (() => {
92
- const _iv4 = new Set(["class", "enum", "external_symbol", "file", "function", "interface", "method", "module", "namespace", "package", "parameter", "property", "type", "variable"]);
93
- const _iv6 = new Set(["abstract", "async", "const", "declare", "default", "export", "optional", "private", "protected", "public", "readonly", "static"]);
94
- const _iv9 = new Set(["accesses", "calls", "contains", "decorates", "exports", "extends", "implements", "imports", "instantiates", "overrides", "renders", "tests", "type_ref"]);
95
- const _av13 = new Set(["class", "enum", "external_symbol", "file", "function", "interface", "method", "module", "namespace", "package", "parameter", "property", "type", "variable"]);
96
- const _av15 = new Set(["abstract", "async", "const", "declare", "default", "export", "optional", "private", "protected", "public", "readonly", "static"]);
97
- const _av18 = new Set(["accesses", "calls", "contains", "decorates", "exports", "extends", "implements", "imports", "instantiates", "overrides", "renders", "tests", "type_ref"]);
92
+ const _iv0 = new Set(["class", "enum", "external_symbol", "file", "function", "interface", "method", "module", "namespace", "package", "parameter", "property", "type", "variable"]);
93
+ const _ip0 = input => "string" === typeof input["name"];
94
+ const _ip1 = input => "string" === typeof input["file"];
95
+ const _iv1 = new Set(["abstract", "async", "const", "declare", "default", "export", "optional", "private", "protected", "public", "readonly", "static"]);
96
+ const _ip2 = input => undefined === input["evidence"] || "object" === typeof input["evidence"] && null !== input["evidence"] && _io4(input["evidence"]);
97
+ const _iv2 = new Set(["accesses", "calls", "contains", "decorates", "exports", "extends", "implements", "imports", "instantiates", "overrides", "renders", "tests", "type_ref"]);
98
+ const _av0 = new Set(["class", "enum", "external_symbol", "file", "function", "interface", "method", "module", "namespace", "package", "parameter", "property", "type", "variable"]);
99
+ const _ae0 = "(\"class\" | \"enum\" | \"external_symbol\" | \"file\" | \"function\" | \"interface\" | \"method\" | \"module\" | \"namespace\" | \"package\" | \"parameter\" | \"property\" | \"type\" | \"variable\")";
100
+ const _ap0 = (input, _path, _exceptionable = true) => "string" === typeof input["name"] || _a._assertGuard(_exceptionable, {
101
+ method: "typia.assert",
102
+ path: _path + ".name",
103
+ expected: "string",
104
+ value: input["name"]
105
+ }, _errorFactory);
106
+ const _ap1 = (input, _path, _exceptionable = true) => "string" === typeof input["file"] || _a._assertGuard(_exceptionable, {
107
+ method: "typia.assert",
108
+ path: _path + ".file",
109
+ expected: "string",
110
+ value: input["file"]
111
+ }, _errorFactory);
112
+ const _av1 = new Set(["abstract", "async", "const", "declare", "default", "export", "optional", "private", "protected", "public", "readonly", "static"]);
113
+ const _ae1 = "(\"abstract\" | \"async\" | \"const\" | \"declare\" | \"default\" | \"export\" | \"optional\" | \"private\" | \"protected\" | \"public\" | \"readonly\" | \"static\")";
114
+ const _ap2 = (input, _path, _exceptionable = true) => undefined === input["evidence"] || ("object" === typeof input["evidence"] && null !== input["evidence"] || _a._assertGuard(_exceptionable, {
115
+ method: "typia.assert",
116
+ path: _path + ".evidence",
117
+ expected: "(ITtscGraphEvidence | undefined)",
118
+ value: input["evidence"]
119
+ }, _errorFactory)) && _ao4(input["evidence"], _path + ".evidence", true && _exceptionable) || _a._assertGuard(_exceptionable, {
120
+ method: "typia.assert",
121
+ path: _path + ".evidence",
122
+ expected: "(ITtscGraphEvidence | undefined)",
123
+ value: input["evidence"]
124
+ }, _errorFactory);
125
+ const _av2 = new Set(["accesses", "calls", "contains", "decorates", "exports", "extends", "implements", "imports", "instantiates", "overrides", "renders", "tests", "type_ref"]);
126
+ const _ae2 = "(\"accesses\" | \"calls\" | \"contains\" | \"decorates\" | \"exports\" | \"extends\" | \"implements\" | \"imports\" | \"instantiates\" | \"overrides\" | \"renders\" | \"tests\" | \"type_ref\")";
98
127
  const _ao0 = (input, _path, _exceptionable = true) => ("string" === typeof input.project || _a._assertGuard(_exceptionable, {
99
128
  method: "typia.assert",
100
129
  path: _path + ".project",
@@ -110,14 +139,14 @@ function parseDump(json) {
110
139
  path: _path + ".nodes",
111
140
  expected: "Array<ITtscGraphNode>",
112
141
  value: input.nodes
113
- }, _errorFactory)) && input.nodes.every((elem, _index10) => ("object" === typeof elem && null !== elem || _a._assertGuard(_exceptionable, {
142
+ }, _errorFactory)) && input.nodes.every((elem, _index7) => ("object" === typeof elem && null !== elem || _a._assertGuard(_exceptionable, {
114
143
  method: "typia.assert",
115
- path: _path + ".nodes[" + _index10 + "]",
144
+ path: _path + ".nodes[" + _index7 + "]",
116
145
  expected: "ITtscGraphNode",
117
146
  value: elem
118
- }, _errorFactory)) && _ao1(elem, _path + ".nodes[" + _index10 + "]", true && _exceptionable) || _a._assertGuard(_exceptionable, {
147
+ }, _errorFactory)) && _ao1(elem, _path + ".nodes[" + _index7 + "]", true && _exceptionable) || _a._assertGuard(_exceptionable, {
119
148
  method: "typia.assert",
120
- path: _path + ".nodes[" + _index10 + "]",
149
+ path: _path + ".nodes[" + _index7 + "]",
121
150
  expected: "ITtscGraphNode",
122
151
  value: elem
123
152
  }, _errorFactory)) || _a._assertGuard(_exceptionable, {
@@ -130,14 +159,14 @@ function parseDump(json) {
130
159
  path: _path + ".edges",
131
160
  expected: "Array<ITtscGraphEdge>",
132
161
  value: input.edges
133
- }, _errorFactory)) && input.edges.every((elem, _index11) => ("object" === typeof elem && null !== elem || _a._assertGuard(_exceptionable, {
162
+ }, _errorFactory)) && input.edges.every((elem, _index8) => ("object" === typeof elem && null !== elem || _a._assertGuard(_exceptionable, {
134
163
  method: "typia.assert",
135
- path: _path + ".edges[" + _index11 + "]",
164
+ path: _path + ".edges[" + _index8 + "]",
136
165
  expected: "ITtscGraphEdge",
137
166
  value: elem
138
- }, _errorFactory)) && _ao5(elem, _path + ".edges[" + _index11 + "]", true && _exceptionable) || _a._assertGuard(_exceptionable, {
167
+ }, _errorFactory)) && _ao5(elem, _path + ".edges[" + _index8 + "]", true && _exceptionable) || _a._assertGuard(_exceptionable, {
139
168
  method: "typia.assert",
140
- path: _path + ".edges[" + _index11 + "]",
169
+ path: _path + ".edges[" + _index8 + "]",
141
170
  expected: "ITtscGraphEdge",
142
171
  value: elem
143
172
  }, _errorFactory)) || _a._assertGuard(_exceptionable, {
@@ -150,14 +179,14 @@ function parseDump(json) {
150
179
  path: _path + ".diagnostics",
151
180
  expected: "(Array<ITtscGraphDiagnostic> | undefined)",
152
181
  value: input.diagnostics
153
- }, _errorFactory)) && input.diagnostics.every((elem, _index12) => ("object" === typeof elem && null !== elem || _a._assertGuard(_exceptionable, {
182
+ }, _errorFactory)) && input.diagnostics.every((elem, _index9) => ("object" === typeof elem && null !== elem || _a._assertGuard(_exceptionable, {
154
183
  method: "typia.assert",
155
- path: _path + ".diagnostics[" + _index12 + "]",
184
+ path: _path + ".diagnostics[" + _index9 + "]",
156
185
  expected: "ITtscGraphDiagnostic",
157
186
  value: elem
158
- }, _errorFactory)) && _ao6(elem, _path + ".diagnostics[" + _index12 + "]", true && _exceptionable) || _a._assertGuard(_exceptionable, {
187
+ }, _errorFactory)) && _ao6(elem, _path + ".diagnostics[" + _index9 + "]", true && _exceptionable) || _a._assertGuard(_exceptionable, {
159
188
  method: "typia.assert",
160
- path: _path + ".diagnostics[" + _index12 + "]",
189
+ path: _path + ".diagnostics[" + _index9 + "]",
161
190
  expected: "ITtscGraphDiagnostic",
162
191
  value: elem
163
192
  }, _errorFactory)) || _a._assertGuard(_exceptionable, {
@@ -171,27 +200,17 @@ function parseDump(json) {
171
200
  path: _path + ".id",
172
201
  expected: "string",
173
202
  value: input.id
174
- }, _errorFactory)) && (true === _av13.has(input.kind) || _a._assertGuard(_exceptionable, {
203
+ }, _errorFactory)) && (true === _av0.has(input.kind) || _a._assertGuard(_exceptionable, {
175
204
  method: "typia.assert",
176
205
  path: _path + ".kind",
177
- expected: "(\"class\" | \"enum\" | \"external_symbol\" | \"file\" | \"function\" | \"interface\" | \"method\" | \"module\" | \"namespace\" | \"package\" | \"parameter\" | \"property\" | \"type\" | \"variable\")",
206
+ expected: _ae0,
178
207
  value: input.kind
179
- }, _errorFactory)) && ("string" === typeof input.name || _a._assertGuard(_exceptionable, {
180
- method: "typia.assert",
181
- path: _path + ".name",
182
- expected: "string",
183
- value: input.name
184
- }, _errorFactory)) && (undefined === input.qualifiedName || "string" === typeof input.qualifiedName || _a._assertGuard(_exceptionable, {
208
+ }, _errorFactory)) && _ap0(input, _path, true && _exceptionable) && (undefined === input.qualifiedName || "string" === typeof input.qualifiedName || _a._assertGuard(_exceptionable, {
185
209
  method: "typia.assert",
186
210
  path: _path + ".qualifiedName",
187
211
  expected: "(string | undefined)",
188
212
  value: input.qualifiedName
189
- }, _errorFactory)) && ("string" === typeof input.file || _a._assertGuard(_exceptionable, {
190
- method: "typia.assert",
191
- path: _path + ".file",
192
- expected: "string",
193
- value: input.file
194
- }, _errorFactory)) && ("boolean" === typeof input.external || _a._assertGuard(_exceptionable, {
213
+ }, _errorFactory)) && _ap1(input, _path, true && _exceptionable) && ("boolean" === typeof input.external || _a._assertGuard(_exceptionable, {
195
214
  method: "typia.assert",
196
215
  path: _path + ".external",
197
216
  expected: "boolean",
@@ -211,10 +230,10 @@ function parseDump(json) {
211
230
  path: _path + ".modifiers",
212
231
  expected: "(Array<TtscGraphNodeModifier> | undefined)",
213
232
  value: input.modifiers
214
- }, _errorFactory)) && input.modifiers.every((elem, _index14) => true === _av15.has(elem) || _a._assertGuard(_exceptionable, {
233
+ }, _errorFactory)) && input.modifiers.every((elem, _index10) => true === _av1.has(elem) || _a._assertGuard(_exceptionable, {
215
234
  method: "typia.assert",
216
- path: _path + ".modifiers[" + _index14 + "]",
217
- expected: "(\"abstract\" | \"async\" | \"const\" | \"declare\" | \"default\" | \"export\" | \"optional\" | \"private\" | \"protected\" | \"public\" | \"readonly\" | \"static\")",
235
+ path: _path + ".modifiers[" + _index10 + "]",
236
+ expected: _ae1,
218
237
  value: elem
219
238
  }, _errorFactory)) || _a._assertGuard(_exceptionable, {
220
239
  method: "typia.assert",
@@ -226,14 +245,14 @@ function parseDump(json) {
226
245
  path: _path + ".decorators",
227
246
  expected: "(Array<ITtscGraphDecorator> | undefined)",
228
247
  value: input.decorators
229
- }, _errorFactory)) && input.decorators.every((elem, _index16) => ("object" === typeof elem && null !== elem || _a._assertGuard(_exceptionable, {
248
+ }, _errorFactory)) && input.decorators.every((elem, _index11) => ("object" === typeof elem && null !== elem || _a._assertGuard(_exceptionable, {
230
249
  method: "typia.assert",
231
- path: _path + ".decorators[" + _index16 + "]",
250
+ path: _path + ".decorators[" + _index11 + "]",
232
251
  expected: "ITtscGraphDecorator",
233
252
  value: elem
234
- }, _errorFactory)) && _ao2(elem, _path + ".decorators[" + _index16 + "]", true && _exceptionable) || _a._assertGuard(_exceptionable, {
253
+ }, _errorFactory)) && _ao2(elem, _path + ".decorators[" + _index11 + "]", true && _exceptionable) || _a._assertGuard(_exceptionable, {
235
254
  method: "typia.assert",
236
- path: _path + ".decorators[" + _index16 + "]",
255
+ path: _path + ".decorators[" + _index11 + "]",
237
256
  expected: "ITtscGraphDecorator",
238
257
  value: elem
239
258
  }, _errorFactory)) || _a._assertGuard(_exceptionable, {
@@ -241,17 +260,7 @@ function parseDump(json) {
241
260
  path: _path + ".decorators",
242
261
  expected: "(Array<ITtscGraphDecorator> | undefined)",
243
262
  value: input.decorators
244
- }, _errorFactory)) && (undefined === input.evidence || ("object" === typeof input.evidence && null !== input.evidence || _a._assertGuard(_exceptionable, {
245
- method: "typia.assert",
246
- path: _path + ".evidence",
247
- expected: "(ITtscGraphEvidence | undefined)",
248
- value: input.evidence
249
- }, _errorFactory)) && _ao4(input.evidence, _path + ".evidence", true && _exceptionable) || _a._assertGuard(_exceptionable, {
250
- method: "typia.assert",
251
- path: _path + ".evidence",
252
- expected: "(ITtscGraphEvidence | undefined)",
253
- value: input.evidence
254
- }, _errorFactory)) && (undefined === input.implementation || ("object" === typeof input.implementation && null !== input.implementation || _a._assertGuard(_exceptionable, {
263
+ }, _errorFactory)) && _ap2(input, _path, true && _exceptionable) && (undefined === input.implementation || ("object" === typeof input.implementation && null !== input.implementation || _a._assertGuard(_exceptionable, {
255
264
  method: "typia.assert",
256
265
  path: _path + ".implementation",
257
266
  expected: "(ITtscGraphEvidence | undefined)",
@@ -262,24 +271,19 @@ function parseDump(json) {
262
271
  expected: "(ITtscGraphEvidence | undefined)",
263
272
  value: input.implementation
264
273
  }, _errorFactory));
265
- const _ao2 = (input, _path, _exceptionable = true) => ("string" === typeof input.name || _a._assertGuard(_exceptionable, {
266
- method: "typia.assert",
267
- path: _path + ".name",
268
- expected: "string",
269
- value: input.name
270
- }, _errorFactory)) && ((Array.isArray(input.arguments) || _a._assertGuard(_exceptionable, {
274
+ const _ao2 = (input, _path, _exceptionable = true) => _ap0(input, _path, true && _exceptionable) && ((Array.isArray(input.arguments) || _a._assertGuard(_exceptionable, {
271
275
  method: "typia.assert",
272
276
  path: _path + ".arguments",
273
277
  expected: "Array<ITtscGraphDecorator.IArgument>",
274
278
  value: input.arguments
275
- }, _errorFactory)) && input.arguments.every((elem, _index17) => ("object" === typeof elem && null !== elem && false === Array.isArray(elem) || _a._assertGuard(_exceptionable, {
279
+ }, _errorFactory)) && input.arguments.every((elem, _index12) => ("object" === typeof elem && null !== elem && false === Array.isArray(elem) || _a._assertGuard(_exceptionable, {
276
280
  method: "typia.assert",
277
- path: _path + ".arguments[" + _index17 + "]",
281
+ path: _path + ".arguments[" + _index12 + "]",
278
282
  expected: "ITtscGraphDecorator.IArgument",
279
283
  value: elem
280
- }, _errorFactory)) && _ao3(elem, _path + ".arguments[" + _index17 + "]", true && _exceptionable) || _a._assertGuard(_exceptionable, {
284
+ }, _errorFactory)) && _ao3(elem, _path + ".arguments[" + _index12 + "]", true && _exceptionable) || _a._assertGuard(_exceptionable, {
281
285
  method: "typia.assert",
282
- path: _path + ".arguments[" + _index17 + "]",
286
+ path: _path + ".arguments[" + _index12 + "]",
283
287
  expected: "ITtscGraphDecorator.IArgument",
284
288
  value: elem
285
289
  }, _errorFactory)) || _a._assertGuard(_exceptionable, {
@@ -294,12 +298,7 @@ function parseDump(json) {
294
298
  expected: "(boolean | number | string | undefined)",
295
299
  value: input.literal
296
300
  }, _errorFactory);
297
- const _ao4 = (input, _path, _exceptionable = true) => ("string" === typeof input.file || _a._assertGuard(_exceptionable, {
298
- method: "typia.assert",
299
- path: _path + ".file",
300
- expected: "string",
301
- value: input.file
302
- }, _errorFactory)) && ("number" === typeof input.startLine || _a._assertGuard(_exceptionable, {
301
+ const _ao4 = (input, _path, _exceptionable = true) => _ap1(input, _path, true && _exceptionable) && ("number" === typeof input.startLine || _a._assertGuard(_exceptionable, {
303
302
  method: "typia.assert",
304
303
  path: _path + ".startLine",
305
304
  expected: "number",
@@ -330,28 +329,13 @@ function parseDump(json) {
330
329
  path: _path + ".to",
331
330
  expected: "string",
332
331
  value: input.to
333
- }, _errorFactory)) && (true === _av18.has(input.kind) || _a._assertGuard(_exceptionable, {
332
+ }, _errorFactory)) && (true === _av2.has(input.kind) || _a._assertGuard(_exceptionable, {
334
333
  method: "typia.assert",
335
334
  path: _path + ".kind",
336
- expected: "(\"accesses\" | \"calls\" | \"contains\" | \"decorates\" | \"exports\" | \"extends\" | \"implements\" | \"imports\" | \"instantiates\" | \"overrides\" | \"renders\" | \"tests\" | \"type_ref\")",
335
+ expected: _ae2,
337
336
  value: input.kind
338
- }, _errorFactory)) && (undefined === input.evidence || ("object" === typeof input.evidence && null !== input.evidence || _a._assertGuard(_exceptionable, {
339
- method: "typia.assert",
340
- path: _path + ".evidence",
341
- expected: "(ITtscGraphEvidence | undefined)",
342
- value: input.evidence
343
- }, _errorFactory)) && _ao4(input.evidence, _path + ".evidence", true && _exceptionable) || _a._assertGuard(_exceptionable, {
344
- method: "typia.assert",
345
- path: _path + ".evidence",
346
- expected: "(ITtscGraphEvidence | undefined)",
347
- value: input.evidence
348
- }, _errorFactory));
349
- const _ao6 = (input, _path, _exceptionable = true) => ("string" === typeof input.file || _a._assertGuard(_exceptionable, {
350
- method: "typia.assert",
351
- path: _path + ".file",
352
- expected: "string",
353
- value: input.file
354
- }, _errorFactory)) && ("number" === typeof input.line || _a._assertGuard(_exceptionable, {
337
+ }, _errorFactory)) && _ap2(input, _path, true && _exceptionable);
338
+ const _ao6 = (input, _path, _exceptionable = true) => _ap1(input, _path, true && _exceptionable) && ("number" === typeof input.line || _a._assertGuard(_exceptionable, {
355
339
  method: "typia.assert",
356
340
  path: _path + ".line",
357
341
  expected: "number",
@@ -388,12 +372,12 @@ function parseDump(json) {
388
372
  value: input.node
389
373
  }, _errorFactory));
390
374
  const _io0 = input => "string" === typeof input.project && "string" === typeof input.tsconfig && (Array.isArray(input.nodes) && input.nodes.every(elem => "object" === typeof elem && null !== elem && _io1(elem))) && (Array.isArray(input.edges) && input.edges.every(elem => "object" === typeof elem && null !== elem && _io5(elem))) && (undefined === input.diagnostics || Array.isArray(input.diagnostics) && input.diagnostics.every(elem => "object" === typeof elem && null !== elem && _io6(elem)));
391
- const _io1 = input => "string" === typeof input.id && true === _iv4.has(input.kind) && "string" === typeof input.name && (undefined === input.qualifiedName || "string" === typeof input.qualifiedName) && "string" === typeof input.file && "boolean" === typeof input.external && (undefined === input.ignored || "boolean" === typeof input.ignored) && (undefined === input.exported || "boolean" === typeof input.exported) && (undefined === input.modifiers || Array.isArray(input.modifiers) && input.modifiers.every(elem => true === _iv6.has(elem))) && (undefined === input.decorators || Array.isArray(input.decorators) && input.decorators.every(elem => "object" === typeof elem && null !== elem && _io2(elem))) && (undefined === input.evidence || "object" === typeof input.evidence && null !== input.evidence && _io4(input.evidence)) && (undefined === input.implementation || "object" === typeof input.implementation && null !== input.implementation && _io4(input.implementation));
392
- const _io2 = input => "string" === typeof input.name && (Array.isArray(input.arguments) && input.arguments.every(elem => "object" === typeof elem && null !== elem && false === Array.isArray(elem) && _io3(elem)));
375
+ const _io1 = input => "string" === typeof input.id && true === _iv0.has(input.kind) && _ip0(input) && (undefined === input.qualifiedName || "string" === typeof input.qualifiedName) && _ip1(input) && "boolean" === typeof input.external && (undefined === input.ignored || "boolean" === typeof input.ignored) && (undefined === input.exported || "boolean" === typeof input.exported) && (undefined === input.modifiers || Array.isArray(input.modifiers) && input.modifiers.every(elem => true === _iv1.has(elem))) && (undefined === input.decorators || Array.isArray(input.decorators) && input.decorators.every(elem => "object" === typeof elem && null !== elem && _io2(elem))) && _ip2(input) && (undefined === input.implementation || "object" === typeof input.implementation && null !== input.implementation && _io4(input.implementation));
376
+ const _io2 = input => _ip0(input) && (Array.isArray(input.arguments) && input.arguments.every(elem => "object" === typeof elem && null !== elem && false === Array.isArray(elem) && _io3(elem)));
393
377
  const _io3 = input => undefined === input.literal || "string" === typeof input.literal || "number" === typeof input.literal || "boolean" === typeof input.literal;
394
- const _io4 = input => "string" === typeof input.file && "number" === typeof input.startLine && (undefined === input.startCol || "number" === typeof input.startCol) && (undefined === input.endLine || "number" === typeof input.endLine) && (undefined === input.endCol || "number" === typeof input.endCol);
395
- const _io5 = input => "string" === typeof input.from && "string" === typeof input.to && true === _iv9.has(input.kind) && (undefined === input.evidence || "object" === typeof input.evidence && null !== input.evidence && _io4(input.evidence));
396
- const _io6 = input => "string" === typeof input.file && "number" === typeof input.line && (undefined === input.column || "number" === typeof input.column) && ("string" === typeof input.code || "number" === typeof input.code) && "string" === typeof input.message && (undefined === input.severity || "error" === input.severity || "hint" === input.severity || "info" === input.severity || "warning" === input.severity) && (undefined === input.origin || "lint" === input.origin || "plugin" === input.origin || "tsc" === input.origin) && (undefined === input.node || "string" === typeof input.node);
378
+ const _io4 = input => _ip1(input) && "number" === typeof input.startLine && (undefined === input.startCol || "number" === typeof input.startCol) && (undefined === input.endLine || "number" === typeof input.endLine) && (undefined === input.endCol || "number" === typeof input.endCol);
379
+ const _io5 = input => "string" === typeof input.from && "string" === typeof input.to && true === _iv2.has(input.kind) && _ip2(input);
380
+ const _io6 = input => _ip1(input) && "number" === typeof input.line && (undefined === input.column || "number" === typeof input.column) && ("string" === typeof input.code || "number" === typeof input.code) && "string" === typeof input.message && (undefined === input.severity || "error" === input.severity || "hint" === input.severity || "info" === input.severity || "warning" === input.severity) && (undefined === input.origin || "lint" === input.origin || "plugin" === input.origin || "tsc" === input.origin) && (undefined === input.node || "string" === typeof input.node);
397
381
  const __is = input => "object" === typeof input && null !== input && _io0(input);
398
382
  let _errorFactory;
399
383
  return (input, errorFactory) => {