cgraphx 2.0.2 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/code/engine/cli/analyze-config.js +320 -0
- package/dist/core/code/engine/cli/analyze.js +1086 -0
- package/dist/core/code/engine/cli/cli-message.js +83 -0
- package/dist/core/code/engine/cli/detect-changes-format.js +58 -0
- package/dist/core/code/engine/cli/embedding-dims.js +43 -0
- package/dist/core/code/engine/cli/format-elapsed.js +12 -0
- package/dist/core/code/engine/cli/help-i18n.js +144 -0
- package/dist/core/code/engine/cli/i18n/en.js +110 -0
- package/dist/core/code/engine/cli/i18n/index.js +47 -0
- package/dist/core/code/engine/cli/i18n/resources.js +9 -0
- package/dist/core/code/engine/cli/i18n/zh-CN.js +110 -0
- package/dist/core/code/engine/cli/lazy-action.js +67 -0
- package/dist/core/code/engine/cli/optional-grammars.js +136 -0
- package/dist/core/code/engine/cli/resolve-invocation.js +76 -0
- package/dist/core/code/engine/cli/status.js +156 -0
- package/dist/core/code/engine/cli/tool.js +384 -0
- package/dist/core/code/engine/config/ignore-service.js +511 -0
- package/dist/core/code/engine/config/supported-languages.js +17 -0
- package/dist/core/code/engine/core/analysis-features.js +64 -0
- package/dist/core/code/engine/core/analyzer-identity.js +2171 -0
- package/dist/core/code/engine/core/git-staleness.js +180 -0
- package/dist/core/code/engine/core/graph/graph.js +180 -0
- package/dist/core/code/engine/core/graph/import-cycles.js +106 -0
- package/dist/core/code/engine/core/graph/types.js +2 -0
- package/dist/core/code/engine/core/index-freshness.js +12 -0
- package/dist/core/code/engine/core/ingestion/binding-accumulator.js +341 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/c-cpp.js +168 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/csharp.js +9 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/dart.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/go.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/jvm.js +54 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/php.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/python.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/ruby.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/rust.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/swift.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/typescript-javascript.js +11 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/generic.js +62 -0
- package/dist/core/code/engine/core/ingestion/call-processor.js +503 -0
- package/dist/core/code/engine/core/ingestion/call-routing.js +98 -0
- package/dist/core/code/engine/core/ingestion/call-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/cfg/callee-cell-format.js +45 -0
- package/dist/core/code/engine/core/ingestion/cfg/cfg-builder.js +202 -0
- package/dist/core/code/engine/core/ingestion/cfg/collect.js +81 -0
- package/dist/core/code/engine/core/ingestion/cfg/control-dependence.js +185 -0
- package/dist/core/code/engine/core/ingestion/cfg/control-flow-context.js +130 -0
- package/dist/core/code/engine/core/ingestion/cfg/emit.js +646 -0
- package/dist/core/code/engine/core/ingestion/cfg/post-dominators.js +182 -0
- package/dist/core/code/engine/core/ingestion/cfg/reaching-def-reason-codec.js +139 -0
- package/dist/core/code/engine/core/ingestion/cfg/reaching-defs-graph.js +322 -0
- package/dist/core/code/engine/core/ingestion/cfg/reaching-defs.js +792 -0
- package/dist/core/code/engine/core/ingestion/cfg/synthetic-escape.js +305 -0
- package/dist/core/code/engine/core/ingestion/cfg/traversal-result.js +6 -0
- package/dist/core/code/engine/core/ingestion/cfg/types.js +14 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp-harvest.js +545 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp.js +590 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/call-site-harvest.js +356 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp-harvest.js +593 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp.js +871 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/dart-harvest.js +874 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/dart.js +840 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/go-harvest.js +625 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/go.js +642 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/java-harvest.js +517 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/java.js +816 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin-harvest.js +723 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin.js +813 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/php-harvest.js +630 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/php.js +725 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/python-harvest.js +776 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/python.js +562 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby-harvest.js +591 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby.js +760 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/rust-harvest.js +877 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/rust.js +562 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/scope-tree-harvest.js +120 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/swift-harvest.js +683 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/swift.js +791 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript-harvest.js +1060 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript.js +587 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/c-cpp.js +77 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/csharp.js +24 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/dart.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/go.js +28 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/jvm.js +67 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/php.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/python.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/ruby.js +13 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/rust.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/swift.js +21 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/typescript-javascript.js +31 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/generic.js +144 -0
- package/dist/core/code/engine/core/ingestion/class-types.js +2 -0
- package/dist/core/code/engine/core/ingestion/cluster-enricher.js +174 -0
- package/dist/core/code/engine/core/ingestion/community-processor.js +604 -0
- package/dist/core/code/engine/core/ingestion/constants.js +26 -0
- package/dist/core/code/engine/core/ingestion/cpp-ue-preprocessor.js +263 -0
- package/dist/core/code/engine/core/ingestion/csharp-namespace-gate.js +133 -0
- package/dist/core/code/engine/core/ingestion/di-extractors/index.js +38 -0
- package/dist/core/code/engine/core/ingestion/di-extractors/spring.js +310 -0
- package/dist/core/code/engine/core/ingestion/emit-references.js +244 -0
- package/dist/core/code/engine/core/ingestion/entry-point-scoring.js +201 -0
- package/dist/core/code/engine/core/ingestion/export-detection.js +244 -0
- package/dist/core/code/engine/core/ingestion/field-extractor.js +29 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/c-cpp.js +107 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/csharp.js +124 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/dart.js +99 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/go.js +102 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/helpers.js +198 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/jvm.js +172 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/php.js +67 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/python.js +94 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/ruby.js +79 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/rust.js +55 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/swift.js +93 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/typescript-javascript.js +59 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/generic.js +147 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/typescript.js +266 -0
- package/dist/core/code/engine/core/ingestion/field-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/filesystem-walker.js +136 -0
- package/dist/core/code/engine/core/ingestion/finalize-orchestrator.js +159 -0
- package/dist/core/code/engine/core/ingestion/framework-detection.js +432 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/analysis-features.js +38 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/annotation-arguments.js +234 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/aop-candidates.js +88 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/aop.js +487 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/auto-configuration.js +21 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-candidates.js +189 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-catalog.js +32 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-factories.js +73 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/conditionals.js +323 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/config-bindings.js +119 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/di-metadata.js +385 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/resource-injection.js +96 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/c-cpp.js +17 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/csharp.js +46 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/dart.js +59 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/go.js +30 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/jvm.js +73 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/php.js +19 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/python.js +45 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/ruby.js +20 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/rust.js +58 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/swift.js +94 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/typescript-javascript.js +26 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/csharp.js +128 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/go.js +50 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/jvm.js +112 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/php.js +80 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/python.js +75 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/resolver-factory.js +36 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/ruby.js +20 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/rust.js +79 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/standard.js +180 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/types.js +7 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/utils.js +153 -0
- package/dist/core/code/engine/core/ingestion/import-target-adapter.js +99 -0
- package/dist/core/code/engine/core/ingestion/language-config.js +391 -0
- package/dist/core/code/engine/core/ingestion/language-provider.js +25 -0
- package/dist/core/code/engine/core/ingestion/languages/c/arity-metadata.js +98 -0
- package/dist/core/code/engine/core/ingestion/languages/c/arity.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/c/capture-side-channel.js +69 -0
- package/dist/core/code/engine/core/ingestion/languages/c/captures.js +189 -0
- package/dist/core/code/engine/core/ingestion/languages/c/header-scan.js +58 -0
- package/dist/core/code/engine/core/ingestion/languages/c/import-decomposer.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/c/import-target.js +103 -0
- package/dist/core/code/engine/core/ingestion/languages/c/index.js +33 -0
- package/dist/core/code/engine/core/ingestion/languages/c/interpret.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/c/merge-bindings.js +26 -0
- package/dist/core/code/engine/core/ingestion/languages/c/query.js +210 -0
- package/dist/core/code/engine/core/ingestion/languages/c/scope-resolver.js +112 -0
- package/dist/core/code/engine/core/ingestion/languages/c/simple-hooks.js +24 -0
- package/dist/core/code/engine/core/ingestion/languages/c/static-linkage.js +109 -0
- package/dist/core/code/engine/core/ingestion/languages/c-cpp.js +506 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/adl.js +804 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/arity-metadata.js +258 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/arity.js +37 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/capture-side-channel.js +89 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/captures.js +1975 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-extractor.js +311 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-filter.js +210 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/conversion-rank.js +163 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/file-local-linkage.js +327 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/header-scan.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/import-decomposer.js +134 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/import-target.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/index.js +33 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/inline-namespaces.js +379 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/interpret.js +239 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/member-lookup.js +470 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/merge-bindings.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/query.js +763 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/range-bindings.js +230 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/scope-resolver.js +354 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/simple-hooks.js +67 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/two-phase-lookup.js +348 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/type-classifier.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/user-defined-conversions.js +128 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/accessor-unwrap.js +67 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/arity-metadata.js +49 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/arity.js +40 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/captures.js +557 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/import-decomposer.js +96 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/import-target.js +176 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/index.js +95 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/interpret.js +150 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/merge-bindings.js +58 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/namespace-siblings.js +708 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/qualified-type-names.js +62 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/query.js +578 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/receiver-binding.js +142 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/resolution-config.js +18 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/scope-resolver.js +84 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/simple-hooks.js +81 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp.js +204 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/arity-metadata.js +38 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/arity.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/built-ins.js +37 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/cache-stats.js +30 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/captures.js +1096 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/expand-wildcards.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/extension-type-preprocess.js +33 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/import-target.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/index.js +45 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/interpret.js +101 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/merge-bindings.js +42 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/query.js +246 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/receiver-binding.js +90 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/scope-resolver.js +197 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/signature-bindings.js +54 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/simple-hooks.js +61 -0
- package/dist/core/code/engine/core/ingestion/languages/dart.js +138 -0
- package/dist/core/code/engine/core/ingestion/languages/go/arity-metadata.js +71 -0
- package/dist/core/code/engine/core/ingestion/languages/go/arity.js +17 -0
- package/dist/core/code/engine/core/ingestion/languages/go/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/go/captures.js +492 -0
- package/dist/core/code/engine/core/ingestion/languages/go/expand-wildcards.js +97 -0
- package/dist/core/code/engine/core/ingestion/languages/go/generic-type-parameters.js +146 -0
- package/dist/core/code/engine/core/ingestion/languages/go/import-decomposer.js +47 -0
- package/dist/core/code/engine/core/ingestion/languages/go/import-target.js +70 -0
- package/dist/core/code/engine/core/ingestion/languages/go/index.js +39 -0
- package/dist/core/code/engine/core/ingestion/languages/go/interface-impls.js +955 -0
- package/dist/core/code/engine/core/ingestion/languages/go/interpret.js +177 -0
- package/dist/core/code/engine/core/ingestion/languages/go/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/go/method-owners.js +131 -0
- package/dist/core/code/engine/core/ingestion/languages/go/namespace-mirror.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/go/package-clause.js +79 -0
- package/dist/core/code/engine/core/ingestion/languages/go/package-siblings.js +83 -0
- package/dist/core/code/engine/core/ingestion/languages/go/query.js +298 -0
- package/dist/core/code/engine/core/ingestion/languages/go/range-binding.js +127 -0
- package/dist/core/code/engine/core/ingestion/languages/go/receiver-binding.js +24 -0
- package/dist/core/code/engine/core/ingestion/languages/go/scope-resolver.js +75 -0
- package/dist/core/code/engine/core/ingestion/languages/go/simple-hooks.js +31 -0
- package/dist/core/code/engine/core/ingestion/languages/go/type-binding.js +279 -0
- package/dist/core/code/engine/core/ingestion/languages/go.js +160 -0
- package/dist/core/code/engine/core/ingestion/languages/index.js +66 -0
- package/dist/core/code/engine/core/ingestion/languages/java/analysis-features.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/java/arity-metadata.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/java/arity.js +27 -0
- package/dist/core/code/engine/core/ingestion/languages/java/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/java/capture-side-channel.js +123 -0
- package/dist/core/code/engine/core/ingestion/languages/java/captures.js +791 -0
- package/dist/core/code/engine/core/ingestion/languages/java/import-decomposer.js +88 -0
- package/dist/core/code/engine/core/ingestion/languages/java/import-target.js +103 -0
- package/dist/core/code/engine/core/ingestion/languages/java/index.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/java/interpret.js +146 -0
- package/dist/core/code/engine/core/ingestion/languages/java/merge-bindings.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/java/package-facts.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/java/package-siblings.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/java/query.js +319 -0
- package/dist/core/code/engine/core/ingestion/languages/java/receiver-binding.js +98 -0
- package/dist/core/code/engine/core/ingestion/languages/java/scope-resolver.js +213 -0
- package/dist/core/code/engine/core/ingestion/languages/java/simple-hooks.js +39 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-aop.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-bean-metadata.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-conditionals.js +52 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-config-bindings.js +222 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-di.js +165 -0
- package/dist/core/code/engine/core/ingestion/languages/java.js +192 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/arity.js +15 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/captures.js +1122 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/import-target.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/index.js +109 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/interpret.js +45 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/query.js +659 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/scope-resolver.js +78 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/simple-hooks.js +44 -0
- package/dist/core/code/engine/core/ingestion/languages/jvm/package-facts.js +46 -0
- package/dist/core/code/engine/core/ingestion/languages/jvm/package-siblings.js +200 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/arity-metadata.js +23 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/arity.js +18 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/capture-side-channel.js +160 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/captures.js +1262 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/companion-scopes.js +72 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/import-decomposer.js +40 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/import-target.js +135 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/index.js +26 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/interpret.js +75 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/merge-bindings.js +28 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/owners.js +134 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/package-facts.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/package-siblings.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/query.js +243 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/receiver-binding.js +103 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/scope-resolver.js +207 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/simple-hooks.js +42 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-aop.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-bean-metadata.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-conditionals.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-di.js +304 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin.js +189 -0
- package/dist/core/code/engine/core/ingestion/languages/php/arity-metadata.js +66 -0
- package/dist/core/code/engine/core/ingestion/languages/php/arity.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/php/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/php/captures.js +1166 -0
- package/dist/core/code/engine/core/ingestion/languages/php/import-decomposer.js +238 -0
- package/dist/core/code/engine/core/ingestion/languages/php/import-target.js +213 -0
- package/dist/core/code/engine/core/ingestion/languages/php/index.js +85 -0
- package/dist/core/code/engine/core/ingestion/languages/php/interpret.js +256 -0
- package/dist/core/code/engine/core/ingestion/languages/php/merge-bindings.js +50 -0
- package/dist/core/code/engine/core/ingestion/languages/php/namespace-siblings.js +353 -0
- package/dist/core/code/engine/core/ingestion/languages/php/query.js +391 -0
- package/dist/core/code/engine/core/ingestion/languages/php/receiver-binding.js +135 -0
- package/dist/core/code/engine/core/ingestion/languages/php/scope-resolver.js +361 -0
- package/dist/core/code/engine/core/ingestion/languages/php/simple-hooks.js +116 -0
- package/dist/core/code/engine/core/ingestion/languages/php.js +302 -0
- package/dist/core/code/engine/core/ingestion/languages/python/arity-metadata.js +49 -0
- package/dist/core/code/engine/core/ingestion/languages/python/arity.js +41 -0
- package/dist/core/code/engine/core/ingestion/languages/python/cache-stats.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/python/captures.js +299 -0
- package/dist/core/code/engine/core/ingestion/languages/python/depends-references.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/python/import-decomposer.js +115 -0
- package/dist/core/code/engine/core/ingestion/languages/python/import-target.js +440 -0
- package/dist/core/code/engine/core/ingestion/languages/python/index-stats.js +30 -0
- package/dist/core/code/engine/core/ingestion/languages/python/index.js +96 -0
- package/dist/core/code/engine/core/ingestion/languages/python/interpret.js +430 -0
- package/dist/core/code/engine/core/ingestion/languages/python/merge-bindings.js +47 -0
- package/dist/core/code/engine/core/ingestion/languages/python/query.js +323 -0
- package/dist/core/code/engine/core/ingestion/languages/python/receiver-binding.js +310 -0
- package/dist/core/code/engine/core/ingestion/languages/python/scope-resolver.js +80 -0
- package/dist/core/code/engine/core/ingestion/languages/python/simple-hooks.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/python.js +140 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/arity.js +41 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/captures.js +864 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/import-target.js +88 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/index.js +29 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/interpret.js +115 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/query.js +349 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/receiver-binding.js +70 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/scope-resolver.js +263 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/simple-hooks.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby.js +215 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/arity.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/captures.js +304 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/import-decomposer.js +167 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/import-target.js +108 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/index.js +29 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/interpret.js +201 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/method-owners.js +76 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/module-path.js +222 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/qualified-call.js +482 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/query.js +280 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/range-binding.js +687 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/receiver-binding.js +148 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/scope-resolver.js +151 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/simple-hooks.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/rust.js +183 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/arity-metadata.js +44 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/arity.js +45 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/base-type.js +30 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/captures.js +594 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/conditional-directive-preprocess.js +256 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/implicit-imports.js +60 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/import-decomposer.js +87 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/import-target.js +84 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/index.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/interpret.js +93 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/merge-bindings.js +51 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/query.js +226 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/receiver-binding.js +169 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/scope-resolver.js +192 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/sibling-type-bindings.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/signature-bindings.js +69 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/simple-hooks.js +65 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/target-grouping.js +97 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/target-siblings.js +74 -0
- package/dist/core/code/engine/core/ingestion/languages/swift.js +246 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/arity-metadata.js +106 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/arity.js +57 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/array-callback.js +58 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/cache-stats.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/captures.js +956 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-export-assignment.js +535 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-module-exports.js +196 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/import-decomposer.js +374 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/import-target.js +65 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/index.js +108 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/interpret.js +344 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/merge-bindings.js +161 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/nuxt-auto-imports.js +325 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/query.js +1328 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/receiver-binding.js +201 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/scope-resolver.js +293 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/simple-hooks.js +139 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript.js +455 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/captures.js +70 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/import-target.js +61 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/index.js +55 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/scope-resolver.js +295 -0
- package/dist/core/code/engine/core/ingestion/languages/vue.js +96 -0
- package/dist/core/code/engine/core/ingestion/local-symbol-pruner.js +68 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/csharp.js +290 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/dart.js +392 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/go.js +179 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/jvm.js +350 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/php.js +306 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/python.js +312 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/ruby.js +289 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/rust.js +198 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/swift.js +286 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/typescript-javascript.js +341 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/generic.js +209 -0
- package/dist/core/code/engine/core/ingestion/method-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/model/field-registry.js +41 -0
- package/dist/core/code/engine/core/ingestion/model/index.js +52 -0
- package/dist/core/code/engine/core/ingestion/model/method-registry.js +138 -0
- package/dist/core/code/engine/core/ingestion/model/owned-members-lookup.js +46 -0
- package/dist/core/code/engine/core/ingestion/model/registration-table.js +234 -0
- package/dist/core/code/engine/core/ingestion/model/resolve.js +183 -0
- package/dist/core/code/engine/core/ingestion/model/scope-resolution-indexes.js +43 -0
- package/dist/core/code/engine/core/ingestion/model/semantic-model.js +179 -0
- package/dist/core/code/engine/core/ingestion/model/symbol-table.js +216 -0
- package/dist/core/code/engine/core/ingestion/model/type-registry.js +84 -0
- package/dist/core/code/engine/core/ingestion/mro-processor.js +709 -0
- package/dist/core/code/engine/core/ingestion/parsing-processor.js +312 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/communities.js +69 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/cross-file.js +71 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/di.js +338 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/http-api-calls.js +312 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/index.js +54 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/mro.js +40 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/orm.js +78 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/parse-impl.js +1286 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/parse.js +41 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/processes.js +193 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/prune-local-symbols.js +29 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/registry.js +52 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/routes.js +409 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/rpc-edges.js +301 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/runner.js +207 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/scan.js +49 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-aop.js +442 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-auto-configuration.js +264 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-config.js +440 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/structure.js +38 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/tools.js +89 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/types.js +40 -0
- package/dist/core/code/engine/core/ingestion/pipeline.js +152 -0
- package/dist/core/code/engine/core/ingestion/process-processor.js +325 -0
- package/dist/core/code/engine/core/ingestion/resolve-references.js +205 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/constant-resolver.js +135 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/django-root-discovery.js +221 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/django.js +428 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/expo.js +39 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/fastapi-router-bindings.js +264 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/laravel.js +501 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/middleware.js +175 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/nextjs.js +81 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/php.js +25 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/python-const-resolver.js +307 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/response-shapes.js +299 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/route-path.js +71 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/spring-shared.js +310 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/spring.js +441 -0
- package/dist/core/code/engine/core/ingestion/scope-extractor-bridge.js +60 -0
- package/dist/core/code/engine/core/ingestion/scope-extractor.js +1373 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/contract/scope-resolver.js +282 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +72 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/edges.js +194 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/ids.js +472 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +49 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +43 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +274 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +93 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/callable-value-flow.js +1240 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/compound-receiver.js +1174 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/free-call-fallback.js +873 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/imported-return-types.js +226 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/mro.js +107 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/overload-narrowing.js +441 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/property-dispatch.js +122 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1720 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/phase.js +395 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +208 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/registry.js +49 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/run.js +632 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +112 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/resolution-outcome.js +41 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/scope/namespace-targets.js +81 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/scope/walkers.js +1835 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/unresolved-receivers.js +242 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/utils/definition-id.js +22 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/workspace-index.js +151 -0
- package/dist/core/code/engine/core/ingestion/structure-processor.js +40 -0
- package/dist/core/code/engine/core/ingestion/tree-sitter-queries.js +2244 -0
- package/dist/core/code/engine/core/ingestion/ts-js-hoc-utils.js +115 -0
- package/dist/core/code/engine/core/ingestion/type-env.js +1136 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/c-cpp.js +555 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/csharp.js +570 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/dart.js +372 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/go.js +508 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/jvm.js +875 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/php.js +537 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/python.js +477 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/ruby.js +380 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/rust.js +502 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/shared.js +843 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/swift.js +490 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/types.js +2 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/typescript.js +690 -0
- package/dist/core/code/engine/core/ingestion/utils/ast-helpers.js +1693 -0
- package/dist/core/code/engine/core/ingestion/utils/call-analysis.js +779 -0
- package/dist/core/code/engine/core/ingestion/utils/callable-flow-captures.js +932 -0
- package/dist/core/code/engine/core/ingestion/utils/callable-labels.js +49 -0
- package/dist/core/code/engine/core/ingestion/utils/deferred-resolution-profile.js +151 -0
- package/dist/core/code/engine/core/ingestion/utils/effective-ram.js +67 -0
- package/dist/core/code/engine/core/ingestion/utils/env.js +60 -0
- package/dist/core/code/engine/core/ingestion/utils/event-loop.js +9 -0
- package/dist/core/code/engine/core/ingestion/utils/graph-sort.js +103 -0
- package/dist/core/code/engine/core/ingestion/utils/heap-probe.js +45 -0
- package/dist/core/code/engine/core/ingestion/utils/heritage-marker.js +47 -0
- package/dist/core/code/engine/core/ingestion/utils/line-base.js +24 -0
- package/dist/core/code/engine/core/ingestion/utils/max-file-size.js +59 -0
- package/dist/core/code/engine/core/ingestion/utils/method-props.js +198 -0
- package/dist/core/code/engine/core/ingestion/utils/qualified-name.js +73 -0
- package/dist/core/code/engine/core/ingestion/utils/receiver-chain-captures.js +60 -0
- package/dist/core/code/engine/core/ingestion/utils/receiver-chain-codec.js +188 -0
- package/dist/core/code/engine/core/ingestion/utils/scope-tree-walk.js +36 -0
- package/dist/core/code/engine/core/ingestion/utils/symbol-labels.js +48 -0
- package/dist/core/code/engine/core/ingestion/utils/template-arguments.js +187 -0
- package/dist/core/code/engine/core/ingestion/utils/type-parameters.js +209 -0
- package/dist/core/code/engine/core/ingestion/utils/verbose.js +6 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/c-cpp.js +133 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/csharp.js +66 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/dart.js +111 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/go.js +153 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/jvm.js +145 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/php.js +61 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/python.js +104 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/ruby.js +55 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/rust.js +79 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/swift.js +91 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/typescript-javascript.js +86 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/generic.js +111 -0
- package/dist/core/code/engine/core/ingestion/variable-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/vue-sfc-extractor.js +544 -0
- package/dist/core/code/engine/core/ingestion/workers/callable-id.js +122 -0
- package/dist/core/code/engine/core/ingestion/workers/clone-safety.js +470 -0
- package/dist/core/code/engine/core/ingestion/workers/parse-worker.js +2456 -0
- package/dist/core/code/engine/core/ingestion/workers/post-result.js +90 -0
- package/dist/core/code/engine/core/ingestion/workers/quarantine.js +41 -0
- package/dist/core/code/engine/core/ingestion/workers/result-merge.js +59 -0
- package/dist/core/code/engine/core/ingestion/workers/worker-pool.js +1725 -0
- package/dist/core/code/engine/core/ingestion/workspace-config.js +139 -0
- package/dist/core/code/engine/core/lbug/conn-lock.js +72 -0
- package/dist/core/code/engine/core/lbug/csv-generator.js +710 -0
- package/dist/core/code/engine/core/lbug/cypher-escape.js +24 -0
- package/dist/core/code/engine/core/lbug/extension-load-error.js +339 -0
- package/dist/core/code/engine/core/lbug/extension-loader.js +261 -0
- package/dist/core/code/engine/core/lbug/graph-emit-sink.js +584 -0
- package/dist/core/code/engine/core/lbug/lbug-adapter.js +2703 -0
- package/dist/core/code/engine/core/lbug/lbug-config.js +1029 -0
- package/dist/core/code/engine/core/lbug/native-check.js +435 -0
- package/dist/core/code/engine/core/lbug/pool-adapter.js +973 -0
- package/dist/core/code/engine/core/lbug/query-params.js +25 -0
- package/dist/core/code/engine/core/lbug/query-result-utils.js +31 -0
- package/dist/core/code/engine/core/lbug/rel-pair-routing.js +373 -0
- package/dist/core/code/engine/core/lbug/schema.js +771 -0
- package/dist/core/code/engine/core/lbug/shutdown-helpers.js +40 -0
- package/dist/core/code/engine/core/lbug/sidecar-recovery.js +716 -0
- package/dist/core/code/engine/core/lbug/stdio-capture.js +49 -0
- package/dist/core/code/engine/core/lbug/sync-csv-writer.js +115 -0
- package/dist/core/code/engine/core/lbug/wal-checkpoint-driver.js +215 -0
- package/dist/core/code/engine/core/lbug/wal-driver-state.js +28 -0
- package/dist/core/code/engine/core/logger.js +339 -0
- package/dist/core/code/engine/core/platform/capabilities.js +91 -0
- package/dist/core/code/engine/core/run-analyze.js +1098 -0
- package/dist/core/code/engine/core/tree-sitter/parser-loader.js +281 -0
- package/dist/core/code/engine/core/tree-sitter/safe-parse.js +258 -0
- package/dist/core/code/engine/core/tree-sitter/vendored-grammars.js +64 -0
- package/dist/core/code/engine/lib/utils.js +121 -0
- package/dist/core/code/engine/mcp/core/lbug-adapter.js +27 -0
- package/dist/core/code/engine/mcp/local/aop-metadata.js +230 -0
- package/dist/core/code/engine/mcp/local/bean-metadata.js +49 -0
- package/dist/core/code/engine/mcp/local/limits.js +15 -0
- package/dist/core/code/engine/mcp/local/line-display.js +6 -0
- package/dist/core/code/engine/mcp/local/local-backend.js +4142 -0
- package/dist/core/code/engine/storage/branch-index.js +72 -0
- package/dist/core/code/engine/storage/file-hash.js +95 -0
- package/dist/core/code/engine/storage/fs-atomic.js +34 -0
- package/dist/core/code/engine/storage/git.js +555 -0
- package/dist/core/code/engine/storage/index-lock.js +664 -0
- package/dist/core/code/engine/storage/parse-cache.js +650 -0
- package/dist/core/code/engine/storage/parsedfile-store.js +620 -0
- package/dist/core/code/engine/storage/repo-manager.js +1061 -0
- package/dist/core/code/engine/storage/scope-index-store.js +247 -0
- package/dist/core/code/engine/types/pipeline.js +2 -0
- package/dist/core/code/scripts/install-duckdb-extension.mjs +125 -0
- package/dist/core/code/scripts/resolve-analyze-cmd.cjs +346 -0
- package/dist/core/code/shared/graph/types.js +8 -0
- package/dist/core/code/shared/index.js +105 -0
- package/dist/core/code/shared/integrations/circuit-breaker.js +242 -0
- package/dist/core/code/shared/integrations/resilient-fetch.js +224 -0
- package/dist/core/code/shared/integrations/retry.js +70 -0
- package/dist/core/code/shared/integrations/understand-quickly.js +145 -0
- package/dist/core/code/shared/language-detection.js +162 -0
- package/dist/core/code/shared/languages.js +27 -0
- package/dist/core/code/shared/lbug/schema-constants.js +98 -0
- package/dist/core/code/shared/mro-strategy.js +2 -0
- package/dist/core/code/shared/pipeline.js +5 -0
- package/dist/core/code/shared/scope-resolution/callable-flow-site.js +11 -0
- package/dist/core/code/shared/scope-resolution/def-index.js +53 -0
- package/dist/core/code/shared/scope-resolution/evidence-weights.js +87 -0
- package/dist/core/code/shared/scope-resolution/finalize-algorithm.js +807 -0
- package/dist/core/code/shared/scope-resolution/language-classification.js +46 -0
- package/dist/core/code/shared/scope-resolution/method-dispatch-index.js +100 -0
- package/dist/core/code/shared/scope-resolution/module-scope-index.js +59 -0
- package/dist/core/code/shared/scope-resolution/origin-priority.js +23 -0
- package/dist/core/code/shared/scope-resolution/parsed-file.js +54 -0
- package/dist/core/code/shared/scope-resolution/position-index.js +136 -0
- package/dist/core/code/shared/scope-resolution/qualified-name-index.js +77 -0
- package/dist/core/code/shared/scope-resolution/reference-site.js +24 -0
- package/dist/core/code/shared/scope-resolution/registries/class-registry.js +32 -0
- package/dist/core/code/shared/scope-resolution/registries/context.js +52 -0
- package/dist/core/code/shared/scope-resolution/registries/evidence.js +152 -0
- package/dist/core/code/shared/scope-resolution/registries/field-registry.js +33 -0
- package/dist/core/code/shared/scope-resolution/registries/lookup-core.js +392 -0
- package/dist/core/code/shared/scope-resolution/registries/lookup-qualified.js +58 -0
- package/dist/core/code/shared/scope-resolution/registries/macro-registry.js +34 -0
- package/dist/core/code/shared/scope-resolution/registries/method-registry.js +34 -0
- package/dist/core/code/shared/scope-resolution/registries/tie-breaks.js +63 -0
- package/dist/core/code/shared/scope-resolution/resolve-type-ref.js +128 -0
- package/dist/core/code/shared/scope-resolution/scope-id.js +49 -0
- package/dist/core/code/shared/scope-resolution/scope-tree.js +225 -0
- package/dist/core/code/shared/scope-resolution/symbol-definition.js +12 -0
- package/dist/core/code/shared/scope-resolution/types.js +25 -0
- package/dist/core/code/shared/test-helpers.js +17 -0
- package/dist/core/code/vendor/leiden/index.cjs +355 -0
- package/dist/core/code/vendor/leiden/utils.cjs +419 -0
- package/dist/core/timeline/cli.d.ts.map +1 -1
- package/dist/core/timeline/cli.js +13 -6
- package/dist/core/timeline/cli.js.map +1 -1
- package/dist/core/timeline/debris.d.ts +20 -0
- package/dist/core/timeline/debris.d.ts.map +1 -0
- package/dist/core/timeline/debris.js +124 -0
- package/dist/core/timeline/debris.js.map +1 -0
- package/dist/core/timeline/hook-runner.d.ts.map +1 -1
- package/dist/core/timeline/hook-runner.js +3 -1
- package/dist/core/timeline/hook-runner.js.map +1 -1
- package/dist/core/timeline/hooks.d.ts.map +1 -1
- package/dist/core/timeline/hooks.js +13 -5
- package/dist/core/timeline/hooks.js.map +1 -1
- package/dist/core/timeline/installer.d.ts +2 -0
- package/dist/core/timeline/installer.d.ts.map +1 -1
- package/dist/core/timeline/installer.js +12 -0
- package/dist/core/timeline/installer.js.map +1 -1
- package/dist/core/timeline/project-root.d.ts +21 -0
- package/dist/core/timeline/project-root.d.ts.map +1 -0
- package/dist/core/timeline/project-root.js +83 -0
- package/dist/core/timeline/project-root.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,650 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Chunk-level content-addressed parse cache.
|
|
4
|
+
*
|
|
5
|
+
* The pipeline always parses every file (correctness invariant: cross-file
|
|
6
|
+
* resolution and downstream phases need full graph data). What this cache
|
|
7
|
+
* does is skip the tree-sitter worker dispatch when a chunk's contents
|
|
8
|
+
* haven't changed since the last run.
|
|
9
|
+
*
|
|
10
|
+
* Granularity: chunk-level. The parse phase chunks files into ~20MB byte
|
|
11
|
+
* budgets. The cache key is `sha256(joined(filePath:contentHash for each
|
|
12
|
+
* file in the chunk, sorted))`. A change to a single file invalidates only
|
|
13
|
+
* that file's chunk — typically 1 of ~50 chunks on a 1000-file repo.
|
|
14
|
+
*
|
|
15
|
+
* Why not per-file:
|
|
16
|
+
* - Workers process sub-batches and emit aggregated `ParseWorkerResult`s.
|
|
17
|
+
* Splitting back to per-file would require reworking the worker contract.
|
|
18
|
+
* - Chunk-level invalidation gives a useful speedup floor (98% on a single
|
|
19
|
+
* 1-of-50 invalidated chunk) without touching the worker.
|
|
20
|
+
*
|
|
21
|
+
* Survives `--force` because it's content-addressed: the same bytes always
|
|
22
|
+
* produce the same key. `--force` only matters for the LadybugDB writeback;
|
|
23
|
+
* the cache itself is always safe to reuse.
|
|
24
|
+
*/
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.pruneCache = exports.saveParseCache = exports.loadParseCache = exports.persistParseCacheChunk = exports.loadParseCacheChunk = exports.slimParseWorkerResultsForCache = exports.mapReviver = exports.mapReplacer = exports.computeChunkHash = exports.fileContentHash = exports.PARSE_CACHE_VERSION = void 0;
|
|
30
|
+
const crypto_1 = require("crypto");
|
|
31
|
+
const module_1 = require("module");
|
|
32
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
33
|
+
const path_1 = __importDefault(require("path"));
|
|
34
|
+
/**
|
|
35
|
+
* Cache version composed of:
|
|
36
|
+
* - A schema bump knob (`SCHEMA_BUMP`) for hand-controlled invalidation
|
|
37
|
+
* when ParseWorkerResult shape or upstream parse semantics change.
|
|
38
|
+
* - The current `gitnexus` npm package version, read at module load.
|
|
39
|
+
* Any release that ships an updated tree-sitter grammar or revised
|
|
40
|
+
* extractor logic implies a version bump in package.json, which
|
|
41
|
+
* automatically invalidates the on-disk cache. Without this, a user
|
|
42
|
+
* running `npm i -g cgraph@latest` after a parser-affecting
|
|
43
|
+
* release would silently replay pre-upgrade ParseWorkerResults
|
|
44
|
+
* against the new graph schema (Bugbot/Claude review on #1479).
|
|
45
|
+
*
|
|
46
|
+
* On version mismatch, `loadParseCache` returns an empty cache and the
|
|
47
|
+
* next save overwrites the on-disk file with the new version baked in.
|
|
48
|
+
*/
|
|
49
|
+
// Bumped to 4 in #1983: on-disk parse-cache shards omit legacy DAG fields
|
|
50
|
+
// (`calls`, `assignments`, `constructorBindings`) unused after RING4-1 (#942)
|
|
51
|
+
// and the worker `parsedFiles` (the worker writes those to the disk ParsedFile
|
|
52
|
+
// store instead). #2038 added a DURABLE, content-addressed ParsedFile store
|
|
53
|
+
// (`parsedfile-cache/`, see parsedfile-store.ts) keyed by chunk hash that
|
|
54
|
+
// mirrors THIS cache's lifecycle — version-gated by PARSE_CACHE_VERSION, pruned
|
|
55
|
+
// in lockstep to the surviving keys. On a warm parse-cache hit the chunk's
|
|
56
|
+
// ParsedFiles are restored from it, so scope-resolution does NOT re-extract on
|
|
57
|
+
// the main thread (the #1983 OOM). Because the two stores share this version,
|
|
58
|
+
// any future change to the `ParsedFile` serialization shape MUST bump
|
|
59
|
+
// SCHEMA_BUMP so both invalidate in lockstep.
|
|
60
|
+
// v35: Java/Kotlin Spring @Bean factory and @Resource side-channel facts
|
|
61
|
+
// (#2413). ParsedFile results are content-addressed and replayed verbatim, so
|
|
62
|
+
// the feature/schema inventory alone cannot invalidate pre-#2413 captures.
|
|
63
|
+
// (Cut as v32 on this branch; `main` took 32 for #2742 and 33/34 for #2747
|
|
64
|
+
// first, so this series is renumbered at merge time — see the v21 note.)
|
|
65
|
+
// v34: the receiver-chain capture is emitted by ALL 14 language emitters, not
|
|
66
|
+
// just TypeScript. v33 landed with the TypeScript-only emission; the rollout to
|
|
67
|
+
// the other 13 languages changed the capture set AGAIN, so a cache stamped 33 by
|
|
68
|
+
// an intermediate build of that series is not equivalent to one stamped at this
|
|
69
|
+
// commit — it would be treated as current while every non-TypeScript file
|
|
70
|
+
// replayed pre-rollout captures, leaving the feature silently inert for 13 of 14
|
|
71
|
+
// languages. Bumped there so the version tracks the FINAL capture set rather
|
|
72
|
+
// than the first divergence.
|
|
73
|
+
// v33: TypeScript call matches carry `@reference.receiver-chain`, a compact
|
|
74
|
+
// encoding of a receiver that is itself an expression.
|
|
75
|
+
// v32: Rust items are qualified by their enclosing `mod` chain (#2742). The
|
|
76
|
+
// qualified name is computed in the parse worker, so a warm cache replays the
|
|
77
|
+
// old unqualified ids verbatim and the collapse persists.
|
|
78
|
+
// v31: Rust `mod_item` gained `@declaration.namespace` and scoped call sites
|
|
79
|
+
// gained `@reference.qualified-name` (#2730). Both are PARSE-TIME captures, so a
|
|
80
|
+
// warm cache replays the old capture set verbatim: `rawQualifiedName` comes back
|
|
81
|
+
// undefined and no Namespace def exists to hang a module prefix on, which turns
|
|
82
|
+
// the whole module-qualified resolution tier into a no-op on unchanged files.
|
|
83
|
+
// Re-checked against origin/main at commit time per the v29 note below.
|
|
84
|
+
// v29: closure-binding declaration rules for PHP/Rust/Kotlin/Ruby/Dart, a Rust
|
|
85
|
+
// graph node for `let f = || …`, a Dart closure scope, and function-local VALUES
|
|
86
|
+
// (Variable/Const/Property/Static) qualified by their enclosing callable plus
|
|
87
|
+
// position (#2699 parts A1 + B). All parse-time, so a warm cache would replay
|
|
88
|
+
// the old captures and the pre-qualification ids verbatim.
|
|
89
|
+
//
|
|
90
|
+
// This is 29 and not 28 because of the exact collision the v21 note below warns
|
|
91
|
+
// about: this branch cut at 27 and bumped to 28, while #2415 bumped 27 -> 28 and
|
|
92
|
+
// merged FIRST. Re-checking against origin/main at merge time — not at branch
|
|
93
|
+
// time — is what caught it; leaving it at 28 would have shipped this change with
|
|
94
|
+
// NO parse-cache invalidation, so every warm cache keeps serving the pre-fix
|
|
95
|
+
// captures and ids.
|
|
96
|
+
// v28: Java/Kotlin capture side-channels persist Spring condition facts and
|
|
97
|
+
// annotation-source line numbers (#2415).
|
|
98
|
+
// v26: the enclosing-callable walk stops at class bodies and anonymous-class
|
|
99
|
+
// construction sites (#2699 follow-up); a v25 cache replays worker results carrying the
|
|
100
|
+
// wrong Java anonymous-class ids. Cached results are replayed verbatim — including
|
|
101
|
+
// across `--force` — so without this bump a warm cache keeps serving them.
|
|
102
|
+
// v25: function-local callables are qualified by their enclosing-callable chain
|
|
103
|
+
// plus their own position, and JS/TS gain block scopes (#2699). Both the node
|
|
104
|
+
// ids AND the scope tree in a cached worker result are therefore stale. Cached
|
|
105
|
+
// results are replayed verbatim — including across `--force` — so without this
|
|
106
|
+
// bump a warm cache keeps serving the colliding ids and the block-less scopes.
|
|
107
|
+
// v24: function scopes carry `Scope.ownsReceivers`, marking the JS/TS forms
|
|
108
|
+
// that bind their own `this` (#2701). The flag lives on the cached `Scope`, so
|
|
109
|
+
// without this bump a warm cache replays scopes that lack it and every `this`
|
|
110
|
+
// inside an ordinary `function` keeps resolving to the enclosing class —
|
|
111
|
+
// verified by probe: `--force` alone does NOT re-derive it.
|
|
112
|
+
// v23: closure bindings emit callable nodes in Dart, Ruby, Java, C# and PHP
|
|
113
|
+
// (plus JS/TS `var`), and Dart/PHP gain the scope declarations and flow
|
|
114
|
+
// captures their forms were missing (#2693). Cached worker results are replayed
|
|
115
|
+
// verbatim, so without this bump a warm cache keeps serving the old labels.
|
|
116
|
+
// v22: `const X = <arrow | function-expression>` emits one `Function` node
|
|
117
|
+
// instead of a `Function` plus an edgeless `Const` twin (#2687). Cached worker
|
|
118
|
+
// results are replayed verbatim — including across `--force` — so without this
|
|
119
|
+
// bump a warm cache keeps serving the old two-node set.
|
|
120
|
+
// v21: TWO changes share this number — a collision, not a typo. #2632
|
|
121
|
+
// (Java/Kotlin Spring DI facts: constructor, field/property and method
|
|
122
|
+
// injection sites plus bean-name and @Primary provider metadata) bumped 20 -> 21
|
|
123
|
+
// and merged first; #2653 (Java local class/enum/record/interface captures using
|
|
124
|
+
// javac-compatible, source-type-relative JLS 13.1 identities and
|
|
125
|
+
// declaration-to-block scopes, #2562) had branched at 20, bumped to 21 as well,
|
|
126
|
+
// and merged second — so it shipped with NO invalidation of its own. An index
|
|
127
|
+
// already stamped 21 by the first change was treated as current by the second
|
|
128
|
+
// and kept serving stale local-class identities from the warm cache. Harmless
|
|
129
|
+
// now (anything below the current value is rejected), and left as-is because
|
|
130
|
+
// both genuinely shipped as 21 — renumbering would misstate history. Read this
|
|
131
|
+
// as the reason to re-check SCHEMA_BUMP against origin/main immediately before
|
|
132
|
+
// merging, not just when the branch is cut; the same collision hit
|
|
133
|
+
// the DB schema version in #2653/#2654 (that constant is gone — the DB side is
|
|
134
|
+
// a derived fingerprint now, see SCHEMA_FINGERPRINT; SCHEMA_BUMP below is still
|
|
135
|
+
// hand-maintained because no declarative artifact describes a capture set).
|
|
136
|
+
// v27: generator EXPRESSIONS bound to a name emit a callable definition capture,
|
|
137
|
+
// and nested-callable caller attribution appends the localIdentity suffix the
|
|
138
|
+
// definition phase already used. Both are parse-time, so a warm cache would
|
|
139
|
+
// otherwise replay the old captures and ids verbatim.
|
|
140
|
+
// v30/schema v22: CommonJS export capture emission (#2723) — new @definition/@declaration
|
|
141
|
+
// captures for exports.X, aliased receivers, module-level `this`, re-export
|
|
142
|
+
// forwarding and `module.exports = fn`, plus prototype/`this` Methods. A warm
|
|
143
|
+
// cache would otherwise replay the pre-fix captures verbatim.
|
|
144
|
+
// v20: Java/Kotlin capture side-channels persist package and class-annotation
|
|
145
|
+
// facts for shared Spring Bean resolution.
|
|
146
|
+
// v19: Java enum constant bodies emit E$N Class nodes; anonymous naming uses
|
|
147
|
+
// JLS 13.1 immediate-host chains (#2555).
|
|
148
|
+
// v18: Worker$N anonymous bodies. v17: callable-value-flow operand identity.
|
|
149
|
+
// v16: direct callee identity.
|
|
150
|
+
// v36: bound-callable graph `startLine` follows the initializer so multi-line
|
|
151
|
+
// closure bindings join the scope channel (#2735). Warm cache would otherwise
|
|
152
|
+
// keep serving wrapper-line startLines and drop the CALLS edge.
|
|
153
|
+
// v37: Java/Kotlin capture side-channels include Spring AOP owner/advice facts
|
|
154
|
+
// (#2416). Warm cache entries at v36 do not carry those facts and would silently
|
|
155
|
+
// omit ADVISED_BY evidence.
|
|
156
|
+
// v38: Swift nested conditional-compilation directives are blanked before the
|
|
157
|
+
// parse (#2771), so a class body that previously error-recovered away now
|
|
158
|
+
// survives. The chunk key hashes raw on-disk bytes and `preprocessSource` runs
|
|
159
|
+
// after it is computed, so unchanged Swift files would otherwise replay their
|
|
160
|
+
// pre-fix `ParseWorkerResult` verbatim — including across `--force`. Allocated
|
|
161
|
+
// on `main`, NOT by this branch — kept so the number is not reused a third time.
|
|
162
|
+
// v39: receiver-chain wire format v2 — the encoded chain gained name-free
|
|
163
|
+
// `await` and `index` step kinds, so the VERSION prefix moved 1 -> 2 and every
|
|
164
|
+
// persisted chain string changed. A v2 decoder REFUSES a v1 payload (that is
|
|
165
|
+
// the point: a chain missing its await or index hop decodes cleanly as a
|
|
166
|
+
// different, shorter chain and would type the receiver against the wrong
|
|
167
|
+
// member), so a stale cache replays chains this build silently discards —
|
|
168
|
+
// the feature degrades to the text cascade with no error anywhere. Bumped so
|
|
169
|
+
// the stale cache is rejected rather than half-read.
|
|
170
|
+
//
|
|
171
|
+
// NUMBERED 39, AFTER TWO REALLOCATIONS. This branch first used 37; `main` took
|
|
172
|
+
// 37 for Spring AOP (#2416) mid-flight, so it moved to 38; `main` then took 38
|
|
173
|
+
// for the Swift directive fix (#2771), landing on the branch's number AGAIN.
|
|
174
|
+
// That is the EIGHTH collision in this series and the SECOND exact clash — two
|
|
175
|
+
// incompatible schemas claiming one number, twice running. The lesson is not
|
|
176
|
+
// "pick a bigger number": it is that the check must happen immediately before
|
|
177
|
+
// merge, because the window between review and merge is exactly when `main`
|
|
178
|
+
// allocates. Re-check against origin/main before merging this.
|
|
179
|
+
// v40: inference-typed class fields emit type-binding captures in SIX languages
|
|
180
|
+
// (#2807) — TypeScript/JavaScript `public_field_definition|field_definition` with a
|
|
181
|
+
// `new_expression` value and `this.<field> = new X()`; Python `self.x = Outer()`;
|
|
182
|
+
// Ruby `@ivar = Foo.new`; Swift optional property annotations; Dart inferred-type
|
|
183
|
+
// and final field declarations plus constructor-body field writes. Every one of
|
|
184
|
+
// these is PARSE-TIME capture emission, so a warm cache replays the pre-fix
|
|
185
|
+
// capture set verbatim for byte-unchanged files and the new receiver edges never
|
|
186
|
+
// appear — silently, with no error, exactly the v27/v30 failure mode. `analyze`
|
|
187
|
+
// skips tree-sitter dispatch for unchanged chunks (GUARDRAILS.md), so a plain
|
|
188
|
+
// re-analyze does NOT surface them without this bump.
|
|
189
|
+
// RE-CHECK AGAINST origin/main IMMEDIATELY BEFORE MERGING — main was also at 39
|
|
190
|
+
// when this was allocated, and this file records eight prior collisions.
|
|
191
|
+
// v41: the v40 Dart field-write binding gained its READ-side mask (#2807 review)
|
|
192
|
+
// — a Dart class-member body that rebinds one of its class's field names now
|
|
193
|
+
// emits `@receiver-owner.shadowed-fields` on its synthesized `@scope.function`
|
|
194
|
+
// match, which becomes `Scope.ownsReceivers`. Parse-time capture emission again,
|
|
195
|
+
// so a v40 warm cache replays scope matches with no marker and the receiver walk
|
|
196
|
+
// still reaches the class field — i.e. it keeps serving the WRONG edge this
|
|
197
|
+
// bump's fix removes, silently. Same bump-or-nothing situation as v40.
|
|
198
|
+
// RE-CHECK AGAINST origin/main IMMEDIATELY BEFORE MERGING.
|
|
199
|
+
// v42: the v40/v41 Python constructor-field arm stopped accepting a DOTTED
|
|
200
|
+
// callee (#2807 review). `self.svc = f.Alpha()` no longer emits a
|
|
201
|
+
// `@type-binding.constructor` capture at all, which is what removes the
|
|
202
|
+
// fabricated edge to the same-named class `Alpha` and what stops
|
|
203
|
+
// `self.conn = Registry.get()` displacing an earlier real `self.conn = Outer()`.
|
|
204
|
+
// A within-PR re-bump, not a collision fix: v41 was allocated by this same
|
|
205
|
+
// unmerged branch, so v41-stamped caches exist only on it — but they exist on
|
|
206
|
+
// every reviewer's and CI runner's checkout of it, and parse-time emission means
|
|
207
|
+
// they replay the pre-fix capture set for byte-unchanged files and keep serving
|
|
208
|
+
// the fabricated edge. main is at 39, so 40/41/42 are all this branch's.
|
|
209
|
+
// RE-CHECK AGAINST origin/main IMMEDIATELY BEFORE MERGING.
|
|
210
|
+
// v43: Go embedded fields now emit `@reference.embedded-pointer` when written
|
|
211
|
+
// as `*T` rather than `T` (#2813 exact method sets). Go's method-set rules make
|
|
212
|
+
// the two forms genuinely different — `struct{ Base }` does NOT get Base's
|
|
213
|
+
// pointer-receiver methods in its value method set while `struct{ *Base }` does
|
|
214
|
+
// — so structural interface satisfaction cannot be exact without the spelling.
|
|
215
|
+
// This is PARSE-TIME capture emission, so a warm cache replays the pre-fix
|
|
216
|
+
// capture set for byte-unchanged files and the distinction never appears:
|
|
217
|
+
// silently, with no error, the v27/v30 failure mode. `analyze` skips tree-sitter
|
|
218
|
+
// dispatch for unchanged chunks (GUARDRAILS.md), so a plain re-analyze does NOT
|
|
219
|
+
// surface it without this bump.
|
|
220
|
+
//
|
|
221
|
+
// 42 -> 43: this branch originally allocated 43 while sitting at 39, because
|
|
222
|
+
// main had already taken 40/41/42 for #2807. main has since merged those and
|
|
223
|
+
// this branch rebased onto it, so 43 remains the next free number and the
|
|
224
|
+
// value is unchanged by the rebase — the reason it was chosen is simply now
|
|
225
|
+
// visible in the history above. RE-CHECK AGAINST origin/main IMMEDIATELY
|
|
226
|
+
// BEFORE MERGING; this file records eight prior collisions, two EXACT.
|
|
227
|
+
// Moved 43 -> 44 for #2842's TypeScript heritage capture, which now emits
|
|
228
|
+
// `@reference.inherits` for `interface_declaration` and
|
|
229
|
+
// `abstract_class_declaration`. That is PARSE-TIME emission, so a v43 warm
|
|
230
|
+
// cache would serve entries that are missing those matches entirely — the
|
|
231
|
+
// exact failure a bump exists to prevent. Verified against origin/main at
|
|
232
|
+
// a857f4c5a, which is still on 43, so 44 is free. RE-CHECK BEFORE MERGE.
|
|
233
|
+
// 44 -> 45: #2837 re-anchors Go's struct/interface captures from the
|
|
234
|
+
// `type_declaration` onto the `type_spec` (`languages/go/query.ts`
|
|
235
|
+
// @scope.class/@declaration.struct/@declaration.interface, and GO_QUERIES
|
|
236
|
+
// @definition.struct/@definition.interface in `tree-sitter-queries.ts`). Every
|
|
237
|
+
// Go file declaring a type therefore emits DIFFERENT capture ranges — measured:
|
|
238
|
+
// 70 fixture digests moved with zero change in capture COUNT — and a grouped
|
|
239
|
+
// `type (...)` block emits nodes it previously did not emit at all. Parse-time,
|
|
240
|
+
// so a warm cache would replay pre-fix ParsedFiles and the fix would be a silent
|
|
241
|
+
// no-op on every incremental analyze while still passing every cold-run test.
|
|
242
|
+
//
|
|
243
|
+
// This branch originally took 44 and it COLLIDED: #2842 above merged first and
|
|
244
|
+
// claimed it. The ninth entry in this ledger, and the third EXACT clash. Worth
|
|
245
|
+
// recording HOW it was caught, because the pin test cannot catch it — both PRs
|
|
246
|
+
// asserted `toBe(44)`, which passes even when main is already 44, so the two
|
|
247
|
+
// capture schemas would have shared one PARSE_CACHE_VERSION and the durable
|
|
248
|
+
// ParsedFile store would have replayed pre-fix ParsedFiles verbatim for one of
|
|
249
|
+
// them. Only comparing against origin/main at MERGE time surfaces it.
|
|
250
|
+
// PR #2840 (Objective-C, draft) still claims 44 as well — it must move too.
|
|
251
|
+
// RE-CHECK AGAINST origin/main IMMEDIATELY BEFORE MERGING.
|
|
252
|
+
//
|
|
253
|
+
// 46 -> 47: method-level Spring `@RequestMapping` now emits wildcard routes
|
|
254
|
+
// and one route per static `RequestMethod.X` value. These decorator routes live
|
|
255
|
+
// in ParseWorkerResult and are replayed verbatim on warm cache hits, so keeping
|
|
256
|
+
// the previous version would make the fix a no-op for every unchanged Java file.
|
|
257
|
+
// PR #2856 claims 46, so this branch owns 47. Verified against upstream/main at
|
|
258
|
+
// 021ac3037 (still 45). RE-CHECK BEFORE MERGE.
|
|
259
|
+
// 47 -> 48: #2833 makes a generic-typed FIELD usable as a call receiver. Three
|
|
260
|
+
// parse-time changes ride on this one value:
|
|
261
|
+
// - C++ (`languages/cpp/query.ts`) gains `field_declaration` rules whose
|
|
262
|
+
// `type:` is a `template_type` or a `qualified_identifier` wrapping one.
|
|
263
|
+
// The rules that existed all required a bare `type_identifier`, so
|
|
264
|
+
// `Repo<User> repo;` and `std::vector<Item> items;` matched NONE of them and
|
|
265
|
+
// the member got no type binding at all — new captures where there were none.
|
|
266
|
+
// - Python (`languages/python/interpret.ts`) reduces a subscripted type its
|
|
267
|
+
// container allow-lists do not claim to its base name, so `Repo[User]` binds
|
|
268
|
+
// as `Repo`. That rewrites `TypeRef.rawName`, which is serialized into the
|
|
269
|
+
// cached ParsedFile.
|
|
270
|
+
// - `SymbolDefinition.typeParameters` — the DECLARED parameter list
|
|
271
|
+
// (`template <class T>`, `class Box<T extends Repo>`), captured nowhere
|
|
272
|
+
// before and on a different axis from the existing `templateArguments`. Six
|
|
273
|
+
// per-language declaration queries gained `@declaration.type-parameters` and
|
|
274
|
+
// `scope-extractor.ts` reads it onto every class-like def.
|
|
275
|
+
// A warm cache would replay the pre-fix ParsedFiles, so every file served from
|
|
276
|
+
// it would carry the old captures while passing every cold-run test — the exact
|
|
277
|
+
// failure this constant exists to prevent.
|
|
278
|
+
//
|
|
279
|
+
// WHAT THE BUMP DOES NOT COVER. It invalidates the PARSE half only. v1 is
|
|
280
|
+
// always full-rebuild (no incremental), so the cache has no incremental
|
|
281
|
+
// consumer.
|
|
282
|
+
// `!schemaFingerprintMismatch(...)`, feature parity, non-empty `fileHashes` and
|
|
283
|
+
// a git repo — SCHEMA_BUMP appears in none of them — and an incremental run then
|
|
284
|
+
// writes back only `hashDiff.toWrite`, logging the rest as "unchanged file rows
|
|
285
|
+
// preserved". SCHEMA_FINGERPRINT is a hash of node/relation DDL, which this
|
|
286
|
+
// branch does not touch, so it is byte-identical and moves nothing either.
|
|
287
|
+
// Net: after this bump an incremental analyze re-parses an unchanged file
|
|
288
|
+
// correctly but keeps its existing rows, and the new edges land on the next full
|
|
289
|
+
// rebuild (`--force`, or any run whose runner identity or DDL moved). That is
|
|
290
|
+
// the pre-existing contract for every capture change, not a regression here.
|
|
291
|
+
//
|
|
292
|
+
// THIS BRANCH COLLIDED TWICE, which is why it lands on 48 rather than 46.
|
|
293
|
+
// It first took 46 (the C++/Python captures) and then 47 (typeParameters), both
|
|
294
|
+
// verified free against origin/main at 021ac3037. By merge time main had moved:
|
|
295
|
+
// #2856 claims 46 and #2857 took 47 and merged first. The eleventh entry in this
|
|
296
|
+
// ledger and the FOURTH and FIFTH exact clashes — and note what caught them.
|
|
297
|
+
// Not the pin test: this branch asserted `toBe(47)` and so did #2857, and both
|
|
298
|
+
// pass, because a literal pin cannot see the other side. Only diffing
|
|
299
|
+
// origin/main at the moment of merge surfaces it. Every value this branch
|
|
300
|
+
// published (46, 47) is superseded by 48, so a warm cache stamped with either is
|
|
301
|
+
// correctly invalidated.
|
|
302
|
+
// RE-CHECK AGAINST origin/main IMMEDIATELY BEFORE MERGING.
|
|
303
|
+
const SCHEMA_BUMP = 48;
|
|
304
|
+
const CGRAPH_PKG_VERSION = (() => {
|
|
305
|
+
try {
|
|
306
|
+
// package.json sits at cgraph/package.json — two levels up from
|
|
307
|
+
// cgraph/src/storage/parse-cache.ts (or its dist/ equivalent).
|
|
308
|
+
const here = __dirname;
|
|
309
|
+
const candidates = [
|
|
310
|
+
path_1.default.join(here, '..', '..', '..', '..', 'package.json'), // src|dist/core/code/storage → cgraphx/
|
|
311
|
+
];
|
|
312
|
+
const requireCJS = (0, module_1.createRequire)(__filename);
|
|
313
|
+
for (const c of candidates) {
|
|
314
|
+
try {
|
|
315
|
+
const pkg = requireCJS(c);
|
|
316
|
+
if (typeof pkg?.version === 'string')
|
|
317
|
+
return pkg.version;
|
|
318
|
+
}
|
|
319
|
+
catch {
|
|
320
|
+
/* try next candidate */
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
catch {
|
|
325
|
+
/* fall through to fallback */
|
|
326
|
+
}
|
|
327
|
+
return '0.0.0-unknown';
|
|
328
|
+
})();
|
|
329
|
+
exports.PARSE_CACHE_VERSION = `${SCHEMA_BUMP}+${CGRAPH_PKG_VERSION}`;
|
|
330
|
+
const LEGACY_CACHE_FILENAME = 'parse-cache.json';
|
|
331
|
+
const CACHE_DIRNAME = 'parse-cache';
|
|
332
|
+
const CACHE_INDEX_FILENAME = 'index.json';
|
|
333
|
+
/** Keys on disk always come from `computeChunkHash` — 64-char lowercase hex. */
|
|
334
|
+
const CHUNK_CACHE_KEY_HEX_RE = /^[a-f0-9]{64}$/;
|
|
335
|
+
const isValidChunkCacheKey = (chunkHash) => CHUNK_CACHE_KEY_HEX_RE.test(chunkHash);
|
|
336
|
+
/** SHA-256 hex of a single string or buffer. */
|
|
337
|
+
const sha256Hex = (input) => (0, crypto_1.createHash)('sha256')
|
|
338
|
+
.update(typeof input === 'string' ? Buffer.from(input) : input)
|
|
339
|
+
.digest('hex');
|
|
340
|
+
/** Stable hash of a single file's contents — used by callers to compose a chunk hash. */
|
|
341
|
+
const fileContentHash = (content) => sha256Hex(content);
|
|
342
|
+
exports.fileContentHash = fileContentHash;
|
|
343
|
+
const computeChunkHash = (entries, pdg = false) => {
|
|
344
|
+
const sorted = [...entries].sort((a, b) => (a.filePath < b.filePath ? -1 : 1));
|
|
345
|
+
const joined = sorted.map((e) => `${e.filePath}:${e.contentHash}`).join('\n');
|
|
346
|
+
const opts = typeof pdg === 'boolean' ? { pdg } : pdg;
|
|
347
|
+
// pdg-off path keeps its pre-#2081 chunk-KEY format verbatim. Note this does
|
|
348
|
+
// NOT mean caches survive the M1 upgrade: SCHEMA_BUMP 4→5 changed
|
|
349
|
+
// PARSE_CACHE_VERSION, and both loadParseCache (below) and the durable
|
|
350
|
+
// parsedfile-store index hard-invalidate on it — every user pays one full
|
|
351
|
+
// cold re-parse on upgrade regardless of --pdg. Keeping the key format
|
|
352
|
+
// stable only means no SECOND invalidation class is introduced here.
|
|
353
|
+
if (!opts.pdg)
|
|
354
|
+
return sha256Hex(joined);
|
|
355
|
+
// Fold the worker-visible --pdg configuration into the key: the boolean
|
|
356
|
+
// plus `maxFunctionLines` (decides which functions get a CFG at all, in the
|
|
357
|
+
// worker). Without it a warm chunk built under one cap is served to a run
|
|
358
|
+
// with a different cap → a stale/under-built CFG: the #2038-class
|
|
359
|
+
// option-blind-key trap. `def` marks an unset (default) value so two
|
|
360
|
+
// default-cap runs share a key. The emit-time edge cap is deliberately
|
|
361
|
+
// absent — see the PdgCacheKey doc comment.
|
|
362
|
+
//
|
|
363
|
+
// NAMESPACE VERSION (`pdg:5`): bumped when the worker-emitted
|
|
364
|
+
// `cfgSideChannel` SHAPE changes for pdg-mode runs only — pdg:1→2 in #2083
|
|
365
|
+
// M3 U1 (TsHarvester emits taint `sites` on StatementFacts); pdg:2→3 in the
|
|
366
|
+
// #2227 follow-up U1 (every C-family / TS harvester now stamps the call-site
|
|
367
|
+
// anchor `SiteRecord.at`, which the resolved-callee-id join reads); pdg:3→4 in
|
|
368
|
+
// the #2227 tri-review-2 U4 (the Rust harvester now emits a `kind:'new'` site
|
|
369
|
+
// for `struct_expression`, a new worker-output site the join consumes); pdg:4→5
|
|
370
|
+
// in the FU-C call-summary soundness fix (the TS harvester now stamps
|
|
371
|
+
// `BindingEntry.formalIndex` on param bindings so the PDG call-summary keys
|
|
372
|
+
// return-flow on the enclosing FORMAL position, not the flattened binding
|
|
373
|
+
// ordinal — a warm chunk lacking it would route the harvest to its conservative
|
|
374
|
+
// empty-summary fallback). A warm chunk built by a worker predating the relevant
|
|
375
|
+
// change carries a stale site shape, so the join skips it and
|
|
376
|
+
// `BasicBlock.calleeIds` is silently empty (or missing the struct constructor)
|
|
377
|
+
// even though `callees` is populated — exactly the #2225-class shape skew this
|
|
378
|
+
// version token exists to prevent. Invalidates pdg-mode chunks and their durable
|
|
379
|
+
// parsedfile-cache entries; flag-off chunk keys never reach this line and stay
|
|
380
|
+
// byte-identical, so non-pdg users pay nothing. Deliberately NOT a SCHEMA_BUMP —
|
|
381
|
+
// that gates the whole cache version and would force a full cold re-parse on
|
|
382
|
+
// EVERY user (the M1 bump comment above records that cost).
|
|
383
|
+
const ns = `pdg:5;maxFn=${opts.maxFunctionLines ?? 'def'}`;
|
|
384
|
+
return sha256Hex(`${ns}\n${joined}`);
|
|
385
|
+
};
|
|
386
|
+
exports.computeChunkHash = computeChunkHash;
|
|
387
|
+
/**
|
|
388
|
+
* JSON replacer that round-trips Map/Set instances through plain JSON.
|
|
389
|
+
*
|
|
390
|
+
* `ParseWorkerResult.parsedFiles[*].scopes[*].typeBindings` is a
|
|
391
|
+
* `ReadonlyMap<string, TypeRef>`; without this transform it serializes
|
|
392
|
+
* to `{}` and downstream code that iterates / `.get()`s on it crashes
|
|
393
|
+
* with "is not iterable". Applied symmetrically by `mapReviver` on
|
|
394
|
+
* load so the in-memory shape stays Map-typed.
|
|
395
|
+
*/
|
|
396
|
+
const MAP_TAG = '__$mapEntries$__';
|
|
397
|
+
const SET_TAG = '__$setValues$__';
|
|
398
|
+
const mapReplacer = (_key, value) => {
|
|
399
|
+
if (value instanceof Map)
|
|
400
|
+
return { [MAP_TAG]: Array.from(value.entries()) };
|
|
401
|
+
if (value instanceof Set)
|
|
402
|
+
return { [SET_TAG]: Array.from(value.values()) };
|
|
403
|
+
return value;
|
|
404
|
+
};
|
|
405
|
+
exports.mapReplacer = mapReplacer;
|
|
406
|
+
const mapReviver = (_key, value) => {
|
|
407
|
+
if (value && typeof value === 'object') {
|
|
408
|
+
const v = value;
|
|
409
|
+
if (Array.isArray(v[MAP_TAG]))
|
|
410
|
+
return new Map(v[MAP_TAG]);
|
|
411
|
+
if (Array.isArray(v[SET_TAG]))
|
|
412
|
+
return new Set(v[SET_TAG]);
|
|
413
|
+
}
|
|
414
|
+
return value;
|
|
415
|
+
};
|
|
416
|
+
exports.mapReviver = mapReviver;
|
|
417
|
+
const getLegacyCachePath = (storagePath) => path_1.default.join(storagePath, LEGACY_CACHE_FILENAME);
|
|
418
|
+
const getCacheDirPath = (storagePath) => path_1.default.join(storagePath, CACHE_DIRNAME);
|
|
419
|
+
const getCacheIndexPath = (storagePath) => path_1.default.join(getCacheDirPath(storagePath), CACHE_INDEX_FILENAME);
|
|
420
|
+
const getCacheChunkPath = (storagePath, chunkHash) => path_1.default.join(getCacheDirPath(storagePath), `${chunkHash}.json`);
|
|
421
|
+
/**
|
|
422
|
+
* Drop fields that are not replayed by `mergeChunkResults` / parse-impl after
|
|
423
|
+
* RING4-1 (#942). Shrinks on-disk shards and peak RSS during cold runs.
|
|
424
|
+
*/
|
|
425
|
+
const slimParseWorkerResultsForCache = (chunkResults) => {
|
|
426
|
+
const slim = [];
|
|
427
|
+
for (const result of chunkResults) {
|
|
428
|
+
slim.push({
|
|
429
|
+
...result,
|
|
430
|
+
calls: [],
|
|
431
|
+
assignments: [],
|
|
432
|
+
constructorBindings: [],
|
|
433
|
+
parsedFiles: [],
|
|
434
|
+
// #2112: a clone-safety skip list is per-run telemetry, not graph data —
|
|
435
|
+
// replay ignores it. Drop it so it doesn't bloat the cached shard.
|
|
436
|
+
skippedPaths: [],
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
return slim;
|
|
440
|
+
};
|
|
441
|
+
exports.slimParseWorkerResultsForCache = slimParseWorkerResultsForCache;
|
|
442
|
+
const readParseCacheChunkFromDisk = async (storagePath, chunkHash) => {
|
|
443
|
+
if (!isValidChunkCacheKey(chunkHash))
|
|
444
|
+
return undefined;
|
|
445
|
+
try {
|
|
446
|
+
const chunkRaw = await promises_1.default.readFile(getCacheChunkPath(storagePath, chunkHash), 'utf-8');
|
|
447
|
+
const chunkData = JSON.parse(chunkRaw, exports.mapReviver);
|
|
448
|
+
return Array.isArray(chunkData) ? chunkData : undefined;
|
|
449
|
+
}
|
|
450
|
+
catch {
|
|
451
|
+
return undefined;
|
|
452
|
+
}
|
|
453
|
+
};
|
|
454
|
+
/** Load one chunk shard. Does not retain it in `cache.entries`. */
|
|
455
|
+
const loadParseCacheChunk = async (cache, chunkHash) => {
|
|
456
|
+
const inMemory = cache.entries.get(chunkHash);
|
|
457
|
+
if (inMemory !== undefined)
|
|
458
|
+
return inMemory;
|
|
459
|
+
if (cache.storagePath && cache.onDiskKeys?.has(chunkHash)) {
|
|
460
|
+
return readParseCacheChunkFromDisk(cache.storagePath, chunkHash);
|
|
461
|
+
}
|
|
462
|
+
return undefined;
|
|
463
|
+
};
|
|
464
|
+
exports.loadParseCacheChunk = loadParseCacheChunk;
|
|
465
|
+
/**
|
|
466
|
+
* Cache directories already created this process. `persistParseCacheChunk` runs
|
|
467
|
+
* once per cache-miss chunk; without this guard every miss re-issues a redundant
|
|
468
|
+
* `mkdir` syscall (hundreds on a large cold repo) (#1983). Storage paths are
|
|
469
|
+
* process-scoped, so the Set stays bounded.
|
|
470
|
+
*/
|
|
471
|
+
const createdCacheDirs = new Set();
|
|
472
|
+
/**
|
|
473
|
+
* Persist one chunk shard and avoid retaining it in RAM for the rest of the
|
|
474
|
+
* run. Falls back to `cache.entries` when `storagePath` is unset (unit tests).
|
|
475
|
+
*/
|
|
476
|
+
const persistParseCacheChunk = async (cache, chunkHash, chunkResults) => {
|
|
477
|
+
const slim = (0, exports.slimParseWorkerResultsForCache)(chunkResults);
|
|
478
|
+
if (cache.storagePath) {
|
|
479
|
+
const cacheDir = getCacheDirPath(cache.storagePath);
|
|
480
|
+
if (!createdCacheDirs.has(cacheDir)) {
|
|
481
|
+
await promises_1.default.mkdir(cacheDir, { recursive: true });
|
|
482
|
+
createdCacheDirs.add(cacheDir);
|
|
483
|
+
}
|
|
484
|
+
const payload = JSON.stringify(slim, exports.mapReplacer);
|
|
485
|
+
await promises_1.default.writeFile(getCacheChunkPath(cache.storagePath, chunkHash), payload, 'utf-8');
|
|
486
|
+
cache.onDiskKeys ??= new Set();
|
|
487
|
+
cache.onDiskKeys.add(chunkHash);
|
|
488
|
+
cache.entries.delete(chunkHash);
|
|
489
|
+
return;
|
|
490
|
+
}
|
|
491
|
+
cache.entries.set(chunkHash, slim);
|
|
492
|
+
};
|
|
493
|
+
exports.persistParseCacheChunk = persistParseCacheChunk;
|
|
494
|
+
const loadLegacyParseCache = async (storagePath) => {
|
|
495
|
+
const cachePath = getLegacyCachePath(storagePath);
|
|
496
|
+
try {
|
|
497
|
+
const raw = await promises_1.default.readFile(cachePath, 'utf-8');
|
|
498
|
+
const data = JSON.parse(raw, exports.mapReviver);
|
|
499
|
+
if (typeof data !== 'object' ||
|
|
500
|
+
data === null ||
|
|
501
|
+
data.version !== exports.PARSE_CACHE_VERSION ||
|
|
502
|
+
typeof data.entries !== 'object' ||
|
|
503
|
+
data.entries === null) {
|
|
504
|
+
return emptyCache(storagePath);
|
|
505
|
+
}
|
|
506
|
+
const entries = new Map();
|
|
507
|
+
for (const [k, v] of Object.entries(data.entries)) {
|
|
508
|
+
if (Array.isArray(v))
|
|
509
|
+
entries.set(k, v);
|
|
510
|
+
}
|
|
511
|
+
return { version: exports.PARSE_CACHE_VERSION, entries, usedKeys: new Set(), storagePath };
|
|
512
|
+
}
|
|
513
|
+
catch {
|
|
514
|
+
return emptyCache(storagePath);
|
|
515
|
+
}
|
|
516
|
+
};
|
|
517
|
+
const loadShardedParseCache = async (storagePath) => {
|
|
518
|
+
const indexPath = getCacheIndexPath(storagePath);
|
|
519
|
+
try {
|
|
520
|
+
const raw = await promises_1.default.readFile(indexPath, 'utf-8');
|
|
521
|
+
const data = JSON.parse(raw);
|
|
522
|
+
if (typeof data !== 'object' ||
|
|
523
|
+
data === null ||
|
|
524
|
+
data.version !== exports.PARSE_CACHE_VERSION ||
|
|
525
|
+
!Array.isArray(data.keys)) {
|
|
526
|
+
return emptyCache(storagePath);
|
|
527
|
+
}
|
|
528
|
+
const onDiskKeys = new Set();
|
|
529
|
+
for (const chunkHash of data.keys) {
|
|
530
|
+
if (typeof chunkHash === 'string' && isValidChunkCacheKey(chunkHash)) {
|
|
531
|
+
onDiskKeys.add(chunkHash);
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
// Lazy: index only — load individual shards on cache hit (#1983).
|
|
535
|
+
return {
|
|
536
|
+
version: exports.PARSE_CACHE_VERSION,
|
|
537
|
+
entries: new Map(),
|
|
538
|
+
usedKeys: new Set(),
|
|
539
|
+
storagePath,
|
|
540
|
+
onDiskKeys,
|
|
541
|
+
};
|
|
542
|
+
}
|
|
543
|
+
catch {
|
|
544
|
+
return null;
|
|
545
|
+
}
|
|
546
|
+
};
|
|
547
|
+
/**
|
|
548
|
+
* Load the parse cache. Returns an empty cache on any failure (missing
|
|
549
|
+
* file, corrupt JSON, version mismatch). Never throws on a normal load.
|
|
550
|
+
*/
|
|
551
|
+
const loadParseCache = async (storagePath) => {
|
|
552
|
+
const sharded = await loadShardedParseCache(storagePath);
|
|
553
|
+
if (sharded)
|
|
554
|
+
return sharded;
|
|
555
|
+
return loadLegacyParseCache(storagePath);
|
|
556
|
+
};
|
|
557
|
+
exports.loadParseCache = loadParseCache;
|
|
558
|
+
/**
|
|
559
|
+
* Persist the cache to disk using a temp directory + rename.
|
|
560
|
+
*
|
|
561
|
+
* Writes shards under `${cacheDir}.tmp`, then removes the old `cacheDir` and
|
|
562
|
+
* renames the temp directory into place. There is a crash window after
|
|
563
|
+
* `rm(cacheDir)` and before `rename(tmpDir, cacheDir)` where no cache exists;
|
|
564
|
+
* that is acceptable — `loadParseCache` yields empty and the next run
|
|
565
|
+
* reparses. This is not a single atomic swap of the whole tree, but avoids
|
|
566
|
+
* leaving a half-written shard set visible to readers.
|
|
567
|
+
*/
|
|
568
|
+
const saveParseCache = async (storagePath, cache) => {
|
|
569
|
+
await promises_1.default.mkdir(storagePath, { recursive: true });
|
|
570
|
+
const cacheDir = getCacheDirPath(storagePath);
|
|
571
|
+
const tmpDir = `${cacheDir}.tmp`;
|
|
572
|
+
await promises_1.default.rm(tmpDir, { recursive: true, force: true });
|
|
573
|
+
await promises_1.default.mkdir(tmpDir, { recursive: true });
|
|
574
|
+
const keys = [...cache.usedKeys].filter(isValidChunkCacheKey).sort();
|
|
575
|
+
// Track hashes whose shard was actually written/copied this save. A hash can
|
|
576
|
+
// be in `usedKeys` without a backing shard — its in-memory serialize threw, or
|
|
577
|
+
// its on-disk copy failed/was-absent (e.g. a worker-quarantined chunk added to
|
|
578
|
+
// usedKeys but never persisted). Writing such a hash into `index.keys` would
|
|
579
|
+
// make the next load reference a shard that doesn't exist (#1983). Build the
|
|
580
|
+
// index from what we persisted, not from the raw usedKeys snapshot.
|
|
581
|
+
const writtenKeys = [];
|
|
582
|
+
for (const chunkHash of keys) {
|
|
583
|
+
const chunkPath = path_1.default.join(tmpDir, `${chunkHash}.json`);
|
|
584
|
+
const inMemory = cache.entries.get(chunkHash);
|
|
585
|
+
if (inMemory !== undefined) {
|
|
586
|
+
let payload;
|
|
587
|
+
try {
|
|
588
|
+
payload = JSON.stringify(inMemory, exports.mapReplacer);
|
|
589
|
+
}
|
|
590
|
+
catch {
|
|
591
|
+
continue;
|
|
592
|
+
}
|
|
593
|
+
await promises_1.default.writeFile(chunkPath, payload, 'utf-8');
|
|
594
|
+
writtenKeys.push(chunkHash);
|
|
595
|
+
continue;
|
|
596
|
+
}
|
|
597
|
+
const existingPath = getCacheChunkPath(storagePath, chunkHash);
|
|
598
|
+
try {
|
|
599
|
+
await promises_1.default.copyFile(existingPath, chunkPath);
|
|
600
|
+
writtenKeys.push(chunkHash);
|
|
601
|
+
}
|
|
602
|
+
catch {
|
|
603
|
+
/* shard missing — skip; next run treats as cache miss */
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
const index = {
|
|
607
|
+
version: cache.version,
|
|
608
|
+
keys: writtenKeys,
|
|
609
|
+
};
|
|
610
|
+
await promises_1.default.writeFile(path_1.default.join(tmpDir, CACHE_INDEX_FILENAME), JSON.stringify(index), 'utf-8');
|
|
611
|
+
await promises_1.default.rm(cacheDir, { recursive: true, force: true });
|
|
612
|
+
await promises_1.default.rename(tmpDir, cacheDir);
|
|
613
|
+
await promises_1.default.rm(getLegacyCachePath(storagePath), { force: true });
|
|
614
|
+
// The authoritative final key set actually backed by a shard on disk.
|
|
615
|
+
// Callers (the durable ParsedFile store) prune to exactly these so the two
|
|
616
|
+
// content-addressed stores stay coherent — a chunk is cached iff BOTH have it.
|
|
617
|
+
return writtenKeys;
|
|
618
|
+
};
|
|
619
|
+
exports.saveParseCache = saveParseCache;
|
|
620
|
+
/**
|
|
621
|
+
* Drop entries whose hashes are not in `usedHashes`. Called at the end
|
|
622
|
+
* of a run so chunks that no longer correspond to any current chunk
|
|
623
|
+
* don't keep their stale entries forever.
|
|
624
|
+
*/
|
|
625
|
+
const pruneCache = (cache, usedHashes) => {
|
|
626
|
+
let removed = 0;
|
|
627
|
+
for (const k of cache.entries.keys()) {
|
|
628
|
+
if (!usedHashes.has(k)) {
|
|
629
|
+
cache.entries.delete(k);
|
|
630
|
+
removed++;
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
if (cache.onDiskKeys) {
|
|
634
|
+
for (const k of cache.onDiskKeys) {
|
|
635
|
+
if (!usedHashes.has(k)) {
|
|
636
|
+
cache.onDiskKeys.delete(k);
|
|
637
|
+
removed++;
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
return removed;
|
|
642
|
+
};
|
|
643
|
+
exports.pruneCache = pruneCache;
|
|
644
|
+
const emptyCache = (storagePath) => ({
|
|
645
|
+
version: exports.PARSE_CACHE_VERSION,
|
|
646
|
+
entries: new Map(),
|
|
647
|
+
usedKeys: new Set(),
|
|
648
|
+
storagePath,
|
|
649
|
+
onDiskKeys: storagePath ? new Set() : undefined,
|
|
650
|
+
});
|