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
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "Which files live DIRECTLY inside a directory whose path ends with
|
|
3
|
+
* `<pkgPath>`?" — the query Go's package resolution and C#'s namespace-directory
|
|
4
|
+
* fallback both answered with a full `allFilePaths` scan per import.
|
|
5
|
+
*
|
|
6
|
+
* Both scans ran the same predicate: normalize to forward slashes, apply the
|
|
7
|
+
* language's extension filter, find the FIRST `'/' + pkgPath + '/'` occurrence,
|
|
8
|
+
* and keep the file only if nothing after that occurrence contains a slash.
|
|
9
|
+
*
|
|
10
|
+
* That predicate depends only on the file's DIRECTORY, so it can be answered
|
|
11
|
+
* from an index built once per file set:
|
|
12
|
+
*
|
|
13
|
+
* let D = '/' + <normalized dir of the file> + '/'
|
|
14
|
+
* let P = '/' + pkgPath + '/'
|
|
15
|
+
* match ⟺ D.endsWith(P)
|
|
16
|
+
*
|
|
17
|
+
* It used to say one more thing, and #2881 removed it:
|
|
18
|
+
*
|
|
19
|
+
* match ⟺ D.length >= P.length && D.indexOf(P) === D.length - P.length
|
|
20
|
+
*
|
|
21
|
+
* — i.e. `D` ends with `P` AND that trailing occurrence is the FIRST one, so
|
|
22
|
+
* `a/pkg/b/pkg/x.go` did NOT answer `pkg`. The second half was never a rule
|
|
23
|
+
* anyone chose. It is what the pre-index per-import scan happened to compute
|
|
24
|
+
* (it called `indexOf`, then checked that nothing after the match contained a
|
|
25
|
+
* slash), and the index was built to reproduce that scan byte for byte. It
|
|
26
|
+
* dropped exactly the repositories that nest a directory name inside itself:
|
|
27
|
+
* `internal/…/internal`, `Models/…/Models`, and the reported shape
|
|
28
|
+
* `data/src/main/kotlin/com/example/data/Repo.kt`, where `import data.helper`
|
|
29
|
+
* resolved to null. Kotlin was fixed first, in its own `dirChildren`
|
|
30
|
+
* (`languages/kotlin/import-target.ts`); this index, the C# csproj index and
|
|
31
|
+
* the legacy `go.ts` scan followed.
|
|
32
|
+
*
|
|
33
|
+
* The strongest evidence that the rule was accidental is that a sixth
|
|
34
|
+
* implementation of the same question never had it. `import-resolvers/jvm.ts`
|
|
35
|
+
* answers "files directly inside a directory ending with <packagePath>" for
|
|
36
|
+
* Java and Kotlin wildcard imports, and has used `lastIndexOf` since #488.
|
|
37
|
+
*
|
|
38
|
+
* That is evidence about how the predicate was WRITTEN, not about live
|
|
39
|
+
* behaviour, and the distinction matters enough to spell out. `jvm.ts` is
|
|
40
|
+
* reached only through `provider.importResolver`, which `languages/java.ts` and
|
|
41
|
+
* `languages/kotlin.ts` do wire — but that field currently has no production
|
|
42
|
+
* READER. Its only reader anywhere is `import-target-adapter.ts`, whose own
|
|
43
|
+
* docblock says it is "threaded through `finalizeScopeModel`"; nothing threads
|
|
44
|
+
* it, and neither that module nor its two exports
|
|
45
|
+
* (`buildImportTargetWorkspace`, `resolveImportTargetAcrossLanguages`) is
|
|
46
|
+
* referenced outside its own unit test. So `jvm.ts`'s `resolveJvmWildcard` and
|
|
47
|
+
* `import-resolvers/go.ts`'s `resolveGoPackage` are dormant, while THIS index,
|
|
48
|
+
* `csharp.ts`'s `resolveCSharpImportInternal` and Kotlin's `dirChildren` are
|
|
49
|
+
* the ones that run. Whether those two dormant resolvers should be deleted or
|
|
50
|
+
* actually wired up is an open question and wants its own issue; it is not
|
|
51
|
+
* settled here.
|
|
52
|
+
*
|
|
53
|
+
* The argument survives that correction intact, because it never needed the
|
|
54
|
+
* resolvers to be live: an independent implementation of the same question,
|
|
55
|
+
* written without reference to the pre-index scan, reached for `lastIndexOf`.
|
|
56
|
+
* The extra clause was never a rule anyone chose. All six spellings now agree.
|
|
57
|
+
*
|
|
58
|
+
* The length guard the `indexOf` form needed is gone with it: `endsWith` is
|
|
59
|
+
* false for a shorter `D` instead of comparing -1 to -1.
|
|
60
|
+
*
|
|
61
|
+
* Candidates are narrowed by the directory's LAST segment rather than by
|
|
62
|
+
* indexing every directory suffix: a suffix map costs O(files × depth) entries,
|
|
63
|
+
* which is exactly the memory this codebase runs out of at kernel scale
|
|
64
|
+
* (#2649), while the last-segment bucket is O(directories) and is a superset of
|
|
65
|
+
* the matches (`D` ends with `P` ⟹ the dir's last segment is `pkgPath`'s last
|
|
66
|
+
* segment).
|
|
67
|
+
*
|
|
68
|
+
* Results keep Set-iteration order via the recorded `ord`, because the callers'
|
|
69
|
+
* scans emitted in that order and Go returns the whole list as the import
|
|
70
|
+
* target (one `ImportEdge` per file).
|
|
71
|
+
*
|
|
72
|
+
* Each language owns its own `WeakMap` memo and `accept` predicate, so the
|
|
73
|
+
* STORED index holds only that language's files — the build pass itself still
|
|
74
|
+
* walks every path it is handed once per language. That is not a polyglot tax
|
|
75
|
+
* in practice: `scope-resolution/pipeline/run.ts:673` rebuilds `allFilePaths`
|
|
76
|
+
* from the provider's own `parsedFiles`, so the set already contains only that
|
|
77
|
+
* language's files.
|
|
78
|
+
*/
|
|
79
|
+
interface IndexedFile {
|
|
80
|
+
readonly raw: string;
|
|
81
|
+
/**
|
|
82
|
+
* Position in `allFilePaths` iteration order. Still load-bearing:
|
|
83
|
+
* `filesDirectlyInPkgDir` sorts on it to interleave several directories back
|
|
84
|
+
* into the order the original single-pass scan emitted.
|
|
85
|
+
*/
|
|
86
|
+
readonly ord: number;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Deeply read-only on purpose. The memo hoist turned what used to be per-call
|
|
90
|
+
* scratch into state shared by every import in a run, and `readonly` on the
|
|
91
|
+
* PROPERTY still lets a caller do `idx.rootFiles.sort()` in place. Typing the
|
|
92
|
+
* containers as read-only makes the copy-before-mutating rule compile-enforced
|
|
93
|
+
* instead of comment-enforced — but `readonly` is erased at runtime and is not
|
|
94
|
+
* hard to widen back (the sibling Kotlin index documents `Array.isArray`'s
|
|
95
|
+
* `arg is any[]` predicate doing exactly that), so the one container callers
|
|
96
|
+
* read directly is handed out through `sortedRootFiles` rather than raw.
|
|
97
|
+
*/
|
|
98
|
+
export interface PackageDirIndex {
|
|
99
|
+
/** Last path segment of a directory → every normalized directory ending in it. */
|
|
100
|
+
readonly dirsByLastSegment: ReadonlyMap<string, readonly string[]>;
|
|
101
|
+
/** Normalized directory → the accepted files directly inside it, in Set order. */
|
|
102
|
+
readonly filesByDir: ReadonlyMap<string, readonly IndexedFile[]>;
|
|
103
|
+
/** Accepted files with no directory at all, in Set order. */
|
|
104
|
+
readonly rootFiles: readonly string[];
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* @param accept Runs on the normalized (forward-slash) path; return `false` to
|
|
108
|
+
* leave the file out of the index entirely.
|
|
109
|
+
*/
|
|
110
|
+
export declare function buildPackageDirIndex(allFilePaths: ReadonlySet<string>, accept: (normalized: string) => boolean): PackageDirIndex;
|
|
111
|
+
/**
|
|
112
|
+
* Every accepted file directly inside a directory ending with `pkgPath`, in
|
|
113
|
+
* `allFilePaths` iteration order.
|
|
114
|
+
*/
|
|
115
|
+
export declare function filesDirectlyInPkgDir(index: PackageDirIndex, pkgPath: string): string[];
|
|
116
|
+
/** Root-package files in sorted order. Copies: the index array is shared by
|
|
117
|
+
* every import in the run and the result leaves as an edge target list. */
|
|
118
|
+
export declare function sortedRootFiles(index: PackageDirIndex): string[];
|
|
119
|
+
/**
|
|
120
|
+
* The FIRST accepted file (in `allFilePaths` iteration order) directly inside a
|
|
121
|
+
* directory ending with `pkgPath`, or `null`.
|
|
122
|
+
*/
|
|
123
|
+
export declare function firstFileDirectlyInPkgDir(index: PackageDirIndex, pkgPath: string): string | null;
|
|
124
|
+
export {};
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "Which files live DIRECTLY inside a directory whose path ends with
|
|
3
|
+
* `<pkgPath>`?" — the query Go's package resolution and C#'s namespace-directory
|
|
4
|
+
* fallback both answered with a full `allFilePaths` scan per import.
|
|
5
|
+
*
|
|
6
|
+
* Both scans ran the same predicate: normalize to forward slashes, apply the
|
|
7
|
+
* language's extension filter, find the FIRST `'/' + pkgPath + '/'` occurrence,
|
|
8
|
+
* and keep the file only if nothing after that occurrence contains a slash.
|
|
9
|
+
*
|
|
10
|
+
* That predicate depends only on the file's DIRECTORY, so it can be answered
|
|
11
|
+
* from an index built once per file set:
|
|
12
|
+
*
|
|
13
|
+
* let D = '/' + <normalized dir of the file> + '/'
|
|
14
|
+
* let P = '/' + pkgPath + '/'
|
|
15
|
+
* match ⟺ D.endsWith(P)
|
|
16
|
+
*
|
|
17
|
+
* It used to say one more thing, and #2881 removed it:
|
|
18
|
+
*
|
|
19
|
+
* match ⟺ D.length >= P.length && D.indexOf(P) === D.length - P.length
|
|
20
|
+
*
|
|
21
|
+
* — i.e. `D` ends with `P` AND that trailing occurrence is the FIRST one, so
|
|
22
|
+
* `a/pkg/b/pkg/x.go` did NOT answer `pkg`. The second half was never a rule
|
|
23
|
+
* anyone chose. It is what the pre-index per-import scan happened to compute
|
|
24
|
+
* (it called `indexOf`, then checked that nothing after the match contained a
|
|
25
|
+
* slash), and the index was built to reproduce that scan byte for byte. It
|
|
26
|
+
* dropped exactly the repositories that nest a directory name inside itself:
|
|
27
|
+
* `internal/…/internal`, `Models/…/Models`, and the reported shape
|
|
28
|
+
* `data/src/main/kotlin/com/example/data/Repo.kt`, where `import data.helper`
|
|
29
|
+
* resolved to null. Kotlin was fixed first, in its own `dirChildren`
|
|
30
|
+
* (`languages/kotlin/import-target.ts`); this index, the C# csproj index and
|
|
31
|
+
* the legacy `go.ts` scan followed.
|
|
32
|
+
*
|
|
33
|
+
* The strongest evidence that the rule was accidental is that a sixth
|
|
34
|
+
* implementation of the same question never had it. `import-resolvers/jvm.ts`
|
|
35
|
+
* answers "files directly inside a directory ending with <packagePath>" for
|
|
36
|
+
* Java and Kotlin wildcard imports, and has used `lastIndexOf` since #488.
|
|
37
|
+
*
|
|
38
|
+
* That is evidence about how the predicate was WRITTEN, not about live
|
|
39
|
+
* behaviour, and the distinction matters enough to spell out. `jvm.ts` is
|
|
40
|
+
* reached only through `provider.importResolver`, which `languages/java.ts` and
|
|
41
|
+
* `languages/kotlin.ts` do wire — but that field currently has no production
|
|
42
|
+
* READER. Its only reader anywhere is `import-target-adapter.ts`, whose own
|
|
43
|
+
* docblock says it is "threaded through `finalizeScopeModel`"; nothing threads
|
|
44
|
+
* it, and neither that module nor its two exports
|
|
45
|
+
* (`buildImportTargetWorkspace`, `resolveImportTargetAcrossLanguages`) is
|
|
46
|
+
* referenced outside its own unit test. So `jvm.ts`'s `resolveJvmWildcard` and
|
|
47
|
+
* `import-resolvers/go.ts`'s `resolveGoPackage` are dormant, while THIS index,
|
|
48
|
+
* `csharp.ts`'s `resolveCSharpImportInternal` and Kotlin's `dirChildren` are
|
|
49
|
+
* the ones that run. Whether those two dormant resolvers should be deleted or
|
|
50
|
+
* actually wired up is an open question and wants its own issue; it is not
|
|
51
|
+
* settled here.
|
|
52
|
+
*
|
|
53
|
+
* The argument survives that correction intact, because it never needed the
|
|
54
|
+
* resolvers to be live: an independent implementation of the same question,
|
|
55
|
+
* written without reference to the pre-index scan, reached for `lastIndexOf`.
|
|
56
|
+
* The extra clause was never a rule anyone chose. All six spellings now agree.
|
|
57
|
+
*
|
|
58
|
+
* The length guard the `indexOf` form needed is gone with it: `endsWith` is
|
|
59
|
+
* false for a shorter `D` instead of comparing -1 to -1.
|
|
60
|
+
*
|
|
61
|
+
* Candidates are narrowed by the directory's LAST segment rather than by
|
|
62
|
+
* indexing every directory suffix: a suffix map costs O(files × depth) entries,
|
|
63
|
+
* which is exactly the memory this codebase runs out of at kernel scale
|
|
64
|
+
* (#2649), while the last-segment bucket is O(directories) and is a superset of
|
|
65
|
+
* the matches (`D` ends with `P` ⟹ the dir's last segment is `pkgPath`'s last
|
|
66
|
+
* segment).
|
|
67
|
+
*
|
|
68
|
+
* Results keep Set-iteration order via the recorded `ord`, because the callers'
|
|
69
|
+
* scans emitted in that order and Go returns the whole list as the import
|
|
70
|
+
* target (one `ImportEdge` per file).
|
|
71
|
+
*
|
|
72
|
+
* Each language owns its own `WeakMap` memo and `accept` predicate, so the
|
|
73
|
+
* STORED index holds only that language's files — the build pass itself still
|
|
74
|
+
* walks every path it is handed once per language. That is not a polyglot tax
|
|
75
|
+
* in practice: `scope-resolution/pipeline/run.ts:673` rebuilds `allFilePaths`
|
|
76
|
+
* from the provider's own `parsedFiles`, so the set already contains only that
|
|
77
|
+
* language's files.
|
|
78
|
+
*/
|
|
79
|
+
/**
|
|
80
|
+
* @param accept Runs on the normalized (forward-slash) path; return `false` to
|
|
81
|
+
* leave the file out of the index entirely.
|
|
82
|
+
*/
|
|
83
|
+
export function buildPackageDirIndex(allFilePaths, accept) {
|
|
84
|
+
const dirsByLastSegment = new Map();
|
|
85
|
+
const filesByDir = new Map();
|
|
86
|
+
const rootFiles = [];
|
|
87
|
+
let ord = 0;
|
|
88
|
+
for (const raw of allFilePaths) {
|
|
89
|
+
const ownOrd = ord++;
|
|
90
|
+
const normalized = raw.replace(/\\/g, '/');
|
|
91
|
+
if (!accept(normalized))
|
|
92
|
+
continue;
|
|
93
|
+
const lastSlash = normalized.lastIndexOf('/');
|
|
94
|
+
if (lastSlash < 0) {
|
|
95
|
+
// No directory: `'/x.go'.indexOf('/pkg/')` can never hit, so a root file
|
|
96
|
+
// answers no `pkgPath` query. Kept separately for Go's root-package leg.
|
|
97
|
+
rootFiles.push(raw);
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
const dir = normalized.slice(0, lastSlash);
|
|
101
|
+
let files = filesByDir.get(dir);
|
|
102
|
+
if (files === undefined) {
|
|
103
|
+
files = [];
|
|
104
|
+
filesByDir.set(dir, files);
|
|
105
|
+
const lastSegment = dir.slice(dir.lastIndexOf('/') + 1);
|
|
106
|
+
let dirs = dirsByLastSegment.get(lastSegment);
|
|
107
|
+
if (dirs === undefined) {
|
|
108
|
+
dirs = [];
|
|
109
|
+
dirsByLastSegment.set(lastSegment, dirs);
|
|
110
|
+
}
|
|
111
|
+
dirs.push(dir);
|
|
112
|
+
}
|
|
113
|
+
files.push({ raw, ord: ownOrd });
|
|
114
|
+
}
|
|
115
|
+
return { dirsByLastSegment, filesByDir, rootFiles };
|
|
116
|
+
}
|
|
117
|
+
/** Every indexed directory matching `pkgPath`, in first-seen order. */
|
|
118
|
+
function* matchingDirs(index, pkgPath) {
|
|
119
|
+
const lastSegment = pkgPath.slice(pkgPath.lastIndexOf('/') + 1);
|
|
120
|
+
const dirs = index.dirsByLastSegment.get(lastSegment);
|
|
121
|
+
if (dirs === undefined)
|
|
122
|
+
return;
|
|
123
|
+
// `('/' + D + '/').endsWith('/' + P + '/')` ⟺ `D === P || D.endsWith('/' + P)`,
|
|
124
|
+
// which is the same predicate without the two strings per candidate the
|
|
125
|
+
// wrapped form built: 32.58 ns → 8.22 ns per candidate, 3.96x, over 2001
|
|
126
|
+
// directories of which 668 match (Node 22.18.0, best-of-80 after 300 warmup
|
|
127
|
+
// passes). Verified exhaustively rather than argued, over every pair of
|
|
128
|
+
// strings up to length 5 over `{a, b, /}` including the empty string —
|
|
129
|
+
// 132 496 pairs, 911 of them matching: 0 divergences. The match count is
|
|
130
|
+
// reported beside the timing on purpose: two predicates that agree on `false`
|
|
131
|
+
// everywhere also show 0 divergences.
|
|
132
|
+
//
|
|
133
|
+
// Worth the care because this loop is genuinely hot: Go's GOPATH fallback
|
|
134
|
+
// calls `matchingDirs` once per import-path segment over the bucket holding
|
|
135
|
+
// EVERY directory that shares the queried last segment (every service's
|
|
136
|
+
// `internal`). At 1000 services × 100 000 unresolved imports × 4 segments
|
|
137
|
+
// that is ~34.6 s against ~14.0 s, and ~0.5 GB of transient garbage not
|
|
138
|
+
// allocated.
|
|
139
|
+
//
|
|
140
|
+
// There is nothing further to win by reaching for the two-argument
|
|
141
|
+
// `endsWith(search, endPosition)` or for `startsWith(needle, pos)`: on the
|
|
142
|
+
// same data all three land together — 8.15 ns one-argument, 8.55 ns
|
|
143
|
+
// two-argument, 8.54 ns `startsWith` — and against the unwrapped string the
|
|
144
|
+
// two-argument form is character-for-character the same test. A "the 2-arg
|
|
145
|
+
// overload leaves V8's fast path, 20x" claim was measured during review and
|
|
146
|
+
// did NOT reproduce here or in two independent re-runs; its 1.87 ns baseline
|
|
147
|
+
// was a one-argument call whose needle failed the length/last-char precheck
|
|
148
|
+
// and early-exited without comparing. Recorded because the retraction is the
|
|
149
|
+
// useful part: compare forms that do the same work and report the hit count.
|
|
150
|
+
//
|
|
151
|
+
// The equality arm also carries the length guard the `indexOf` form needed: a
|
|
152
|
+
// shorter `dir` is simply false, where `indexOf` returned -1 and
|
|
153
|
+
// `haystack.length - needle.length` could also be -1 and report a bogus match.
|
|
154
|
+
const suffix = `/${pkgPath}`;
|
|
155
|
+
for (const dir of dirs) {
|
|
156
|
+
if (dir !== pkgPath && !dir.endsWith(suffix))
|
|
157
|
+
continue;
|
|
158
|
+
const files = index.filesByDir.get(dir);
|
|
159
|
+
if (files !== undefined)
|
|
160
|
+
yield files;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Every accepted file directly inside a directory ending with `pkgPath`, in
|
|
165
|
+
* `allFilePaths` iteration order.
|
|
166
|
+
*/
|
|
167
|
+
export function filesDirectlyInPkgDir(index, pkgPath) {
|
|
168
|
+
// The first bucket is held by reference, not copied into an accumulator: one
|
|
169
|
+
// matching directory is the overwhelmingly common case (every unique-leaf
|
|
170
|
+
// call, and any query whose package path has more than one segment), and it
|
|
171
|
+
// then reaches the `map` with zero intermediate copies.
|
|
172
|
+
//
|
|
173
|
+
// A second directory promotes that reference to a real accumulator, which is
|
|
174
|
+
// appended to once per file from then on — never re-spread per directory,
|
|
175
|
+
// because that costs O(files × dirs²) copies, which a monorepo carrying the
|
|
176
|
+
// same package directory under many services (`svcN/internal/models`, queried
|
|
177
|
+
// by Go's two-segment GOPATH tail) would pay on every import.
|
|
178
|
+
let first = null;
|
|
179
|
+
let merged = null;
|
|
180
|
+
for (const files of matchingDirs(index, pkgPath)) {
|
|
181
|
+
if (first === null) {
|
|
182
|
+
first = files;
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
if (merged === null)
|
|
186
|
+
merged = [...first];
|
|
187
|
+
for (const f of files)
|
|
188
|
+
merged.push(f);
|
|
189
|
+
}
|
|
190
|
+
if (first === null)
|
|
191
|
+
return [];
|
|
192
|
+
// One directory is already in Set order; several interleave and need merging
|
|
193
|
+
// back onto the order the original single-pass scan emitted.
|
|
194
|
+
if (merged === null)
|
|
195
|
+
return first.map((f) => f.raw);
|
|
196
|
+
merged.sort((a, b) => a.ord - b.ord);
|
|
197
|
+
return merged.map((f) => f.raw);
|
|
198
|
+
}
|
|
199
|
+
/** Root-package files in sorted order. Copies: the index array is shared by
|
|
200
|
+
* every import in the run and the result leaves as an edge target list. */
|
|
201
|
+
export function sortedRootFiles(index) {
|
|
202
|
+
return [...index.rootFiles].sort();
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* The FIRST accepted file (in `allFilePaths` iteration order) directly inside a
|
|
206
|
+
* directory ending with `pkgPath`, or `null`.
|
|
207
|
+
*/
|
|
208
|
+
export function firstFileDirectlyInPkgDir(index, pkgPath) {
|
|
209
|
+
// Returning the FIRST match is already the minimum-`ord` answer, and it is
|
|
210
|
+
// the build loop that makes it so: `buildPackageDirIndex` appends a directory
|
|
211
|
+
// to its last-segment bucket at the moment it accepts that directory's first
|
|
212
|
+
// file, so bucket order IS ascending first-file-`ord` order. Comparing `ord`
|
|
213
|
+
// across the remaining directories can never improve on the first hit
|
|
214
|
+
// (differentially verified: 0 divergences). Change that append point — buffer
|
|
215
|
+
// the directories, sort them, populate `filesByDir` before `dirsByLastSegment`
|
|
216
|
+
// — and this early return silently starts answering with the wrong file.
|
|
217
|
+
for (const files of matchingDirs(index, pkgPath)) {
|
|
218
|
+
const first = files[0];
|
|
219
|
+
if (first !== undefined)
|
|
220
|
+
return first.raw;
|
|
221
|
+
}
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type SuffixIndex } from './utils.js';
|
|
2
|
+
/**
|
|
3
|
+
* Everything the standard `resolveTsTarget` path derives from one workspace
|
|
4
|
+
* file set: the file list, the lower-cased file list, the suffix index and the
|
|
5
|
+
* per-pass `resolveCache`.
|
|
6
|
+
*
|
|
7
|
+
* Without this memoization the resolver re-derived `allFileList` and
|
|
8
|
+
* `normalizedFileList` (both O(N_files)), rebuilt the index and threw away the
|
|
9
|
+
* `resolveCache` on every import — O(N_files × N_imports) total work for what
|
|
10
|
+
* should be O(N_files + N_imports).
|
|
11
|
+
*/
|
|
12
|
+
export interface ImportPassCache {
|
|
13
|
+
readonly allFilePaths: Set<string>;
|
|
14
|
+
readonly allFileList: readonly string[];
|
|
15
|
+
readonly normalizedFileList: readonly string[];
|
|
16
|
+
readonly index: SuffixIndex;
|
|
17
|
+
readonly resolveCache: Map<string, string | null>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Build that state. Shared by every adapter whose resolution runs through
|
|
21
|
+
* `resolveTsTarget`.
|
|
22
|
+
*
|
|
23
|
+
* Not a dedup of identical copies, and the difference is the point. At
|
|
24
|
+
* 49c5b7d81 each of those adapters carried this record inline and they did NOT
|
|
25
|
+
* agree: `languages/typescript/scope-resolver.ts` and
|
|
26
|
+
* `languages/vue/import-target.ts` held six byte-identical fields built around
|
|
27
|
+
* `index: buildSuffixIndex(normalizedFileList, allFileList)`, while
|
|
28
|
+
* `languages/javascript/import-target.ts` held five and never called
|
|
29
|
+
* `buildSuffixIndex` at all. That one missing field IS the O(imports × files)
|
|
30
|
+
* defect PR #2911 fixed — `resolveTsTarget` fell back to `suffixResolve`'s
|
|
31
|
+
* linear scan for every JavaScript import — and the header of
|
|
32
|
+
* `languages/javascript/import-target.ts` carries the measurements. Hoisting
|
|
33
|
+
* the builder is what makes a fourth adapter unable to omit it again: `index`
|
|
34
|
+
* is not optional on `ImportPassCache`.
|
|
35
|
+
*
|
|
36
|
+
* The BUILDER is shared; the MEMO deliberately is not. Each adapter wraps this
|
|
37
|
+
* in its own `perFileSet(...)`, so each gets its own `WeakMap`, its own index
|
|
38
|
+
* instance and — the one that would be a behaviour change — its own
|
|
39
|
+
* `resolveCache`. The languages disagree about what a specifier resolves to
|
|
40
|
+
* (`tsconfigPaths` is read from config for TypeScript and Vue, pinned to `null`
|
|
41
|
+
* for JavaScript, and the tried extension list differs), so one shared resolve
|
|
42
|
+
* cache across them would hand a language another language's answers.
|
|
43
|
+
*
|
|
44
|
+
* Sharing the builder is a code dedup and nothing more: it buys no runtime
|
|
45
|
+
* reuse, because there is none to buy. Each provider pass builds its own
|
|
46
|
+
* `allFilePaths` Set (`scope-resolution/pipeline/run.ts`, per provider), so
|
|
47
|
+
* TypeScript's set and JavaScript's set are different objects and therefore
|
|
48
|
+
* different `WeakMap` keys even where the two memos are the same code.
|
|
49
|
+
*/
|
|
50
|
+
export declare function buildImportPassCache(allFilePaths: ReadonlySet<string>): ImportPassCache;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { buildSuffixIndex } from './utils.js';
|
|
2
|
+
/**
|
|
3
|
+
* Build that state. Shared by every adapter whose resolution runs through
|
|
4
|
+
* `resolveTsTarget`.
|
|
5
|
+
*
|
|
6
|
+
* Not a dedup of identical copies, and the difference is the point. At
|
|
7
|
+
* 49c5b7d81 each of those adapters carried this record inline and they did NOT
|
|
8
|
+
* agree: `languages/typescript/scope-resolver.ts` and
|
|
9
|
+
* `languages/vue/import-target.ts` held six byte-identical fields built around
|
|
10
|
+
* `index: buildSuffixIndex(normalizedFileList, allFileList)`, while
|
|
11
|
+
* `languages/javascript/import-target.ts` held five and never called
|
|
12
|
+
* `buildSuffixIndex` at all. That one missing field IS the O(imports × files)
|
|
13
|
+
* defect PR #2911 fixed — `resolveTsTarget` fell back to `suffixResolve`'s
|
|
14
|
+
* linear scan for every JavaScript import — and the header of
|
|
15
|
+
* `languages/javascript/import-target.ts` carries the measurements. Hoisting
|
|
16
|
+
* the builder is what makes a fourth adapter unable to omit it again: `index`
|
|
17
|
+
* is not optional on `ImportPassCache`.
|
|
18
|
+
*
|
|
19
|
+
* The BUILDER is shared; the MEMO deliberately is not. Each adapter wraps this
|
|
20
|
+
* in its own `perFileSet(...)`, so each gets its own `WeakMap`, its own index
|
|
21
|
+
* instance and — the one that would be a behaviour change — its own
|
|
22
|
+
* `resolveCache`. The languages disagree about what a specifier resolves to
|
|
23
|
+
* (`tsconfigPaths` is read from config for TypeScript and Vue, pinned to `null`
|
|
24
|
+
* for JavaScript, and the tried extension list differs), so one shared resolve
|
|
25
|
+
* cache across them would hand a language another language's answers.
|
|
26
|
+
*
|
|
27
|
+
* Sharing the builder is a code dedup and nothing more: it buys no runtime
|
|
28
|
+
* reuse, because there is none to buy. Each provider pass builds its own
|
|
29
|
+
* `allFilePaths` Set (`scope-resolution/pipeline/run.ts`, per provider), so
|
|
30
|
+
* TypeScript's set and JavaScript's set are different objects and therefore
|
|
31
|
+
* different `WeakMap` keys even where the two memos are the same code.
|
|
32
|
+
*/
|
|
33
|
+
export function buildImportPassCache(allFilePaths) {
|
|
34
|
+
const allFileList = Array.from(allFilePaths);
|
|
35
|
+
// LOWERCASED, not slash-normalized — unlike every other caller of
|
|
36
|
+
// `buildSuffixIndex`. That is what `alreadyLowercased` below records.
|
|
37
|
+
const normalizedFileList = allFileList.map((f) => f.toLowerCase());
|
|
38
|
+
return {
|
|
39
|
+
// Copied ONCE per file set, not once per import: `TsResolveContext` wants a
|
|
40
|
+
// mutable `Set` and the orchestrator hands us a `ReadonlySet`. The copy is
|
|
41
|
+
// not the #1918 hazard because the cache KEY is the caller's original Set.
|
|
42
|
+
allFilePaths: new Set(allFilePaths),
|
|
43
|
+
allFileList,
|
|
44
|
+
normalizedFileList,
|
|
45
|
+
// Every suffix of an all-lowercase path is itself lowercase, so the index's
|
|
46
|
+
// case-folded map came out a byte-for-byte copy of its exact map — same
|
|
47
|
+
// keys, same values, same insertion order — one per `ImportPassCache`, so
|
|
48
|
+
// once per adapter per pass. Measured 14.00 MiB at 32 000 paths, 29.8% of
|
|
49
|
+
// the retained `ImportPassCache`. The flag drops the copy; it does not change
|
|
50
|
+
// what `getInsensitive` answers, because the copy was the identity (see
|
|
51
|
+
// `SuffixIndexOptions`). Checked, not assumed: over 474 524 probes on four
|
|
52
|
+
// mixed-case corpora — Vue PascalCase plus alias specifiers, case-colliding
|
|
53
|
+
// twins, a 600-file deep monorepo, and Unicode paths carrying final sigma,
|
|
54
|
+
// dotted-I and sharp-S — the two maps came out byte-identical, the exact
|
|
55
|
+
// map was the sole answerer 0 times, and `get(s) || getInsensitive(s)`
|
|
56
|
+
// returned the same file 474 524 times out of 474 524.
|
|
57
|
+
index: buildSuffixIndex(normalizedFileList, allFileList, { alreadyLowercased: true }),
|
|
58
|
+
resolveCache: new Map(),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one memo every per-file-set index in this pipeline is built on.
|
|
3
|
+
*
|
|
4
|
+
* The scope-resolution orchestrator builds ONE file-set object per provider
|
|
5
|
+
* pass and threads that same object through every `resolveImportTarget` call in
|
|
6
|
+
* the pass, so anything derived from it — a suffix index, a package-directory
|
|
7
|
+
* map, a basename bucket — can be built once and read by every import instead
|
|
8
|
+
* of rebuilt per import. Keying on the object's IDENTITY is what makes that
|
|
9
|
+
* work, and it is equally the contract callers must keep: the set is passed
|
|
10
|
+
* THROUGH, never copied. A defensive `new Set(allFilePaths)` at an adapter
|
|
11
|
+
* boundary hands a fresh key per import and silently restores
|
|
12
|
+
* O(imports × files) — the bug PR #1918 shipped and had to fix in review (P1).
|
|
13
|
+
* The guards are `test/integration/<lang>-import-index-reuse.test.ts` and, for
|
|
14
|
+
* every registered language at once,
|
|
15
|
+
* `test/unit/scope-resolution/import-target-index-reuse.contract.test.ts`,
|
|
16
|
+
* whose inventory arm fails when an entry of `SCOPE_RESOLVERS` has no fixture.
|
|
17
|
+
* That arm is why no language is named here: the registry is the census, and a
|
|
18
|
+
* hand-copied list of languages goes stale the release after it is written.
|
|
19
|
+
*
|
|
20
|
+
* A `WeakMap` rather than a `Map`: the entry is reclaimed with the file set it
|
|
21
|
+
* was derived from, so a pass can never read a previous pass's index and memory
|
|
22
|
+
* does not grow across runs. There is no invalidation rule to get wrong because
|
|
23
|
+
* there is nothing to invalidate — a new file set is a new key.
|
|
24
|
+
*
|
|
25
|
+
* The KEY TYPE is constrained rather than described, because which object is
|
|
26
|
+
* the key decides whether the guards above can see the memo fail, and a prose
|
|
27
|
+
* list of call sites is the thing this file elsewhere tells you not to write.
|
|
28
|
+
* `K` admits exactly the two shapes the orchestrator keeps stable for a pass:
|
|
29
|
+
*
|
|
30
|
+
* - `ReadonlySet<string>`, the pass's file set — every index derived from it,
|
|
31
|
+
* including the derived header-closure sets that `languages/{c,cpp}/
|
|
32
|
+
* scope-resolver.ts` memoize inside an outer per-file-set memo. Defeating
|
|
33
|
+
* one of these means copying the SET, which re-traverses it, which the
|
|
34
|
+
* `CountingSet` instrument (`test/helpers/counting-file-set.ts`) reads as a
|
|
35
|
+
* scan count rising with the import count.
|
|
36
|
+
* - `readonly ParsedFile[]`, the pass's parsed-file array. Not derived from
|
|
37
|
+
* the file set at all, so the file-set guards do not reach them; these key
|
|
38
|
+
* on the array the orchestrator already threads through the pass, and their
|
|
39
|
+
* contract is that same pass-through discipline. The instrument that CAN see
|
|
40
|
+
* them counts element reads on that array — `countedParsedFiles`, beside
|
|
41
|
+
* `CountingSet`, driven by the contract test's `minimumParsedFileReads`.
|
|
42
|
+
*
|
|
43
|
+
* A THIRD shape — an array materialized from the file set — is what the type
|
|
44
|
+
* exists to reject. `import-resolvers/csharp.ts` used one until #2911, and it
|
|
45
|
+
* is worth a compile error rather than a rule: copying an array mints a fresh
|
|
46
|
+
* `WeakMap` key while traversing the Set zero extra times, so every
|
|
47
|
+
* scan-counting guard stays green at its correct value while the index rebuilds
|
|
48
|
+
* once per import. That failure is invisible to the whole instrument family
|
|
49
|
+
* above and was caught only by a timing ratio in `bench/import-target/`. Derive
|
|
50
|
+
* the array inside the builder from `getWorkspaceFileIndex(allFilePaths)`
|
|
51
|
+
* instead. `string[]` is not assignable to `K`, so the shape cannot come back
|
|
52
|
+
* silently — `configs/swift.ts` keeps the one hand-rolled `WeakMap` on
|
|
53
|
+
* `ctx.allFileList` in the tree, deliberately and with its reasons written
|
|
54
|
+
* down, and it is deliberately NOT on this primitive.
|
|
55
|
+
*
|
|
56
|
+
* `T extends object` is deliberate, chosen over probing `has` before `get`.
|
|
57
|
+
* `WeakMap.get` returning `undefined` cannot distinguish "not built yet" from
|
|
58
|
+
* "built, and the value is `undefined`"; constraining the value to an object
|
|
59
|
+
* makes the second case unrepresentable rather than paying a second lookup on
|
|
60
|
+
* every import, and it needs no cast to type-check. Every index memoized here
|
|
61
|
+
* is a record, `Map` or `Set`, so the constraint costs nothing today — and a
|
|
62
|
+
* later caller wanting to memoize a `string | null` gets a compile error
|
|
63
|
+
* pointing at this line instead of a memo that silently rebuilds on every miss.
|
|
64
|
+
*
|
|
65
|
+
* A `build` that THROWS stores nothing, so the next call for that key runs it
|
|
66
|
+
* again: failures are not memoized, and a half-filled index is never published.
|
|
67
|
+
* Inert for the builders here — each is a pure, total pass over the file set —
|
|
68
|
+
* and the safer of the two behaviours if that ever stops being true.
|
|
69
|
+
*/
|
|
70
|
+
import type { ParsedFile } from '../../../_shared/index.js';
|
|
71
|
+
export declare function perFileSet<K extends ReadonlySet<string> | readonly ParsedFile[], T extends object>(build: (key: K) => T): (key: K) => T;
|
|
@@ -21,4 +21,4 @@ import type { ComposerConfig } from '../language-config.js';
|
|
|
21
21
|
* a known limitation — PHP function imports cannot be resolved to a specific file
|
|
22
22
|
* without parsing all candidate files.
|
|
23
23
|
*/
|
|
24
|
-
export declare function resolvePhpImportInternal(importPath: string, composerConfig: ComposerConfig | null, allFiles: Set<string>, normalizedFileList: string[], allFileList: string[], index?: SuffixIndex): string | null;
|
|
24
|
+
export declare function resolvePhpImportInternal(importPath: string, composerConfig: ComposerConfig | null, allFiles: Set<string>, normalizedFileList: readonly string[], allFileList: readonly string[], index?: SuffixIndex): string | null;
|