@cstart/coldstart 2.0.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 +236 -0
- package/dist/cache/disk-cache.d.ts +14 -0
- package/dist/cache/disk-cache.d.ts.map +1 -0
- package/dist/cache/disk-cache.js +371 -0
- package/dist/cache/disk-cache.js.map +1 -0
- package/dist/cli.d.ts +18 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +206 -0
- package/dist/cli.js.map +1 -0
- package/dist/constants.d.ts +8 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +111 -0
- package/dist/constants.js.map +1 -0
- package/dist/daemon-lock.d.ts +63 -0
- package/dist/daemon-lock.d.ts.map +1 -0
- package/dist/daemon-lock.js +218 -0
- package/dist/daemon-lock.js.map +1 -0
- package/dist/daemon-log.d.ts +26 -0
- package/dist/daemon-log.d.ts.map +1 -0
- package/dist/daemon-log.js +110 -0
- package/dist/daemon-log.js.map +1 -0
- package/dist/index-manager.d.ts +103 -0
- package/dist/index-manager.d.ts.map +1 -0
- package/dist/index-manager.js +361 -0
- package/dist/index-manager.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +724 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer/content-tokens.d.ts +74 -0
- package/dist/indexer/content-tokens.d.ts.map +1 -0
- package/dist/indexer/content-tokens.js +406 -0
- package/dist/indexer/content-tokens.js.map +1 -0
- package/dist/indexer/cpp-include-roots.d.ts +7 -0
- package/dist/indexer/cpp-include-roots.d.ts.map +1 -0
- package/dist/indexer/cpp-include-roots.js +166 -0
- package/dist/indexer/cpp-include-roots.js.map +1 -0
- package/dist/indexer/csharp-synthetic.d.ts +9 -0
- package/dist/indexer/csharp-synthetic.d.ts.map +1 -0
- package/dist/indexer/csharp-synthetic.js +51 -0
- package/dist/indexer/csharp-synthetic.js.map +1 -0
- package/dist/indexer/django-synthetic.d.ts +12 -0
- package/dist/indexer/django-synthetic.d.ts.map +1 -0
- package/dist/indexer/django-synthetic.js +49 -0
- package/dist/indexer/django-synthetic.js.map +1 -0
- package/dist/indexer/extractors/angularjs.d.ts +16 -0
- package/dist/indexer/extractors/angularjs.d.ts.map +1 -0
- package/dist/indexer/extractors/angularjs.js +49 -0
- package/dist/indexer/extractors/angularjs.js.map +1 -0
- package/dist/indexer/extractors/cpp.d.ts +9 -0
- package/dist/indexer/extractors/cpp.d.ts.map +1 -0
- package/dist/indexer/extractors/cpp.js +254 -0
- package/dist/indexer/extractors/cpp.js.map +1 -0
- package/dist/indexer/extractors/csharp.d.ts +19 -0
- package/dist/indexer/extractors/csharp.d.ts.map +1 -0
- package/dist/indexer/extractors/csharp.js +327 -0
- package/dist/indexer/extractors/csharp.js.map +1 -0
- package/dist/indexer/extractors/env.d.ts +9 -0
- package/dist/indexer/extractors/env.d.ts.map +1 -0
- package/dist/indexer/extractors/env.js +43 -0
- package/dist/indexer/extractors/env.js.map +1 -0
- package/dist/indexer/extractors/go.d.ts +9 -0
- package/dist/indexer/extractors/go.d.ts.map +1 -0
- package/dist/indexer/extractors/go.js +227 -0
- package/dist/indexer/extractors/go.js.map +1 -0
- package/dist/indexer/extractors/graphql.d.ts +22 -0
- package/dist/indexer/extractors/graphql.d.ts.map +1 -0
- package/dist/indexer/extractors/graphql.js +88 -0
- package/dist/indexer/extractors/graphql.js.map +1 -0
- package/dist/indexer/extractors/groovy.d.ts +9 -0
- package/dist/indexer/extractors/groovy.d.ts.map +1 -0
- package/dist/indexer/extractors/groovy.js +356 -0
- package/dist/indexer/extractors/groovy.js.map +1 -0
- package/dist/indexer/extractors/java.d.ts +10 -0
- package/dist/indexer/extractors/java.d.ts.map +1 -0
- package/dist/indexer/extractors/java.js +586 -0
- package/dist/indexer/extractors/java.js.map +1 -0
- package/dist/indexer/extractors/kotlin.d.ts +10 -0
- package/dist/indexer/extractors/kotlin.d.ts.map +1 -0
- package/dist/indexer/extractors/kotlin.js +398 -0
- package/dist/indexer/extractors/kotlin.js.map +1 -0
- package/dist/indexer/extractors/node-helpers.d.ts +13 -0
- package/dist/indexer/extractors/node-helpers.d.ts.map +1 -0
- package/dist/indexer/extractors/node-helpers.js +17 -0
- package/dist/indexer/extractors/node-helpers.js.map +1 -0
- package/dist/indexer/extractors/parser-factory.d.ts +4 -0
- package/dist/indexer/extractors/parser-factory.d.ts.map +1 -0
- package/dist/indexer/extractors/parser-factory.js +28 -0
- package/dist/indexer/extractors/parser-factory.js.map +1 -0
- package/dist/indexer/extractors/php.d.ts +17 -0
- package/dist/indexer/extractors/php.d.ts.map +1 -0
- package/dist/indexer/extractors/php.js +363 -0
- package/dist/indexer/extractors/php.js.map +1 -0
- package/dist/indexer/extractors/python.d.ts +14 -0
- package/dist/indexer/extractors/python.d.ts.map +1 -0
- package/dist/indexer/extractors/python.js +449 -0
- package/dist/indexer/extractors/python.js.map +1 -0
- package/dist/indexer/extractors/ruby.d.ts +10 -0
- package/dist/indexer/extractors/ruby.d.ts.map +1 -0
- package/dist/indexer/extractors/ruby.js +996 -0
- package/dist/indexer/extractors/ruby.js.map +1 -0
- package/dist/indexer/extractors/rust.d.ts +9 -0
- package/dist/indexer/extractors/rust.d.ts.map +1 -0
- package/dist/indexer/extractors/rust.js +322 -0
- package/dist/indexer/extractors/rust.js.map +1 -0
- package/dist/indexer/extractors/toml.d.ts +9 -0
- package/dist/indexer/extractors/toml.d.ts.map +1 -0
- package/dist/indexer/extractors/toml.js +84 -0
- package/dist/indexer/extractors/toml.js.map +1 -0
- package/dist/indexer/extractors/xml.d.ts +9 -0
- package/dist/indexer/extractors/xml.d.ts.map +1 -0
- package/dist/indexer/extractors/xml.js +163 -0
- package/dist/indexer/extractors/xml.js.map +1 -0
- package/dist/indexer/extractors/yaml.d.ts +9 -0
- package/dist/indexer/extractors/yaml.d.ts.map +1 -0
- package/dist/indexer/extractors/yaml.js +117 -0
- package/dist/indexer/extractors/yaml.js.map +1 -0
- package/dist/indexer/git.d.ts +19 -0
- package/dist/indexer/git.d.ts.map +1 -0
- package/dist/indexer/git.js +55 -0
- package/dist/indexer/git.js.map +1 -0
- package/dist/indexer/graph.d.ts +7 -0
- package/dist/indexer/graph.d.ts.map +1 -0
- package/dist/indexer/graph.js +20 -0
- package/dist/indexer/graph.js.map +1 -0
- package/dist/indexer/indexed-file.d.ts +15 -0
- package/dist/indexer/indexed-file.d.ts.map +1 -0
- package/dist/indexer/indexed-file.js +50 -0
- package/dist/indexer/indexed-file.js.map +1 -0
- package/dist/indexer/invariants.d.ts +15 -0
- package/dist/indexer/invariants.d.ts.map +1 -0
- package/dist/indexer/invariants.js +96 -0
- package/dist/indexer/invariants.js.map +1 -0
- package/dist/indexer/laravel-synthetic.d.ts +10 -0
- package/dist/indexer/laravel-synthetic.d.ts.map +1 -0
- package/dist/indexer/laravel-synthetic.js +78 -0
- package/dist/indexer/laravel-synthetic.js.map +1 -0
- package/dist/indexer/parser.d.ts +4 -0
- package/dist/indexer/parser.d.ts.map +1 -0
- package/dist/indexer/parser.js +499 -0
- package/dist/indexer/parser.js.map +1 -0
- package/dist/indexer/patch.d.ts +3 -0
- package/dist/indexer/patch.d.ts.map +1 -0
- package/dist/indexer/patch.js +291 -0
- package/dist/indexer/patch.js.map +1 -0
- package/dist/indexer/rails-synthetic.d.ts +11 -0
- package/dist/indexer/rails-synthetic.d.ts.map +1 -0
- package/dist/indexer/rails-synthetic.js +80 -0
- package/dist/indexer/rails-synthetic.js.map +1 -0
- package/dist/indexer/reconcile.d.ts +9 -0
- package/dist/indexer/reconcile.d.ts.map +1 -0
- package/dist/indexer/reconcile.js +96 -0
- package/dist/indexer/reconcile.js.map +1 -0
- package/dist/indexer/resolvers/cpp.d.ts +15 -0
- package/dist/indexer/resolvers/cpp.d.ts.map +1 -0
- package/dist/indexer/resolvers/cpp.js +35 -0
- package/dist/indexer/resolvers/cpp.js.map +1 -0
- package/dist/indexer/resolvers/csharp.d.ts +2 -0
- package/dist/indexer/resolvers/csharp.d.ts.map +1 -0
- package/dist/indexer/resolvers/csharp.js +89 -0
- package/dist/indexer/resolvers/csharp.js.map +1 -0
- package/dist/indexer/resolvers/generic.d.ts +10 -0
- package/dist/indexer/resolvers/generic.d.ts.map +1 -0
- package/dist/indexer/resolvers/generic.js +35 -0
- package/dist/indexer/resolvers/generic.js.map +1 -0
- package/dist/indexer/resolvers/go.d.ts +2 -0
- package/dist/indexer/resolvers/go.d.ts.map +1 -0
- package/dist/indexer/resolvers/go.js +171 -0
- package/dist/indexer/resolvers/go.js.map +1 -0
- package/dist/indexer/resolvers/index.d.ts +26 -0
- package/dist/indexer/resolvers/index.d.ts.map +1 -0
- package/dist/indexer/resolvers/index.js +301 -0
- package/dist/indexer/resolvers/index.js.map +1 -0
- package/dist/indexer/resolvers/java.d.ts +17 -0
- package/dist/indexer/resolvers/java.d.ts.map +1 -0
- package/dist/indexer/resolvers/java.js +104 -0
- package/dist/indexer/resolvers/java.js.map +1 -0
- package/dist/indexer/resolvers/php.d.ts +2 -0
- package/dist/indexer/resolvers/php.d.ts.map +1 -0
- package/dist/indexer/resolvers/php.js +108 -0
- package/dist/indexer/resolvers/php.js.map +1 -0
- package/dist/indexer/resolvers/python.d.ts +17 -0
- package/dist/indexer/resolvers/python.d.ts.map +1 -0
- package/dist/indexer/resolvers/python.js +63 -0
- package/dist/indexer/resolvers/python.js.map +1 -0
- package/dist/indexer/resolvers/ruby.d.ts +13 -0
- package/dist/indexer/resolvers/ruby.d.ts.map +1 -0
- package/dist/indexer/resolvers/ruby.js +199 -0
- package/dist/indexer/resolvers/ruby.js.map +1 -0
- package/dist/indexer/resolvers/rust.d.ts +12 -0
- package/dist/indexer/resolvers/rust.d.ts.map +1 -0
- package/dist/indexer/resolvers/rust.js +61 -0
- package/dist/indexer/resolvers/rust.js.map +1 -0
- package/dist/indexer/resolvers/shared.d.ts +18 -0
- package/dist/indexer/resolvers/shared.d.ts.map +1 -0
- package/dist/indexer/resolvers/shared.js +71 -0
- package/dist/indexer/resolvers/shared.js.map +1 -0
- package/dist/indexer/rust-workspace.d.ts +25 -0
- package/dist/indexer/rust-workspace.d.ts.map +1 -0
- package/dist/indexer/rust-workspace.js +155 -0
- package/dist/indexer/rust-workspace.js.map +1 -0
- package/dist/indexer/symbol-edges.d.ts +19 -0
- package/dist/indexer/symbol-edges.d.ts.map +1 -0
- package/dist/indexer/symbol-edges.js +117 -0
- package/dist/indexer/symbol-edges.js.map +1 -0
- package/dist/indexer/tokenize.d.ts +26 -0
- package/dist/indexer/tokenize.d.ts.map +1 -0
- package/dist/indexer/tokenize.js +200 -0
- package/dist/indexer/tokenize.js.map +1 -0
- package/dist/indexer/ts-parser.d.ts +10 -0
- package/dist/indexer/ts-parser.d.ts.map +1 -0
- package/dist/indexer/ts-parser.js +605 -0
- package/dist/indexer/ts-parser.js.map +1 -0
- package/dist/indexer/walker.d.ts +9 -0
- package/dist/indexer/walker.d.ts.map +1 -0
- package/dist/indexer/walker.js +91 -0
- package/dist/indexer/walker.js.map +1 -0
- package/dist/init.d.ts +111 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +787 -0
- package/dist/init.js.map +1 -0
- package/dist/kb/cli.d.ts +2 -0
- package/dist/kb/cli.d.ts.map +1 -0
- package/dist/kb/cli.js +377 -0
- package/dist/kb/cli.js.map +1 -0
- package/dist/kb/commit.d.ts +6 -0
- package/dist/kb/commit.d.ts.map +1 -0
- package/dist/kb/commit.js +84 -0
- package/dist/kb/commit.js.map +1 -0
- package/dist/kb/fold.d.ts +42 -0
- package/dist/kb/fold.d.ts.map +1 -0
- package/dist/kb/fold.js +285 -0
- package/dist/kb/fold.js.map +1 -0
- package/dist/kb/freshness.d.ts +9 -0
- package/dist/kb/freshness.d.ts.map +1 -0
- package/dist/kb/freshness.js +52 -0
- package/dist/kb/freshness.js.map +1 -0
- package/dist/kb/git.d.ts +4 -0
- package/dist/kb/git.d.ts.map +1 -0
- package/dist/kb/git.js +28 -0
- package/dist/kb/git.js.map +1 -0
- package/dist/kb/ids.d.ts +8 -0
- package/dist/kb/ids.d.ts.map +1 -0
- package/dist/kb/ids.js +42 -0
- package/dist/kb/ids.js.map +1 -0
- package/dist/kb/lint.d.ts +23 -0
- package/dist/kb/lint.d.ts.map +1 -0
- package/dist/kb/lint.js +102 -0
- package/dist/kb/lint.js.map +1 -0
- package/dist/kb/lookup.d.ts +55 -0
- package/dist/kb/lookup.d.ts.map +1 -0
- package/dist/kb/lookup.js +92 -0
- package/dist/kb/lookup.js.map +1 -0
- package/dist/kb/notes-index.d.ts +31 -0
- package/dist/kb/notes-index.d.ts.map +1 -0
- package/dist/kb/notes-index.js +0 -0
- package/dist/kb/notes-index.js.map +1 -0
- package/dist/kb/raw-log.d.ts +34 -0
- package/dist/kb/raw-log.d.ts.map +1 -0
- package/dist/kb/raw-log.js +106 -0
- package/dist/kb/raw-log.js.map +1 -0
- package/dist/kb/render.d.ts +17 -0
- package/dist/kb/render.d.ts.map +1 -0
- package/dist/kb/render.js +101 -0
- package/dist/kb/render.js.map +1 -0
- package/dist/kb/search.d.ts +110 -0
- package/dist/kb/search.d.ts.map +1 -0
- package/dist/kb/search.js +453 -0
- package/dist/kb/search.js.map +1 -0
- package/dist/kb/store.d.ts +35 -0
- package/dist/kb/store.d.ts.map +1 -0
- package/dist/kb/store.js +160 -0
- package/dist/kb/store.js.map +1 -0
- package/dist/kb/types.d.ts +142 -0
- package/dist/kb/types.d.ts.map +1 -0
- package/dist/kb/types.js +13 -0
- package/dist/kb/types.js.map +1 -0
- package/dist/kb/view-template.d.ts +8 -0
- package/dist/kb/view-template.d.ts.map +1 -0
- package/dist/kb/view-template.js +8 -0
- package/dist/kb/view-template.js.map +1 -0
- package/dist/kb/view.d.ts +42 -0
- package/dist/kb/view.d.ts.map +1 -0
- package/dist/kb/view.js +118 -0
- package/dist/kb/view.js.map +1 -0
- package/dist/kb/write.d.ts +72 -0
- package/dist/kb/write.d.ts.map +1 -0
- package/dist/kb/write.js +345 -0
- package/dist/kb/write.js.map +1 -0
- package/dist/keeper-state.d.ts +29 -0
- package/dist/keeper-state.d.ts.map +1 -0
- package/dist/keeper-state.js +89 -0
- package/dist/keeper-state.js.map +1 -0
- package/dist/keeper.d.ts +23 -0
- package/dist/keeper.d.ts.map +1 -0
- package/dist/keeper.js +105 -0
- package/dist/keeper.js.map +1 -0
- package/dist/migrate.d.ts +9 -0
- package/dist/migrate.d.ts.map +1 -0
- package/dist/migrate.js +102 -0
- package/dist/migrate.js.map +1 -0
- package/dist/restart.d.ts +15 -0
- package/dist/restart.d.ts.map +1 -0
- package/dist/restart.js +48 -0
- package/dist/restart.js.map +1 -0
- package/dist/server/find.d.ts +39 -0
- package/dist/server/find.d.ts.map +1 -0
- package/dist/server/find.js +979 -0
- package/dist/server/find.js.map +1 -0
- package/dist/server/mcp.d.ts +117 -0
- package/dist/server/mcp.d.ts.map +1 -0
- package/dist/server/mcp.js +301 -0
- package/dist/server/mcp.js.map +1 -0
- package/dist/server/searcher.d.ts +14 -0
- package/dist/server/searcher.d.ts.map +1 -0
- package/dist/server/searcher.js +146 -0
- package/dist/server/searcher.js.map +1 -0
- package/dist/server/tools.d.ts +17 -0
- package/dist/server/tools.d.ts.map +1 -0
- package/dist/server/tools.js +875 -0
- package/dist/server/tools.js.map +1 -0
- package/dist/status.d.ts +12 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +157 -0
- package/dist/status.js.map +1 -0
- package/dist/types.d.ts +138 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/watcher.d.ts +11 -0
- package/dist/watcher.d.ts.map +1 -0
- package/dist/watcher.js +67 -0
- package/dist/watcher.js.map +1 -0
- package/hooks/canonical-find-key.mjs +68 -0
- package/hooks/codex-find-nudge.mjs +15 -0
- package/hooks/codex-find-preguard.mjs +14 -0
- package/hooks/codex-kb-elicit.mjs +329 -0
- package/hooks/codex-kb-recall.mjs +151 -0
- package/hooks/codex-nudge-handler.mjs +370 -0
- package/hooks/codex-preguard-handler.mjs +75 -0
- package/hooks/codex-run-hook.mjs +132 -0
- package/hooks/coldstart-call.mjs +58 -0
- package/hooks/cursor-find-nudge.mjs +15 -0
- package/hooks/cursor-find-preguard.mjs +14 -0
- package/hooks/cursor-input.mjs +72 -0
- package/hooks/cursor-kb-elicit.mjs +335 -0
- package/hooks/cursor-kb-recall.mjs +138 -0
- package/hooks/cursor-nudge-handler.mjs +33 -0
- package/hooks/cursor-preguard-handler.mjs +39 -0
- package/hooks/cursor-run-hook.mjs +129 -0
- package/hooks/find-nudge.mjs +15 -0
- package/hooks/find-preguard.mjs +14 -0
- package/hooks/kb-elicit.mjs +334 -0
- package/hooks/kb-recall.mjs +151 -0
- package/hooks/nudge-handler.mjs +370 -0
- package/hooks/preguard-handler.mjs +75 -0
- package/hooks/run-hook.mjs +132 -0
- package/package.json +69 -0
- package/templates/coldstart.cli.md +60 -0
- package/templates/coldstart.mcp.md +59 -0
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import { readFile, readdir } from 'node:fs/promises';
|
|
2
|
+
import { join, resolve, dirname } from 'node:path';
|
|
3
|
+
import { DEFAULT_EXCLUDES } from '../../constants.js';
|
|
4
|
+
import { resolveGeneric } from './generic.js';
|
|
5
|
+
import { resolveJava, resolveKotlin } from './java.js';
|
|
6
|
+
import { resolveRuby } from './ruby.js';
|
|
7
|
+
import { resolveGo } from './go.js';
|
|
8
|
+
import { resolveRust } from './rust.js';
|
|
9
|
+
import { resolvePython } from './python.js';
|
|
10
|
+
import { resolvePHP } from './php.js';
|
|
11
|
+
import { resolveCpp } from './cpp.js';
|
|
12
|
+
import { resolveCSharp } from './csharp.js';
|
|
13
|
+
async function loadTsConfigFile(configPath, visited) {
|
|
14
|
+
const result = { paths: {} };
|
|
15
|
+
if (visited.has(configPath))
|
|
16
|
+
return result;
|
|
17
|
+
visited.add(configPath);
|
|
18
|
+
try {
|
|
19
|
+
const raw = await readFile(configPath, 'utf-8');
|
|
20
|
+
const stripped = raw.replace(/\/\/[^\n]*/g, '').replace(/\/\*[\s\S]*?\*\//g, '');
|
|
21
|
+
const cfg = JSON.parse(stripped);
|
|
22
|
+
const configDir = dirname(configPath);
|
|
23
|
+
// Follow extends chain first — child config overrides parent
|
|
24
|
+
const extendsField = cfg.extends;
|
|
25
|
+
if (extendsField) {
|
|
26
|
+
const extendsList = Array.isArray(extendsField) ? extendsField : [extendsField];
|
|
27
|
+
for (const ext of extendsList) {
|
|
28
|
+
const withJson = ext.endsWith('.json') ? ext : ext + '.json';
|
|
29
|
+
const extPath = resolve(configDir, withJson);
|
|
30
|
+
try {
|
|
31
|
+
const parent = await loadTsConfigFile(extPath, visited);
|
|
32
|
+
for (const [k, v] of Object.entries(parent.paths))
|
|
33
|
+
result.paths[k] = v;
|
|
34
|
+
if (parent.baseUrl)
|
|
35
|
+
result.baseUrl = parent.baseUrl;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// ignore missing or malformed extended config
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Child overrides parent
|
|
43
|
+
const compOpts = cfg.compilerOptions;
|
|
44
|
+
if (compOpts?.baseUrl)
|
|
45
|
+
result.baseUrl = resolve(configDir, compOpts.baseUrl);
|
|
46
|
+
if (compOpts?.paths) {
|
|
47
|
+
for (const [alias, targets] of Object.entries(compOpts.paths)) {
|
|
48
|
+
result.paths[alias] = targets;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// ignore missing or malformed tsconfig
|
|
54
|
+
}
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
async function loadTsConfigPaths(rootDir) {
|
|
58
|
+
const aliasMap = new Map();
|
|
59
|
+
// Discover every tsconfig.json/jsconfig.json under rootDir, not just the
|
|
60
|
+
// top-level one — repos often nest the actual project (e.g. <repo>/<clone>/tsconfig.json).
|
|
61
|
+
// For each tsconfig, paths resolve relative to its own dir (or its explicit baseUrl).
|
|
62
|
+
const tscPaths = await findConfigFiles(rootDir, new Set(['tsconfig.json', 'jsconfig.json']));
|
|
63
|
+
for (const tscPath of tscPaths) {
|
|
64
|
+
try {
|
|
65
|
+
const resolved = await loadTsConfigFile(tscPath, new Set());
|
|
66
|
+
if (!Object.keys(resolved.paths).length)
|
|
67
|
+
continue;
|
|
68
|
+
const tsconfigDir = dirname(tscPath);
|
|
69
|
+
const baseDir = resolved.baseUrl ?? tsconfigDir;
|
|
70
|
+
for (const [alias, targets] of Object.entries(resolved.paths)) {
|
|
71
|
+
const aliasKey = alias.replace(/\/\*$/, '');
|
|
72
|
+
const resolvedTargets = targets.map(t => resolve(baseDir, t.replace(/\/\*$/, '')));
|
|
73
|
+
const existing = aliasMap.get(aliasKey);
|
|
74
|
+
// Merge — multiple tsconfigs may define the same alias pointing into
|
|
75
|
+
// their own clone. Resolution tries each target until one matches.
|
|
76
|
+
aliasMap.set(aliasKey, existing ? [...existing, ...resolvedTargets] : resolvedTargets);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// ignore
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return aliasMap;
|
|
84
|
+
}
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
// Workspace package discovery (npm/yarn/pnpm)
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
async function expandWorkspacePattern(rootDir, pattern) {
|
|
89
|
+
if (pattern.startsWith('!'))
|
|
90
|
+
return []; // negation patterns
|
|
91
|
+
if (!pattern.includes('*'))
|
|
92
|
+
return [join(rootDir, pattern)]; // literal path
|
|
93
|
+
// Patterns can have a wildcard in any segment: "shared/*", "*-app", "packages/*/lib".
|
|
94
|
+
// Walk segment-by-segment, expanding `*` segments by listing matching subdirs.
|
|
95
|
+
const segments = pattern.split('/');
|
|
96
|
+
let dirs = [rootDir];
|
|
97
|
+
for (const seg of segments) {
|
|
98
|
+
if (!seg.includes('*')) {
|
|
99
|
+
dirs = dirs.map(d => join(d, seg));
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
// Convert glob segment to a regex (only `*` is supported here)
|
|
103
|
+
const regex = new RegExp('^' + seg.split('*').map(escapeRegex).join('.*') + '$');
|
|
104
|
+
const next = [];
|
|
105
|
+
for (const d of dirs) {
|
|
106
|
+
try {
|
|
107
|
+
const entries = await readdir(d, { withFileTypes: true });
|
|
108
|
+
for (const e of entries) {
|
|
109
|
+
if (e.isDirectory() && regex.test(e.name))
|
|
110
|
+
next.push(join(d, e.name));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch { /* skip */ }
|
|
114
|
+
}
|
|
115
|
+
dirs = next;
|
|
116
|
+
}
|
|
117
|
+
return dirs;
|
|
118
|
+
}
|
|
119
|
+
function escapeRegex(s) {
|
|
120
|
+
return s.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Walk rootDir looking for files whose basenames are in the `targets` set.
|
|
124
|
+
* Skips DEFAULT_EXCLUDES, hidden dirs, and symlinks. Bounded depth as a safety rail.
|
|
125
|
+
*/
|
|
126
|
+
async function findConfigFiles(rootDir, targets, maxDepth = 8) {
|
|
127
|
+
const found = [];
|
|
128
|
+
async function walk(dir, depth) {
|
|
129
|
+
if (depth > maxDepth)
|
|
130
|
+
return;
|
|
131
|
+
let entries;
|
|
132
|
+
try {
|
|
133
|
+
entries = await readdir(dir, { withFileTypes: true });
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
for (const entry of entries) {
|
|
139
|
+
if (entry.isSymbolicLink())
|
|
140
|
+
continue;
|
|
141
|
+
const fullPath = join(dir, entry.name);
|
|
142
|
+
if (entry.isDirectory()) {
|
|
143
|
+
if (entry.name.startsWith('.'))
|
|
144
|
+
continue;
|
|
145
|
+
if (DEFAULT_EXCLUDES.has(entry.name))
|
|
146
|
+
continue;
|
|
147
|
+
await walk(fullPath, depth + 1);
|
|
148
|
+
}
|
|
149
|
+
else if (entry.isFile() && targets.has(entry.name)) {
|
|
150
|
+
found.push(fullPath);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
await walk(rootDir, 0);
|
|
155
|
+
return found;
|
|
156
|
+
}
|
|
157
|
+
async function loadWorkspacePackages(rootDir) {
|
|
158
|
+
const packageMap = new Map();
|
|
159
|
+
// Find every package.json and pnpm-workspace.yaml under rootDir.
|
|
160
|
+
// Each one with a workspaces declaration acts as a workspace root for its own subtree.
|
|
161
|
+
// This handles monorepos where rootDir isn't the workspace root (e.g. user runs on
|
|
162
|
+
// a parent directory containing `app/package.json` but no top-level package.json).
|
|
163
|
+
const configPaths = await findConfigFiles(rootDir, new Set(['package.json', 'pnpm-workspace.yaml']));
|
|
164
|
+
// (workspaceRootDir, patterns[]) pairs — patterns are relative to workspaceRootDir
|
|
165
|
+
const decls = [];
|
|
166
|
+
for (const path of configPaths) {
|
|
167
|
+
const baseName = path.slice(path.lastIndexOf('/') + 1);
|
|
168
|
+
if (baseName === 'package.json') {
|
|
169
|
+
try {
|
|
170
|
+
const raw = await readFile(path, 'utf-8');
|
|
171
|
+
const pkg = JSON.parse(raw);
|
|
172
|
+
const ws = pkg.workspaces;
|
|
173
|
+
const patterns = [];
|
|
174
|
+
if (Array.isArray(ws))
|
|
175
|
+
patterns.push(...ws);
|
|
176
|
+
else if (Array.isArray(ws?.packages))
|
|
177
|
+
patterns.push(...ws.packages); // yarn classic
|
|
178
|
+
if (patterns.length > 0)
|
|
179
|
+
decls.push({ dir: dirname(path), patterns });
|
|
180
|
+
}
|
|
181
|
+
catch { /* malformed package.json — skip */ }
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
// pnpm-workspace.yaml
|
|
185
|
+
try {
|
|
186
|
+
const yaml = await readFile(path, 'utf-8');
|
|
187
|
+
const patterns = [];
|
|
188
|
+
for (const line of yaml.split('\n')) {
|
|
189
|
+
const m = line.match(/^\s+-\s+['"]?([^'"#\s]+)['"]?/);
|
|
190
|
+
if (m && !m[1].startsWith('!'))
|
|
191
|
+
patterns.push(m[1]);
|
|
192
|
+
}
|
|
193
|
+
if (patterns.length > 0)
|
|
194
|
+
decls.push({ dir: dirname(path), patterns });
|
|
195
|
+
}
|
|
196
|
+
catch { /* skip */ }
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
for (const { dir, patterns } of decls) {
|
|
200
|
+
for (const pattern of patterns) {
|
|
201
|
+
const memberDirs = await expandWorkspacePattern(dir, pattern);
|
|
202
|
+
for (const memberDir of memberDirs) {
|
|
203
|
+
try {
|
|
204
|
+
const raw = await readFile(join(memberDir, 'package.json'), 'utf-8');
|
|
205
|
+
const pkg = JSON.parse(raw);
|
|
206
|
+
if (typeof pkg.name === 'string')
|
|
207
|
+
packageMap.set(pkg.name, [memberDir]);
|
|
208
|
+
}
|
|
209
|
+
catch { /* no package.json in this workspace dir */ }
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return packageMap;
|
|
214
|
+
}
|
|
215
|
+
async function buildAliasMap(rootDir) {
|
|
216
|
+
const [workspaceMap, tsconfigMap] = await Promise.all([
|
|
217
|
+
loadWorkspacePackages(rootDir),
|
|
218
|
+
loadTsConfigPaths(rootDir),
|
|
219
|
+
]);
|
|
220
|
+
// Merge: tsconfig entries override workspace entries (more explicit)
|
|
221
|
+
return new Map([...workspaceMap, ...tsconfigMap]);
|
|
222
|
+
}
|
|
223
|
+
function getResolver(language) {
|
|
224
|
+
switch (language) {
|
|
225
|
+
case 'java': return resolveJava;
|
|
226
|
+
case 'kotlin': return resolveKotlin;
|
|
227
|
+
case 'ruby': return resolveRuby;
|
|
228
|
+
case 'go': return resolveGo;
|
|
229
|
+
case 'rust': return resolveRust;
|
|
230
|
+
case 'python': return resolvePython;
|
|
231
|
+
case 'php': return resolvePHP;
|
|
232
|
+
case 'cpp': return resolveCpp;
|
|
233
|
+
case 'csharp': return resolveCSharp;
|
|
234
|
+
default: return resolveGeneric;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Resolve imports for a subset of files against an explicit fileIdSet.
|
|
239
|
+
* Used by the incremental patch to resolve only changed files while
|
|
240
|
+
* still being able to resolve against the full index's known file IDs.
|
|
241
|
+
*/
|
|
242
|
+
export async function resolveImportsForFiles(files, fileIdSet, rootDir,
|
|
243
|
+
// JVM (Java/Kotlin) FQCN resolution anchors on each file's declared `package`
|
|
244
|
+
// rather than guessing it from the directory layout. Built once from the FULL
|
|
245
|
+
// file set by the caller (so a changed file can resolve against unchanged ones
|
|
246
|
+
// in patch mode); files without a package fall back to the path-regex.
|
|
247
|
+
pkgById) {
|
|
248
|
+
const aliasMap = await buildAliasMap(rootDir);
|
|
249
|
+
const edges = [];
|
|
250
|
+
const unresolved = [];
|
|
251
|
+
const BATCH = 50;
|
|
252
|
+
for (let i = 0; i < files.length; i += BATCH) {
|
|
253
|
+
const batch = files.slice(i, i + BATCH);
|
|
254
|
+
await Promise.all(batch.map(async (file) => {
|
|
255
|
+
const resolver = getResolver(file.language);
|
|
256
|
+
const resolvedTargets = new Set();
|
|
257
|
+
for (const specifier of file.imports) {
|
|
258
|
+
const resolved = await resolver(specifier, file.path, fileIdSet, rootDir, aliasMap, pkgById);
|
|
259
|
+
if (resolved && resolved !== file.id) {
|
|
260
|
+
edges.push({ from: file.id, to: resolved, type: 'import', specifier });
|
|
261
|
+
resolvedTargets.add(resolved);
|
|
262
|
+
}
|
|
263
|
+
else if (!resolved) {
|
|
264
|
+
unresolved.push({ from: file.id, specifier });
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
// Bonus candidates (e.g. Python `from pkg import sub` submodule probes):
|
|
268
|
+
// add an edge if the specifier resolves to a real file, but a miss is
|
|
269
|
+
// NOT counted as unresolved — most are symbol imports, not files.
|
|
270
|
+
for (const specifier of file.submoduleImportCandidates ?? []) {
|
|
271
|
+
const resolved = await resolver(specifier, file.path, fileIdSet, rootDir, aliasMap, pkgById);
|
|
272
|
+
if (resolved && resolved !== file.id && !resolvedTargets.has(resolved)) {
|
|
273
|
+
edges.push({ from: file.id, to: resolved, type: 'import', specifier });
|
|
274
|
+
resolvedTargets.add(resolved);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}));
|
|
278
|
+
}
|
|
279
|
+
return { edges, unresolved };
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Resolve imports for all files in a project. Builds fileIdSet from the
|
|
283
|
+
* passed files array. For incremental patching, use resolveImportsForFiles instead.
|
|
284
|
+
*/
|
|
285
|
+
export async function resolveImports(files, rootDir) {
|
|
286
|
+
const fileIdSet = new Set(files.map(f => f.id));
|
|
287
|
+
return resolveImportsForFiles(files, fileIdSet, rootDir, buildPackageIndex(files));
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* fileId → declared package, for the JVM resolver. Built from the FULL file set
|
|
291
|
+
* (only JVM files carry `packageName`) so a file can be FQCN-resolved by its
|
|
292
|
+
* `package` line regardless of where it sits on disk.
|
|
293
|
+
*/
|
|
294
|
+
export function buildPackageIndex(files) {
|
|
295
|
+
const m = new Map();
|
|
296
|
+
for (const f of files)
|
|
297
|
+
if (f.packageName)
|
|
298
|
+
m.set(f.id, f.packageName);
|
|
299
|
+
return m;
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/indexer/resolvers/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JVM resolver: handles Java + Kotlin (same import syntax, same package layout).
|
|
3
|
+
*
|
|
4
|
+
* Imports like `com.example.user.UserRepository` map to a file path. We build
|
|
5
|
+
* a one-time fully-qualified-class-name index from fileIdSet so each lookup is
|
|
6
|
+
* O(1):
|
|
7
|
+
* <source-root>/com/example/user/UserRepository.java → "com.example.user.UserRepository"
|
|
8
|
+
*
|
|
9
|
+
* Source roots are discovered by regex on each .java/.kt path. The pattern
|
|
10
|
+
* covers Maven (`src/main/java/`), Gradle, and Kotlin Multiplatform source
|
|
11
|
+
* sets (`src/<set>/{java,kotlin}/`).
|
|
12
|
+
*
|
|
13
|
+
* Wildcard imports (com.foo.*) and Kotlin star imports return null.
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolveJava(specifier: string, _fromFile: string, fileIdSet: Set<string>, _rootDir: string, _aliasMap: Map<string, string[]>, pkgById?: Map<string, string>): Promise<string | null>;
|
|
16
|
+
export declare const resolveKotlin: typeof resolveJava;
|
|
17
|
+
//# sourceMappingURL=java.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"java.d.ts","sourceRoot":"","sources":["../../../src/indexer/resolvers/java.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA0EH,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAChC,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiBxB;AAGD,eAAO,MAAM,aAAa,oBAAc,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JVM resolver: handles Java + Kotlin (same import syntax, same package layout).
|
|
3
|
+
*
|
|
4
|
+
* Imports like `com.example.user.UserRepository` map to a file path. We build
|
|
5
|
+
* a one-time fully-qualified-class-name index from fileIdSet so each lookup is
|
|
6
|
+
* O(1):
|
|
7
|
+
* <source-root>/com/example/user/UserRepository.java → "com.example.user.UserRepository"
|
|
8
|
+
*
|
|
9
|
+
* Source roots are discovered by regex on each .java/.kt path. The pattern
|
|
10
|
+
* covers Maven (`src/main/java/`), Gradle, and Kotlin Multiplatform source
|
|
11
|
+
* sets (`src/<set>/{java,kotlin}/`).
|
|
12
|
+
*
|
|
13
|
+
* Wildcard imports (com.foo.*) and Kotlin star imports return null.
|
|
14
|
+
*/
|
|
15
|
+
const SRC_LANG_RE = /(^|\/)src\/[^/]+\/(?:java|kotlin|groovy)\//;
|
|
16
|
+
const EXPLICIT_MARKERS = ['/target/generated-sources/', '/build/generated-sources/'];
|
|
17
|
+
const JVM_EXTENSIONS = ['.java', '.kt'];
|
|
18
|
+
// Memoized on (fileIdSet identity, pkgById identity). pkgById changes per resolve
|
|
19
|
+
// cycle, so a stale path-only index from a prior cycle can't leak in.
|
|
20
|
+
const indexCache = new WeakMap();
|
|
21
|
+
/**
|
|
22
|
+
* Build the FQCN→fileId map.
|
|
23
|
+
*
|
|
24
|
+
* Preferred keying is the file's *declared package* (`pkgById`): FQCN =
|
|
25
|
+
* `<package>.<filename-stem>`. This is layout-independent — it resolves the same
|
|
26
|
+
* whether the repo uses Maven (`src/main/java/com/foo/Bar.java`) or any other tree
|
|
27
|
+
* (e.g. JMRI's `java/src/jmri/Bar.java`), because it reads the `package` line the
|
|
28
|
+
* parser already extracted instead of guessing the package from the directory path.
|
|
29
|
+
*
|
|
30
|
+
* Files without a known package (default package, parse miss, or a non-JVM call
|
|
31
|
+
* site) fall back to the source-root path regex. On Maven layouts the two agree
|
|
32
|
+
* exactly, so the fallback never regresses a conventional repo.
|
|
33
|
+
*/
|
|
34
|
+
function buildFqcnIndex(fileIdSet, pkgById) {
|
|
35
|
+
const cached = indexCache.get(fileIdSet);
|
|
36
|
+
if (cached && cached.pkgById === pkgById)
|
|
37
|
+
return cached.idx;
|
|
38
|
+
const byFqcn = new Map();
|
|
39
|
+
for (const id of fileIdSet) {
|
|
40
|
+
let ext;
|
|
41
|
+
for (const e of JVM_EXTENSIONS) {
|
|
42
|
+
if (id.endsWith(e)) {
|
|
43
|
+
ext = e;
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (!ext)
|
|
48
|
+
continue;
|
|
49
|
+
// Package-anchored (layout-independent): FQCN = <declared package>.<stem>.
|
|
50
|
+
const pkg = pkgById?.get(id);
|
|
51
|
+
if (pkg) {
|
|
52
|
+
const base = id.slice(id.lastIndexOf('/') + 1, id.length - ext.length);
|
|
53
|
+
const fqcn = `${pkg}.${base}`;
|
|
54
|
+
if (!byFqcn.has(fqcn))
|
|
55
|
+
byFqcn.set(fqcn, id);
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
// Fallback: derive the package from the source-root path convention.
|
|
59
|
+
let pkgStart = null;
|
|
60
|
+
const m = SRC_LANG_RE.exec(id);
|
|
61
|
+
if (m) {
|
|
62
|
+
pkgStart = m.index + m[0].length;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
for (const marker of EXPLICIT_MARKERS) {
|
|
66
|
+
const idx = id.indexOf(marker);
|
|
67
|
+
if (idx !== -1) {
|
|
68
|
+
pkgStart = idx + marker.length;
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Files outside any recognized source root: derive FQCN from the full path.
|
|
74
|
+
// First-write-wins: don't overwrite a structured-source-root entry with a
|
|
75
|
+
// less-structured one.
|
|
76
|
+
const stem = id.slice(pkgStart ?? 0, id.length - ext.length);
|
|
77
|
+
const fqcn = stem.replace(/\//g, '.');
|
|
78
|
+
if (!byFqcn.has(fqcn))
|
|
79
|
+
byFqcn.set(fqcn, id);
|
|
80
|
+
}
|
|
81
|
+
const result = { byFqcn };
|
|
82
|
+
indexCache.set(fileIdSet, { idx: result, pkgById });
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
export async function resolveJava(specifier, _fromFile, fileIdSet, _rootDir, _aliasMap, pkgById) {
|
|
86
|
+
if (specifier.endsWith('.*'))
|
|
87
|
+
return null;
|
|
88
|
+
const { byFqcn } = buildFqcnIndex(fileIdSet, pkgById);
|
|
89
|
+
const direct = byFqcn.get(specifier);
|
|
90
|
+
if (direct)
|
|
91
|
+
return direct;
|
|
92
|
+
// Static imports (org.foo.Bar.CONSTANT) and inner classes (com.foo.Outer.Inner)
|
|
93
|
+
// — strip the last segment and retry once.
|
|
94
|
+
const lastDot = specifier.lastIndexOf('.');
|
|
95
|
+
if (lastDot !== -1) {
|
|
96
|
+
const trimmed = byFqcn.get(specifier.slice(0, lastDot));
|
|
97
|
+
if (trimmed)
|
|
98
|
+
return trimmed;
|
|
99
|
+
}
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
// Kotlin uses the same package/import semantics as Java; reuse the resolver.
|
|
103
|
+
export const resolveKotlin = resolveJava;
|
|
104
|
+
//# sourceMappingURL=java.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"java.js","sourceRoot":"","sources":["../../../src/indexer/resolvers/java.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"php.d.ts","sourceRoot":"","sources":["../../../src/indexer/resolvers/php.ts"],"names":[],"mappings":"AAiGA,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EACtB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgCxB"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { dirname, join, resolve } from 'node:path';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { tryResolveBase, MAX_DIR_WALK_DEPTH } from './shared.js';
|
|
4
|
+
// Caches keyed by the discovered composer.json directory.
|
|
5
|
+
// Each PSR-4 prefix may map to multiple dirs (composer.json supports arrays).
|
|
6
|
+
const psr4ByDir = new Map();
|
|
7
|
+
// Nearest-to-farthest list of composer.json directories ancestors of a startDir.
|
|
8
|
+
// Sub-component composer.jsons (e.g. Laravel's per-Illuminate-component setup)
|
|
9
|
+
// only declare their own namespace; we fall through to ancestors for the rest.
|
|
10
|
+
const startDirToComposerDirs = new Map();
|
|
11
|
+
async function findComposerDirs(startDir) {
|
|
12
|
+
const cached = startDirToComposerDirs.get(startDir);
|
|
13
|
+
if (cached)
|
|
14
|
+
return cached;
|
|
15
|
+
const found = [];
|
|
16
|
+
let dir = startDir;
|
|
17
|
+
for (let i = 0; i < MAX_DIR_WALK_DEPTH; i++) {
|
|
18
|
+
try {
|
|
19
|
+
await readFile(join(dir, 'composer.json'), 'utf-8');
|
|
20
|
+
found.push(dir);
|
|
21
|
+
}
|
|
22
|
+
catch { /* not here */ }
|
|
23
|
+
const parent = dirname(dir);
|
|
24
|
+
if (parent === dir)
|
|
25
|
+
break;
|
|
26
|
+
dir = parent;
|
|
27
|
+
}
|
|
28
|
+
startDirToComposerDirs.set(startDir, found);
|
|
29
|
+
return found;
|
|
30
|
+
}
|
|
31
|
+
function applyPsr4Section(section, baseDir, map) {
|
|
32
|
+
const psr4 = section?.['psr-4'];
|
|
33
|
+
if (!psr4)
|
|
34
|
+
return;
|
|
35
|
+
for (const [ns, dirs] of Object.entries(psr4)) {
|
|
36
|
+
const nsKey = ns.replace(/\\+$/, '');
|
|
37
|
+
const dirList = Array.isArray(dirs) ? dirs : (typeof dirs === 'string' ? [dirs] : []);
|
|
38
|
+
const resolved = dirList.map(d => resolve(baseDir, d));
|
|
39
|
+
const existing = map.get(nsKey);
|
|
40
|
+
map.set(nsKey, existing ? [...existing, ...resolved] : resolved);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async function loadPsr4MapForDir(composerDir) {
|
|
44
|
+
if (psr4ByDir.has(composerDir))
|
|
45
|
+
return psr4ByDir.get(composerDir);
|
|
46
|
+
try {
|
|
47
|
+
const raw = await readFile(join(composerDir, 'composer.json'), 'utf-8');
|
|
48
|
+
const cfg = JSON.parse(raw);
|
|
49
|
+
const map = new Map();
|
|
50
|
+
applyPsr4Section(cfg.autoload, composerDir, map);
|
|
51
|
+
applyPsr4Section(cfg['autoload-dev'], composerDir, map);
|
|
52
|
+
if (Array.isArray(cfg.repositories)) {
|
|
53
|
+
for (const repo of cfg.repositories) {
|
|
54
|
+
if (repo.type !== 'path' || !repo.url || repo.url.includes('*'))
|
|
55
|
+
continue;
|
|
56
|
+
const repoDir = resolve(composerDir, repo.url);
|
|
57
|
+
try {
|
|
58
|
+
const subRaw = await readFile(join(repoDir, 'composer.json'), 'utf-8');
|
|
59
|
+
const subCfg = JSON.parse(subRaw);
|
|
60
|
+
applyPsr4Section(subCfg.autoload, repoDir, map);
|
|
61
|
+
applyPsr4Section(subCfg['autoload-dev'], repoDir, map);
|
|
62
|
+
}
|
|
63
|
+
catch { /* skip */ }
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
psr4ByDir.set(composerDir, map);
|
|
67
|
+
return map;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
psr4ByDir.set(composerDir, null);
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export async function resolvePHP(specifier, fromFile, fileIdSet, rootDir, _aliasMap) {
|
|
75
|
+
// Relative path includes (require/include with ./ or ../)
|
|
76
|
+
if (specifier.startsWith('.') || specifier.startsWith('/')) {
|
|
77
|
+
const base = resolve(dirname(fromFile), specifier);
|
|
78
|
+
return tryResolveBase(base, fileIdSet, rootDir);
|
|
79
|
+
}
|
|
80
|
+
// PSR-4 namespace import: walk up from file dir collecting all ancestor
|
|
81
|
+
// composer.json mappings. Try them nearest-first; for a given map, longest
|
|
82
|
+
// prefix wins but fall through to shorter prefixes if the longer one's dirs
|
|
83
|
+
// don't yield a file.
|
|
84
|
+
const composerDirs = await findComposerDirs(dirname(fromFile));
|
|
85
|
+
if (composerDirs.length === 0)
|
|
86
|
+
return null;
|
|
87
|
+
const normalised = specifier.replace(/\\/g, '/');
|
|
88
|
+
for (const composerDir of composerDirs) {
|
|
89
|
+
const psr4 = await loadPsr4MapForDir(composerDir);
|
|
90
|
+
if (!psr4)
|
|
91
|
+
continue;
|
|
92
|
+
const entries = [...psr4.entries()].sort((a, b) => b[0].length - a[0].length);
|
|
93
|
+
for (const [nsKey, dirs] of entries) {
|
|
94
|
+
const nsSlash = nsKey.replace(/\\/g, '/');
|
|
95
|
+
if (normalised !== nsSlash && !normalised.startsWith(nsSlash + '/'))
|
|
96
|
+
continue;
|
|
97
|
+
const suffix = normalised.slice(nsSlash.length).replace(/^\//, '');
|
|
98
|
+
for (const dir of dirs) {
|
|
99
|
+
const base = join(dir, suffix);
|
|
100
|
+
const result = await tryResolveBase(base, fileIdSet, rootDir);
|
|
101
|
+
if (result)
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=php.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"php.js","sourceRoot":"","sources":["../../../src/indexer/resolvers/php.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python resolver: handles both relative and absolute imports.
|
|
3
|
+
*
|
|
4
|
+
* Relative imports (starting with '.'):
|
|
5
|
+
* from .models import User → specifier '.models' → {dirname}/models.py
|
|
6
|
+
* from ..utils import X → specifier '..utils' → {parent_dir}/utils.py
|
|
7
|
+
* from . import X → specifier '.' → {dirname}/__init__.py
|
|
8
|
+
*
|
|
9
|
+
* Absolute imports (project-internal):
|
|
10
|
+
* from django.db.models import Model → specifier 'django.db.models'
|
|
11
|
+
* → dots to slashes → try {rootDir}/django/db/models.py or __init__.py
|
|
12
|
+
*
|
|
13
|
+
* Stdlib and third-party package names simply won't exist under rootDir and
|
|
14
|
+
* will return null — no explicit exclusion list needed.
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolvePython(specifier: string, fromFile: string, fileIdSet: Set<string>, rootDir: string, _aliasMap: Map<string, string[]>): Promise<string | null>;
|
|
17
|
+
//# sourceMappingURL=python.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../../src/indexer/resolvers/python.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EACtB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA0CxB"}
|