@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,166 @@
|
|
|
1
|
+
import { dirname, join, resolve, isAbsolute } from 'node:path';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
// Cache by CMakeLists directory
|
|
4
|
+
const includeRootsCache = new Map();
|
|
5
|
+
// Per-startDir: found CMakeLists directories in walk order (nearest first)
|
|
6
|
+
const startDirToCmakeLists = new Map();
|
|
7
|
+
async function readFileOpt(path) {
|
|
8
|
+
try {
|
|
9
|
+
return await readFile(path, 'utf-8');
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Extract absolute include root paths from a CMakeLists.txt file.
|
|
17
|
+
* Handles include_directories() and target_include_directories().
|
|
18
|
+
* Variables: ${CMAKE_CURRENT_SOURCE_DIR}, ${CMAKE_SOURCE_DIR}/${PROJECT_SOURCE_DIR},
|
|
19
|
+
* ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BINARY_DIR} (skipped).
|
|
20
|
+
* Generator expressions like $<BUILD_INTERFACE:...> are simplified naively.
|
|
21
|
+
*/
|
|
22
|
+
function extractIncludeRoots(cmakelists_path, content, rootDir) {
|
|
23
|
+
const cmake_dir = dirname(cmakelists_path);
|
|
24
|
+
const roots = new Set();
|
|
25
|
+
const expandPath = (raw) => {
|
|
26
|
+
let expanded = raw;
|
|
27
|
+
// Strip generator expressions $<...> — extract the content as best-effort
|
|
28
|
+
expanded = expanded.replace(/\$<BUILD_INTERFACE:([^>]*)>/g, '$1');
|
|
29
|
+
expanded = expanded.replace(/\$<INSTALL_INTERFACE:([^>]*)>/g, '$1');
|
|
30
|
+
expanded = expanded.replace(/\$<CONFIG:.*?>/g, ''); // strip config-specific markers
|
|
31
|
+
expanded = expanded.replace(/\$<[^>]*>/g, ''); // strip any remaining generator expressions
|
|
32
|
+
// CMAKE_CURRENT_SOURCE_DIR == directory containing this CMakeLists.txt
|
|
33
|
+
expanded = expanded.replace(/\$\{CMAKE_CURRENT_SOURCE_DIR\}/g, cmake_dir);
|
|
34
|
+
// CMAKE_SOURCE_DIR == root of topmost project()
|
|
35
|
+
expanded = expanded.replace(/\$\{CMAKE_SOURCE_DIR\}/g, rootDir);
|
|
36
|
+
// PROJECT_SOURCE_DIR == dir of the nearest enclosing project() call.
|
|
37
|
+
// Vendored deps almost always declare their own project(), so for a nested
|
|
38
|
+
// CMakeLists this resolves to its own dir (e.g. bitcoin's vendored leveldb
|
|
39
|
+
// uses ${PROJECT_SOURCE_DIR}/include relative to src/leveldb/). For the host
|
|
40
|
+
// top-level CMakeLists this also reduces to cmake_dir == rootDir, so the
|
|
41
|
+
// simple cmake_dir mapping is correct in the common case.
|
|
42
|
+
expanded = expanded.replace(/\$\{PROJECT_SOURCE_DIR\}/g, cmake_dir);
|
|
43
|
+
// Skip generated directories
|
|
44
|
+
if (expanded.includes('${CMAKE_CURRENT_BINARY_DIR}') ||
|
|
45
|
+
expanded.includes('${CMAKE_BINARY_DIR}')) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
// If still has variables, skip
|
|
49
|
+
if (expanded.includes('${'))
|
|
50
|
+
return null;
|
|
51
|
+
expanded = expanded.trim();
|
|
52
|
+
if (!expanded)
|
|
53
|
+
return null;
|
|
54
|
+
// Resolve relative paths
|
|
55
|
+
if (!isAbsolute(expanded)) {
|
|
56
|
+
expanded = resolve(cmake_dir, expanded);
|
|
57
|
+
}
|
|
58
|
+
// Bound to rootDir
|
|
59
|
+
if (!expanded.startsWith(rootDir + '/') && expanded !== rootDir) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
return expanded;
|
|
63
|
+
};
|
|
64
|
+
// include_directories(<paths>)
|
|
65
|
+
const include_dirs_re = /include_directories\s*\(([\s\S]*?)\)/g;
|
|
66
|
+
let m;
|
|
67
|
+
while ((m = include_dirs_re.exec(content)) !== null) {
|
|
68
|
+
const paths_str = m[1];
|
|
69
|
+
// Split by whitespace/newlines, filter out quotes and empty strings
|
|
70
|
+
const paths = paths_str
|
|
71
|
+
.split(/[\s\n]+/)
|
|
72
|
+
.map(p => p.replace(/^"|"$|^'|'$/g, '').trim())
|
|
73
|
+
.filter(p => p);
|
|
74
|
+
for (const path of paths) {
|
|
75
|
+
const expanded = expandPath(path);
|
|
76
|
+
if (expanded)
|
|
77
|
+
roots.add(expanded);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// target_include_directories(<target> [SYSTEM] [BEFORE|AFTER] <PUBLIC|PRIVATE|INTERFACE> <paths> [<PUBLIC|...> <paths>]...)
|
|
81
|
+
// A single call can mix multiple visibility groups, so we tokenize the whole
|
|
82
|
+
// body and treat any non-keyword token after we've seen a visibility marker
|
|
83
|
+
// as a path. The leading token is the target name and is always skipped.
|
|
84
|
+
const KEYWORDS = new Set(['PUBLIC', 'PRIVATE', 'INTERFACE', 'SYSTEM', 'BEFORE', 'AFTER']);
|
|
85
|
+
const target_dirs_re = /target_include_directories\s*\(([\s\S]*?)\)/g;
|
|
86
|
+
while ((m = target_dirs_re.exec(content)) !== null) {
|
|
87
|
+
const tokens = m[1]
|
|
88
|
+
.split(/[\s\n]+/)
|
|
89
|
+
.map(p => p.replace(/^"|"$|^'|'$/g, '').trim())
|
|
90
|
+
.filter(p => p);
|
|
91
|
+
let sawVisibility = false;
|
|
92
|
+
for (let i = 1; i < tokens.length; i++) { // skip [0] = target name
|
|
93
|
+
const tok = tokens[i];
|
|
94
|
+
if (KEYWORDS.has(tok)) {
|
|
95
|
+
sawVisibility = true;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (!sawVisibility)
|
|
99
|
+
continue; // tokens before any visibility keyword are non-path arguments
|
|
100
|
+
const expanded = expandPath(tok);
|
|
101
|
+
if (expanded)
|
|
102
|
+
roots.add(expanded);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return Array.from(roots);
|
|
106
|
+
}
|
|
107
|
+
async function getCppIncludeRootsForCmake(cmakelists_dir, rootDir) {
|
|
108
|
+
if (includeRootsCache.has(cmakelists_dir)) {
|
|
109
|
+
const cached = includeRootsCache.get(cmakelists_dir);
|
|
110
|
+
return cached ? cached.roots : null;
|
|
111
|
+
}
|
|
112
|
+
try {
|
|
113
|
+
const content = await readFileOpt(join(cmakelists_dir, 'CMakeLists.txt'));
|
|
114
|
+
if (!content) {
|
|
115
|
+
includeRootsCache.set(cmakelists_dir, null);
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
const roots = extractIncludeRoots(join(cmakelists_dir, 'CMakeLists.txt'), content, rootDir);
|
|
119
|
+
const info = { cmakelists_dir, roots };
|
|
120
|
+
includeRootsCache.set(cmakelists_dir, info);
|
|
121
|
+
return roots;
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
includeRootsCache.set(cmakelists_dir, null);
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Walk up from startDir to find all ancestor CMakeLists.txt files, collect their
|
|
130
|
+
* include roots, and return them in order (nearest CMakeLists' roots first).
|
|
131
|
+
* Caches the list of CMakeLists dirs per startDir to avoid repeated walk-ups.
|
|
132
|
+
*/
|
|
133
|
+
export async function getCppIncludeRoots(startDir, rootDir) {
|
|
134
|
+
if (startDirToCmakeLists.has(startDir)) {
|
|
135
|
+
const cmake_dirs = startDirToCmakeLists.get(startDir);
|
|
136
|
+
const allRoots = [];
|
|
137
|
+
for (const cmake_dir of cmake_dirs) {
|
|
138
|
+
const roots = await getCppIncludeRootsForCmake(cmake_dir, rootDir);
|
|
139
|
+
if (roots)
|
|
140
|
+
allRoots.push(...roots);
|
|
141
|
+
}
|
|
142
|
+
return allRoots;
|
|
143
|
+
}
|
|
144
|
+
const cmake_dirs = [];
|
|
145
|
+
let dir = startDir;
|
|
146
|
+
for (let i = 0; i < 64; i++) {
|
|
147
|
+
const cmake_path = join(dir, 'CMakeLists.txt');
|
|
148
|
+
const content = await readFileOpt(cmake_path);
|
|
149
|
+
if (content !== null) {
|
|
150
|
+
cmake_dirs.push(dir);
|
|
151
|
+
}
|
|
152
|
+
const parent = dirname(dir);
|
|
153
|
+
if (parent === dir)
|
|
154
|
+
break;
|
|
155
|
+
dir = parent;
|
|
156
|
+
}
|
|
157
|
+
startDirToCmakeLists.set(startDir, cmake_dirs);
|
|
158
|
+
const allRoots = [];
|
|
159
|
+
for (const cmake_dir of cmake_dirs) {
|
|
160
|
+
const roots = await getCppIncludeRootsForCmake(cmake_dir, rootDir);
|
|
161
|
+
if (roots)
|
|
162
|
+
allRoots.push(...roots);
|
|
163
|
+
}
|
|
164
|
+
return allRoots;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=cpp-include-roots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cpp-include-roots.js","sourceRoot":"","sources":["../../src/indexer/cpp-include-roots.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Edge, IndexedFile } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* C# synthetic edges:
|
|
4
|
+
* - Partial class/struct/interface/record declarations: when multiple files
|
|
5
|
+
* declare the same partial type (same name and namespace), emit bidirectional
|
|
6
|
+
* synthetic file-level edges between all pairs.
|
|
7
|
+
*/
|
|
8
|
+
export declare function addCSharpSyntheticEdges(indexedFiles: IndexedFile[], edges: Edge[], fullFileIdSet: Set<string>, rootDir: string): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=csharp-synthetic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csharp-synthetic.d.ts","sourceRoot":"","sources":["../../src/indexer/csharp-synthetic.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAErD;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,WAAW,EAAE,EAC3B,KAAK,EAAE,IAAI,EAAE,EACb,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAsCf"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* C# synthetic edges:
|
|
3
|
+
* - Partial class/struct/interface/record declarations: when multiple files
|
|
4
|
+
* declare the same partial type (same name and namespace), emit bidirectional
|
|
5
|
+
* synthetic file-level edges between all pairs.
|
|
6
|
+
*/
|
|
7
|
+
export async function addCSharpSyntheticEdges(indexedFiles, edges, fullFileIdSet, rootDir) {
|
|
8
|
+
const csharpFiles = indexedFiles.filter(f => f.language === 'csharp');
|
|
9
|
+
if (csharpFiles.length === 0)
|
|
10
|
+
return;
|
|
11
|
+
// Build a map: (namespace?, name) → fileId[]
|
|
12
|
+
const partialsByKey = new Map();
|
|
13
|
+
for (const f of csharpFiles) {
|
|
14
|
+
if (!f.partialDeclarations?.length)
|
|
15
|
+
continue;
|
|
16
|
+
for (const decl of f.partialDeclarations) {
|
|
17
|
+
const key = `${decl.namespace ?? ''}::${decl.name}`;
|
|
18
|
+
let arr = partialsByKey.get(key);
|
|
19
|
+
if (!arr) {
|
|
20
|
+
arr = [];
|
|
21
|
+
partialsByKey.set(key, arr);
|
|
22
|
+
}
|
|
23
|
+
arr.push(f.id);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// For each partial declaration group with 2+ files, emit bidirectional edges
|
|
27
|
+
const seen = new Set();
|
|
28
|
+
for (const e of edges)
|
|
29
|
+
seen.add(`${e.from}|${e.to}`);
|
|
30
|
+
for (const [key, fileIds] of partialsByKey) {
|
|
31
|
+
if (fileIds.length < 2)
|
|
32
|
+
continue;
|
|
33
|
+
// Extract the type name for the specifier
|
|
34
|
+
const typeName = key.split('::')[1];
|
|
35
|
+
for (let i = 0; i < fileIds.length; i++) {
|
|
36
|
+
for (let j = i + 1; j < fileIds.length; j++) {
|
|
37
|
+
const fromId = fileIds[i];
|
|
38
|
+
const toId = fileIds[j];
|
|
39
|
+
// Bidirectional: i→j and j→i
|
|
40
|
+
for (const [from, to] of [[fromId, toId], [toId, fromId]]) {
|
|
41
|
+
const edgeKey = `${from}|${to}`;
|
|
42
|
+
if (seen.has(edgeKey) || !fullFileIdSet.has(from) || !fullFileIdSet.has(to))
|
|
43
|
+
continue;
|
|
44
|
+
seen.add(edgeKey);
|
|
45
|
+
edges.push({ from, to, type: 'import', specifier: `partial:${typeName}` });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=csharp-synthetic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csharp-synthetic.js","sourceRoot":"","sources":["../../src/indexer/csharp-synthetic.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,YAA2B,EAC3B,KAAa,EACb,aAA0B,EAC1B,OAAe;IAEf,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IACtE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAErC,6CAA6C;IAC7C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAoB,CAAC;IAClD,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,CAAC,mBAAmB,EAAE,MAAM;YAAE,SAAS;QAC7C,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,mBAAmB,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YACpD,IAAI,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,GAAG,EAAE,CAAC;gBAAC,GAAG,GAAG,EAAE,CAAC;gBAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAAC,CAAC;YACpD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAErD,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,aAAa,EAAE,CAAC;QAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QACjC,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACxB,6BAA6B;gBAC7B,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;oBAC1D,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;oBAChC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;wBAAE,SAAS;oBACtF,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAClB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAC7E,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Edge, IndexedFile } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Django synthetic edges:
|
|
4
|
+
* - Settings.py dotted-string references (MIDDLEWARE, AUTHENTICATION_BACKENDS, etc.)
|
|
5
|
+
* - URLs.py include() calls with string arguments
|
|
6
|
+
* - importlib.import_module() with literal string arguments
|
|
7
|
+
*
|
|
8
|
+
* These emit specifiers with convention:django prefix, resolved via Python's
|
|
9
|
+
* absolute import resolver (walking up from the file dir to find package roots).
|
|
10
|
+
*/
|
|
11
|
+
export declare function addDjangoSyntheticEdges(indexedFiles: IndexedFile[], edges: Edge[], fullFileIdSet: Set<string>, rootDir: string): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=django-synthetic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"django-synthetic.d.ts","sourceRoot":"","sources":["../../src/indexer/django-synthetic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAErD;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,WAAW,EAAE,EAC3B,KAAK,EAAE,IAAI,EAAE,EACb,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAqCf"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { resolvePython } from './resolvers/python.js';
|
|
2
|
+
/**
|
|
3
|
+
* Django synthetic edges:
|
|
4
|
+
* - Settings.py dotted-string references (MIDDLEWARE, AUTHENTICATION_BACKENDS, etc.)
|
|
5
|
+
* - URLs.py include() calls with string arguments
|
|
6
|
+
* - importlib.import_module() with literal string arguments
|
|
7
|
+
*
|
|
8
|
+
* These emit specifiers with convention:django prefix, resolved via Python's
|
|
9
|
+
* absolute import resolver (walking up from the file dir to find package roots).
|
|
10
|
+
*/
|
|
11
|
+
export async function addDjangoSyntheticEdges(indexedFiles, edges, fullFileIdSet, rootDir) {
|
|
12
|
+
const pythonFiles = indexedFiles.filter(f => f.language === 'python');
|
|
13
|
+
if (pythonFiles.length === 0)
|
|
14
|
+
return;
|
|
15
|
+
const seen = new Set();
|
|
16
|
+
for (const e of edges)
|
|
17
|
+
seen.add(`${e.from}|${e.to}`);
|
|
18
|
+
// Process each Python file that has Django convention references
|
|
19
|
+
for (const f of pythonFiles) {
|
|
20
|
+
if (!f.djangoConventionRefs?.length)
|
|
21
|
+
continue;
|
|
22
|
+
for (const ref of f.djangoConventionRefs) {
|
|
23
|
+
// ref.value is a dotted string like 'django.middleware.locale.LocaleMiddleware'.
|
|
24
|
+
// resolvePython returns a fileId (relative path) directly, not an absolute path.
|
|
25
|
+
// If full path doesn't resolve, retry with the trailing segment stripped (so
|
|
26
|
+
// 'django.middleware.locale.LocaleMiddleware' falls back to 'django.middleware.locale').
|
|
27
|
+
let targetId = await resolvePython(ref.value, f.path, fullFileIdSet, rootDir, new Map());
|
|
28
|
+
if (!targetId) {
|
|
29
|
+
const lastDot = ref.value.lastIndexOf('.');
|
|
30
|
+
if (lastDot > 0) {
|
|
31
|
+
targetId = await resolvePython(ref.value.slice(0, lastDot), f.path, fullFileIdSet, rootDir, new Map());
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (!targetId || targetId === f.id)
|
|
35
|
+
continue;
|
|
36
|
+
const key = `${f.id}|${targetId}`;
|
|
37
|
+
if (seen.has(key) || !fullFileIdSet.has(targetId))
|
|
38
|
+
continue;
|
|
39
|
+
seen.add(key);
|
|
40
|
+
edges.push({
|
|
41
|
+
from: f.id,
|
|
42
|
+
to: targetId,
|
|
43
|
+
type: 'import',
|
|
44
|
+
specifier: `convention:django:${ref.kind}`,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=django-synthetic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"django-synthetic.js","sourceRoot":"","sources":["../../src/indexer/django-synthetic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,YAA2B,EAC3B,KAAa,EACb,aAA0B,EAC1B,OAAe;IAEf,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IACtE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAErC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAErD,iEAAiE;IACjE,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,CAAC,oBAAoB,EAAE,MAAM;YAAE,SAAS;QAE9C,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,oBAAoB,EAAE,CAAC;YACzC,iFAAiF;YACjF,iFAAiF;YACjF,6EAA6E;YAC7E,yFAAyF;YACzF,IAAI,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YACzF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBAC3C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;oBAChB,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;gBACzG,CAAC;YACH,CAAC;YACD,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE;gBAAE,SAAS;YAE7C,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,QAAQ,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,SAAS;YAE5D,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,CAAC,CAAC,EAAE;gBACV,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,qBAAqB,GAAG,CAAC,IAAI,EAAE;aAC3C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AngularJS 1.x symbol extractor.
|
|
3
|
+
*
|
|
4
|
+
* Extracts registered component names and exposed methods from AngularJS
|
|
5
|
+
* module declarations. Results are returned as pseudo-export strings so they
|
|
6
|
+
* flow into buildFileDomains as 'symbol' source tokens.
|
|
7
|
+
*
|
|
8
|
+
* Detected patterns:
|
|
9
|
+
* .controller('UserController', ...) → 'UserController'
|
|
10
|
+
* .service('authService', ...) → 'authService'
|
|
11
|
+
* .factory / .directive / .filter / .component / .provider
|
|
12
|
+
* this.getUser = ... → 'getUser'
|
|
13
|
+
* $scope.loadItems = ... → 'loadItems'
|
|
14
|
+
*/
|
|
15
|
+
export declare function extractAngularJsSymbols(content: string): string[];
|
|
16
|
+
//# sourceMappingURL=angularjs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"angularjs.d.ts","sourceRoot":"","sources":["../../../src/indexer/extractors/angularjs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CA6BjE"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AngularJS 1.x symbol extractor.
|
|
3
|
+
*
|
|
4
|
+
* Extracts registered component names and exposed methods from AngularJS
|
|
5
|
+
* module declarations. Results are returned as pseudo-export strings so they
|
|
6
|
+
* flow into buildFileDomains as 'symbol' source tokens.
|
|
7
|
+
*
|
|
8
|
+
* Detected patterns:
|
|
9
|
+
* .controller('UserController', ...) → 'UserController'
|
|
10
|
+
* .service('authService', ...) → 'authService'
|
|
11
|
+
* .factory / .directive / .filter / .component / .provider
|
|
12
|
+
* this.getUser = ... → 'getUser'
|
|
13
|
+
* $scope.loadItems = ... → 'loadItems'
|
|
14
|
+
*/
|
|
15
|
+
const ANGULAR_REGISTER_RE = /\.(?:controller|service|factory|directive|component|filter|provider|value|constant)\s*\(\s*['"]([^'"]+)['"]/g;
|
|
16
|
+
const THIS_METHOD_RE = /\bthis\.([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=/g;
|
|
17
|
+
const SCOPE_METHOD_RE = /\$scope\.([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=/g;
|
|
18
|
+
export function extractAngularJsSymbols(content) {
|
|
19
|
+
// Quick bail — not an AngularJS file
|
|
20
|
+
if (!content.includes('angular.module'))
|
|
21
|
+
return [];
|
|
22
|
+
const symbols = [];
|
|
23
|
+
let m;
|
|
24
|
+
// Registered component names
|
|
25
|
+
ANGULAR_REGISTER_RE.lastIndex = 0;
|
|
26
|
+
while ((m = ANGULAR_REGISTER_RE.exec(content)) !== null) {
|
|
27
|
+
symbols.push(m[1]);
|
|
28
|
+
}
|
|
29
|
+
// this.method = ... (service / controller instance methods)
|
|
30
|
+
const thisSeen = new Set();
|
|
31
|
+
THIS_METHOD_RE.lastIndex = 0;
|
|
32
|
+
while ((m = THIS_METHOD_RE.exec(content)) !== null) {
|
|
33
|
+
if (!thisSeen.has(m[1])) {
|
|
34
|
+
thisSeen.add(m[1]);
|
|
35
|
+
symbols.push(m[1]);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// $scope.method = ... (controller scope methods)
|
|
39
|
+
const scopeSeen = new Set();
|
|
40
|
+
SCOPE_METHOD_RE.lastIndex = 0;
|
|
41
|
+
while ((m = SCOPE_METHOD_RE.exec(content)) !== null) {
|
|
42
|
+
if (!scopeSeen.has(m[1])) {
|
|
43
|
+
scopeSeen.add(m[1]);
|
|
44
|
+
symbols.push(m[1]);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return symbols;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=angularjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"angularjs.js","sourceRoot":"","sources":["../../../src/indexer/extractors/angularjs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,mBAAmB,GACvB,8GAA8G,CAAC;AAEjH,MAAM,cAAc,GAAG,yCAAyC,CAAC;AACjE,MAAM,eAAe,GAAG,0CAA0C,CAAC;AAEnE,MAAM,UAAU,uBAAuB,CAAC,OAAe;IACrD,qCAAqC;IACrC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,CAAyB,CAAC;IAE9B,6BAA6B;IAC7B,mBAAmB,CAAC,SAAS,GAAG,CAAC,CAAC;IAClC,OAAO,CAAC,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,4DAA4D;IAC5D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,cAAc,CAAC,SAAS,GAAG,CAAC,CAAC;IAC7B,OAAO,CAAC,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IACtE,CAAC;IAED,iDAAiD;IACjD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,eAAe,CAAC,SAAS,GAAG,CAAC,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACpD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IACxE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SymbolNode } from '../../types.js';
|
|
2
|
+
export interface CppParseResult {
|
|
3
|
+
imports: string[];
|
|
4
|
+
exports: string[];
|
|
5
|
+
hasDefaultExport: false;
|
|
6
|
+
symbols: SymbolNode[];
|
|
7
|
+
}
|
|
8
|
+
export declare function parseCppContent(content: string, fileId: string): CppParseResult;
|
|
9
|
+
//# sourceMappingURL=cpp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cpp.d.ts","sourceRoot":"","sources":["../../../src/indexer/extractors/cpp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,gBAAgB,CAAC;AAiD3D,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gBAAgB,EAAE,KAAK,CAAC;IACxB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAgFD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAgI/E"}
|