@saluzi/codegraph 0.2.0 → 0.2.2
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 +2 -2
- package/dist/bin/codegraph.d.ts +26 -0
- package/dist/bin/codegraph.d.ts.map +1 -0
- package/dist/bin/codegraph.js +2249 -0
- package/dist/bin/codegraph.js.map +1 -0
- package/dist/bin/command-supervision.d.ts +49 -0
- package/dist/bin/command-supervision.d.ts.map +1 -0
- package/dist/bin/command-supervision.js +95 -0
- package/dist/bin/command-supervision.js.map +1 -0
- package/dist/bin/fatal-handler.d.ts +20 -0
- package/dist/bin/fatal-handler.d.ts.map +1 -0
- package/dist/bin/fatal-handler.js +118 -0
- package/dist/bin/fatal-handler.js.map +1 -0
- package/dist/bin/node-version-check.d.ts +37 -0
- package/dist/bin/node-version-check.d.ts.map +1 -0
- package/dist/bin/node-version-check.js +79 -0
- package/dist/bin/node-version-check.js.map +1 -0
- package/dist/bin/uninstall.d.ts +14 -0
- package/dist/bin/uninstall.d.ts.map +1 -0
- package/dist/bin/uninstall.js +36 -0
- package/dist/bin/uninstall.js.map +1 -0
- package/dist/context/formatter.d.ts +30 -0
- package/dist/context/formatter.d.ts.map +1 -0
- package/dist/context/formatter.js +263 -0
- package/dist/context/formatter.js.map +1 -0
- package/dist/context/index.d.ts +119 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +1296 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/markers.d.ts +19 -0
- package/dist/context/markers.d.ts.map +1 -0
- package/dist/context/markers.js +22 -0
- package/dist/context/markers.js.map +1 -0
- package/dist/db/index.d.ts +201 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +493 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrations.d.ts +44 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +212 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/db/queries.d.ts +513 -0
- package/dist/db/queries.d.ts.map +1 -0
- package/dist/db/queries.js +1886 -0
- package/dist/db/queries.js.map +1 -0
- package/dist/db/schema.sql +194 -0
- package/dist/db/sqlite-adapter.d.ts +65 -0
- package/dist/db/sqlite-adapter.d.ts.map +1 -0
- package/dist/db/sqlite-adapter.js +274 -0
- package/dist/db/sqlite-adapter.js.map +1 -0
- package/dist/db/wal-valve.d.ts +106 -0
- package/dist/db/wal-valve.d.ts.map +1 -0
- package/dist/db/wal-valve.js +208 -0
- package/dist/db/wal-valve.js.map +1 -0
- package/dist/directory.d.ts +183 -0
- package/dist/directory.d.ts.map +1 -0
- package/dist/directory.js +797 -0
- package/dist/directory.js.map +1 -0
- package/dist/errors.d.ts +136 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +219 -0
- package/dist/errors.js.map +1 -0
- package/dist/extraction/astro-extractor.d.ts +79 -0
- package/dist/extraction/astro-extractor.d.ts.map +1 -0
- package/dist/extraction/astro-extractor.js +320 -0
- package/dist/extraction/astro-extractor.js.map +1 -0
- package/dist/extraction/cfml-extractor.d.ts +107 -0
- package/dist/extraction/cfml-extractor.d.ts.map +1 -0
- package/dist/extraction/cfml-extractor.js +494 -0
- package/dist/extraction/cfml-extractor.js.map +1 -0
- package/dist/extraction/dfm-extractor.d.ts +31 -0
- package/dist/extraction/dfm-extractor.d.ts.map +1 -0
- package/dist/extraction/dfm-extractor.js +151 -0
- package/dist/extraction/dfm-extractor.js.map +1 -0
- package/dist/extraction/extraction-version.d.ts +25 -0
- package/dist/extraction/extraction-version.d.ts.map +1 -0
- package/dist/extraction/extraction-version.js +28 -0
- package/dist/extraction/extraction-version.js.map +1 -0
- package/dist/extraction/function-ref.d.ts +118 -0
- package/dist/extraction/function-ref.d.ts.map +1 -0
- package/dist/extraction/function-ref.js +727 -0
- package/dist/extraction/function-ref.js.map +1 -0
- package/dist/extraction/generated-detection.d.ts +30 -0
- package/dist/extraction/generated-detection.d.ts.map +1 -0
- package/dist/extraction/generated-detection.js +83 -0
- package/dist/extraction/generated-detection.js.map +1 -0
- package/dist/extraction/grammars.d.ts +138 -0
- package/dist/extraction/grammars.d.ts.map +1 -0
- package/dist/extraction/grammars.js +631 -0
- package/dist/extraction/grammars.js.map +1 -0
- package/dist/extraction/index.d.ts +232 -0
- package/dist/extraction/index.d.ts.map +1 -0
- package/dist/extraction/index.js +2409 -0
- package/dist/extraction/index.js.map +1 -0
- package/dist/extraction/languages/arkts.d.ts +3 -0
- package/dist/extraction/languages/arkts.d.ts.map +1 -0
- package/dist/extraction/languages/arkts.js +127 -0
- package/dist/extraction/languages/arkts.js.map +1 -0
- package/dist/extraction/languages/c-cpp.d.ts +110 -0
- package/dist/extraction/languages/c-cpp.d.ts.map +1 -0
- package/dist/extraction/languages/c-cpp.js +837 -0
- package/dist/extraction/languages/c-cpp.js.map +1 -0
- package/dist/extraction/languages/cfquery.d.ts +12 -0
- package/dist/extraction/languages/cfquery.d.ts.map +1 -0
- package/dist/extraction/languages/cfquery.js +28 -0
- package/dist/extraction/languages/cfquery.js.map +1 -0
- package/dist/extraction/languages/cfscript.d.ts +3 -0
- package/dist/extraction/languages/cfscript.d.ts.map +1 -0
- package/dist/extraction/languages/cfscript.js +73 -0
- package/dist/extraction/languages/cfscript.js.map +1 -0
- package/dist/extraction/languages/cobol.d.ts +33 -0
- package/dist/extraction/languages/cobol.d.ts.map +1 -0
- package/dist/extraction/languages/cobol.js +499 -0
- package/dist/extraction/languages/cobol.js.map +1 -0
- package/dist/extraction/languages/csharp.d.ts +25 -0
- package/dist/extraction/languages/csharp.d.ts.map +1 -0
- package/dist/extraction/languages/csharp.js +175 -0
- package/dist/extraction/languages/csharp.js.map +1 -0
- package/dist/extraction/languages/dart.d.ts +3 -0
- package/dist/extraction/languages/dart.d.ts.map +1 -0
- package/dist/extraction/languages/dart.js +374 -0
- package/dist/extraction/languages/dart.js.map +1 -0
- package/dist/extraction/languages/erlang.d.ts +3 -0
- package/dist/extraction/languages/erlang.d.ts.map +1 -0
- package/dist/extraction/languages/erlang.js +350 -0
- package/dist/extraction/languages/erlang.js.map +1 -0
- package/dist/extraction/languages/go.d.ts +3 -0
- package/dist/extraction/languages/go.d.ts.map +1 -0
- package/dist/extraction/languages/go.js +111 -0
- package/dist/extraction/languages/go.js.map +1 -0
- package/dist/extraction/languages/index.d.ts +10 -0
- package/dist/extraction/languages/index.d.ts.map +1 -0
- package/dist/extraction/languages/index.js +71 -0
- package/dist/extraction/languages/index.js.map +1 -0
- package/dist/extraction/languages/java.d.ts +3 -0
- package/dist/extraction/languages/java.d.ts.map +1 -0
- package/dist/extraction/languages/java.js +315 -0
- package/dist/extraction/languages/java.js.map +1 -0
- package/dist/extraction/languages/javascript.d.ts +3 -0
- package/dist/extraction/languages/javascript.d.ts.map +1 -0
- package/dist/extraction/languages/javascript.js +106 -0
- package/dist/extraction/languages/javascript.js.map +1 -0
- package/dist/extraction/languages/kotlin.d.ts +3 -0
- package/dist/extraction/languages/kotlin.d.ts.map +1 -0
- package/dist/extraction/languages/kotlin.js +379 -0
- package/dist/extraction/languages/kotlin.js.map +1 -0
- package/dist/extraction/languages/lua.d.ts +3 -0
- package/dist/extraction/languages/lua.d.ts.map +1 -0
- package/dist/extraction/languages/lua.js +150 -0
- package/dist/extraction/languages/lua.js.map +1 -0
- package/dist/extraction/languages/luau.d.ts +3 -0
- package/dist/extraction/languages/luau.d.ts.map +1 -0
- package/dist/extraction/languages/luau.js +37 -0
- package/dist/extraction/languages/luau.js.map +1 -0
- package/dist/extraction/languages/nix.d.ts +3 -0
- package/dist/extraction/languages/nix.d.ts.map +1 -0
- package/dist/extraction/languages/nix.js +294 -0
- package/dist/extraction/languages/nix.js.map +1 -0
- package/dist/extraction/languages/objc.d.ts +3 -0
- package/dist/extraction/languages/objc.d.ts.map +1 -0
- package/dist/extraction/languages/objc.js +175 -0
- package/dist/extraction/languages/objc.js.map +1 -0
- package/dist/extraction/languages/pascal.d.ts +3 -0
- package/dist/extraction/languages/pascal.d.ts.map +1 -0
- package/dist/extraction/languages/pascal.js +77 -0
- package/dist/extraction/languages/pascal.js.map +1 -0
- package/dist/extraction/languages/php.d.ts +3 -0
- package/dist/extraction/languages/php.d.ts.map +1 -0
- package/dist/extraction/languages/php.js +196 -0
- package/dist/extraction/languages/php.js.map +1 -0
- package/dist/extraction/languages/python.d.ts +3 -0
- package/dist/extraction/languages/python.d.ts.map +1 -0
- package/dist/extraction/languages/python.js +56 -0
- package/dist/extraction/languages/python.js.map +1 -0
- package/dist/extraction/languages/r.d.ts +3 -0
- package/dist/extraction/languages/r.d.ts.map +1 -0
- package/dist/extraction/languages/r.js +314 -0
- package/dist/extraction/languages/r.js.map +1 -0
- package/dist/extraction/languages/ruby.d.ts +3 -0
- package/dist/extraction/languages/ruby.d.ts.map +1 -0
- package/dist/extraction/languages/ruby.js +149 -0
- package/dist/extraction/languages/ruby.js.map +1 -0
- package/dist/extraction/languages/rust.d.ts +3 -0
- package/dist/extraction/languages/rust.d.ts.map +1 -0
- package/dist/extraction/languages/rust.js +142 -0
- package/dist/extraction/languages/rust.js.map +1 -0
- package/dist/extraction/languages/scala.d.ts +3 -0
- package/dist/extraction/languages/scala.d.ts.map +1 -0
- package/dist/extraction/languages/scala.js +209 -0
- package/dist/extraction/languages/scala.js.map +1 -0
- package/dist/extraction/languages/solidity.d.ts +3 -0
- package/dist/extraction/languages/solidity.d.ts.map +1 -0
- package/dist/extraction/languages/solidity.js +293 -0
- package/dist/extraction/languages/solidity.js.map +1 -0
- package/dist/extraction/languages/swift.d.ts +3 -0
- package/dist/extraction/languages/swift.d.ts.map +1 -0
- package/dist/extraction/languages/swift.js +152 -0
- package/dist/extraction/languages/swift.js.map +1 -0
- package/dist/extraction/languages/terraform.d.ts +3 -0
- package/dist/extraction/languages/terraform.d.ts.map +1 -0
- package/dist/extraction/languages/terraform.js +641 -0
- package/dist/extraction/languages/terraform.js.map +1 -0
- package/dist/extraction/languages/typescript.d.ts +16 -0
- package/dist/extraction/languages/typescript.d.ts.map +1 -0
- package/dist/extraction/languages/typescript.js +167 -0
- package/dist/extraction/languages/typescript.js.map +1 -0
- package/dist/extraction/languages/vbnet.d.ts +11 -0
- package/dist/extraction/languages/vbnet.d.ts.map +1 -0
- package/dist/extraction/languages/vbnet.js +141 -0
- package/dist/extraction/languages/vbnet.js.map +1 -0
- package/dist/extraction/liquid-extractor.d.ts +59 -0
- package/dist/extraction/liquid-extractor.d.ts.map +1 -0
- package/dist/extraction/liquid-extractor.js +357 -0
- package/dist/extraction/liquid-extractor.js.map +1 -0
- package/dist/extraction/mybatis-extractor.d.ts +68 -0
- package/dist/extraction/mybatis-extractor.d.ts.map +1 -0
- package/dist/extraction/mybatis-extractor.js +300 -0
- package/dist/extraction/mybatis-extractor.js.map +1 -0
- package/dist/extraction/parse-pool.d.ts +152 -0
- package/dist/extraction/parse-pool.d.ts.map +1 -0
- package/dist/extraction/parse-pool.js +387 -0
- package/dist/extraction/parse-pool.js.map +1 -0
- package/dist/extraction/parse-worker.d.ts +8 -0
- package/dist/extraction/parse-worker.d.ts.map +1 -0
- package/dist/extraction/parse-worker.js +104 -0
- package/dist/extraction/parse-worker.js.map +1 -0
- package/dist/extraction/razor-extractor.d.ts +42 -0
- package/dist/extraction/razor-extractor.d.ts.map +1 -0
- package/dist/extraction/razor-extractor.js +285 -0
- package/dist/extraction/razor-extractor.js.map +1 -0
- package/dist/extraction/svelte-extractor.d.ts +56 -0
- package/dist/extraction/svelte-extractor.d.ts.map +1 -0
- package/dist/extraction/svelte-extractor.js +275 -0
- package/dist/extraction/svelte-extractor.js.map +1 -0
- package/dist/extraction/tree-sitter-helpers.d.ts +28 -0
- package/dist/extraction/tree-sitter-helpers.d.ts.map +1 -0
- package/dist/extraction/tree-sitter-helpers.js +153 -0
- package/dist/extraction/tree-sitter-helpers.js.map +1 -0
- package/dist/extraction/tree-sitter-types.d.ts +258 -0
- package/dist/extraction/tree-sitter-types.d.ts.map +1 -0
- package/dist/extraction/tree-sitter-types.js +10 -0
- package/dist/extraction/tree-sitter-types.js.map +1 -0
- package/dist/extraction/tree-sitter.d.ts +706 -0
- package/dist/extraction/tree-sitter.d.ts.map +1 -0
- package/dist/extraction/tree-sitter.js +6506 -0
- package/dist/extraction/tree-sitter.js.map +1 -0
- package/dist/extraction/vue-extractor.d.ts +51 -0
- package/dist/extraction/vue-extractor.d.ts.map +1 -0
- package/dist/extraction/vue-extractor.js +254 -0
- package/dist/extraction/vue-extractor.js.map +1 -0
- package/dist/extraction/wasm/tree-sitter-arkts.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-c_sharp.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-cfml.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-cfquery.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-cfscript.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-cobol.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-erlang.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-lua.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-luau.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-r.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-scala.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-terraform.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-vbnet.wasm +0 -0
- package/dist/extraction/wasm-runtime-flags.d.ts +38 -0
- package/dist/extraction/wasm-runtime-flags.d.ts.map +1 -0
- package/dist/extraction/wasm-runtime-flags.js +106 -0
- package/dist/extraction/wasm-runtime-flags.js.map +1 -0
- package/dist/graph/index.d.ts +8 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +13 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/queries.d.ts +106 -0
- package/dist/graph/queries.d.ts.map +1 -0
- package/dist/graph/queries.js +339 -0
- package/dist/graph/queries.js.map +1 -0
- package/dist/graph/traversal.d.ts +127 -0
- package/dist/graph/traversal.d.ts.map +1 -0
- package/dist/graph/traversal.js +599 -0
- package/dist/graph/traversal.js.map +1 -0
- package/dist/index.d.ts +644 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1492 -0
- package/dist/index.js.map +1 -0
- package/dist/installer/config-writer.d.ts +28 -0
- package/dist/installer/config-writer.d.ts.map +1 -0
- package/dist/installer/config-writer.js +91 -0
- package/dist/installer/config-writer.js.map +1 -0
- package/dist/installer/index.d.ts +142 -0
- package/dist/installer/index.d.ts.map +1 -0
- package/dist/installer/index.js +619 -0
- package/dist/installer/index.js.map +1 -0
- package/dist/installer/instructions-template.d.ts +41 -0
- package/dist/installer/instructions-template.d.ts.map +1 -0
- package/dist/installer/instructions-template.js +53 -0
- package/dist/installer/instructions-template.js.map +1 -0
- package/dist/installer/targets/antigravity.d.ts +57 -0
- package/dist/installer/targets/antigravity.d.ts.map +1 -0
- package/dist/installer/targets/antigravity.js +308 -0
- package/dist/installer/targets/antigravity.js.map +1 -0
- package/dist/installer/targets/claude.d.ts +62 -0
- package/dist/installer/targets/claude.d.ts.map +1 -0
- package/dist/installer/targets/claude.js +454 -0
- package/dist/installer/targets/claude.js.map +1 -0
- package/dist/installer/targets/codex.d.ts +18 -0
- package/dist/installer/targets/codex.d.ts.map +1 -0
- package/dist/installer/targets/codex.js +185 -0
- package/dist/installer/targets/codex.js.map +1 -0
- package/dist/installer/targets/cursor.d.ts +35 -0
- package/dist/installer/targets/cursor.d.ts.map +1 -0
- package/dist/installer/targets/cursor.js +254 -0
- package/dist/installer/targets/cursor.js.map +1 -0
- package/dist/installer/targets/gemini.d.ts +26 -0
- package/dist/installer/targets/gemini.d.ts.map +1 -0
- package/dist/installer/targets/gemini.js +165 -0
- package/dist/installer/targets/gemini.js.map +1 -0
- package/dist/installer/targets/hermes.d.ts +18 -0
- package/dist/installer/targets/hermes.d.ts.map +1 -0
- package/dist/installer/targets/hermes.js +359 -0
- package/dist/installer/targets/hermes.js.map +1 -0
- package/dist/installer/targets/kiro.d.ts +27 -0
- package/dist/installer/targets/kiro.d.ts.map +1 -0
- package/dist/installer/targets/kiro.js +178 -0
- package/dist/installer/targets/kiro.js.map +1 -0
- package/dist/installer/targets/opencode.d.ts +38 -0
- package/dist/installer/targets/opencode.d.ts.map +1 -0
- package/dist/installer/targets/opencode.js +288 -0
- package/dist/installer/targets/opencode.js.map +1 -0
- package/dist/installer/targets/registry.d.ts +35 -0
- package/dist/installer/targets/registry.d.ts.map +1 -0
- package/dist/installer/targets/registry.js +91 -0
- package/dist/installer/targets/registry.js.map +1 -0
- package/dist/installer/targets/shared.d.ts +101 -0
- package/dist/installer/targets/shared.d.ts.map +1 -0
- package/dist/installer/targets/shared.js +264 -0
- package/dist/installer/targets/shared.js.map +1 -0
- package/dist/installer/targets/toml.d.ts +52 -0
- package/dist/installer/targets/toml.d.ts.map +1 -0
- package/dist/installer/targets/toml.js +147 -0
- package/dist/installer/targets/toml.js.map +1 -0
- package/dist/installer/targets/types.d.ts +108 -0
- package/dist/installer/targets/types.d.ts.map +1 -0
- package/dist/installer/targets/types.js +16 -0
- package/dist/installer/targets/types.js.map +1 -0
- package/dist/mcp/daemon-manager.d.ts +42 -0
- package/dist/mcp/daemon-manager.d.ts.map +1 -0
- package/dist/mcp/daemon-manager.js +129 -0
- package/dist/mcp/daemon-manager.js.map +1 -0
- package/dist/mcp/daemon-paths.d.ts +73 -0
- package/dist/mcp/daemon-paths.d.ts.map +1 -0
- package/dist/mcp/daemon-paths.js +165 -0
- package/dist/mcp/daemon-paths.js.map +1 -0
- package/dist/mcp/daemon-registry.d.ts +47 -0
- package/dist/mcp/daemon-registry.d.ts.map +1 -0
- package/dist/mcp/daemon-registry.js +233 -0
- package/dist/mcp/daemon-registry.js.map +1 -0
- package/dist/mcp/daemon.d.ts +290 -0
- package/dist/mcp/daemon.d.ts.map +1 -0
- package/dist/mcp/daemon.js +862 -0
- package/dist/mcp/daemon.js.map +1 -0
- package/dist/mcp/dynamic-boundaries.d.ts +41 -0
- package/dist/mcp/dynamic-boundaries.d.ts.map +1 -0
- package/dist/mcp/dynamic-boundaries.js +360 -0
- package/dist/mcp/dynamic-boundaries.js.map +1 -0
- package/dist/mcp/early-ppid.d.ts +26 -0
- package/dist/mcp/early-ppid.d.ts.map +1 -0
- package/dist/mcp/early-ppid.js +29 -0
- package/dist/mcp/early-ppid.js.map +1 -0
- package/dist/mcp/engine.d.ts +122 -0
- package/dist/mcp/engine.d.ts.map +1 -0
- package/dist/mcp/engine.js +350 -0
- package/dist/mcp/engine.js.map +1 -0
- package/dist/mcp/index.d.ts +113 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +506 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/liveness-watchdog.d.ts +35 -0
- package/dist/mcp/liveness-watchdog.d.ts.map +1 -0
- package/dist/mcp/liveness-watchdog.js +267 -0
- package/dist/mcp/liveness-watchdog.js.map +1 -0
- package/dist/mcp/ppid-watchdog.d.ts +62 -0
- package/dist/mcp/ppid-watchdog.d.ts.map +1 -0
- package/dist/mcp/ppid-watchdog.js +64 -0
- package/dist/mcp/ppid-watchdog.js.map +1 -0
- package/dist/mcp/proxy.d.ts +87 -0
- package/dist/mcp/proxy.d.ts.map +1 -0
- package/dist/mcp/proxy.js +667 -0
- package/dist/mcp/proxy.js.map +1 -0
- package/dist/mcp/query-pool.d.ts +108 -0
- package/dist/mcp/query-pool.d.ts.map +1 -0
- package/dist/mcp/query-pool.js +315 -0
- package/dist/mcp/query-pool.js.map +1 -0
- package/dist/mcp/query-worker.d.ts +24 -0
- package/dist/mcp/query-worker.d.ts.map +1 -0
- package/dist/mcp/query-worker.js +87 -0
- package/dist/mcp/query-worker.js.map +1 -0
- package/dist/mcp/server-instructions.d.ts +34 -0
- package/dist/mcp/server-instructions.d.ts.map +1 -0
- package/dist/mcp/server-instructions.js +106 -0
- package/dist/mcp/server-instructions.js.map +1 -0
- package/dist/mcp/session.d.ts +93 -0
- package/dist/mcp/session.d.ts.map +1 -0
- package/dist/mcp/session.js +357 -0
- package/dist/mcp/session.js.map +1 -0
- package/dist/mcp/startup-handshake.d.ts +44 -0
- package/dist/mcp/startup-handshake.d.ts.map +1 -0
- package/dist/mcp/startup-handshake.js +73 -0
- package/dist/mcp/startup-handshake.js.map +1 -0
- package/dist/mcp/stdin-teardown.d.ts +27 -0
- package/dist/mcp/stdin-teardown.d.ts.map +1 -0
- package/dist/mcp/stdin-teardown.js +49 -0
- package/dist/mcp/stdin-teardown.js.map +1 -0
- package/dist/mcp/tools.d.ts +613 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +4477 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/transport.d.ts +188 -0
- package/dist/mcp/transport.d.ts.map +1 -0
- package/dist/mcp/transport.js +377 -0
- package/dist/mcp/transport.js.map +1 -0
- package/dist/mcp/version.d.ts +19 -0
- package/dist/mcp/version.d.ts.map +1 -0
- package/dist/mcp/version.js +71 -0
- package/dist/mcp/version.js.map +1 -0
- package/dist/project-config.d.ts +94 -0
- package/dist/project-config.d.ts.map +1 -0
- package/dist/project-config.js +374 -0
- package/dist/project-config.js.map +1 -0
- package/dist/resolution/c-fnptr-synthesizer.d.ts +6 -0
- package/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -0
- package/dist/resolution/c-fnptr-synthesizer.js +1062 -0
- package/dist/resolution/c-fnptr-synthesizer.js.map +1 -0
- package/dist/resolution/callback-synthesizer.d.ts +15 -0
- package/dist/resolution/callback-synthesizer.d.ts.map +1 -0
- package/dist/resolution/callback-synthesizer.js +3938 -0
- package/dist/resolution/callback-synthesizer.js.map +1 -0
- package/dist/resolution/cooperative-yield.d.ts +32 -0
- package/dist/resolution/cooperative-yield.d.ts.map +1 -0
- package/dist/resolution/cooperative-yield.js +42 -0
- package/dist/resolution/cooperative-yield.js.map +1 -0
- package/dist/resolution/frameworks/astro.d.ts +9 -0
- package/dist/resolution/frameworks/astro.d.ts.map +1 -0
- package/dist/resolution/frameworks/astro.js +169 -0
- package/dist/resolution/frameworks/astro.js.map +1 -0
- package/dist/resolution/frameworks/cargo-workspace.d.ts +18 -0
- package/dist/resolution/frameworks/cargo-workspace.d.ts.map +1 -0
- package/dist/resolution/frameworks/cargo-workspace.js +225 -0
- package/dist/resolution/frameworks/cargo-workspace.js.map +1 -0
- package/dist/resolution/frameworks/cics.d.ts +20 -0
- package/dist/resolution/frameworks/cics.d.ts.map +1 -0
- package/dist/resolution/frameworks/cics.js +90 -0
- package/dist/resolution/frameworks/cics.js.map +1 -0
- package/dist/resolution/frameworks/csharp.d.ts +8 -0
- package/dist/resolution/frameworks/csharp.d.ts.map +1 -0
- package/dist/resolution/frameworks/csharp.js +241 -0
- package/dist/resolution/frameworks/csharp.js.map +1 -0
- package/dist/resolution/frameworks/drupal.d.ts +51 -0
- package/dist/resolution/frameworks/drupal.d.ts.map +1 -0
- package/dist/resolution/frameworks/drupal.js +367 -0
- package/dist/resolution/frameworks/drupal.js.map +1 -0
- package/dist/resolution/frameworks/expo-modules.d.ts +3 -0
- package/dist/resolution/frameworks/expo-modules.d.ts.map +1 -0
- package/dist/resolution/frameworks/expo-modules.js +148 -0
- package/dist/resolution/frameworks/expo-modules.js.map +1 -0
- package/dist/resolution/frameworks/express.d.ts +8 -0
- package/dist/resolution/frameworks/express.d.ts.map +1 -0
- package/dist/resolution/frameworks/express.js +308 -0
- package/dist/resolution/frameworks/express.js.map +1 -0
- package/dist/resolution/frameworks/fabric.d.ts +3 -0
- package/dist/resolution/frameworks/fabric.d.ts.map +1 -0
- package/dist/resolution/frameworks/fabric.js +354 -0
- package/dist/resolution/frameworks/fabric.js.map +1 -0
- package/dist/resolution/frameworks/go.d.ts +8 -0
- package/dist/resolution/frameworks/go.d.ts.map +1 -0
- package/dist/resolution/frameworks/go.js +161 -0
- package/dist/resolution/frameworks/go.js.map +1 -0
- package/dist/resolution/frameworks/goframe.d.ts +41 -0
- package/dist/resolution/frameworks/goframe.d.ts.map +1 -0
- package/dist/resolution/frameworks/goframe.js +112 -0
- package/dist/resolution/frameworks/goframe.js.map +1 -0
- package/dist/resolution/frameworks/index.d.ts +50 -0
- package/dist/resolution/frameworks/index.d.ts.map +1 -0
- package/dist/resolution/frameworks/index.js +175 -0
- package/dist/resolution/frameworks/index.js.map +1 -0
- package/dist/resolution/frameworks/java.d.ts +8 -0
- package/dist/resolution/frameworks/java.d.ts.map +1 -0
- package/dist/resolution/frameworks/java.js +517 -0
- package/dist/resolution/frameworks/java.js.map +1 -0
- package/dist/resolution/frameworks/laravel.d.ts +13 -0
- package/dist/resolution/frameworks/laravel.d.ts.map +1 -0
- package/dist/resolution/frameworks/laravel.js +257 -0
- package/dist/resolution/frameworks/laravel.js.map +1 -0
- package/dist/resolution/frameworks/nestjs.d.ts +26 -0
- package/dist/resolution/frameworks/nestjs.d.ts.map +1 -0
- package/dist/resolution/frameworks/nestjs.js +698 -0
- package/dist/resolution/frameworks/nestjs.js.map +1 -0
- package/dist/resolution/frameworks/play.d.ts +19 -0
- package/dist/resolution/frameworks/play.d.ts.map +1 -0
- package/dist/resolution/frameworks/play.js +111 -0
- package/dist/resolution/frameworks/play.js.map +1 -0
- package/dist/resolution/frameworks/python.d.ts +10 -0
- package/dist/resolution/frameworks/python.d.ts.map +1 -0
- package/dist/resolution/frameworks/python.js +400 -0
- package/dist/resolution/frameworks/python.js.map +1 -0
- package/dist/resolution/frameworks/react-native.d.ts +3 -0
- package/dist/resolution/frameworks/react-native.d.ts.map +1 -0
- package/dist/resolution/frameworks/react-native.js +410 -0
- package/dist/resolution/frameworks/react-native.js.map +1 -0
- package/dist/resolution/frameworks/react.d.ts +8 -0
- package/dist/resolution/frameworks/react.d.ts.map +1 -0
- package/dist/resolution/frameworks/react.js +334 -0
- package/dist/resolution/frameworks/react.js.map +1 -0
- package/dist/resolution/frameworks/ruby.d.ts +8 -0
- package/dist/resolution/frameworks/ruby.d.ts.map +1 -0
- package/dist/resolution/frameworks/ruby.js +302 -0
- package/dist/resolution/frameworks/ruby.js.map +1 -0
- package/dist/resolution/frameworks/rust.d.ts +8 -0
- package/dist/resolution/frameworks/rust.d.ts.map +1 -0
- package/dist/resolution/frameworks/rust.js +304 -0
- package/dist/resolution/frameworks/rust.js.map +1 -0
- package/dist/resolution/frameworks/svelte.d.ts +9 -0
- package/dist/resolution/frameworks/svelte.d.ts.map +1 -0
- package/dist/resolution/frameworks/svelte.js +253 -0
- package/dist/resolution/frameworks/svelte.js.map +1 -0
- package/dist/resolution/frameworks/swift-objc.d.ts +37 -0
- package/dist/resolution/frameworks/swift-objc.d.ts.map +1 -0
- package/dist/resolution/frameworks/swift-objc.js +252 -0
- package/dist/resolution/frameworks/swift-objc.js.map +1 -0
- package/dist/resolution/frameworks/swift.d.ts +10 -0
- package/dist/resolution/frameworks/swift.d.ts.map +1 -0
- package/dist/resolution/frameworks/swift.js +400 -0
- package/dist/resolution/frameworks/swift.js.map +1 -0
- package/dist/resolution/frameworks/terraform.d.ts +38 -0
- package/dist/resolution/frameworks/terraform.d.ts.map +1 -0
- package/dist/resolution/frameworks/terraform.js +277 -0
- package/dist/resolution/frameworks/terraform.js.map +1 -0
- package/dist/resolution/frameworks/vue.d.ts +9 -0
- package/dist/resolution/frameworks/vue.d.ts.map +1 -0
- package/dist/resolution/frameworks/vue.js +303 -0
- package/dist/resolution/frameworks/vue.js.map +1 -0
- package/dist/resolution/go-module.d.ts +26 -0
- package/dist/resolution/go-module.d.ts.map +1 -0
- package/dist/resolution/go-module.js +78 -0
- package/dist/resolution/go-module.js.map +1 -0
- package/dist/resolution/goframe-synthesizer.d.ts +29 -0
- package/dist/resolution/goframe-synthesizer.d.ts.map +1 -0
- package/dist/resolution/goframe-synthesizer.js +163 -0
- package/dist/resolution/goframe-synthesizer.js.map +1 -0
- package/dist/resolution/import-resolver.d.ts +85 -0
- package/dist/resolution/import-resolver.d.ts.map +1 -0
- package/dist/resolution/import-resolver.js +1974 -0
- package/dist/resolution/import-resolver.js.map +1 -0
- package/dist/resolution/index.d.ts +258 -0
- package/dist/resolution/index.d.ts.map +1 -0
- package/dist/resolution/index.js +1746 -0
- package/dist/resolution/index.js.map +1 -0
- package/dist/resolution/lru-cache.d.ts +24 -0
- package/dist/resolution/lru-cache.d.ts.map +1 -0
- package/dist/resolution/lru-cache.js +62 -0
- package/dist/resolution/lru-cache.js.map +1 -0
- package/dist/resolution/name-matcher.d.ts +112 -0
- package/dist/resolution/name-matcher.d.ts.map +1 -0
- package/dist/resolution/name-matcher.js +1830 -0
- package/dist/resolution/name-matcher.js.map +1 -0
- package/dist/resolution/path-aliases.d.ts +68 -0
- package/dist/resolution/path-aliases.d.ts.map +1 -0
- package/dist/resolution/path-aliases.js +238 -0
- package/dist/resolution/path-aliases.js.map +1 -0
- package/dist/resolution/strip-comments.d.ts +27 -0
- package/dist/resolution/strip-comments.d.ts.map +1 -0
- package/dist/resolution/strip-comments.js +492 -0
- package/dist/resolution/strip-comments.js.map +1 -0
- package/dist/resolution/swift-objc-bridge.d.ts +134 -0
- package/dist/resolution/swift-objc-bridge.d.ts.map +1 -0
- package/dist/resolution/swift-objc-bridge.js +256 -0
- package/dist/resolution/swift-objc-bridge.js.map +1 -0
- package/dist/resolution/types.d.ts +262 -0
- package/dist/resolution/types.d.ts.map +1 -0
- package/dist/resolution/types.js +8 -0
- package/dist/resolution/types.js.map +1 -0
- package/dist/resolution/workspace-packages.d.ts +58 -0
- package/dist/resolution/workspace-packages.d.ts.map +1 -0
- package/dist/resolution/workspace-packages.js +346 -0
- package/dist/resolution/workspace-packages.js.map +1 -0
- package/dist/search/identifier-segments.d.ts +60 -0
- package/dist/search/identifier-segments.d.ts.map +1 -0
- package/dist/search/identifier-segments.js +176 -0
- package/dist/search/identifier-segments.js.map +1 -0
- package/dist/search/query-parser.d.ts +57 -0
- package/dist/search/query-parser.d.ts.map +1 -0
- package/dist/search/query-parser.js +177 -0
- package/dist/search/query-parser.js.map +1 -0
- package/dist/search/query-utils.d.ts +87 -0
- package/dist/search/query-utils.d.ts.map +1 -0
- package/dist/search/query-utils.js +449 -0
- package/dist/search/query-utils.js.map +1 -0
- package/dist/sync/git-hooks.d.ts +45 -0
- package/dist/sync/git-hooks.d.ts.map +1 -0
- package/dist/sync/git-hooks.js +227 -0
- package/dist/sync/git-hooks.js.map +1 -0
- package/dist/sync/index.d.ts +19 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +35 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/watch-policy.d.ts +48 -0
- package/dist/sync/watch-policy.d.ts.map +1 -0
- package/dist/sync/watch-policy.js +124 -0
- package/dist/sync/watch-policy.js.map +1 -0
- package/dist/sync/watcher.d.ts +355 -0
- package/dist/sync/watcher.d.ts.map +1 -0
- package/dist/sync/watcher.js +848 -0
- package/dist/sync/watcher.js.map +1 -0
- package/dist/sync/worktree.d.ts +63 -0
- package/dist/sync/worktree.d.ts.map +1 -0
- package/dist/sync/worktree.js +182 -0
- package/dist/sync/worktree.js.map +1 -0
- package/dist/telemetry/index.d.ts +143 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +541 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/types.d.ts +415 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +91 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/glyphs.d.ts +42 -0
- package/dist/ui/glyphs.d.ts.map +1 -0
- package/dist/ui/glyphs.js +78 -0
- package/dist/ui/glyphs.js.map +1 -0
- package/dist/ui/shimmer-progress.d.ts +11 -0
- package/dist/ui/shimmer-progress.d.ts.map +1 -0
- package/dist/ui/shimmer-progress.js +90 -0
- package/dist/ui/shimmer-progress.js.map +1 -0
- package/dist/ui/shimmer-worker.d.ts +2 -0
- package/dist/ui/shimmer-worker.d.ts.map +1 -0
- package/dist/ui/shimmer-worker.js +118 -0
- package/dist/ui/shimmer-worker.js.map +1 -0
- package/dist/ui/types.d.ts +17 -0
- package/dist/ui/types.d.ts.map +1 -0
- package/dist/ui/types.js +3 -0
- package/dist/ui/types.js.map +1 -0
- package/dist/upgrade/index.d.ts +164 -0
- package/dist/upgrade/index.d.ts.map +1 -0
- package/dist/upgrade/index.js +646 -0
- package/dist/upgrade/index.js.map +1 -0
- package/dist/upgrade/remove-binary.d.ts +87 -0
- package/dist/upgrade/remove-binary.d.ts.map +1 -0
- package/dist/upgrade/remove-binary.js +289 -0
- package/dist/upgrade/remove-binary.js.map +1 -0
- package/dist/upgrade/update-check.d.ts +92 -0
- package/dist/upgrade/update-check.d.ts.map +1 -0
- package/dist/upgrade/update-check.js +258 -0
- package/dist/upgrade/update-check.js.map +1 -0
- package/dist/utils.d.ts +224 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +583 -0
- package/dist/utils.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MyBatisExtractor = void 0;
|
|
4
|
+
const tree_sitter_helpers_1 = require("./tree-sitter-helpers");
|
|
5
|
+
/**
|
|
6
|
+
* MyBatisExtractor — parses MyBatis mapper XML files.
|
|
7
|
+
*
|
|
8
|
+
* MyBatis splits a DAO interface across two files: a Java interface (parsed by
|
|
9
|
+
* tree-sitter) declares the method, and an XML mapper file holds the SQL keyed
|
|
10
|
+
* by `<namespace>` (the fully-qualified Java type name) and `id` (the method
|
|
11
|
+
* name). Without the XML side in the graph, `trace(Controller, ...DAO.method)`
|
|
12
|
+
* dead-ends at the interface method — the SQL it actually runs is invisible,
|
|
13
|
+
* and "what does this query touch" / "where is this column written" can't be
|
|
14
|
+
* answered.
|
|
15
|
+
*
|
|
16
|
+
* This extractor emits one method-shaped node per `<select|insert|update|
|
|
17
|
+
* delete>` and per `<sql>` fragment, qualified as `<namespace>::<id>` so the
|
|
18
|
+
* MyBatis framework synthesizer can link the matching Java method → XML
|
|
19
|
+
* statement by suffix-matching qualified names. `<include refid="...">` inside
|
|
20
|
+
* a statement yields an unresolved reference to the SQL fragment, also keyed
|
|
21
|
+
* by `<namespace>::<refid>`.
|
|
22
|
+
*
|
|
23
|
+
* Both dialects are covered: MyBatis 3 `<mapper namespace="...">` and the
|
|
24
|
+
* legacy iBatis 2 `<sqlMap>` (namespaced, or namespace-less with `Map.stmt`
|
|
25
|
+
* ids, plus its extra `<statement>`/`<procedure>` verbs). Attribute values may
|
|
26
|
+
* use either quote style, and statements commented out with `<!-- ... -->` are
|
|
27
|
+
* ignored (see the constructor's comment-stripping pre-pass).
|
|
28
|
+
*
|
|
29
|
+
* Non-mapper XML (Maven `pom.xml`, Spring beans XML, `web.xml`, log4j config,
|
|
30
|
+
* etc.) is detected by the absence of a `<mapper namespace="...">` /
|
|
31
|
+
* `<sqlMap>` root and returns just a file node — we still need the file row so
|
|
32
|
+
* the watcher can track it, but we emit no symbols.
|
|
33
|
+
*/
|
|
34
|
+
class MyBatisExtractor {
|
|
35
|
+
filePath;
|
|
36
|
+
source;
|
|
37
|
+
nodes = [];
|
|
38
|
+
edges = [];
|
|
39
|
+
unresolvedReferences = [];
|
|
40
|
+
errors = [];
|
|
41
|
+
lineStarts = [];
|
|
42
|
+
constructor(filePath, source) {
|
|
43
|
+
this.filePath = filePath;
|
|
44
|
+
// Blank out XML comments up front so commented-out statements and includes
|
|
45
|
+
// aren't matched by the scans below (a `<!-- <select id="old">…</select> -->`
|
|
46
|
+
// block must not produce a phantom node). Length-preserving — comment bytes
|
|
47
|
+
// become spaces, newlines are kept — so the offsets and line numbers
|
|
48
|
+
// computed afterwards still map to the original source. Text inside
|
|
49
|
+
// `<![CDATA[ … ]]>` is left intact: a literal `<!--` there is SQL data, not
|
|
50
|
+
// an XML comment.
|
|
51
|
+
this.source = MyBatisExtractor.stripXmlComments(source);
|
|
52
|
+
this.computeLineStarts();
|
|
53
|
+
}
|
|
54
|
+
static stripXmlComments(source) {
|
|
55
|
+
const out = source.split('');
|
|
56
|
+
const n = source.length;
|
|
57
|
+
let i = 0;
|
|
58
|
+
while (i < n) {
|
|
59
|
+
if (source.startsWith('<![CDATA[', i)) {
|
|
60
|
+
const end = source.indexOf(']]>', i + 9);
|
|
61
|
+
i = end >= 0 ? end + 3 : n;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (source.startsWith('<!--', i)) {
|
|
65
|
+
const end = source.indexOf('-->', i + 4);
|
|
66
|
+
const stop = end >= 0 ? end + 3 : n;
|
|
67
|
+
for (let j = i; j < stop; j++) {
|
|
68
|
+
if (source.charCodeAt(j) !== 10)
|
|
69
|
+
out[j] = ' ';
|
|
70
|
+
}
|
|
71
|
+
i = stop;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
i++;
|
|
75
|
+
}
|
|
76
|
+
return out.join('');
|
|
77
|
+
}
|
|
78
|
+
extract() {
|
|
79
|
+
const startTime = Date.now();
|
|
80
|
+
const fileNode = this.createFileNode();
|
|
81
|
+
try {
|
|
82
|
+
const root = this.findMapperRoot();
|
|
83
|
+
if (root) {
|
|
84
|
+
this.extractMapper(fileNode.id, root.namespace, root.dialect, root.bodyStart, root.bodyEnd);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
this.errors.push({
|
|
89
|
+
message: `MyBatis extraction error: ${error instanceof Error ? error.message : String(error)}`,
|
|
90
|
+
severity: 'error',
|
|
91
|
+
code: 'parse_error',
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
nodes: this.nodes,
|
|
96
|
+
edges: this.edges,
|
|
97
|
+
unresolvedReferences: this.unresolvedReferences,
|
|
98
|
+
errors: this.errors,
|
|
99
|
+
durationMs: Date.now() - startTime,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
createFileNode() {
|
|
103
|
+
const lines = this.source.split('\n');
|
|
104
|
+
const id = (0, tree_sitter_helpers_1.generateNodeId)(this.filePath, 'file', this.filePath, 1);
|
|
105
|
+
const node = {
|
|
106
|
+
id,
|
|
107
|
+
kind: 'file',
|
|
108
|
+
name: this.filePath.split('/').pop() || this.filePath,
|
|
109
|
+
qualifiedName: this.filePath,
|
|
110
|
+
filePath: this.filePath,
|
|
111
|
+
language: 'xml',
|
|
112
|
+
startLine: 1,
|
|
113
|
+
endLine: lines.length || 1,
|
|
114
|
+
startColumn: 0,
|
|
115
|
+
endColumn: lines[lines.length - 1]?.length ?? 0,
|
|
116
|
+
updatedAt: Date.now(),
|
|
117
|
+
};
|
|
118
|
+
this.nodes.push(node);
|
|
119
|
+
return node;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Find the mapper root and its dialect. Two shapes are recognized:
|
|
123
|
+
* - MyBatis 3: `<mapper namespace="com.foo.Bar">` — namespace required.
|
|
124
|
+
* - iBatis 2: `<sqlMap namespace="Account">`, or a namespace-less
|
|
125
|
+
* `<sqlMap>` whose statement ids carry the qualifier as `Map.statement`.
|
|
126
|
+
* Returns the namespace, the dialect, and the byte offsets of the body
|
|
127
|
+
* (between the opening and closing tag) so statement extraction is scoped to
|
|
128
|
+
* the root's contents. Either quote style is accepted for the namespace
|
|
129
|
+
* (`namespace='X'` is legal XML and common in older mappers).
|
|
130
|
+
*/
|
|
131
|
+
findMapperRoot() {
|
|
132
|
+
const mapper = /<mapper\b([^>]*)>/.exec(this.source);
|
|
133
|
+
if (mapper) {
|
|
134
|
+
const nsMatch = /\bnamespace\s*=\s*(["'])([^"']+)\1/.exec(mapper[1] ?? '');
|
|
135
|
+
if (nsMatch) {
|
|
136
|
+
const bodyStart = mapper.index + mapper[0].length;
|
|
137
|
+
const closeIdx = this.source.indexOf('</mapper>', bodyStart);
|
|
138
|
+
return {
|
|
139
|
+
namespace: nsMatch[2],
|
|
140
|
+
dialect: 'mybatis',
|
|
141
|
+
bodyStart,
|
|
142
|
+
bodyEnd: closeIdx >= 0 ? closeIdx : this.source.length,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// iBatis 2 SqlMap. `\b` keeps `<sqlMapConfig>` (the iBatis config root,
|
|
147
|
+
// which holds no statements) from matching here. namespace is optional.
|
|
148
|
+
const sqlMap = /<sqlMap\b([^>]*)>/.exec(this.source);
|
|
149
|
+
if (sqlMap) {
|
|
150
|
+
const nsMatch = /\bnamespace\s*=\s*(["'])([^"']+)\1/.exec(sqlMap[1] ?? '');
|
|
151
|
+
const bodyStart = sqlMap.index + sqlMap[0].length;
|
|
152
|
+
const closeIdx = this.source.indexOf('</sqlMap>', bodyStart);
|
|
153
|
+
return {
|
|
154
|
+
namespace: nsMatch?.[2] ?? '',
|
|
155
|
+
dialect: 'ibatis',
|
|
156
|
+
bodyStart,
|
|
157
|
+
bodyEnd: closeIdx >= 0 ? closeIdx : this.source.length,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
extractMapper(fileNodeId, namespace, dialect, bodyStart, bodyEnd) {
|
|
163
|
+
const body = this.source.slice(bodyStart, bodyEnd);
|
|
164
|
+
// Match each top-level statement-shaped element. The body may have nested
|
|
165
|
+
// tags (`<if>`, `<foreach>`, `<include>`), so we scan with a regex that
|
|
166
|
+
// pairs an opening tag to its matching close — the simple form below works
|
|
167
|
+
// because MyBatis/iBatis statement elements are not themselves nested.
|
|
168
|
+
// iBatis 2 adds the generic `<statement>` and `<procedure>` on top of the
|
|
169
|
+
// MyBatis 3 verbs; gating by dialect keeps MyBatis extraction unchanged.
|
|
170
|
+
const verbs = dialect === 'ibatis'
|
|
171
|
+
? 'select|insert|update|delete|sql|statement|procedure'
|
|
172
|
+
: 'select|insert|update|delete|sql';
|
|
173
|
+
const stmtRegex = new RegExp(`<(${verbs})\\b([^>]*)>([\\s\\S]*?)</\\1>`, 'g');
|
|
174
|
+
let m;
|
|
175
|
+
while ((m = stmtRegex.exec(body)) !== null) {
|
|
176
|
+
const elemType = m[1];
|
|
177
|
+
const attrs = m[2] ?? '';
|
|
178
|
+
const elemBody = m[3] ?? '';
|
|
179
|
+
// Accept either quote style (`(["'])…\1`). The identifier-shaped MyBatis
|
|
180
|
+
// attributes matched here and below (namespace/id/refid/resultType/
|
|
181
|
+
// parameterType) are Java FQNs, method names, or type aliases and never
|
|
182
|
+
// contain a quote character, so excluding both quotes from the value is safe.
|
|
183
|
+
const idMatch = /\bid\s*=\s*(["'])([^"']+)\1/.exec(attrs);
|
|
184
|
+
if (!idMatch)
|
|
185
|
+
continue;
|
|
186
|
+
const id = idMatch[2];
|
|
187
|
+
const absoluteIndex = bodyStart + m.index;
|
|
188
|
+
const startLine = this.getLineNumber(absoluteIndex);
|
|
189
|
+
const endLine = this.getLineNumber(absoluteIndex + m[0].length);
|
|
190
|
+
const { qualifiedName: qualified, name } = this.qualifyStatement(namespace, id);
|
|
191
|
+
const isSqlFragment = elemType === 'sql';
|
|
192
|
+
// The id-hash folds in the statement's byte offset (unique per statement
|
|
193
|
+
// in the file), not just the start line: two statements sharing a
|
|
194
|
+
// qualifiedName AND a start line — e.g. a vendor-split `databaseId` pair
|
|
195
|
+
// (`<select id="x" databaseId="oracle">…</select><select id="x"
|
|
196
|
+
// databaseId="mysql">…`) written on one line — would otherwise hash to
|
|
197
|
+
// the same node id, and `INSERT OR REPLACE INTO nodes` (id is the PRIMARY
|
|
198
|
+
// KEY) would silently drop one. qualifiedName and startLine are stored
|
|
199
|
+
// unchanged, so the Java↔XML suffix-match bridge is untouched.
|
|
200
|
+
const nodeId = (0, tree_sitter_helpers_1.generateNodeId)(this.filePath, 'method', qualified, absoluteIndex);
|
|
201
|
+
const node = {
|
|
202
|
+
id: nodeId,
|
|
203
|
+
kind: 'method',
|
|
204
|
+
name,
|
|
205
|
+
qualifiedName: qualified,
|
|
206
|
+
filePath: this.filePath,
|
|
207
|
+
language: 'xml',
|
|
208
|
+
signature: this.buildSignature(elemType, attrs, isSqlFragment),
|
|
209
|
+
startLine,
|
|
210
|
+
endLine,
|
|
211
|
+
startColumn: 0,
|
|
212
|
+
endColumn: 0,
|
|
213
|
+
docstring: this.previewSql(elemBody),
|
|
214
|
+
updatedAt: Date.now(),
|
|
215
|
+
};
|
|
216
|
+
this.nodes.push(node);
|
|
217
|
+
this.edges.push({ source: fileNodeId, target: nodeId, kind: 'contains' });
|
|
218
|
+
// <include refid="X"/> → reference to the SQL fragment in this mapper
|
|
219
|
+
// (or in another mapper, when the refid is qualified — `ns.X`).
|
|
220
|
+
const includeRegex = /<include\b[^>]*\brefid\s*=\s*(["'])([^"']+)\1/g;
|
|
221
|
+
let inc;
|
|
222
|
+
while ((inc = includeRegex.exec(elemBody)) !== null) {
|
|
223
|
+
const refid = inc[2];
|
|
224
|
+
const refQualified = refid.includes('.')
|
|
225
|
+
? refid.replace(/\./g, '::')
|
|
226
|
+
: namespace
|
|
227
|
+
? `${namespace}::${refid}`
|
|
228
|
+
: refid;
|
|
229
|
+
const includeOffset = absoluteIndex + (m[0].length - m[3].length - `</${elemType}>`.length) + inc.index;
|
|
230
|
+
const line = this.getLineNumber(includeOffset);
|
|
231
|
+
this.unresolvedReferences.push({
|
|
232
|
+
fromNodeId: nodeId,
|
|
233
|
+
referenceName: refQualified,
|
|
234
|
+
referenceKind: 'references',
|
|
235
|
+
line,
|
|
236
|
+
column: 0,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
buildSignature(elemType, attrs, isSqlFragment) {
|
|
242
|
+
if (isSqlFragment)
|
|
243
|
+
return '<sql>';
|
|
244
|
+
const verb = elemType.toUpperCase();
|
|
245
|
+
const result = /\bresultType\s*=\s*(["'])([^"']+)\1/.exec(attrs)?.[2];
|
|
246
|
+
const param = /\bparameterType\s*=\s*(["'])([^"']+)\1/.exec(attrs)?.[2];
|
|
247
|
+
// A vendor-split statement carries `databaseId`; surface it so the two
|
|
248
|
+
// otherwise-identical `<namespace>::<id>` nodes are distinguishable.
|
|
249
|
+
const dbId = /\bdatabaseId\s*=\s*(["'])([^"']+)\1/.exec(attrs)?.[2];
|
|
250
|
+
const parts = [verb];
|
|
251
|
+
if (param)
|
|
252
|
+
parts.push(`param=${param}`);
|
|
253
|
+
if (result)
|
|
254
|
+
parts.push(`result=${result}`);
|
|
255
|
+
if (dbId)
|
|
256
|
+
parts.push(`databaseId=${dbId}`);
|
|
257
|
+
return parts.join(' ');
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Build the `<namespace>::<id>` qualified name the MyBatis synthesizer
|
|
261
|
+
* suffix-matches against a Java `<Class>::<method>`, and the display name.
|
|
262
|
+
* For a namespace-less iBatis `<sqlMap>`, the statement id carries the
|
|
263
|
+
* qualifier as `Map.statement`, so split on the last dot to reach the same
|
|
264
|
+
* shape (`Account.getById` → `Account::getById`, name `getById`).
|
|
265
|
+
*/
|
|
266
|
+
qualifyStatement(namespace, id) {
|
|
267
|
+
if (namespace)
|
|
268
|
+
return { qualifiedName: `${namespace}::${id}`, name: id };
|
|
269
|
+
const dot = id.lastIndexOf('.');
|
|
270
|
+
if (dot >= 0) {
|
|
271
|
+
return { qualifiedName: `${id.slice(0, dot)}::${id.slice(dot + 1)}`, name: id.slice(dot + 1) };
|
|
272
|
+
}
|
|
273
|
+
return { qualifiedName: id, name: id };
|
|
274
|
+
}
|
|
275
|
+
previewSql(body) {
|
|
276
|
+
return body.replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim().slice(0, 200);
|
|
277
|
+
}
|
|
278
|
+
computeLineStarts() {
|
|
279
|
+
this.lineStarts = [0];
|
|
280
|
+
for (let i = 0; i < this.source.length; i++) {
|
|
281
|
+
if (this.source.charCodeAt(i) === 10)
|
|
282
|
+
this.lineStarts.push(i + 1);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
getLineNumber(offset) {
|
|
286
|
+
// Binary search
|
|
287
|
+
let lo = 0;
|
|
288
|
+
let hi = this.lineStarts.length - 1;
|
|
289
|
+
while (lo < hi) {
|
|
290
|
+
const mid = (lo + hi + 1) >>> 1;
|
|
291
|
+
if (this.lineStarts[mid] <= offset)
|
|
292
|
+
lo = mid;
|
|
293
|
+
else
|
|
294
|
+
hi = mid - 1;
|
|
295
|
+
}
|
|
296
|
+
return lo + 1;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
exports.MyBatisExtractor = MyBatisExtractor;
|
|
300
|
+
//# sourceMappingURL=mybatis-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mybatis-extractor.js","sourceRoot":"","sources":["../../src/extraction/mybatis-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse worker pool — runs tree-sitter parsing across N worker threads so a full
|
|
3
|
+
* `codegraph index` uses every core instead of pinning one.
|
|
4
|
+
*
|
|
5
|
+
* Why this exists: `ExtractionOrchestrator.indexAll()` already reads files in
|
|
6
|
+
* parallel, but it parsed them through a SINGLE worker thread, so on an
|
|
7
|
+
* N-core machine indexing a large repo used one core and left the rest idle
|
|
8
|
+
* (issue #1015, the parse-time half of #320). Spreading the parse calls across a
|
|
9
|
+
* pool of workers — each its own tree-sitter WASM heap — restores multi-core
|
|
10
|
+
* throughput. SQLite storage stays on the main thread (it isn't thread-safe), so
|
|
11
|
+
* only the CPU-bound parse step is parallelised; results are stored as they
|
|
12
|
+
* arrive, in whatever order they finish.
|
|
13
|
+
*
|
|
14
|
+
* Design mirrors {@link ../mcp/query-pool} (idle-list dispatch, lazy growth,
|
|
15
|
+
* throttled cold-starts, crash recovery), with parse-specific behaviour:
|
|
16
|
+
* - per-worker recycle: WASM linear memory grows but never shrinks, so each
|
|
17
|
+
* worker is torn down and replaced after `recycleInterval` parses to reclaim
|
|
18
|
+
* its heap — the same reason the old single worker recycled.
|
|
19
|
+
* - reject, don't retry: a parse that crashes or times out its worker REJECTS
|
|
20
|
+
* (with a message the orchestrator's retry pass recognises) rather than being
|
|
21
|
+
* silently requeued — the orchestrator owns the smarter two-stage retry
|
|
22
|
+
* (fresh worker, then comment-stripped) on a clean WASM heap.
|
|
23
|
+
* - a size-1 pool reproduces the old single-worker path exactly, which is the
|
|
24
|
+
* conservative rollback: set `CODEGRAPH_PARSE_WORKERS=1`.
|
|
25
|
+
*
|
|
26
|
+
* Memory: peak scales with pool size (≈ size × a worker's pre-recycle heap), so
|
|
27
|
+
* the default is capped and the env var lets constrained machines dial it down.
|
|
28
|
+
*/
|
|
29
|
+
import type { Language, ExtractionResult } from '../types';
|
|
30
|
+
/**
|
|
31
|
+
* Minimal worker surface the pool drives — satisfied by a real `worker_threads`
|
|
32
|
+
* Worker. Abstracted so tests can inject a fake worker and exercise the pool's
|
|
33
|
+
* queue / growth / recycle / crash-recovery logic without spawning threads or a
|
|
34
|
+
* built `dist/`.
|
|
35
|
+
*/
|
|
36
|
+
export interface ParsePoolWorker {
|
|
37
|
+
postMessage(msg: unknown): void;
|
|
38
|
+
terminate(): Promise<number> | void;
|
|
39
|
+
on(event: 'message', cb: (m: unknown) => void): void;
|
|
40
|
+
on(event: 'error', cb: (e: Error) => void): void;
|
|
41
|
+
on(event: 'exit', cb: (code: number) => void): void;
|
|
42
|
+
}
|
|
43
|
+
/** A single file to parse. `language` is resolved on the main thread (it holds
|
|
44
|
+
* the project's codegraph.json extension overrides) and handed to the worker. */
|
|
45
|
+
export interface ParseTask {
|
|
46
|
+
filePath: string;
|
|
47
|
+
content: string;
|
|
48
|
+
language: Language;
|
|
49
|
+
frameworkNames?: string[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Resolve the pool size from the `CODEGRAPH_PARSE_WORKERS` override and the
|
|
53
|
+
* machine's core count.
|
|
54
|
+
* - explicit `0` or `1` → 1 worker (the old single-worker path; the rollback).
|
|
55
|
+
* - explicit `N` → N, clamped to [1, 16].
|
|
56
|
+
* - unset / blank / non-numeric → `clamp(cores - 1, 1, 8)` (leave a core for
|
|
57
|
+
* the main thread + UI; never zero — parsing always needs a worker).
|
|
58
|
+
*/
|
|
59
|
+
/**
|
|
60
|
+
* Resolve the base per-parse timeout from the `CODEGRAPH_PARSE_TIMEOUT_MS`
|
|
61
|
+
* override. Slow storage (HDD, network folders) can need a larger budget; a
|
|
62
|
+
* non-numeric / non-positive value falls back to the default (10s).
|
|
63
|
+
*/
|
|
64
|
+
export declare function resolveParseTimeoutMs(envVal: string | undefined): number;
|
|
65
|
+
export declare function resolveParsePoolSize(envVal: string | undefined, cpuCount: number): number;
|
|
66
|
+
export interface ParseWorkerPoolOptions {
|
|
67
|
+
/** Languages to load grammars for in every worker at spawn. */
|
|
68
|
+
languages: Language[];
|
|
69
|
+
/** Number of worker threads (≥1). Clamp the resolved value before passing. */
|
|
70
|
+
size: number;
|
|
71
|
+
/** Compiled `parse-worker.js` path. Required unless `createWorker` is given. */
|
|
72
|
+
workerScriptPath?: string;
|
|
73
|
+
/** Parses per worker before recycle. Default 250. */
|
|
74
|
+
recycleInterval?: number;
|
|
75
|
+
/** Base per-parse timeout (ms); scaled by file size per parse. Default 10s. */
|
|
76
|
+
parseTimeoutMs?: number;
|
|
77
|
+
/** Worker factory (tests inject a fake). Defaults to a real `worker_threads` Worker. */
|
|
78
|
+
createWorker?: () => ParsePoolWorker;
|
|
79
|
+
/** Optional verbose logger (the orchestrator's `[worker] …` logger). */
|
|
80
|
+
log?: (msg: string) => void;
|
|
81
|
+
/**
|
|
82
|
+
* Pre-read grammar WASM bytes keyed by language, forwarded to every worker's
|
|
83
|
+
* `load-grammars` message so a spawn/respawn loads grammars from memory
|
|
84
|
+
* instead of re-reading them from disk — on slow storage each respawn's
|
|
85
|
+
* grammar re-read otherwise amplifies the very I/O contention that caused
|
|
86
|
+
* the respawn (issue #1231). Best-effort: a missing language falls back to
|
|
87
|
+
* the worker's own disk read.
|
|
88
|
+
*/
|
|
89
|
+
grammarBuffers?: Record<string, Uint8Array>;
|
|
90
|
+
}
|
|
91
|
+
export declare class ParseWorkerPool {
|
|
92
|
+
private idle;
|
|
93
|
+
private queue;
|
|
94
|
+
private inflight;
|
|
95
|
+
private workers;
|
|
96
|
+
private pending;
|
|
97
|
+
private parseCounts;
|
|
98
|
+
private nextId;
|
|
99
|
+
private totalCrashes;
|
|
100
|
+
private destroyed;
|
|
101
|
+
private readonly languages;
|
|
102
|
+
private readonly maxSize;
|
|
103
|
+
private readonly recycleInterval;
|
|
104
|
+
private readonly parseTimeoutMs;
|
|
105
|
+
private readonly createWorker;
|
|
106
|
+
private readonly log;
|
|
107
|
+
private readonly grammarBuffers?;
|
|
108
|
+
constructor(opts: ParseWorkerPoolOptions);
|
|
109
|
+
/** Pool size cap (for logging). */
|
|
110
|
+
get size(): number;
|
|
111
|
+
/** Live worker count (for tests). */
|
|
112
|
+
get liveWorkers(): number;
|
|
113
|
+
/** False once the crash budget is exhausted (or after destroy). */
|
|
114
|
+
get healthy(): boolean;
|
|
115
|
+
/**
|
|
116
|
+
* Parse one file on the pool. Resolves with the extraction result, or REJECTS
|
|
117
|
+
* if the parse times out or its worker crashes — the caller records the error
|
|
118
|
+
* and (for worker-exit/OOM/timeout rejections) re-attempts in its retry pass.
|
|
119
|
+
*/
|
|
120
|
+
requestParse(task: ParseTask): Promise<ExtractionResult>;
|
|
121
|
+
private spawnOne;
|
|
122
|
+
private onMessage;
|
|
123
|
+
/** A worker died (crash hook / OOM exit / spawn error). Reject its in-flight
|
|
124
|
+
* parse so the caller's retry pass can re-attempt it, then respawn. */
|
|
125
|
+
private onWorkerGone;
|
|
126
|
+
/** Tear down a worker that has hit its recycle threshold and replace it. Not a
|
|
127
|
+
* crash, so it doesn't count against the budget. */
|
|
128
|
+
private recycle;
|
|
129
|
+
private removeWorker;
|
|
130
|
+
private dispatch;
|
|
131
|
+
/**
|
|
132
|
+
* The base timer fired with no result processed yet. Do NOT kill or settle:
|
|
133
|
+
* the timer firing doesn't prove the parse is still running — after a long
|
|
134
|
+
* synchronous main-thread stretch Node services the timers phase before the
|
|
135
|
+
* poll phase, so an already-delivered `parse-result` is still queued behind
|
|
136
|
+
* this callback. Mark the job late (onMessage accepts a result that shows up)
|
|
137
|
+
* and arm the hard-kill backstop for workers that are genuinely hung.
|
|
138
|
+
*/
|
|
139
|
+
private onTimeout;
|
|
140
|
+
/** No result after the full hard-kill window — the worker really is hung. */
|
|
141
|
+
private onHardTimeout;
|
|
142
|
+
private drain;
|
|
143
|
+
private settle;
|
|
144
|
+
/**
|
|
145
|
+
* Recycle every idle worker now (fresh WASM heaps). The orchestrator calls
|
|
146
|
+
* this before its retry pass so crash-on-memory files get the cleanest heap.
|
|
147
|
+
*/
|
|
148
|
+
recycleAll(): void;
|
|
149
|
+
/** Terminate all workers and reject any outstanding parses. */
|
|
150
|
+
destroy(): Promise<void>;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=parse-pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-pool.d.ts","sourceRoot":"","sources":["../../src/extraction/parse-pool.ts"],"names":[],"mappings":"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"}
|