gitnexus 1.6.10-rc.99 → 1.6.10
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 +177 -18
- package/dist/_shared/graph/types.d.ts +21 -2
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/index.d.ts +3 -3
- package/dist/_shared/index.d.ts.map +1 -1
- package/dist/_shared/index.js +1 -1
- package/dist/_shared/index.js.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 +16 -0
- package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.js +19 -7
- package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
- package/dist/_shared/language-detection.d.ts.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 +3 -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.d.ts +5 -0
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.js +315 -36
- package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts +115 -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/lookup-core.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/registries/lookup-core.js +58 -2
- package/dist/_shared/scope-resolution/registries/lookup-core.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/symbol-definition.d.ts +47 -0
- package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/types.d.ts +278 -3
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +3 -2
- package/dist/cli/ai-context.js +71 -16
- package/dist/cli/analyze-config.d.ts +1 -1
- package/dist/cli/analyze-options.d.ts +131 -0
- package/dist/cli/analyze-options.js +1 -0
- package/dist/cli/analyze.d.ts +21 -113
- package/dist/cli/analyze.js +172 -29
- package/dist/cli/cli-message.d.ts +1 -1
- package/dist/cli/detect-changes-format.js +19 -2
- package/dist/cli/doctor.d.ts +12 -0
- package/dist/cli/doctor.js +32 -5
- package/dist/cli/editor-targets.js +6 -0
- package/dist/cli/eval-server.js +2 -1
- package/dist/cli/format-symbol.d.ts +15 -0
- package/dist/cli/format-symbol.js +17 -0
- package/dist/cli/generated-skill.d.ts +17 -0
- package/dist/cli/generated-skill.js +1 -0
- package/dist/cli/group.js +229 -21
- package/dist/cli/help-i18n.js +1 -2
- package/dist/cli/i18n/en.d.ts +11 -9
- package/dist/cli/i18n/en.js +13 -9
- package/dist/cli/i18n/resources.d.ts +15 -11
- package/dist/cli/i18n/zh-CN.d.ts +4 -2
- package/dist/cli/i18n/zh-CN.js +11 -9
- package/dist/cli/index.js +8 -4
- package/dist/cli/resolve-invocation.d.ts +7 -3
- package/dist/cli/resolve-invocation.js +7 -3
- package/dist/cli/setup.js +4 -3
- package/dist/cli/skill-gen.d.ts +1 -6
- package/dist/cli/tool.d.ts +1 -0
- package/dist/cli/tool.js +74 -17
- package/dist/cli/wiki.js +53 -10
- package/dist/config/ignore-service.d.ts +2 -0
- package/dist/config/ignore-service.js +54 -13
- package/dist/core/analyzer-identity.d.ts +80 -0
- package/dist/core/analyzer-identity.js +364 -26
- package/dist/core/augmentation/engine.js +86 -71
- package/dist/core/embedding-checkpoint.d.ts +143 -0
- package/dist/core/embedding-checkpoint.js +221 -0
- package/dist/core/embedding-count.d.ts +61 -0
- package/dist/core/embedding-count.js +69 -0
- package/dist/core/embeddings/ast-utils.js +9 -1
- package/dist/core/embeddings/embedding-pipeline.d.ts +8 -0
- package/dist/core/embeddings/embedding-pipeline.js +253 -14
- package/dist/core/embeddings/http-client.d.ts +5 -0
- package/dist/core/embeddings/http-client.js +142 -27
- package/dist/core/graph/graph.js +3 -0
- package/dist/core/graph/import-cycles.d.ts +194 -3
- package/dist/core/graph/import-cycles.js +522 -73
- package/dist/core/graph/types.d.ts +18 -0
- package/dist/core/group/bridge-db.d.ts +204 -1
- package/dist/core/group/bridge-db.js +401 -28
- package/dist/core/group/completeness.d.ts +130 -0
- package/dist/core/group/completeness.js +83 -0
- package/dist/core/group/config-parser.js +0 -5
- package/dist/core/group/cross-impact.d.ts +46 -1
- package/dist/core/group/cross-impact.js +220 -19
- package/dist/core/group/cross-trace.d.ts +32 -11
- package/dist/core/group/cross-trace.js +114 -20
- package/dist/core/group/extractors/http-patterns/java.js +278 -22
- package/dist/core/group/extractors/http-patterns/node.js +332 -216
- package/dist/core/group/extractors/http-patterns/types.d.ts +8 -0
- package/dist/core/group/extractors/http-route-extractor.d.ts +1 -0
- package/dist/core/group/extractors/http-route-extractor.js +122 -48
- package/dist/core/group/extractors/include-extractor.js +20 -2
- package/dist/core/group/extractors/manifest-extractor.d.ts +1 -1
- package/dist/core/group/extractors/manifest-extractor.js +7 -7
- package/dist/core/group/extractors/python-workspace-extractor.js +5 -2
- package/dist/core/group/group-lock.d.ts +31 -0
- package/dist/core/group/group-lock.js +166 -0
- package/dist/core/group/service.js +297 -16
- package/dist/core/group/storage.d.ts +3 -0
- package/dist/core/group/storage.js +7 -39
- package/dist/core/group/sync.d.ts +49 -3
- package/dist/core/group/sync.js +0 -0
- package/dist/core/group/types.d.ts +183 -8
- package/dist/core/group/types.js +28 -1
- package/dist/core/incremental/subgraph-extract.d.ts +9 -6
- package/dist/core/incremental/subgraph-extract.js +33 -10
- package/dist/core/index-freshness.d.ts +77 -2
- package/dist/core/index-freshness.js +109 -2
- package/dist/core/ingestion/call-processor.d.ts +13 -1
- package/dist/core/ingestion/call-processor.js +110 -3
- package/dist/core/ingestion/cfg/callee-cell-format.d.ts +42 -0
- package/dist/core/ingestion/cfg/callee-cell-format.js +42 -0
- package/dist/core/ingestion/cfg/emit.d.ts +8 -23
- package/dist/core/ingestion/cfg/emit.js +9 -23
- package/dist/core/ingestion/class-extractors/configs/go.js +10 -5
- package/dist/core/ingestion/cluster-enricher.js +8 -4
- package/dist/core/ingestion/community-processor.d.ts +21 -3
- package/dist/core/ingestion/community-processor.js +81 -82
- package/dist/core/ingestion/di-extractors/index.d.ts +9 -33
- package/dist/core/ingestion/di-extractors/spring.d.ts +1 -1
- package/dist/core/ingestion/di-extractors/spring.js +8 -1
- package/dist/core/ingestion/di-extractors/types.d.ts +60 -0
- package/dist/core/ingestion/di-extractors/types.js +15 -0
- package/dist/core/ingestion/filesystem-walker.js +30 -14
- package/dist/core/ingestion/finalize-orchestrator.js +1 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +6 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.js +35 -1
- package/dist/core/ingestion/frameworks/spring/annotation-arguments.d.ts +13 -0
- package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +227 -0
- package/dist/core/ingestion/frameworks/spring/aop-candidates.d.ts +15 -0
- package/dist/core/ingestion/frameworks/spring/aop-candidates.js +85 -0
- package/dist/core/ingestion/frameworks/spring/aop.d.ts +118 -0
- package/dist/core/ingestion/frameworks/spring/aop.js +476 -0
- package/dist/core/ingestion/frameworks/spring/auto-configuration.d.ts +8 -0
- package/dist/core/ingestion/frameworks/spring/auto-configuration.js +16 -0
- package/dist/core/ingestion/frameworks/spring/bean-catalog.js +1 -0
- package/dist/core/ingestion/frameworks/spring/bean-factories.d.ts +33 -0
- package/dist/core/ingestion/frameworks/spring/bean-factories.js +65 -0
- package/dist/core/ingestion/frameworks/spring/conditionals.d.ts +25 -0
- package/dist/core/ingestion/frameworks/spring/conditionals.js +319 -0
- package/dist/core/ingestion/frameworks/spring/di-metadata.d.ts +3 -0
- package/dist/core/ingestion/frameworks/spring/di-metadata.js +162 -13
- package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +28 -0
- package/dist/core/ingestion/frameworks/spring/non-http-handlers.js +152 -0
- package/dist/core/ingestion/frameworks/spring/resource-injection.d.ts +5 -0
- package/dist/core/ingestion/frameworks/spring/resource-injection.js +91 -0
- package/dist/core/ingestion/import-resolvers/configs/csharp.js +5 -1
- package/dist/core/ingestion/import-resolvers/configs/swift.js +13 -0
- package/dist/core/ingestion/import-resolvers/csharp.d.ts +9 -1
- package/dist/core/ingestion/import-resolvers/csharp.js +234 -27
- package/dist/core/ingestion/import-resolvers/go.d.ts +11 -1
- package/dist/core/ingestion/import-resolvers/go.js +44 -17
- package/dist/core/ingestion/import-resolvers/jvm.d.ts +2 -2
- package/dist/core/ingestion/import-resolvers/node-workspace-packages.d.ts +90 -0
- package/dist/core/ingestion/import-resolvers/node-workspace-packages.js +429 -0
- package/dist/core/ingestion/import-resolvers/package-dir-index.d.ts +124 -0
- package/dist/core/ingestion/import-resolvers/package-dir-index.js +223 -0
- package/dist/core/ingestion/import-resolvers/pass-cache.d.ts +50 -0
- package/dist/core/ingestion/import-resolvers/pass-cache.js +60 -0
- package/dist/core/ingestion/import-resolvers/per-file-set.d.ts +71 -0
- package/dist/core/ingestion/import-resolvers/per-file-set.js +11 -0
- package/dist/core/ingestion/import-resolvers/php.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/php.js +65 -19
- package/dist/core/ingestion/import-resolvers/python-file-index.d.ts +201 -0
- package/dist/core/ingestion/import-resolvers/python-file-index.js +302 -0
- package/dist/core/ingestion/import-resolvers/python.js +25 -6
- package/dist/core/ingestion/import-resolvers/ruby.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/rust.d.ts +2 -2
- package/dist/core/ingestion/import-resolvers/standard.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/types.d.ts +1 -12
- package/dist/core/ingestion/import-resolvers/utils.d.ts +65 -6
- package/dist/core/ingestion/import-resolvers/utils.js +215 -36
- package/dist/core/ingestion/import-resolvers/workspace-file-index.d.ts +72 -0
- package/dist/core/ingestion/import-resolvers/workspace-file-index.js +58 -0
- package/dist/core/ingestion/language-config.d.ts +29 -1
- package/dist/core/ingestion/language-config.js +110 -35
- package/dist/core/ingestion/language-provider.d.ts +209 -7
- package/dist/core/ingestion/language-provider.js +37 -0
- package/dist/core/ingestion/languages/c/captures.js +7 -0
- package/dist/core/ingestion/languages/c/import-target.js +12 -16
- package/dist/core/ingestion/languages/c/scope-resolver.js +20 -19
- package/dist/core/ingestion/languages/c/static-linkage.js +12 -16
- package/dist/core/ingestion/languages/c-cpp.js +13 -0
- package/dist/core/ingestion/languages/cobol/scope-resolver.js +27 -20
- package/dist/core/ingestion/languages/cobol.js +13 -0
- package/dist/core/ingestion/languages/cpp/adl.d.ts +2 -2
- package/dist/core/ingestion/languages/cpp/adl.js +67 -44
- package/dist/core/ingestion/languages/cpp/captures.js +14 -2
- package/dist/core/ingestion/languages/cpp/file-local-linkage.js +11 -15
- package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +28 -8
- package/dist/core/ingestion/languages/cpp/inline-namespaces.js +242 -68
- package/dist/core/ingestion/languages/cpp/interpret.d.ts +2 -0
- package/dist/core/ingestion/languages/cpp/interpret.js +126 -6
- package/dist/core/ingestion/languages/cpp/query.js +106 -0
- package/dist/core/ingestion/languages/cpp/scope-resolver.js +48 -20
- package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +2 -15
- package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +18 -10
- package/dist/core/ingestion/languages/csharp/captures.js +19 -0
- package/dist/core/ingestion/languages/csharp/import-target.js +46 -72
- package/dist/core/ingestion/languages/csharp/namespace-siblings.js +5 -1
- package/dist/core/ingestion/languages/csharp/query.js +25 -5
- package/dist/core/ingestion/languages/csharp/scope-resolver.js +75 -2
- package/dist/core/ingestion/languages/dart/captures.d.ts +10 -0
- package/dist/core/ingestion/languages/dart/captures.js +598 -16
- package/dist/core/ingestion/languages/dart/import-target.js +32 -9
- package/dist/core/ingestion/languages/dart/index.d.ts +1 -1
- package/dist/core/ingestion/languages/dart/index.js +1 -1
- package/dist/core/ingestion/languages/dart/query.js +98 -1
- package/dist/core/ingestion/languages/dart/scope-resolver.js +14 -3
- package/dist/core/ingestion/languages/dart/simple-hooks.js +9 -0
- package/dist/core/ingestion/languages/dart.js +6 -1
- package/dist/core/ingestion/languages/go/captures.js +108 -3
- package/dist/core/ingestion/languages/go/generic-type-parameters.d.ts +31 -0
- package/dist/core/ingestion/languages/go/generic-type-parameters.js +140 -0
- package/dist/core/ingestion/languages/go/import-target.d.ts +3 -10
- package/dist/core/ingestion/languages/go/import-target.js +34 -30
- package/dist/core/ingestion/languages/go/index.d.ts +1 -1
- package/dist/core/ingestion/languages/go/interface-impls.d.ts +9 -1
- package/dist/core/ingestion/languages/go/interface-impls.js +693 -87
- package/dist/core/ingestion/languages/go/interpret.d.ts +2 -0
- package/dist/core/ingestion/languages/go/interpret.js +22 -8
- package/dist/core/ingestion/languages/go/method-owners.js +31 -12
- package/dist/core/ingestion/languages/go/package-clause.d.ts +46 -0
- package/dist/core/ingestion/languages/go/package-clause.js +75 -0
- package/dist/core/ingestion/languages/go/package-siblings.js +7 -11
- package/dist/core/ingestion/languages/go/query.js +56 -3
- package/dist/core/ingestion/languages/go/scope-resolver.js +39 -0
- package/dist/core/ingestion/languages/go.js +9 -0
- package/dist/core/ingestion/languages/java/analysis-features.d.ts +4 -0
- package/dist/core/ingestion/languages/java/analysis-features.js +12 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +12 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.js +48 -0
- package/dist/core/ingestion/languages/java/captures.js +77 -32
- package/dist/core/ingestion/languages/java/import-target.d.ts +49 -9
- package/dist/core/ingestion/languages/java/import-target.js +68 -88
- package/dist/core/ingestion/languages/java/interpret.js +3 -2
- package/dist/core/ingestion/languages/java/module-resolution.d.ts +62 -0
- package/dist/core/ingestion/languages/java/module-resolution.js +142 -0
- package/dist/core/ingestion/languages/java/query.js +15 -3
- package/dist/core/ingestion/languages/java/record-components.d.ts +14 -0
- package/dist/core/ingestion/languages/java/record-components.js +185 -0
- package/dist/core/ingestion/languages/java/scope-resolver.js +10 -2
- package/dist/core/ingestion/languages/java/spring-aop.d.ts +12 -0
- package/dist/core/ingestion/languages/java/spring-aop.js +49 -0
- package/dist/core/ingestion/languages/java/spring-conditionals.d.ts +11 -0
- package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
- package/dist/core/ingestion/languages/java/spring-di.d.ts +4 -1
- package/dist/core/ingestion/languages/java/spring-di.js +41 -9
- package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +7 -0
- package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +32 -0
- package/dist/core/ingestion/languages/java.js +94 -3
- package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
- package/dist/core/ingestion/languages/javascript/captures.js +262 -4
- package/dist/core/ingestion/languages/javascript/import-target.d.ts +17 -21
- package/dist/core/ingestion/languages/javascript/import-target.js +24 -41
- package/dist/core/ingestion/languages/javascript/index.d.ts +54 -5
- package/dist/core/ingestion/languages/javascript/index.js +54 -5
- package/dist/core/ingestion/languages/javascript/query.d.ts +1 -0
- package/dist/core/ingestion/languages/javascript/query.js +211 -5
- package/dist/core/ingestion/languages/javascript/scope-resolver.js +12 -0
- package/dist/core/ingestion/languages/javascript/simple-hooks.js +2 -1
- package/dist/core/ingestion/languages/jvm/package-siblings.js +77 -9
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +15 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +48 -0
- package/dist/core/ingestion/languages/kotlin/captures.js +43 -1
- package/dist/core/ingestion/languages/kotlin/import-target.d.ts +8 -1
- package/dist/core/ingestion/languages/kotlin/import-target.js +20 -123
- package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
- package/dist/core/ingestion/languages/kotlin/index.js +1 -0
- package/dist/core/ingestion/languages/kotlin/module-resolution.d.ts +22 -0
- package/dist/core/ingestion/languages/kotlin/module-resolution.js +108 -0
- package/dist/core/ingestion/languages/kotlin/query.js +28 -2
- package/dist/core/ingestion/languages/kotlin/scope-resolver.js +23 -2
- package/dist/core/ingestion/languages/kotlin/spring-aop.d.ts +12 -0
- package/dist/core/ingestion/languages/kotlin/spring-aop.js +64 -0
- package/dist/core/ingestion/languages/kotlin/spring-conditionals.d.ts +12 -0
- package/dist/core/ingestion/languages/kotlin/spring-conditionals.js +49 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +2 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.js +60 -11
- package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +10 -0
- package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +41 -0
- package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
- package/dist/core/ingestion/languages/php/captures.js +319 -51
- package/dist/core/ingestion/languages/php/import-target.d.ts +3 -4
- package/dist/core/ingestion/languages/php/import-target.js +192 -62
- package/dist/core/ingestion/languages/php/query.js +31 -0
- package/dist/core/ingestion/languages/python/arity-metadata.d.ts +1 -0
- package/dist/core/ingestion/languages/python/arity-metadata.js +1 -0
- package/dist/core/ingestion/languages/python/captures.js +29 -0
- package/dist/core/ingestion/languages/python/import-decomposer.js +22 -1
- package/dist/core/ingestion/languages/python/import-target.d.ts +42 -1
- package/dist/core/ingestion/languages/python/import-target.js +277 -91
- package/dist/core/ingestion/languages/python/index.d.ts +1 -1
- package/dist/core/ingestion/languages/python/index.js +1 -1
- package/dist/core/ingestion/languages/python/interpret.d.ts +52 -0
- package/dist/core/ingestion/languages/python/interpret.js +249 -7
- package/dist/core/ingestion/languages/python/query.js +9 -0
- package/dist/core/ingestion/languages/python/receiver-binding.d.ts +8 -6
- package/dist/core/ingestion/languages/python/receiver-binding.js +108 -12
- package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
- package/dist/core/ingestion/languages/python/simple-hooks.js +2 -8
- package/dist/core/ingestion/languages/python.js +13 -0
- package/dist/core/ingestion/languages/ruby/captures.js +158 -0
- package/dist/core/ingestion/languages/ruby/import-target.js +7 -5
- package/dist/core/ingestion/languages/ruby/query.js +93 -0
- package/dist/core/ingestion/languages/ruby/scope-resolver.js +2 -0
- package/dist/core/ingestion/languages/ruby/simple-hooks.d.ts +1 -1
- package/dist/core/ingestion/languages/ruby/simple-hooks.js +22 -1
- package/dist/core/ingestion/languages/rust/captures.js +39 -1
- package/dist/core/ingestion/languages/rust/method-owners.js +11 -1
- package/dist/core/ingestion/languages/rust/module-path.d.ts +126 -0
- package/dist/core/ingestion/languages/rust/module-path.js +214 -0
- package/dist/core/ingestion/languages/rust/qualified-call.d.ts +41 -0
- package/dist/core/ingestion/languages/rust/qualified-call.js +481 -0
- package/dist/core/ingestion/languages/rust/query.js +39 -6
- package/dist/core/ingestion/languages/rust/scope-resolver.js +21 -2
- package/dist/core/ingestion/languages/rust.js +17 -0
- package/dist/core/ingestion/languages/swift/captures.js +87 -3
- package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.d.ts +48 -0
- package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.js +253 -0
- package/dist/core/ingestion/languages/swift/import-target.js +4 -9
- package/dist/core/ingestion/languages/swift/query.js +17 -0
- package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +8 -0
- package/dist/core/ingestion/languages/swift/receiver-binding.js +6 -2
- package/dist/core/ingestion/languages/swift.js +2 -0
- package/dist/core/ingestion/languages/typescript/captures.d.ts +90 -1
- package/dist/core/ingestion/languages/typescript/captures.js +267 -5
- package/dist/core/ingestion/languages/typescript/cjs-export-assignment.d.ts +134 -0
- package/dist/core/ingestion/languages/typescript/cjs-export-assignment.js +523 -0
- package/dist/core/ingestion/languages/typescript/cjs-module-exports.d.ts +54 -0
- package/dist/core/ingestion/languages/typescript/cjs-module-exports.js +191 -0
- package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.d.ts +7 -0
- package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.js +92 -0
- package/dist/core/ingestion/languages/typescript/file-candidates.d.ts +29 -0
- package/dist/core/ingestion/languages/typescript/file-candidates.js +70 -0
- package/dist/core/ingestion/languages/typescript/import-decomposer.d.ts +28 -1
- package/dist/core/ingestion/languages/typescript/import-decomposer.js +125 -10
- package/dist/core/ingestion/languages/typescript/import-target.d.ts +25 -37
- package/dist/core/ingestion/languages/typescript/import-target.js +24 -26
- package/dist/core/ingestion/languages/typescript/interpret.d.ts +21 -1
- package/dist/core/ingestion/languages/typescript/interpret.js +45 -5
- package/dist/core/ingestion/languages/typescript/module-resolution.d.ts +48 -0
- package/dist/core/ingestion/languages/typescript/module-resolution.js +171 -0
- package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
- package/dist/core/ingestion/languages/typescript/query.js +303 -14
- package/dist/core/ingestion/languages/typescript/receiver-binding.d.ts +17 -0
- package/dist/core/ingestion/languages/typescript/receiver-binding.js +27 -0
- package/dist/core/ingestion/languages/typescript/scope-resolver.js +27 -40
- package/dist/core/ingestion/languages/typescript/simple-hooks.d.ts +0 -10
- package/dist/core/ingestion/languages/typescript/simple-hooks.js +22 -22
- package/dist/core/ingestion/languages/typescript/tsconfig.d.ts +59 -0
- package/dist/core/ingestion/languages/typescript/tsconfig.js +292 -0
- package/dist/core/ingestion/languages/typescript.js +93 -2
- package/dist/core/ingestion/languages/vue/import-target.d.ts +6 -22
- package/dist/core/ingestion/languages/vue/import-target.js +11 -47
- package/dist/core/ingestion/languages/vue/scope-resolver.js +4 -2
- package/dist/core/ingestion/local-symbol-pruner.js +11 -11
- package/dist/core/ingestion/method-extractors/configs/csharp.js +1 -0
- package/dist/core/ingestion/method-extractors/generic.js +1 -0
- package/dist/core/ingestion/method-types.d.ts +16 -0
- package/dist/core/ingestion/pipeline-phases/di.d.ts +1 -1
- package/dist/core/ingestion/pipeline-phases/di.js +136 -21
- package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
- package/dist/core/ingestion/pipeline-phases/index.js +2 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +154 -4
- package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +3 -2
- package/dist/core/ingestion/pipeline-phases/processes.js +91 -6
- package/dist/core/ingestion/pipeline-phases/routes.js +116 -25
- package/dist/core/ingestion/pipeline-phases/spring-aop.d.ts +34 -0
- package/dist/core/ingestion/pipeline-phases/spring-aop.js +439 -0
- package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +34 -0
- package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +255 -0
- package/dist/core/ingestion/pipeline-phases/types.d.ts +7 -0
- package/dist/core/ingestion/pipeline.d.ts +26 -2
- package/dist/core/ingestion/pipeline.js +60 -11
- package/dist/core/ingestion/process-processor.d.ts +109 -2
- package/dist/core/ingestion/process-processor.js +464 -52
- package/dist/core/ingestion/resolve-references.d.ts +6 -1
- package/dist/core/ingestion/resolve-references.js +66 -6
- package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +8 -2
- package/dist/core/ingestion/route-extractors/constant-resolver.js +11 -7
- package/dist/core/ingestion/route-extractors/data-route-table.d.ts +40 -0
- package/dist/core/ingestion/route-extractors/data-route-table.js +876 -0
- package/dist/core/ingestion/route-extractors/dispatch-guard.d.ts +96 -0
- package/dist/core/ingestion/route-extractors/dispatch-guard.js +1184 -0
- package/dist/core/ingestion/route-extractors/java-const-resolver.d.ts +114 -0
- package/dist/core/ingestion/route-extractors/java-const-resolver.js +569 -0
- package/dist/core/ingestion/route-extractors/js-const-resolver.d.ts +192 -0
- package/dist/core/ingestion/route-extractors/js-const-resolver.js +1033 -0
- package/dist/core/ingestion/route-extractors/nest.d.ts +53 -0
- package/dist/core/ingestion/route-extractors/nest.js +523 -0
- package/dist/core/ingestion/route-extractors/spring-shared.d.ts +11 -0
- package/dist/core/ingestion/route-extractors/spring-shared.js +89 -0
- package/dist/core/ingestion/route-extractors/spring.js +214 -29
- package/dist/core/ingestion/scope-extractor-bridge.js +9 -1
- package/dist/core/ingestion/scope-extractor.d.ts +22 -7
- package/dist/core/ingestion/scope-extractor.js +309 -15
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +311 -21
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +12 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +47 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +280 -42
- package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +123 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +171 -17
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +58 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +137 -34
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +30 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +39 -1
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +18 -1
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +113 -18
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +107 -5
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +590 -33
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +3 -0
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +101 -41
- package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.d.ts +34 -0
- package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.js +62 -0
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +5 -1
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +8 -1
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +105 -5
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +931 -92
- package/dist/core/ingestion/scope-resolution/passes/return-shape-members.d.ts +58 -0
- package/dist/core/ingestion/scope-resolution/passes/return-shape-members.js +458 -0
- package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.d.ts +180 -0
- package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.js +418 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +29 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +57 -0
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +55 -1
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +241 -19
- package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +112 -2
- package/dist/core/ingestion/scope-resolution/resolution-outcome.js +38 -1
- package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +25 -3
- package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +36 -16
- package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +210 -9
- package/dist/core/ingestion/scope-resolution/scope/walkers.js +905 -22
- package/dist/core/ingestion/scope-resolution/summary-maps.d.ts +28 -0
- package/dist/core/ingestion/scope-resolution/summary-maps.js +50 -0
- package/dist/core/ingestion/scope-resolution/undecided-satisfaction.d.ts +55 -0
- package/dist/core/ingestion/scope-resolution/undecided-satisfaction.js +37 -0
- package/dist/core/ingestion/scope-resolution/unresolved-receivers.d.ts +109 -0
- package/dist/core/ingestion/scope-resolution/unresolved-receivers.js +204 -0
- package/dist/core/ingestion/scope-resolution/utils/definition-id.d.ts +13 -0
- package/dist/core/ingestion/scope-resolution/utils/definition-id.js +19 -0
- package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.d.ts +171 -0
- package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.js +218 -0
- package/dist/core/ingestion/scope-resolution/workspace-index-types.d.ts +34 -0
- package/dist/core/ingestion/scope-resolution/workspace-index-types.js +15 -0
- package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +7 -20
- package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
- package/dist/core/ingestion/tree-sitter-queries.js +678 -4
- package/dist/core/ingestion/type-env.js +11 -7
- package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
- package/dist/core/ingestion/type-extractors/shared.js +16 -0
- package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
- package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
- package/dist/core/ingestion/type-extractors/typescript.js +26 -0
- package/dist/core/ingestion/utils/ast-helpers.d.ts +297 -15
- package/dist/core/ingestion/utils/ast-helpers.js +578 -46
- package/dist/core/ingestion/utils/call-analysis.d.ts +27 -22
- package/dist/core/ingestion/utils/call-analysis.js +202 -7
- package/dist/core/ingestion/utils/callable-flow-captures.d.ts +59 -0
- package/dist/core/ingestion/utils/callable-flow-captures.js +51 -1
- package/dist/core/ingestion/utils/callable-labels.d.ts +25 -0
- package/dist/core/ingestion/utils/callable-labels.js +31 -0
- package/dist/core/ingestion/utils/effective-ram.d.ts +40 -0
- package/dist/core/ingestion/utils/effective-ram.js +58 -0
- package/dist/core/ingestion/utils/line-base.d.ts +14 -0
- package/dist/core/ingestion/utils/line-base.js +14 -0
- package/dist/core/ingestion/utils/method-props.d.ts +27 -4
- package/dist/core/ingestion/utils/method-props.js +29 -4
- package/dist/core/ingestion/utils/receiver-chain-captures.d.ts +31 -0
- package/dist/core/ingestion/utils/receiver-chain-captures.js +57 -0
- package/dist/core/ingestion/utils/receiver-chain-codec.d.ts +89 -0
- package/dist/core/ingestion/utils/receiver-chain-codec.js +182 -0
- package/dist/core/ingestion/utils/scope-tree-walk.d.ts +22 -0
- package/dist/core/ingestion/utils/scope-tree-walk.js +33 -0
- package/dist/core/ingestion/utils/template-arguments.d.ts +96 -0
- package/dist/core/ingestion/utils/template-arguments.js +196 -0
- package/dist/core/ingestion/utils/type-parameters.d.ts +49 -0
- package/dist/core/ingestion/utils/type-parameters.js +206 -0
- package/dist/core/ingestion/workers/callable-id.d.ts +80 -0
- package/dist/core/ingestion/workers/callable-id.js +125 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
- package/dist/core/ingestion/workers/parse-worker.js +493 -54
- package/dist/core/ingestion/workers/worker-pool.d.ts +20 -27
- package/dist/core/ingestion/workers/worker-pool.js +91 -3
- package/dist/core/lbug/csv-generator.d.ts +27 -0
- package/dist/core/lbug/csv-generator.js +72 -17
- package/dist/core/lbug/extension-load-error.js +13 -2
- package/dist/core/lbug/extension-loader.d.ts +29 -0
- package/dist/core/lbug/extension-loader.js +31 -6
- package/dist/core/lbug/graph-emit-sink.d.ts +264 -0
- package/dist/core/lbug/graph-emit-sink.js +581 -0
- package/dist/core/lbug/lbug-adapter.d.ts +290 -11
- package/dist/core/lbug/lbug-adapter.js +652 -69
- package/dist/core/lbug/native-check.d.ts +21 -0
- package/dist/core/lbug/native-check.js +248 -32
- package/dist/core/lbug/pdg-emit-sink.d.ts +13 -4
- package/dist/core/lbug/pdg-emit-sink.js +21 -111
- package/dist/core/lbug/pool-adapter.d.ts +9 -0
- package/dist/core/lbug/pool-adapter.js +164 -14
- package/dist/core/lbug/query-batch.d.ts +75 -0
- package/dist/core/lbug/query-batch.js +102 -0
- package/dist/core/lbug/rel-pair-routing.d.ts +160 -2
- package/dist/core/lbug/rel-pair-routing.js +228 -10
- package/dist/core/lbug/schema.d.ts +163 -4
- package/dist/core/lbug/schema.js +404 -159
- package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
- package/dist/core/lbug/sync-csv-writer.js +108 -0
- package/dist/core/run-analyze.d.ts +147 -0
- package/dist/core/run-analyze.js +1215 -179
- package/dist/core/search/bm25-index.d.ts +11 -0
- package/dist/core/search/bm25-index.js +60 -26
- package/dist/core/search/fts-indexes.d.ts +150 -9
- package/dist/core/search/fts-indexes.js +241 -23
- package/dist/core/wiki/graph-queries.js +145 -112
- package/dist/core/wiki/llm-client.d.ts +29 -3
- package/dist/core/wiki/llm-client.js +47 -12
- package/dist/core/wiki/prompts.d.ts +19 -0
- package/dist/core/wiki/prompts.js +20 -1
- package/dist/lib/utils.d.ts +113 -0
- package/dist/lib/utils.js +185 -0
- package/dist/mcp/local/aop-metadata.d.ts +77 -0
- package/dist/mcp/local/aop-metadata.js +227 -0
- package/dist/mcp/local/bean-metadata.d.ts +2 -1
- package/dist/mcp/local/bean-metadata.js +22 -1
- package/dist/mcp/local/convex-metadata.d.ts +8 -0
- package/dist/mcp/local/convex-metadata.js +45 -0
- package/dist/mcp/local/local-backend.d.ts +174 -11
- package/dist/mcp/local/local-backend.js +1678 -331
- package/dist/mcp/local/path-predicate.d.ts +19 -0
- package/dist/mcp/local/path-predicate.js +21 -0
- package/dist/mcp/local/pdg-impact.d.ts +132 -10
- package/dist/mcp/local/pdg-impact.js +391 -98
- package/dist/mcp/repository-policy.d.ts +1 -0
- package/dist/mcp/repository-policy.js +5 -0
- package/dist/mcp/resources.js +26 -4
- package/dist/mcp/server.js +23 -13
- package/dist/mcp/tools.d.ts +8 -0
- package/dist/mcp/tools.js +76 -23
- package/dist/server/analyze-job.d.ts +37 -2
- package/dist/server/analyze-job.js +13 -2
- package/dist/server/analyze-launch.d.ts +1 -1
- package/dist/server/analyze-launch.js +79 -10
- package/dist/server/analyze-worker-core.d.ts +1 -1
- package/dist/server/analyze-worker-core.js +10 -1
- package/dist/server/analyze-worker-ipc.d.ts +1 -1
- package/dist/server/analyze-worker-ipc.js +4 -0
- package/dist/server/analyze-worker-protocol.d.ts +59 -0
- package/dist/server/analyze-worker-protocol.js +1 -0
- package/dist/server/analyze-worker.d.ts +1 -17
- package/dist/server/api.d.ts +2 -11
- package/dist/server/api.js +164 -163
- package/dist/server/embed-run-outcome.d.ts +89 -0
- package/dist/server/embed-run-outcome.js +88 -0
- package/dist/server/git-clone.js +6 -2
- package/dist/server/middleware.d.ts +116 -9
- package/dist/server/middleware.js +291 -22
- package/dist/server/sse-progress.d.ts +41 -0
- package/dist/server/sse-progress.js +125 -0
- package/dist/storage/branch-index.d.ts +11 -6
- package/dist/storage/branch-index.js +15 -7
- package/dist/storage/file-hash.js +2 -2
- package/dist/storage/fs-atomic.d.ts +25 -0
- package/dist/storage/fs-atomic.js +42 -0
- package/dist/storage/git.d.ts +131 -0
- package/dist/storage/git.js +236 -2
- package/dist/storage/index-lock.d.ts +102 -0
- package/dist/storage/index-lock.js +660 -0
- package/dist/storage/parse-cache.js +588 -6
- package/dist/storage/parsedfile-store.js +76 -6
- package/dist/storage/repo-manager.d.ts +54 -441
- package/dist/storage/repo-manager.js +312 -221
- package/dist/storage/repo-meta.d.ts +530 -0
- package/dist/storage/repo-meta.js +100 -0
- package/dist/types/pipeline.d.ts +37 -0
- package/hooks/antigravity/gitnexus-antigravity-hook.cjs +1 -1
- package/hooks/claude/gitnexus-hook.cjs +1 -1
- package/hooks/claude/resolve-analyze-cmd.cjs +80 -13
- package/package.json +11 -2
- package/scripts/cross-platform-shard.ts +153 -0
- package/scripts/cross-platform-tests.ts +122 -0
- package/scripts/run-cross-platform.ts +16 -5
- package/skills/gitnexus-cli.md +3 -3
- package/skills/gitnexus-debugging.md +37 -7
- package/skills/gitnexus-exploring.md +26 -4
- package/skills/gitnexus-impact-analysis.md +71 -10
- package/skills/gitnexus-plan/README.md +11 -6
- package/skills/gitnexus-plan/references/evidence-provenance.md +49 -12
- package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +654 -372
- package/skills/gitnexus-refactoring.md +48 -5
- package/skills/gitnexus-review/SKILL.md +12 -6
- package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-security-lens.md +1 -1
- package/skills/gitnexus-taint-analysis.md +13 -7
- package/skills/gitnexus-work/SKILL.md +4 -1
- package/skills/gitnexus-work/references/evidence-provenance.md +49 -12
- package/skills/gitnexus-work/scripts/evidence-provenance.mjs +654 -372
- package/vendor/leiden/utils.cjs +28 -1
- package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
- package/web/assets/{__vite-browser-external-bMKyYQkO.js → __vite-browser-external-COxE8F0G.js} +1 -1
- package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
- package/web/assets/agent-Dr4l5EOp.js +662 -0
- package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
- package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
- package/web/assets/{blockDiagram-7IZFK4PR-DBefcjof.js → blockDiagram-54WLDVWM-Dg_hrRWE.js} +4 -4
- package/web/assets/{c4Diagram-Y2BXMSZH-EjWnjEJl.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +2 -2
- package/web/assets/chunk-224SPVON-B8gxtXpy.js +1 -0
- package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +127 -0
- package/web/assets/chunk-2SREHG4O-Dip42xOq.js +1 -0
- package/web/assets/chunk-4RFN2BYJ-DHHWuC-n.js +1 -0
- package/web/assets/chunk-66DQ2XMT-CM0xjFAN.js +1 -0
- package/web/assets/chunk-6BELYETK-ChsYtfHW.js +1 -0
- package/web/assets/{chunk-LII3EMHJ-BL6lKJ_P.js → chunk-6L755F7B-CMhLBxi2.js} +1 -1
- package/web/assets/{chunk-QA3QBVWF-DVXPOIxe.js → chunk-7CWYLC5S-DRgGkkpF.js} +1 -1
- package/web/assets/{chunk-ZXARS5L4-C3v-4Fsw.js → chunk-A7VWPJGB-B4O3oQdQ.js} +1 -1
- package/web/assets/chunk-BI6VK774-D0oaWk8V.js +1 -0
- package/web/assets/chunk-D6VWDJW2-BxcBdZ9c.js +2 -0
- package/web/assets/chunk-DMV4VAQV-Bn6WXDSX.js +4 -0
- package/web/assets/chunk-E5QJAATJ-dh-5CtIV.js +2 -0
- package/web/assets/chunk-EQFTRU2I-1ix7TzW9.js +2 -0
- package/web/assets/chunk-FWYVLQTC-BgDItRzJ.js +1 -0
- package/web/assets/chunk-HNC4WDU7-DoU3KnA7.js +1 -0
- package/web/assets/chunk-L5GCOVLC-CE2w8Nm_.js +161 -0
- package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +321 -0
- package/web/assets/chunk-LORZLZWG-B57uGw2N.js +88 -0
- package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +62 -0
- package/web/assets/chunk-NV3KIAZN-5yvcpMiu.js +1 -0
- package/web/assets/chunk-OIYT25JQ-CQ6KOZGX.js +1 -0
- package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +10 -0
- package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +156 -0
- package/web/assets/chunk-RRFMTAIC-CMN0wcYA.js +1 -0
- package/web/assets/{chunk-RLI5ZMPA-CkXZ0y0U.js → chunk-SATU7PGQ-B1zhgOvc.js} +1 -1
- package/web/assets/chunk-STOV2HOB-GnExfzIX.js +1 -0
- package/web/assets/{chunk-INKRHTLW-Ckl3_KkO.js → chunk-SZD42YQK-ijyKKVr1.js} +21 -21
- package/web/assets/{chunk-LCXTWHL2-C162wE5z.js → chunk-TFPGFQPA-Dj6a-0pC.js} +3 -3
- package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +2 -0
- package/web/assets/chunk-TZUXEDM2-B7p9AcTw.js +1 -0
- package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +1 -0
- package/web/assets/{chunk-6764PJDD-C7xxk063.js → chunk-VE5CLXGZ-C1vB7wpY.js} +1 -1
- package/web/assets/{chunk-RG4AUYOV-ZNgyLFq6.js → chunk-VJFVEZTB-CX66F2ep.js} +3 -3
- package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +1 -0
- package/web/assets/chunk-WJBAP47W-BckNkuEN.js +1 -0
- package/web/assets/chunk-XNMVGMAZ-Cg_LnPtj.js +1 -0
- package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +1 -0
- package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +1 -0
- package/web/assets/{cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js → cose-bilkent-RZA4XIPR-BHpK4Crp.js} +1 -1
- package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +1 -0
- package/web/assets/cynefinDiagram-TR7LZUCG-C3Iar9lZ.js +62 -0
- package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +4 -0
- package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +30 -0
- package/web/assets/diagram-JCD7PQ7C-DC5-9FRr.js +24 -0
- package/web/assets/{diagram-HNR7UZ2L-DVRltWbL.js → diagram-KFBZAVDW-Dfmf_4ti.js} +3 -3
- package/web/assets/diagram-L7DVE3PN-GIRyVUtt.js +41 -0
- package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +24 -0
- package/web/assets/ebnfDiagram-DRHRQJWO-D8_CI4ZF.js +1 -0
- package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +85 -0
- package/web/assets/error-D9MtuG9s.js +1 -0
- package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +1 -0
- package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +1 -0
- package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +292 -0
- package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +1 -0
- package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +106 -0
- package/web/assets/{index-D7mTFcvQ.js → index-2zdvEdzg.js} +51 -51
- package/web/assets/index-CJDpyH-n.css +2 -0
- package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +1 -0
- package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +2 -0
- package/web/assets/{ishikawaDiagram-BNXS4ZKH-XpjJRU9h.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +2 -2
- package/web/assets/{journeyDiagram-M6C3CM3L-C6wjooas.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +3 -3
- package/web/assets/{kanban-definition-75IXJCU3-5_UVY79g.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +6 -6
- package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
- package/web/assets/{mindmap-definition-2TDM6QVE-8xDLzk2e.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +5 -5
- package/web/assets/node.browser-U-KyT5AW.js +1 -0
- package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +1 -0
- package/web/assets/pegDiagram-YKIO5C6U-QGeQLEq2.js +1 -0
- package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +1 -0
- package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +39 -0
- package/web/assets/{quadrantDiagram-VICAPDV7-DR54jOeR.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +3 -3
- package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +1 -0
- package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +1 -0
- package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +1 -0
- package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +1 -0
- package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +1 -0
- package/web/assets/railroadDiagram-M77LTMSB-AXu4vxk_.js +1 -0
- package/web/assets/{requirementDiagram-JXO7QTGE-PEkg7sKC.js → requirementDiagram-RASO5HTO-B-l8InpK.js} +4 -4
- package/web/assets/{sankeyDiagram-URQDO5SZ-DDWEtjcs.js → sankeyDiagram-F32LOJ6L-Kd7zjJgX.js} +3 -3
- package/web/assets/{sequenceDiagram-VS2MUI6T-Bv-uwANx.js → sequenceDiagram-URATNSBD-BlcdY9DS.js} +7 -7
- package/web/assets/sizeCapture-5GORAGP4-BEqQzsxs.js +1 -0
- package/web/assets/src-C5sx_gMp.js +1 -0
- package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +1 -0
- package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +1 -0
- package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +2 -0
- package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +8 -0
- package/web/assets/{timeline-definition-O6YCAMPW-Qmsuo7qS.js → timeline-definition-WJXWRH4I-DUfp1R3E.js} +3 -3
- package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +1 -0
- package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +1 -0
- package/web/assets/vennDiagram-K3VCMQLI-Bj-FN-XS.js +34 -0
- package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +1 -0
- package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +78 -0
- package/web/assets/xychartDiagram-5VRUVLCW-CK_rbSWE.js +7 -0
- package/web/index.html +16 -15
- package/dist/core/ingestion/languages/python/index-stats.d.ts +0 -18
- package/dist/core/ingestion/languages/python/index-stats.js +0 -25
- package/web/assets/ProcessFlowModal-CwkpVkv-.js +0 -22
- package/web/assets/agent-Ds-lkZjX.js +0 -626
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
- package/web/assets/architectureDiagram-UL44E2DR-CmG3uPWf.js +0 -36
- package/web/assets/chunk-2T2R6R2M-Bb6Sy3_j.js +0 -4
- package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +0 -1
- package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +0 -321
- package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +0 -159
- package/web/assets/chunk-67TQ5CYL-CA7OhIEf.js +0 -124
- package/web/assets/chunk-7J6CGLKN-BlKwgXKs.js +0 -10
- package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +0 -1
- package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +0 -1
- package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
- package/web/assets/chunk-KGFNY3KK-BZeP-55u.js +0 -62
- package/web/assets/chunk-KGYTTC2M-zm6n242I.js +0 -1
- package/web/assets/chunk-KNLZD3CH-BGlP6X9R.js +0 -1
- package/web/assets/chunk-LRIF4GLE-n59lhprL.js +0 -1
- package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
- package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
- package/web/assets/chunk-T2UQINTJ-BEyXhZWe.js +0 -1
- package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +0 -1
- package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +0 -1
- package/web/assets/chunk-UY5QBCOK-ByqTVLvh.js +0 -1
- package/web/assets/chunk-VU6ZFW4Y-BLeasdkU.js +0 -2
- package/web/assets/classDiagram-KGZ6W3CR-olpO3fMe.js +0 -1
- package/web/assets/classDiagram-v2-72OJOZXJ-olpO3fMe.js +0 -1
- package/web/assets/dagre-ND4H6XIP-CY4iIF7v.js +0 -4
- package/web/assets/diagram-3NCE3AQN-CO6QpzEE.js +0 -43
- package/web/assets/diagram-GF46GFSD-B2atbzmU.js +0 -24
- package/web/assets/diagram-QXG6HAR7-DR6AHD2h.js +0 -24
- package/web/assets/diagram-WEQXMOUZ-DkpoMwTL.js +0 -10
- package/web/assets/erDiagram-L5TCEMPS-n8g_90bc.js +0 -85
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
- package/web/assets/flowDiagram-H6V6AXG4-SGMDiCkB.js +0 -162
- package/web/assets/ganttDiagram-JCBTUEKG-Cb3UBqRS.js +0 -292
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
- package/web/assets/gitGraphDiagram-S2ZK5IYY-Bs9CR7tq.js +0 -106
- package/web/assets/index-CX_fADmQ.css +0 -2
- package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +0 -1
- package/web/assets/infoDiagram-3YFTVSEB-T368on4D.js +0 -2
- package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
- package/web/assets/node-Ct_zna8U.js +0 -8
- package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +0 -1
- package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +0 -1
- package/web/assets/pieDiagram-CU6KROY3-Bv4LpAbr.js +0 -30
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
- package/web/assets/sdk-CzHHH8tD.js +0 -37
- package/web/assets/src-Cv1eWg0o.js +0 -1
- package/web/assets/stateDiagram-7D4R322I-DVNjmkEq.js +0 -1
- package/web/assets/stateDiagram-v2-36443NZ5-CyN4Fh7_.js +0 -1
- package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +0 -1
- package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +0 -1
- package/web/assets/vennDiagram-MWXL3ELB-BD1iK1SX.js +0 -34
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
- package/web/assets/wardleyDiagram-CUQ6CDDI-D6TzLVob.js +0 -78
- package/web/assets/xychartDiagram-N2JHSOCM-CoZ_Tits.js +0 -7
- /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
|
@@ -18,3 +18,17 @@
|
|
|
18
18
|
* must not shift. The clamp guards degenerate inputs (line 0 / empty files).
|
|
19
19
|
*/
|
|
20
20
|
export const toZeroBasedLine = (oneBasedLine) => Math.max(0, oneBasedLine - 1);
|
|
21
|
+
/**
|
|
22
|
+
* Convert a 0-based GraphNode `startLine`/`endLine` into the 1-based line space
|
|
23
|
+
* the CFG/PDG layer uses (`BasicBlock` ids and `functionStartLine` are built
|
|
24
|
+
* from `startPosition.row + 1`).
|
|
25
|
+
*
|
|
26
|
+
* This is the INTERNAL inverse of {@link toZeroBasedLine}, for joining graph
|
|
27
|
+
* rows against that layer. It is NOT the display converter: line numbers on
|
|
28
|
+
* their way out to a human or an LLM go through `mcp/local/line-display.ts`,
|
|
29
|
+
* which is documented as a response-boundary concern and passes `undefined`
|
|
30
|
+
* through. Here the arithmetic is the point, so the input must already be a
|
|
31
|
+
* number — a caller holding a possibly-absent value checks it first, exactly as
|
|
32
|
+
* the `typeof sym.startLine === 'number'` guards in `pdg-impact.ts` do.
|
|
33
|
+
*/
|
|
34
|
+
export const toOneBasedLine = (zeroBasedLine) => zeroBasedLine + 1;
|
|
@@ -6,16 +6,39 @@ import { SupportedLanguages, type ParameterTypeClass } from '../../../_shared/in
|
|
|
6
6
|
*/
|
|
7
7
|
export declare function arityForIdFromInfo(info: MethodInfo): number | undefined;
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* Key for the per-class method map built by `getMethodInfo` (parse-worker).
|
|
10
|
+
*
|
|
11
|
+
* `name:line` is NOT unique. Two callables can start on the same line with the
|
|
12
|
+
* same name whenever one of them is SYNTHESIZED at a position that is not its
|
|
13
|
+
* own declaration: a Java record's implicit component accessor is minted at the
|
|
14
|
+
* component (`record P(int x, int y) { int x(int s) {…} }`), and a C# 12 primary
|
|
15
|
+
* constructor at the owner's `parameter_list`
|
|
16
|
+
* (`class Point(int x, int y) { public Point(int x) : this(x, 0) {} }`). Both are
|
|
17
|
+
* appended LAST by their extractor, so under a `name:line` key the synthesized
|
|
18
|
+
* entry silently destroyed the source-written method's MethodInfo and the two
|
|
19
|
+
* ids collapsed onto one node (#2936).
|
|
20
|
+
*
|
|
21
|
+
* `line` is 1-based and `column` is 0-based — deliberately, because this is a
|
|
22
|
+
* join key rather than a displayed location and both sides derive it from the
|
|
23
|
+
* same node. Do not "normalize" one half; the join is the only contract.
|
|
24
|
+
*
|
|
25
|
+
* The KEY is never parsed by any consumer — `buildCollisionGroups`,
|
|
26
|
+
* `typeTagForId` and `constTagForId` all iterate `.values()`. Keep it that way,
|
|
27
|
+
* and never insert one MethodInfo under two keys: those consumers would then
|
|
28
|
+
* count it twice and turn every singleton into a false collision group.
|
|
13
29
|
*/
|
|
30
|
+
export declare function methodInfoKey(name: string, line: number, column: number): string;
|
|
14
31
|
/**
|
|
15
32
|
* Build collision groups from a method map — groups methods by `name#arity`.
|
|
16
33
|
* Call once per class, then pass to typeTagForId/constTagForId to avoid O(N²) scans.
|
|
17
34
|
*/
|
|
18
35
|
export declare function buildCollisionGroups(methodMap: Map<string, MethodInfo>): Map<string, MethodInfo[]>;
|
|
36
|
+
/**
|
|
37
|
+
* Compute a type-based discriminator suffix for same-arity overloads.
|
|
38
|
+
* Returns `~type1,type2` when the current method collides with another method
|
|
39
|
+
* in the same class that has the same name and arity but different parameter types.
|
|
40
|
+
* Returns `''` when there is no collision or types are unavailable.
|
|
41
|
+
*/
|
|
19
42
|
export declare function typeTagForId(methodMap: Map<string, MethodInfo>, methodName: string, arity: number | undefined, currentInfo: MethodInfo, language?: SupportedLanguages,
|
|
20
43
|
/** Pre-built collision groups from buildCollisionGroups(). Avoids O(N) scan per call. */
|
|
21
44
|
collisionGroups?: Map<string, MethodInfo[]>): string;
|
|
@@ -13,11 +13,30 @@ export function arityForIdFromInfo(info) {
|
|
|
13
13
|
return info.parameters.some((p) => p.isVariadic) ? undefined : info.parameters.length;
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
16
|
+
* Key for the per-class method map built by `getMethodInfo` (parse-worker).
|
|
17
|
+
*
|
|
18
|
+
* `name:line` is NOT unique. Two callables can start on the same line with the
|
|
19
|
+
* same name whenever one of them is SYNTHESIZED at a position that is not its
|
|
20
|
+
* own declaration: a Java record's implicit component accessor is minted at the
|
|
21
|
+
* component (`record P(int x, int y) { int x(int s) {…} }`), and a C# 12 primary
|
|
22
|
+
* constructor at the owner's `parameter_list`
|
|
23
|
+
* (`class Point(int x, int y) { public Point(int x) : this(x, 0) {} }`). Both are
|
|
24
|
+
* appended LAST by their extractor, so under a `name:line` key the synthesized
|
|
25
|
+
* entry silently destroyed the source-written method's MethodInfo and the two
|
|
26
|
+
* ids collapsed onto one node (#2936).
|
|
27
|
+
*
|
|
28
|
+
* `line` is 1-based and `column` is 0-based — deliberately, because this is a
|
|
29
|
+
* join key rather than a displayed location and both sides derive it from the
|
|
30
|
+
* same node. Do not "normalize" one half; the join is the only contract.
|
|
31
|
+
*
|
|
32
|
+
* The KEY is never parsed by any consumer — `buildCollisionGroups`,
|
|
33
|
+
* `typeTagForId` and `constTagForId` all iterate `.values()`. Keep it that way,
|
|
34
|
+
* and never insert one MethodInfo under two keys: those consumers would then
|
|
35
|
+
* count it twice and turn every singleton into a false collision group.
|
|
20
36
|
*/
|
|
37
|
+
export function methodInfoKey(name, line, column) {
|
|
38
|
+
return `${name}:${line}:${column}`;
|
|
39
|
+
}
|
|
21
40
|
/**
|
|
22
41
|
* Build collision groups from a method map — groups methods by `name#arity`.
|
|
23
42
|
* Call once per class, then pass to typeTagForId/constTagForId to avoid O(N²) scans.
|
|
@@ -37,6 +56,12 @@ export function buildCollisionGroups(methodMap) {
|
|
|
37
56
|
}
|
|
38
57
|
return groups;
|
|
39
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Compute a type-based discriminator suffix for same-arity overloads.
|
|
61
|
+
* Returns `~type1,type2` when the current method collides with another method
|
|
62
|
+
* in the same class that has the same name and arity but different parameter types.
|
|
63
|
+
* Returns `''` when there is no collision or types are unavailable.
|
|
64
|
+
*/
|
|
40
65
|
export function typeTagForId(methodMap, methodName, arity, currentInfo, language,
|
|
41
66
|
/** Pre-built collision groups from buildCollisionGroups(). Avoids O(N) scan per call. */
|
|
42
67
|
collisionGroups) {
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synthesize `@reference.receiver-chain` for a call match whose receiver is
|
|
3
|
+
* itself an expression.
|
|
4
|
+
*
|
|
5
|
+
* Shared across every language emitter, and deliberately language-free (AGENTS.md
|
|
6
|
+
* R6): the call gate reads the `@reference.call.*` tag vocabulary, which is
|
|
7
|
+
* shared by every language's `.scm` query, rather than a per-language tag list.
|
|
8
|
+
*
|
|
9
|
+
* Lives in the emitter layer rather than the query because a `.scm` pattern
|
|
10
|
+
* cannot call `extractMixedChain`, and the receiver capture originates in
|
|
11
|
+
* several patterns per language.
|
|
12
|
+
*/
|
|
13
|
+
import type { Capture } from '../../../_shared/index.js';
|
|
14
|
+
import type { SyntaxNode } from './ast-helpers.js';
|
|
15
|
+
/**
|
|
16
|
+
* Add `@reference.receiver-chain` to `grouped` when the match is a call whose
|
|
17
|
+
* receiver decodes to a chain over a nameable base. Mutates `grouped` in place
|
|
18
|
+
* and returns nothing — mirroring how the other synthesized captures are added.
|
|
19
|
+
*
|
|
20
|
+
* Gated on the call tags: without that gate this fires on read, write and JSX
|
|
21
|
+
* receivers too, which pay the AST walk and the persisted bytes for a field no
|
|
22
|
+
* call-site resolver reads.
|
|
23
|
+
*
|
|
24
|
+
* A chain is minted ONLY when the walk reached a nameable base.
|
|
25
|
+
* `extractMixedChain` reports `baseReceiverName: undefined` whenever it stopped
|
|
26
|
+
* early — at `MAX_CHAIN_DEPTH`, or because a step could not be read — and what it
|
|
27
|
+
* collected then is a partial chain missing exactly the head that decides the
|
|
28
|
+
* final type. Encoding that would turn a receiver we cannot type into one we type
|
|
29
|
+
* WRONGLY, so those fall through to the resolver's existing text cascade.
|
|
30
|
+
*/
|
|
31
|
+
export declare function synthesizeReceiverChainCapture(grouped: Record<string, Capture>, receiverNode: SyntaxNode | undefined | null): void;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synthesize `@reference.receiver-chain` for a call match whose receiver is
|
|
3
|
+
* itself an expression.
|
|
4
|
+
*
|
|
5
|
+
* Shared across every language emitter, and deliberately language-free (AGENTS.md
|
|
6
|
+
* R6): the call gate reads the `@reference.call.*` tag vocabulary, which is
|
|
7
|
+
* shared by every language's `.scm` query, rather than a per-language tag list.
|
|
8
|
+
*
|
|
9
|
+
* Lives in the emitter layer rather than the query because a `.scm` pattern
|
|
10
|
+
* cannot call `extractMixedChain`, and the receiver capture originates in
|
|
11
|
+
* several patterns per language.
|
|
12
|
+
*/
|
|
13
|
+
import { syntheticCapture } from './ast-helpers.js';
|
|
14
|
+
import { extractMixedChain } from './call-analysis.js';
|
|
15
|
+
import { encodeReceiverChain } from './receiver-chain-codec.js';
|
|
16
|
+
/** Tag prefix marking a match as a CALL. `@reference.callable` is deliberately
|
|
17
|
+
* excluded by the trailing dot — it marks a callable VALUE, not a call site. */
|
|
18
|
+
const CALL_TAG_PREFIX = '@reference.call.';
|
|
19
|
+
/** Does this match represent a call? */
|
|
20
|
+
function isCallMatch(grouped) {
|
|
21
|
+
for (const tag of Object.keys(grouped)) {
|
|
22
|
+
if (tag.startsWith(CALL_TAG_PREFIX))
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Add `@reference.receiver-chain` to `grouped` when the match is a call whose
|
|
29
|
+
* receiver decodes to a chain over a nameable base. Mutates `grouped` in place
|
|
30
|
+
* and returns nothing — mirroring how the other synthesized captures are added.
|
|
31
|
+
*
|
|
32
|
+
* Gated on the call tags: without that gate this fires on read, write and JSX
|
|
33
|
+
* receivers too, which pay the AST walk and the persisted bytes for a field no
|
|
34
|
+
* call-site resolver reads.
|
|
35
|
+
*
|
|
36
|
+
* A chain is minted ONLY when the walk reached a nameable base.
|
|
37
|
+
* `extractMixedChain` reports `baseReceiverName: undefined` whenever it stopped
|
|
38
|
+
* early — at `MAX_CHAIN_DEPTH`, or because a step could not be read — and what it
|
|
39
|
+
* collected then is a partial chain missing exactly the head that decides the
|
|
40
|
+
* final type. Encoding that would turn a receiver we cannot type into one we type
|
|
41
|
+
* WRONGLY, so those fall through to the resolver's existing text cascade.
|
|
42
|
+
*/
|
|
43
|
+
export function synthesizeReceiverChainCapture(grouped, receiverNode) {
|
|
44
|
+
if (receiverNode === undefined || receiverNode === null)
|
|
45
|
+
return;
|
|
46
|
+
if (grouped['@reference.receiver-chain'] !== undefined)
|
|
47
|
+
return;
|
|
48
|
+
if (!isCallMatch(grouped))
|
|
49
|
+
return;
|
|
50
|
+
const extracted = extractMixedChain(receiverNode);
|
|
51
|
+
if (extracted === undefined || extracted.baseReceiverName === undefined)
|
|
52
|
+
return;
|
|
53
|
+
const encoded = encodeReceiverChain(extracted.baseReceiverName, extracted.chain);
|
|
54
|
+
if (encoded === undefined)
|
|
55
|
+
return;
|
|
56
|
+
grouped['@reference.receiver-chain'] = syntheticCapture('@reference.receiver-chain', receiverNode, encoded);
|
|
57
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Receiver-chain codec.
|
|
3
|
+
*
|
|
4
|
+
* THE one encoder/decoder for the compact receiver chain carried on
|
|
5
|
+
* `ReferenceSite.receiverChain`: the capture emitters write it, the
|
|
6
|
+
* scope-resolution fold reads it, and the durable ParsedFile store validates
|
|
7
|
+
* it. Two hand-rolled copies of a wire format drift — every side MUST import
|
|
8
|
+
* from here. (`taint/path-codec.ts` is the in-repo precedent for both the
|
|
9
|
+
* discipline and the shape.)
|
|
10
|
+
*
|
|
11
|
+
* ## Why a string rather than `MixedChainStep[]`
|
|
12
|
+
*
|
|
13
|
+
* `makeInterningReviver` (parsedfile-store.ts) interns strings, but it
|
|
14
|
+
* re-shares OBJECTS only when they carry `nodeId` + `filePath`. A
|
|
15
|
+
* `MixedChainStep` has neither, so an object encoding leaves every step object
|
|
16
|
+
* and every chain array as a distinct allocation on every warm load, while a
|
|
17
|
+
* string collapses to one interned instance per distinct chain.
|
|
18
|
+
*
|
|
19
|
+
* ## Wire format (version `2`)
|
|
20
|
+
*
|
|
21
|
+
* ```
|
|
22
|
+
* 2|<base>|<step>|<step>…[|~]
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* - One-character version prefix, then the BASE receiver name, then ordered
|
|
26
|
+
* base-first steps.
|
|
27
|
+
* - Each step is a one-character kind sigil followed by the member name:
|
|
28
|
+
* `c` = call (`getUser()`), `f` = field (`address`). The sigil is the first
|
|
29
|
+
* character of the segment and the name follows immediately, so a member
|
|
30
|
+
* whose name begins with `c` or `f` needs no escaping (`ccount` decodes as a
|
|
31
|
+
* call to `count`).
|
|
32
|
+
* - `a` = await and `i` = index are NAME-FREE and encode as a BARE sigil: an
|
|
33
|
+
* awaited call's name already lives on its `c` step, and a subscript's key is
|
|
34
|
+
* a value rather than an identifier the resolver could look up. The decoder
|
|
35
|
+
* rejects any trailing characters after `a` or `i`, which is what keeps an
|
|
36
|
+
* accidentally empty-name `c` or `f` segment refusing instead of decoding as
|
|
37
|
+
* one of these.
|
|
38
|
+
* - A trailing `|~` segment is the TRUNCATION MARKER. NOTE: no current producer
|
|
39
|
+
* mints one. `extractMixedChain` signals "stopped early" by returning
|
|
40
|
+
* `baseReceiverName: undefined`, and the encoder requires a base, so a
|
|
41
|
+
* truncated chain is unrepresentable rather than merely unused. The marker and
|
|
42
|
+
* the decoder/fold guards are kept as a forward-compatible contract: a future
|
|
43
|
+
* producer that CAN report a partial chain must set it, and the fold already
|
|
44
|
+
* refuses such chains. Read the `truncated` field as "reserved", not "live". the chain hit
|
|
45
|
+
* `MAX_CHAIN_DEPTH` and what is encoded is a base-side PREFIX of the real
|
|
46
|
+
* chain. A consumer MUST treat a truncated chain as unusable for typing —
|
|
47
|
+
* the missing tail is exactly what determines the final type — but never as
|
|
48
|
+
* an error.
|
|
49
|
+
*
|
|
50
|
+
* `|` and `~` cannot appear in an identifier in any supported language, so the
|
|
51
|
+
* format needs no escaping and a malformed payload cannot silently decode as a
|
|
52
|
+
* different valid chain.
|
|
53
|
+
*
|
|
54
|
+
* For `svc.getUser().address.save()`, the receiver of `save` encodes as
|
|
55
|
+
* `2|svc|cgetUser|faddress` — 23 bytes. For `(await svc.getUserAsync()).save()`
|
|
56
|
+
* it is `2|svc|cgetUserAsync|a`.
|
|
57
|
+
*/
|
|
58
|
+
import type { MixedChainStep } from '../../../_shared/index.js';
|
|
59
|
+
/** Hard cap on the encoded payload. `MAX_CHAIN_DEPTH` already bounds the step
|
|
60
|
+
* COUNT; this bounds the total bytes so a pathological identifier cannot grow
|
|
61
|
+
* a shard without limit. Generous against real identifiers — the encoding for
|
|
62
|
+
* a full-depth chain of 30-character names is still under 130 bytes. */
|
|
63
|
+
export declare const MAX_RECEIVER_CHAIN_BYTES = 512;
|
|
64
|
+
export interface DecodedReceiverChain {
|
|
65
|
+
readonly baseReceiverName: string;
|
|
66
|
+
readonly steps: readonly MixedChainStep[];
|
|
67
|
+
/** The encoded chain is a base-side prefix — the real chain was longer.
|
|
68
|
+
* Typing off a truncated chain would type off the wrong member. */
|
|
69
|
+
readonly truncated: boolean;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Encode a chain, or `undefined` when it cannot be represented — an empty
|
|
73
|
+
* chain (nothing to fold), an unencodable name, or a payload over the byte
|
|
74
|
+
* cap. Refusing to mint is deliberate: a half-encoded chain would be decoded
|
|
75
|
+
* as a complete-but-different one.
|
|
76
|
+
*/
|
|
77
|
+
export declare function encodeReceiverChain(baseReceiverName: string, steps: readonly MixedChainStep[], options?: {
|
|
78
|
+
readonly truncated?: boolean;
|
|
79
|
+
}): string | undefined;
|
|
80
|
+
/**
|
|
81
|
+
* Decode a payload, or `undefined` when it is not a well-formed chain. Total
|
|
82
|
+
* function: every malformed input returns `undefined` rather than throwing,
|
|
83
|
+
* because the two callers that matter — the extractor and the untrusted store
|
|
84
|
+
* boundary — are both on paths where a throw would cost the whole file.
|
|
85
|
+
*/
|
|
86
|
+
export declare function decodeReceiverChain(value: unknown): DecodedReceiverChain | undefined;
|
|
87
|
+
/** Whether a persisted value is a chain this build can use. The store boundary
|
|
88
|
+
* wants the predicate, not the decoded value. */
|
|
89
|
+
export declare function isValidReceiverChain(value: unknown): value is string;
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Receiver-chain codec.
|
|
3
|
+
*
|
|
4
|
+
* THE one encoder/decoder for the compact receiver chain carried on
|
|
5
|
+
* `ReferenceSite.receiverChain`: the capture emitters write it, the
|
|
6
|
+
* scope-resolution fold reads it, and the durable ParsedFile store validates
|
|
7
|
+
* it. Two hand-rolled copies of a wire format drift — every side MUST import
|
|
8
|
+
* from here. (`taint/path-codec.ts` is the in-repo precedent for both the
|
|
9
|
+
* discipline and the shape.)
|
|
10
|
+
*
|
|
11
|
+
* ## Why a string rather than `MixedChainStep[]`
|
|
12
|
+
*
|
|
13
|
+
* `makeInterningReviver` (parsedfile-store.ts) interns strings, but it
|
|
14
|
+
* re-shares OBJECTS only when they carry `nodeId` + `filePath`. A
|
|
15
|
+
* `MixedChainStep` has neither, so an object encoding leaves every step object
|
|
16
|
+
* and every chain array as a distinct allocation on every warm load, while a
|
|
17
|
+
* string collapses to one interned instance per distinct chain.
|
|
18
|
+
*
|
|
19
|
+
* ## Wire format (version `2`)
|
|
20
|
+
*
|
|
21
|
+
* ```
|
|
22
|
+
* 2|<base>|<step>|<step>…[|~]
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* - One-character version prefix, then the BASE receiver name, then ordered
|
|
26
|
+
* base-first steps.
|
|
27
|
+
* - Each step is a one-character kind sigil followed by the member name:
|
|
28
|
+
* `c` = call (`getUser()`), `f` = field (`address`). The sigil is the first
|
|
29
|
+
* character of the segment and the name follows immediately, so a member
|
|
30
|
+
* whose name begins with `c` or `f` needs no escaping (`ccount` decodes as a
|
|
31
|
+
* call to `count`).
|
|
32
|
+
* - `a` = await and `i` = index are NAME-FREE and encode as a BARE sigil: an
|
|
33
|
+
* awaited call's name already lives on its `c` step, and a subscript's key is
|
|
34
|
+
* a value rather than an identifier the resolver could look up. The decoder
|
|
35
|
+
* rejects any trailing characters after `a` or `i`, which is what keeps an
|
|
36
|
+
* accidentally empty-name `c` or `f` segment refusing instead of decoding as
|
|
37
|
+
* one of these.
|
|
38
|
+
* - A trailing `|~` segment is the TRUNCATION MARKER. NOTE: no current producer
|
|
39
|
+
* mints one. `extractMixedChain` signals "stopped early" by returning
|
|
40
|
+
* `baseReceiverName: undefined`, and the encoder requires a base, so a
|
|
41
|
+
* truncated chain is unrepresentable rather than merely unused. The marker and
|
|
42
|
+
* the decoder/fold guards are kept as a forward-compatible contract: a future
|
|
43
|
+
* producer that CAN report a partial chain must set it, and the fold already
|
|
44
|
+
* refuses such chains. Read the `truncated` field as "reserved", not "live". the chain hit
|
|
45
|
+
* `MAX_CHAIN_DEPTH` and what is encoded is a base-side PREFIX of the real
|
|
46
|
+
* chain. A consumer MUST treat a truncated chain as unusable for typing —
|
|
47
|
+
* the missing tail is exactly what determines the final type — but never as
|
|
48
|
+
* an error.
|
|
49
|
+
*
|
|
50
|
+
* `|` and `~` cannot appear in an identifier in any supported language, so the
|
|
51
|
+
* format needs no escaping and a malformed payload cannot silently decode as a
|
|
52
|
+
* different valid chain.
|
|
53
|
+
*
|
|
54
|
+
* For `svc.getUser().address.save()`, the receiver of `save` encodes as
|
|
55
|
+
* `2|svc|cgetUser|faddress` — 23 bytes. For `(await svc.getUserAsync()).save()`
|
|
56
|
+
* it is `2|svc|cgetUserAsync|a`.
|
|
57
|
+
*/
|
|
58
|
+
import { MAX_CHAIN_DEPTH } from './call-analysis.js';
|
|
59
|
+
/** Wire version. Bumped 1 → 2 when the name-free `await` and `index` step kinds
|
|
60
|
+
* were added: a v1 decoder reading a v2 payload must REFUSE, not decode the
|
|
61
|
+
* prefix it happens to understand, because a chain missing its await or index
|
|
62
|
+
* hop decodes cleanly as a different, shorter chain and would type the receiver
|
|
63
|
+
* against the wrong member. */
|
|
64
|
+
const VERSION = '2';
|
|
65
|
+
const SEPARATOR = '|';
|
|
66
|
+
const TRUNCATED = '~';
|
|
67
|
+
/** Sigil per step kind. ONE table, and both directions derive from it — the
|
|
68
|
+
* decoder used to hand-write `sigil === 'c' ? 'call' : 'field'` and its own
|
|
69
|
+
* await/index comparison, which meant the decoder was exactly the side that
|
|
70
|
+
* could drift from the table claiming to prevent drift. */
|
|
71
|
+
const SIGIL_BY_KIND = {
|
|
72
|
+
call: 'c',
|
|
73
|
+
field: 'f',
|
|
74
|
+
await: 'a',
|
|
75
|
+
index: 'i',
|
|
76
|
+
};
|
|
77
|
+
/** Kinds that encode as a BARE sigil, because they have no member name to
|
|
78
|
+
* carry. Derived from the step union rather than listed twice. */
|
|
79
|
+
const NAME_FREE_KINDS = new Set(['await', 'index']);
|
|
80
|
+
const KIND_BY_SIGIL = new Map(Object.entries(SIGIL_BY_KIND).map(([kind, sigil]) => [sigil, kind]));
|
|
81
|
+
/** Hard cap on the encoded payload. `MAX_CHAIN_DEPTH` already bounds the step
|
|
82
|
+
* COUNT; this bounds the total bytes so a pathological identifier cannot grow
|
|
83
|
+
* a shard without limit. Generous against real identifiers — the encoding for
|
|
84
|
+
* a full-depth chain of 30-character names is still under 130 bytes. */
|
|
85
|
+
export const MAX_RECEIVER_CHAIN_BYTES = 512;
|
|
86
|
+
/** A segment is safe when it contains no structural character. Identifiers in
|
|
87
|
+
* every supported language satisfy this; anything that does not is a payload
|
|
88
|
+
* we refuse to mint rather than escape. */
|
|
89
|
+
function isEncodableSegment(value) {
|
|
90
|
+
// `\s` does NOT match zero-width characters (U+200B ZWS, U+200C/D ZWNJ/ZWJ,
|
|
91
|
+
// U+200E/F LRM/RLM, U+FEFF BOM). An identifier carrying one is a trojan-source
|
|
92
|
+
// vector: it would encode and persist cleanly, then match no binding at
|
|
93
|
+
// resolution time — a silent, unexplained miss. Refuse to mint instead.
|
|
94
|
+
return (value.length > 0 &&
|
|
95
|
+
!value.includes(SEPARATOR) &&
|
|
96
|
+
!value.includes(TRUNCATED) &&
|
|
97
|
+
!/[\s\u200B-\u200F\u2028\u2029\uFEFF]/.test(value));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Encode a chain, or `undefined` when it cannot be represented — an empty
|
|
101
|
+
* chain (nothing to fold), an unencodable name, or a payload over the byte
|
|
102
|
+
* cap. Refusing to mint is deliberate: a half-encoded chain would be decoded
|
|
103
|
+
* as a complete-but-different one.
|
|
104
|
+
*/
|
|
105
|
+
export function encodeReceiverChain(baseReceiverName, steps, options) {
|
|
106
|
+
if (steps.length === 0 || steps.length > MAX_CHAIN_DEPTH)
|
|
107
|
+
return undefined;
|
|
108
|
+
if (!isEncodableSegment(baseReceiverName))
|
|
109
|
+
return undefined;
|
|
110
|
+
const parts = [VERSION, baseReceiverName];
|
|
111
|
+
for (const step of steps) {
|
|
112
|
+
// Name-free kinds encode as a bare sigil. They are exempt from the
|
|
113
|
+
// non-empty-name guard because they HAVE no name to check — not because the
|
|
114
|
+
// guard is relaxed: an empty-name `call` or `field` is still refused below.
|
|
115
|
+
if (NAME_FREE_KINDS.has(step.kind)) {
|
|
116
|
+
parts.push(SIGIL_BY_KIND[step.kind]);
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
if (!isEncodableSegment(step.name))
|
|
120
|
+
return undefined;
|
|
121
|
+
parts.push(`${SIGIL_BY_KIND[step.kind]}${step.name}`);
|
|
122
|
+
}
|
|
123
|
+
if (options?.truncated === true)
|
|
124
|
+
parts.push(TRUNCATED);
|
|
125
|
+
const encoded = parts.join(SEPARATOR);
|
|
126
|
+
return encoded.length > MAX_RECEIVER_CHAIN_BYTES ? undefined : encoded;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Decode a payload, or `undefined` when it is not a well-formed chain. Total
|
|
130
|
+
* function: every malformed input returns `undefined` rather than throwing,
|
|
131
|
+
* because the two callers that matter — the extractor and the untrusted store
|
|
132
|
+
* boundary — are both on paths where a throw would cost the whole file.
|
|
133
|
+
*/
|
|
134
|
+
export function decodeReceiverChain(value) {
|
|
135
|
+
if (typeof value !== 'string')
|
|
136
|
+
return undefined;
|
|
137
|
+
if (value.length === 0 || value.length > MAX_RECEIVER_CHAIN_BYTES)
|
|
138
|
+
return undefined;
|
|
139
|
+
const parts = value.split(SEPARATOR);
|
|
140
|
+
if (parts.length < 3)
|
|
141
|
+
return undefined; // version + base + at least one step
|
|
142
|
+
if (parts[0] !== VERSION)
|
|
143
|
+
return undefined;
|
|
144
|
+
// `parts.length < 3` above already proves this element exists.
|
|
145
|
+
const baseReceiverName = parts[1];
|
|
146
|
+
if (!isEncodableSegment(baseReceiverName))
|
|
147
|
+
return undefined;
|
|
148
|
+
let stepParts = parts.slice(2);
|
|
149
|
+
const truncated = stepParts[stepParts.length - 1] === TRUNCATED;
|
|
150
|
+
if (truncated)
|
|
151
|
+
stepParts = stepParts.slice(0, -1);
|
|
152
|
+
if (stepParts.length === 0 || stepParts.length > MAX_CHAIN_DEPTH)
|
|
153
|
+
return undefined;
|
|
154
|
+
const steps = [];
|
|
155
|
+
for (const part of stepParts) {
|
|
156
|
+
const sigil = part[0];
|
|
157
|
+
const name = part.slice(1);
|
|
158
|
+
// Name-free kinds must be EXACTLY their sigil. Rejecting a trailing tail is
|
|
159
|
+
// what keeps an accidentally empty-name call or field from decoding as one
|
|
160
|
+
// of these: `c` alone stays malformed, it does not become an await.
|
|
161
|
+
const kind = sigil === undefined ? undefined : KIND_BY_SIGIL.get(sigil);
|
|
162
|
+
if (kind === undefined)
|
|
163
|
+
return undefined;
|
|
164
|
+
if (NAME_FREE_KINDS.has(kind)) {
|
|
165
|
+
// Must be EXACTLY the sigil. Rejecting a trailing tail is what keeps an
|
|
166
|
+
// accidentally empty-name call or field from decoding as one of these.
|
|
167
|
+
if (name.length > 0)
|
|
168
|
+
return undefined;
|
|
169
|
+
steps.push({ kind: kind });
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
if (!isEncodableSegment(name))
|
|
173
|
+
return undefined;
|
|
174
|
+
steps.push({ kind: kind, name });
|
|
175
|
+
}
|
|
176
|
+
return { baseReceiverName, steps, truncated };
|
|
177
|
+
}
|
|
178
|
+
/** Whether a persisted value is a chain this build can use. The store boundary
|
|
179
|
+
* wants the predicate, not the decoded value. */
|
|
180
|
+
export function isValidReceiverChain(value) {
|
|
181
|
+
return decodeReceiverChain(value) !== undefined;
|
|
182
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scope-tree walking primitives shared by the providers' `bindingScopeFor`
|
|
3
|
+
* hooks.
|
|
4
|
+
*
|
|
5
|
+
* Language-neutral: parameterised over `ScopeKind` — the shared scope
|
|
6
|
+
* vocabulary — and names no language, so it belongs in the core pipeline
|
|
7
|
+
* rather than in any one provider (AGENTS.md § shared pipeline code).
|
|
8
|
+
*/
|
|
9
|
+
import type { Scope, ScopeId, ScopeTree } from '../../../_shared/index.js';
|
|
10
|
+
/**
|
|
11
|
+
* Walk up the scope chain to find the first scope whose `kind` matches
|
|
12
|
+
* any of `kinds`. Returns the matching scope's id or `null` when no
|
|
13
|
+
* ancestor matches (e.g., a return type binding emitted outside any
|
|
14
|
+
* Module scope — shouldn't happen in well-formed input).
|
|
15
|
+
*
|
|
16
|
+
* Every provider that hoists a binding out of the scope it was captured in
|
|
17
|
+
* needs exactly this walk: a field typed from a constructor call in a method
|
|
18
|
+
* body belongs on the enclosing Class, a `var` on the enclosing Function or
|
|
19
|
+
* Module, a method return type on the Module. Which `kind` to stop at is the
|
|
20
|
+
* only per-language part, and that is the parameter.
|
|
21
|
+
*/
|
|
22
|
+
export declare function walkToScope(from: Scope, tree: ScopeTree, ...kinds: readonly Scope['kind'][]): ScopeId | null;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scope-tree walking primitives shared by the providers' `bindingScopeFor`
|
|
3
|
+
* hooks.
|
|
4
|
+
*
|
|
5
|
+
* Language-neutral: parameterised over `ScopeKind` — the shared scope
|
|
6
|
+
* vocabulary — and names no language, so it belongs in the core pipeline
|
|
7
|
+
* rather than in any one provider (AGENTS.md § shared pipeline code).
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Walk up the scope chain to find the first scope whose `kind` matches
|
|
11
|
+
* any of `kinds`. Returns the matching scope's id or `null` when no
|
|
12
|
+
* ancestor matches (e.g., a return type binding emitted outside any
|
|
13
|
+
* Module scope — shouldn't happen in well-formed input).
|
|
14
|
+
*
|
|
15
|
+
* Every provider that hoists a binding out of the scope it was captured in
|
|
16
|
+
* needs exactly this walk: a field typed from a constructor call in a method
|
|
17
|
+
* body belongs on the enclosing Class, a `var` on the enclosing Function or
|
|
18
|
+
* Module, a method return type on the Module. Which `kind` to stop at is the
|
|
19
|
+
* only per-language part, and that is the parameter.
|
|
20
|
+
*/
|
|
21
|
+
export function walkToScope(from, tree, ...kinds) {
|
|
22
|
+
let cur = from;
|
|
23
|
+
const kindSet = new Set(kinds);
|
|
24
|
+
while (cur !== undefined) {
|
|
25
|
+
if (kindSet.has(cur.kind))
|
|
26
|
+
return cur.id;
|
|
27
|
+
const parentId = cur.parent ?? null;
|
|
28
|
+
if (parentId === null)
|
|
29
|
+
break;
|
|
30
|
+
cur = tree.getScope(parentId);
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { TypeRef } from '../../../_shared/index.js';
|
|
1
2
|
/**
|
|
2
3
|
* Parse top-level generic/template arguments from a type-like string.
|
|
3
4
|
*
|
|
@@ -7,6 +8,43 @@
|
|
|
7
8
|
* - `List<T*>` -> ['T*']
|
|
8
9
|
*/
|
|
9
10
|
export declare function extractTemplateArguments(text: string): string[] | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* The type ARGUMENTS a reference applies to its base, read from the reference's
|
|
13
|
+
* own source spelling: `IValidator<string>` → `['string']`, `Base[User]` →
|
|
14
|
+
* `['User']`, `Repository` → `undefined`.
|
|
15
|
+
*
|
|
16
|
+
* The inverse direction of {@link erasedTypeApplication}, which rebuilds the
|
|
17
|
+
* `Base<Args>` SPELLING so a lookup can stay grounded; this returns the
|
|
18
|
+
* ARGUMENTS so a consumer that has already resolved the base can ask which
|
|
19
|
+
* instantiation it was (#2912).
|
|
20
|
+
*
|
|
21
|
+
* Both bracket families count, because both spell type application in a
|
|
22
|
+
* heritage position — `class C : IValidator<string>` and Go's `struct { Base[int] }`
|
|
23
|
+
* / Python's `class C(Base[User])`. What is NOT accepted is anything that fails
|
|
24
|
+
* to be exactly one balanced, non-empty list closing at the very end:
|
|
25
|
+
*
|
|
26
|
+
* - `Base(args)` — a C# primary-constructor base, not an application.
|
|
27
|
+
* - `Foo[]` — an empty list is an array spelling, not arguments.
|
|
28
|
+
* - `(Int) -> Unit` — a Kotlin function type, whose `>` closes nothing.
|
|
29
|
+
*
|
|
30
|
+
* Declining is the safe outcome for all of them: absence reads as "unknown"
|
|
31
|
+
* and every consumer of this fails open on it.
|
|
32
|
+
*/
|
|
33
|
+
export declare function typeApplicationArguments(spelling: string): string[] | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Index of the `(` that matches the trailing `)` of `text`, or -1 when the text
|
|
36
|
+
* does not end in a balanced call suffix.
|
|
37
|
+
*
|
|
38
|
+
* Shared for the same reason as {@link balancedTailList}: this scan is fiddly
|
|
39
|
+
* enough that two copies would be free to disagree, and it has two unrelated
|
|
40
|
+
* readers — splitting a receiver chain at its call, and stripping a base's
|
|
41
|
+
* constructor invocation off a heritage spelling.
|
|
42
|
+
*/
|
|
43
|
+
export declare function matchingOpenParen(text: string): number;
|
|
44
|
+
/** Drop a balanced `(...)` that ENDS the text — the argument list of a base's
|
|
45
|
+
* constructor invocation, as in `record R : Base<int>(x)` or Kotlin
|
|
46
|
+
* `class C : Bar<Int>()`. Anything else is returned unchanged. */
|
|
47
|
+
export declare function stripTrailingCallSuffix(text: string): string;
|
|
10
48
|
export declare function stripTemplateArguments(text: string): string;
|
|
11
49
|
export declare function templateArgumentsIdTag(templateArguments?: readonly string[]): string;
|
|
12
50
|
/**
|
|
@@ -28,3 +66,61 @@ export declare function constraintsHash(jsonText: string): string;
|
|
|
28
66
|
* Returns empty string when the payload is absent so callers can
|
|
29
67
|
* string-concatenate unconditionally. */
|
|
30
68
|
export declare function templateConstraintsIdTag(payload: unknown): string;
|
|
69
|
+
/**
|
|
70
|
+
* The type APPLICATION a type reference was reduced from — `Mapped[User]`,
|
|
71
|
+
* `Repo<User>` — restored to the `Base<Args>` spelling, or `undefined` when
|
|
72
|
+
* this reference is not that shape.
|
|
73
|
+
*
|
|
74
|
+
* ── WHY A LOOKUP MUST NOT BE HANDED THE REDUCED NAME ─────────────────────────
|
|
75
|
+
*
|
|
76
|
+
* `rawName` is post-normalization (see its docstring on `TypeRef`), and several
|
|
77
|
+
* providers reduce a type application to its BASE NAME at capture time —
|
|
78
|
+
* `Mapped[User]` → `Mapped`, `Repo<User>` → `Repo`. That erasure is what lets
|
|
79
|
+
* one declaration answer for every instantiation of it, and it is also the
|
|
80
|
+
* widest step any lookup in this pipeline takes: reaching a declaration by NAME
|
|
81
|
+
* ALONE binds whatever the workspace happens to declare under that name. A
|
|
82
|
+
* third-party `Mapped[User]` beside an unrelated workspace `class Mapped` is
|
|
83
|
+
* then a confident WRONG edge, which is strictly worse than the missing one it
|
|
84
|
+
* replaced.
|
|
85
|
+
*
|
|
86
|
+
* `resolveClassBindingForName` already owns the rule for this — it admits an
|
|
87
|
+
* erased base name only on grounds that connect the site to the declaration
|
|
88
|
+
* (the scope chain binds the name; the declaration is in the same file; the
|
|
89
|
+
* index proves the name is a template family; the file has no cross-file class
|
|
90
|
+
* channel to be absent from). But that route is entered on the SPELLING: a name
|
|
91
|
+
* carrying its arguments takes it, a name already reduced to its base cannot,
|
|
92
|
+
* because nothing distinguishes it from an ordinary class name. So a provider
|
|
93
|
+
* that reduces at capture time sends its receivers down the ungrounded route by
|
|
94
|
+
* construction, whatever the shared lookup does.
|
|
95
|
+
*
|
|
96
|
+
* Restoring the application from `declaredSpelling` — which keeps the
|
|
97
|
+
* annotation exactly as written whenever normalization changed it — puts those
|
|
98
|
+
* receivers back on the grounded route. Restoring rather than reimplementing
|
|
99
|
+
* the grounding here is deliberate: the rule is one rule, and a second copy of
|
|
100
|
+
* it in this file would be free to drift from the one in `scope/walkers.ts`
|
|
101
|
+
* that every other caller uses. (Its predicate is not exported; the exported
|
|
102
|
+
* entry point is the spelling.)
|
|
103
|
+
*
|
|
104
|
+
* ── WHAT COUNTS AS AN APPLICATION ────────────────────────────────────────────
|
|
105
|
+
*
|
|
106
|
+
* `rawName` must be the base the spelling APPLIES arguments to, and the
|
|
107
|
+
* argument list must be the whole of the rest of the spelling — one list,
|
|
108
|
+
* balanced, non-empty. Everything else is left exactly as it resolves today,
|
|
109
|
+
* because a transform that is not certain is a worse failure than no transform:
|
|
110
|
+
*
|
|
111
|
+
* - `User[]` — an array whose ELEMENT the capture layer already reduced to
|
|
112
|
+
* `User`. The position is the element, not an application of `User`, and
|
|
113
|
+
* the empty list is what says so.
|
|
114
|
+
* - `User[][]` — likewise, and it closes its first list before the end.
|
|
115
|
+
* - `std::vector<Item>` reduced to `vector<Item>` — the spelling does not
|
|
116
|
+
* start with the reduced name, so nothing was erased that this can restore.
|
|
117
|
+
* - `Repo<User>?`, `Map<String, (Int) -> Unit>` — trailing decoration and an
|
|
118
|
+
* argument list that does not close where it must. Declining leaves the
|
|
119
|
+
* pre-existing behaviour, which is what "no transform" has to mean.
|
|
120
|
+
*
|
|
121
|
+
* The rebuilt spelling uses ANGLE brackets because that is the spelling
|
|
122
|
+
* `resolveClassBindingForName`'s contract is written against; the punctuation a
|
|
123
|
+
* language spells type application with is not otherwise meaningful here, and
|
|
124
|
+
* nothing downstream reads this string except that lookup.
|
|
125
|
+
*/
|
|
126
|
+
export declare function erasedTypeApplication(typeRef: TypeRef): string | undefined;
|