ts-knowledge-graph 0.1.1

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 (68) hide show
  1. package/.env-sample +34 -0
  2. package/LICENSE +21 -0
  3. package/README.md +153 -0
  4. package/dist/agent/agent-tools.d.ts +13 -0
  5. package/dist/agent/agent-tools.d.ts.map +1 -0
  6. package/dist/agent/agent-tools.js +153 -0
  7. package/dist/agent/agent-tools.js.map +1 -0
  8. package/dist/agent/code-editor.d.ts +18 -0
  9. package/dist/agent/code-editor.d.ts.map +1 -0
  10. package/dist/agent/code-editor.js +43 -0
  11. package/dist/agent/code-editor.js.map +1 -0
  12. package/dist/agent/optimizer-agent.d.ts +30 -0
  13. package/dist/agent/optimizer-agent.d.ts.map +1 -0
  14. package/dist/agent/optimizer-agent.js +97 -0
  15. package/dist/agent/optimizer-agent.js.map +1 -0
  16. package/dist/agent/verifier.d.ts +9 -0
  17. package/dist/agent/verifier.d.ts.map +1 -0
  18. package/dist/agent/verifier.js +19 -0
  19. package/dist/agent/verifier.js.map +1 -0
  20. package/dist/cli.d.ts +14 -0
  21. package/dist/cli.d.ts.map +1 -0
  22. package/dist/cli.js +221 -0
  23. package/dist/cli.js.map +1 -0
  24. package/dist/extract/graph-builder.d.ts +16 -0
  25. package/dist/extract/graph-builder.d.ts.map +1 -0
  26. package/dist/extract/graph-builder.js +39 -0
  27. package/dist/extract/graph-builder.js.map +1 -0
  28. package/dist/extract/node-id.d.ts +8 -0
  29. package/dist/extract/node-id.d.ts.map +1 -0
  30. package/dist/extract/node-id.js +22 -0
  31. package/dist/extract/node-id.js.map +1 -0
  32. package/dist/extract/project-loader.d.ts +5 -0
  33. package/dist/extract/project-loader.d.ts.map +1 -0
  34. package/dist/extract/project-loader.js +19 -0
  35. package/dist/extract/project-loader.js.map +1 -0
  36. package/dist/extract/semantic-extractor.d.ts +22 -0
  37. package/dist/extract/semantic-extractor.d.ts.map +1 -0
  38. package/dist/extract/semantic-extractor.js +254 -0
  39. package/dist/extract/semantic-extractor.js.map +1 -0
  40. package/dist/extract/structural-extractor.d.ts +18 -0
  41. package/dist/extract/structural-extractor.d.ts.map +1 -0
  42. package/dist/extract/structural-extractor.js +97 -0
  43. package/dist/extract/structural-extractor.js.map +1 -0
  44. package/dist/query/graph-query.d.ts +28 -0
  45. package/dist/query/graph-query.d.ts.map +1 -0
  46. package/dist/query/graph-query.js +93 -0
  47. package/dist/query/graph-query.js.map +1 -0
  48. package/dist/schema/edge.d.ts +25 -0
  49. package/dist/schema/edge.d.ts.map +1 -0
  50. package/dist/schema/edge.js +25 -0
  51. package/dist/schema/edge.js.map +1 -0
  52. package/dist/schema/node.d.ts +73 -0
  53. package/dist/schema/node.d.ts.map +1 -0
  54. package/dist/schema/node.js +31 -0
  55. package/dist/schema/node.js.map +1 -0
  56. package/dist/store/jsonl-reader.d.ts +11 -0
  57. package/dist/store/jsonl-reader.d.ts.map +1 -0
  58. package/dist/store/jsonl-reader.js +19 -0
  59. package/dist/store/jsonl-reader.js.map +1 -0
  60. package/dist/store/jsonl-store.d.ts +7 -0
  61. package/dist/store/jsonl-store.d.ts.map +1 -0
  62. package/dist/store/jsonl-store.js +13 -0
  63. package/dist/store/jsonl-store.js.map +1 -0
  64. package/dist/store/kuzu-store.d.ts +14 -0
  65. package/dist/store/kuzu-store.d.ts.map +1 -0
  66. package/dist/store/kuzu-store.js +52 -0
  67. package/dist/store/kuzu-store.js.map +1 -0
  68. package/package.json +41 -0
package/dist/cli.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ export declare class Cli {
3
+ static run(argv: string[]): void;
4
+ private static registerQuery;
5
+ private static extract;
6
+ private static load;
7
+ private static optimize;
8
+ private static withQuery;
9
+ private static printRefs;
10
+ private static printNeighbors;
11
+ private static printBreakdown;
12
+ private static countBy;
13
+ }
14
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAmCA,qBAAa,GAAG;IACf,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAoFhC,OAAO,CAAC,MAAM,CAAC,aAAa;mBAoBP,OAAO;mBAkBP,IAAI;mBAWJ,QAAQ;mBAuCR,SAAS;IAU9B,OAAO,CAAC,MAAM,CAAC,SAAS;IAexB,OAAO,CAAC,MAAM,CAAC,cAAc;IAgB7B,OAAO,CAAC,MAAM,CAAC,cAAc;IAW7B,OAAO,CAAC,MAAM,CAAC,OAAO;CAOtB"}
package/dist/cli.js ADDED
@@ -0,0 +1,221 @@
1
+ #!/usr/bin/env node
2
+ import { existsSync } from 'node:fs';
3
+ import { resolve } from 'node:path';
4
+ import chalk from 'chalk';
5
+ import { Command } from 'commander';
6
+ import { AgentTools } from './agent/agent-tools.js';
7
+ import { CodeEditor } from './agent/code-editor.js';
8
+ import { OptimizerAgent } from './agent/optimizer-agent.js';
9
+ import { GraphBuilder } from './extract/graph-builder.js';
10
+ import { ProjectLoader } from './extract/project-loader.js';
11
+ import { GraphQuery } from './query/graph-query.js';
12
+ import { JsonlReader } from './store/jsonl-reader.js';
13
+ import { JsonlStore } from './store/jsonl-store.js';
14
+ import { KuzuStore } from './store/kuzu-store.js';
15
+ const DEFAULT_TASK = 'Find one genuinely dead exported symbol using dead_exports, confirm with references that it has zero inbound references, then remove it safely.';
16
+ const DEFAULT_DB_PATH = './outputs/graph.kuzu';
17
+ const DEFAULT_GRAPH_DIR = './outputs/graph';
18
+ export class Cli {
19
+ static run(argv) {
20
+ const program = new Command();
21
+ program
22
+ .name('ts-knowledge-graph')
23
+ .description('Parse a TypeScript project into a knowledge graph and query it');
24
+ program
25
+ .command('extract')
26
+ .argument('<root>', 'path to the TypeScript project to parse')
27
+ .option('-o, --out <dir>', 'output directory for the JSONL graph', DEFAULT_GRAPH_DIR)
28
+ .option('--semantic', 'resolve heritage and CALLS edges (slower)', false)
29
+ .action(async (root, options) => {
30
+ await Cli.extract(root, options);
31
+ });
32
+ program
33
+ .command('load')
34
+ .description('load a JSONL graph into an embedded Kùzu database')
35
+ .argument('[graphDir]', 'directory holding nodes.jsonl and edges.jsonl', DEFAULT_GRAPH_DIR)
36
+ .option('-d, --db <path>', 'Kùzu database path', DEFAULT_DB_PATH)
37
+ .action(async (graphDir, options) => {
38
+ await Cli.load(graphDir, options.db);
39
+ });
40
+ Cli.registerQuery(program, 'find', '<pattern>', 'find symbols whose name contains <pattern>', (query, arg) => query.find(arg));
41
+ Cli.registerQuery(program, 'who-calls', '<id>', 'list symbols that call <id>', (query, arg) => query.whoCalls(arg));
42
+ Cli.registerQuery(program, 'calls', '<id>', 'list symbols that <id> calls', (query, arg) => query.calls(arg));
43
+ Cli.registerQuery(program, 'dead-exports', '', 'list exported symbols with no inbound references', (query) => query.deadExports());
44
+ program
45
+ .command('blast-radius')
46
+ .description('list every symbol transitively impacted by changing <id>')
47
+ .argument('<id>', 'node id to analyse')
48
+ .option('-d, --db <path>', 'Kùzu database path', DEFAULT_DB_PATH)
49
+ .option('--depth <n>', 'maximum traversal depth', '10')
50
+ .option('--json', 'emit raw JSON', false)
51
+ .action(async (id, options) => {
52
+ await Cli.withQuery(options.db, async (query) => {
53
+ Cli.printRefs(await query.blastRadius(id, Number(options.depth)), options.json === true);
54
+ });
55
+ });
56
+ program
57
+ .command('neighbors')
58
+ .description('show the one-hop neighbourhood of <id>')
59
+ .argument('<id>', 'node id to inspect')
60
+ .option('-d, --db <path>', 'Kùzu database path', DEFAULT_DB_PATH)
61
+ .option('--json', 'emit raw JSON', false)
62
+ .action(async (id, options) => {
63
+ await Cli.withQuery(options.db, async (query) => {
64
+ Cli.printNeighbors(await query.neighborhood(id), options.json === true);
65
+ });
66
+ });
67
+ program
68
+ .command('references')
69
+ .description('list everything that references <id> (calls, type usage, heritage, new)')
70
+ .argument('<id>', 'node id to inspect')
71
+ .option('-d, --db <path>', 'Kùzu database path', DEFAULT_DB_PATH)
72
+ .option('--json', 'emit raw JSON', false)
73
+ .action(async (id, options) => {
74
+ await Cli.withQuery(options.db, async (query) => {
75
+ Cli.printNeighbors(await query.references(id), options.json === true);
76
+ });
77
+ });
78
+ program
79
+ .command('optimize')
80
+ .description('run the autonomous optimization agent against the loaded graph')
81
+ .argument('[task]', 'what the agent should try to optimize', DEFAULT_TASK)
82
+ .option('-d, --db <path>', 'Kùzu database path', DEFAULT_DB_PATH)
83
+ .option('-m, --model <name>', 'model name (defaults to OPENAI_MODEL)')
84
+ .option('--max-steps <n>', 'maximum agent steps', '12')
85
+ .action(async (task, options) => {
86
+ await Cli.optimize(task, options);
87
+ });
88
+ void program.parseAsync(argv);
89
+ }
90
+ static registerQuery(program, name, argSpec, description, run) {
91
+ const command = program.command(argSpec === '' ? name : `${name} ${argSpec}`).description(description);
92
+ command
93
+ .option('-d, --db <path>', 'Kùzu database path', DEFAULT_DB_PATH)
94
+ .option('--json', 'emit raw JSON', false)
95
+ .action(async (...args) => {
96
+ const options = args[args.length - 2];
97
+ const arg = argSpec === '' ? '' : args[0];
98
+ await Cli.withQuery(options.db, async (query) => {
99
+ Cli.printRefs(await run(query, arg), options.json === true);
100
+ });
101
+ });
102
+ }
103
+ static async extract(root, options) {
104
+ const rootPath = resolve(root);
105
+ const outPath = resolve(options.out);
106
+ console.log(chalk.cyan(`Loading project at ${rootPath} ...`));
107
+ const project = ProjectLoader.load(rootPath);
108
+ const builder = new GraphBuilder();
109
+ builder.build(project, rootPath, { semantic: options.semantic });
110
+ const nodes = builder.getNodes();
111
+ const edges = builder.getEdges();
112
+ await JsonlStore.write(outPath, nodes, edges);
113
+ console.log(chalk.green(`✓ ${nodes.length} nodes, ${edges.length} edges -> ${outPath}`));
114
+ Cli.printBreakdown(nodes, edges);
115
+ }
116
+ static async load(graphDir, dbPath) {
117
+ const resolvedDb = resolve(dbPath);
118
+ console.log(chalk.cyan(`Loading ${resolve(graphDir)} into ${resolvedDb} ...`));
119
+ const { nodes, edges } = await JsonlReader.read(resolve(graphDir));
120
+ const store = new KuzuStore(resolvedDb);
121
+ await store.initSchema();
122
+ await store.load(nodes, edges);
123
+ await store.close();
124
+ console.log(chalk.green(`✓ loaded ${nodes.length} nodes, ${edges.length} edges`));
125
+ }
126
+ static async optimize(task, options) {
127
+ if (existsSync('.env') === true) {
128
+ process.loadEnvFile('.env');
129
+ }
130
+ if (process.env.OPENAI_API_KEY === undefined) {
131
+ console.log(chalk.red('Set OPENAI_API_KEY before running the optimizer — copy .env-sample to .env and pick a provider.'));
132
+ return;
133
+ }
134
+ const model = options.model ?? process.env.OPENAI_MODEL;
135
+ if (model === undefined) {
136
+ console.log(chalk.red('Set OPENAI_MODEL in .env (or pass --model) — see .env-sample for per-provider examples.'));
137
+ return;
138
+ }
139
+ const rootPath = process.cwd();
140
+ await Cli.withQuery(options.db, async (query) => {
141
+ const agent = new OptimizerAgent({
142
+ tools: new AgentTools(query, rootPath),
143
+ editor: new CodeEditor(rootPath),
144
+ rootPath,
145
+ model,
146
+ maxSteps: Number(options.maxSteps),
147
+ });
148
+ console.log(chalk.gray(`Model: ${model}${process.env.OPENAI_BASE_URL === undefined ? '' : ` @ ${process.env.OPENAI_BASE_URL}`}`));
149
+ console.log(chalk.cyan(`Task: ${task}\n`));
150
+ const outcome = await agent.run(task);
151
+ for (const line of outcome.transcript) {
152
+ console.log(chalk.gray(line));
153
+ }
154
+ console.log(chalk.bold(`\nApplied ${outcome.applied.length} verified edit(s):`));
155
+ for (const edit of outcome.applied) {
156
+ console.log(` ${chalk.green('✓')} ${edit.filePath} — ${edit.rationale}`);
157
+ }
158
+ if (outcome.applied.length === 0) {
159
+ console.log(chalk.yellow(' (none — the agent found no safe change, or reverted what it tried)'));
160
+ }
161
+ });
162
+ }
163
+ static async withQuery(dbPath, fn) {
164
+ const store = new KuzuStore(resolve(dbPath));
165
+ await store.initSchema();
166
+ try {
167
+ await fn(new GraphQuery(store));
168
+ }
169
+ finally {
170
+ await store.close();
171
+ }
172
+ }
173
+ static printRefs(refs, json) {
174
+ if (json === true) {
175
+ console.log(JSON.stringify(refs, null, 2));
176
+ return;
177
+ }
178
+ if (refs.length === 0) {
179
+ console.log(chalk.yellow('(no results)'));
180
+ return;
181
+ }
182
+ for (const ref of refs) {
183
+ console.log(`${chalk.gray(ref.kind.padEnd(14))} ${chalk.bold(ref.name)} ${chalk.gray(`${ref.filePath}:${ref.startLine}`)}`);
184
+ }
185
+ console.log(chalk.gray(`\n${refs.length} result(s)`));
186
+ }
187
+ static printNeighbors(neighbors, json) {
188
+ if (json === true) {
189
+ console.log(JSON.stringify(neighbors, null, 2));
190
+ return;
191
+ }
192
+ if (neighbors.length === 0) {
193
+ console.log(chalk.yellow('(no neighbours)'));
194
+ return;
195
+ }
196
+ for (const neighbor of neighbors) {
197
+ const arrow = neighbor.direction === 'out' ? '->' : '<-';
198
+ console.log(`${chalk.cyan(arrow)} ${chalk.gray(neighbor.edgeKind.padEnd(12))} ${chalk.bold(neighbor.name)} ${chalk.gray(`${neighbor.filePath}:${neighbor.startLine}`)}`);
199
+ }
200
+ console.log(chalk.gray(`\n${neighbors.length} edge(s)`));
201
+ }
202
+ static printBreakdown(nodes, edges) {
203
+ console.log(chalk.bold('\nNodes'));
204
+ for (const [kind, count] of Cli.countBy(nodes.map((node) => node.kind))) {
205
+ console.log(` ${kind.padEnd(16)} ${count}`);
206
+ }
207
+ console.log(chalk.bold('\nEdges'));
208
+ for (const [kind, count] of Cli.countBy(edges.map((edge) => edge.kind))) {
209
+ console.log(` ${kind.padEnd(16)} ${count}`);
210
+ }
211
+ }
212
+ static countBy(values) {
213
+ const counts = new Map();
214
+ for (const value of values) {
215
+ counts.set(value, (counts.get(value) ?? 0) + 1);
216
+ }
217
+ return [...counts.entries()].sort((a, b) => b[1] - a[1]);
218
+ }
219
+ }
220
+ Cli.run(process.argv);
221
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { Project } from 'ts-morph';
2
+ import { GraphEdge } from '../schema/edge.js';
3
+ import { GraphNode } from '../schema/node.js';
4
+ export type BuildOptions = {
5
+ semantic: boolean;
6
+ };
7
+ export declare class GraphBuilder {
8
+ private readonly nodes;
9
+ private readonly edges;
10
+ build(project: Project, rootPath: string, options: BuildOptions): void;
11
+ getNodes(): GraphNode[];
12
+ getEdges(): GraphEdge[];
13
+ private merge;
14
+ private static isProjectFile;
15
+ }
16
+ //# sourceMappingURL=graph-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-builder.d.ts","sourceRoot":"","sources":["../../src/extract/graph-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAI9C,MAAM,MAAM,YAAY,GAAG;IAC1B,QAAQ,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,qBAAa,YAAY;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IAEtD,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAetE,QAAQ,IAAI,SAAS,EAAE;IAIvB,QAAQ,IAAI,SAAS,EAAE;IAIvB,OAAO,CAAC,KAAK;IASb,OAAO,CAAC,MAAM,CAAC,aAAa;CAG5B"}
@@ -0,0 +1,39 @@
1
+ import { SemanticExtractor } from './semantic-extractor.js';
2
+ import { StructuralExtractor } from './structural-extractor.js';
3
+ export class GraphBuilder {
4
+ constructor() {
5
+ this.nodes = new Map();
6
+ this.edges = new Map();
7
+ }
8
+ build(project, rootPath, options) {
9
+ const sourceFiles = project
10
+ .getSourceFiles()
11
+ .filter((file) => GraphBuilder.isProjectFile(file.getFilePath()));
12
+ for (const sourceFile of sourceFiles) {
13
+ this.merge(StructuralExtractor.extract(sourceFile, rootPath));
14
+ }
15
+ if (options.semantic === true) {
16
+ for (const sourceFile of sourceFiles) {
17
+ this.merge(SemanticExtractor.extract(sourceFile, rootPath));
18
+ }
19
+ }
20
+ }
21
+ getNodes() {
22
+ return [...this.nodes.values()];
23
+ }
24
+ getEdges() {
25
+ return [...this.edges.values()];
26
+ }
27
+ merge(extraction) {
28
+ for (const node of extraction.nodes) {
29
+ this.nodes.set(node.id, node);
30
+ }
31
+ for (const edge of extraction.edges) {
32
+ this.edges.set(edge.id, edge);
33
+ }
34
+ }
35
+ static isProjectFile(filePath) {
36
+ return filePath.includes('/node_modules/') === false && filePath.endsWith('.d.ts') === false;
37
+ }
38
+ }
39
+ //# sourceMappingURL=graph-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-builder.js","sourceRoot":"","sources":["../../src/extract/graph-builder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAc,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAM5E,MAAM,OAAO,YAAY;IAAzB;QACkB,UAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;QACrC,UAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IAqCvD,CAAC;IAnCA,KAAK,CAAC,OAAgB,EAAE,QAAgB,EAAE,OAAqB;QAC9D,MAAM,WAAW,GAAG,OAAO;aACzB,cAAc,EAAE;aAChB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAEnE,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC/B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACtC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC7D,CAAC;QACF,CAAC;IACF,CAAC;IAED,QAAQ;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,QAAQ;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACjC,CAAC;IAEO,KAAK,CAAC,UAAsB;QACnC,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC;IACF,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,QAAgB;QAC5C,OAAO,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC;IAC9F,CAAC;CACD"}
@@ -0,0 +1,8 @@
1
+ import { Node } from 'ts-morph';
2
+ export declare class NodeId {
3
+ static forModule(filePath: string, rootPath: string): string;
4
+ static forDeclaration(node: Node, rootPath: string): string;
5
+ static forExternalModule(specifier: string): string;
6
+ static nameOf(node: Node): string;
7
+ }
8
+ //# sourceMappingURL=node-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-id.d.ts","sourceRoot":"","sources":["../../src/extract/node-id.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,qBAAa,MAAM;IAClB,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAI5D,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAK3D,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAInD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;CAQjC"}
@@ -0,0 +1,22 @@
1
+ import { relative } from 'node:path';
2
+ export class NodeId {
3
+ static forModule(filePath, rootPath) {
4
+ return `Module:${relative(rootPath, filePath)}`;
5
+ }
6
+ static forDeclaration(node, rootPath) {
7
+ const filePath = relative(rootPath, node.getSourceFile().getFilePath());
8
+ return `${node.getKindName()}:${filePath}#${NodeId.nameOf(node)}@${node.getStartLineNumber()}`;
9
+ }
10
+ static forExternalModule(specifier) {
11
+ return `External:${specifier}`;
12
+ }
13
+ static nameOf(node) {
14
+ const probe = node;
15
+ if (typeof probe.getName !== 'function') {
16
+ return 'anonymous';
17
+ }
18
+ const name = probe.getName();
19
+ return name === undefined || name === '' ? 'anonymous' : name;
20
+ }
21
+ }
22
+ //# sourceMappingURL=node-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-id.js","sourceRoot":"","sources":["../../src/extract/node-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGrC,MAAM,OAAO,MAAM;IAClB,MAAM,CAAC,SAAS,CAAC,QAAgB,EAAE,QAAgB;QAClD,OAAO,UAAU,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,IAAU,EAAE,QAAgB;QACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACxE,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;IAChG,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,SAAiB;QACzC,OAAO,YAAY,SAAS,EAAE,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,IAAU;QACvB,MAAM,KAAK,GAAG,IAA8C,CAAC;QAC7D,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YACzC,OAAO,WAAW,CAAC;QACpB,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAC7B,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/D,CAAC;CACD"}
@@ -0,0 +1,5 @@
1
+ import { Project } from 'ts-morph';
2
+ export declare class ProjectLoader {
3
+ static load(rootPath: string): Project;
4
+ }
5
+ //# sourceMappingURL=project-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-loader.d.ts","sourceRoot":"","sources":["../../src/extract/project-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,qBAAa,aAAa;IACzB,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAatC"}
@@ -0,0 +1,19 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { Project } from 'ts-morph';
4
+ export class ProjectLoader {
5
+ static load(rootPath) {
6
+ const tsConfigFilePath = join(rootPath, 'tsconfig.json');
7
+ if (existsSync(tsConfigFilePath) === true) {
8
+ return new Project({ tsConfigFilePath });
9
+ }
10
+ const project = new Project();
11
+ project.addSourceFilesAtPaths([
12
+ join(rootPath, '**/*.ts'),
13
+ join(rootPath, '**/*.tsx'),
14
+ `!${join(rootPath, '**/node_modules/**')}`,
15
+ ]);
16
+ return project;
17
+ }
18
+ }
19
+ //# sourceMappingURL=project-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-loader.js","sourceRoot":"","sources":["../../src/extract/project-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,MAAM,OAAO,aAAa;IACzB,MAAM,CAAC,IAAI,CAAC,QAAgB;QAC3B,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QACzD,IAAI,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3C,OAAO,IAAI,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,qBAAqB,CAAC;YAC7B,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;YACzB,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC;YAC1B,IAAI,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,EAAE;SAC1C,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IAChB,CAAC;CACD"}
@@ -0,0 +1,22 @@
1
+ import { SourceFile } from 'ts-morph';
2
+ import { Extraction } from './structural-extractor.js';
3
+ export declare class SemanticExtractor {
4
+ static extract(sourceFile: SourceFile, rootPath: string): Extraction;
5
+ private static extractClass;
6
+ private static extractInterface;
7
+ private static extractSignature;
8
+ private static addTypeEdges;
9
+ private static referencedTypes;
10
+ private static extractCalls;
11
+ private static extractInstantiations;
12
+ private static extractReads;
13
+ private static isValueRead;
14
+ private static isDeclarationName;
15
+ private static isEmittedTarget;
16
+ private static readerScope;
17
+ private static enclosingDeclaration;
18
+ private static resolve;
19
+ private static inProject;
20
+ private static edge;
21
+ }
22
+ //# sourceMappingURL=semantic-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-extractor.d.ts","sourceRoot":"","sources":["../../src/extract/semantic-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAON,UAAU,EAGV,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAqCvD,qBAAa,iBAAiB;IAC7B,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;IAuBpE,OAAO,CAAC,MAAM,CAAC,YAAY;IAoB3B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAe/B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAQ/B,OAAO,CAAC,MAAM,CAAC,YAAY;IAkB3B,OAAO,CAAC,MAAM,CAAC,eAAe;IAkB9B,OAAO,CAAC,MAAM,CAAC,YAAY;IAqB3B,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAqBpC,OAAO,CAAC,MAAM,CAAC,YAAY;IA2B3B,OAAO,CAAC,MAAM,CAAC,WAAW;IA6B1B,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAKhC,OAAO,CAAC,MAAM,CAAC,eAAe;IAQ9B,OAAO,CAAC,MAAM,CAAC,WAAW;IAW1B,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAOnC,OAAO,CAAC,MAAM,CAAC,OAAO;IAUtB,OAAO,CAAC,MAAM,CAAC,SAAS;IAMxB,OAAO,CAAC,MAAM,CAAC,IAAI;CAGnB"}