cgraphx 2.0.2 → 2.0.6
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/.claude-template/FLOW-MAP.md +13 -3
- package/dist/.claude-template/agents/task-history.md +186 -0
- package/dist/.claude-template/commands/end.md +1 -0
- package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +5 -3
- package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +8 -8
- package/dist/.claude-template/skills/cgraphx-guide/how-to-use.md +8 -8
- package/dist/.claude-template/skills/clarify-requirements/SKILL.md +13 -9
- package/dist/.claude-template/skills/db-query/SKILL.md +19 -2
- package/dist/.claude-template/skills/iboc-check/SKILL.md +51 -23
- package/dist/.claude-template/skills/iboc-check/filler-prompt.md +3 -4
- package/dist/.claude-template/skills/run-api-test/SKILL.md +15 -15
- package/dist/.claude-template/skills/run-api-test/assets/{template-test-report.md → template-/346/216/245/345/217/243/346/265/213/350/257/225/346/212/245/345/221/212.md} +4 -4
- package/dist/.claude-template/skills/run-api-test/references/bru-run.md +1 -1
- package/dist/.claude-template/skills/run-api-test/references/db-verification.md +2 -2
- package/dist/.claude-template/skills/run-api-test/references/report-format.md +6 -6
- package/dist/.claude-template/skills/run-api-test/references/service-readiness.md +1 -1
- package/dist/.claude-template/skills/run-api-test/references/test-scope.md +6 -6
- package/dist/.claude-template/skills/run-ui-test/SKILL.md +186 -0
- package/dist/.claude-template/skills/run-ui-test/references/report-format.md +77 -0
- package/dist/.claude-template/skills/subagent-implement/SKILL.md +3 -2
- package/dist/.claude-template/skills/write-api/SKILL.md +18 -18
- package/dist/.claude-template/skills/write-api/assets/{template-api-spec.md → template-/346/216/245/345/217/243/346/265/213/350/257/225-spec.md} +1 -1
- package/dist/.claude-template/skills/write-api/references/{api-spec-format.md → /346/216/245/345/217/243/346/265/213/350/257/225-spec-format.md} +3 -3
- package/dist/.claude-template/skills/write-plan/SKILL.md +4 -2
- package/dist/.claude-template/skills/write-ui-test/SKILL.md +125 -0
- package/dist/.claude-template/skills/write-ui-test/references//347/224/250/344/276/213/350/247/204/346/240/274-format.md +94 -0
- package/dist/core/code/engine/cli/analyze-config.js +320 -0
- package/dist/core/code/engine/cli/analyze.js +1086 -0
- package/dist/core/code/engine/cli/cli-message.js +83 -0
- package/dist/core/code/engine/cli/detect-changes-format.js +58 -0
- package/dist/core/code/engine/cli/embedding-dims.js +43 -0
- package/dist/core/code/engine/cli/format-elapsed.js +12 -0
- package/dist/core/code/engine/cli/help-i18n.js +144 -0
- package/dist/core/code/engine/cli/i18n/en.js +110 -0
- package/dist/core/code/engine/cli/i18n/index.js +47 -0
- package/dist/core/code/engine/cli/i18n/resources.js +9 -0
- package/dist/core/code/engine/cli/i18n/zh-CN.js +110 -0
- package/dist/core/code/engine/cli/lazy-action.js +67 -0
- package/dist/core/code/engine/cli/optional-grammars.js +136 -0
- package/dist/core/code/engine/cli/resolve-invocation.js +76 -0
- package/dist/core/code/engine/cli/status.js +156 -0
- package/dist/core/code/engine/cli/tool.js +384 -0
- package/dist/core/code/engine/config/ignore-service.js +511 -0
- package/dist/core/code/engine/config/supported-languages.js +17 -0
- package/dist/core/code/engine/core/analysis-features.js +64 -0
- package/dist/core/code/engine/core/analyzer-identity.js +2171 -0
- package/dist/core/code/engine/core/git-staleness.js +180 -0
- package/dist/core/code/engine/core/graph/graph.js +180 -0
- package/dist/core/code/engine/core/graph/import-cycles.js +106 -0
- package/dist/core/code/engine/core/graph/types.js +2 -0
- package/dist/core/code/engine/core/index-freshness.js +12 -0
- package/dist/core/code/engine/core/ingestion/binding-accumulator.js +341 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/c-cpp.js +168 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/csharp.js +9 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/dart.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/go.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/jvm.js +54 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/php.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/python.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/ruby.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/rust.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/swift.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/typescript-javascript.js +11 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/generic.js +62 -0
- package/dist/core/code/engine/core/ingestion/call-processor.js +503 -0
- package/dist/core/code/engine/core/ingestion/call-routing.js +98 -0
- package/dist/core/code/engine/core/ingestion/call-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/cfg/callee-cell-format.js +45 -0
- package/dist/core/code/engine/core/ingestion/cfg/cfg-builder.js +202 -0
- package/dist/core/code/engine/core/ingestion/cfg/collect.js +81 -0
- package/dist/core/code/engine/core/ingestion/cfg/control-dependence.js +185 -0
- package/dist/core/code/engine/core/ingestion/cfg/control-flow-context.js +130 -0
- package/dist/core/code/engine/core/ingestion/cfg/emit.js +646 -0
- package/dist/core/code/engine/core/ingestion/cfg/post-dominators.js +182 -0
- package/dist/core/code/engine/core/ingestion/cfg/reaching-def-reason-codec.js +139 -0
- package/dist/core/code/engine/core/ingestion/cfg/reaching-defs-graph.js +322 -0
- package/dist/core/code/engine/core/ingestion/cfg/reaching-defs.js +792 -0
- package/dist/core/code/engine/core/ingestion/cfg/synthetic-escape.js +305 -0
- package/dist/core/code/engine/core/ingestion/cfg/traversal-result.js +6 -0
- package/dist/core/code/engine/core/ingestion/cfg/types.js +14 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp-harvest.js +545 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp.js +590 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/call-site-harvest.js +356 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp-harvest.js +593 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp.js +871 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/dart-harvest.js +874 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/dart.js +840 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/go-harvest.js +625 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/go.js +642 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/java-harvest.js +517 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/java.js +816 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin-harvest.js +723 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin.js +813 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/php-harvest.js +630 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/php.js +725 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/python-harvest.js +776 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/python.js +562 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby-harvest.js +591 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby.js +760 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/rust-harvest.js +877 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/rust.js +562 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/scope-tree-harvest.js +120 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/swift-harvest.js +683 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/swift.js +791 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript-harvest.js +1060 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript.js +587 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/c-cpp.js +77 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/csharp.js +24 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/dart.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/go.js +28 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/jvm.js +67 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/php.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/python.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/ruby.js +13 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/rust.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/swift.js +21 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/typescript-javascript.js +31 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/generic.js +144 -0
- package/dist/core/code/engine/core/ingestion/class-types.js +2 -0
- package/dist/core/code/engine/core/ingestion/cluster-enricher.js +174 -0
- package/dist/core/code/engine/core/ingestion/community-processor.js +604 -0
- package/dist/core/code/engine/core/ingestion/constants.js +26 -0
- package/dist/core/code/engine/core/ingestion/cpp-ue-preprocessor.js +263 -0
- package/dist/core/code/engine/core/ingestion/csharp-namespace-gate.js +133 -0
- package/dist/core/code/engine/core/ingestion/di-extractors/index.js +38 -0
- package/dist/core/code/engine/core/ingestion/di-extractors/spring.js +310 -0
- package/dist/core/code/engine/core/ingestion/emit-references.js +244 -0
- package/dist/core/code/engine/core/ingestion/entry-point-scoring.js +201 -0
- package/dist/core/code/engine/core/ingestion/export-detection.js +244 -0
- package/dist/core/code/engine/core/ingestion/field-extractor.js +29 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/c-cpp.js +107 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/csharp.js +124 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/dart.js +99 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/go.js +102 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/helpers.js +198 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/jvm.js +172 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/php.js +67 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/python.js +94 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/ruby.js +79 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/rust.js +55 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/swift.js +93 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/typescript-javascript.js +59 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/generic.js +147 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/typescript.js +266 -0
- package/dist/core/code/engine/core/ingestion/field-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/filesystem-walker.js +136 -0
- package/dist/core/code/engine/core/ingestion/finalize-orchestrator.js +159 -0
- package/dist/core/code/engine/core/ingestion/framework-detection.js +432 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/analysis-features.js +38 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/annotation-arguments.js +234 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/aop-candidates.js +88 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/aop.js +487 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/auto-configuration.js +21 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-candidates.js +189 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-catalog.js +32 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-factories.js +73 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/conditionals.js +323 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/config-bindings.js +119 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/di-metadata.js +385 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/resource-injection.js +96 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/c-cpp.js +17 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/csharp.js +46 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/dart.js +59 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/go.js +30 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/jvm.js +73 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/php.js +19 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/python.js +45 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/ruby.js +20 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/rust.js +58 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/swift.js +94 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/typescript-javascript.js +26 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/csharp.js +128 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/go.js +50 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/jvm.js +112 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/php.js +80 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/python.js +75 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/resolver-factory.js +36 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/ruby.js +20 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/rust.js +79 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/standard.js +180 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/types.js +7 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/utils.js +153 -0
- package/dist/core/code/engine/core/ingestion/import-target-adapter.js +99 -0
- package/dist/core/code/engine/core/ingestion/language-config.js +391 -0
- package/dist/core/code/engine/core/ingestion/language-provider.js +25 -0
- package/dist/core/code/engine/core/ingestion/languages/c/arity-metadata.js +98 -0
- package/dist/core/code/engine/core/ingestion/languages/c/arity.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/c/capture-side-channel.js +69 -0
- package/dist/core/code/engine/core/ingestion/languages/c/captures.js +189 -0
- package/dist/core/code/engine/core/ingestion/languages/c/header-scan.js +58 -0
- package/dist/core/code/engine/core/ingestion/languages/c/import-decomposer.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/c/import-target.js +103 -0
- package/dist/core/code/engine/core/ingestion/languages/c/index.js +33 -0
- package/dist/core/code/engine/core/ingestion/languages/c/interpret.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/c/merge-bindings.js +26 -0
- package/dist/core/code/engine/core/ingestion/languages/c/query.js +210 -0
- package/dist/core/code/engine/core/ingestion/languages/c/scope-resolver.js +112 -0
- package/dist/core/code/engine/core/ingestion/languages/c/simple-hooks.js +24 -0
- package/dist/core/code/engine/core/ingestion/languages/c/static-linkage.js +109 -0
- package/dist/core/code/engine/core/ingestion/languages/c-cpp.js +506 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/adl.js +804 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/arity-metadata.js +258 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/arity.js +37 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/capture-side-channel.js +89 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/captures.js +1975 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-extractor.js +311 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-filter.js +210 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/conversion-rank.js +163 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/file-local-linkage.js +327 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/header-scan.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/import-decomposer.js +134 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/import-target.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/index.js +33 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/inline-namespaces.js +379 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/interpret.js +239 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/member-lookup.js +470 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/merge-bindings.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/query.js +763 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/range-bindings.js +230 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/scope-resolver.js +354 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/simple-hooks.js +67 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/two-phase-lookup.js +348 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/type-classifier.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/user-defined-conversions.js +128 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/accessor-unwrap.js +67 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/arity-metadata.js +49 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/arity.js +40 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/captures.js +557 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/import-decomposer.js +96 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/import-target.js +176 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/index.js +95 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/interpret.js +150 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/merge-bindings.js +58 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/namespace-siblings.js +708 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/qualified-type-names.js +62 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/query.js +578 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/receiver-binding.js +142 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/resolution-config.js +18 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/scope-resolver.js +84 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/simple-hooks.js +81 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp.js +204 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/arity-metadata.js +38 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/arity.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/built-ins.js +37 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/cache-stats.js +30 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/captures.js +1096 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/expand-wildcards.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/extension-type-preprocess.js +33 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/import-target.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/index.js +45 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/interpret.js +101 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/merge-bindings.js +42 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/query.js +246 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/receiver-binding.js +90 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/scope-resolver.js +197 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/signature-bindings.js +54 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/simple-hooks.js +61 -0
- package/dist/core/code/engine/core/ingestion/languages/dart.js +138 -0
- package/dist/core/code/engine/core/ingestion/languages/go/arity-metadata.js +71 -0
- package/dist/core/code/engine/core/ingestion/languages/go/arity.js +17 -0
- package/dist/core/code/engine/core/ingestion/languages/go/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/go/captures.js +492 -0
- package/dist/core/code/engine/core/ingestion/languages/go/expand-wildcards.js +97 -0
- package/dist/core/code/engine/core/ingestion/languages/go/generic-type-parameters.js +146 -0
- package/dist/core/code/engine/core/ingestion/languages/go/import-decomposer.js +47 -0
- package/dist/core/code/engine/core/ingestion/languages/go/import-target.js +70 -0
- package/dist/core/code/engine/core/ingestion/languages/go/index.js +39 -0
- package/dist/core/code/engine/core/ingestion/languages/go/interface-impls.js +955 -0
- package/dist/core/code/engine/core/ingestion/languages/go/interpret.js +177 -0
- package/dist/core/code/engine/core/ingestion/languages/go/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/go/method-owners.js +131 -0
- package/dist/core/code/engine/core/ingestion/languages/go/namespace-mirror.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/go/package-clause.js +79 -0
- package/dist/core/code/engine/core/ingestion/languages/go/package-siblings.js +83 -0
- package/dist/core/code/engine/core/ingestion/languages/go/query.js +298 -0
- package/dist/core/code/engine/core/ingestion/languages/go/range-binding.js +127 -0
- package/dist/core/code/engine/core/ingestion/languages/go/receiver-binding.js +24 -0
- package/dist/core/code/engine/core/ingestion/languages/go/scope-resolver.js +75 -0
- package/dist/core/code/engine/core/ingestion/languages/go/simple-hooks.js +31 -0
- package/dist/core/code/engine/core/ingestion/languages/go/type-binding.js +279 -0
- package/dist/core/code/engine/core/ingestion/languages/go.js +160 -0
- package/dist/core/code/engine/core/ingestion/languages/index.js +66 -0
- package/dist/core/code/engine/core/ingestion/languages/java/analysis-features.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/java/arity-metadata.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/java/arity.js +27 -0
- package/dist/core/code/engine/core/ingestion/languages/java/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/java/capture-side-channel.js +123 -0
- package/dist/core/code/engine/core/ingestion/languages/java/captures.js +791 -0
- package/dist/core/code/engine/core/ingestion/languages/java/import-decomposer.js +88 -0
- package/dist/core/code/engine/core/ingestion/languages/java/import-target.js +103 -0
- package/dist/core/code/engine/core/ingestion/languages/java/index.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/java/interpret.js +146 -0
- package/dist/core/code/engine/core/ingestion/languages/java/merge-bindings.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/java/package-facts.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/java/package-siblings.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/java/query.js +319 -0
- package/dist/core/code/engine/core/ingestion/languages/java/receiver-binding.js +98 -0
- package/dist/core/code/engine/core/ingestion/languages/java/scope-resolver.js +213 -0
- package/dist/core/code/engine/core/ingestion/languages/java/simple-hooks.js +39 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-aop.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-bean-metadata.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-conditionals.js +52 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-config-bindings.js +222 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-di.js +165 -0
- package/dist/core/code/engine/core/ingestion/languages/java.js +192 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/arity.js +15 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/captures.js +1122 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/import-target.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/index.js +109 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/interpret.js +45 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/query.js +659 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/scope-resolver.js +78 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/simple-hooks.js +44 -0
- package/dist/core/code/engine/core/ingestion/languages/jvm/package-facts.js +46 -0
- package/dist/core/code/engine/core/ingestion/languages/jvm/package-siblings.js +200 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/arity-metadata.js +23 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/arity.js +18 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/capture-side-channel.js +160 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/captures.js +1262 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/companion-scopes.js +72 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/import-decomposer.js +40 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/import-target.js +135 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/index.js +26 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/interpret.js +75 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/merge-bindings.js +28 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/owners.js +134 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/package-facts.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/package-siblings.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/query.js +243 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/receiver-binding.js +103 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/scope-resolver.js +207 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/simple-hooks.js +42 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-aop.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-bean-metadata.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-conditionals.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-di.js +304 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin.js +189 -0
- package/dist/core/code/engine/core/ingestion/languages/php/arity-metadata.js +66 -0
- package/dist/core/code/engine/core/ingestion/languages/php/arity.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/php/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/php/captures.js +1166 -0
- package/dist/core/code/engine/core/ingestion/languages/php/import-decomposer.js +238 -0
- package/dist/core/code/engine/core/ingestion/languages/php/import-target.js +213 -0
- package/dist/core/code/engine/core/ingestion/languages/php/index.js +85 -0
- package/dist/core/code/engine/core/ingestion/languages/php/interpret.js +256 -0
- package/dist/core/code/engine/core/ingestion/languages/php/merge-bindings.js +50 -0
- package/dist/core/code/engine/core/ingestion/languages/php/namespace-siblings.js +353 -0
- package/dist/core/code/engine/core/ingestion/languages/php/query.js +391 -0
- package/dist/core/code/engine/core/ingestion/languages/php/receiver-binding.js +135 -0
- package/dist/core/code/engine/core/ingestion/languages/php/scope-resolver.js +361 -0
- package/dist/core/code/engine/core/ingestion/languages/php/simple-hooks.js +116 -0
- package/dist/core/code/engine/core/ingestion/languages/php.js +302 -0
- package/dist/core/code/engine/core/ingestion/languages/python/arity-metadata.js +49 -0
- package/dist/core/code/engine/core/ingestion/languages/python/arity.js +41 -0
- package/dist/core/code/engine/core/ingestion/languages/python/cache-stats.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/python/captures.js +299 -0
- package/dist/core/code/engine/core/ingestion/languages/python/depends-references.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/python/import-decomposer.js +115 -0
- package/dist/core/code/engine/core/ingestion/languages/python/import-target.js +440 -0
- package/dist/core/code/engine/core/ingestion/languages/python/index-stats.js +30 -0
- package/dist/core/code/engine/core/ingestion/languages/python/index.js +96 -0
- package/dist/core/code/engine/core/ingestion/languages/python/interpret.js +430 -0
- package/dist/core/code/engine/core/ingestion/languages/python/merge-bindings.js +47 -0
- package/dist/core/code/engine/core/ingestion/languages/python/query.js +323 -0
- package/dist/core/code/engine/core/ingestion/languages/python/receiver-binding.js +310 -0
- package/dist/core/code/engine/core/ingestion/languages/python/scope-resolver.js +80 -0
- package/dist/core/code/engine/core/ingestion/languages/python/simple-hooks.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/python.js +140 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/arity.js +41 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/captures.js +864 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/import-target.js +88 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/index.js +29 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/interpret.js +115 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/query.js +349 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/receiver-binding.js +70 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/scope-resolver.js +263 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/simple-hooks.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby.js +215 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/arity.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/captures.js +304 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/import-decomposer.js +167 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/import-target.js +108 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/index.js +29 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/interpret.js +201 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/method-owners.js +76 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/module-path.js +222 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/qualified-call.js +482 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/query.js +280 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/range-binding.js +687 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/receiver-binding.js +148 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/scope-resolver.js +151 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/simple-hooks.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/rust.js +183 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/arity-metadata.js +44 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/arity.js +45 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/base-type.js +30 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/captures.js +594 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/conditional-directive-preprocess.js +256 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/implicit-imports.js +60 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/import-decomposer.js +87 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/import-target.js +84 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/index.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/interpret.js +93 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/merge-bindings.js +51 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/query.js +226 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/receiver-binding.js +169 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/scope-resolver.js +192 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/sibling-type-bindings.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/signature-bindings.js +69 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/simple-hooks.js +65 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/target-grouping.js +97 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/target-siblings.js +74 -0
- package/dist/core/code/engine/core/ingestion/languages/swift.js +246 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/arity-metadata.js +106 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/arity.js +57 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/array-callback.js +58 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/cache-stats.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/captures.js +956 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-export-assignment.js +535 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-module-exports.js +196 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/import-decomposer.js +374 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/import-target.js +65 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/index.js +108 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/interpret.js +344 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/merge-bindings.js +161 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/nuxt-auto-imports.js +325 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/query.js +1328 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/receiver-binding.js +201 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/scope-resolver.js +293 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/simple-hooks.js +139 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript.js +455 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/captures.js +70 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/import-target.js +61 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/index.js +55 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/scope-resolver.js +295 -0
- package/dist/core/code/engine/core/ingestion/languages/vue.js +96 -0
- package/dist/core/code/engine/core/ingestion/local-symbol-pruner.js +68 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/csharp.js +290 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/dart.js +392 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/go.js +179 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/jvm.js +350 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/php.js +306 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/python.js +312 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/ruby.js +289 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/rust.js +198 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/swift.js +286 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/typescript-javascript.js +341 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/generic.js +209 -0
- package/dist/core/code/engine/core/ingestion/method-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/model/field-registry.js +41 -0
- package/dist/core/code/engine/core/ingestion/model/index.js +52 -0
- package/dist/core/code/engine/core/ingestion/model/method-registry.js +138 -0
- package/dist/core/code/engine/core/ingestion/model/owned-members-lookup.js +46 -0
- package/dist/core/code/engine/core/ingestion/model/registration-table.js +234 -0
- package/dist/core/code/engine/core/ingestion/model/resolve.js +183 -0
- package/dist/core/code/engine/core/ingestion/model/scope-resolution-indexes.js +43 -0
- package/dist/core/code/engine/core/ingestion/model/semantic-model.js +179 -0
- package/dist/core/code/engine/core/ingestion/model/symbol-table.js +216 -0
- package/dist/core/code/engine/core/ingestion/model/type-registry.js +84 -0
- package/dist/core/code/engine/core/ingestion/mro-processor.js +709 -0
- package/dist/core/code/engine/core/ingestion/parsing-processor.js +312 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/communities.js +69 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/cross-file.js +71 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/di.js +338 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/http-api-calls.js +312 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/index.js +54 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/mro.js +40 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/orm.js +78 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/parse-impl.js +1286 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/parse.js +41 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/processes.js +193 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/prune-local-symbols.js +29 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/registry.js +52 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/routes.js +409 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/rpc-edges.js +301 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/runner.js +207 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/scan.js +49 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-aop.js +442 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-auto-configuration.js +264 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-config.js +440 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/structure.js +38 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/tools.js +89 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/types.js +40 -0
- package/dist/core/code/engine/core/ingestion/pipeline.js +152 -0
- package/dist/core/code/engine/core/ingestion/process-processor.js +325 -0
- package/dist/core/code/engine/core/ingestion/resolve-references.js +205 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/constant-resolver.js +135 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/django-root-discovery.js +221 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/django.js +428 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/expo.js +39 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/fastapi-router-bindings.js +264 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/laravel.js +501 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/middleware.js +175 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/nextjs.js +81 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/php.js +25 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/python-const-resolver.js +307 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/response-shapes.js +299 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/route-path.js +71 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/spring-shared.js +310 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/spring.js +441 -0
- package/dist/core/code/engine/core/ingestion/scope-extractor-bridge.js +60 -0
- package/dist/core/code/engine/core/ingestion/scope-extractor.js +1373 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/contract/scope-resolver.js +282 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +72 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/edges.js +194 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/ids.js +472 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +49 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +43 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +274 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +93 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/callable-value-flow.js +1240 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/compound-receiver.js +1174 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/free-call-fallback.js +873 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/imported-return-types.js +226 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/mro.js +107 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/overload-narrowing.js +441 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/property-dispatch.js +122 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1720 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/phase.js +395 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +208 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/registry.js +49 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/run.js +632 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +112 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/resolution-outcome.js +41 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/scope/namespace-targets.js +81 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/scope/walkers.js +1835 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/unresolved-receivers.js +242 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/utils/definition-id.js +22 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/workspace-index.js +151 -0
- package/dist/core/code/engine/core/ingestion/structure-processor.js +40 -0
- package/dist/core/code/engine/core/ingestion/tree-sitter-queries.js +2244 -0
- package/dist/core/code/engine/core/ingestion/ts-js-hoc-utils.js +115 -0
- package/dist/core/code/engine/core/ingestion/type-env.js +1136 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/c-cpp.js +555 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/csharp.js +570 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/dart.js +372 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/go.js +508 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/jvm.js +875 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/php.js +537 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/python.js +477 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/ruby.js +380 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/rust.js +502 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/shared.js +843 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/swift.js +490 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/types.js +2 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/typescript.js +690 -0
- package/dist/core/code/engine/core/ingestion/utils/ast-helpers.js +1693 -0
- package/dist/core/code/engine/core/ingestion/utils/call-analysis.js +779 -0
- package/dist/core/code/engine/core/ingestion/utils/callable-flow-captures.js +932 -0
- package/dist/core/code/engine/core/ingestion/utils/callable-labels.js +49 -0
- package/dist/core/code/engine/core/ingestion/utils/deferred-resolution-profile.js +151 -0
- package/dist/core/code/engine/core/ingestion/utils/effective-ram.js +67 -0
- package/dist/core/code/engine/core/ingestion/utils/env.js +60 -0
- package/dist/core/code/engine/core/ingestion/utils/event-loop.js +9 -0
- package/dist/core/code/engine/core/ingestion/utils/graph-sort.js +103 -0
- package/dist/core/code/engine/core/ingestion/utils/heap-probe.js +45 -0
- package/dist/core/code/engine/core/ingestion/utils/heritage-marker.js +47 -0
- package/dist/core/code/engine/core/ingestion/utils/line-base.js +24 -0
- package/dist/core/code/engine/core/ingestion/utils/max-file-size.js +59 -0
- package/dist/core/code/engine/core/ingestion/utils/method-props.js +198 -0
- package/dist/core/code/engine/core/ingestion/utils/qualified-name.js +73 -0
- package/dist/core/code/engine/core/ingestion/utils/receiver-chain-captures.js +60 -0
- package/dist/core/code/engine/core/ingestion/utils/receiver-chain-codec.js +188 -0
- package/dist/core/code/engine/core/ingestion/utils/scope-tree-walk.js +36 -0
- package/dist/core/code/engine/core/ingestion/utils/symbol-labels.js +48 -0
- package/dist/core/code/engine/core/ingestion/utils/template-arguments.js +187 -0
- package/dist/core/code/engine/core/ingestion/utils/type-parameters.js +209 -0
- package/dist/core/code/engine/core/ingestion/utils/verbose.js +6 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/c-cpp.js +133 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/csharp.js +66 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/dart.js +111 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/go.js +153 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/jvm.js +145 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/php.js +61 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/python.js +104 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/ruby.js +55 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/rust.js +79 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/swift.js +91 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/typescript-javascript.js +86 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/generic.js +111 -0
- package/dist/core/code/engine/core/ingestion/variable-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/vue-sfc-extractor.js +544 -0
- package/dist/core/code/engine/core/ingestion/workers/callable-id.js +122 -0
- package/dist/core/code/engine/core/ingestion/workers/clone-safety.js +470 -0
- package/dist/core/code/engine/core/ingestion/workers/parse-worker.js +2456 -0
- package/dist/core/code/engine/core/ingestion/workers/post-result.js +90 -0
- package/dist/core/code/engine/core/ingestion/workers/quarantine.js +41 -0
- package/dist/core/code/engine/core/ingestion/workers/result-merge.js +59 -0
- package/dist/core/code/engine/core/ingestion/workers/worker-pool.js +1725 -0
- package/dist/core/code/engine/core/ingestion/workspace-config.js +139 -0
- package/dist/core/code/engine/core/lbug/conn-lock.js +72 -0
- package/dist/core/code/engine/core/lbug/csv-generator.js +710 -0
- package/dist/core/code/engine/core/lbug/cypher-escape.js +24 -0
- package/dist/core/code/engine/core/lbug/extension-load-error.js +339 -0
- package/dist/core/code/engine/core/lbug/extension-loader.js +261 -0
- package/dist/core/code/engine/core/lbug/graph-emit-sink.js +584 -0
- package/dist/core/code/engine/core/lbug/lbug-adapter.js +2703 -0
- package/dist/core/code/engine/core/lbug/lbug-config.js +1029 -0
- package/dist/core/code/engine/core/lbug/native-check.js +435 -0
- package/dist/core/code/engine/core/lbug/pool-adapter.js +973 -0
- package/dist/core/code/engine/core/lbug/query-params.js +25 -0
- package/dist/core/code/engine/core/lbug/query-result-utils.js +31 -0
- package/dist/core/code/engine/core/lbug/rel-pair-routing.js +373 -0
- package/dist/core/code/engine/core/lbug/schema.js +771 -0
- package/dist/core/code/engine/core/lbug/shutdown-helpers.js +40 -0
- package/dist/core/code/engine/core/lbug/sidecar-recovery.js +716 -0
- package/dist/core/code/engine/core/lbug/stdio-capture.js +49 -0
- package/dist/core/code/engine/core/lbug/sync-csv-writer.js +115 -0
- package/dist/core/code/engine/core/lbug/wal-checkpoint-driver.js +215 -0
- package/dist/core/code/engine/core/lbug/wal-driver-state.js +28 -0
- package/dist/core/code/engine/core/logger.js +339 -0
- package/dist/core/code/engine/core/platform/capabilities.js +91 -0
- package/dist/core/code/engine/core/run-analyze.js +1098 -0
- package/dist/core/code/engine/core/tree-sitter/parser-loader.js +281 -0
- package/dist/core/code/engine/core/tree-sitter/safe-parse.js +258 -0
- package/dist/core/code/engine/core/tree-sitter/vendored-grammars.js +64 -0
- package/dist/core/code/engine/lib/utils.js +121 -0
- package/dist/core/code/engine/mcp/core/lbug-adapter.js +27 -0
- package/dist/core/code/engine/mcp/local/aop-metadata.js +230 -0
- package/dist/core/code/engine/mcp/local/bean-metadata.js +49 -0
- package/dist/core/code/engine/mcp/local/limits.js +15 -0
- package/dist/core/code/engine/mcp/local/line-display.js +6 -0
- package/dist/core/code/engine/mcp/local/local-backend.js +4142 -0
- package/dist/core/code/engine/storage/branch-index.js +72 -0
- package/dist/core/code/engine/storage/file-hash.js +95 -0
- package/dist/core/code/engine/storage/fs-atomic.js +34 -0
- package/dist/core/code/engine/storage/git.js +555 -0
- package/dist/core/code/engine/storage/index-lock.js +664 -0
- package/dist/core/code/engine/storage/parse-cache.js +650 -0
- package/dist/core/code/engine/storage/parsedfile-store.js +620 -0
- package/dist/core/code/engine/storage/repo-manager.js +1061 -0
- package/dist/core/code/engine/storage/scope-index-store.js +247 -0
- package/dist/core/code/engine/types/pipeline.js +2 -0
- package/dist/core/code/scripts/install-duckdb-extension.mjs +125 -0
- package/dist/core/code/scripts/resolve-analyze-cmd.cjs +346 -0
- package/dist/core/code/shared/graph/types.js +8 -0
- package/dist/core/code/shared/index.js +105 -0
- package/dist/core/code/shared/integrations/circuit-breaker.js +242 -0
- package/dist/core/code/shared/integrations/resilient-fetch.js +224 -0
- package/dist/core/code/shared/integrations/retry.js +70 -0
- package/dist/core/code/shared/integrations/understand-quickly.js +145 -0
- package/dist/core/code/shared/language-detection.js +162 -0
- package/dist/core/code/shared/languages.js +27 -0
- package/dist/core/code/shared/lbug/schema-constants.js +98 -0
- package/dist/core/code/shared/mro-strategy.js +2 -0
- package/dist/core/code/shared/pipeline.js +5 -0
- package/dist/core/code/shared/scope-resolution/callable-flow-site.js +11 -0
- package/dist/core/code/shared/scope-resolution/def-index.js +53 -0
- package/dist/core/code/shared/scope-resolution/evidence-weights.js +87 -0
- package/dist/core/code/shared/scope-resolution/finalize-algorithm.js +807 -0
- package/dist/core/code/shared/scope-resolution/language-classification.js +46 -0
- package/dist/core/code/shared/scope-resolution/method-dispatch-index.js +100 -0
- package/dist/core/code/shared/scope-resolution/module-scope-index.js +59 -0
- package/dist/core/code/shared/scope-resolution/origin-priority.js +23 -0
- package/dist/core/code/shared/scope-resolution/parsed-file.js +54 -0
- package/dist/core/code/shared/scope-resolution/position-index.js +136 -0
- package/dist/core/code/shared/scope-resolution/qualified-name-index.js +77 -0
- package/dist/core/code/shared/scope-resolution/reference-site.js +24 -0
- package/dist/core/code/shared/scope-resolution/registries/class-registry.js +32 -0
- package/dist/core/code/shared/scope-resolution/registries/context.js +52 -0
- package/dist/core/code/shared/scope-resolution/registries/evidence.js +152 -0
- package/dist/core/code/shared/scope-resolution/registries/field-registry.js +33 -0
- package/dist/core/code/shared/scope-resolution/registries/lookup-core.js +392 -0
- package/dist/core/code/shared/scope-resolution/registries/lookup-qualified.js +58 -0
- package/dist/core/code/shared/scope-resolution/registries/macro-registry.js +34 -0
- package/dist/core/code/shared/scope-resolution/registries/method-registry.js +34 -0
- package/dist/core/code/shared/scope-resolution/registries/tie-breaks.js +63 -0
- package/dist/core/code/shared/scope-resolution/resolve-type-ref.js +128 -0
- package/dist/core/code/shared/scope-resolution/scope-id.js +49 -0
- package/dist/core/code/shared/scope-resolution/scope-tree.js +225 -0
- package/dist/core/code/shared/scope-resolution/symbol-definition.js +12 -0
- package/dist/core/code/shared/scope-resolution/types.js +25 -0
- package/dist/core/code/shared/test-helpers.js +17 -0
- package/dist/core/code/vendor/leiden/index.cjs +355 -0
- package/dist/core/code/vendor/leiden/utils.cjs +419 -0
- package/dist/core/dbquery/cli.d.ts.map +1 -1
- package/dist/core/dbquery/cli.js +5 -4
- package/dist/core/dbquery/cli.js.map +1 -1
- package/dist/core/dbquery/config.d.ts.map +1 -1
- package/dist/core/dbquery/config.js +39 -3
- package/dist/core/dbquery/config.js.map +1 -1
- package/dist/core/dbquery/drivers/http.d.ts +23 -0
- package/dist/core/dbquery/drivers/http.d.ts.map +1 -0
- package/dist/core/dbquery/drivers/http.js +125 -0
- package/dist/core/dbquery/drivers/http.js.map +1 -0
- package/dist/core/dbquery/drivers/mysql.js +1 -1
- package/dist/core/dbquery/drivers/mysql.js.map +1 -1
- package/dist/core/dbquery/drivers/postgres.js +1 -1
- package/dist/core/dbquery/drivers/postgres.js.map +1 -1
- package/dist/core/dbquery/executor.d.ts.map +1 -1
- package/dist/core/dbquery/executor.js +46 -12
- package/dist/core/dbquery/executor.js.map +1 -1
- package/dist/core/dbquery/format.d.ts.map +1 -1
- package/dist/core/dbquery/format.js +2 -1
- package/dist/core/dbquery/format.js.map +1 -1
- package/dist/core/dbquery/init.d.ts.map +1 -1
- package/dist/core/dbquery/init.js +7 -0
- package/dist/core/dbquery/init.js.map +1 -1
- package/dist/core/dbquery/types.d.ts +55 -7
- package/dist/core/dbquery/types.d.ts.map +1 -1
- package/dist/core/directory.d.ts +17 -0
- package/dist/core/directory.d.ts.map +1 -1
- package/dist/core/directory.js +37 -0
- package/dist/core/directory.js.map +1 -1
- package/dist/core/features/cli.d.ts.map +1 -1
- package/dist/core/features/cli.js +3 -2
- package/dist/core/features/cli.js.map +1 -1
- package/dist/core/features/scanner.d.ts +1 -1
- package/dist/core/features/scanner.d.ts.map +1 -1
- package/dist/core/features/scanner.js +20 -4
- package/dist/core/features/scanner.js.map +1 -1
- package/dist/core/markdown/cli.d.ts.map +1 -1
- package/dist/core/markdown/cli.js +9 -8
- package/dist/core/markdown/cli.js.map +1 -1
- package/dist/core/timeline/cli.d.ts.map +1 -1
- package/dist/core/timeline/cli.js +13 -6
- package/dist/core/timeline/cli.js.map +1 -1
- package/dist/core/timeline/debris.d.ts +20 -0
- package/dist/core/timeline/debris.d.ts.map +1 -0
- package/dist/core/timeline/debris.js +124 -0
- package/dist/core/timeline/debris.js.map +1 -0
- package/dist/core/timeline/hook-runner.d.ts.map +1 -1
- package/dist/core/timeline/hook-runner.js +3 -1
- package/dist/core/timeline/hook-runner.js.map +1 -1
- package/dist/core/timeline/hooks.d.ts.map +1 -1
- package/dist/core/timeline/hooks.js +13 -5
- package/dist/core/timeline/hooks.js.map +1 -1
- package/dist/core/timeline/installer.d.ts +2 -0
- package/dist/core/timeline/installer.d.ts.map +1 -1
- package/dist/core/timeline/installer.js +12 -0
- package/dist/core/timeline/installer.js.map +1 -1
- package/dist/core/timeline/project-root.d.ts +21 -0
- package/dist/core/timeline/project-root.d.ts.map +1 -0
- package/dist/core/timeline/project-root.js +83 -0
- package/dist/core/timeline/project-root.js.map +1 -0
- package/dist/web/register.d.ts.map +1 -1
- package/dist/web/register.js +2 -1
- package/dist/web/register.js.map +1 -1
- package/package.json +1 -1
- package/dist/.claude-template/.cgraphx/timeline-current-turn.json +0 -1
- package/dist/.claude-template/skills/.cgraphx/timeline-current-turn.json +0 -1
- package/dist/.claude-template/skills/handdrawn-deck/.cgraphx/timeline-current-turn.json +0 -1
- package/dist/.claude-template/skills/handdrawn-deck/references/.cgraphx/timeline-current-turn.json +0 -1
- package/dist/.claude-template/skills/handdrawn-sketch-engine/.cgraphx/timeline-current-turn.json +0 -1
- /package/dist/.claude-template/skills/run-api-test/assets/{template-test-verify.jsonl → template-/346/216/245/345/217/243/346/265/213/350/257/225/351/252/214/350/257/201.jsonl"} +0 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// cgraph/src/core/ingestion/call-extractors/generic.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.createCallExtractor = createCallExtractor;
|
|
5
|
+
const call_analysis_js_1 = require("../utils/call-analysis.js");
|
|
6
|
+
/**
|
|
7
|
+
* Create a CallExtractor from a declarative config.
|
|
8
|
+
*/
|
|
9
|
+
function createCallExtractor(config) {
|
|
10
|
+
return {
|
|
11
|
+
language: config.language,
|
|
12
|
+
extract(callNode, callNameNode) {
|
|
13
|
+
// ── Path 1: Language-specific call site ──────────────────────────
|
|
14
|
+
// Non-standard call shapes (e.g. Java `::` method references) are
|
|
15
|
+
// handled entirely by the config hook. When it returns a result,
|
|
16
|
+
// the generic path is skipped — no argCount, no mixed chain.
|
|
17
|
+
//
|
|
18
|
+
// Note: `extractLanguageCallSite` is called on every `extract()`
|
|
19
|
+
// invocation — both `extract(callNode, undefined)` (parse-worker
|
|
20
|
+
// Path 1) and `extract(callNode, callNameNode)` (Path 2).
|
|
21
|
+
// Language hooks must therefore be idempotent and cheap (e.g. a
|
|
22
|
+
// single node-type check).
|
|
23
|
+
if (config.extractLanguageCallSite) {
|
|
24
|
+
const seed = config.extractLanguageCallSite(callNode);
|
|
25
|
+
if (seed) {
|
|
26
|
+
return {
|
|
27
|
+
...seed,
|
|
28
|
+
...(config.typeAsReceiverHeuristic ? { typeAsReceiverHeuristic: true } : {}),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// ── Path 2: Generic extraction via @call.name ────────────────────
|
|
33
|
+
if (!callNameNode)
|
|
34
|
+
return null;
|
|
35
|
+
const calledName = callNameNode.text;
|
|
36
|
+
const callForm = (0, call_analysis_js_1.inferCallForm)(callNode, callNameNode);
|
|
37
|
+
let receiverName = callForm === 'member' ? (0, call_analysis_js_1.extractReceiverName)(callNameNode) : undefined;
|
|
38
|
+
let receiverMixedChain;
|
|
39
|
+
// When the receiver is a complex expression (call chain, field chain,
|
|
40
|
+
// or mixed), extractReceiverName returns undefined. Walk the receiver
|
|
41
|
+
// node to build a unified mixed chain for deferred resolution.
|
|
42
|
+
if (callForm === 'member' && receiverName === undefined) {
|
|
43
|
+
const receiverNode = (0, call_analysis_js_1.extractReceiverNode)(callNameNode);
|
|
44
|
+
if (receiverNode) {
|
|
45
|
+
const extracted = (0, call_analysis_js_1.extractMixedChain)(receiverNode);
|
|
46
|
+
if (extracted && extracted.chain.length > 0) {
|
|
47
|
+
receiverMixedChain = extracted.chain;
|
|
48
|
+
receiverName = extracted.baseReceiverName;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
calledName,
|
|
54
|
+
...(callForm !== undefined ? { callForm } : {}),
|
|
55
|
+
...(receiverName !== undefined ? { receiverName } : {}),
|
|
56
|
+
argCount: (0, call_analysis_js_1.countCallArguments)(callNode),
|
|
57
|
+
...(receiverMixedChain !== undefined ? { receiverMixedChain } : {}),
|
|
58
|
+
...(config.typeAsReceiverHeuristic ? { typeAsReceiverHeuristic: true } : {}),
|
|
59
|
+
};
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
@@ -0,0 +1,503 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Route / fetch edge emission + exported-type-map helpers.
|
|
4
|
+
*
|
|
5
|
+
* The legacy call-resolution DAG that previously lived here (per-file type
|
|
6
|
+
* inference → receiver inference → dispatch selection → MRO walk over the
|
|
7
|
+
* legacy heritage map) was deleted in RING4-1 (#942): all languages now resolve
|
|
8
|
+
* calls through the scope-resolution registry pipeline. What remains are the
|
|
9
|
+
* language-agnostic edge emitters that are NOT part of call resolution:
|
|
10
|
+
*
|
|
11
|
+
* - `processRoutesFromExtracted` — CALLS edges from framework routes
|
|
12
|
+
* (e.g. Laravel) to their controller methods.
|
|
13
|
+
* - `processNextjsFetchRoutes` / `extractConsumerAccessedKeys` — FETCHES edges
|
|
14
|
+
* from `fetch()` calls to Next.js Route nodes.
|
|
15
|
+
* - `buildExportedTypeMapFromGraph` — exported symbol → return/declared type
|
|
16
|
+
* map, consumed by the cross-file enrichment pass.
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.processNextjsFetchRoutes = exports.extractConsumerAccessedKeys = exports.processRoutesFromExtracted = exports.accumulateExportedTypesFromParsedNode = void 0;
|
|
20
|
+
exports.buildExportedTypeMapFromGraph = buildExportedTypeMapFromGraph;
|
|
21
|
+
exports.resolveRouteHandlerSymbols = resolveRouteHandlerSymbols;
|
|
22
|
+
const utils_js_1 = require("../../lib/utils.js");
|
|
23
|
+
const event_loop_js_1 = require("./utils/event-loop.js");
|
|
24
|
+
const nextjs_js_1 = require("./route-extractors/nextjs.js");
|
|
25
|
+
const route_path_js_1 = require("./route-extractors/route-path.js");
|
|
26
|
+
const shared_js_1 = require("./type-extractors/shared.js");
|
|
27
|
+
const MAX_EXPORTS_PER_FILE = 500;
|
|
28
|
+
const MAX_TYPE_NAME_LENGTH = 256;
|
|
29
|
+
/** Record one exported graph node into the incremental ExportedTypeMap. */
|
|
30
|
+
const accumulateExportedTypesFromParsedNode = (result, node, symbolTable) => {
|
|
31
|
+
if (!node.properties?.isExported)
|
|
32
|
+
return;
|
|
33
|
+
if (!node.properties?.filePath || !node.properties?.name)
|
|
34
|
+
return;
|
|
35
|
+
const filePath = node.properties.filePath;
|
|
36
|
+
const name = node.properties.name;
|
|
37
|
+
if (!name || name.length > MAX_TYPE_NAME_LENGTH)
|
|
38
|
+
return;
|
|
39
|
+
const defs = symbolTable.lookupExactAll(filePath, name);
|
|
40
|
+
const def = defs.find((d) => d.nodeId === node.id) ?? defs[0];
|
|
41
|
+
if (!def)
|
|
42
|
+
return;
|
|
43
|
+
const typeName = def.returnType ?? def.declaredType;
|
|
44
|
+
if (!typeName || typeName.length > MAX_TYPE_NAME_LENGTH)
|
|
45
|
+
return;
|
|
46
|
+
const simpleType = (0, shared_js_1.extractReturnTypeName)(typeName) ?? typeName;
|
|
47
|
+
if (!simpleType)
|
|
48
|
+
return;
|
|
49
|
+
let fileExports = result.get(filePath);
|
|
50
|
+
if (!fileExports) {
|
|
51
|
+
fileExports = new Map();
|
|
52
|
+
result.set(filePath, fileExports);
|
|
53
|
+
}
|
|
54
|
+
if (fileExports.size < MAX_EXPORTS_PER_FILE) {
|
|
55
|
+
fileExports.set(name, simpleType);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
exports.accumulateExportedTypesFromParsedNode = accumulateExportedTypesFromParsedNode;
|
|
59
|
+
/** Build ExportedTypeMap from graph nodes — used for the worker path where the
|
|
60
|
+
* sequential TypeEnv is not available in the main thread. Collects
|
|
61
|
+
* returnType/declaredType from exported symbols with known types. */
|
|
62
|
+
function buildExportedTypeMapFromGraph(graph, symbolTable) {
|
|
63
|
+
const result = new Map();
|
|
64
|
+
graph.forEachNode((node) => {
|
|
65
|
+
(0, exports.accumulateExportedTypesFromParsedNode)(result, node, symbolTable);
|
|
66
|
+
});
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Confidence for route → controller-method CALLS edges. Framework-route
|
|
71
|
+
* controller references (e.g. `OrderController::class` in `routes/web.php`)
|
|
72
|
+
* resolve by global class name, so this matches the legacy `global`-tier
|
|
73
|
+
* confidence the tiered resolver previously assigned these edges.
|
|
74
|
+
*/
|
|
75
|
+
const ROUTE_EDGE_CONFIDENCE = 0.5;
|
|
76
|
+
/**
|
|
77
|
+
* Resolve a route's controller class from its normalized dot-joined
|
|
78
|
+
* fully-qualified name (threaded by the Laravel extractor from a `use`/`::class`
|
|
79
|
+
* reference). Two strategies, in order:
|
|
80
|
+
*
|
|
81
|
+
* 1. Direct qualified lookup — works when the type registry keys the class by
|
|
82
|
+
* its FQN (block-form namespaces, non-PHP frameworks, seeded test models).
|
|
83
|
+
* 2. PSR-4 file-path disambiguation — PHP's common statement-form namespace
|
|
84
|
+
* (`namespace App\Http\Controllers;`) leaves the structure-phase
|
|
85
|
+
* `qualifiedName` as the *short* class name, so the registry has no FQN
|
|
86
|
+
* key. Instead, take the FQN's last segment as the class name, fetch the
|
|
87
|
+
* same-short-name candidates, and pick the one whose file path's tail
|
|
88
|
+
* matches the FQN's namespace tail (e.g. `App.Admin.OrderController` ↔
|
|
89
|
+
* `app/Admin/OrderController.php`). Requires ≥2 trailing segments (class +
|
|
90
|
+
* ≥1 namespace segment) and a unique winner — conservative, so a
|
|
91
|
+
* non-PSR-4 layout falls through to short-name resolution rather than
|
|
92
|
+
* guessing.
|
|
93
|
+
*
|
|
94
|
+
* Returns the resolved class, or `undefined` when the FQN cannot be uniquely
|
|
95
|
+
* resolved (the caller then falls back to bare short-name resolution).
|
|
96
|
+
*/
|
|
97
|
+
function resolveControllerByQualifiedName(model, fqn) {
|
|
98
|
+
const direct = model.types.lookupClassByQualifiedName(fqn);
|
|
99
|
+
if (direct.length === 1)
|
|
100
|
+
return direct[0];
|
|
101
|
+
const fqnSegments = fqn.split('.');
|
|
102
|
+
const shortName = fqnSegments[fqnSegments.length - 1];
|
|
103
|
+
if (!shortName)
|
|
104
|
+
return undefined;
|
|
105
|
+
const candidates = model.types.lookupClassByName(shortName);
|
|
106
|
+
if (candidates.length === 1)
|
|
107
|
+
return candidates[0];
|
|
108
|
+
if (candidates.length === 0)
|
|
109
|
+
return undefined;
|
|
110
|
+
let best;
|
|
111
|
+
let bestScore = 0;
|
|
112
|
+
let tie = false;
|
|
113
|
+
for (const candidate of candidates) {
|
|
114
|
+
// Compare the FQN's namespace tail against the file path's directory tail
|
|
115
|
+
// (PSR-4: `App\Admin\OrderController` ↔ `app/Admin/OrderController.php`).
|
|
116
|
+
// Split on `/` (a path separator normalizeQualifiedName does not touch).
|
|
117
|
+
const fileBase = candidate.filePath.replace(/\.[^./]+$/, '');
|
|
118
|
+
const fileSegments = fileBase.split('/').filter((s) => s.length > 0);
|
|
119
|
+
let score = 0;
|
|
120
|
+
while (score < fqnSegments.length &&
|
|
121
|
+
score < fileSegments.length &&
|
|
122
|
+
fqnSegments[fqnSegments.length - 1 - score].toLowerCase() ===
|
|
123
|
+
fileSegments[fileSegments.length - 1 - score].toLowerCase()) {
|
|
124
|
+
score++;
|
|
125
|
+
}
|
|
126
|
+
if (score > bestScore) {
|
|
127
|
+
bestScore = score;
|
|
128
|
+
best = candidate;
|
|
129
|
+
tie = false;
|
|
130
|
+
}
|
|
131
|
+
else if (score === bestScore) {
|
|
132
|
+
tie = true;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Need the class name + at least one namespace segment to disambiguate, and a
|
|
136
|
+
// single unambiguous winner.
|
|
137
|
+
return bestScore >= 2 && !tie ? best : undefined;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Create CALLS edges from extracted framework routes (e.g. Laravel) to their
|
|
141
|
+
* controller methods. Runs for all languages — independent of call resolution.
|
|
142
|
+
*
|
|
143
|
+
* Resolution is registry-based (RING4-2 #943 retired the tiered resolver):
|
|
144
|
+
* - Controller: **qualified-first** (see {@link resolveControllerByQualifiedName}).
|
|
145
|
+
* When the routes file disambiguated the controller, the Laravel extractor
|
|
146
|
+
* threads `route.controllerQualifiedName` (a `use` import — incl. aliased
|
|
147
|
+
* `use … as X;` — or an inline qualified `::class`, normalized to the dot-
|
|
148
|
+
* joined key shape). The emitter resolves it by direct qualified lookup, or
|
|
149
|
+
* by PSR-4 file-path disambiguation when PHP's statement-form namespace left
|
|
150
|
+
* the registry keyed only by the short name — either way picking the
|
|
151
|
+
* specific class even when the short name is globally duplicated (the common
|
|
152
|
+
* admin/public `OrderController` split) or aliased. It falls back to the
|
|
153
|
+
* global short-name lookup (`lookupClassByName`), which still skips on
|
|
154
|
+
* ambiguity (`length !== 1`) — so a bare, genuinely ambiguous short name
|
|
155
|
+
* with no `use`/FQN correctly produces no (wrong) edge.
|
|
156
|
+
* - Method: resolved within the controller's own file via the symbol table
|
|
157
|
+
* (the legacy emitter only accepted same-file method resolutions).
|
|
158
|
+
*
|
|
159
|
+
* Edge confidence is a flat {@link ROUTE_EDGE_CONFIDENCE}. Route CALLS edges
|
|
160
|
+
* are gated downstream by the process-trace (`MIN_TRACE_CONFIDENCE`) and
|
|
161
|
+
* large-graph community (`MIN_CONFIDENCE_LARGE`) thresholds (both 0.5); a
|
|
162
|
+
* resolved edge lands at exactly 0.5 and passes (`>= 0.5`). The guessed-method
|
|
163
|
+
* fallback edge (`× 0.8` = 0.4) sits below the gate and is excluded from those
|
|
164
|
+
* passes — acceptable for an edge whose target method could not be resolved.
|
|
165
|
+
*/
|
|
166
|
+
const processRoutesFromExtracted = async (graph, extractedRoutes, model, onProgress) => {
|
|
167
|
+
for (let i = 0; i < extractedRoutes.length; i++) {
|
|
168
|
+
const route = extractedRoutes[i];
|
|
169
|
+
if (i % 50 === 0) {
|
|
170
|
+
onProgress?.(i, extractedRoutes.length);
|
|
171
|
+
await (0, event_loop_js_1.yieldToEventLoop)();
|
|
172
|
+
}
|
|
173
|
+
if (!route.controllerName || !route.methodName)
|
|
174
|
+
continue;
|
|
175
|
+
// Resolve the controller class. Qualified-first: when the routes file
|
|
176
|
+
// disambiguated the controller (a `use` import or inline `::class` FQN, both
|
|
177
|
+
// normalized to the registry's dot-joined key shape by the extractor), look
|
|
178
|
+
// it up by qualified name — this resolves aliased imports and same-short-name
|
|
179
|
+
// controllers in different namespaces. Fall back to the global short-name
|
|
180
|
+
// lookup, which still refuses ambiguous matches (`length !== 1 → skip`),
|
|
181
|
+
// mirroring the legacy global tier.
|
|
182
|
+
let controllerDef;
|
|
183
|
+
if (route.controllerQualifiedName) {
|
|
184
|
+
controllerDef = resolveControllerByQualifiedName(model, route.controllerQualifiedName);
|
|
185
|
+
}
|
|
186
|
+
if (!controllerDef) {
|
|
187
|
+
const controllerDefs = model.types.lookupClassByName(route.controllerName);
|
|
188
|
+
if (controllerDefs.length !== 1)
|
|
189
|
+
continue;
|
|
190
|
+
controllerDef = controllerDefs[0];
|
|
191
|
+
}
|
|
192
|
+
const confidence = ROUTE_EDGE_CONFIDENCE;
|
|
193
|
+
// Method must live in the controller's own file (the legacy emitter only
|
|
194
|
+
// accepted same-file method resolutions).
|
|
195
|
+
const methodDefs = model.symbols.lookupExactAll(controllerDef.filePath, route.methodName);
|
|
196
|
+
const methodId = methodDefs[0]?.nodeId;
|
|
197
|
+
const sourceId = (0, utils_js_1.generateId)('File', route.filePath);
|
|
198
|
+
if (!methodId) {
|
|
199
|
+
const guessedId = (0, utils_js_1.generateId)('Method', `${controllerDef.filePath}:${route.methodName}`);
|
|
200
|
+
const relId = (0, utils_js_1.generateId)('CALLS', `${sourceId}:route->${guessedId}`);
|
|
201
|
+
graph.addRelationship({
|
|
202
|
+
id: relId,
|
|
203
|
+
sourceId,
|
|
204
|
+
targetId: guessedId,
|
|
205
|
+
type: 'CALLS',
|
|
206
|
+
confidence: confidence * 0.8,
|
|
207
|
+
reason: 'laravel-route',
|
|
208
|
+
});
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
const relId = (0, utils_js_1.generateId)('CALLS', `${sourceId}:route->${methodId}`);
|
|
212
|
+
graph.addRelationship({
|
|
213
|
+
id: relId,
|
|
214
|
+
sourceId,
|
|
215
|
+
targetId: methodId,
|
|
216
|
+
type: 'CALLS',
|
|
217
|
+
confidence,
|
|
218
|
+
reason: 'laravel-route',
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
onProgress?.(extractedRoutes.length, extractedRoutes.length);
|
|
222
|
+
};
|
|
223
|
+
exports.processRoutesFromExtracted = processRoutesFromExtracted;
|
|
224
|
+
/**
|
|
225
|
+
* Resolve each route's handler to a real symbol UID, keyed by the route's
|
|
226
|
+
* `(method, url)` identity (`routeNodeKey` — the same key the routes phase uses
|
|
227
|
+
* for the `Route` node). This is the Part 2 (#2138) groundwork that lets
|
|
228
|
+
* `HttpRouteExtractor.extractProvidersGraph` read the handler symbol from the
|
|
229
|
+
* graph instead of re-parsing source via `getDetections()`.
|
|
230
|
+
*
|
|
231
|
+
* Two route shapes, one resolution target — `(filePath, name) → nodeId`:
|
|
232
|
+
* - Laravel framework routes (`ExtractedRoute`) carry `controllerName` +
|
|
233
|
+
* `methodName`; resolve the controller (qualified-first) then the method in
|
|
234
|
+
* the controller's own file (mirrors `processRoutesFromExtracted`).
|
|
235
|
+
* - Decorator routes (`ExtractedDecoratorRoute`, e.g. Spring/FastAPI) carry
|
|
236
|
+
* `handlerName` (the decorated method, captured at extraction); resolve it
|
|
237
|
+
* directly in the route's own file.
|
|
238
|
+
*
|
|
239
|
+
* First-writer-wins per route identity, matching the routes phase's dedup (it
|
|
240
|
+
* keeps the first route registered for a `(method, url)` key and counts the rest
|
|
241
|
+
* as duplicates). The first route to claim a key reserves it **even when its
|
|
242
|
+
* handler is unresolvable**, so a later same-key route can never stamp its
|
|
243
|
+
* handler onto the first route's Route node (the routes phase made that first
|
|
244
|
+
* route the node-winner). Keying is `routeNodeKey(method, url)` (#2289): a
|
|
245
|
+
* same-URL multi-verb pair (`GET /x` + `POST /x`) resolves two handlers, one per
|
|
246
|
+
* node; method-less / wildcard routes key by URL alone, byte-identical to the
|
|
247
|
+
* pre-#2289 behavior. Routes whose handler cannot be *uniquely* resolved (no
|
|
248
|
+
* name, zero matches, or an ambiguous same-name match) carry no
|
|
249
|
+
* `handlerSymbolId`; the extractor then falls back to source scan for that route
|
|
250
|
+
* (fail-open, no regression, never a wrong handler).
|
|
251
|
+
*/
|
|
252
|
+
function resolveRouteHandlerSymbols(model, extractedRoutes, decoratorRoutes) {
|
|
253
|
+
const out = new Map();
|
|
254
|
+
// Route identities already claimed by an earlier route (resolved or not).
|
|
255
|
+
// Mirrors the routes phase `addRoute` first-writer-wins so the handler we
|
|
256
|
+
// stamp always belongs to the route that actually won the Route node.
|
|
257
|
+
const claimed = new Set();
|
|
258
|
+
// Resolve a single same-file symbol by name, refusing to guess on ambiguity:
|
|
259
|
+
// exactly one match → its nodeId; zero or many → undefined (fail-open).
|
|
260
|
+
const uniqueSymbolId = (filePath, name) => {
|
|
261
|
+
const defs = model.symbols.lookupExactAll(filePath, name);
|
|
262
|
+
return defs.length === 1 ? defs[0]?.nodeId : undefined;
|
|
263
|
+
};
|
|
264
|
+
const claim = (routePath, prefix, httpMethod, symbolId) => {
|
|
265
|
+
if (!routePath)
|
|
266
|
+
return;
|
|
267
|
+
const url = (0, route_path_js_1.normalizeExtractedRoutePath)(routePath, prefix);
|
|
268
|
+
const key = (0, route_path_js_1.routeNodeKey)((0, route_path_js_1.normalizeRouteMethod)(httpMethod), url);
|
|
269
|
+
if (claimed.has(key))
|
|
270
|
+
return; // first-writer-wins: later same-key routes can't override
|
|
271
|
+
claimed.add(key);
|
|
272
|
+
if (symbolId)
|
|
273
|
+
out.set(key, symbolId);
|
|
274
|
+
};
|
|
275
|
+
// Laravel framework routes — controller class + method name.
|
|
276
|
+
for (const route of extractedRoutes) {
|
|
277
|
+
let methodId;
|
|
278
|
+
if (route.controllerName && route.methodName) {
|
|
279
|
+
let controllerDef;
|
|
280
|
+
if (route.controllerQualifiedName) {
|
|
281
|
+
controllerDef = resolveControllerByQualifiedName(model, route.controllerQualifiedName);
|
|
282
|
+
}
|
|
283
|
+
if (!controllerDef) {
|
|
284
|
+
const controllerDefs = model.types.lookupClassByName(route.controllerName);
|
|
285
|
+
if (controllerDefs.length === 1)
|
|
286
|
+
controllerDef = controllerDefs[0];
|
|
287
|
+
}
|
|
288
|
+
if (controllerDef)
|
|
289
|
+
methodId = uniqueSymbolId(controllerDef.filePath, route.methodName);
|
|
290
|
+
}
|
|
291
|
+
claim(route.routePath, route.prefix ?? null, route.httpMethod, methodId);
|
|
292
|
+
}
|
|
293
|
+
// Decorator routes (Spring / FastAPI / generic) — the decorated handler in
|
|
294
|
+
// the route's own file.
|
|
295
|
+
for (const dr of decoratorRoutes) {
|
|
296
|
+
const handlerId = dr.handlerName ? uniqueSymbolId(dr.filePath, dr.handlerName) : undefined;
|
|
297
|
+
claim(dr.routePath, dr.prefix ?? null, dr.httpMethod, handlerId);
|
|
298
|
+
}
|
|
299
|
+
return out;
|
|
300
|
+
}
|
|
301
|
+
/** Common method names on response/data objects that are NOT property accesses */
|
|
302
|
+
// Properties/methods to ignore when extracting consumer accessed keys from `data.X` patterns.
|
|
303
|
+
// Avoids false positives from Fetch API, Array, Object, Promise, and DOM access on variables
|
|
304
|
+
// that happen to share names with response variables (data, result, response, etc.).
|
|
305
|
+
const RESPONSE_ACCESS_BLOCKLIST = new Set([
|
|
306
|
+
// Fetch/Response API
|
|
307
|
+
'json',
|
|
308
|
+
'text',
|
|
309
|
+
'blob',
|
|
310
|
+
'arrayBuffer',
|
|
311
|
+
'formData',
|
|
312
|
+
'ok',
|
|
313
|
+
'status',
|
|
314
|
+
'headers',
|
|
315
|
+
'clone',
|
|
316
|
+
// Promise
|
|
317
|
+
'then',
|
|
318
|
+
'catch',
|
|
319
|
+
'finally',
|
|
320
|
+
// Array
|
|
321
|
+
'map',
|
|
322
|
+
'filter',
|
|
323
|
+
'forEach',
|
|
324
|
+
'reduce',
|
|
325
|
+
'find',
|
|
326
|
+
'some',
|
|
327
|
+
'every',
|
|
328
|
+
'push',
|
|
329
|
+
'pop',
|
|
330
|
+
'shift',
|
|
331
|
+
'unshift',
|
|
332
|
+
'splice',
|
|
333
|
+
'slice',
|
|
334
|
+
'concat',
|
|
335
|
+
'join',
|
|
336
|
+
'sort',
|
|
337
|
+
'reverse',
|
|
338
|
+
'includes',
|
|
339
|
+
'indexOf',
|
|
340
|
+
// Object
|
|
341
|
+
'length',
|
|
342
|
+
'toString',
|
|
343
|
+
'valueOf',
|
|
344
|
+
'keys',
|
|
345
|
+
'values',
|
|
346
|
+
'entries',
|
|
347
|
+
// DOM methods — file-download patterns often reuse `data`/`response` variable names
|
|
348
|
+
'appendChild',
|
|
349
|
+
'removeChild',
|
|
350
|
+
'insertBefore',
|
|
351
|
+
'replaceChild',
|
|
352
|
+
'replaceChildren',
|
|
353
|
+
'createElement',
|
|
354
|
+
'getElementById',
|
|
355
|
+
'querySelector',
|
|
356
|
+
'querySelectorAll',
|
|
357
|
+
'setAttribute',
|
|
358
|
+
'getAttribute',
|
|
359
|
+
'removeAttribute',
|
|
360
|
+
'hasAttribute',
|
|
361
|
+
'addEventListener',
|
|
362
|
+
'removeEventListener',
|
|
363
|
+
'dispatchEvent',
|
|
364
|
+
'classList',
|
|
365
|
+
'className',
|
|
366
|
+
'parentNode',
|
|
367
|
+
'parentElement',
|
|
368
|
+
'childNodes',
|
|
369
|
+
'children',
|
|
370
|
+
'nextSibling',
|
|
371
|
+
'previousSibling',
|
|
372
|
+
'firstChild',
|
|
373
|
+
'lastChild',
|
|
374
|
+
'click',
|
|
375
|
+
'focus',
|
|
376
|
+
'blur',
|
|
377
|
+
'submit',
|
|
378
|
+
'reset',
|
|
379
|
+
'innerHTML',
|
|
380
|
+
'outerHTML',
|
|
381
|
+
'textContent',
|
|
382
|
+
'innerText',
|
|
383
|
+
]);
|
|
384
|
+
/**
|
|
385
|
+
* Extract property access keys from a consumer file's source code near fetch calls.
|
|
386
|
+
*
|
|
387
|
+
* Looks for destructuring (`const { data } = await res.json()`), property access
|
|
388
|
+
* (`response.data`), and optional chaining (`data?.key`). Returns deduplicated
|
|
389
|
+
* top-level property names accessed on the response. Scans the whole file, so
|
|
390
|
+
* all accessed keys are attributed to each fetch — acceptable for regex-based
|
|
391
|
+
* extraction.
|
|
392
|
+
*/
|
|
393
|
+
const extractConsumerAccessedKeys = (content) => {
|
|
394
|
+
const keys = new Set();
|
|
395
|
+
// Pattern 1: Destructuring from .json() — const { key1, key2 } = await res.json()
|
|
396
|
+
// Also matches: const { key1, key2 } = await (await fetch(...)).json()
|
|
397
|
+
const destructurePattern = /(?:const|let|var)\s+\{([^}]+)\}\s*=\s*(?:await\s+)?(?:\w+\.json\s*\(\)|(?:await\s+)?(?:fetch|axios|got)\s*\([^)]*\)(?:\.then\s*\([^)]*\))?(?:\.json\s*\(\))?)/g;
|
|
398
|
+
let match;
|
|
399
|
+
while ((match = destructurePattern.exec(content)) !== null) {
|
|
400
|
+
const destructuredBody = match[1];
|
|
401
|
+
// Extract identifiers from destructuring, handling renamed bindings (key: alias)
|
|
402
|
+
const keyPattern = /(\w+)\s*(?::\s*\w+)?/g;
|
|
403
|
+
let keyMatch;
|
|
404
|
+
while ((keyMatch = keyPattern.exec(destructuredBody)) !== null) {
|
|
405
|
+
keys.add(keyMatch[1]);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
// Pattern 2: Destructuring from a data/result/response/json variable
|
|
409
|
+
// e.g., const { items, total } = data; or const { error } = result;
|
|
410
|
+
const dataVarDestructure = /(?:const|let|var)\s+\{([^}]+)\}\s*=\s*(?:data|result|response|json|body|res)\b/g;
|
|
411
|
+
while ((match = dataVarDestructure.exec(content)) !== null) {
|
|
412
|
+
const destructuredBody = match[1];
|
|
413
|
+
const keyPattern = /(\w+)\s*(?::\s*\w+)?/g;
|
|
414
|
+
let keyMatch;
|
|
415
|
+
while ((keyMatch = keyPattern.exec(destructuredBody)) !== null) {
|
|
416
|
+
keys.add(keyMatch[1]);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
// Pattern 3: Property access on common response variable names
|
|
420
|
+
// Matches: data.key, response.key, result.key, json.key, body.key
|
|
421
|
+
// Also matches optional chaining: data?.key
|
|
422
|
+
const propAccessPattern = /\b(?:data|response|result|json|body|res)\s*(?:\?\.|\.)(\w+)/g;
|
|
423
|
+
while ((match = propAccessPattern.exec(content)) !== null) {
|
|
424
|
+
const key = match[1];
|
|
425
|
+
// Skip common method calls that aren't property accesses
|
|
426
|
+
if (!RESPONSE_ACCESS_BLOCKLIST.has(key)) {
|
|
427
|
+
keys.add(key);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
return [...keys];
|
|
431
|
+
};
|
|
432
|
+
exports.extractConsumerAccessedKeys = extractConsumerAccessedKeys;
|
|
433
|
+
/**
|
|
434
|
+
* Create FETCHES edges from extracted fetch() calls to matching Route nodes.
|
|
435
|
+
* When consumerContents is provided, extracts property access patterns from
|
|
436
|
+
* consumer files and encodes them in the edge reason field.
|
|
437
|
+
*
|
|
438
|
+
* Matching stays URL-only (#2289): a verb-less consumer (a `fetch()` call has
|
|
439
|
+
* no statically-known HTTP method) matches a route by URL and connects to
|
|
440
|
+
* **every** Route node sharing that URL — i.e. both the `GET /x` and `POST /x`
|
|
441
|
+
* nodes when a URL carries multiple verbs. `routeUrlToKeys` therefore maps each
|
|
442
|
+
* route URL to the list of `routeNodeKey` identities at that URL; a single-verb
|
|
443
|
+
* (or method-less) URL has a one-element list, keeping edges byte-identical to
|
|
444
|
+
* the pre-#2289 behavior.
|
|
445
|
+
*/
|
|
446
|
+
const processNextjsFetchRoutes = (graph, fetchCalls, routeUrlToKeys, // routeURL → route node keys at that URL
|
|
447
|
+
consumerContents) => {
|
|
448
|
+
// Pre-count how many route URLs each consumer file matches (for confidence
|
|
449
|
+
// attribution). Counts once per call that matches any URL — independent of how
|
|
450
|
+
// many verbs share that URL — so the multi-fetch heuristic is unchanged.
|
|
451
|
+
const routeCountByFile = new Map();
|
|
452
|
+
for (const call of fetchCalls) {
|
|
453
|
+
const normalized = (0, nextjs_js_1.normalizeFetchURL)(call.fetchURL);
|
|
454
|
+
if (!normalized)
|
|
455
|
+
continue;
|
|
456
|
+
for (const routeURL of routeUrlToKeys.keys()) {
|
|
457
|
+
if ((0, nextjs_js_1.routeMatches)(normalized, routeURL)) {
|
|
458
|
+
routeCountByFile.set(call.filePath, (routeCountByFile.get(call.filePath) ?? 0) + 1);
|
|
459
|
+
break;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
for (const call of fetchCalls) {
|
|
464
|
+
const normalized = (0, nextjs_js_1.normalizeFetchURL)(call.fetchURL);
|
|
465
|
+
if (!normalized)
|
|
466
|
+
continue;
|
|
467
|
+
for (const [routeURL, routeKeys] of routeUrlToKeys) {
|
|
468
|
+
if ((0, nextjs_js_1.routeMatches)(normalized, routeURL)) {
|
|
469
|
+
const sourceId = (0, utils_js_1.generateId)('File', call.filePath);
|
|
470
|
+
// Extract consumer accessed keys if file content is available
|
|
471
|
+
let reason = 'fetch-url-match';
|
|
472
|
+
if (consumerContents) {
|
|
473
|
+
const content = consumerContents.get(call.filePath);
|
|
474
|
+
if (content) {
|
|
475
|
+
const accessedKeys = (0, exports.extractConsumerAccessedKeys)(content);
|
|
476
|
+
if (accessedKeys.length > 0) {
|
|
477
|
+
reason = `fetch-url-match|keys:${accessedKeys.join(',')}`;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
// Encode multi-fetch count so downstream can set confidence
|
|
482
|
+
const fetchCount = routeCountByFile.get(call.filePath) ?? 1;
|
|
483
|
+
if (fetchCount > 1) {
|
|
484
|
+
reason = `${reason}|fetches:${fetchCount}`;
|
|
485
|
+
}
|
|
486
|
+
// Connect to every Route node at this URL (one per verb).
|
|
487
|
+
for (const routeKey of routeKeys) {
|
|
488
|
+
const routeNodeId = (0, utils_js_1.generateId)('Route', routeKey);
|
|
489
|
+
graph.addRelationship({
|
|
490
|
+
id: (0, utils_js_1.generateId)('FETCHES', `${sourceId}->${routeNodeId}`),
|
|
491
|
+
sourceId,
|
|
492
|
+
targetId: routeNodeId,
|
|
493
|
+
type: 'FETCHES',
|
|
494
|
+
confidence: 0.9,
|
|
495
|
+
reason,
|
|
496
|
+
});
|
|
497
|
+
}
|
|
498
|
+
break;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
};
|
|
503
|
+
exports.processNextjsFetchRoutes = processNextjsFetchRoutes;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared Ruby call routing logic.
|
|
4
|
+
*
|
|
5
|
+
* Ruby expresses imports and property definitions as method calls rather
|
|
6
|
+
* than syntax-level constructs. This module provides a routing function
|
|
7
|
+
* used by the CLI call-processor, CLI parse-worker, and the web
|
|
8
|
+
* call-processor so that the classification logic lives in one place.
|
|
9
|
+
*
|
|
10
|
+
* Heritage (mixins: include/extend/prepend) was previously routed here
|
|
11
|
+
* but is now emitted by the scope-resolution pipeline. The router still
|
|
12
|
+
* returns 'skip' for these calls so they don't become spurious call edges.
|
|
13
|
+
*
|
|
14
|
+
* NOTE: This file is intentionally duplicated in cgraph-web/ because the
|
|
15
|
+
* two packages have separate build targets (Node native vs WASM/browser).
|
|
16
|
+
* Keep both copies in sync until a shared package is introduced.
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.routeRubyCall = routeRubyCall;
|
|
20
|
+
// ── Pre-allocated singletons for common return values ────────────────────────
|
|
21
|
+
const CALL_RESULT = { kind: 'call' };
|
|
22
|
+
const SKIP_RESULT = { kind: 'skip' };
|
|
23
|
+
// ── Routing function ────────────────────────────────────────────────────────
|
|
24
|
+
/**
|
|
25
|
+
* Classify a Ruby call node and extract its semantic payload.
|
|
26
|
+
*
|
|
27
|
+
* @param calledName - The method name (e.g. 'require', 'include', 'attr_accessor')
|
|
28
|
+
* @param callNode - The tree-sitter `call` AST node
|
|
29
|
+
* @returns A discriminated union describing the call's semantic role
|
|
30
|
+
*/
|
|
31
|
+
function routeRubyCall(calledName, callNode) {
|
|
32
|
+
// ── require / require_relative → import ─────────────────────────────────
|
|
33
|
+
if (calledName === 'require' || calledName === 'require_relative') {
|
|
34
|
+
const argList = callNode.childForFieldName?.('arguments');
|
|
35
|
+
const stringNode = argList?.children?.find((c) => c.type === 'string');
|
|
36
|
+
const contentNode = stringNode?.children?.find((c) => c.type === 'string_content');
|
|
37
|
+
if (!contentNode)
|
|
38
|
+
return SKIP_RESULT;
|
|
39
|
+
let importPath = contentNode.text;
|
|
40
|
+
// Validate: reject null bytes, control chars, excessively long paths
|
|
41
|
+
if (!importPath || importPath.length > 1024 || /[\x00-\x1f]/.test(importPath)) {
|
|
42
|
+
return SKIP_RESULT;
|
|
43
|
+
}
|
|
44
|
+
const isRelative = calledName === 'require_relative';
|
|
45
|
+
if (isRelative && !importPath.startsWith('.')) {
|
|
46
|
+
importPath = './' + importPath;
|
|
47
|
+
}
|
|
48
|
+
return { kind: 'import', importPath, isRelative };
|
|
49
|
+
}
|
|
50
|
+
// ── include / extend / prepend — heritage (emitted by scope-resolution) ─
|
|
51
|
+
// Call-based heritage (Ruby mixins) is emitted by the scope-resolution
|
|
52
|
+
// pipeline. Return SKIP_RESULT so these calls don't fall through to normal
|
|
53
|
+
// call processing and become spurious call edges.
|
|
54
|
+
if (calledName === 'include' || calledName === 'extend' || calledName === 'prepend') {
|
|
55
|
+
return SKIP_RESULT;
|
|
56
|
+
}
|
|
57
|
+
// ── attr_accessor / attr_reader / attr_writer → property definitions ───
|
|
58
|
+
if (calledName === 'attr_accessor' ||
|
|
59
|
+
calledName === 'attr_reader' ||
|
|
60
|
+
calledName === 'attr_writer') {
|
|
61
|
+
// Extract YARD @return [Type] from preceding comment (e.g. `# @return [Address]`)
|
|
62
|
+
let yardType;
|
|
63
|
+
let sibling = callNode.previousSibling;
|
|
64
|
+
while (sibling) {
|
|
65
|
+
if (sibling.type === 'comment') {
|
|
66
|
+
const match = /@return\s+\[([^\]]+)\]/.exec(sibling.text);
|
|
67
|
+
if (match) {
|
|
68
|
+
const raw = match[1].trim();
|
|
69
|
+
// Extract simple type name: "User", "Array<User>" → "User"
|
|
70
|
+
const simple = raw.match(/^([A-Z]\w*)/);
|
|
71
|
+
if (simple)
|
|
72
|
+
yardType = simple[1];
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else if (sibling.isNamed) {
|
|
77
|
+
break; // stop at non-comment named sibling
|
|
78
|
+
}
|
|
79
|
+
sibling = sibling.previousSibling;
|
|
80
|
+
}
|
|
81
|
+
const items = [];
|
|
82
|
+
const argList = callNode.childForFieldName?.('arguments');
|
|
83
|
+
for (const arg of argList?.children ?? []) {
|
|
84
|
+
if (arg.type === 'simple_symbol') {
|
|
85
|
+
items.push({
|
|
86
|
+
propName: arg.text.startsWith(':') ? arg.text.slice(1) : arg.text,
|
|
87
|
+
accessorType: calledName,
|
|
88
|
+
startLine: arg.startPosition.row,
|
|
89
|
+
endLine: arg.endPosition.row,
|
|
90
|
+
...(yardType ? { declaredType: yardType } : {}),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return items.length > 0 ? { kind: 'properties', items } : SKIP_RESULT;
|
|
95
|
+
}
|
|
96
|
+
// ── Everything else → regular call ─────────────────────────────────────
|
|
97
|
+
return CALL_RESULT;
|
|
98
|
+
}
|