homegraph 1.4.1 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -11
- package/dist/bin/homegraph.js +295 -72
- package/dist/bin/homegraph.js.map +1 -1
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +32 -11
- package/dist/context/index.js.map +1 -1
- package/dist/db/index.d.ts +143 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +293 -16
- package/dist/db/index.js.map +1 -1
- package/dist/db/queries.d.ts +43 -4
- package/dist/db/queries.d.ts.map +1 -1
- package/dist/db/queries.js +138 -14
- package/dist/db/queries.js.map +1 -1
- package/dist/db/sqlite-adapter.d.ts +24 -17
- package/dist/db/sqlite-adapter.d.ts.map +1 -1
- package/dist/db/sqlite-adapter.js +292 -36
- package/dist/db/sqlite-adapter.js.map +1 -1
- package/dist/db/wal-valve.d.ts +15 -2
- package/dist/db/wal-valve.d.ts.map +1 -1
- package/dist/db/wal-valve.js +88 -6
- package/dist/db/wal-valve.js.map +1 -1
- package/dist/extraction/arkts-batch-worker.js +3 -2
- package/dist/extraction/arkts-batch-worker.js.map +1 -1
- package/dist/extraction/default-ignore.d.ts +39 -0
- package/dist/extraction/default-ignore.d.ts.map +1 -0
- package/dist/extraction/default-ignore.js +221 -0
- package/dist/extraction/default-ignore.js.map +1 -0
- package/dist/extraction/index.d.ts +9 -10
- package/dist/extraction/index.d.ts.map +1 -1
- package/dist/extraction/index.js +227 -323
- package/dist/extraction/index.js.map +1 -1
- package/dist/extraction/languages/arkts.d.ts +90 -6
- package/dist/extraction/languages/arkts.d.ts.map +1 -1
- package/dist/extraction/languages/arkts.js +1579 -128
- package/dist/extraction/languages/arkts.js.map +1 -1
- package/dist/extraction/store-worker.d.ts +20 -0
- package/dist/extraction/store-worker.d.ts.map +1 -0
- package/dist/extraction/store-worker.js +102 -0
- package/dist/extraction/store-worker.js.map +1 -0
- package/dist/extraction/store-writer.d.ts +48 -0
- package/dist/extraction/store-writer.d.ts.map +1 -0
- package/dist/extraction/store-writer.js +167 -0
- package/dist/extraction/store-writer.js.map +1 -0
- package/dist/extraction/tree-sitter.d.ts.map +1 -1
- package/dist/extraction/tree-sitter.js +47 -0
- package/dist/extraction/tree-sitter.js.map +1 -1
- package/dist/extraction/wasm-runtime-flags.d.ts +14 -4
- package/dist/extraction/wasm-runtime-flags.d.ts.map +1 -1
- package/dist/extraction/wasm-runtime-flags.js +55 -7
- package/dist/extraction/wasm-runtime-flags.js.map +1 -1
- package/dist/index.d.ts +16 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +135 -97
- package/dist/index.js.map +1 -1
- package/dist/mcp/query-worker.d.ts +2 -2
- package/dist/mcp/query-worker.js +2 -2
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +42 -26
- package/dist/mcp/tools.js.map +1 -1
- package/dist/resolution/callback-synthesizer.d.ts +52 -16
- package/dist/resolution/callback-synthesizer.d.ts.map +1 -1
- package/dist/resolution/callback-synthesizer.js +234 -180
- package/dist/resolution/callback-synthesizer.js.map +1 -1
- package/dist/resolution/cooperative-yield.d.ts +10 -2
- package/dist/resolution/cooperative-yield.d.ts.map +1 -1
- package/dist/resolution/cooperative-yield.js +6 -4
- package/dist/resolution/cooperative-yield.js.map +1 -1
- package/dist/resolution/frameworks/go.d.ts.map +1 -1
- package/dist/resolution/frameworks/go.js +29 -6
- package/dist/resolution/frameworks/go.js.map +1 -1
- package/dist/resolution/import-resolver.d.ts +2 -3
- package/dist/resolution/import-resolver.d.ts.map +1 -1
- package/dist/resolution/import-resolver.js +166 -7
- package/dist/resolution/import-resolver.js.map +1 -1
- package/dist/resolution/index.d.ts +87 -2
- package/dist/resolution/index.d.ts.map +1 -1
- package/dist/resolution/index.js +739 -131
- package/dist/resolution/index.js.map +1 -1
- package/dist/resolution/memory-budget.d.ts +48 -0
- package/dist/resolution/memory-budget.d.ts.map +1 -0
- package/dist/resolution/memory-budget.js +162 -0
- package/dist/resolution/memory-budget.js.map +1 -0
- package/dist/resolution/name-matcher.d.ts +12 -1
- package/dist/resolution/name-matcher.d.ts.map +1 -1
- package/dist/resolution/name-matcher.js +439 -97
- package/dist/resolution/name-matcher.js.map +1 -1
- package/dist/resolution/resolver-pool.d.ts +106 -0
- package/dist/resolution/resolver-pool.d.ts.map +1 -0
- package/dist/resolution/resolver-pool.js +344 -0
- package/dist/resolution/resolver-pool.js.map +1 -0
- package/dist/resolution/resolver-worker.d.ts +17 -0
- package/dist/resolution/resolver-worker.d.ts.map +1 -0
- package/dist/resolution/resolver-worker.js +141 -0
- package/dist/resolution/resolver-worker.js.map +1 -0
- package/dist/resolution/types.d.ts +3 -0
- package/dist/resolution/types.d.ts.map +1 -1
- package/dist/spec/build/diff-parser.d.ts +55 -0
- package/dist/spec/build/diff-parser.d.ts.map +1 -0
- package/dist/spec/build/diff-parser.js +205 -0
- package/dist/spec/build/diff-parser.js.map +1 -0
- package/dist/spec/build/git-scanner.d.ts +93 -0
- package/dist/spec/build/git-scanner.d.ts.map +1 -0
- package/dist/spec/build/git-scanner.js +254 -0
- package/dist/spec/build/git-scanner.js.map +1 -0
- package/dist/spec/build/pipeline.d.ts +54 -0
- package/dist/spec/build/pipeline.d.ts.map +1 -0
- package/dist/spec/build/pipeline.js +170 -0
- package/dist/spec/build/pipeline.js.map +1 -0
- package/dist/spec/build/scan.d.ts +48 -0
- package/dist/spec/build/scan.d.ts.map +1 -0
- package/dist/spec/build/scan.js +89 -0
- package/dist/spec/build/scan.js.map +1 -0
- package/dist/spec/build/scope-resolver.d.ts +50 -0
- package/dist/spec/build/scope-resolver.d.ts.map +1 -0
- package/dist/spec/build/scope-resolver.js +105 -0
- package/dist/spec/build/scope-resolver.js.map +1 -0
- package/dist/spec/build/spec-extractor.d.ts +74 -0
- package/dist/spec/build/spec-extractor.d.ts.map +1 -0
- package/dist/spec/build/spec-extractor.js +344 -0
- package/dist/spec/build/spec-extractor.js.map +1 -0
- package/dist/spec/config.d.ts +35 -1
- package/dist/spec/config.d.ts.map +1 -1
- package/dist/spec/config.js +30 -5
- package/dist/spec/config.js.map +1 -1
- package/dist/spec/db/fts.d.ts.map +1 -1
- package/dist/spec/db/fts.js +19 -50
- package/dist/spec/db/fts.js.map +1 -1
- package/dist/spec/db/index.d.ts +5 -3
- package/dist/spec/db/index.d.ts.map +1 -1
- package/dist/spec/db/index.js +16 -1
- package/dist/spec/db/index.js.map +1 -1
- package/dist/spec/db/persist.d.ts +45 -0
- package/dist/spec/db/persist.d.ts.map +1 -0
- package/dist/spec/db/persist.js +66 -0
- package/dist/spec/db/persist.js.map +1 -0
- package/dist/spec/db/relations.d.ts +80 -1
- package/dist/spec/db/relations.d.ts.map +1 -1
- package/dist/spec/db/relations.js +175 -4
- package/dist/spec/db/relations.js.map +1 -1
- package/dist/spec/db/schema.d.ts +4 -0
- package/dist/spec/db/schema.d.ts.map +1 -1
- package/dist/spec/db/schema.js +4 -0
- package/dist/spec/db/schema.js.map +1 -1
- package/dist/spec/db/schema.sql +5 -1
- package/dist/spec/db/spec-node.d.ts +5 -0
- package/dist/spec/db/spec-node.d.ts.map +1 -1
- package/dist/spec/db/spec-node.js +11 -5
- package/dist/spec/db/spec-node.js.map +1 -1
- package/dist/spec/db/sql-utils.d.ts +11 -0
- package/dist/spec/db/sql-utils.d.ts.map +1 -0
- package/dist/spec/db/sql-utils.js +19 -0
- package/dist/spec/db/sql-utils.js.map +1 -0
- package/dist/spec/evolve/cluster-context.d.ts +30 -0
- package/dist/spec/evolve/cluster-context.d.ts.map +1 -0
- package/dist/spec/evolve/cluster-context.js +78 -0
- package/dist/spec/evolve/cluster-context.js.map +1 -0
- package/dist/spec/evolve/commit-spec-analyzer.d.ts +51 -0
- package/dist/spec/evolve/commit-spec-analyzer.d.ts.map +1 -0
- package/dist/spec/evolve/commit-spec-analyzer.js +88 -0
- package/dist/spec/evolve/commit-spec-analyzer.js.map +1 -0
- package/dist/spec/evolve/commit-spec-persister.d.ts +53 -0
- package/dist/spec/evolve/commit-spec-persister.d.ts.map +1 -0
- package/dist/spec/evolve/commit-spec-persister.js +93 -0
- package/dist/spec/evolve/commit-spec-persister.js.map +1 -0
- package/dist/spec/evolve/impact-locator.d.ts +23 -7
- package/dist/spec/evolve/impact-locator.d.ts.map +1 -1
- package/dist/spec/evolve/impact-locator.js +58 -14
- package/dist/spec/evolve/impact-locator.js.map +1 -1
- package/dist/spec/evolve/pipeline.d.ts +62 -25
- package/dist/spec/evolve/pipeline.d.ts.map +1 -1
- package/dist/spec/evolve/pipeline.js +436 -457
- package/dist/spec/evolve/pipeline.js.map +1 -1
- package/dist/spec/evolve/spec-rewriter.d.ts +13 -13
- package/dist/spec/evolve/spec-rewriter.d.ts.map +1 -1
- package/dist/spec/evolve/spec-rewriter.js +45 -45
- package/dist/spec/evolve/spec-rewriter.js.map +1 -1
- package/dist/spec/git/commits.d.ts +85 -0
- package/dist/spec/git/commits.d.ts.map +1 -0
- package/dist/spec/git/commits.js +218 -0
- package/dist/spec/git/commits.js.map +1 -0
- package/dist/spec/git/exec.d.ts +13 -0
- package/dist/spec/git/exec.d.ts.map +1 -0
- package/dist/spec/git/exec.js +19 -0
- package/dist/spec/git/exec.js.map +1 -0
- package/dist/spec/git/index.d.ts +9 -0
- package/dist/spec/git/index.d.ts.map +1 -0
- package/dist/spec/git/index.js +22 -0
- package/dist/spec/git/index.js.map +1 -0
- package/dist/spec/git-utils.d.ts +8 -0
- package/dist/spec/git-utils.d.ts.map +1 -0
- package/dist/spec/git-utils.js +14 -0
- package/dist/spec/git-utils.js.map +1 -0
- package/dist/spec/graph/index.d.ts +8 -0
- package/dist/spec/graph/index.d.ts.map +1 -0
- package/dist/spec/graph/index.js +17 -0
- package/dist/spec/graph/index.js.map +1 -0
- package/dist/spec/graph/queries.d.ts +6 -35
- package/dist/spec/graph/queries.d.ts.map +1 -1
- package/dist/spec/graph/queries.js +71 -248
- package/dist/spec/graph/queries.js.map +1 -1
- package/dist/spec/llm/agent-client.d.ts +59 -0
- package/dist/spec/llm/agent-client.d.ts.map +1 -0
- package/dist/spec/llm/agent-client.js +213 -0
- package/dist/spec/llm/agent-client.js.map +1 -0
- package/dist/spec/llm/agents/claude-code.d.ts +32 -0
- package/dist/spec/llm/agents/claude-code.d.ts.map +1 -0
- package/dist/spec/llm/agents/claude-code.js +125 -0
- package/dist/spec/llm/agents/claude-code.js.map +1 -0
- package/dist/spec/llm/agents/codex.d.ts +32 -0
- package/dist/spec/llm/agents/codex.d.ts.map +1 -0
- package/dist/spec/llm/agents/codex.js +145 -0
- package/dist/spec/llm/agents/codex.js.map +1 -0
- package/dist/spec/llm/agents/detect-utils.d.ts +28 -0
- package/dist/spec/llm/agents/detect-utils.d.ts.map +1 -0
- package/dist/spec/llm/agents/detect-utils.js +91 -0
- package/dist/spec/llm/agents/detect-utils.js.map +1 -0
- package/dist/spec/llm/agents/deveco-code.d.ts +33 -0
- package/dist/spec/llm/agents/deveco-code.d.ts.map +1 -0
- package/dist/spec/llm/agents/deveco-code.js +165 -0
- package/dist/spec/llm/agents/deveco-code.js.map +1 -0
- package/dist/spec/llm/agents/index.d.ts +31 -0
- package/dist/spec/llm/agents/index.d.ts.map +1 -0
- package/dist/spec/llm/agents/index.js +65 -0
- package/dist/spec/llm/agents/index.js.map +1 -0
- package/dist/spec/llm/agents/types.d.ts +76 -0
- package/dist/spec/llm/agents/types.d.ts.map +1 -0
- package/dist/spec/llm/agents/types.js +15 -0
- package/dist/spec/llm/agents/types.js.map +1 -0
- package/dist/spec/llm/client.d.ts +31 -11
- package/dist/spec/llm/client.d.ts.map +1 -1
- package/dist/spec/llm/client.js +143 -81
- package/dist/spec/llm/client.js.map +1 -1
- package/dist/spec/llm/factory.d.ts +41 -0
- package/dist/spec/llm/factory.d.ts.map +1 -0
- package/dist/spec/llm/factory.js +80 -0
- package/dist/spec/llm/factory.js.map +1 -0
- package/dist/spec/llm/prompts.d.ts +24 -8
- package/dist/spec/llm/prompts.d.ts.map +1 -1
- package/dist/spec/llm/prompts.js +100 -50
- package/dist/spec/llm/prompts.js.map +1 -1
- package/dist/spec/llm/retry.d.ts +53 -0
- package/dist/spec/llm/retry.d.ts.map +1 -0
- package/dist/spec/llm/retry.js +153 -0
- package/dist/spec/llm/retry.js.map +1 -0
- package/dist/spec/mine/clusterer.d.ts +63 -0
- package/dist/spec/mine/clusterer.d.ts.map +1 -0
- package/dist/spec/mine/clusterer.js +904 -0
- package/dist/spec/mine/clusterer.js.map +1 -0
- package/dist/spec/mine/clustering/features.d.ts +38 -0
- package/dist/spec/mine/clustering/features.d.ts.map +1 -0
- package/dist/spec/mine/clustering/features.js +108 -0
- package/dist/spec/mine/clustering/features.js.map +1 -0
- package/dist/spec/mine/clustering/index.d.ts +62 -0
- package/dist/spec/mine/clustering/index.d.ts.map +1 -0
- package/dist/spec/mine/clustering/index.js +259 -0
- package/dist/spec/mine/clustering/index.js.map +1 -0
- package/dist/spec/mine/clustering/leiden.d.ts +61 -0
- package/dist/spec/mine/clustering/leiden.d.ts.map +1 -0
- package/dist/spec/mine/clustering/leiden.js +489 -0
- package/dist/spec/mine/clustering/leiden.js.map +1 -0
- package/dist/spec/mine/clustering/text-similarity.d.ts +22 -0
- package/dist/spec/mine/clustering/text-similarity.d.ts.map +1 -0
- package/dist/spec/mine/clustering/text-similarity.js +98 -0
- package/dist/spec/mine/clustering/text-similarity.js.map +1 -0
- package/dist/spec/mine/generator.d.ts +54 -0
- package/dist/spec/mine/generator.d.ts.map +1 -0
- package/dist/spec/mine/generator.js +267 -0
- package/dist/spec/mine/generator.js.map +1 -0
- package/dist/spec/mine/persist.d.ts +37 -0
- package/dist/spec/mine/persist.d.ts.map +1 -0
- package/dist/spec/mine/persist.js +170 -0
- package/dist/spec/mine/persist.js.map +1 -0
- package/dist/spec/mine/pipeline.d.ts +41 -0
- package/dist/spec/mine/pipeline.d.ts.map +1 -0
- package/dist/spec/mine/pipeline.js +236 -0
- package/dist/spec/mine/pipeline.js.map +1 -0
- package/dist/spec/mine/progress-handler.d.ts +22 -0
- package/dist/spec/mine/progress-handler.d.ts.map +1 -0
- package/dist/spec/mine/progress-handler.js +108 -0
- package/dist/spec/mine/progress-handler.js.map +1 -0
- package/dist/spec/mine/progress.d.ts +23 -0
- package/dist/spec/mine/progress.d.ts.map +1 -0
- package/dist/spec/mine/progress.js +12 -0
- package/dist/spec/mine/progress.js.map +1 -0
- package/dist/spec/mine/scanner.d.ts +59 -0
- package/dist/spec/mine/scanner.d.ts.map +1 -0
- package/dist/spec/mine/scanner.js +383 -0
- package/dist/spec/mine/scanner.js.map +1 -0
- package/dist/spec/types.d.ts +32 -0
- package/dist/spec/types.d.ts.map +1 -1
- package/dist/spec/ui/index.d.ts +9 -0
- package/dist/spec/ui/index.d.ts.map +1 -0
- package/dist/spec/ui/index.js +16 -0
- package/dist/spec/ui/index.js.map +1 -0
- package/dist/spec/ui/progress-handler.d.ts +33 -0
- package/dist/spec/ui/progress-handler.d.ts.map +1 -0
- package/dist/spec/ui/progress-handler.js +132 -0
- package/dist/spec/ui/progress-handler.js.map +1 -0
- package/dist/spec/ui/progress.d.ts +24 -0
- package/dist/spec/ui/progress.d.ts.map +1 -0
- package/dist/spec/ui/progress.js +13 -0
- package/dist/spec/ui/progress.js.map +1 -0
- package/dist/spec/utils/fs.d.ts +45 -0
- package/dist/spec/utils/fs.d.ts.map +1 -0
- package/dist/spec/utils/fs.js +163 -0
- package/dist/spec/utils/fs.js.map +1 -0
- package/dist/spec/utils/index.d.ts +12 -0
- package/dist/spec/utils/index.d.ts.map +1 -0
- package/dist/spec/utils/index.js +26 -0
- package/dist/spec/utils/index.js.map +1 -0
- package/dist/spec/utils/meta.d.ts +32 -0
- package/dist/spec/utils/meta.d.ts.map +1 -0
- package/dist/spec/utils/meta.js +122 -0
- package/dist/spec/utils/meta.js.map +1 -0
- package/dist/spec/utils/truncate.d.ts +86 -0
- package/dist/spec/utils/truncate.d.ts.map +1 -0
- package/dist/spec/utils/truncate.js +172 -0
- package/dist/spec/utils/truncate.js.map +1 -0
- package/dist/spec/utils.d.ts +4 -16
- package/dist/spec/utils.d.ts.map +1 -1
- package/dist/spec/utils.js +6 -58
- package/dist/spec/utils.js.map +1 -1
- package/dist/sync/watcher.d.ts +25 -1
- package/dist/sync/watcher.d.ts.map +1 -1
- package/dist/sync/watcher.js +76 -3
- package/dist/sync/watcher.js.map +1 -1
- package/dist/telemetry/index.js +3 -3
- package/dist/telemetry/index.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -3
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Store worker — dedicated writer thread for the bulk-index store phase.
|
|
4
|
+
*
|
|
5
|
+
* During a fresh full index the main thread's biggest serial cost is executing
|
|
6
|
+
* the per-file INSERT batches. This worker owns that work on its own SQLite
|
|
7
|
+
* connection: the orchestrator posts one message per file (in file order) and
|
|
8
|
+
* the worker applies them in arrival order, which preserves the #1015
|
|
9
|
+
* insertion-order determinism exactly as if the main thread had run the same
|
|
10
|
+
* calls. The main thread performs NO database access while the writer is
|
|
11
|
+
* active (fresh-DB path only), so there is no cross-connection contention.
|
|
12
|
+
*
|
|
13
|
+
* Protocol (main → worker):
|
|
14
|
+
* {type:'open', dbPath, fastInit} → open connection, reply {type:'ready'}
|
|
15
|
+
* {type:'bundle', bundle} → apply one file's store bundle
|
|
16
|
+
* {type:'drain', id} → reply {type:'drained', id}
|
|
17
|
+
* {type:'close'} → close DB and exit
|
|
18
|
+
* Worker → main: {type:'ready'} | {type:'ack'} | {type:'drained', id} | {type:'error', message}
|
|
19
|
+
*/
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
try {
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
23
|
+
require('node:module').enableCompileCache?.();
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
/* cache is best-effort */
|
|
27
|
+
}
|
|
28
|
+
const worker_threads_1 = require("worker_threads");
|
|
29
|
+
const queries_1 = require("../db/queries");
|
|
30
|
+
const sqlite_adapter_1 = require("../db/sqlite-adapter");
|
|
31
|
+
if (!worker_threads_1.parentPort) {
|
|
32
|
+
throw new Error('store-worker must be run as a worker thread');
|
|
33
|
+
}
|
|
34
|
+
const port = worker_threads_1.parentPort;
|
|
35
|
+
let db = null;
|
|
36
|
+
let queries = null;
|
|
37
|
+
const STORE_TIMINGS = !!process.env.HOMEGRAPH_SYNTH_TIMINGS;
|
|
38
|
+
let storeNs = 0n;
|
|
39
|
+
let bundleCount = 0;
|
|
40
|
+
port.on('message', (msg) => {
|
|
41
|
+
try {
|
|
42
|
+
switch (msg.type) {
|
|
43
|
+
case 'open': {
|
|
44
|
+
const created = (0, sqlite_adapter_1.createDatabase)(msg.dbPath);
|
|
45
|
+
db = created.db;
|
|
46
|
+
db.pragma('busy_timeout = 5000');
|
|
47
|
+
db.pragma('foreign_keys = ON');
|
|
48
|
+
if (msg.fastInit) {
|
|
49
|
+
db.pragma('journal_mode = MEMORY');
|
|
50
|
+
db.pragma('synchronous = OFF');
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
db.pragma('synchronous = NORMAL');
|
|
54
|
+
}
|
|
55
|
+
db.pragma('cache_size = -64000');
|
|
56
|
+
db.pragma('temp_store = MEMORY');
|
|
57
|
+
queries = new queries_1.QueryBuilder(db);
|
|
58
|
+
port.postMessage({ type: 'ready' });
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
case 'bundle': {
|
|
62
|
+
if (!queries)
|
|
63
|
+
throw new Error('store-worker: bundle before open');
|
|
64
|
+
if (STORE_TIMINGS) {
|
|
65
|
+
bundleCount++;
|
|
66
|
+
const t0 = process.hrtime.bigint();
|
|
67
|
+
queries.storeFileBundle(msg.bundle);
|
|
68
|
+
storeNs += process.hrtime.bigint() - t0;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
queries.storeFileBundle(msg.bundle);
|
|
72
|
+
}
|
|
73
|
+
port.postMessage({ type: 'ack' });
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
case 'drain': {
|
|
77
|
+
port.postMessage({ type: 'drained', id: msg.id });
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
case 'close': {
|
|
81
|
+
if (STORE_TIMINGS && bundleCount > 0) {
|
|
82
|
+
console.error(`[store-timing] bundles=${bundleCount} store=${(Number(storeNs / 1000000n) / 1000).toFixed(2)}s`);
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
db?.close();
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
/* already closed */
|
|
89
|
+
}
|
|
90
|
+
process.exit(0);
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
port.postMessage({
|
|
97
|
+
type: 'error',
|
|
98
|
+
message: err instanceof Error ? err.message : String(err),
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=store-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-worker.js","sourceRoot":"","sources":["../../src/extraction/store-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StoreWriter — main-thread client for the store worker (see store-worker.ts).
|
|
3
|
+
*
|
|
4
|
+
* Used ONLY on the fresh-DB bulk path: bundles are posted in file order and the
|
|
5
|
+
* worker applies them in arrival order, so rowid assignment (and therefore
|
|
6
|
+
* resolution's insertion-order disambiguation) is byte-identical to the
|
|
7
|
+
* main-thread store. Kill switch: HOMEGRAPH_NO_STORE_WORKER=1.
|
|
8
|
+
*/
|
|
9
|
+
import { Language, Node, Edge, UnresolvedReference, FileRecord, ExtractionResult } from '../types';
|
|
10
|
+
/** One file's complete store payload (pre-filtered — see storeFileBundle). */
|
|
11
|
+
export interface StoreBundle {
|
|
12
|
+
nodes: Node[];
|
|
13
|
+
edges: Edge[];
|
|
14
|
+
refs: UnresolvedReference[];
|
|
15
|
+
file: FileRecord;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The validation/denormalization every bundle gets before storeFileBundle:
|
|
19
|
+
* - nodes missing identity fields are dropped (#42-class safety),
|
|
20
|
+
* - edges must connect inserted nodes (FK integrity),
|
|
21
|
+
* - refs must originate from inserted nodes and carry the denormalized
|
|
22
|
+
* filePath/language the resolver reads.
|
|
23
|
+
*/
|
|
24
|
+
export declare function finalizeStoreBundle(result: Pick<ExtractionResult, 'nodes' | 'edges' | 'unresolvedReferences'>, filePath: string, language: Language, file: FileRecord): StoreBundle;
|
|
25
|
+
export declare class StoreWriter {
|
|
26
|
+
private worker;
|
|
27
|
+
private readyPromise;
|
|
28
|
+
private firstError;
|
|
29
|
+
private drainWaiters;
|
|
30
|
+
private nextDrainId;
|
|
31
|
+
private exited;
|
|
32
|
+
/** Bundles posted but not yet acked — the queue-depth backpressure signal. */
|
|
33
|
+
private outstanding;
|
|
34
|
+
private belowWaiters;
|
|
35
|
+
constructor(workerScriptPath: string, dbPath: string, fastInit: boolean);
|
|
36
|
+
private failAll;
|
|
37
|
+
private settleOne;
|
|
38
|
+
ready(): Promise<void>;
|
|
39
|
+
/** Post one file's bundle. Throws immediately if the writer already failed. */
|
|
40
|
+
send(bundle: StoreBundle): void;
|
|
41
|
+
/** Backpressure: resolves once fewer than `limit` bundles are un-acked. */
|
|
42
|
+
waitBelow(limit: number): Promise<void>;
|
|
43
|
+
/** Resolves when every bundle posted before this call has been applied. */
|
|
44
|
+
drain(): Promise<void>;
|
|
45
|
+
/** Close the worker's DB connection and join the thread. */
|
|
46
|
+
close(): Promise<void>;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=store-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-writer.d.ts","sourceRoot":"","sources":["../../src/extraction/store-writer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEnG,8EAA8E;AAC9E,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,IAAI,EAAE,mBAAmB,EAAE,CAAC;IAC5B,IAAI,EAAE,UAAU,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,OAAO,GAAG,sBAAsB,CAAC,EAC1E,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,UAAU,GACf,WAAW,CAcb;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,YAAY,CAA0E;IAC9F,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,8EAA8E;IAC9E,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,YAAY,CAAqD;gBAE7D,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO;IA0CvE,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,SAAS;IAWjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,+EAA+E;IAC/E,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAO/B,2EAA2E;IAC3E,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvC,2EAA2E;IAC3E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,4DAA4D;IACtD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAa7B"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* StoreWriter — main-thread client for the store worker (see store-worker.ts).
|
|
4
|
+
*
|
|
5
|
+
* Used ONLY on the fresh-DB bulk path: bundles are posted in file order and the
|
|
6
|
+
* worker applies them in arrival order, so rowid assignment (and therefore
|
|
7
|
+
* resolution's insertion-order disambiguation) is byte-identical to the
|
|
8
|
+
* main-thread store. Kill switch: HOMEGRAPH_NO_STORE_WORKER=1.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.StoreWriter = void 0;
|
|
12
|
+
exports.finalizeStoreBundle = finalizeStoreBundle;
|
|
13
|
+
const worker_threads_1 = require("worker_threads");
|
|
14
|
+
/**
|
|
15
|
+
* The validation/denormalization every bundle gets before storeFileBundle:
|
|
16
|
+
* - nodes missing identity fields are dropped (#42-class safety),
|
|
17
|
+
* - edges must connect inserted nodes (FK integrity),
|
|
18
|
+
* - refs must originate from inserted nodes and carry the denormalized
|
|
19
|
+
* filePath/language the resolver reads.
|
|
20
|
+
*/
|
|
21
|
+
function finalizeStoreBundle(result, filePath, language, file) {
|
|
22
|
+
const validNodes = result.nodes.filter((n) => n.id && n.kind && n.name && n.filePath && n.language);
|
|
23
|
+
const insertedIds = new Set(validNodes.map((n) => n.id));
|
|
24
|
+
const validEdges = result.edges.filter((e) => insertedIds.has(e.source) && insertedIds.has(e.target));
|
|
25
|
+
const validRefs = result.unresolvedReferences
|
|
26
|
+
.filter((ref) => insertedIds.has(ref.fromNodeId))
|
|
27
|
+
.map((ref) => ({
|
|
28
|
+
...ref,
|
|
29
|
+
filePath: ref.filePath ?? filePath,
|
|
30
|
+
language: ref.language ?? language,
|
|
31
|
+
}));
|
|
32
|
+
return { nodes: validNodes, edges: validEdges, refs: validRefs, file };
|
|
33
|
+
}
|
|
34
|
+
class StoreWriter {
|
|
35
|
+
worker;
|
|
36
|
+
readyPromise;
|
|
37
|
+
firstError = null;
|
|
38
|
+
drainWaiters = new Map();
|
|
39
|
+
nextDrainId = 0;
|
|
40
|
+
exited = false;
|
|
41
|
+
/** Bundles posted but not yet acked — the queue-depth backpressure signal. */
|
|
42
|
+
outstanding = 0;
|
|
43
|
+
belowWaiters = [];
|
|
44
|
+
constructor(workerScriptPath, dbPath, fastInit) {
|
|
45
|
+
this.worker = new worker_threads_1.Worker(workerScriptPath);
|
|
46
|
+
let readyResolve;
|
|
47
|
+
let readyReject;
|
|
48
|
+
this.readyPromise = new Promise((resolve, reject) => {
|
|
49
|
+
readyResolve = resolve;
|
|
50
|
+
readyReject = reject;
|
|
51
|
+
});
|
|
52
|
+
this.worker.on('message', (msg) => {
|
|
53
|
+
if (msg.type === 'ready') {
|
|
54
|
+
readyResolve();
|
|
55
|
+
}
|
|
56
|
+
else if (msg.type === 'ack') {
|
|
57
|
+
this.settleOne();
|
|
58
|
+
}
|
|
59
|
+
else if (msg.type === 'drained' && msg.id !== undefined) {
|
|
60
|
+
const waiter = this.drainWaiters.get(msg.id);
|
|
61
|
+
this.drainWaiters.delete(msg.id);
|
|
62
|
+
if (!waiter)
|
|
63
|
+
return;
|
|
64
|
+
if (this.firstError)
|
|
65
|
+
waiter.reject(this.firstError);
|
|
66
|
+
else
|
|
67
|
+
waiter.resolve();
|
|
68
|
+
}
|
|
69
|
+
else if (msg.type === 'error') {
|
|
70
|
+
if (!this.firstError)
|
|
71
|
+
this.firstError = new Error(`store worker: ${msg.message}`);
|
|
72
|
+
this.settleOne(); // the error reply is also the failed bundle's ack
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
this.worker.on('error', (err) => {
|
|
76
|
+
this.failAll(err instanceof Error ? err : new Error(String(err)));
|
|
77
|
+
readyReject(this.firstError);
|
|
78
|
+
});
|
|
79
|
+
this.worker.on('exit', (code) => {
|
|
80
|
+
this.exited = true;
|
|
81
|
+
if (code !== 0) {
|
|
82
|
+
this.failAll(new Error(`store worker exited with code ${code}`));
|
|
83
|
+
readyReject(this.firstError);
|
|
84
|
+
}
|
|
85
|
+
else if (this.drainWaiters.size > 0 || this.belowWaiters.length > 0) {
|
|
86
|
+
this.failAll(new Error('store worker exited before drain completed'));
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
this.worker.postMessage({ type: 'open', dbPath, fastInit });
|
|
90
|
+
}
|
|
91
|
+
failAll(err) {
|
|
92
|
+
if (!this.firstError)
|
|
93
|
+
this.firstError = err;
|
|
94
|
+
for (const [, waiter] of this.drainWaiters)
|
|
95
|
+
waiter.reject(this.firstError);
|
|
96
|
+
this.drainWaiters.clear();
|
|
97
|
+
this.outstanding = 0;
|
|
98
|
+
const waiters = this.belowWaiters;
|
|
99
|
+
this.belowWaiters = [];
|
|
100
|
+
for (const w of waiters)
|
|
101
|
+
w.resolve();
|
|
102
|
+
}
|
|
103
|
+
settleOne() {
|
|
104
|
+
if (this.outstanding > 0)
|
|
105
|
+
this.outstanding--;
|
|
106
|
+
if (this.belowWaiters.length === 0)
|
|
107
|
+
return;
|
|
108
|
+
const still = [];
|
|
109
|
+
for (const w of this.belowWaiters) {
|
|
110
|
+
if (this.outstanding < w.limit)
|
|
111
|
+
w.resolve();
|
|
112
|
+
else
|
|
113
|
+
still.push(w);
|
|
114
|
+
}
|
|
115
|
+
this.belowWaiters = still;
|
|
116
|
+
}
|
|
117
|
+
ready() {
|
|
118
|
+
return this.readyPromise;
|
|
119
|
+
}
|
|
120
|
+
/** Post one file's bundle. Throws immediately if the writer already failed. */
|
|
121
|
+
send(bundle) {
|
|
122
|
+
if (this.firstError)
|
|
123
|
+
throw this.firstError;
|
|
124
|
+
if (this.exited)
|
|
125
|
+
throw new Error('store worker already exited');
|
|
126
|
+
this.outstanding++;
|
|
127
|
+
this.worker.postMessage({ type: 'bundle', bundle });
|
|
128
|
+
}
|
|
129
|
+
/** Backpressure: resolves once fewer than `limit` bundles are un-acked. */
|
|
130
|
+
waitBelow(limit) {
|
|
131
|
+
if (this.firstError || this.exited || this.outstanding < limit)
|
|
132
|
+
return Promise.resolve();
|
|
133
|
+
return new Promise((resolve) => {
|
|
134
|
+
this.belowWaiters.push({ limit, resolve });
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
/** Resolves when every bundle posted before this call has been applied. */
|
|
138
|
+
drain() {
|
|
139
|
+
if (this.firstError)
|
|
140
|
+
return Promise.reject(this.firstError);
|
|
141
|
+
if (this.exited)
|
|
142
|
+
return Promise.reject(new Error('store worker already exited'));
|
|
143
|
+
const id = this.nextDrainId++;
|
|
144
|
+
const p = new Promise((resolve, reject) => {
|
|
145
|
+
this.drainWaiters.set(id, { resolve, reject });
|
|
146
|
+
});
|
|
147
|
+
this.worker.postMessage({ type: 'drain', id });
|
|
148
|
+
return p;
|
|
149
|
+
}
|
|
150
|
+
/** Close the worker's DB connection and join the thread. */
|
|
151
|
+
async close() {
|
|
152
|
+
if (this.exited)
|
|
153
|
+
return;
|
|
154
|
+
this.worker.postMessage({ type: 'close' });
|
|
155
|
+
await new Promise((resolve) => {
|
|
156
|
+
const t = setTimeout(() => {
|
|
157
|
+
void this.worker.terminate().then(() => resolve());
|
|
158
|
+
}, 5000);
|
|
159
|
+
this.worker.once('exit', () => {
|
|
160
|
+
clearTimeout(t);
|
|
161
|
+
resolve();
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
exports.StoreWriter = StoreWriter;
|
|
167
|
+
//# sourceMappingURL=store-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-writer.js","sourceRoot":"","sources":["../../src/extraction/store-writer.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAoBH,kDAmBC;AArCD,mDAAwC;AAWxC;;;;;;GAMG;AACH,SAAgB,mBAAmB,CACjC,MAA0E,EAC1E,QAAgB,EAChB,QAAkB,EAClB,IAAgB;IAEhB,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;IACpG,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CACpC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAC9D,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,CAAC,oBAAoB;SAC1C,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;SAChD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACb,GAAG,GAAG;QACN,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,QAAQ;QAClC,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,QAAQ;KACnC,CAAC,CAAC,CAAC;IACN,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACzE,CAAC;AAED,MAAa,WAAW;IACd,MAAM,CAAS;IACf,YAAY,CAAgB;IAC5B,UAAU,GAAiB,IAAI,CAAC;IAChC,YAAY,GAAG,IAAI,GAAG,EAA+D,CAAC;IACtF,WAAW,GAAG,CAAC,CAAC;IAChB,MAAM,GAAG,KAAK,CAAC;IACvB,8EAA8E;IACtE,WAAW,GAAG,CAAC,CAAC;IAChB,YAAY,GAAkD,EAAE,CAAC;IAEzE,YAAY,gBAAwB,EAAE,MAAc,EAAE,QAAiB;QACrE,IAAI,CAAC,MAAM,GAAG,IAAI,uBAAM,CAAC,gBAAgB,CAAC,CAAC;QAC3C,IAAI,YAAyB,CAAC;QAC9B,IAAI,WAAgC,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxD,YAAY,GAAG,OAAO,CAAC;YACvB,WAAW,GAAG,MAAM,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAoD,EAAE,EAAE;YACjF,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACzB,YAAY,EAAE,CAAC;YACjB,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;gBAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC7C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACjC,IAAI,CAAC,MAAM;oBAAE,OAAO;gBACpB,IAAI,IAAI,CAAC,UAAU;oBAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;oBAC/C,MAAM,CAAC,OAAO,EAAE,CAAC;YACxB,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAChC,IAAI,CAAC,IAAI,CAAC,UAAU;oBAAE,IAAI,CAAC,UAAU,GAAG,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBAClF,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,kDAAkD;YACtE,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClE,WAAW,CAAC,IAAI,CAAC,UAAW,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACjE,WAAW,CAAC,IAAI,CAAC,UAAW,CAAC,CAAC;YAChC,CAAC;iBAAM,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtE,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAC;YACxE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9D,CAAC;IAEO,OAAO,CAAC,GAAU;QACxB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QAC5C,KAAK,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY;YAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3E,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;QAClC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IACvC,CAAC;IAEO,SAAS;QACf,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC;YAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7C,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC3C,MAAM,KAAK,GAA6B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK;gBAAE,CAAC,CAAC,OAAO,EAAE,CAAC;;gBACvC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,+EAA+E;IAC/E,IAAI,CAAC,MAAmB;QACtB,IAAI,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,CAAC,UAAU,CAAC;QAC3C,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAChE,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,2EAA2E;IAC3E,SAAS,CAAC,KAAa;QACrB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,GAAG,KAAK;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QACzF,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,KAAK;QACH,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5D,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACjF,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC;IACX,CAAC;IAED,4DAA4D;IAC5D,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3C,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE;gBACxB,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YACrD,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;gBAC5B,YAAY,CAAC,CAAC,CAAC,CAAC;gBAChB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAxHD,kCAwHC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-sitter.d.ts","sourceRoot":"","sources":["../../src/extraction/tree-sitter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EACL,QAAQ,EAIR,gBAAgB,EAGjB,MAAM,UAAU,CAAC;AAuBlB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"tree-sitter.d.ts","sourceRoot":"","sources":["../../src/extraction/tree-sitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -356,6 +356,29 @@ const INSTANTIATION_KINDS = new Set([
|
|
|
356
356
|
'struct_expression', // rust — `Widget { n: 1 }` / `m::Widget { .. }`
|
|
357
357
|
'instance_expression', // scala — `new Monoid[Int] { ... }`
|
|
358
358
|
]);
|
|
359
|
+
/**
|
|
360
|
+
* tree-sitter node types (across grammars) for literal expressions in method-
|
|
361
|
+
* call RECEIVER position. A literal's methods are the language's builtins —
|
|
362
|
+
* `", ".join`, `"x".toUpperCase()`, `5.times`, `[].concat` — never project
|
|
363
|
+
* symbols, so a member call on one must not emit a `calls` ref that bare-name
|
|
364
|
+
* matching could bind to an unrelated same-named project function (#1230).
|
|
365
|
+
*/
|
|
366
|
+
const LITERAL_RECEIVER_TYPES = new Set([
|
|
367
|
+
// strings
|
|
368
|
+
'string', 'string_literal', 'interpreted_string_literal', 'raw_string_literal',
|
|
369
|
+
'template_string', 'concatenated_string', 'formatted_string', 'f_string',
|
|
370
|
+
'line_string_literal', 'string_content', 'heredoc_body',
|
|
371
|
+
// numbers
|
|
372
|
+
'number', 'number_literal', 'integer', 'integer_literal', 'float',
|
|
373
|
+
'float_literal', 'int_literal', 'decimal_integer_literal', 'real_literal',
|
|
374
|
+
// chars / runes / regex / booleans / null-likes
|
|
375
|
+
'char_literal', 'character_literal', 'rune_literal', 'regex', 'regex_literal',
|
|
376
|
+
'true', 'false', 'boolean_literal', 'bool_literal', 'none', 'null', 'nil',
|
|
377
|
+
'null_literal', 'undefined',
|
|
378
|
+
// collection literals
|
|
379
|
+
'list', 'list_literal', 'array', 'array_literal', 'array_creation_expression',
|
|
380
|
+
'dictionary', 'dict_literal', 'object', 'tuple', 'set',
|
|
381
|
+
]);
|
|
359
382
|
/**
|
|
360
383
|
* TreeSitterExtractor - Main extraction class
|
|
361
384
|
*/
|
|
@@ -4245,6 +4268,16 @@ class TreeSitterExtractor {
|
|
|
4245
4268
|
(0, tree_sitter_helpers_1.getChildByField)(func, 'operand') ||
|
|
4246
4269
|
(0, tree_sitter_helpers_1.getChildByField)(func, 'argument') ||
|
|
4247
4270
|
func.namedChild(0);
|
|
4271
|
+
// A LITERAL receiver — `", ".join(...)`, `"x".toUpperCase()`,
|
|
4272
|
+
// `5.times`, `[].concat(...)` — calls a builtin of the literal's
|
|
4273
|
+
// type, never a project symbol. The bare-name fallback below let
|
|
4274
|
+
// these exact-match an unrelated same-named project function
|
|
4275
|
+
// (`", ".join` bound to a local `join` defined inside a DIFFERENT
|
|
4276
|
+
// function, #1230). Emit nothing: a silent miss, never a wrong
|
|
4277
|
+
// edge. Nested calls in the arguments are visited independently.
|
|
4278
|
+
if (receiver && LITERAL_RECEIVER_TYPES.has(receiver.type)) {
|
|
4279
|
+
return;
|
|
4280
|
+
}
|
|
4248
4281
|
const SKIP_RECEIVERS = new Set(['self', 'this', 'cls', 'super']);
|
|
4249
4282
|
if (receiver && (receiver.type === 'identifier' || receiver.type === 'simple_identifier' || receiver.type === 'field_identifier')) {
|
|
4250
4283
|
const receiverName = (0, tree_sitter_helpers_1.getNodeText)(receiver, this.source);
|
|
@@ -4330,6 +4363,20 @@ class TreeSitterExtractor {
|
|
|
4330
4363
|
// name, which either failed to resolve or resolved ambiguously.
|
|
4331
4364
|
calleeName = `${(0, tree_sitter_helpers_1.getNodeText)(receiver, this.source)}.${methodName}`;
|
|
4332
4365
|
}
|
|
4366
|
+
else if (this.language === 'go' &&
|
|
4367
|
+
receiver &&
|
|
4368
|
+
receiver.type === 'selector_expression' &&
|
|
4369
|
+
/^[A-Za-z_]\w*\.[A-Za-z_]\w*$/.test((0, tree_sitter_helpers_1.getNodeText)(receiver, this.source).replace(/\s+/g, ''))) {
|
|
4370
|
+
// Go 2-hop field chain `target.conn.Exec(...)`: keep the
|
|
4371
|
+
// receiver chain so resolution can infer `conn`'s declared type
|
|
4372
|
+
// from the Target struct. Previously this emitted the bare
|
|
4373
|
+
// method name, and when the field's type is EXTERNAL (sql.DB)
|
|
4374
|
+
// the bare name exact-matched an unrelated same-named local
|
|
4375
|
+
// method — a fabricated internal dependency (#1276). Chained
|
|
4376
|
+
// Go receivers resolve strictly via validated field-hop
|
|
4377
|
+
// inference (see matchGoFieldChainCall) or stay unresolved.
|
|
4378
|
+
calleeName = `${(0, tree_sitter_helpers_1.getNodeText)(receiver, this.source).replace(/\s+/g, '')}.${methodName}`;
|
|
4379
|
+
}
|
|
4333
4380
|
else {
|
|
4334
4381
|
calleeName = methodName;
|
|
4335
4382
|
}
|