gitnexus 1.6.11-rc.8 → 1.6.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +95 -26
- package/dist/_shared/graph/types.d.ts +81 -2
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/integrations/circuit-breaker.d.ts.map +1 -1
- package/dist/_shared/integrations/circuit-breaker.js.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
- package/dist/_shared/language-detection.d.ts.map +1 -1
- package/dist/_shared/language-detection.js +2 -0
- package/dist/_shared/language-detection.js.map +1 -1
- package/dist/_shared/languages.d.ts +2 -1
- package/dist/_shared/languages.d.ts.map +1 -1
- package/dist/_shared/languages.js +1 -0
- package/dist/_shared/languages.js.map +1 -1
- package/dist/_shared/lbug/schema-constants.d.ts +2 -2
- package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
- package/dist/_shared/lbug/schema-constants.js +4 -0
- package/dist/_shared/lbug/schema-constants.js.map +1 -1
- package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.js +1 -0
- package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
- package/dist/_shared/scope-resolution/language-classification.d.ts +3 -0
- package/dist/_shared/scope-resolution/language-classification.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/language-classification.js +4 -0
- package/dist/_shared/scope-resolution/language-classification.js.map +1 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts +10 -0
- package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
- package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -1
- package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/scope-tree.js.map +1 -1
- package/dist/_shared/scope-resolution/types.d.ts +15 -0
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +4 -0
- package/dist/cli/ai-context.js +90 -14
- package/dist/cli/analyze-config.js +14 -0
- package/dist/cli/analyze-options.d.ts +14 -0
- package/dist/cli/analyze-watch.d.ts +20 -0
- package/dist/cli/analyze-watch.js +434 -0
- package/dist/cli/analyze.js +27 -9
- package/dist/cli/auto-sync.d.ts +1 -0
- package/dist/cli/auto-sync.js +107 -0
- package/dist/cli/command-banner.d.ts +15 -0
- package/dist/cli/command-banner.js +42 -0
- package/dist/cli/detect-changes-format.js +21 -0
- package/dist/cli/doctor.d.ts +7 -0
- package/dist/cli/doctor.js +14 -0
- package/dist/cli/group.js +7 -1
- package/dist/cli/help-i18n.js +4 -0
- package/dist/cli/i18n/en.d.ts +18 -3
- package/dist/cli/i18n/en.js +18 -3
- package/dist/cli/i18n/resources.d.ts +33 -3
- package/dist/cli/i18n/zh-CN.d.ts +15 -0
- package/dist/cli/i18n/zh-CN.js +18 -3
- package/dist/cli/index.js +34 -7
- package/dist/cli/mcp.d.ts +15 -0
- package/dist/cli/mcp.js +44 -0
- package/dist/cli/optional-grammars.d.ts +3 -2
- package/dist/cli/optional-grammars.js +19 -3
- package/dist/cli/setup.js +41 -15
- package/dist/cli/update-notice.d.ts +34 -0
- package/dist/cli/update-notice.js +91 -0
- package/dist/cli/update.d.ts +21 -0
- package/dist/cli/update.js +93 -0
- package/dist/cli/watch.d.ts +1 -20
- package/dist/cli/watch.js +5 -371
- package/dist/core/analysis-feature-registry.d.ts +2 -0
- package/dist/core/analysis-feature-registry.js +15 -0
- package/dist/core/analyzer-identity.js +21 -3
- package/dist/core/auto-sync/analysis-worker-launch.d.ts +30 -0
- package/dist/core/auto-sync/analysis-worker-launch.js +166 -0
- package/dist/core/auto-sync/config.d.ts +33 -0
- package/dist/core/auto-sync/config.js +320 -0
- package/dist/core/auto-sync/index.d.ts +6 -0
- package/dist/core/auto-sync/index.js +6 -0
- package/dist/core/auto-sync/path-security.d.ts +9 -0
- package/dist/core/auto-sync/path-security.js +251 -0
- package/dist/core/auto-sync/repo.d.ts +1 -0
- package/dist/core/auto-sync/repo.js +6 -0
- package/dist/core/auto-sync/runner.d.ts +44 -0
- package/dist/core/auto-sync/runner.js +428 -0
- package/dist/core/auto-sync/starter.d.ts +50 -0
- package/dist/core/auto-sync/starter.js +497 -0
- package/dist/core/auto-sync/state.d.ts +37 -0
- package/dist/core/auto-sync/state.js +119 -0
- package/dist/core/group/config-parser.js +8 -1
- package/dist/core/group/cross-impact.d.ts +3 -0
- package/dist/core/group/cross-impact.js +36 -4
- package/dist/core/group/extractors/http-patterns/java.js +22 -8
- package/dist/core/group/extractors/http-patterns/kotlin.js +86 -31
- package/dist/core/group/extractors/http-patterns/node.js +145 -8
- package/dist/core/group/extractors/http-patterns/python.js +11 -7
- package/dist/core/group/extractors/http-route-extractor.js +63 -17
- package/dist/core/group/extractors/java-workspace-extractor.js +244 -31
- package/dist/core/group/group-lock.js +5 -6
- package/dist/core/group/normalization.d.ts +38 -1
- package/dist/core/group/normalization.js +59 -3
- package/dist/core/group/service.d.ts +11 -0
- package/dist/core/group/service.js +13 -1
- package/dist/core/group/storage.js +2 -2
- package/dist/core/group/sync.d.ts +24 -1
- package/dist/core/group/sync.js +46 -8
- package/dist/core/group/types.d.ts +13 -0
- package/dist/core/incremental/derived-writeback.d.ts +36 -0
- package/dist/core/incremental/derived-writeback.js +68 -0
- package/dist/core/incremental/spring-config-drift.d.ts +12 -0
- package/dist/core/incremental/spring-config-drift.js +46 -0
- package/dist/core/incremental/subgraph-extract.d.ts +7 -4
- package/dist/core/incremental/subgraph-extract.js +30 -5
- package/dist/core/ingestion/asyncapi/document.d.ts +226 -0
- package/dist/core/ingestion/asyncapi/document.js +758 -0
- package/dist/core/ingestion/asyncapi/protocol.d.ts +79 -0
- package/dist/core/ingestion/asyncapi/protocol.js +203 -0
- package/dist/core/ingestion/call-extractors/configs/zig.d.ts +2 -0
- package/dist/core/ingestion/call-extractors/configs/zig.js +4 -0
- package/dist/core/ingestion/call-extractors/zig-static-gating.d.ts +100 -0
- package/dist/core/ingestion/call-extractors/zig-static-gating.js +319 -0
- package/dist/core/ingestion/call-processor.js +3 -1
- package/dist/core/ingestion/class-extractors/configs/zig.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/configs/zig.js +32 -0
- package/dist/core/ingestion/class-extractors/generic.js +4 -1
- package/dist/core/ingestion/class-types.d.ts +6 -2
- package/dist/core/ingestion/destination-key.d.ts +59 -0
- package/dist/core/ingestion/destination-key.js +61 -0
- package/dist/core/ingestion/entry-point-scoring.d.ts +6 -2
- package/dist/core/ingestion/entry-point-scoring.js +8 -44
- package/dist/core/ingestion/export-detection.d.ts +37 -0
- package/dist/core/ingestion/export-detection.js +60 -0
- package/dist/core/ingestion/field-extractors/configs/zig.d.ts +8 -0
- package/dist/core/ingestion/field-extractors/configs/zig.js +49 -0
- package/dist/core/ingestion/field-extractors/generic.d.ts +1 -1
- package/dist/core/ingestion/field-extractors/generic.js +12 -1
- package/dist/core/ingestion/frameworks/spring/actuator-runtime.d.ts +26 -0
- package/dist/core/ingestion/frameworks/spring/actuator-runtime.js +843 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +5 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.js +9 -0
- package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +8 -1
- package/dist/core/ingestion/frameworks/spring/argument-facts.d.ts +80 -0
- package/dist/core/ingestion/frameworks/spring/argument-facts.js +85 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.d.ts +1 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.js +2 -1
- package/dist/core/ingestion/frameworks/spring/destinations.d.ts +539 -0
- package/dist/core/ingestion/frameworks/spring/destinations.js +840 -0
- package/dist/core/ingestion/frameworks/spring/dynamic-lookups.d.ts +22 -0
- package/dist/core/ingestion/frameworks/spring/dynamic-lookups.js +124 -0
- package/dist/core/ingestion/frameworks/spring/message-producers.d.ts +78 -0
- package/dist/core/ingestion/frameworks/spring/message-producers.js +90 -0
- package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +29 -0
- package/dist/core/ingestion/frameworks/spring/vendor-prefixes.d.ts +7 -0
- package/dist/core/ingestion/frameworks/spring/vendor-prefixes.js +22 -0
- package/dist/core/ingestion/import-resolvers/configs/zig.d.ts +13 -0
- package/dist/core/ingestion/import-resolvers/configs/zig.js +26 -0
- package/dist/core/ingestion/import-resolvers/zig.d.ts +34 -0
- package/dist/core/ingestion/import-resolvers/zig.js +193 -0
- package/dist/core/ingestion/language-config.d.ts +177 -0
- package/dist/core/ingestion/language-config.js +719 -0
- package/dist/core/ingestion/language-provider.d.ts +178 -1
- package/dist/core/ingestion/language-provider.js +22 -0
- package/dist/core/ingestion/languages/csharp/razor-view-components.d.ts +62 -0
- package/dist/core/ingestion/languages/csharp/razor-view-components.js +954 -0
- package/dist/core/ingestion/languages/csharp/resolution-config.d.ts +3 -0
- package/dist/core/ingestion/languages/csharp/resolution-config.js +6 -1
- package/dist/core/ingestion/languages/csharp/scope-resolver.js +8 -0
- package/dist/core/ingestion/languages/index.d.ts +1 -0
- package/dist/core/ingestion/languages/index.js +2 -0
- package/dist/core/ingestion/languages/java/analysis-features.d.ts +1 -1
- package/dist/core/ingestion/languages/java/analysis-features.js +14 -6
- package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +8 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.js +34 -0
- package/dist/core/ingestion/languages/java/captures.js +22 -1
- package/dist/core/ingestion/languages/java/lombok-synthesizer.d.ts +42 -0
- package/dist/core/ingestion/languages/java/lombok-synthesizer.js +439 -0
- package/dist/core/ingestion/languages/java/scope-resolver.js +2 -0
- package/dist/core/ingestion/languages/java/spring-actuator.d.ts +2 -0
- package/dist/core/ingestion/languages/java/spring-actuator.js +62 -0
- package/dist/core/ingestion/languages/java/spring-di.d.ts +17 -1
- package/dist/core/ingestion/languages/java/spring-di.js +44 -2
- package/dist/core/ingestion/languages/java/spring-dynamic-lookup.d.ts +8 -0
- package/dist/core/ingestion/languages/java/spring-dynamic-lookup.js +62 -0
- package/dist/core/ingestion/languages/java/spring-message-producers.d.ts +20 -0
- package/dist/core/ingestion/languages/java/spring-message-producers.js +83 -0
- package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +11 -1
- package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +13 -3
- package/dist/core/ingestion/languages/java.js +18 -8
- package/dist/core/ingestion/languages/jvm/accessor-synthesis.d.ts +99 -0
- package/dist/core/ingestion/languages/jvm/accessor-synthesis.js +173 -0
- package/dist/core/ingestion/languages/jvm/beanspec.d.ts +17 -0
- package/dist/core/ingestion/languages/jvm/beanspec.js +42 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +15 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +50 -0
- package/dist/core/ingestion/languages/kotlin/captures.js +24 -1
- package/dist/core/ingestion/languages/kotlin/lombok-synthesizer.d.ts +26 -0
- package/dist/core/ingestion/languages/kotlin/lombok-synthesizer.js +417 -0
- package/dist/core/ingestion/languages/kotlin/scope-resolver.js +4 -0
- package/dist/core/ingestion/languages/kotlin/spring-actuator.d.ts +4 -0
- package/dist/core/ingestion/languages/kotlin/spring-actuator.js +172 -0
- package/dist/core/ingestion/languages/kotlin/spring-config-bindings.d.ts +18 -0
- package/dist/core/ingestion/languages/kotlin/spring-config-bindings.js +411 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +51 -1
- package/dist/core/ingestion/languages/kotlin/spring-di.js +86 -6
- package/dist/core/ingestion/languages/kotlin/spring-dynamic-lookup.d.ts +8 -0
- package/dist/core/ingestion/languages/kotlin/spring-dynamic-lookup.js +77 -0
- package/dist/core/ingestion/languages/kotlin/spring-message-producers.d.ts +17 -0
- package/dist/core/ingestion/languages/kotlin/spring-message-producers.js +119 -0
- package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +16 -0
- package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +77 -2
- package/dist/core/ingestion/languages/kotlin.js +24 -0
- package/dist/core/ingestion/languages/python.js +2 -0
- package/dist/core/ingestion/languages/rust/query.js +8 -8
- package/dist/core/ingestion/languages/zig/captures.d.ts +260 -0
- package/dist/core/ingestion/languages/zig/captures.js +2070 -0
- package/dist/core/ingestion/languages/zig/index.d.ts +4 -0
- package/dist/core/ingestion/languages/zig/index.js +4 -0
- package/dist/core/ingestion/languages/zig/interpret.d.ts +36 -0
- package/dist/core/ingestion/languages/zig/interpret.js +176 -0
- package/dist/core/ingestion/languages/zig/query.d.ts +3 -0
- package/dist/core/ingestion/languages/zig/query.js +426 -0
- package/dist/core/ingestion/languages/zig/range-binding.d.ts +37 -0
- package/dist/core/ingestion/languages/zig/range-binding.js +373 -0
- package/dist/core/ingestion/languages/zig/scope-resolver.d.ts +12 -0
- package/dist/core/ingestion/languages/zig/scope-resolver.js +58 -0
- package/dist/core/ingestion/languages/zig/simple-hooks.d.ts +25 -0
- package/dist/core/ingestion/languages/zig/simple-hooks.js +143 -0
- package/dist/core/ingestion/languages/zig.d.ts +32 -0
- package/dist/core/ingestion/languages/zig.js +130 -0
- package/dist/core/ingestion/method-extractors/configs/zig.d.ts +2 -0
- package/dist/core/ingestion/method-extractors/configs/zig.js +120 -0
- package/dist/core/ingestion/method-extractors/generic.js +16 -4
- package/dist/core/ingestion/method-types.d.ts +10 -4
- package/dist/core/ingestion/model/field-registry.d.ts +3 -3
- package/dist/core/ingestion/model/field-registry.js +11 -7
- package/dist/core/ingestion/model/method-registry.d.ts +3 -3
- package/dist/core/ingestion/model/method-registry.js +13 -8
- package/dist/core/ingestion/model/registration-table.js +3 -0
- package/dist/core/ingestion/model/type-registry.js +8 -4
- package/dist/core/ingestion/pipeline-phases/di.js +47 -14
- package/dist/core/ingestion/pipeline-phases/index.d.ts +1 -0
- package/dist/core/ingestion/pipeline-phases/index.js +1 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +7 -1
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +79 -91
- package/dist/core/ingestion/pipeline-phases/parse.d.ts +17 -0
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +2 -1
- package/dist/core/ingestion/pipeline-phases/processes.js +39 -4
- package/dist/core/ingestion/pipeline-phases/routes.js +27 -18
- package/dist/core/ingestion/pipeline-phases/runner.d.ts +4 -1
- package/dist/core/ingestion/pipeline-phases/runner.js +34 -14
- package/dist/core/ingestion/pipeline-phases/scan.js +82 -1
- package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +2 -0
- package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +8 -0
- package/dist/core/ingestion/pipeline-phases/spring-destinations.d.ts +123 -0
- package/dist/core/ingestion/pipeline-phases/spring-destinations.js +688 -0
- package/dist/core/ingestion/pipeline.d.ts +30 -1
- package/dist/core/ingestion/pipeline.js +52 -14
- package/dist/core/ingestion/resolve-references.js +5 -0
- package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +16 -0
- package/dist/core/ingestion/route-extractors/constant-resolver.js +10 -0
- package/dist/core/ingestion/route-extractors/java-const-resolver.d.ts +27 -1
- package/dist/core/ingestion/route-extractors/java-const-resolver.js +161 -13
- package/dist/core/ingestion/route-extractors/kotlin-const-resolver.d.ts +12 -18
- package/dist/core/ingestion/route-extractors/kotlin-const-resolver.js +214 -33
- package/dist/core/ingestion/route-extractors/kotlin-spring.d.ts +13 -0
- package/dist/core/ingestion/route-extractors/kotlin-spring.js +259 -0
- package/dist/core/ingestion/route-extractors/python-decorator-handler.d.ts +6 -0
- package/dist/core/ingestion/route-extractors/python-decorator-handler.js +16 -0
- package/dist/core/ingestion/route-extractors/spring-shared.d.ts +30 -1
- package/dist/core/ingestion/route-extractors/spring-shared.js +77 -9
- package/dist/core/ingestion/route-extractors/spring.js +9 -5
- package/dist/core/ingestion/scope-extractor.js +8 -0
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +62 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +4 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +2 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +28 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +11 -2
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +23 -2
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +24 -3
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +11 -1
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +26 -6
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +11 -0
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +29 -3
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +8 -1
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +35 -9
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +1 -4
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +277 -9
- package/dist/core/ingestion/scope-resolution/pipeline/registry.js +2 -0
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +7 -3
- package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +43 -9
- package/dist/core/ingestion/scope-resolution/scope/walkers.js +71 -10
- package/dist/core/ingestion/tree-sitter-queries.d.ts +1 -0
- package/dist/core/ingestion/tree-sitter-queries.js +161 -0
- package/dist/core/ingestion/type-extractors/zig.d.ts +2 -0
- package/dist/core/ingestion/type-extractors/zig.js +17 -0
- package/dist/core/ingestion/utils/ast-helpers.d.ts +40 -1
- package/dist/core/ingestion/utils/ast-helpers.js +124 -6
- package/dist/core/ingestion/utils/callable-flow-captures.d.ts +9 -0
- package/dist/core/ingestion/utils/callable-flow-captures.js +75 -14
- package/dist/core/ingestion/utils/test-file-path.d.ts +28 -0
- package/dist/core/ingestion/utils/test-file-path.js +87 -0
- package/dist/core/ingestion/variable-extractors/configs/zig.d.ts +2 -0
- package/dist/core/ingestion/variable-extractors/configs/zig.js +71 -0
- package/dist/core/ingestion/workers/parse-worker.js +85 -14
- package/dist/core/install-context.d.ts +4 -0
- package/dist/core/install-context.js +152 -0
- package/dist/core/lbug/csv-generator.d.ts +10 -1
- package/dist/core/lbug/csv-generator.js +92 -22
- package/dist/core/lbug/graph-emit-sink.d.ts +3 -2
- package/dist/core/lbug/graph-emit-sink.js +4 -2
- package/dist/core/lbug/lbug-adapter.d.ts +100 -5
- package/dist/core/lbug/lbug-adapter.js +236 -24
- package/dist/core/lbug/schema.d.ts +6 -5
- package/dist/core/lbug/schema.js +84 -22
- package/dist/core/net/url-guard.d.ts +6 -0
- package/dist/core/net/url-guard.js +147 -0
- package/dist/core/package-version.d.ts +5 -0
- package/dist/core/package-version.js +10 -0
- package/dist/core/run-analyze.d.ts +21 -4
- package/dist/core/run-analyze.js +426 -117
- package/dist/core/search/fts-indexes.d.ts +19 -1
- package/dist/core/search/fts-indexes.js +28 -1
- package/dist/core/tree-sitter/parser-loader.js +16 -0
- package/dist/core/update-cache.d.ts +39 -0
- package/dist/core/update-cache.js +141 -0
- package/dist/core/update-check.d.ts +31 -0
- package/dist/core/update-check.js +274 -0
- package/dist/mcp/local/local-backend.d.ts +27 -13
- package/dist/mcp/local/local-backend.js +148 -60
- package/dist/mcp/repository-policy.d.ts +5 -1
- package/dist/mcp/repository-policy.js +48 -4
- package/dist/mcp/resources.js +10 -1
- package/dist/mcp/server.js +8 -9
- package/dist/mcp/tools.js +32 -22
- package/dist/server/analyze-launch.d.ts +2 -0
- package/dist/server/analyze-launch.js +2 -0
- package/dist/server/analyze-worker-protocol.d.ts +6 -1
- package/dist/server/analyze-worker.d.ts +1 -0
- package/dist/server/analyze-worker.js +38 -20
- package/dist/server/api.d.ts +5 -1
- package/dist/server/api.js +105 -88
- package/dist/server/git-clone.d.ts +40 -16
- package/dist/server/git-clone.js +253 -199
- package/dist/server/grep-params.d.ts +18 -0
- package/dist/server/grep-params.js +83 -0
- package/dist/server/grep-scan.d.ts +23 -0
- package/dist/server/grep-scan.js +107 -0
- package/dist/server/grep-worker.d.ts +1 -0
- package/dist/server/grep-worker.js +12 -0
- package/dist/server/mcp-http.d.ts +8 -0
- package/dist/server/mcp-http.js +16 -1
- package/dist/server/update-controller.d.ts +29 -0
- package/dist/server/update-controller.js +82 -0
- package/dist/storage/file-lock.d.ts +15 -0
- package/dist/storage/file-lock.js +155 -0
- package/dist/storage/fs-atomic.d.ts +24 -0
- package/dist/storage/fs-atomic.js +86 -2
- package/dist/storage/global-dir.d.ts +2 -0
- package/dist/storage/global-dir.js +6 -0
- package/dist/storage/parse-cache.d.ts +45 -7
- package/dist/storage/parse-cache.js +189 -42
- package/dist/storage/parsedfile-store.d.ts +41 -60
- package/dist/storage/parsedfile-store.js +247 -171
- package/dist/storage/repo-manager.d.ts +10 -4
- package/dist/storage/repo-manager.js +35 -25
- package/dist/storage/repo-meta.d.ts +34 -0
- package/dist/storage/v8-sidecar.d.ts +48 -0
- package/dist/storage/v8-sidecar.js +347 -0
- package/dist/types/pipeline.d.ts +14 -0
- package/dist/utils/process-identity.d.ts +2 -0
- package/dist/utils/process-identity.js +35 -0
- package/package.json +10 -4
- package/scripts/assert-web-assets.mjs +35 -0
- package/scripts/build-web.js +72 -0
- package/scripts/build.js +31 -28
- package/scripts/cross-platform-tests.ts +5 -0
- package/skills/gitnexus-cli.md +5 -1
- package/web/assets/ProcessFlowModal-DAeX2BHW.js +24 -0
- package/web/assets/{abnfDiagram-QNN2D4NM-Cq2djWWe.js → abnfDiagram-PAR5IXJI-J3OdeHLl.js} +1 -1
- package/web/assets/{agent-BWAXPjC5.js → agent-BMRqXorA.js} +6 -4
- package/web/assets/architecture-7GRP2DOG-M7G3SWCO-G3sWyX6M.js +1 -0
- package/web/assets/architectureDiagram-2PNWDENW-ysKcRlGT.js +36 -0
- package/web/assets/blockDiagram-PUWGUBOA-oLXTa1lY.js +129 -0
- package/web/assets/c4Diagram-3NLNHZP5-D3iu4eC0.js +38 -0
- package/web/assets/{chunk-2SREHG4O-Dip42xOq.js → chunk-2NMSUPJH-B24w-wng.js} +1 -1
- package/web/assets/{chunk-VJFVEZTB-CX66F2ep.js → chunk-32MCUW2P-ByUyt0Sa.js} +3 -3
- package/web/assets/{chunk-4RFN2BYJ-DHHWuC-n.js → chunk-3NPNU5GP-DocZ07Sg.js} +1 -1
- package/web/assets/{chunk-XNMVGMAZ-Cg_LnPtj.js → chunk-3SMGFRGC-CAu4JRLv.js} +1 -1
- package/web/assets/{chunk-W44A43WB-BN8EQc_u.js → chunk-4CAJECRU-DRYMwG9z.js} +1 -1
- package/web/assets/chunk-4OADUZ5Q-CxrSvOwZ.js +10 -0
- package/web/assets/{chunk-DMV4VAQV-Bn6WXDSX.js → chunk-5IQCK5RY-CCMhl4so.js} +2 -2
- package/web/assets/{chunk-RRFMTAIC-CMN0wcYA.js → chunk-5MVFYWFU-Db9KvrYO.js} +1 -1
- package/web/assets/chunk-CLS4B6BI-Uvx5QNsu.js +168 -0
- package/web/assets/chunk-DZP67EKU-B3Mt380j.js +70 -0
- package/web/assets/{chunk-6L755F7B-CMhLBxi2.js → chunk-EICP7K5X-CqwE9hui.js} +1 -1
- package/web/assets/{chunk-BI6VK774-D0oaWk8V.js → chunk-GDY2UAB4-CtQQR0a8.js} +1 -1
- package/web/assets/chunk-H7VHZCWX-CE1nAmt6.js +1 -0
- package/web/assets/chunk-IJBDOHL6-BUKtY6oF.js +1 -0
- package/web/assets/{chunk-OIYT25JQ-CQ6KOZGX.js → chunk-JFFVMJIA-0fJenqia.js} +1 -1
- package/web/assets/{chunk-HNC4WDU7-DoU3KnA7.js → chunk-JZGDI5JK-BeTMSSkJ.js} +1 -1
- package/web/assets/{chunk-EQFTRU2I-1ix7TzW9.js → chunk-KD6SPIPN-Qp1Pflah.js} +1 -1
- package/web/assets/chunk-NF366YI6-CpSpya3n.js +231 -0
- package/web/assets/chunk-NUDPKBEF-CU1-BQIW.js +34 -0
- package/web/assets/{chunk-SATU7PGQ-B1zhgOvc.js → chunk-OJINMHTS-zOCQe4eI.js} +1 -1
- package/web/assets/{chunk-E5QJAATJ-dh-5CtIV.js → chunk-Q6NGPIAH-yyBomb63.js} +1 -1
- package/web/assets/chunk-QJSWEUOL-D_rf9gPD.js +128 -0
- package/web/assets/chunk-R7JDMUKV-CRoqKpD6.js +1 -0
- package/web/assets/{chunk-VE5CLXGZ-C1vB7wpY.js → chunk-RCXAM2GK-CUqrWQDV.js} +1 -1
- package/web/assets/{chunk-66DQ2XMT-CM0xjFAN.js → chunk-RT4MAWR3-zXy9-Lvt.js} +1 -1
- package/web/assets/{chunk-TZUXEDM2-B7p9AcTw.js → chunk-SFMINX4W-J2UrvMpD.js} +1 -1
- package/web/assets/{chunk-LORZLZWG-B57uGw2N.js → chunk-SLDQ463B-CHY6e_bQ.js} +2 -2
- package/web/assets/{chunk-FWYVLQTC-BgDItRzJ.js → chunk-TCEHX7R3-CXPDEVbm.js} +1 -1
- package/web/assets/{chunk-224SPVON-B8gxtXpy.js → chunk-VQC2EELJ-Dc8fIy4R.js} +1 -1
- package/web/assets/chunk-VRZKL3EH-DB3KixTQ.js +1 -0
- package/web/assets/{chunk-A7VWPJGB-B4O3oQdQ.js → chunk-VTHDQ7BV-b7FsPQZO.js} +1 -1
- package/web/assets/chunk-VY2OSTJR-Dkgc3Brg.js +2 -0
- package/web/assets/chunk-WUBWJARI-7FwILJ3k.js +2 -0
- package/web/assets/{chunk-D6VWDJW2-BxcBdZ9c.js → chunk-YBMQ5JGJ-BSnyWZmd.js} +1 -1
- package/web/assets/chunk-YDMLL4PJ-IHhMngTz.js +2 -0
- package/web/assets/chunk-Z6V44ARX-BjCEsF0Q.js +62 -0
- package/web/assets/chunk-ZJJ7VQJP-Dz089b-K.js +321 -0
- package/web/assets/chunk-ZNLK7HRR-B0iFpmW4.js +1 -0
- package/web/assets/chunk-ZQN7UHIL-Cy7KAjQt.js +1 -0
- package/web/assets/{chunk-L5GCOVLC-CE2w8Nm_.js → chunk-ZS6VBONO-DBjJO0w9.js} +2 -2
- package/web/assets/{chunk-NV3KIAZN-5yvcpMiu.js → chunk-ZUNWM646-DNRJyNPe.js} +1 -1
- package/web/assets/classDiagram-FGAMPOII-C5Ibyode.js +1 -0
- package/web/assets/classDiagram-v2-AI5RJEK4-C5Ibyode.js +1 -0
- package/web/assets/{cose-bilkent-RZA4XIPR-BHpK4Crp.js → cose-bilkent-Q72C2OJ3-DMeFXnK8.js} +1 -1
- package/web/assets/cynefin-OW5HDTMX-6OCTWOGG-vlqakYcO.js +1 -0
- package/web/assets/{cynefinDiagram-TR7LZUCG-C3Iar9lZ.js → cynefinDiagram-2OOWUY4M-BY6DZkTt.js} +1 -1
- package/web/assets/dagre-MPVFI544-DWO70fy_.js +4 -0
- package/web/assets/diagram-AE4NWXFW-f7JRVRUL.js +24 -0
- package/web/assets/{diagram-L7DVE3PN-GIRyVUtt.js → diagram-BUJID5UG-BXZv1rCS.js} +2 -2
- package/web/assets/{diagram-JCD7PQ7C-DC5-9FRr.js → diagram-C44CZ5NI-CRNfvjCq.js} +1 -1
- package/web/assets/diagram-EYOLEXXS-DZOjKQVE.js +30 -0
- package/web/assets/diagram-P7B6PWOJ-D3SQmw3_.js +3 -0
- package/web/assets/{ebnfDiagram-DRHRQJWO-D8_CI4ZF.js → ebnfDiagram-FTPZ3PV6-jKWpIDN2.js} +1 -1
- package/web/assets/erDiagram-H3ERR26V-BqJntEuJ.js +99 -0
- package/web/assets/eventmodeling-NTZA5JFV-WKSWQHFS-Bq4FqtBL.js +1 -0
- package/web/assets/flowDiagram-YHGXBVSY-Dnlk2bEu.js +1 -0
- package/web/assets/ganttDiagram-RWFTB7ED-Bl6Y1K5T.js +292 -0
- package/web/assets/gitGraph-4MIJSDKK-JH2HKYUO-B3yc4GkH.js +1 -0
- package/web/assets/gitGraphDiagram-MAR6GKOP-CkNvsrdw.js +106 -0
- package/web/assets/{index-CJDpyH-n.css → index-C2_aej58.css} +1 -1
- package/web/assets/{index-DDRie6_8.js → index-Dj3vQOHK.js} +51 -51
- package/web/assets/info-A6RAGUB7-3TX3OFWW-BM3N5_Dv.js +1 -0
- package/web/assets/infoDiagram-LV547AFH-COkFutAf.js +2 -0
- package/web/assets/{ishikawaDiagram-4JDSWWDM-DmqWtjkl.js → ishikawaDiagram-PUJQGNDS-Bb8FylSR.js} +2 -2
- package/web/assets/{journeyDiagram-QUS3FAKT-XAzVzrQW.js → journeyDiagram-EW5QJT4W-BzoHUBhM.js} +4 -4
- package/web/assets/{kanban-definition-D4L7SQKK-YurRnmYn.js → kanban-definition-JSQERAZB-Uy2Pi0yQ.js} +4 -4
- package/web/assets/katex-CZ4GXH2S-C0Fcou7U.js +257 -0
- package/web/assets/{mindmap-definition-66QP5TD6-ChrWWnil.js → mindmap-definition-VBJCLQLM-B-CnOnt_.js} +3 -3
- package/web/assets/packet-AYTQ26CC-MKII6P3Y-Bd52ZE3V.js +1 -0
- package/web/assets/{pegDiagram-YKIO5C6U-QGeQLEq2.js → pegDiagram-7WILOQTJ-D9sneKXg.js} +1 -1
- package/web/assets/pie-WAS4IAKB-6B4OPMJ5-DW5Xy69Z.js +1 -0
- package/web/assets/pieDiagram-EFA7CBSB-Dx2NQofL.js +39 -0
- package/web/assets/{quadrantDiagram-VO5QLCXA-B7098wSc.js → quadrantDiagram-WARVYA7P-DPKL9_0A.js} +3 -3
- package/web/assets/radar-RG4KPBEZ-UPTR3XUL-CkzibT2h.js +1 -0
- package/web/assets/railroad-74A4TZTK-MEFUPFMS-D9zF-mDN.js +1 -0
- package/web/assets/railroad-abnf-HS5TGJTU-R5YG2S5D-ruacjUbX.js +1 -0
- package/web/assets/railroad-ebnf-LZEXJU2U-G5QEX2L6-S1zc5OiO.js +1 -0
- package/web/assets/railroad-peg-WCYAUIDC-H5I2ZRY2-Cbcr0XzY.js +1 -0
- package/web/assets/{railroadDiagram-M77LTMSB-AXu4vxk_.js → railroadDiagram-5NIQVNLQ-DsweTo14.js} +1 -1
- package/web/assets/{requirementDiagram-RASO5HTO-B-l8InpK.js → requirementDiagram-SXREGOKZ-CXwdNSVR.js} +4 -4
- package/web/assets/{sankeyDiagram-F32LOJ6L-Kd7zjJgX.js → sankeyDiagram-VV74M2VP-CA6jtP9P.js} +3 -3
- package/web/assets/{sequenceDiagram-URATNSBD-BlcdY9DS.js → sequenceDiagram-52ZFIFDL-k_5rEbzm.js} +15 -15
- package/web/assets/src-Df5C1Nz4.js +1 -0
- package/web/assets/stateDiagram-3QAKPIVI-BejHTf31.js +1 -0
- package/web/assets/stateDiagram-v2-HN2P4RDZ-BrfoRuOc.js +1 -0
- package/web/assets/swimlanes-QLVP42QD-CQSVO5D6.js +1 -0
- package/web/assets/swimlanesDiagram-JKPDBFCN-DrWB9kcD.js +8 -0
- package/web/assets/{timeline-definition-WJXWRH4I-DUfp1R3E.js → timeline-definition-GS45XAXW-C0Ks8rPP.js} +4 -4
- package/web/assets/treeView-Q6P3EWNA-ZRJGANNQ-DmKOCo6L.js +1 -0
- package/web/assets/treemap-WGGIJYW6-K64VN5AS-DO3xY92U.js +1 -0
- package/web/assets/{vennDiagram-K3VCMQLI-Bj-FN-XS.js → vennDiagram-QIQU2ZRJ-rgPiS837.js} +3 -3
- package/web/assets/wardley-WFR3VGLG-D67OWCCH-DiDPBNft.js +1 -0
- package/web/assets/wardleyDiagram-U6YNM66N-DRVr7SPi.js +78 -0
- package/web/assets/{xychartDiagram-5VRUVLCW-CK_rbSWE.js → xychartDiagram-XJAZEDNM-COtlZzYb.js} +3 -3
- package/web/index.html +19 -17
- package/web/assets/ProcessFlowModal-Badh2Pbg.js +0 -24
- package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +0 -1
- package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +0 -36
- package/web/assets/blockDiagram-54WLDVWM-Dg_hrRWE.js +0 -132
- package/web/assets/c4Diagram-X2LASM7V-CnhoT4aV.js +0 -10
- package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +0 -127
- package/web/assets/chunk-5VCL7Z4A-CQ-2dYWj.js +0 -1
- package/web/assets/chunk-6BELYETK-ChsYtfHW.js +0 -1
- package/web/assets/chunk-7CWYLC5S-DRgGkkpF.js +0 -2
- package/web/assets/chunk-7FYTHRHK-CsmYIswB.js +0 -32
- package/web/assets/chunk-KRXBNO2N-C-UNuKKf.js +0 -1
- package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +0 -321
- package/web/assets/chunk-LIEV3EAG-pyKGssV3.js +0 -1
- package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +0 -62
- package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +0 -10
- package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +0 -156
- package/web/assets/chunk-SZD42YQK-ijyKKVr1.js +0 -70
- package/web/assets/chunk-TFPGFQPA-Dj6a-0pC.js +0 -231
- package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +0 -2
- package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +0 -1
- package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +0 -1
- package/web/assets/chunk-WJBAP47W-BckNkuEN.js +0 -1
- package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +0 -1
- package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +0 -1
- package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +0 -1
- package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +0 -4
- package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +0 -30
- package/web/assets/diagram-KFBZAVDW-Dfmf_4ti.js +0 -3
- package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +0 -24
- package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +0 -85
- package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +0 -1
- package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +0 -1
- package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +0 -292
- package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +0 -1
- package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +0 -106
- package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +0 -1
- package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +0 -2
- package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +0 -257
- package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +0 -1
- package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +0 -1
- package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +0 -39
- package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +0 -1
- package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +0 -1
- package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +0 -1
- package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +0 -1
- package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +0 -1
- package/web/assets/src-C5sx_gMp.js +0 -1
- package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +0 -1
- package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +0 -1
- package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +0 -2
- package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +0 -8
- package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +0 -1
- package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +0 -1
- package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +0 -1
- package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +0 -78
- /package/web/assets/{sizeCapture-5GORAGP4-BEqQzsxs.js → sizeCapture-FGA5AGYP-BEqQzsxs.js} +0 -0
|
@@ -103,13 +103,21 @@ export function clampTimeout(timeoutMs) {
|
|
|
103
103
|
export function validateGroupImpactParams(params) {
|
|
104
104
|
const name = String(params.name ?? '').trim();
|
|
105
105
|
const repoPath = String(params.repo ?? '').trim();
|
|
106
|
-
|
|
106
|
+
// Optional string, same helper shape as cross-trace's `str()`: empty/blank
|
|
107
|
+
// counts as absent so `target_uid: ''` degrades to the name lookup rather
|
|
108
|
+
// than a zero-ambiguity lookup of the empty uid. Parsed before the required
|
|
109
|
+
// check so UID-only callers (MCP impact schema requires `direction`, not
|
|
110
|
+
// `target`) are accepted.
|
|
111
|
+
const str = (v) => typeof v === 'string' && v.trim() !== '' ? v : undefined;
|
|
112
|
+
const targetName = String(params.target ?? '').trim();
|
|
113
|
+
const target_uidEarly = str(params.target_uid);
|
|
107
114
|
if (!name)
|
|
108
115
|
return { ok: false, error: 'name is required' };
|
|
109
116
|
if (!repoPath)
|
|
110
117
|
return { ok: false, error: 'repo is required (group repo path, e.g. app/backend)' };
|
|
111
|
-
if (!
|
|
112
|
-
return { ok: false, error: 'target is required' };
|
|
118
|
+
if (!targetName && !target_uidEarly)
|
|
119
|
+
return { ok: false, error: 'target or target_uid is required' };
|
|
120
|
+
const target = targetName || target_uidEarly;
|
|
113
121
|
if (params.service !== undefined &&
|
|
114
122
|
params.service !== null &&
|
|
115
123
|
String(params.service).trim() === '') {
|
|
@@ -133,6 +141,9 @@ export function validateGroupImpactParams(params) {
|
|
|
133
141
|
minConfidence = 1;
|
|
134
142
|
const service = normalizeServicePrefix(params.service);
|
|
135
143
|
const subgroup = typeof params.subgroup === 'string' ? params.subgroup : undefined;
|
|
144
|
+
const target_uid = target_uidEarly;
|
|
145
|
+
const file_path = str(params.file_path);
|
|
146
|
+
const kind = str(params.kind);
|
|
136
147
|
// Clamp at the validate boundary so the downstream `deadline` (line
|
|
137
148
|
// ~366) and `safeLocalImpact`'s `setTimeout` both see a single
|
|
138
149
|
// bounded value. Without this, the outer deadline budgeted Phase-2
|
|
@@ -150,6 +161,9 @@ export function validateGroupImpactParams(params) {
|
|
|
150
161
|
name,
|
|
151
162
|
repoPath,
|
|
152
163
|
target,
|
|
164
|
+
target_uid,
|
|
165
|
+
file_path,
|
|
166
|
+
kind,
|
|
153
167
|
direction,
|
|
154
168
|
maxDepth,
|
|
155
169
|
crossDepth,
|
|
@@ -165,6 +179,16 @@ export function validateGroupImpactParams(params) {
|
|
|
165
179
|
async function resolveGroupRepo(port, config, repoPath) {
|
|
166
180
|
const registryName = config.repos[repoPath];
|
|
167
181
|
if (!registryName) {
|
|
182
|
+
const matchingMemberPaths = Object.entries(config.repos)
|
|
183
|
+
.filter(([, alias]) => alias.toLowerCase() === repoPath.toLowerCase())
|
|
184
|
+
.map(([memberPath]) => memberPath);
|
|
185
|
+
if (matchingMemberPaths.length > 0) {
|
|
186
|
+
return {
|
|
187
|
+
error: `Unknown repo path "${repoPath}" in this group. ` +
|
|
188
|
+
`That value is a registry alias for member path(s): ${matchingMemberPaths.join(', ')}. ` +
|
|
189
|
+
`Pass the group.yaml key to --repo, not the alias.`,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
168
192
|
return { error: `Unknown repo path "${repoPath}" in this group.` };
|
|
169
193
|
}
|
|
170
194
|
try {
|
|
@@ -438,7 +462,7 @@ export async function runGroupImpact(deps, params) {
|
|
|
438
462
|
const parsed = validateGroupImpactParams(params);
|
|
439
463
|
if (parsed.ok === false)
|
|
440
464
|
return { error: parsed.error };
|
|
441
|
-
const { name, repoPath, target, direction, maxDepth, crossDepth: _crossDepth, crossDepthWarning, relationTypes, includeTests, minConfidence, service: servicePrefix, subgroup, timeoutMs, } = parsed;
|
|
465
|
+
const { name, repoPath, target, target_uid, file_path, kind, direction, maxDepth, crossDepth: _crossDepth, crossDepthWarning, relationTypes, includeTests, minConfidence, service: servicePrefix, subgroup, timeoutMs, } = parsed;
|
|
442
466
|
const groupDir = getGroupDir(deps.gitnexusDir, name);
|
|
443
467
|
let config;
|
|
444
468
|
try {
|
|
@@ -454,6 +478,14 @@ export async function runGroupImpact(deps, params) {
|
|
|
454
478
|
return { error: resolved.error };
|
|
455
479
|
const impactParams = {
|
|
456
480
|
target,
|
|
481
|
+
// Selector params pass through to the member repo's impact (the port
|
|
482
|
+
// contract in service.ts documents them), so the single-repo tool's
|
|
483
|
+
// "re-call with target_uid to disambiguate" loop works unchanged in
|
|
484
|
+
// group mode. `undefined` keeps the call shape flat — same convention
|
|
485
|
+
// as the relationTypes line below.
|
|
486
|
+
target_uid,
|
|
487
|
+
file_path,
|
|
488
|
+
kind,
|
|
457
489
|
direction,
|
|
458
490
|
maxDepth,
|
|
459
491
|
relationTypes: relationTypes && relationTypes.length > 0 ? relationTypes : undefined,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import Java from 'tree-sitter-java';
|
|
2
2
|
import { compilePatterns, runCompiledPatterns, unquoteLiteral, } from '../tree-sitter-scanner.js';
|
|
3
|
-
import { springAnnotationHttpMethods, intersectSpringHttpMethods, isRouteMemberKey, findEnclosingClass, joinPath, } from '../../../ingestion/route-extractors/spring-shared.js';
|
|
3
|
+
import { springAnnotationHttpMethods, intersectSpringHttpMethods, isRouteMemberKey, findEnclosingClass, isClassLevelMappingAnnotation, joinPath, } from '../../../ingestion/route-extractors/spring-shared.js';
|
|
4
4
|
import { REST_TEMPLATE_TO_HTTP, WEB_CLIENT_SHORT_TO_HTTP, WEB_CLIENT_LONG_VERB_RE, EXCHANGE_ANNOTATION_TO_HTTP, parseRequestLine, pushPrefix, scanSpringInheritanceProject, OPENFEIGN_FRAMEWORK, HTTP_INTERFACE_FRAMEWORK, FEIGN_CONFIDENCE, REQUEST_LINE_CONFIDENCE, EXCHANGE_CONFIDENCE, } from './spring-consumer-shared.js';
|
|
5
|
-
import { extractJavaModuleConstants, foldJavaOperands, isJavaConstantFile, parseJavaConstOperands, } from '../../../ingestion/route-extractors/java-const-resolver.js';
|
|
5
|
+
import { expandJavaWildcardStaticImports, extractJavaModuleConstants, foldJavaOperands, isJavaConstantFile, parseJavaConstOperands, prepareJavaRouteConstants, } from '../../../ingestion/route-extractors/java-const-resolver.js';
|
|
6
6
|
import { extractStaticPathExpression, inferOkHttpMethod, inferHttpClientMethod, okHttpUrlRootsAtBuilder, httpClientUriRootsAtNewBuilder, httpClientChainHasUriCall, } from './java-static-path.js';
|
|
7
7
|
/**
|
|
8
8
|
* Java HTTP plugin. Handles:
|
|
@@ -394,12 +394,12 @@ function annotationHasRouteMember(annotation) {
|
|
|
394
394
|
return false;
|
|
395
395
|
}
|
|
396
396
|
function typeRequestMethods(typeNode) {
|
|
397
|
-
const mappings = declarationAnnotations(typeNode).filter((annotation) => simpleName(annotation.childForFieldName('name')?.text ?? '')
|
|
397
|
+
const mappings = declarationAnnotations(typeNode).filter((annotation) => isClassLevelMappingAnnotation(simpleName(annotation.childForFieldName('name')?.text ?? '')));
|
|
398
398
|
if (mappings.length === 0)
|
|
399
399
|
return ['*'];
|
|
400
400
|
if (mappings.length !== 1)
|
|
401
401
|
return [];
|
|
402
|
-
return springAnnotationHttpMethods('RequestMapping', mappings[0].text);
|
|
402
|
+
return springAnnotationHttpMethods(simpleName(mappings[0].childForFieldName('name')?.text ?? 'RequestMapping'), mappings[0].text);
|
|
403
403
|
}
|
|
404
404
|
function hasAnnotation(node, names) {
|
|
405
405
|
const modifiers = node.namedChildren.find((child) => child.type === 'modifiers');
|
|
@@ -551,7 +551,7 @@ function scanRouteAnnotations(tree) {
|
|
|
551
551
|
}
|
|
552
552
|
// Type-level (class or interface): a Spring `@RequestMapping` URL prefix, or
|
|
553
553
|
// — on an interface — an OpenFeign `@FeignClient(path = "...")` prefix.
|
|
554
|
-
if (ann
|
|
554
|
+
if (isClassLevelMappingAnnotation(ann)) {
|
|
555
555
|
if (!isRouteMemberKey(keyNode))
|
|
556
556
|
continue;
|
|
557
557
|
if (!valueNode) {
|
|
@@ -789,7 +789,10 @@ export const JAVA_HTTP_PLUGIN = {
|
|
|
789
789
|
if (!tree)
|
|
790
790
|
continue;
|
|
791
791
|
const mc = extractJavaModuleConstants(tree);
|
|
792
|
-
if (mc.literals.size > 0 ||
|
|
792
|
+
if (mc.literals.size > 0 ||
|
|
793
|
+
mc.exprs.size > 0 ||
|
|
794
|
+
mc.imports.size > 0 ||
|
|
795
|
+
(mc.wildcardImports?.length ?? 0) > 0) {
|
|
793
796
|
constants.set(rel, mc);
|
|
794
797
|
}
|
|
795
798
|
}
|
|
@@ -800,7 +803,14 @@ export const JAVA_HTTP_PLUGIN = {
|
|
|
800
803
|
continue;
|
|
801
804
|
}
|
|
802
805
|
}
|
|
803
|
-
|
|
806
|
+
// On-demand static imports (`import static a.b.C.*`) were recorded as
|
|
807
|
+
// pending class FQNs during extraction; materialize their bare-name
|
|
808
|
+
// bindings now that the whole map exists. A wildcard's target is itself
|
|
809
|
+
// a constants file, so it is necessarily a map entry — anything else
|
|
810
|
+
// degrades to the fold's skip floor. In-place: each entry is owned by
|
|
811
|
+
// this map, and every file is expanded exactly once.
|
|
812
|
+
const constantIndex = prepareJavaRouteConstants(constants);
|
|
813
|
+
return { constants, constantIndex };
|
|
804
814
|
},
|
|
805
815
|
scan(tree, repoContext, fileRel) {
|
|
806
816
|
const out = [];
|
|
@@ -832,8 +842,12 @@ export const JAVA_HTTP_PLUGIN = {
|
|
|
832
842
|
return foldConstants;
|
|
833
843
|
try {
|
|
834
844
|
const mc = extractJavaModuleConstants(tree);
|
|
835
|
-
|
|
845
|
+
// A file carrying ONLY wildcard static imports has an empty import
|
|
846
|
+
// table pre-expansion — overlay it too, then materialize the promised
|
|
847
|
+
// bindings against the repo map before it becomes a fold target.
|
|
848
|
+
if (mc.imports.size > 0 || (mc.wildcardImports?.length ?? 0) > 0) {
|
|
836
849
|
const merged = new Map(javaCtx.constants);
|
|
850
|
+
expandJavaWildcardStaticImports(mc, fileRel, merged, javaCtx.constantIndex);
|
|
837
851
|
merged.set(fileRel, mc);
|
|
838
852
|
foldConstants = merged;
|
|
839
853
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { requireVendoredGrammar } from '../../../tree-sitter/vendored-grammars.js';
|
|
2
2
|
import { compilePatterns, runCompiledPatterns, unquoteLiteral, } from '../tree-sitter-scanner.js';
|
|
3
|
-
import {
|
|
3
|
+
import { findEnclosingClass, intersectSpringHttpMethods, isClassLevelMappingAnnotation, joinPath, springAnnotationHttpMethods, } from '../../../ingestion/route-extractors/spring-shared.js';
|
|
4
4
|
import { buildKotlinConstantIndex, extractKotlinModuleConstants, foldKotlinOperands, isKotlinConstantFile, overlayKotlinConstantIndex, parseKotlinConstOperands, unfoldableDeclarationsOf, unquoteKotlinIdentifier, } from '../../../ingestion/route-extractors/kotlin-const-resolver.js';
|
|
5
5
|
import { REST_TEMPLATE_TO_HTTP, WEB_CLIENT_SHORT_TO_HTTP, WEB_CLIENT_LONG_VERB_RE, EXCHANGE_ANNOTATION_TO_HTTP, parseRequestLine, pushPrefix, scanSpringInheritanceProject, OPENFEIGN_FRAMEWORK, HTTP_INTERFACE_FRAMEWORK, FEIGN_CONFIDENCE, REQUEST_LINE_CONFIDENCE, EXCHANGE_CONFIDENCE, } from './spring-consumer-shared.js';
|
|
6
6
|
/**
|
|
@@ -392,6 +392,13 @@ function inferKotlinOkHttpMethod(urlCall) {
|
|
|
392
392
|
}
|
|
393
393
|
return name === null ? 'GET' : name.toUpperCase();
|
|
394
394
|
}
|
|
395
|
+
function enclosingAnnotationText(node) {
|
|
396
|
+
for (let current = node; current; current = current.parent) {
|
|
397
|
+
if (current.type === 'annotation')
|
|
398
|
+
return current.text;
|
|
399
|
+
}
|
|
400
|
+
return node.text;
|
|
401
|
+
}
|
|
395
402
|
/**
|
|
396
403
|
* Build the plugin only if the Kotlin grammar is available. Compiling
|
|
397
404
|
* the queries against a null grammar would throw at module load time
|
|
@@ -429,7 +436,7 @@ function buildKotlinPlugin(language) {
|
|
|
429
436
|
(modifiers
|
|
430
437
|
(annotation
|
|
431
438
|
(constructor_invocation
|
|
432
|
-
(user_type (type_identifier) @ann (#
|
|
439
|
+
(user_type (type_identifier) @ann (#match? @ann "RequestMapping$"))
|
|
433
440
|
(value_arguments
|
|
434
441
|
(value_argument . [(string_literal) @prefix (collection_literal (string_literal) @prefix)])))))
|
|
435
442
|
(type_identifier) @cls) @class
|
|
@@ -442,7 +449,7 @@ function buildKotlinPlugin(language) {
|
|
|
442
449
|
(modifiers
|
|
443
450
|
(annotation
|
|
444
451
|
(constructor_invocation
|
|
445
|
-
(user_type (type_identifier) @ann (#
|
|
452
|
+
(user_type (type_identifier) @ann (#match? @ann "RequestMapping$"))
|
|
446
453
|
(value_arguments
|
|
447
454
|
(value_argument
|
|
448
455
|
(simple_identifier) @key (#match? @key "^(path|value)$")
|
|
@@ -457,7 +464,7 @@ function buildKotlinPlugin(language) {
|
|
|
457
464
|
(modifiers
|
|
458
465
|
(annotation
|
|
459
466
|
(constructor_invocation
|
|
460
|
-
(user_type (type_identifier) @ann (#
|
|
467
|
+
(user_type (type_identifier) @ann (#match? @ann "RequestMapping$"))
|
|
461
468
|
(value_arguments
|
|
462
469
|
(value_argument . ${arrayOfArg('@prefix')})))))
|
|
463
470
|
(type_identifier) @cls) @class
|
|
@@ -470,7 +477,7 @@ function buildKotlinPlugin(language) {
|
|
|
470
477
|
(modifiers
|
|
471
478
|
(annotation
|
|
472
479
|
(constructor_invocation
|
|
473
|
-
(user_type (type_identifier) @ann (#
|
|
480
|
+
(user_type (type_identifier) @ann (#match? @ann "RequestMapping$"))
|
|
474
481
|
(value_arguments
|
|
475
482
|
(value_argument
|
|
476
483
|
(simple_identifier) @key (#match? @key "^(path|value)$")
|
|
@@ -495,7 +502,7 @@ function buildKotlinPlugin(language) {
|
|
|
495
502
|
(modifiers
|
|
496
503
|
(annotation
|
|
497
504
|
(constructor_invocation
|
|
498
|
-
(user_type (type_identifier) @ann (#match? @ann "
|
|
505
|
+
(user_type (type_identifier) @ann (#match? @ann "(Request|Get|Post|Put|Delete|Patch)Mapping$"))
|
|
499
506
|
(value_arguments
|
|
500
507
|
(value_argument . [(string_literal) @path (collection_literal (string_literal) @path)])))))
|
|
501
508
|
(simple_identifier) @method_name) @method
|
|
@@ -508,7 +515,7 @@ function buildKotlinPlugin(language) {
|
|
|
508
515
|
(modifiers
|
|
509
516
|
(annotation
|
|
510
517
|
(constructor_invocation
|
|
511
|
-
(user_type (type_identifier) @ann (#match? @ann "
|
|
518
|
+
(user_type (type_identifier) @ann (#match? @ann "(Request|Get|Post|Put|Delete|Patch)Mapping$"))
|
|
512
519
|
(value_arguments
|
|
513
520
|
(value_argument
|
|
514
521
|
(simple_identifier) @key (#match? @key "^(path|value)$")
|
|
@@ -523,7 +530,7 @@ function buildKotlinPlugin(language) {
|
|
|
523
530
|
(modifiers
|
|
524
531
|
(annotation
|
|
525
532
|
(constructor_invocation
|
|
526
|
-
(user_type (type_identifier) @ann (#match? @ann "
|
|
533
|
+
(user_type (type_identifier) @ann (#match? @ann "(Request|Get|Post|Put|Delete|Patch)Mapping$"))
|
|
527
534
|
(value_arguments
|
|
528
535
|
(value_argument . ${arrayOfArg('@path')})))))
|
|
529
536
|
(simple_identifier) @method_name) @method
|
|
@@ -536,7 +543,7 @@ function buildKotlinPlugin(language) {
|
|
|
536
543
|
(modifiers
|
|
537
544
|
(annotation
|
|
538
545
|
(constructor_invocation
|
|
539
|
-
(user_type (type_identifier) @ann (#match? @ann "
|
|
546
|
+
(user_type (type_identifier) @ann (#match? @ann "(Request|Get|Post|Put|Delete|Patch)Mapping$"))
|
|
540
547
|
(value_arguments
|
|
541
548
|
(value_argument
|
|
542
549
|
(simple_identifier) @key (#match? @key "^(path|value)$")
|
|
@@ -571,7 +578,7 @@ function buildKotlinPlugin(language) {
|
|
|
571
578
|
(modifiers
|
|
572
579
|
(annotation
|
|
573
580
|
(constructor_invocation
|
|
574
|
-
(user_type (type_identifier) @ann (#
|
|
581
|
+
(user_type (type_identifier) @ann (#match? @ann "RequestMapping$"))
|
|
575
582
|
(value_arguments (value_argument) @arg))))
|
|
576
583
|
(type_identifier) @cls) @class
|
|
577
584
|
`,
|
|
@@ -589,7 +596,7 @@ function buildKotlinPlugin(language) {
|
|
|
589
596
|
(modifiers
|
|
590
597
|
(annotation
|
|
591
598
|
(constructor_invocation
|
|
592
|
-
(user_type (type_identifier) @ann (#match? @ann "
|
|
599
|
+
(user_type (type_identifier) @ann (#match? @ann "(Request|Get|Post|Put|Delete|Patch)Mapping$"))
|
|
593
600
|
(value_arguments (value_argument) @arg))))
|
|
594
601
|
(simple_identifier) @method_name) @method
|
|
595
602
|
`,
|
|
@@ -649,8 +656,11 @@ function buildKotlinPlugin(language) {
|
|
|
649
656
|
for (const match of runCompiledPatterns(SPRING_CONST_CLASS_PREFIX_PATTERNS, tree)) {
|
|
650
657
|
const argNode = match.captures.arg;
|
|
651
658
|
const classNode = match.captures.class;
|
|
659
|
+
const annNode = match.captures.ann;
|
|
652
660
|
if (!argNode || !classNode)
|
|
653
661
|
continue;
|
|
662
|
+
if (annNode && !isClassLevelMappingAnnotation(annNode.text))
|
|
663
|
+
continue;
|
|
654
664
|
if ((resolvedPrefixes.get(classNode.id) ?? []).length > 0)
|
|
655
665
|
continue;
|
|
656
666
|
const expr = kotlinRouteArgumentExpression(argNode);
|
|
@@ -1145,14 +1155,37 @@ function buildKotlinPlugin(language) {
|
|
|
1145
1155
|
return body.namedChildren.filter((c) => c.type === 'function_declaration');
|
|
1146
1156
|
};
|
|
1147
1157
|
const kotlinFunctionName = (fn) => fn.namedChildren.find((c) => c.type === 'simple_identifier')?.text ?? null;
|
|
1158
|
+
const kotlinTypeRequestMethods = (typeNode) => {
|
|
1159
|
+
const modifiers = typeNode.namedChildren.find((child) => child.type === 'modifiers');
|
|
1160
|
+
const mappings = (modifiers?.namedChildren ?? []).filter((annotation) => {
|
|
1161
|
+
if (annotation.type !== 'annotation')
|
|
1162
|
+
return false;
|
|
1163
|
+
return isClassLevelMappingAnnotation(kotlinAnnotationName(annotation) ?? '');
|
|
1164
|
+
});
|
|
1165
|
+
if (mappings.length === 0)
|
|
1166
|
+
return ['*'];
|
|
1167
|
+
if (mappings.length !== 1)
|
|
1168
|
+
return [];
|
|
1169
|
+
const mapping = mappings[0];
|
|
1170
|
+
const mappingName = kotlinAnnotationName(mapping);
|
|
1171
|
+
if (!mappingName)
|
|
1172
|
+
return [];
|
|
1173
|
+
return springAnnotationHttpMethods(mappingName, mapping.text);
|
|
1174
|
+
};
|
|
1175
|
+
const kotlinClassHttpMethodsById = (tree) => new Map(tree.rootNode
|
|
1176
|
+
.descendantsOfType('class_declaration')
|
|
1177
|
+
.map((typeNode) => [typeNode.id, kotlinTypeRequestMethods(typeNode)]));
|
|
1148
1178
|
const collectKotlinSpringTypes = (filePath, tree) => {
|
|
1149
1179
|
// Class-level @RequestMapping prefixes (reuse the provider class-prefix query).
|
|
1150
1180
|
const prefixByClassId = new Map();
|
|
1151
1181
|
for (const match of runCompiledPatterns(SPRING_CLASS_PREFIX_PATTERNS, tree)) {
|
|
1152
1182
|
const prefixNode = match.captures.prefix;
|
|
1153
1183
|
const classNode = match.captures.class;
|
|
1184
|
+
const annNode = match.captures.ann;
|
|
1154
1185
|
if (!prefixNode || !classNode)
|
|
1155
1186
|
continue;
|
|
1187
|
+
if (annNode && !isClassLevelMappingAnnotation(annNode.text))
|
|
1188
|
+
continue;
|
|
1156
1189
|
// An INTERPOLATED literal (`"${ApiPaths.BASE}"`) is not a path — unquoting
|
|
1157
1190
|
// its raw text would carry the source spelling into the shared type view
|
|
1158
1191
|
// as a served prefix. Refusing it here is also what lets the unfoldable
|
|
@@ -1172,6 +1205,7 @@ function buildKotlinPlugin(language) {
|
|
|
1172
1205
|
// noise into the shared type view, so it is left out — the same skip floor
|
|
1173
1206
|
// `java.ts`'s `collectSpringTypes` keeps.
|
|
1174
1207
|
const routesByMethodId = new Map();
|
|
1208
|
+
const classHttpMethodsById = kotlinClassHttpMethodsById(tree);
|
|
1175
1209
|
const unfoldablePrefixClassIds = collectUnfoldablePrefixClassIds(tree, prefixByClassId);
|
|
1176
1210
|
for (const match of runCompiledPatterns(SPRING_METHOD_ROUTE_PATTERNS, tree)) {
|
|
1177
1211
|
const annNode = match.captures.ann;
|
|
@@ -1179,8 +1213,8 @@ function buildKotlinPlugin(language) {
|
|
|
1179
1213
|
const methodNode = match.captures.method;
|
|
1180
1214
|
if (!annNode || !pathNode || !methodNode)
|
|
1181
1215
|
continue;
|
|
1182
|
-
const
|
|
1183
|
-
if (
|
|
1216
|
+
const httpMethods = springAnnotationHttpMethods(annNode.text, enclosingAnnotationText(annNode));
|
|
1217
|
+
if (httpMethods.length === 0)
|
|
1184
1218
|
continue;
|
|
1185
1219
|
const rawPath = unquoteLiteral(pathNode.text);
|
|
1186
1220
|
if (rawPath === null)
|
|
@@ -1190,8 +1224,11 @@ function buildKotlinPlugin(language) {
|
|
|
1190
1224
|
const owner = findEnclosingClass(methodNode);
|
|
1191
1225
|
if (owner && unfoldablePrefixClassIds.has(owner.id))
|
|
1192
1226
|
continue;
|
|
1227
|
+
const constrainedMethods = intersectSpringHttpMethods(owner ? (classHttpMethodsById.get(owner.id) ?? ['*']) : ['*'], httpMethods);
|
|
1193
1228
|
const arr = routesByMethodId.get(methodNode.id) ?? [];
|
|
1194
|
-
|
|
1229
|
+
for (const httpMethod of constrainedMethods) {
|
|
1230
|
+
arr.push({ method: httpMethod, path: rawPath });
|
|
1231
|
+
}
|
|
1195
1232
|
routesByMethodId.set(methodNode.id, arr);
|
|
1196
1233
|
}
|
|
1197
1234
|
const out = [];
|
|
@@ -1260,6 +1297,7 @@ function buildKotlinPlugin(language) {
|
|
|
1260
1297
|
if (mc.literals.size > 0 ||
|
|
1261
1298
|
mc.exprs.size > 0 ||
|
|
1262
1299
|
mc.imports.size > 0 ||
|
|
1300
|
+
(mc.wildcardImports?.length ?? 0) > 0 ||
|
|
1263
1301
|
unfoldableDeclarationsOf(mc).size > 0) {
|
|
1264
1302
|
// POSIX key (see `normalizeRel`); `readFile` above got the raw `rel`.
|
|
1265
1303
|
constants.set(normalizeRel(rel), mc);
|
|
@@ -1303,6 +1341,7 @@ function buildKotlinPlugin(language) {
|
|
|
1303
1341
|
if (mc.literals.size > 0 ||
|
|
1304
1342
|
mc.exprs.size > 0 ||
|
|
1305
1343
|
mc.imports.size > 0 ||
|
|
1344
|
+
(mc.wildcardImports?.length ?? 0) > 0 ||
|
|
1306
1345
|
unfoldableDeclarationsOf(mc).size > 0) {
|
|
1307
1346
|
foldIndex = overlayKotlinConstantIndex(kotlinCtx.index, fileKey, mc);
|
|
1308
1347
|
}
|
|
@@ -1317,8 +1356,11 @@ function buildKotlinPlugin(language) {
|
|
|
1317
1356
|
for (const match of runCompiledPatterns(SPRING_CLASS_PREFIX_PATTERNS, tree)) {
|
|
1318
1357
|
const prefixNode = match.captures.prefix;
|
|
1319
1358
|
const classNode = match.captures.class;
|
|
1359
|
+
const annNode = match.captures.ann;
|
|
1320
1360
|
if (!prefixNode || !classNode)
|
|
1321
1361
|
continue;
|
|
1362
|
+
if (annNode && !isClassLevelMappingAnnotation(annNode.text))
|
|
1363
|
+
continue;
|
|
1322
1364
|
// An INTERPOLATED literal (`"${ApiPaths.BASE}"`) is not a path — see
|
|
1323
1365
|
// `isPlainStringLiteral`. Refusing it here also lets the unfoldable
|
|
1324
1366
|
// analysis below mark such a class, since that skips classes whose
|
|
@@ -1364,24 +1406,27 @@ function buildKotlinPlugin(language) {
|
|
|
1364
1406
|
// Literal and constant-valued paths are normalized into one candidate list
|
|
1365
1407
|
// so both reach the same Feign/interface/prefix classification below.
|
|
1366
1408
|
const methodRoutes = [];
|
|
1409
|
+
const classHttpMethodsById = kotlinClassHttpMethodsById(tree);
|
|
1367
1410
|
for (const match of runCompiledPatterns(SPRING_METHOD_ROUTE_PATTERNS, tree)) {
|
|
1368
1411
|
const annNode = match.captures.ann;
|
|
1369
1412
|
const pathNode = match.captures.path;
|
|
1370
1413
|
const methodNode = match.captures.method;
|
|
1371
1414
|
if (!annNode || !pathNode || !methodNode)
|
|
1372
1415
|
continue;
|
|
1373
|
-
const
|
|
1374
|
-
if (
|
|
1416
|
+
const httpMethods = springAnnotationHttpMethods(annNode.text, enclosingAnnotationText(annNode));
|
|
1417
|
+
if (httpMethods.length === 0)
|
|
1375
1418
|
continue;
|
|
1376
1419
|
const rawPath = unquoteLiteral(pathNode.text);
|
|
1377
1420
|
if (rawPath === null)
|
|
1378
1421
|
continue;
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1422
|
+
for (const httpMethod of httpMethods) {
|
|
1423
|
+
methodRoutes.push({
|
|
1424
|
+
httpMethod,
|
|
1425
|
+
rawPath,
|
|
1426
|
+
nameNode: match.captures.method_name,
|
|
1427
|
+
methodNode,
|
|
1428
|
+
});
|
|
1429
|
+
}
|
|
1385
1430
|
}
|
|
1386
1431
|
for (const match of runCompiledPatterns(SPRING_CONST_METHOD_ROUTE_PATTERNS, tree)) {
|
|
1387
1432
|
const annNode = match.captures.ann;
|
|
@@ -1389,8 +1434,8 @@ function buildKotlinPlugin(language) {
|
|
|
1389
1434
|
const methodNode = match.captures.method;
|
|
1390
1435
|
if (!annNode || !argNode || !methodNode)
|
|
1391
1436
|
continue;
|
|
1392
|
-
const
|
|
1393
|
-
if (
|
|
1437
|
+
const httpMethods = springAnnotationHttpMethods(annNode.text, enclosingAnnotationText(annNode));
|
|
1438
|
+
if (httpMethods.length === 0)
|
|
1394
1439
|
continue;
|
|
1395
1440
|
const expr = kotlinRouteArgumentExpression(argNode);
|
|
1396
1441
|
if (!expr || !FOLDABLE_PATH_EXPRESSIONS.has(expr.type))
|
|
@@ -1411,14 +1456,24 @@ function buildKotlinPlugin(language) {
|
|
|
1411
1456
|
const rawPath = foldKotlinOperands(fileKey, operands, index.repo, kotlinEnclosingTypeNames(methodNode), index);
|
|
1412
1457
|
if (rawPath === null)
|
|
1413
1458
|
continue;
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1459
|
+
for (const httpMethod of httpMethods) {
|
|
1460
|
+
methodRoutes.push({
|
|
1461
|
+
httpMethod,
|
|
1462
|
+
rawPath,
|
|
1463
|
+
nameNode: match.captures.method_name,
|
|
1464
|
+
methodNode,
|
|
1465
|
+
});
|
|
1466
|
+
}
|
|
1420
1467
|
}
|
|
1421
|
-
|
|
1468
|
+
const constrainedMethodRoutes = methodRoutes.flatMap((route) => {
|
|
1469
|
+
const owner = findEnclosingClass(route.methodNode);
|
|
1470
|
+
const classMethods = owner ? (classHttpMethodsById.get(owner.id) ?? ['*']) : ['*'];
|
|
1471
|
+
return intersectSpringHttpMethods(classMethods, [route.httpMethod]).map((httpMethod) => ({
|
|
1472
|
+
...route,
|
|
1473
|
+
httpMethod,
|
|
1474
|
+
}));
|
|
1475
|
+
});
|
|
1476
|
+
for (const { httpMethod, rawPath, nameNode, methodNode } of constrainedMethodRoutes) {
|
|
1422
1477
|
const enclosingClass = findEnclosingClass(methodNode);
|
|
1423
1478
|
// A @(Get|...)Mapping inside a @FeignClient interface is an OpenFeign
|
|
1424
1479
|
// consumer (a remote call), not a route this service serves.
|