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
|
@@ -3,7 +3,19 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Strategy lives in configs/go.ts.
|
|
5
5
|
* This file contains the shared helpers used by the strategy.
|
|
6
|
+
*
|
|
7
|
+
* **Reachability, as of #2929:** nothing in production calls either export
|
|
8
|
+
* today. The only path in is `configs/go.ts` → `createImportResolver` →
|
|
9
|
+
* the `importResolver` field on Go's `LanguageProvider`, and that field is
|
|
10
|
+
* read at exactly two lines — `import-target-adapter.ts:74-75` — whose two
|
|
11
|
+
* exports (`buildImportTargetWorkspace`,
|
|
12
|
+
* `resolveImportTargetAcrossLanguages`) have no importer anywhere but their
|
|
13
|
+
* own unit test. So this is a live-looking but currently unwired leg; the
|
|
14
|
+
* tests in `test/unit/import-resolvers/go-package-resolve.test.ts` are the
|
|
15
|
+
* only thing watching it.
|
|
6
16
|
*/
|
|
17
|
+
/** `'/'`, for the parent-directory boundary check in `resolveGoPackage`. */
|
|
18
|
+
const SLASH_CODE = 47;
|
|
7
19
|
/**
|
|
8
20
|
* Extract the package directory suffix from a Go import path.
|
|
9
21
|
* Returns the suffix string (e.g., "/internal/auth/") or null if invalid.
|
|
@@ -21,26 +33,41 @@ export function resolveGoPackageDir(importPath, goModule) {
|
|
|
21
33
|
* Returns an array of file paths.
|
|
22
34
|
*/
|
|
23
35
|
export function resolveGoPackage(importPath, goModule, normalizedFileList, allFileList) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (!relativePkg)
|
|
36
|
+
// Identical to the six lines this used to re-derive; `resolveGoPackageDir`
|
|
37
|
+
// returns the '/'-wrapped form and the scan wants the bare path, so unwrap.
|
|
38
|
+
const pkgDir = resolveGoPackageDir(importPath, goModule);
|
|
39
|
+
if (pkgDir === null)
|
|
29
40
|
return [];
|
|
30
|
-
const
|
|
41
|
+
const relativePkg = pkgDir.slice(1, -1); // "/internal/auth/" → "internal/auth"
|
|
42
|
+
const pkgLen = relativePkg.length; // >= 1: `resolveGoPackageDir` rejects empty
|
|
31
43
|
const matches = [];
|
|
32
44
|
for (let i = 0; i < normalizedFileList.length; i++) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
45
|
+
const normalized = normalizedFileList[i];
|
|
46
|
+
if (!normalized.endsWith('.go') || normalized.endsWith('_test.go'))
|
|
47
|
+
continue;
|
|
48
|
+
// The file's PARENT directory ends with the package path — the same
|
|
49
|
+
// predicate `package-dir-index.ts` states. This used to ask `indexOf` for
|
|
50
|
+
// the FIRST `/<pkg>/` and then check that nothing after it held a slash,
|
|
51
|
+
// which made `a/pkg/b/pkg/x.go` not a member of `pkg` (#2881).
|
|
52
|
+
//
|
|
53
|
+
// Expressed as "`relativePkg` sits immediately before the last slash, on a
|
|
54
|
+
// segment boundary". The boundary is either the start of the path (an
|
|
55
|
+
// import matching from index 0, `internal/auth/x.go`) or a `/` — which is
|
|
56
|
+
// what the old `'/' + path` cons bought, at the price of a per-file
|
|
57
|
+
// concatenation the first `endsWith` forced V8 to flatten (#2929).
|
|
58
|
+
//
|
|
59
|
+
// Rewriting this as `endsWith(relativePkg, lastSlash)` buys nothing: the
|
|
60
|
+
// two-argument overload measured a wash against `startsWith(needle, pos)`
|
|
61
|
+
// here (10.28 ns vs 9.82 ns), so it trades the clarity of an explicit start
|
|
62
|
+
// index for no gain. A "the 2-arg overload leaves V8's fast path, 20x"
|
|
63
|
+
// claim from review did not reproduce on Node 22.18 — its baseline was a
|
|
64
|
+
// one-argument call that early-exited on the length precheck.
|
|
65
|
+
const start = normalized.lastIndexOf('/') - pkgLen; // < 0 when there is no parent dir
|
|
66
|
+
if (start < 0 || !normalized.startsWith(relativePkg, start))
|
|
67
|
+
continue;
|
|
68
|
+
if (start > 0 && normalized.charCodeAt(start - 1) !== SLASH_CODE)
|
|
69
|
+
continue;
|
|
70
|
+
matches.push(allFileList[i]);
|
|
44
71
|
}
|
|
45
72
|
return matches;
|
|
46
73
|
}
|
|
@@ -18,10 +18,10 @@ export declare const appendKotlinWildcard: (importPath: string, importNode: Synt
|
|
|
18
18
|
* Resolve a JVM wildcard import (com.example.*) to all matching files.
|
|
19
19
|
* Works for both Java (.java) and Kotlin (.kt, .kts).
|
|
20
20
|
*/
|
|
21
|
-
export declare function resolveJvmWildcard(importPath: string, normalizedFileList: string[], allFileList: string[], extensions: readonly string[], index?: SuffixIndex): string[];
|
|
21
|
+
export declare function resolveJvmWildcard(importPath: string, normalizedFileList: readonly string[], allFileList: readonly string[], extensions: readonly string[], index?: SuffixIndex): string[];
|
|
22
22
|
/**
|
|
23
23
|
* Try to resolve a JVM member/static import by stripping the member name.
|
|
24
24
|
* Java: "com.example.Constants.VALUE" -> resolve "com.example.Constants"
|
|
25
25
|
* Kotlin: "com.example.Constants.VALUE" -> resolve "com.example.Constants"
|
|
26
26
|
*/
|
|
27
|
-
export declare function resolveJvmMemberImport(importPath: string, normalizedFileList: string[], allFileList: string[], extensions: readonly string[], index?: SuffixIndex): string | null;
|
|
27
|
+
export declare function resolveJvmMemberImport(importPath: string, normalizedFileList: readonly string[], allFileList: readonly string[], extensions: readonly string[], index?: SuffixIndex): string | null;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-repo `package.json` manifests, as module-resolution input (#2953).
|
|
3
|
+
*
|
|
4
|
+
* A bare specifier (`@acme/telemetry/nest`, `@repo/utils`, `lodash/fp`) names a
|
|
5
|
+
* PACKAGE, not a path, and the manifest is the only thing that says which
|
|
6
|
+
* packages exist and where their entry points are. Without it a resolver can do
|
|
7
|
+
* nothing but guess — which is what the old suffix matcher did, landing
|
|
8
|
+
* `@acme/telemetry/nest` on the repo's only path ending in `nest/index.ts`
|
|
9
|
+
* while `@repo/utils`, a real first-party package, resolved to nothing because
|
|
10
|
+
* its name appears in no file path at all.
|
|
11
|
+
*
|
|
12
|
+
* Both directions come from the same missing input, so both are fixed by
|
|
13
|
+
* reading it: every in-repo `package.json` contributes its `name`, its `exports`
|
|
14
|
+
* map (including subpath patterns), its legacy entry fields, and its `imports`
|
|
15
|
+
* map for `#`-prefixed specifiers.
|
|
16
|
+
*/
|
|
17
|
+
/** One in-repo package. */
|
|
18
|
+
export interface NodeWorkspacePackage {
|
|
19
|
+
/** Repo-relative directory holding the `package.json` (`''` for the root). */
|
|
20
|
+
readonly dir: string;
|
|
21
|
+
/**
|
|
22
|
+
* Repo-relative entry stems for the package root (`import '@repo/utils'`),
|
|
23
|
+
* best first: declared `exports["."]`, then `module` / `main` / `types`, then
|
|
24
|
+
* the conventional `src/index` and `index`.
|
|
25
|
+
*
|
|
26
|
+
* A published `dist/...` entry simply fails to match an indexed source file
|
|
27
|
+
* (build output is not indexed) and the next candidate is tried, which is why
|
|
28
|
+
* the conventional fallbacks stay at the end rather than being a guess: they
|
|
29
|
+
* are what the package resolves to when it is consumed from source, which in
|
|
30
|
+
* a workspace it always is.
|
|
31
|
+
*/
|
|
32
|
+
readonly entries: readonly string[];
|
|
33
|
+
/**
|
|
34
|
+
* Declared `exports` subpaths, specifier suffix -> repo-relative stems.
|
|
35
|
+
* Keys are as written minus the leading `./`, so `"./nest"` is stored `nest`;
|
|
36
|
+
* a pattern key keeps its `*` (`"./features/*"` -> `features/*`).
|
|
37
|
+
*/
|
|
38
|
+
readonly subpathExports: ReadonlyMap<string, readonly string[]>;
|
|
39
|
+
/** Declared `imports` map, `#name` -> repo-relative stems. */
|
|
40
|
+
readonly subpathImports: ReadonlyMap<string, readonly string[]>;
|
|
41
|
+
}
|
|
42
|
+
export interface NodeWorkspacePackages {
|
|
43
|
+
/** Package name (`@repo/utils`, `utils`) -> that package. */
|
|
44
|
+
readonly byName: ReadonlyMap<string, NodeWorkspacePackage>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The package name a bare specifier addresses, or `null` when the specifier
|
|
48
|
+
* names a path rather than a package.
|
|
49
|
+
*
|
|
50
|
+
* `@acme/telemetry/nest` -> `@acme/telemetry`, `lodash/fp` -> `lodash`.
|
|
51
|
+
*/
|
|
52
|
+
export declare function nodePackageNameOf(specifier: string): string | null;
|
|
53
|
+
/** The in-repo package whose directory most closely contains `filePath`. */
|
|
54
|
+
export declare function owningPackage(filePath: string, packages: NodeWorkspacePackages | null | undefined): NodeWorkspacePackage | null;
|
|
55
|
+
/**
|
|
56
|
+
* Resolve a bare specifier that names an in-repo package.
|
|
57
|
+
*
|
|
58
|
+
* `null` means the specifier names no in-repo package — an external dependency,
|
|
59
|
+
* whose correct in-repo resolution is nothing — or names one that does not
|
|
60
|
+
* export the requested subpath.
|
|
61
|
+
*/
|
|
62
|
+
export declare function resolveNodeWorkspaceImport(specifier: string, packages: NodeWorkspacePackages | null | undefined, allFiles: ReadonlySet<string>): string | null;
|
|
63
|
+
/**
|
|
64
|
+
* Look a specifier up in a subpath map — `exports` or `imports`, which share
|
|
65
|
+
* Node's matching rule exactly: an exact key wins, otherwise the pattern with
|
|
66
|
+
* the longest literal prefix does, and its `*` takes whatever the specifier put
|
|
67
|
+
* there.
|
|
68
|
+
*
|
|
69
|
+
* Shared because they diverged once: the `imports` side did an exact lookup
|
|
70
|
+
* only, so a declared `"#internal/*"` could never match `#internal/foo`.
|
|
71
|
+
*/
|
|
72
|
+
export declare function matchSubpathMap(map: ReadonlyMap<string, readonly string[]>, specifier: string): readonly string[] | null;
|
|
73
|
+
/**
|
|
74
|
+
* Substitute a subpath pattern's single `*`.
|
|
75
|
+
*
|
|
76
|
+
* Node's subpath patterns and TypeScript's `paths` both allow AT MOST one `*`,
|
|
77
|
+
* so replacing the first occurrence is the specified behaviour rather than a
|
|
78
|
+
* partial one — but `String.replace` with a string needle says that only by
|
|
79
|
+
* accident, and reads as a bug to anyone (CodeQL included) who has met the
|
|
80
|
+
* replace-all footgun. Slicing at the known index states the rule instead.
|
|
81
|
+
*/
|
|
82
|
+
export declare function substituteStar(target: string, stem: string): string;
|
|
83
|
+
/**
|
|
84
|
+
* Collect the `package.json` of every ADMITTED workspace package.
|
|
85
|
+
*
|
|
86
|
+
* Directory-only BFS: the sole files opened are manifests and the workspace
|
|
87
|
+
* declaration, so this is far cheaper than the C# namespace scan next door,
|
|
88
|
+
* which reads every `.cs` file.
|
|
89
|
+
*/
|
|
90
|
+
export declare function loadNodeWorkspacePackages(repoRoot: string): Promise<NodeWorkspacePackages | null>;
|
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-repo `package.json` manifests, as module-resolution input (#2953).
|
|
3
|
+
*
|
|
4
|
+
* A bare specifier (`@acme/telemetry/nest`, `@repo/utils`, `lodash/fp`) names a
|
|
5
|
+
* PACKAGE, not a path, and the manifest is the only thing that says which
|
|
6
|
+
* packages exist and where their entry points are. Without it a resolver can do
|
|
7
|
+
* nothing but guess — which is what the old suffix matcher did, landing
|
|
8
|
+
* `@acme/telemetry/nest` on the repo's only path ending in `nest/index.ts`
|
|
9
|
+
* while `@repo/utils`, a real first-party package, resolved to nothing because
|
|
10
|
+
* its name appears in no file path at all.
|
|
11
|
+
*
|
|
12
|
+
* Both directions come from the same missing input, so both are fixed by
|
|
13
|
+
* reading it: every in-repo `package.json` contributes its `name`, its `exports`
|
|
14
|
+
* map (including subpath patterns), its legacy entry fields, and its `imports`
|
|
15
|
+
* map for `#`-prefixed specifiers.
|
|
16
|
+
*/
|
|
17
|
+
import fs from 'fs/promises';
|
|
18
|
+
import path from 'path';
|
|
19
|
+
import { createRequire } from 'node:module';
|
|
20
|
+
import { isHardcodedIgnoredDirectoryAtPath } from '../../../config/ignore-service.js';
|
|
21
|
+
import { logger } from '../../logger.js';
|
|
22
|
+
import { resolveFile } from '../languages/typescript/file-candidates.js';
|
|
23
|
+
// `js-yaml` is CJS; the rest of this repository reaches it the same way
|
|
24
|
+
// (`core/group/config-parser.ts`, `cli/group.ts`).
|
|
25
|
+
const _require = createRequire(import.meta.url);
|
|
26
|
+
const yaml = _require('js-yaml');
|
|
27
|
+
const SCAN_MAX_DIRS = 20_000;
|
|
28
|
+
const SCAN_MAX_DEPTH = 24;
|
|
29
|
+
/**
|
|
30
|
+
* The package name a bare specifier addresses, or `null` when the specifier
|
|
31
|
+
* names a path rather than a package.
|
|
32
|
+
*
|
|
33
|
+
* `@acme/telemetry/nest` -> `@acme/telemetry`, `lodash/fp` -> `lodash`.
|
|
34
|
+
*/
|
|
35
|
+
export function nodePackageNameOf(specifier) {
|
|
36
|
+
if (specifier === '' || specifier.startsWith('.') || specifier.startsWith('/'))
|
|
37
|
+
return null;
|
|
38
|
+
if (specifier.startsWith('#'))
|
|
39
|
+
return null;
|
|
40
|
+
if (specifier.startsWith('@')) {
|
|
41
|
+
const parts = specifier.split('/');
|
|
42
|
+
return parts.length >= 2 && parts[0].length > 1 && parts[1] !== ''
|
|
43
|
+
? `${parts[0]}/${parts[1]}`
|
|
44
|
+
: null;
|
|
45
|
+
}
|
|
46
|
+
return specifier.split('/')[0] || null;
|
|
47
|
+
}
|
|
48
|
+
/** The in-repo package whose directory most closely contains `filePath`. */
|
|
49
|
+
export function owningPackage(filePath, packages) {
|
|
50
|
+
if (!packages)
|
|
51
|
+
return null;
|
|
52
|
+
let best = null;
|
|
53
|
+
for (const pkg of packages.byName.values()) {
|
|
54
|
+
const inside = pkg.dir === '' || filePath.startsWith(`${pkg.dir}/`);
|
|
55
|
+
if (inside && (best === null || pkg.dir.length > best.dir.length))
|
|
56
|
+
best = pkg;
|
|
57
|
+
}
|
|
58
|
+
return best;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Resolve a bare specifier that names an in-repo package.
|
|
62
|
+
*
|
|
63
|
+
* `null` means the specifier names no in-repo package — an external dependency,
|
|
64
|
+
* whose correct in-repo resolution is nothing — or names one that does not
|
|
65
|
+
* export the requested subpath.
|
|
66
|
+
*/
|
|
67
|
+
export function resolveNodeWorkspaceImport(specifier, packages, allFiles) {
|
|
68
|
+
if (!packages)
|
|
69
|
+
return null;
|
|
70
|
+
const packageName = nodePackageNameOf(specifier);
|
|
71
|
+
if (packageName === null)
|
|
72
|
+
return null;
|
|
73
|
+
const pkg = packages.byName.get(packageName);
|
|
74
|
+
if (pkg === undefined)
|
|
75
|
+
return null;
|
|
76
|
+
const subpath = specifier.slice(packageName.length).replace(/^\//, '');
|
|
77
|
+
for (const stem of entryStemsFor(pkg, subpath)) {
|
|
78
|
+
const hit = resolveFile(stem, allFiles);
|
|
79
|
+
if (hit !== null)
|
|
80
|
+
return hit;
|
|
81
|
+
}
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Look a specifier up in a subpath map — `exports` or `imports`, which share
|
|
86
|
+
* Node's matching rule exactly: an exact key wins, otherwise the pattern with
|
|
87
|
+
* the longest literal prefix does, and its `*` takes whatever the specifier put
|
|
88
|
+
* there.
|
|
89
|
+
*
|
|
90
|
+
* Shared because they diverged once: the `imports` side did an exact lookup
|
|
91
|
+
* only, so a declared `"#internal/*"` could never match `#internal/foo`.
|
|
92
|
+
*/
|
|
93
|
+
export function matchSubpathMap(map, specifier) {
|
|
94
|
+
const exact = map.get(specifier);
|
|
95
|
+
if (exact !== undefined)
|
|
96
|
+
return exact;
|
|
97
|
+
const patterns = [...map.entries()]
|
|
98
|
+
.filter(([key]) => key.includes('*'))
|
|
99
|
+
.map(([key, stems]) => {
|
|
100
|
+
const star = key.indexOf('*');
|
|
101
|
+
return { prefix: key.slice(0, star), suffix: key.slice(star + 1), stems };
|
|
102
|
+
})
|
|
103
|
+
.filter(({ prefix, suffix }) => specifier.startsWith(prefix) &&
|
|
104
|
+
specifier.endsWith(suffix) &&
|
|
105
|
+
specifier.length >= prefix.length + suffix.length)
|
|
106
|
+
.sort((a, b) => b.prefix.length - a.prefix.length);
|
|
107
|
+
for (const { prefix, suffix, stems } of patterns) {
|
|
108
|
+
const stem = specifier.slice(prefix.length, specifier.length - suffix.length);
|
|
109
|
+
return stems.map((target) => substituteStar(target, stem));
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Substitute a subpath pattern's single `*`.
|
|
115
|
+
*
|
|
116
|
+
* Node's subpath patterns and TypeScript's `paths` both allow AT MOST one `*`,
|
|
117
|
+
* so replacing the first occurrence is the specified behaviour rather than a
|
|
118
|
+
* partial one — but `String.replace` with a string needle says that only by
|
|
119
|
+
* accident, and reads as a bug to anyone (CodeQL included) who has met the
|
|
120
|
+
* replace-all footgun. Slicing at the known index states the rule instead.
|
|
121
|
+
*/
|
|
122
|
+
export function substituteStar(target, stem) {
|
|
123
|
+
const star = target.indexOf('*');
|
|
124
|
+
return star === -1 ? target : target.slice(0, star) + stem + target.slice(star + 1);
|
|
125
|
+
}
|
|
126
|
+
/** Candidate stems for one specifier into `pkg`, best first. */
|
|
127
|
+
function entryStemsFor(pkg, subpath) {
|
|
128
|
+
if (subpath === '')
|
|
129
|
+
return pkg.entries;
|
|
130
|
+
const declared = matchSubpathMap(pkg.subpathExports, subpath);
|
|
131
|
+
if (declared !== null)
|
|
132
|
+
return declared;
|
|
133
|
+
// A package with NO `exports` map is not restricted: Node resolves any
|
|
134
|
+
// subpath against the package DIRECTORY, and only against it. A package WITH
|
|
135
|
+
// one exposes only what it lists, so an unlisted subpath resolves to nothing.
|
|
136
|
+
//
|
|
137
|
+
// Both restrictions are real, and neither is softened here. An earlier draft
|
|
138
|
+
// also tried `<dir>/src/<subpath>`, on the theory that a workspace package is
|
|
139
|
+
// consumed from source — but nothing declares that mapping, so it is the same
|
|
140
|
+
// kind of guess this module exists to remove: it would resolve
|
|
141
|
+
// `@repo/utils/deep/thing` to `packages/utils/src/deep/thing.ts` for a
|
|
142
|
+
// package whose manifest never said `deep/thing` lives under `src/`, and the
|
|
143
|
+
// import would be broken in the real project too.
|
|
144
|
+
if (pkg.subpathExports.size > 0)
|
|
145
|
+
return [];
|
|
146
|
+
return [joinRepoPath(pkg.dir, subpath)];
|
|
147
|
+
}
|
|
148
|
+
/** Whether `dir` (repo-relative, `''` for the root) is an admitted package. */
|
|
149
|
+
function admits(scope, dir) {
|
|
150
|
+
// The root package is always itself, workspace or not.
|
|
151
|
+
if (dir === '')
|
|
152
|
+
return true;
|
|
153
|
+
if (scope === null)
|
|
154
|
+
return false;
|
|
155
|
+
if (scope.exclude.some((pattern) => globToRegExp(pattern).test(dir)))
|
|
156
|
+
return false;
|
|
157
|
+
return scope.include.some((pattern) => globToRegExp(pattern).test(dir));
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Match one workspace glob.
|
|
161
|
+
*
|
|
162
|
+
* The subset npm, pnpm, yarn and lerna actually use in `workspaces` /
|
|
163
|
+
* `packages`: `*` within a segment, `**` across segments, `?`, and a leading
|
|
164
|
+
* `!` for exclusion (handled by the caller). Deliberately not a general glob
|
|
165
|
+
* engine — the patterns are a documented, narrow dialect, and `minimatch` is
|
|
166
|
+
* only present here transitively through `glob`.
|
|
167
|
+
*/
|
|
168
|
+
function globToRegExp(pattern) {
|
|
169
|
+
const normalized = pattern.replace(/^\.\//, '').replace(/\/$/, '');
|
|
170
|
+
let out = '';
|
|
171
|
+
for (let i = 0; i < normalized.length; i++) {
|
|
172
|
+
const ch = normalized[i];
|
|
173
|
+
if (ch === '*') {
|
|
174
|
+
if (normalized[i + 1] === '*') {
|
|
175
|
+
// `**/` may match nothing at all, so `packages/**/x` also matches
|
|
176
|
+
// `packages/x`; a trailing `**` matches any depth below.
|
|
177
|
+
if (normalized[i + 2] === '/') {
|
|
178
|
+
out += '(?:.*/)?';
|
|
179
|
+
i += 2;
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
out += '.*';
|
|
183
|
+
i += 1;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
out += '[^/]*';
|
|
188
|
+
}
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
if (ch === '?') {
|
|
192
|
+
out += '[^/]';
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
out += ch.replace(/[.+^${}()|[\]\\]/g, '\\$&');
|
|
196
|
+
}
|
|
197
|
+
return new RegExp(`^${out}$`);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Read the repository's workspace declaration.
|
|
201
|
+
*
|
|
202
|
+
* All three spellings are read and merged, because a repo may carry more than
|
|
203
|
+
* one (a pnpm workspace whose root `package.json` also lists `workspaces` for
|
|
204
|
+
* tooling that does not read pnpm's file).
|
|
205
|
+
*/
|
|
206
|
+
async function loadWorkspaceScope(repoRoot) {
|
|
207
|
+
const patterns = [];
|
|
208
|
+
const rootManifest = await readJsonFile(path.join(repoRoot, 'package.json'));
|
|
209
|
+
const workspaces = rootManifest?.workspaces;
|
|
210
|
+
if (Array.isArray(workspaces)) {
|
|
211
|
+
patterns.push(...workspaces.filter((w) => typeof w === 'string'));
|
|
212
|
+
}
|
|
213
|
+
else if (workspaces !== null && typeof workspaces === 'object') {
|
|
214
|
+
// Yarn's object form: `{ "packages": [...], "nohoist": [...] }`.
|
|
215
|
+
const nested = workspaces.packages;
|
|
216
|
+
if (Array.isArray(nested)) {
|
|
217
|
+
patterns.push(...nested.filter((w) => typeof w === 'string'));
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
patterns.push(...(await readYamlPackages(path.join(repoRoot, 'pnpm-workspace.yaml'))));
|
|
221
|
+
patterns.push(...(await readYamlPackages(path.join(repoRoot, 'pnpm-workspace.yml'))));
|
|
222
|
+
const lerna = await readJsonFile(path.join(repoRoot, 'lerna.json'));
|
|
223
|
+
if (Array.isArray(lerna?.packages)) {
|
|
224
|
+
patterns.push(...lerna.packages.filter((w) => typeof w === 'string'));
|
|
225
|
+
}
|
|
226
|
+
if (patterns.length === 0)
|
|
227
|
+
return null;
|
|
228
|
+
return {
|
|
229
|
+
include: patterns.filter((p) => !p.startsWith('!')),
|
|
230
|
+
exclude: patterns.filter((p) => p.startsWith('!')).map((p) => p.slice(1)),
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
async function readJsonFile(filePath) {
|
|
234
|
+
try {
|
|
235
|
+
return JSON.parse(await fs.readFile(filePath, 'utf-8'));
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
async function readYamlPackages(filePath) {
|
|
242
|
+
let raw;
|
|
243
|
+
try {
|
|
244
|
+
raw = await fs.readFile(filePath, 'utf-8');
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
return [];
|
|
248
|
+
}
|
|
249
|
+
try {
|
|
250
|
+
const parsed = yaml.load(raw);
|
|
251
|
+
const packages = parsed?.packages;
|
|
252
|
+
return Array.isArray(packages)
|
|
253
|
+
? packages.filter((p) => typeof p === 'string')
|
|
254
|
+
: [];
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
return [];
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Collect the `package.json` of every ADMITTED workspace package.
|
|
262
|
+
*
|
|
263
|
+
* Directory-only BFS: the sole files opened are manifests and the workspace
|
|
264
|
+
* declaration, so this is far cheaper than the C# namespace scan next door,
|
|
265
|
+
* which reads every `.cs` file.
|
|
266
|
+
*/
|
|
267
|
+
export async function loadNodeWorkspacePackages(repoRoot) {
|
|
268
|
+
const scope = await loadWorkspaceScope(repoRoot);
|
|
269
|
+
const byName = new Map();
|
|
270
|
+
const queue = [{ dir: repoRoot, depth: 0 }];
|
|
271
|
+
let dirsScanned = 0;
|
|
272
|
+
while (queue.length > 0) {
|
|
273
|
+
if (dirsScanned >= SCAN_MAX_DIRS) {
|
|
274
|
+
logger.warn(`[node] package.json scan of ${repoRoot} hit the ${SCAN_MAX_DIRS}-directory cap; workspace packages below it will not resolve`);
|
|
275
|
+
break;
|
|
276
|
+
}
|
|
277
|
+
const { dir, depth } = queue.shift();
|
|
278
|
+
dirsScanned++;
|
|
279
|
+
let entries;
|
|
280
|
+
try {
|
|
281
|
+
entries = await fs.readdir(dir, { withFileTypes: true });
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
continue;
|
|
285
|
+
}
|
|
286
|
+
for (const entry of entries) {
|
|
287
|
+
if (entry.isDirectory()) {
|
|
288
|
+
const childDir = path.join(dir, entry.name);
|
|
289
|
+
if (isHardcodedIgnoredDirectoryAtPath(repoRoot, childDir))
|
|
290
|
+
continue;
|
|
291
|
+
if (depth < SCAN_MAX_DEPTH) {
|
|
292
|
+
queue.push({ dir: childDir, depth: depth + 1 });
|
|
293
|
+
}
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
if (!entry.isFile() || entry.name !== 'package.json')
|
|
297
|
+
continue;
|
|
298
|
+
const relDir = repoRelativeDir(repoRoot, dir);
|
|
299
|
+
// Found is not the same as admitted. A manifest outside the declared
|
|
300
|
+
// workspace belongs to something this repository does not build — a
|
|
301
|
+
// fixture, an example, a vendored copy — and its name is not addressable.
|
|
302
|
+
if (!admits(scope, relDir))
|
|
303
|
+
continue;
|
|
304
|
+
const pkg = await readManifest(path.join(dir, entry.name), repoRoot, dir);
|
|
305
|
+
// First declaration wins: BFS visits shallower directories first, so a
|
|
306
|
+
// top-level package outranks a nested one that reuses the name.
|
|
307
|
+
if (pkg !== null && !byName.has(pkg.name))
|
|
308
|
+
byName.set(pkg.name, pkg.package);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return byName.size === 0 ? null : { byName };
|
|
312
|
+
}
|
|
313
|
+
async function readManifest(manifestPath, repoRoot, dir) {
|
|
314
|
+
let parsed;
|
|
315
|
+
try {
|
|
316
|
+
parsed = JSON.parse(await fs.readFile(manifestPath, 'utf-8'));
|
|
317
|
+
}
|
|
318
|
+
catch {
|
|
319
|
+
return null;
|
|
320
|
+
}
|
|
321
|
+
const name = typeof parsed.name === 'string' ? parsed.name : '';
|
|
322
|
+
if (name === '')
|
|
323
|
+
return null;
|
|
324
|
+
const packageDir = repoRelativeDir(repoRoot, dir);
|
|
325
|
+
const rebase = (raw) => joinRepoPath(packageDir, stripEntryPrefixes(raw));
|
|
326
|
+
const subpathExports = new Map();
|
|
327
|
+
const rootExports = [];
|
|
328
|
+
collectExports(parsed.exports, subpathExports, rootExports, rebase);
|
|
329
|
+
// `exports`, when present, is the package's ENTIRE public interface: Node
|
|
330
|
+
// ignores `main` outright and refuses any subpath the map does not list. This
|
|
331
|
+
// resolver already honoured that restriction for subpaths (`entryStemsFor`)
|
|
332
|
+
// and not for the ROOT, which is the same rule — so a manifest exporting only
|
|
333
|
+
// `"./feature"` still answered a bare `@repo/pkg` with `src/index`, an edge
|
|
334
|
+
// for an import that does not resolve in the real project.
|
|
335
|
+
const declaresExports = parsed.exports !== undefined && parsed.exports !== null;
|
|
336
|
+
const entries = [...rootExports];
|
|
337
|
+
if (!declaresExports) {
|
|
338
|
+
for (const field of ['module', 'main', 'types', 'typings']) {
|
|
339
|
+
const value = parsed[field];
|
|
340
|
+
if (typeof value === 'string')
|
|
341
|
+
push(entries, rebase(value));
|
|
342
|
+
}
|
|
343
|
+
for (const conventional of ['src/index', 'index', 'lib/index']) {
|
|
344
|
+
push(entries, joinRepoPath(packageDir, conventional));
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
const subpathImports = new Map();
|
|
348
|
+
collectImports(parsed.imports, subpathImports, rebase);
|
|
349
|
+
return { name, package: { dir: packageDir, entries, subpathExports, subpathImports } };
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Walk an `exports` value into the root-entry list and the subpath map.
|
|
353
|
+
*
|
|
354
|
+
* `exports` nests three ways at once — a bare string, a subpath map, and
|
|
355
|
+
* condition maps (`import` / `require` / `types` / `default`) at any depth — so
|
|
356
|
+
* this collects string leaves per subpath rather than assuming a shape.
|
|
357
|
+
*/
|
|
358
|
+
function collectExports(node, subpaths, rootStems, rebase, currentSubpath = '') {
|
|
359
|
+
if (typeof node === 'string') {
|
|
360
|
+
if (currentSubpath === null)
|
|
361
|
+
return;
|
|
362
|
+
if (currentSubpath === '') {
|
|
363
|
+
push(rootStems, rebase(node));
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
subpaths.set(currentSubpath, [...(subpaths.get(currentSubpath) ?? []), rebase(node)]);
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
// An array is an ordered FALLBACK LIST, not an opaque value: Node tries each
|
|
370
|
+
// entry in turn. `{"./feature": ["./dist/feature.js", "./src/feature.ts"]}` is
|
|
371
|
+
// the shape a workspace package publishes to say "built output, or source" —
|
|
372
|
+
// and the source arm is the one that matters here, because `dist/` is build
|
|
373
|
+
// output and is not indexed. Skipping arrays dropped the declaration entirely
|
|
374
|
+
// and left the package looking as though it declared no subpath exports.
|
|
375
|
+
if (Array.isArray(node)) {
|
|
376
|
+
for (const element of node)
|
|
377
|
+
collectExports(element, subpaths, rootStems, rebase, currentSubpath);
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
if (node === null || typeof node !== 'object')
|
|
381
|
+
return;
|
|
382
|
+
for (const [key, value] of Object.entries(node)) {
|
|
383
|
+
if (key.startsWith('.')) {
|
|
384
|
+
// A subpath key: `"."` is the package root, `"./nest"` the subpath `nest`.
|
|
385
|
+
collectExports(value, subpaths, rootStems, rebase, key === '.' ? '' : key.replace(/^\.\//, ''));
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
388
|
+
// A condition key — stays on whatever subpath we were already resolving.
|
|
389
|
+
collectExports(value, subpaths, rootStems, rebase, currentSubpath);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
/** Walk an `imports` map (`"#env": "./src/env.node.ts"`) into stems. */
|
|
394
|
+
function collectImports(node, out, rebase, currentKey = null) {
|
|
395
|
+
if (typeof node === 'string') {
|
|
396
|
+
if (currentKey === null)
|
|
397
|
+
return;
|
|
398
|
+
out.set(currentKey, [...(out.get(currentKey) ?? []), rebase(node)]);
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
// Same ordered-fallback rule as `exports` — see `collectExports`.
|
|
402
|
+
if (Array.isArray(node)) {
|
|
403
|
+
for (const element of node)
|
|
404
|
+
collectImports(element, out, rebase, currentKey);
|
|
405
|
+
return;
|
|
406
|
+
}
|
|
407
|
+
if (node === null || typeof node !== 'object')
|
|
408
|
+
return;
|
|
409
|
+
for (const [key, value] of Object.entries(node)) {
|
|
410
|
+
collectImports(value, out, rebase, key.startsWith('#') ? key : currentKey);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
/** `"./src/index.ts"` -> `"src/index"`; leaves an extension-less path alone. */
|
|
414
|
+
function stripEntryPrefixes(entry) {
|
|
415
|
+
const withoutDot = entry.replace(/^\.\//, '').replace(/^\//, '');
|
|
416
|
+
return withoutDot.replace(/\.(ts|tsx|mts|cts|js|jsx|mjs|cjs|vue)$/, '');
|
|
417
|
+
}
|
|
418
|
+
function push(list, value) {
|
|
419
|
+
if (value !== '' && !list.includes(value))
|
|
420
|
+
list.push(value);
|
|
421
|
+
}
|
|
422
|
+
/** `/repo/packages/utils` -> `packages/utils`; the root -> `''`. */
|
|
423
|
+
function repoRelativeDir(repoRoot, dir) {
|
|
424
|
+
const rel = path.relative(repoRoot, dir).split(path.sep).join('/');
|
|
425
|
+
return rel === '.' ? '' : rel;
|
|
426
|
+
}
|
|
427
|
+
function joinRepoPath(dir, rest) {
|
|
428
|
+
return dir === '' ? rest : `${dir}/${rest}`;
|
|
429
|
+
}
|