@vibgrate/cli 2026.721.1 → 2026.721.3
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/dist/baseline-37G4TINM.js +6 -0
- package/dist/{baseline-3S5NKMBP.js.map → baseline-37G4TINM.js.map} +1 -1
- package/dist/{chunk-FR72DKYF.js → chunk-5PLKADD6.js} +3 -3
- package/dist/{chunk-FR72DKYF.js.map → chunk-5PLKADD6.js.map} +1 -1
- package/dist/{chunk-C4EDNPWN.js → chunk-ELUFCQDR.js} +123 -20
- package/dist/chunk-ELUFCQDR.js.map +1 -0
- package/dist/{chunk-JWBS5GS6.js → chunk-IKJBELUV.js} +92 -7
- package/dist/chunk-IKJBELUV.js.map +1 -0
- package/dist/{chunk-SHXV4VPX.js → chunk-JLRF5TFA.js} +3 -3
- package/dist/{chunk-SHXV4VPX.js.map → chunk-JLRF5TFA.js.map} +1 -1
- package/dist/cli.js +58 -7
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/parse-worker.d.ts +1 -1
- package/dist/parse-worker.js +1 -1
- package/dist/{types-BgNa-FZQ.d.ts → types-Jl6RJ175.d.ts} +8 -0
- package/package.json +3 -2
- package/dist/baseline-3S5NKMBP.js +0 -6
- package/dist/chunk-C4EDNPWN.js.map +0 -1
- package/dist/chunk-JWBS5GS6.js.map +0 -1
|
@@ -318,7 +318,11 @@ var JAVA = {
|
|
|
318
318
|
typeRefs: [
|
|
319
319
|
"(constructor_declaration parameters: (formal_parameters (formal_parameter type: (type_identifier) @typeref)))",
|
|
320
320
|
"(field_declaration type: (type_identifier) @typeref)"
|
|
321
|
-
]
|
|
321
|
+
],
|
|
322
|
+
// A Java package is a directory, so cross-directory (cross-package) DI
|
|
323
|
+
// resolves through `import a.b.Foo`. Capturing the package lets the resolver
|
|
324
|
+
// reach the implementation in another package when the caller imports it.
|
|
325
|
+
namespaces: ["(package_declaration (scoped_identifier) @namespace)", "(package_declaration (identifier) @namespace)"]
|
|
322
326
|
};
|
|
323
327
|
var RUST = {
|
|
324
328
|
defs: [
|
|
@@ -349,9 +353,32 @@ var C_SHARP = {
|
|
|
349
353
|
{ kind: "class", query: "(enum_declaration name: (identifier) @name) @def" },
|
|
350
354
|
{ kind: "class", query: "(record_declaration name: (identifier) @name) @def" }
|
|
351
355
|
],
|
|
352
|
-
calls: [
|
|
356
|
+
calls: [
|
|
357
|
+
"(invocation_expression function: (member_access_expression name: (identifier) @callee))",
|
|
358
|
+
"(invocation_expression function: (identifier) @callee)",
|
|
359
|
+
// `new Foo(...)` is an instantiation dependency (the caller depends on Foo),
|
|
360
|
+
// and it is how a test most directly links to the class under test — without
|
|
361
|
+
// it a test that only constructs the service showed up as no coverage.
|
|
362
|
+
"(object_creation_expression type: (identifier) @callee)"
|
|
363
|
+
],
|
|
353
364
|
imports: ["(using_directive (qualified_name) @source)", "(using_directive (identifier) @source)"],
|
|
354
|
-
heritage: ["(base_list (identifier) @extends)"]
|
|
365
|
+
heritage: ["(base_list (identifier) @extends)"],
|
|
366
|
+
// Dependency-injection wiring: the interface a class depends on appears as a
|
|
367
|
+
// constructor-parameter type or a readonly field type, never as a call — so
|
|
368
|
+
// without these captures a controller/service injected through an interface
|
|
369
|
+
// looks like it references nothing. Simple (identifier) types only; generics/
|
|
370
|
+
// qualified names are left to a precise rung. Mirrors the Java DI captures.
|
|
371
|
+
typeRefs: [
|
|
372
|
+
"(constructor_declaration (parameter_list (parameter type: (identifier) @typeref)))",
|
|
373
|
+
"(field_declaration (variable_declaration type: (identifier) @typeref))"
|
|
374
|
+
],
|
|
375
|
+
// A namespace is decoupled from the directory in C#, so cross-namespace
|
|
376
|
+
// resolution needs to know which namespace a file declares. Both block-scoped
|
|
377
|
+
// (`namespace N { }`) and file-scoped (`namespace N;`) forms.
|
|
378
|
+
namespaces: [
|
|
379
|
+
"(namespace_declaration name: [(identifier) (qualified_name)] @namespace)",
|
|
380
|
+
"(file_scoped_namespace_declaration name: [(identifier) (qualified_name)] @namespace)"
|
|
381
|
+
]
|
|
355
382
|
};
|
|
356
383
|
var RUBY = {
|
|
357
384
|
defs: [
|
|
@@ -390,6 +417,15 @@ var PHP = {
|
|
|
390
417
|
"[(require_expression (string) @source) (require_once_expression (string) @source) (include_expression (string) @source) (include_once_expression (string) @source)]"
|
|
391
418
|
],
|
|
392
419
|
heritage: ["(base_clause (name) @extends)", "(class_interface_clause (name) @implements)"],
|
|
420
|
+
// PHP namespaces are decoupled from directories (PSR-4 maps them, but the
|
|
421
|
+
// resolver has no composer.json), so cross-namespace DI resolves through
|
|
422
|
+
// `use`. Constructor-parameter and typed-property types are the injection
|
|
423
|
+
// points.
|
|
424
|
+
namespaces: ["(namespace_definition name: (namespace_name) @namespace)"],
|
|
425
|
+
typeRefs: [
|
|
426
|
+
"(simple_parameter type: (named_type (name) @typeref))",
|
|
427
|
+
"(property_declaration type: (named_type (name) @typeref))"
|
|
428
|
+
],
|
|
393
429
|
guards: ['(function_call_expression function: (name) @_g (#eq? @_g "assert")) @guard']
|
|
394
430
|
};
|
|
395
431
|
var KOTLIN = {
|
|
@@ -404,6 +440,14 @@ var KOTLIN = {
|
|
|
404
440
|
"(call_expression (navigation_expression (navigation_suffix (simple_identifier) @callee)))"
|
|
405
441
|
],
|
|
406
442
|
imports: ["(import_header (identifier) @source)"],
|
|
443
|
+
// Kotlin: package for cross-package DI reachability; primary-constructor
|
|
444
|
+
// `val` params and property types are the injection points.
|
|
445
|
+
namespaces: ["(package_header (identifier) @namespace)"],
|
|
446
|
+
typeRefs: [
|
|
447
|
+
"(class_parameter (user_type (type_identifier) @typeref))",
|
|
448
|
+
"(property_declaration (variable_declaration (user_type (type_identifier) @typeref)))",
|
|
449
|
+
"(property_declaration (variable_declaration (nullable_type (user_type (type_identifier) @typeref))))"
|
|
450
|
+
],
|
|
407
451
|
heritage: [
|
|
408
452
|
"(delegation_specifier (constructor_invocation (user_type (type_identifier) @extends)))",
|
|
409
453
|
"(delegation_specifier (user_type (type_identifier) @implements))"
|
|
@@ -424,6 +468,13 @@ var SWIFT = {
|
|
|
424
468
|
],
|
|
425
469
|
imports: ["(import_declaration (identifier) @source)"],
|
|
426
470
|
heritage: ["(inheritance_specifier inherits_from: (user_type (type_identifier) @extends))"],
|
|
471
|
+
// Swift: init-parameter and stored-property types are the injection points
|
|
472
|
+
// (protocol-typed). Whole-module visibility (handled in resolve.ts) makes the
|
|
473
|
+
// conforming implementation reachable cross-file.
|
|
474
|
+
typeRefs: [
|
|
475
|
+
"(parameter (user_type (type_identifier) @typeref))",
|
|
476
|
+
"(type_annotation (user_type (type_identifier) @typeref))"
|
|
477
|
+
],
|
|
427
478
|
guards: [
|
|
428
479
|
'(call_expression (simple_identifier) @_g (#match? @_g "^(assert|precondition|assertionFailure|preconditionFailure)$")) @guard'
|
|
429
480
|
]
|
|
@@ -450,6 +501,13 @@ var SCALA = {
|
|
|
450
501
|
"(extends_clause type: (compound_type base: (type_identifier) @extends))",
|
|
451
502
|
"(extends_clause type: (compound_type extra: (type_identifier) @implements))"
|
|
452
503
|
],
|
|
504
|
+
// Scala: package for cross-package DI reachability; class-parameter and val
|
|
505
|
+
// types are the injection points.
|
|
506
|
+
namespaces: ["(package_clause name: (package_identifier) @namespace)"],
|
|
507
|
+
typeRefs: [
|
|
508
|
+
"(class_parameter type: (type_identifier) @typeref)",
|
|
509
|
+
"(val_definition type: (type_identifier) @typeref)"
|
|
510
|
+
],
|
|
453
511
|
guards: ['(call_expression function: (identifier) @_g (#match? @_g "^(require|assert|assume)$")) @guard']
|
|
454
512
|
};
|
|
455
513
|
var DART = {
|
|
@@ -466,6 +524,13 @@ var DART = {
|
|
|
466
524
|
"(cascade_section (cascade_selector (identifier) @callee) . (argument_part))"
|
|
467
525
|
],
|
|
468
526
|
imports: ["(import_specification (configurable_uri (uri (string_literal) @source)))"],
|
|
527
|
+
// Dart: constructor/method parameter types and typed field declarations are
|
|
528
|
+
// the injection points (Dart resolves cross-file via `import`, so no
|
|
529
|
+
// namespace query is needed — the import rung already reaches the impl).
|
|
530
|
+
typeRefs: [
|
|
531
|
+
"(formal_parameter (type_identifier) @typeref)",
|
|
532
|
+
"(declaration (type_identifier) @typeref)"
|
|
533
|
+
],
|
|
469
534
|
heritage: [
|
|
470
535
|
"(superclass (type_identifier) @extends)",
|
|
471
536
|
"(interfaces (type_identifier) @implements)",
|
|
@@ -609,7 +674,10 @@ var OBJC = {
|
|
|
609
674
|
// (param names sit inside method_parameter); the first segment names it.
|
|
610
675
|
{ kind: "method", query: "(method_definition (identifier) @name) @def" },
|
|
611
676
|
{ kind: "class", query: "(class_implementation . (identifier) @name) @def" },
|
|
612
|
-
{ kind: "interface", query: "(class_interface . (identifier) @name) @def" }
|
|
677
|
+
{ kind: "interface", query: "(class_interface . (identifier) @name) @def" },
|
|
678
|
+
// A @protocol is Objective-C's interface — without this it is not a node, so
|
|
679
|
+
// conformance and protocol-typed DI cannot resolve.
|
|
680
|
+
{ kind: "interface", query: "(protocol_declaration (identifier) @name) @def" }
|
|
613
681
|
],
|
|
614
682
|
calls: [
|
|
615
683
|
"(call_expression function: (identifier) @callee)",
|
|
@@ -619,7 +687,13 @@ var OBJC = {
|
|
|
619
687
|
"(preproc_include path: (string_literal) @source)",
|
|
620
688
|
"(preproc_include path: (system_lib_string) @source)"
|
|
621
689
|
],
|
|
622
|
-
|
|
690
|
+
// Superclass (`: NSObject`) is `extends`; adopted protocols (`<Servicing>`,
|
|
691
|
+
// captured as parameterized_arguments after the interface name) are the
|
|
692
|
+
// `implements` relationship a DI call disambiguates through.
|
|
693
|
+
heritage: [
|
|
694
|
+
"(class_interface superclass: (identifier) @extends)",
|
|
695
|
+
"(class_interface (parameterized_arguments (type_name (type_identifier) @implements)))"
|
|
696
|
+
],
|
|
623
697
|
guards: ASSERT_CALLS
|
|
624
698
|
};
|
|
625
699
|
var OCAML = {
|
|
@@ -1028,6 +1102,17 @@ async function parseSource(rel, langId, source) {
|
|
|
1028
1102
|
}
|
|
1029
1103
|
}
|
|
1030
1104
|
result.typeRefs = typeRefs.sort((a, b) => a.byte - b.byte || a.name.localeCompare(b.name));
|
|
1105
|
+
const namespaces = /* @__PURE__ */ new Set();
|
|
1106
|
+
for (const qsrc of langQueries.namespaces ?? []) {
|
|
1107
|
+
const q = compile(language, effLangId, qsrc);
|
|
1108
|
+
if (!q) continue;
|
|
1109
|
+
for (const cap of q.captures(root)) {
|
|
1110
|
+
if (cap.name !== "namespace") continue;
|
|
1111
|
+
const name = cap.node.text.trim();
|
|
1112
|
+
if (name) namespaces.add(name);
|
|
1113
|
+
}
|
|
1114
|
+
}
|
|
1115
|
+
if (namespaces.size) result.namespaces = [...namespaces].sort();
|
|
1031
1116
|
const guards = [];
|
|
1032
1117
|
for (const qsrc of langQueries.guards ?? []) {
|
|
1033
1118
|
const q = compile(language, effLangId, qsrc);
|
|
@@ -1103,5 +1188,5 @@ function dedupeImports(imports) {
|
|
|
1103
1188
|
}
|
|
1104
1189
|
|
|
1105
1190
|
export { LANGUAGES, allLanguageIds, canonicalize, grammarSetVersion, grammarsSourceDir, hashBytes, hashString, langById, langForExtension, parseSource, resolvedGrammarFiles, setGrammarsOverride, shortId };
|
|
1106
|
-
//# sourceMappingURL=chunk-
|
|
1107
|
-
//# sourceMappingURL=chunk-
|
|
1191
|
+
//# sourceMappingURL=chunk-IKJBELUV.js.map
|
|
1192
|
+
//# sourceMappingURL=chunk-IKJBELUV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/engine/languages.ts","../src/engine/grammars.ts","../src/engine/queries.ts","../src/engine/sfc.ts","../src/engine/hash.ts","../src/engine/parse.ts"],"names":["require","ranges"],"mappings":"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","file":"chunk-IKJBELUV.js","sourcesContent":["/**\n * Language registry: 20 grammar-backed languages (first wave + the Phase-3\n * expansion) plus the embedded-script container formats (Vue/Svelte/Astro\n * single-file components, parsed via sfc.ts with the JS/TS grammars).\n *\n * Each language maps to a tree-sitter grammar shipped (pre-compiled to .wasm) by\n * `tree-sitter-wasms`. `grammarFile` is the base name under that package's `out/`\n * directory (and our bundled `grammars/` copy). The grammar *version* is recorded\n * in provenance so the determinism contract is explicit about its inputs.\n */\n\nexport interface LanguageDef {\n /** Canonical short id used in the schema (`lang` field) and `--only`. */\n id: string;\n /** Human label. */\n label: string;\n /** File extensions (lowercase, with leading dot). */\n extensions: string[];\n /** tree-sitter-wasms grammar base name, e.g. `tree-sitter-typescript`. */\n grammarFile: string;\n}\n\nexport const LANGUAGES: LanguageDef[] = [\n {\n id: 'ts',\n label: 'TypeScript',\n extensions: ['.ts', '.mts', '.cts'],\n grammarFile: 'tree-sitter-typescript',\n },\n {\n id: 'tsx',\n label: 'TSX',\n extensions: ['.tsx'],\n grammarFile: 'tree-sitter-tsx',\n },\n {\n id: 'js',\n label: 'JavaScript',\n extensions: ['.js', '.mjs', '.cjs', '.jsx'],\n grammarFile: 'tree-sitter-javascript',\n },\n {\n id: 'py',\n label: 'Python',\n extensions: ['.py', '.pyi'],\n grammarFile: 'tree-sitter-python',\n },\n {\n id: 'go',\n label: 'Go',\n extensions: ['.go'],\n grammarFile: 'tree-sitter-go',\n },\n {\n id: 'java',\n label: 'Java',\n extensions: ['.java'],\n grammarFile: 'tree-sitter-java',\n },\n {\n id: 'rust',\n label: 'Rust',\n extensions: ['.rs'],\n grammarFile: 'tree-sitter-rust',\n },\n {\n id: 'cs',\n label: 'C#',\n extensions: ['.cs'],\n grammarFile: 'tree-sitter-c_sharp',\n },\n {\n id: 'rb',\n label: 'Ruby',\n extensions: ['.rb'],\n grammarFile: 'tree-sitter-ruby',\n },\n { id: 'php', label: 'PHP', extensions: ['.php'], grammarFile: 'tree-sitter-php' },\n { id: 'kotlin', label: 'Kotlin', extensions: ['.kt', '.kts'], grammarFile: 'tree-sitter-kotlin' },\n { id: 'swift', label: 'Swift', extensions: ['.swift'], grammarFile: 'tree-sitter-swift' },\n { id: 'scala', label: 'Scala', extensions: ['.scala', '.sc'], grammarFile: 'tree-sitter-scala' },\n { id: 'dart', label: 'Dart', extensions: ['.dart'], grammarFile: 'tree-sitter-dart' },\n { id: 'lua', label: 'Lua', extensions: ['.lua'], grammarFile: 'tree-sitter-lua' },\n { id: 'ex', label: 'Elixir', extensions: ['.ex', '.exs'], grammarFile: 'tree-sitter-elixir' },\n // Known limitation: the bundled bash grammar's external scanner throws under\n // web-tree-sitter 0.25.10 on `case`/heredoc constructs. Such files degrade\n // gracefully (per-file empty parse + a surfaced warning, never a build crash);\n // functions in case/heredoc-free scripts extract normally.\n { id: 'sh', label: 'Shell', extensions: ['.sh', '.bash'], grammarFile: 'tree-sitter-bash' },\n { id: 'zig', label: 'Zig', extensions: ['.zig'], grammarFile: 'tree-sitter-zig' },\n { id: 'c', label: 'C', extensions: ['.c'], grammarFile: 'tree-sitter-c' },\n // C++ owns `.h`: the cpp grammar is a superset of C, so C headers parse clean\n // under it, while C++ headers (classes/templates) break the C grammar.\n {\n id: 'cpp',\n label: 'C++',\n extensions: ['.cpp', '.cc', '.cxx', '.hpp', '.hh', '.hxx', '.h'],\n grammarFile: 'tree-sitter-cpp',\n },\n // Objective-C owns `.m` (the far more common meaning in repos than MATLAB);\n // `.mm` (ObjC++) degrades gracefully on C++-only constructs.\n { id: 'objc', label: 'Objective-C', extensions: ['.m', '.mm'], grammarFile: 'tree-sitter-objc' },\n // `.mli` interface files parse best-effort under the implementation grammar.\n { id: 'ocaml', label: 'OCaml', extensions: ['.ml', '.mli'], grammarFile: 'tree-sitter-ocaml' },\n { id: 'rescript', label: 'ReScript', extensions: ['.res'], grammarFile: 'tree-sitter-rescript' },\n { id: 'solidity', label: 'Solidity', extensions: ['.sol'], grammarFile: 'tree-sitter-solidity' },\n // Embedded-script container formats (single-file components and templates).\n // Their script regions are extracted with a position-preserving mask and\n // parsed with the JS/TS (or Ruby, for ERB) grammars — see sfc.ts. The\n // grammarFile below is the effective-grammar fallback so bundling always\n // ships something loadable for the id; the actual grammar is chosen per file\n // (script `lang` attribute / the container's fixed embedded language).\n { id: 'vue', label: 'Vue', extensions: ['.vue'], grammarFile: 'tree-sitter-typescript' },\n { id: 'svelte', label: 'Svelte', extensions: ['.svelte'], grammarFile: 'tree-sitter-typescript' },\n { id: 'astro', label: 'Astro', extensions: ['.astro'], grammarFile: 'tree-sitter-typescript' },\n { id: 'html', label: 'HTML', extensions: ['.html', '.htm'], grammarFile: 'tree-sitter-javascript' },\n { id: 'erb', label: 'ERB', extensions: ['.erb'], grammarFile: 'tree-sitter-ruby' },\n { id: 'ejs', label: 'EJS', extensions: ['.ejs'], grammarFile: 'tree-sitter-javascript' },\n];\n\nconst EXT_TO_LANG = new Map<string, LanguageDef>();\nfor (const lang of LANGUAGES) {\n for (const ext of lang.extensions) EXT_TO_LANG.set(ext, lang);\n}\n\nconst ID_TO_LANG = new Map<string, LanguageDef>(LANGUAGES.map((l) => [l.id, l]));\n\nexport function langForExtension(ext: string): LanguageDef | undefined {\n return EXT_TO_LANG.get(ext.toLowerCase());\n}\n\nexport function langById(id: string): LanguageDef | undefined {\n return ID_TO_LANG.get(id);\n}\n\nexport function allLanguageIds(): string[] {\n return LANGUAGES.map((l) => l.id);\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { createRequire } from 'node:module';\nimport { Parser, Language } from 'web-tree-sitter';\nimport { langById, LANGUAGES, type LanguageDef } from './languages.js';\n\n/**\n * Grammar loader. Resolves the pre-compiled tree-sitter `.wasm` for a language\n * from, in order:\n * 1. the `--grammars <dir>` override (offline / air-gapped)\n * 2. ../grammars next to dist (bundled in the published package)\n * 3. the installed `tree-sitter-wasms` package (dev / fallback)\n *\n * Languages are cached. The grammar set version is recorded in provenance so the\n * determinism contract is explicit about which grammars produced the graph.\n */\n\nconst require = createRequire(import.meta.url);\n\nlet parserInit: Promise<void> | null = null;\nconst languageCache = new Map<string, Language>();\n\n// The `--grammars <dir>` override, set per process (and per parse worker, via the\n// parse payload) before parsing. Configured by a command option, not an env var.\nlet grammarsOverride: string | undefined;\nexport function setGrammarsOverride(dir?: string): void {\n grammarsOverride = dir ? path.resolve(dir) : undefined;\n}\n\nfunction thisDir(): string {\n return path.dirname(fileURLToPath(import.meta.url));\n}\n\nlet cachedTreeSitterWasmsDir: string | null = null;\nfunction treeSitterWasmsOutDir(): string {\n if (cachedTreeSitterWasmsDir) return cachedTreeSitterWasmsDir;\n const pkgJson = require.resolve('tree-sitter-wasms/package.json');\n cachedTreeSitterWasmsDir = path.join(path.dirname(pkgJson), 'out');\n return cachedTreeSitterWasmsDir;\n}\n\n/**\n * The grammar-set version string recorded in provenance (determinism input).\n * The `+swift-vendored` suffix marks the vendored tree-sitter-swift build (see\n * vendor/README.md) that replaces the tree-sitter-wasms prebuilt; bump the\n * suffix if a vendored grammar is regenerated, so caches invalidate.\n */\nexport function grammarSetVersion(): string {\n try {\n const pkgJson = require.resolve('tree-sitter-wasms/package.json');\n const { version } = JSON.parse(fs.readFileSync(pkgJson, 'utf8')) as { version: string };\n return `tree-sitter-wasms@${version}+swift-vendored@0.7.1`;\n } catch {\n return 'tree-sitter-wasms@unknown+swift-vendored@0.7.1';\n }\n}\n\n/**\n * Candidate directories holding grammar .wasm files, highest priority first.\n * The vendor/ dirs are OVERLAYS holding only rebuilt replacements for\n * defective prebuilts (vendor/README.md) — they outrank the tree-sitter-wasms\n * fallback so dev/test runs without a prior `pnpm build` never load a\n * known-bad prebuilt, but they are never a complete grammar set.\n */\nfunction grammarDirs(): string[] {\n const dirs: string[] = [];\n // the `--grammars <dir>` override (offline / air-gapped), if set\n if (grammarsOverride) dirs.push(grammarsOverride);\n // ../grammars relative to dist/ (bundled in the published artifact)\n dirs.push(path.join(thisDir(), '..', 'grammars'));\n dirs.push(path.join(thisDir(), 'grammars'));\n // vendored overlays\n dirs.push(path.join(thisDir(), '..', 'vendor')); // from dist/\n dirs.push(path.join(thisDir(), '..', '..', 'vendor')); // from src/engine/\n // node_modules fallback\n try {\n dirs.push(treeSitterWasmsOutDir());\n } catch {\n /* tree-sitter-wasms not resolvable — rely on the dirs above */\n }\n return dirs;\n}\n\nconst isVendorOverlay = (dir: string): boolean => path.basename(dir) === 'vendor';\n\n/**\n * The first existing directory that holds a grammar .wasm set. Skips the\n * vendor overlays — they hold single replacement files, never a full set.\n * For a complete per-language resolution use resolvedGrammarFiles().\n */\nexport function grammarsSourceDir(): string | null {\n for (const dir of grammarDirs()) {\n if (isVendorOverlay(dir)) continue;\n if (fs.existsSync(dir) && fs.readdirSync(dir).some((f) => f.endsWith('.wasm'))) return dir;\n }\n return null;\n}\n\nfunction resolveGrammarFile(grammarFile: string): string {\n const fileName = `${grammarFile}.wasm`;\n for (const dir of grammarDirs()) {\n const candidate = path.join(dir, fileName);\n if (fs.existsSync(candidate)) return candidate;\n }\n throw new Error(\n `grammar \"${fileName}\" not found. Looked in: ${grammarDirs().join(', ')}. ` +\n `Pass --grammars <dir> pointing at a directory of grammar .wasm files.`,\n );\n}\n\n/**\n * Every registered language's grammar .wasm resolved through the same\n * priority order the parser uses (override > bundled > vendor overlay >\n * tree-sitter-wasms). Used by `vg bundle` so an air-gapped bundle always\n * carries the exact grammar files a scan would load.\n */\nexport function resolvedGrammarFiles(): { fileName: string; absPath: string }[] {\n return LANGUAGES.map((l) => ({\n fileName: `${l.grammarFile}.wasm`,\n absPath: resolveGrammarFile(l.grammarFile),\n }));\n}\n\nasync function ensureParserInit(): Promise<void> {\n if (!parserInit) parserInit = Parser.init();\n await parserInit;\n}\n\n/** Load (and cache) the tree-sitter Language for a vg language id. */\nexport async function loadLanguage(langId: string): Promise<Language> {\n const cached = languageCache.get(langId);\n if (cached) return cached;\n const def = langById(langId);\n if (!def) throw new Error(`unknown language id \"${langId}\"`);\n await ensureParserInit();\n const wasmPath = resolveGrammarFile(def.grammarFile);\n const language = await Language.load(fs.readFileSync(wasmPath));\n languageCache.set(langId, language);\n return language;\n}\n\n/** Construct a fresh parser bound to a language. */\nexport async function parserFor(def: LanguageDef): Promise<Parser> {\n const language = await loadLanguage(def.id);\n const parser = new Parser();\n parser.setLanguage(language);\n return parser;\n}\n","import type { NodeKind } from '../schema.js';\n\n/**\n * Per-language tree-sitter queries driving extraction. Each query uses a small,\n * fixed capture vocabulary so the generic extractor (parse.ts) stays\n * language-agnostic:\n *\n * @def — a definition node (its kind comes from the rule)\n * @name — the name node of that definition\n * @callee — a called name node (a call edge, resolved later)\n * @source — an import/require source string node (incl. quotes)\n * @extends / @implements — a base type name node (a heritage edge)\n *\n * Queries are best-effort per language: if a pattern fails to compile against a\n * grammar it is skipped (logged once), so one bad rule never disables a whole\n * language. Coverage is deepest for the TS/JS-first audience and a solid\n * baseline elsewhere — honestly recorded as `heuristic` resolution.\n */\n\nexport interface DefRule {\n kind: NodeKind;\n query: string;\n}\n\nexport interface LangQueries {\n defs: DefRule[];\n calls: string[];\n imports: string[];\n heritage: string[];\n /** Assert/guard expressions captured as @guard → invariant facts (--deep). */\n guards?: string[];\n /**\n * Constructor-parameter / field declared types captured as @typeref — a\n * structural dependency (e.g. Spring constructor/field injection) that never\n * appears as a `call_expression`/`object_creation_expression`, so it needs its\n * own capture. Resolved to a `references` edge (not `call`) in resolve.ts.\n */\n typeRefs?: string[];\n /**\n * Namespace declarations captured as @namespace — the namespaces a file\n * declares its types in. For languages where a namespace is decoupled from\n * the directory (C#), this lets the resolver connect a cross-directory\n * reference when the caller `using`-imports that namespace. Absent for\n * languages that have no namespace concept or where package == directory.\n */\n namespaces?: string[];\n}\n\n// assert-like call detection, shared by the C-family languages.\nconst ASSERT_CALLS = [\n '(call_expression function: (identifier) @_g (#match? @_g \"^(assert|invariant|require|precondition|invariantViolation)$\")) @guard',\n];\n\nconst TS_JS_CALLS = [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (member_expression property: (property_identifier) @callee))',\n '(new_expression constructor: (identifier) @callee)',\n];\n\nconst TS_JS_IMPORTS = [\n '(import_statement source: (string) @source)',\n '(call_expression function: (identifier) @_req (#eq? @_req \"require\") arguments: (arguments (string) @source))',\n];\n\nconst TYPESCRIPT: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_declaration name: (identifier) @name) @def' },\n {\n kind: 'function',\n query: '(generator_function_declaration name: (identifier) @name) @def',\n },\n {\n kind: 'function',\n query:\n '(variable_declarator name: (identifier) @name value: [(arrow_function) (function_expression)]) @def',\n },\n { kind: 'method', query: '(method_definition name: (property_identifier) @name) @def' },\n { kind: 'class', query: '(class_declaration name: (type_identifier) @name) @def' },\n { kind: 'class', query: '(abstract_class_declaration name: (type_identifier) @name) @def' },\n { kind: 'interface', query: '(interface_declaration name: (type_identifier) @name) @def' },\n ],\n calls: TS_JS_CALLS,\n imports: TS_JS_IMPORTS,\n heritage: [\n '(class_heritage (extends_clause value: (identifier) @extends))',\n '(class_heritage (extends_clause value: (member_expression property: (property_identifier) @extends)))',\n '(class_heritage (implements_clause (type_identifier) @implements))',\n '(extends_type_clause type: (type_identifier) @extends)',\n ],\n guards: ASSERT_CALLS,\n};\n\nconst JAVASCRIPT: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_declaration name: (identifier) @name) @def' },\n {\n kind: 'function',\n query: '(generator_function_declaration name: (identifier) @name) @def',\n },\n {\n kind: 'function',\n query:\n '(variable_declarator name: (identifier) @name value: [(arrow_function) (function_expression)]) @def',\n },\n { kind: 'method', query: '(method_definition name: (property_identifier) @name) @def' },\n { kind: 'class', query: '(class_declaration name: (identifier) @name) @def' },\n ],\n calls: TS_JS_CALLS,\n imports: TS_JS_IMPORTS,\n heritage: [\n '(class_heritage (identifier) @extends)',\n '(class_heritage (member_expression property: (property_identifier) @extends))',\n ],\n guards: ASSERT_CALLS,\n};\n\nconst PYTHON: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_definition name: (identifier) @name) @def' },\n { kind: 'class', query: '(class_definition name: (identifier) @name) @def' },\n ],\n calls: [\n '(call function: (identifier) @callee)',\n '(call function: (attribute attribute: (identifier) @callee))',\n ],\n imports: [\n '(import_statement name: (dotted_name) @source)',\n '(import_from_statement module_name: (dotted_name) @source)',\n // Relative imports (`from .models import X`, `from ..core.utils import Y`) —\n // the module is a `relative_import` node, not a `dotted_name`. These are the\n // bulk of intra-package edges and were previously dropped entirely.\n '(import_from_statement module_name: (relative_import) @source)',\n ],\n heritage: ['(class_definition superclasses: (argument_list (identifier) @extends))'],\n guards: ['(assert_statement) @guard'],\n};\n\nconst GO: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_declaration name: (identifier) @name) @def' },\n { kind: 'method', query: '(method_declaration name: (field_identifier) @name) @def' },\n { kind: 'class', query: '(type_declaration (type_spec name: (type_identifier) @name)) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (selector_expression field: (field_identifier) @callee))',\n ],\n imports: ['(import_spec path: (interpreted_string_literal) @source)'],\n heritage: [],\n};\n\nconst JAVA: LangQueries = {\n defs: [\n { kind: 'method', query: '(method_declaration name: (identifier) @name) @def' },\n { kind: 'method', query: '(constructor_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(class_declaration name: (identifier) @name) @def' },\n { kind: 'interface', query: '(interface_declaration name: (identifier) @name) @def' },\n ],\n calls: ['(method_invocation name: (identifier) @callee)', '(object_creation_expression type: (type_identifier) @callee)'],\n imports: ['(import_declaration (scoped_identifier) @source)'],\n heritage: [\n '(superclass (type_identifier) @extends)',\n '(super_interfaces (type_list (type_identifier) @implements))',\n ],\n // Spring-style dependency injection wires a collaborator via a constructor\n // parameter or a field, never a `new`/method call — so without these, an\n // injected repository/service shows zero callers even when it is the sole\n // reason five other classes exist.\n typeRefs: [\n '(constructor_declaration parameters: (formal_parameters (formal_parameter type: (type_identifier) @typeref)))',\n '(field_declaration type: (type_identifier) @typeref)',\n ],\n // A Java package is a directory, so cross-directory (cross-package) DI\n // resolves through `import a.b.Foo`. Capturing the package lets the resolver\n // reach the implementation in another package when the caller imports it.\n namespaces: ['(package_declaration (scoped_identifier) @namespace)', '(package_declaration (identifier) @namespace)'],\n};\n\nconst RUST: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_item name: (identifier) @name) @def' },\n { kind: 'class', query: '(struct_item name: (type_identifier) @name) @def' },\n { kind: 'class', query: '(enum_item name: (type_identifier) @name) @def' },\n { kind: 'interface', query: '(trait_item name: (type_identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (field_expression field: (field_identifier) @callee))',\n '(call_expression function: (scoped_identifier name: (identifier) @callee))',\n ],\n imports: ['(use_declaration (scoped_identifier) @source)'],\n heritage: [],\n};\n\nconst C_SHARP: LangQueries = {\n defs: [\n { kind: 'method', query: '(method_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(class_declaration name: (identifier) @name) @def' },\n { kind: 'interface', query: '(interface_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(struct_declaration name: (identifier) @name) @def' },\n // Enums and records are load-bearing lookup targets in real C# codebases\n // (permission enums, DTO records); without these captures a `Privilege`-\n // style lookup only ever resolves via the literal text fallthrough.\n // 'class' is this engine's established kind for enum-like types (see the\n // Rust enum_item and C enum_specifier mappings).\n { kind: 'class', query: '(enum_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(record_declaration name: (identifier) @name) @def' },\n ],\n calls: [\n '(invocation_expression function: (member_access_expression name: (identifier) @callee))',\n '(invocation_expression function: (identifier) @callee)',\n // `new Foo(...)` is an instantiation dependency (the caller depends on Foo),\n // and it is how a test most directly links to the class under test — without\n // it a test that only constructs the service showed up as no coverage.\n '(object_creation_expression type: (identifier) @callee)',\n ],\n imports: ['(using_directive (qualified_name) @source)', '(using_directive (identifier) @source)'],\n heritage: ['(base_list (identifier) @extends)'],\n // Dependency-injection wiring: the interface a class depends on appears as a\n // constructor-parameter type or a readonly field type, never as a call — so\n // without these captures a controller/service injected through an interface\n // looks like it references nothing. Simple (identifier) types only; generics/\n // qualified names are left to a precise rung. Mirrors the Java DI captures.\n typeRefs: [\n '(constructor_declaration (parameter_list (parameter type: (identifier) @typeref)))',\n '(field_declaration (variable_declaration type: (identifier) @typeref))',\n ],\n // A namespace is decoupled from the directory in C#, so cross-namespace\n // resolution needs to know which namespace a file declares. Both block-scoped\n // (`namespace N { }`) and file-scoped (`namespace N;`) forms.\n namespaces: [\n '(namespace_declaration name: [(identifier) (qualified_name)] @namespace)',\n '(file_scoped_namespace_declaration name: [(identifier) (qualified_name)] @namespace)',\n ],\n};\n\nconst RUBY: LangQueries = {\n defs: [\n { kind: 'method', query: '(method name: (identifier) @name) @def' },\n { kind: 'class', query: '(class name: (constant) @name) @def' },\n { kind: 'module', query: '(module name: (constant) @name) @def' },\n ],\n calls: ['(call method: (identifier) @callee)', '(command method: (identifier) @callee)'],\n imports: [\n '(call method: (identifier) @_m (#match? @_m \"require\") arguments: (argument_list (string (string_content) @source)))',\n ],\n heritage: ['(class (superclass (constant) @extends))'],\n};\n\n\nconst PHP: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_definition name: (name) @name) @def' },\n {\n kind: 'function',\n query:\n '(assignment_expression left: (variable_name (name) @name) right: [(anonymous_function_creation_expression) (arrow_function)]) @def',\n },\n { kind: 'method', query: '(method_declaration name: (name) @name) @def' },\n { kind: 'class', query: '(class_declaration name: (name) @name) @def' },\n { kind: 'class', query: '(trait_declaration name: (name) @name) @def' },\n { kind: 'interface', query: '(interface_declaration name: (name) @name) @def' },\n ],\n calls: [\n '(function_call_expression function: (name) @callee)',\n '(member_call_expression name: (name) @callee)',\n '(nullsafe_member_call_expression name: (name) @callee)',\n '(scoped_call_expression name: (name) @callee)',\n '(object_creation_expression (name) @callee)',\n ],\n imports: [\n '(namespace_use_clause (qualified_name) @source)',\n '(namespace_use_clause (name) @source)',\n '[(require_expression (string) @source) (require_once_expression (string) @source) (include_expression (string) @source) (include_once_expression (string) @source)]',\n ],\n heritage: ['(base_clause (name) @extends)', '(class_interface_clause (name) @implements)'],\n // PHP namespaces are decoupled from directories (PSR-4 maps them, but the\n // resolver has no composer.json), so cross-namespace DI resolves through\n // `use`. Constructor-parameter and typed-property types are the injection\n // points.\n namespaces: ['(namespace_definition name: (namespace_name) @namespace)'],\n typeRefs: [\n '(simple_parameter type: (named_type (name) @typeref))',\n '(property_declaration type: (named_type (name) @typeref))',\n ],\n guards: ['(function_call_expression function: (name) @_g (#eq? @_g \"assert\")) @guard'],\n};\n\n// fwcd grammar: no field names — captures are positional; each def pattern binds\n// exactly one @name (params live under function_value_parameters). `class` vs\n// `interface` are both class_declaration, split by the anonymous keyword token.\nconst KOTLIN: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_declaration (simple_identifier) @name) @def' },\n { kind: 'class', query: '(class_declaration \"class\" (type_identifier) @name) @def' },\n { kind: 'interface', query: '(class_declaration \"interface\" (type_identifier) @name) @def' },\n { kind: 'class', query: '(object_declaration (type_identifier) @name) @def' },\n ],\n calls: [\n '(call_expression (simple_identifier) @callee)',\n '(call_expression (navigation_expression (navigation_suffix (simple_identifier) @callee)))',\n ],\n imports: ['(import_header (identifier) @source)'],\n // Kotlin: package for cross-package DI reachability; primary-constructor\n // `val` params and property types are the injection points.\n namespaces: ['(package_header (identifier) @namespace)'],\n typeRefs: [\n '(class_parameter (user_type (type_identifier) @typeref))',\n '(property_declaration (variable_declaration (user_type (type_identifier) @typeref)))',\n '(property_declaration (variable_declaration (nullable_type (user_type (type_identifier) @typeref))))',\n ],\n heritage: [\n '(delegation_specifier (constructor_invocation (user_type (type_identifier) @extends)))',\n '(delegation_specifier (user_type (type_identifier) @implements))',\n ],\n guards: ['(call_expression (simple_identifier) @_g (#match? @_g \"^(require|check|assert)$\")) @guard'],\n};\n\n// class/struct/enum/extension are ALL class_declaration; extensions carry\n// name: (user_type …) and so get their own (duplicate-named) class def node.\nconst SWIFT: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_declaration name: (simple_identifier) @name) @def' },\n { kind: 'method', query: '(protocol_function_declaration name: (simple_identifier) @name) @def' },\n { kind: 'class', query: '(class_declaration name: (type_identifier) @name) @def' },\n { kind: 'class', query: '(class_declaration name: (user_type (type_identifier) @name)) @def' },\n { kind: 'interface', query: '(protocol_declaration name: (type_identifier) @name) @def' },\n ],\n calls: [\n '(call_expression (simple_identifier) @callee)',\n '(call_expression (navigation_expression suffix: (navigation_suffix suffix: (simple_identifier) @callee)))',\n ],\n imports: ['(import_declaration (identifier) @source)'],\n heritage: ['(inheritance_specifier inherits_from: (user_type (type_identifier) @extends))'],\n // Swift: init-parameter and stored-property types are the injection points\n // (protocol-typed). Whole-module visibility (handled in resolve.ts) makes the\n // conforming implementation reachable cross-file.\n typeRefs: [\n '(parameter (user_type (type_identifier) @typeref))',\n '(type_annotation (user_type (type_identifier) @typeref))',\n ],\n guards: [\n '(call_expression (simple_identifier) @_g (#match? @_g \"^(assert|precondition|assertionFailure|preconditionFailure)$\")) @guard',\n ],\n};\n\nconst SCALA: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_definition name: (identifier) @name) @def' },\n { kind: 'method', query: '(function_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(class_definition name: (identifier) @name) @def' },\n { kind: 'interface', query: '(trait_definition name: (identifier) @name) @def' },\n { kind: 'module', query: '(object_definition name: (identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (field_expression field: (identifier) @callee))',\n ],\n imports: [\n '(import_declaration path: (stable_identifier) @source)',\n '(import_declaration path: (identifier) @source)',\n ],\n heritage: [\n '(extends_clause type: (type_identifier) @extends)',\n '(extends_clause type: (generic_type type: (type_identifier) @extends))',\n '(extends_clause type: (compound_type base: (type_identifier) @extends))',\n '(extends_clause type: (compound_type extra: (type_identifier) @implements))',\n ],\n // Scala: package for cross-package DI reachability; class-parameter and val\n // types are the injection points.\n namespaces: ['(package_clause name: (package_identifier) @namespace)'],\n typeRefs: [\n '(class_parameter type: (type_identifier) @typeref)',\n '(val_definition type: (type_identifier) @typeref)',\n ],\n guards: ['(call_expression function: (identifier) @_g (#match? @_g \"^(require|assert|assume)$\")) @guard'],\n};\n\n// No call_expression node in this grammar: a call is an identifier followed by a\n// sibling selector(argument_part), hence the anchored sibling patterns.\nconst DART: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_signature name: (identifier) @name) @def' },\n { kind: 'method', query: '(constructor_signature name: (identifier) @name) @def' },\n { kind: 'class', query: '(class_definition name: (identifier) @name) @def' },\n { kind: 'class', query: '(mixin_declaration (identifier) @name) @def' },\n ],\n calls: [\n '(_ (identifier) @callee . (selector (argument_part)))',\n '(_ (selector (unconditional_assignable_selector (identifier) @callee)) . (selector (argument_part)))',\n '(_ (selector (conditional_assignable_selector (identifier) @callee)) . (selector (argument_part)))',\n '(cascade_section (cascade_selector (identifier) @callee) . (argument_part))',\n ],\n imports: ['(import_specification (configurable_uri (uri (string_literal) @source)))'],\n // Dart: constructor/method parameter types and typed field declarations are\n // the injection points (Dart resolves cross-file via `import`, so no\n // namespace query is needed — the import rung already reaches the impl).\n typeRefs: [\n '(formal_parameter (type_identifier) @typeref)',\n '(declaration (type_identifier) @typeref)',\n ],\n heritage: [\n '(superclass (type_identifier) @extends)',\n '(interfaces (type_identifier) @implements)',\n '(mixins (type_identifier) @implements)',\n ],\n guards: ['(assert_statement) @guard'],\n};\n\nconst LUA: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_definition_statement name: (identifier) @name) @def' },\n { kind: 'function', query: '(function_definition_statement name: (variable field: (identifier) @name)) @def' },\n { kind: 'method', query: '(function_definition_statement name: (variable method: (identifier) @name)) @def' },\n { kind: 'function', query: '(local_function_definition_statement name: (identifier) @name) @def' },\n {\n kind: 'function',\n query:\n '(variable_assignment (variable_list (variable field: (identifier) @name)) (expression_list value: (function_definition))) @def',\n },\n {\n kind: 'function',\n query:\n '(local_variable_declaration (variable_list (variable name: (identifier) @name)) (expression_list value: (function_definition))) @def',\n },\n ],\n calls: [\n '(call function: (variable name: (identifier) @callee))',\n '(call function: (variable field: (identifier) @callee))',\n '(call function: (variable method: (identifier) @callee))',\n ],\n imports: [\n '(call function: (variable name: (identifier) @_r (#eq? @_r \"require\")) arguments: (argument_list (expression_list (string) @source)))',\n ],\n heritage: [],\n guards: ['(call function: (variable name: (identifier) @_g (#eq? @_g \"assert\"))) @guard'],\n};\n\n// Expression-based grammar: defmodule/def/defp are ordinary `call` nodes keyed by\n// their target identifier, so every rule is predicate-gated. A parenthesized def\n// head is itself a call and yields one benign same-line self-capture; the\n// resolver's qualified-call/enclosing-def rules keep it from becoming an edge.\nconst ELIXIR: LangQueries = {\n defs: [\n { kind: 'module', query: '(call target: (identifier) @_kw (#eq? @_kw \"defmodule\") (arguments (alias) @name)) @def' },\n {\n kind: 'function',\n query:\n '(call target: (identifier) @_kw (#match? @_kw \"^(def|defp|defmacro|defmacrop|defguard|defguardp)$\") (arguments (call target: (identifier) @name))) @def',\n },\n {\n kind: 'function',\n query:\n '(call target: (identifier) @_kw (#match? @_kw \"^(def|defp|defmacro|defmacrop)$\") (arguments (identifier) @name)) @def',\n },\n {\n kind: 'function',\n query:\n '(call target: (identifier) @_kw (#match? @_kw \"^(def|defp|defmacro|defmacrop|defguard|defguardp)$\") (arguments (binary_operator left: (call target: (identifier) @name)))) @def',\n },\n ],\n calls: [\n '(call target: (dot right: (identifier) @callee))',\n '(call target: (identifier) @callee (#not-match? @callee \"^(def|defp|defmacro|defmacrop|defmodule|defstruct|defprotocol|defimpl|defguard|defguardp|defdelegate|defexception|defoverridable|alias|import|require|use|quote|unquote|moduledoc|doc|spec|type|typep|typedoc|opaque|behaviour|impl|derive|enforce_keys|callback|macrocallback|optional_callbacks|compile|deprecated|dialyzer|external_resource|on_definition|on_load|after_compile|before_compile)$\"))',\n ],\n imports: [\n '(call target: (identifier) @_kw (#match? @_kw \"^(alias|import|require|use)$\") (arguments (alias) @source))',\n '(call target: (identifier) @_kw (#match? @_kw \"^(alias|import|require|use)$\") (arguments (dot left: (alias) @source)))',\n ],\n heritage: [],\n};\n\n// Every shell command is a `command` node, so callees include external binaries\n// (rsync, git, …). Safe: the resolver has no global-name fallback, so only\n// callees matching a reachable function_definition become edges.\nconst BASH: LangQueries = {\n defs: [{ kind: 'function', query: '(function_definition name: (word) @name) @def' }],\n calls: ['(command name: (command_name (word) @callee))'],\n imports: [\n '(command name: (command_name (word) @_c (#match? @_c \"^(source|\\\\.)$\")) argument: [(word) (string) (raw_string) (concatenation)] @source)',\n ],\n heritage: [],\n};\n\nconst ZIG: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(variable_declaration (identifier) @name (struct_declaration)) @def' },\n { kind: 'class', query: '(variable_declaration (identifier) @name (enum_declaration)) @def' },\n { kind: 'class', query: '(variable_declaration (identifier) @name (union_declaration)) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (field_expression member: (identifier) @callee))',\n ],\n imports: ['(builtin_function (builtin_identifier) @_i (#eq? @_i \"@import\") (arguments (string) @source))'],\n heritage: [],\n guards: ['(call_expression function: (field_expression member: (identifier) @_g (#eq? @_g \"assert\"))) @guard'],\n};\n\n// Only body-bearing function_definitions match (prototypes are `declaration`s).\nconst C_LANG: LangQueries = {\n defs: [\n {\n kind: 'function',\n query:\n '(function_definition declarator: [(function_declarator declarator: (identifier) @name) (pointer_declarator declarator: (function_declarator declarator: (identifier) @name))]) @def',\n },\n { kind: 'class', query: '(struct_specifier name: (type_identifier) @name body: (field_declaration_list)) @def' },\n { kind: 'class', query: '(enum_specifier name: (type_identifier) @name body: (enumerator_list)) @def' },\n { kind: 'class', query: '(type_definition declarator: (type_identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (field_expression field: (field_identifier) @callee))',\n ],\n imports: ['(preproc_include path: (string_literal) @source)', '(preproc_include path: (system_lib_string) @source)'],\n heritage: [],\n guards: ['(call_expression function: (identifier) @_g (#match? @_g \"^(assert|static_assert)$\")) @guard'],\n};\n\nconst CPP: LangQueries = {\n defs: [\n {\n kind: 'function',\n query:\n '(function_definition declarator: [(function_declarator declarator: (identifier) @name) (pointer_declarator declarator: (function_declarator declarator: (identifier) @name)) (reference_declarator (function_declarator declarator: (identifier) @name))]) @def',\n },\n { kind: 'method', query: '(function_definition declarator: (function_declarator declarator: (field_identifier) @name)) @def' },\n {\n kind: 'method',\n query:\n '(function_definition declarator: [(function_declarator declarator: (qualified_identifier name: (identifier) @name)) (pointer_declarator declarator: (function_declarator declarator: (qualified_identifier name: (identifier) @name))) (reference_declarator (function_declarator declarator: (qualified_identifier name: (identifier) @name)))]) @def',\n },\n {\n kind: 'method',\n query:\n '(function_definition declarator: (function_declarator declarator: (qualified_identifier name: (qualified_identifier name: (identifier) @name)))) @def',\n },\n { kind: 'class', query: '(class_specifier name: (type_identifier) @name body: (field_declaration_list)) @def' },\n { kind: 'class', query: '(struct_specifier name: (type_identifier) @name body: (field_declaration_list)) @def' },\n { kind: 'module', query: '(namespace_definition name: (namespace_identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (field_expression field: (field_identifier) @callee))',\n '(call_expression function: (qualified_identifier name: (identifier) @callee))',\n '(call_expression function: (qualified_identifier name: (qualified_identifier name: (identifier) @callee)))',\n '(new_expression type: (type_identifier) @callee)',\n ],\n imports: ['(preproc_include path: (string_literal) @source)', '(preproc_include path: (system_lib_string) @source)'],\n heritage: [\n '(base_class_clause (type_identifier) @extends)',\n '(base_class_clause (qualified_identifier name: (type_identifier) @extends))',\n ],\n guards: ['(call_expression function: (identifier) @_g (#match? @_g \"^(assert|static_assert)$\")) @guard'],\n};\n\nconst OBJC: LangQueries = {\n defs: [\n {\n kind: 'function',\n query: '(function_definition declarator: (function_declarator declarator: (identifier) @name)) @def',\n },\n // The selector segments are the method_definition's direct bare identifiers\n // (param names sit inside method_parameter); the first segment names it.\n { kind: 'method', query: '(method_definition (identifier) @name) @def' },\n { kind: 'class', query: '(class_implementation . (identifier) @name) @def' },\n { kind: 'interface', query: '(class_interface . (identifier) @name) @def' },\n // A @protocol is Objective-C's interface — without this it is not a node, so\n // conformance and protocol-typed DI cannot resolve.\n { kind: 'interface', query: '(protocol_declaration (identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(message_expression method: (identifier) @callee)',\n ],\n imports: [\n '(preproc_include path: (string_literal) @source)',\n '(preproc_include path: (system_lib_string) @source)',\n ],\n // Superclass (`: NSObject`) is `extends`; adopted protocols (`<Servicing>`,\n // captured as parameterized_arguments after the interface name) are the\n // `implements` relationship a DI call disambiguates through.\n heritage: [\n '(class_interface superclass: (identifier) @extends)',\n '(class_interface (parameterized_arguments (type_name (type_identifier) @implements)))',\n ],\n guards: ASSERT_CALLS,\n};\n\nconst OCAML: LangQueries = {\n defs: [\n // Only parameterised bindings — plain `let x = …` values would drown the\n // graph in constants.\n { kind: 'function', query: '(let_binding pattern: (value_name) @name (parameter)) @def' },\n { kind: 'module', query: '(module_binding name: (module_name) @name) @def' },\n ],\n calls: ['(application_expression function: (value_path (value_name) @callee))'],\n imports: ['(open_module (module_path (module_name) @source))'],\n heritage: [],\n};\n\nconst RESCRIPT: LangQueries = {\n defs: [\n { kind: 'function', query: '(let_binding pattern: (value_identifier) @name body: (function)) @def' },\n { kind: 'module', query: '(module_binding name: (module_identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (value_identifier) @callee)',\n '(call_expression function: (value_identifier_path (value_identifier) @callee))',\n ],\n imports: ['(open_statement (module_identifier) @source)'],\n heritage: [],\n};\n\nconst SOLIDITY: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_definition name: (identifier) @name) @def' },\n { kind: 'function', query: '(modifier_definition name: (identifier) @name) @def' },\n { kind: 'class', query: '(contract_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(library_declaration name: (identifier) @name) @def' },\n { kind: 'interface', query: '(interface_declaration name: (identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (member_expression property: (identifier) @callee))',\n '(emit_statement name: (identifier) @callee)',\n ],\n imports: ['(import_directive source: (string) @source)'],\n heritage: ['(inheritance_specifier ancestor: (user_defined_type (identifier) @extends))'],\n guards: [\n '(call_expression function: (identifier) @_g (#match? @_g \"^(require|assert)$\")) @guard',\n ],\n};\n\nconst BY_LANG: Record<string, LangQueries> = {\n ts: TYPESCRIPT,\n tsx: TYPESCRIPT,\n js: JAVASCRIPT,\n py: PYTHON,\n go: GO,\n java: JAVA,\n rust: RUST,\n cs: C_SHARP,\n rb: RUBY,\n php: PHP,\n kotlin: KOTLIN,\n swift: SWIFT,\n scala: SCALA,\n dart: DART,\n lua: LUA,\n ex: ELIXIR,\n sh: BASH,\n zig: ZIG,\n c: C_LANG,\n cpp: CPP,\n objc: OBJC,\n ocaml: OCAML,\n rescript: RESCRIPT,\n solidity: SOLIDITY,\n // Container formats (vue/svelte/astro/html/erb/ejs) have no entry here on\n // purpose: parse.ts routes them to their embedded language's queries.\n};\n\nexport function queriesFor(langId: string): LangQueries | undefined {\n return BY_LANG[langId];\n}\n","/**\n * Embedded-script container formats — files whose code lives in script regions\n * inside a non-code host document:\n *\n * - single-file components: Vue (`.vue`), Svelte (`.svelte`), Astro\n * (`.astro`, frontmatter fence + client `<script>`s);\n * - plain HTML with inline `<script>` blocks (`.html`/`.htm`);\n * - `<% … %>` templates: ERB (`.erb`, Ruby) and EJS (`.ejs`, JavaScript).\n *\n * The graph parses these by masking: every character outside the script\n * region(s) is replaced with a space (newlines kept), and the result is parsed\n * with the ordinary grammar of the embedded language. Masking preserves byte\n * offsets and line numbers exactly, so defs/calls/imports land on their true\n * positions in the original file and every downstream stage (resolution,\n * impact, display) works unchanged. Pure and deterministic: identical source →\n * identical mask.\n *\n * Template/markup content is intentionally out of scope — imports, exported\n * bindings, and calls all live in the script regions, which is what call/import\n * edges are built from.\n */\n\nexport interface EmbeddedScript {\n /** Effective grammar to parse the masked source with ('ts' | 'tsx' | 'js' | 'rb'). */\n langId: string;\n /** The original source with all non-script content blanked to spaces. */\n masked: string;\n}\n\ninterface ScriptTagSpec {\n kind: 'script-tags';\n /** Grammar when a block has no `lang` attribute. */\n defaultLang: string;\n /** Also extract a leading `---` frontmatter fence (Astro). */\n frontmatter?: boolean;\n}\n\ninterface DelimitedSpec {\n kind: 'delimited';\n /** The container's fixed embedded language. */\n lang: string;\n}\n\n/** Container language ids (must match the languages.ts registry entries). */\nconst CONTAINERS: Record<string, ScriptTagSpec | DelimitedSpec> = {\n vue: { kind: 'script-tags', defaultLang: 'js' },\n svelte: { kind: 'script-tags', defaultLang: 'js' },\n astro: { kind: 'script-tags', defaultLang: 'ts', frontmatter: true }, // frontmatter is TS\n html: { kind: 'script-tags', defaultLang: 'js' },\n erb: { kind: 'delimited', lang: 'rb' },\n ejs: { kind: 'delimited', lang: 'js' },\n};\n\nexport function isContainerLang(langId: string): boolean {\n return langId in CONTAINERS;\n}\n\ninterface Range {\n start: number;\n end: number;\n}\n\n// `<script …>body</script>` — non-greedy body, so multiple blocks (Vue's\n// `<script>` + `<script setup>`, Svelte's `context=\"module\"`) each match.\n// A void `<script src=… />` has an empty body and contributes nothing.\nconst SCRIPT_RE = /<script\\b([^>]*)>([\\s\\S]*?)<\\/script\\s*>/gi;\n\n// Astro frontmatter: a `---` fence on the first line, closed by a `---` line.\nconst ASTRO_FENCE_RE = /^---\\r?\\n([\\s\\S]*?)(\\r?\\n)---(?:\\r?\\n|$)/;\n\n// `<% code %>` regions (ERB/EJS): `=`/`-` output tags included, `#`/`%%`\n// comment/escape forms excluded, optional `-`/`_` trim markers kept out of the\n// body. Non-greedy to the first closer, the standard template behaviour.\nconst DELIMITED_RE = /<%(?![%#])[=\\-_]?([\\s\\S]*?)[-_]?%>/g;\n\nconst LANG_ATTR_RE = /\\blang\\s*=\\s*[\"']?([A-Za-z]+)/i;\n\n/** Rank grammars so mixed blocks pick the most permissive one (tsx ⊇ ts ⊇ js for our queries). */\nconst GRAMMAR_RANK: Record<string, number> = { js: 0, ts: 1, tsx: 2 };\n\nfunction grammarForAttr(attrs: string, fallback: string): string {\n const m = LANG_ATTR_RE.exec(attrs);\n if (!m) return fallback;\n const lang = m[1].toLowerCase();\n if (lang === 'ts' || lang === 'typescript') return 'ts';\n if (lang === 'tsx') return 'tsx';\n return 'js'; // js / jsx / anything exotic → the JS grammar\n}\n\n/**\n * Extract the script regions of a container-format file. Returns null for\n * non-container language ids (the caller parses the source as-is). A container\n * file with no script region returns a fully-blank mask — the file still gets\n * a graph node, it just defines nothing.\n */\nexport function extractEmbeddedScript(langId: string, source: string): EmbeddedScript | null {\n const spec = CONTAINERS[langId];\n if (!spec) return null;\n\n if (spec.kind === 'delimited') {\n const ranges: Range[] = [];\n for (const m of source.matchAll(DELIMITED_RE)) {\n const body = m[1] ?? '';\n if (!body.trim()) continue;\n const start = m.index + m[0].indexOf(body);\n ranges.push({ start, end: start + body.length });\n }\n // Fragments are expressions/statements cut from one template — terminate\n // each region (on the trim/closing char, still inside the match, so the\n // length is unchanged) so `<%= a %> … <%= b %>` on one line parses as two\n // statements rather than one garbled one.\n return { langId: spec.lang, masked: mask(source, ranges, { terminate: true }) };\n }\n\n const ranges: Range[] = [];\n let grammar = spec.defaultLang;\n\n if (spec.frontmatter) {\n const fence = ASTRO_FENCE_RE.exec(source);\n if (fence) {\n const start = fence[0].indexOf('\\n') + 1;\n ranges.push({ start, end: start + fence[1].length });\n }\n }\n\n for (const m of source.matchAll(SCRIPT_RE)) {\n const attrs = m[1] ?? '';\n const body = m[2] ?? '';\n if (!body) continue;\n const start = m.index + '<script'.length + attrs.length + 1; // past the tag's '>'\n ranges.push({ start, end: start + body.length });\n const g = grammarForAttr(attrs, spec.defaultLang);\n if (GRAMMAR_RANK[g] > GRAMMAR_RANK[grammar]) grammar = g;\n }\n\n return { langId: grammar, masked: mask(source, ranges) };\n}\n\n/**\n * Blank everything outside `ranges` to spaces, preserving newlines (and CR).\n * With `terminate`, the character right after each range (part of the closing\n * delimiter, never a newline) becomes `;` — a statement boundary for the\n * embedded language.\n */\nfunction mask(source: string, ranges: Range[], opts: { terminate?: boolean } = {}): string {\n const out = new Array<string>(source.length);\n for (let i = 0; i < source.length; i++) {\n const ch = source[i];\n out[i] = ch === '\\n' || ch === '\\r' ? ch : ' ';\n }\n for (const r of ranges) {\n for (let i = r.start; i < r.end && i < source.length; i++) out[i] = source[i];\n if (opts.terminate && r.end < source.length && out[r.end] === ' ') out[r.end] = ';';\n }\n return out.join('');\n}\n","import { blake3 } from '@noble/hashes/blake3.js';\nimport { bytesToHex } from '@noble/hashes/utils.js';\n\n/**\n * Content hashing — the bedrock of vg's determinism contract.\n *\n * Ids are blake3 over a canonical payload. blake3 is pure-WASM/JS (no native\n * build, no platform variance), so identical input → identical id on every\n * machine. We never let timestamps, RNG, locale, or filesystem order into a\n * hashed payload (VG-ENGINE-TEARDOWN.md §5).\n */\n\nconst encoder = new TextEncoder();\n\n/** Full hex digest of a UTF-8 string. */\nexport function hashString(input: string): string {\n return bytesToHex(blake3(encoder.encode(input)));\n}\n\n/** Full hex digest of raw bytes (file contents). */\nexport function hashBytes(input: Uint8Array): string {\n return bytesToHex(blake3(input));\n}\n\n/**\n * A short, collision-resistant id for nodes/edges. 16 bytes (128 bits) of\n * blake3 is ample for repo-scale graphs and keeps `graph.json` compact and\n * human-diffable.\n */\nexport function shortId(input: string): string {\n return bytesToHex(blake3(encoder.encode(input), { dkLen: 16 }));\n}\n\n/**\n * Canonical JSON: object keys sorted recursively, no insignificant whitespace.\n * The single source of truth for \"what bytes get hashed\" so two runs that see\n * the same logical payload produce byte-identical input to blake3.\n */\nexport function canonicalize(value: unknown): string {\n return JSON.stringify(sortKeys(value));\n}\n\nfunction sortKeys(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortKeys);\n if (value && typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(value as Record<string, unknown>).sort()) {\n out[key] = sortKeys((value as Record<string, unknown>)[key]);\n }\n return out;\n }\n return value;\n}\n","import { Query, type Node, type Language } from 'web-tree-sitter';\nimport { parserFor, loadLanguage } from './grammars.js';\nimport { langById } from './languages.js';\nimport { queriesFor, type DefRule } from './queries.js';\nimport { extractEmbeddedScript } from './sfc.js';\nimport { hashString } from './hash.js';\nimport { redactSecrets } from '../core-open/utils/redact.js';\nimport type { FileParse, RawCall, RawDef, RawGuard, RawHeritage, RawImport, RawTypeRef } from './types.js';\n\n/**\n * Parse a single file's source into the raw symbol/edge tables. Pure and\n * deterministic: identical (lang, source) → identical FileParse. Cross-file\n * resolution is a later stage (resolve.ts); here we only see one file.\n */\n\n// Compiled queries are cached per (lang, querySource) — compilation is the\n// expensive part and queries are reused across every file of a language.\nconst compiledCache = new Map<string, Query | null>();\n\nfunction compile(lang: Language, langId: string, source: string): Query | null {\n const key = `${langId}::${source}`;\n if (compiledCache.has(key)) return compiledCache.get(key) ?? null;\n let q: Query | null = null;\n try {\n q = new Query(lang, source);\n } catch {\n q = null; // grammar doesn't support this pattern — skip it gracefully\n }\n compiledCache.set(key, q);\n return q;\n}\n\nfunction namedCapture(\n captures: { name: string; node: Node }[],\n name: string,\n): Node | undefined {\n return captures.find((c) => c.name === name)?.node;\n}\n\n/**\n * Wrapper node types that sit between a *qualified* callee identifier and the\n * call node (`obj.foo()` / `pkg::foo()` / `recv.foo()` across the grammars).\n * A bare call's identifier hangs directly off the call node instead.\n */\nconst MEMBER_PARENT_TYPES = new Set([\n 'member_expression', // ts/js: obj.foo()\n 'attribute', // python: obj.foo()\n 'selector_expression', // go: pkg.Foo()\n 'field_expression', // rust/scala/c/cpp/zig: recv.foo()\n 'scoped_identifier', // rust: Type::foo()\n 'member_access_expression', // c#: obj.Foo()\n 'qualified_identifier', // c++: ns::f(), Type::m()\n 'dot', // elixir: Mod.fun()\n 'navigation_suffix', // kotlin/swift: recv.foo()\n 'member_call_expression', // php: $x->m()\n 'nullsafe_member_call_expression', // php: $x?->m()\n 'scoped_call_expression', // php: X::m()\n 'unconditional_assignable_selector', // dart: x.foo()\n 'conditional_assignable_selector', // dart: x?.foo()\n 'cascade_selector', // dart: x..foo()\n 'value_identifier_path', // rescript: Mod.foo() (only exists for qualified calls)\n]);\n\n/**\n * Was this callee identifier part of a qualified call (`x.foo()`) rather than a\n * bare one (`foo()`)? The queries capture only the trailing name, so the\n * resolver needs this bit to know a same-file def with the same short name is\n * NOT evidence — the receiver points elsewhere (see resolve.ts).\n */\nfunction isQualifiedCallee(node: Node): boolean {\n const parent = node.parent;\n if (!parent) return false;\n if (MEMBER_PARENT_TYPES.has(parent.type)) return true;\n // Java `method_invocation` and Ruby `call` keep receiver and name on the call\n // node itself — qualified iff the receiver/object field is present.\n if (parent.type === 'method_invocation') return parent.childForFieldName('object') != null;\n // Ruby `call` carries a `receiver` field when qualified; Python's `call` has\n // no such field (its qualified form is the `attribute` wrapper above), and\n // Elixir's `call` has none either (its qualified form is the `dot` wrapper).\n if (parent.type === 'call') return parent.childForFieldName('receiver') != null;\n // Lua wraps every callee in `variable`; qualified iff a `table` receiver exists\n // (`repo.fetch()` / `repo:method()` carry table:, bare `foo()` has only name:).\n if (parent.type === 'variable') return parent.childForFieldName('table') != null;\n // OCaml wraps every callee in `value_path`; qualified iff a module path is\n // present (`Mod.f x` has two named children, bare `f x` has one).\n if (parent.type === 'value_path') return parent.namedChildCount > 1;\n // ObjC message sends: `[obj doThing]` points elsewhere, but `[self …]` /\n // `[super …]` stay within the class — same-file evidence still counts there.\n if (parent.type === 'message_expression') {\n const recv = parent.childForFieldName('receiver');\n return recv != null && recv.text !== 'self' && recv.text !== 'super';\n }\n return false;\n}\n\nfunction signatureOf(source: string, def: Node, langId: string): string {\n // The text up to the body opening, single-lined, bounded — a deterministic,\n // human-meaningful signature without dragging in the whole body.\n // - Brace languages: cut at the body `{`.\n // - Python: cut at the def-terminating `:` at bracket-depth 0 (so a `:` inside\n // typed params / generics / the `-> Dict[...]` return type doesn't cut it,\n // and the docstring/body is excluded).\n // - Ruby: the header is the first line.\n const full = source.slice(def.startIndex, def.endIndex);\n let head: string;\n if (langId === 'py') head = pythonHeader(full);\n // Ruby/Elixir: `do…end` bodies (and Elixir `%{}` default args would break a\n // brace cut) — the header is the first line.\n else if (langId === 'rb' || langId === 'ex') head = full.split('\\n')[0];\n else {\n const braceIdx = full.indexOf('{');\n head = braceIdx >= 0 ? full.slice(0, braceIdx) : full.split('\\n')[0];\n }\n head = head.replace(/\\s+/g, ' ').trim().replace(/[:{]\\s*$/, '').trim();\n return head.length > 200 ? `${head.slice(0, 197)}...` : head;\n}\n\n/**\n * A short doc summary for a definition — the leading doc-comment (JSDoc/TSDoc,\n * `//`, `///`, `#`) directly above it, or (Python) the body docstring. Gives a\n * tersely-named symbol real prose for semantic search. Deterministic, marker-\n * stripped, whitespace-collapsed, truncated; never the full body. Returns\n * undefined when there is no doc.\n */\nfunction scrubbedDoc(source: string, def: Node, langId: string): string | undefined {\n const doc = docOf(source, def, langId);\n return doc === undefined ? undefined : redactSecrets(doc);\n}\n\nfunction docOf(source: string, def: Node, langId: string): string | undefined {\n const lines = source.split('\\n');\n if (langId === 'py') return pythonDocstring(lines, def.startPosition.row);\n return leadingComment(lines, def.startPosition.row);\n}\n\n/** Contiguous comment lines directly above `row` (0-based), markers stripped. */\nfunction leadingComment(lines: string[], row: number): string | undefined {\n const collected: string[] = [];\n for (let r = row - 1; r >= 0; r--) {\n const line = lines[r].trim();\n if (line === '') break; // a blank line detaches the comment\n if (/^(\\/\\/|\\/\\*\\*?|\\*\\/?|#|;|--)/.test(line)) collected.unshift(line);\n else break;\n }\n if (!collected.length) return undefined;\n const text = collected\n .join('\\n')\n .replace(/\\/\\*\\*?|\\*\\//g, ' ') // /** and */\n .replace(/^\\s*[*]\\s?/gm, ' ') // leading * in block comments\n .replace(/^\\s*(\\/\\/+|#+|;+|--)\\s?/gm, ' ') // line-comment markers\n .replace(/@\\w+/g, ' '); // drop JSDoc tags (@param, @returns…)\n return clip(text);\n}\n\n/** The first string literal in a Python body (the docstring), if present. */\nfunction pythonDocstring(lines: string[], row: number): string | undefined {\n // Find the header's terminating line (ends with ':'), then the first non-blank line.\n let r = row;\n while (r < lines.length && !/:\\s*(#.*)?$/.test(lines[r])) r++;\n let j = r + 1;\n while (j < lines.length && lines[j].trim() === '') j++;\n const first = lines[j]?.trim() ?? '';\n const m = /^[rubfRUBF]{0,2}(\"\"\"|''')/.exec(first);\n if (!m) return undefined;\n const q = m[1];\n let rest = first.slice(first.indexOf(q) + 3);\n if (rest.includes(q)) return clip(rest.slice(0, rest.indexOf(q))); // single-line docstring\n const parts = [rest];\n for (let k = j + 1; k < lines.length; k++) {\n const idx = lines[k].indexOf(q);\n if (idx >= 0) {\n parts.push(lines[k].slice(0, idx));\n break;\n }\n parts.push(lines[k]);\n }\n return clip(parts.join(' '));\n}\n\nfunction clip(s: string): string | undefined {\n const t = s.replace(/\\s+/g, ' ').trim();\n if (!t) return undefined;\n return t.length > 200 ? `${t.slice(0, 197)}...` : t;\n}\n\n/** Python def/class header up to the terminating `:` at bracket-depth 0. */\nfunction pythonHeader(full: string): string {\n let depth = 0;\n for (let i = 0; i < full.length; i++) {\n const c = full[i];\n if (c === '(' || c === '[' || c === '{') depth++;\n else if (c === ')' || c === ']' || c === '}') depth--;\n else if (c === ':' && depth === 0) return full.slice(0, i);\n }\n return full.split('\\n')[0];\n}\n\nexport async function parseSource(\n rel: string,\n langId: string,\n source: string,\n): Promise<FileParse> {\n // Container formats (Vue/Svelte/Astro SFCs): parse the embedded script\n // region with the JS/TS grammar over a position-preserving mask, so every\n // offset/line below refers to the original file. The node keeps the\n // container's own lang id.\n const embedded = extractEmbeddedScript(langId, source);\n const effLangId = embedded?.langId ?? langId;\n const text = embedded?.masked ?? source;\n const def = langById(effLangId);\n const langQueries = queriesFor(effLangId);\n const hash = hashString(source);\n const result: FileParse = {\n rel,\n lang: langId,\n hash,\n bytes: Buffer.byteLength(source, 'utf8'),\n defs: [],\n calls: [],\n imports: [],\n heritage: [],\n typeRefs: [],\n guards: [],\n };\n if (!def || !langQueries) return result;\n\n const language = await loadLanguage(effLangId);\n const parser = await parserFor(def);\n const tree = parser.parse(text);\n if (!tree) return result;\n const root = tree.rootNode;\n\n // --- definitions ---\n const rawDefs: (RawDef & { _start: number; _end: number })[] = [];\n for (const rule of langQueries.defs) {\n collectDefs(language, effLangId, text, root, rule, rawDefs);\n }\n // Dedupe definitions that overlap on the same name+range (multiple rules can\n // match the same node, e.g. abstract vs plain class).\n const seen = new Set<string>();\n const deduped = rawDefs.filter((d) => {\n const key = `${d._start}:${d._end}:${d.name}:${d.kind}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n // Compute dotted qualified names by nesting (smallest enclosing def is parent).\n const byStart = [...deduped].sort((a, b) => a._start - b._start || b._end - a._end);\n for (const d of byStart) {\n const parent = enclosing(byStart, d._start, d._end);\n d.qualifiedName = parent ? `${parent.qualifiedName}.${d.name}` : d.name;\n }\n result.defs = byStart\n .map((d) => {\n const { _start, _end, ...rest } = d;\n void _start;\n void _end;\n return rest;\n })\n .sort(\n (a, b) =>\n a.startLine - b.startLine ||\n a.qualifiedName.localeCompare(b.qualifiedName) ||\n a.name.localeCompare(b.name),\n );\n\n // --- calls ---\n // A definition's own name node must never double as a call site: in\n // expression-based grammars (Elixir) a `def foo(…)` head is itself a `call`\n // node, which would fabricate a recursion edge for every definition.\n const defNameBytes = new Set<number>();\n for (const qsrc of langQueries.defs) {\n const q = compile(language, effLangId, qsrc.query);\n if (!q) continue;\n for (const m of q.matches(root)) {\n const nameNode = namedCapture(m.captures, 'name');\n if (nameNode) defNameBytes.add(nameNode.startIndex);\n }\n }\n const calls: RawCall[] = [];\n for (const qsrc of langQueries.calls) {\n const q = compile(language, effLangId, qsrc);\n if (!q) continue;\n for (const cap of q.captures(root)) {\n if (cap.name !== 'callee') continue;\n if (defNameBytes.has(cap.node.startIndex)) continue;\n calls.push({\n callee: cap.node.text,\n byte: cap.node.startIndex,\n line: cap.node.startPosition.row + 1,\n qualified: isQualifiedCallee(cap.node),\n });\n }\n }\n result.calls = calls.sort((a, b) => a.byte - b.byte || a.callee.localeCompare(b.callee));\n\n // --- imports ---\n const imports: RawImport[] = [];\n for (const qsrc of langQueries.imports) {\n const q = compile(language, effLangId, qsrc);\n if (!q) continue;\n for (const cap of q.captures(root)) {\n if (cap.name !== 'source') continue;\n imports.push({ source: stripQuotes(cap.node.text) });\n }\n }\n result.imports = dedupeImports(imports);\n\n // --- heritage (extends / implements) ---\n const heritage: RawHeritage[] = [];\n for (const qsrc of langQueries.heritage) {\n const q = compile(language, effLangId, qsrc);\n if (!q) continue;\n for (const cap of q.captures(root)) {\n if (cap.name !== 'extends' && cap.name !== 'implements') continue;\n heritage.push({ superName: cap.node.text, byte: cap.node.startIndex, kind: cap.name });\n }\n }\n result.heritage = heritage.sort(\n (a, b) =>\n a.byte - b.byte || a.kind.localeCompare(b.kind) || a.superName.localeCompare(b.superName),\n );\n\n // --- type references (constructor-param / field types → DI dependency edges) ---\n const typeRefs: RawTypeRef[] = [];\n for (const qsrc of langQueries.typeRefs ?? []) {\n const q = compile(language, effLangId, qsrc);\n if (!q) continue;\n for (const cap of q.captures(root)) {\n if (cap.name !== 'typeref') continue;\n typeRefs.push({ name: cap.node.text, byte: cap.node.startIndex });\n }\n }\n result.typeRefs = typeRefs.sort((a, b) => a.byte - b.byte || a.name.localeCompare(b.name));\n\n // --- namespaces declared by this file (C# cross-namespace resolution) ---\n const namespaces = new Set<string>();\n for (const qsrc of langQueries.namespaces ?? []) {\n const q = compile(language, effLangId, qsrc);\n if (!q) continue;\n for (const cap of q.captures(root)) {\n if (cap.name !== 'namespace') continue;\n const name = cap.node.text.trim();\n if (name) namespaces.add(name);\n }\n }\n if (namespaces.size) result.namespaces = [...namespaces].sort();\n\n // --- guards (assert-like expressions → invariant facts) ---\n const guards: RawGuard[] = [];\n for (const qsrc of langQueries.guards ?? []) {\n const q = compile(language, effLangId, qsrc);\n if (!q) continue;\n for (const cap of q.captures(root)) {\n if (cap.name !== 'guard') continue;\n const expr = cap.node.text.replace(/\\s+/g, ' ').trim();\n guards.push({ expr: expr.length > 160 ? `${expr.slice(0, 157)}...` : expr, line: cap.node.startPosition.row + 1 });\n }\n }\n result.guards = guards.sort((a, b) => a.line - b.line || a.expr.localeCompare(b.expr));\n\n tree.delete();\n return result;\n}\n\n/**\n * Dart splits a function into sibling signature + body nodes (and wraps class\n * methods in a method_signature). Return the trailing function_body so the def\n * span covers it — otherwise calls inside the body attribute to the file and\n * nested defs do not nest.\n */\nfunction dartBodyOf(defNode: Node): Node | null {\n if (!defNode.type.endsWith('_signature')) return null;\n if (defNode.nextNamedSibling?.type === 'function_body') return defNode.nextNamedSibling;\n const wrapper = defNode.parent;\n if (wrapper?.type === 'method_signature' && wrapper.nextNamedSibling?.type === 'function_body') {\n return wrapper.nextNamedSibling;\n }\n return null;\n}\n\nfunction collectDefs(\n language: Language,\n langId: string,\n source: string,\n root: Node,\n rule: DefRule,\n out: (RawDef & { _start: number; _end: number })[],\n): void {\n const q = compile(language, langId, rule.query);\n if (!q) return;\n for (const match of q.matches(root)) {\n const defNode = namedCapture(match.captures, 'def');\n const nameNode = namedCapture(match.captures, 'name');\n if (!defNode || !nameNode) continue;\n // Dart splits a function into sibling signature + body nodes; the def span\n // must cover the body or calls inside it would attribute to the file, and\n // nested defs would not nest.\n const spanEnd = dartBodyOf(defNode) ?? defNode;\n out.push({\n kind: rule.kind,\n name: nameNode.text,\n qualifiedName: nameNode.text, // refined after nesting is computed\n startLine: defNode.startPosition.row + 1,\n endLine: spanEnd.endPosition.row + 1,\n startByte: defNode.startIndex,\n endByte: spanEnd.endIndex,\n signature:\n rule.kind === 'function' || rule.kind === 'method'\n ? redactSecrets(signatureOf(source, defNode, langId))\n : undefined,\n // GUARDRAILS §1: signatures/docs are lifted verbatim from source and are\n // persisted (graph.json, `vg share` commits it) — scrub at ingest.\n doc: scrubbedDoc(source, defNode, langId),\n visibility: undefined,\n _start: defNode.startIndex,\n _end: spanEnd.endIndex,\n });\n }\n}\n\n/** The smallest def strictly containing [start,end) other than itself. */\nfunction enclosing(\n defs: { qualifiedName: string; _start: number; _end: number }[],\n start: number,\n end: number,\n): { qualifiedName: string } | undefined {\n let best: { qualifiedName: string; _start: number; _end: number } | undefined;\n for (const d of defs) {\n if (d._start === start && d._end === end) continue;\n if (d._start <= start && d._end >= end) {\n if (!best || d._end - d._start < best._end - best._start) best = d;\n }\n }\n return best;\n}\n\nfunction stripQuotes(text: string): string {\n return text.replace(/^['\"`]|['\"`]$/g, '');\n}\n\nfunction dedupeImports(imports: RawImport[]): RawImport[] {\n const seen = new Set<string>();\n const out: RawImport[] = [];\n for (const i of imports.sort((a, b) => a.source.localeCompare(b.source))) {\n if (seen.has(i.source)) continue;\n seen.add(i.source);\n out.push(i);\n }\n return out;\n}\n"]}
|
|
@@ -19,7 +19,7 @@ import * as zlib from 'zlib';
|
|
|
19
19
|
import { promisify } from 'util';
|
|
20
20
|
|
|
21
21
|
// src/version.ts
|
|
22
|
-
var VERSION = "2026.721.
|
|
22
|
+
var VERSION = "2026.721.3";
|
|
23
23
|
var TOP_LEVEL_NODE_MODULES = /^node_modules\/((?:@[^/]+\/)?[^/]+)$/;
|
|
24
24
|
function parsePackageLock(json) {
|
|
25
25
|
const out = /* @__PURE__ */ new Map();
|
|
@@ -11686,5 +11686,5 @@ async function writeTextFile2(filePath, content) {
|
|
|
11686
11686
|
}
|
|
11687
11687
|
|
|
11688
11688
|
export { PROJECT_TYPE_TO_OSV_ECOSYSTEM, VERSION, brandProgressBar, buildVersionTimelines, compactUiPurpose, computeDriftScore, computeRepoFingerprint, computeUpgradeImpact, detectVcs, driftBar, ensureDir2 as ensureDir, fetchRiskySymbols, fetchScanPreflight, findPackageAnyEcosystem, findPackageTimeline, findVersionCrossings, getChangelogSignals, gitHistoryAvailable, loadConfig, normalizeConstraint, parseDsn, pathExists2 as pathExists, prepareCompressedUpload, projectTypeToVulnEcosystem, readJsonFile2 as readJsonFile, resolveHead, resolveRepositoryName, runCoreScan, severityRank, titleBox, versionSatisfies, workingTreeDirty, writeDefaultConfig, writeJsonFile2 as writeJsonFile, writeTextFile2 as writeTextFile };
|
|
11689
|
-
//# sourceMappingURL=chunk-
|
|
11690
|
-
//# sourceMappingURL=chunk-
|
|
11689
|
+
//# sourceMappingURL=chunk-JLRF5TFA.js.map
|
|
11690
|
+
//# sourceMappingURL=chunk-JLRF5TFA.js.map
|