cgraphx 2.0.2 → 2.0.6
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/.claude-template/FLOW-MAP.md +13 -3
- package/dist/.claude-template/agents/task-history.md +186 -0
- package/dist/.claude-template/commands/end.md +1 -0
- package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +5 -3
- package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +8 -8
- package/dist/.claude-template/skills/cgraphx-guide/how-to-use.md +8 -8
- package/dist/.claude-template/skills/clarify-requirements/SKILL.md +13 -9
- package/dist/.claude-template/skills/db-query/SKILL.md +19 -2
- package/dist/.claude-template/skills/iboc-check/SKILL.md +51 -23
- package/dist/.claude-template/skills/iboc-check/filler-prompt.md +3 -4
- package/dist/.claude-template/skills/run-api-test/SKILL.md +15 -15
- package/dist/.claude-template/skills/run-api-test/assets/{template-test-report.md → template-/346/216/245/345/217/243/346/265/213/350/257/225/346/212/245/345/221/212.md} +4 -4
- package/dist/.claude-template/skills/run-api-test/references/bru-run.md +1 -1
- package/dist/.claude-template/skills/run-api-test/references/db-verification.md +2 -2
- package/dist/.claude-template/skills/run-api-test/references/report-format.md +6 -6
- package/dist/.claude-template/skills/run-api-test/references/service-readiness.md +1 -1
- package/dist/.claude-template/skills/run-api-test/references/test-scope.md +6 -6
- package/dist/.claude-template/skills/run-ui-test/SKILL.md +186 -0
- package/dist/.claude-template/skills/run-ui-test/references/report-format.md +77 -0
- package/dist/.claude-template/skills/subagent-implement/SKILL.md +3 -2
- package/dist/.claude-template/skills/write-api/SKILL.md +18 -18
- package/dist/.claude-template/skills/write-api/assets/{template-api-spec.md → template-/346/216/245/345/217/243/346/265/213/350/257/225-spec.md} +1 -1
- package/dist/.claude-template/skills/write-api/references/{api-spec-format.md → /346/216/245/345/217/243/346/265/213/350/257/225-spec-format.md} +3 -3
- package/dist/.claude-template/skills/write-plan/SKILL.md +4 -2
- package/dist/.claude-template/skills/write-ui-test/SKILL.md +125 -0
- package/dist/.claude-template/skills/write-ui-test/references//347/224/250/344/276/213/350/247/204/346/240/274-format.md +94 -0
- 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/dbquery/cli.d.ts.map +1 -1
- package/dist/core/dbquery/cli.js +5 -4
- package/dist/core/dbquery/cli.js.map +1 -1
- package/dist/core/dbquery/config.d.ts.map +1 -1
- package/dist/core/dbquery/config.js +39 -3
- package/dist/core/dbquery/config.js.map +1 -1
- package/dist/core/dbquery/drivers/http.d.ts +23 -0
- package/dist/core/dbquery/drivers/http.d.ts.map +1 -0
- package/dist/core/dbquery/drivers/http.js +125 -0
- package/dist/core/dbquery/drivers/http.js.map +1 -0
- package/dist/core/dbquery/drivers/mysql.js +1 -1
- package/dist/core/dbquery/drivers/mysql.js.map +1 -1
- package/dist/core/dbquery/drivers/postgres.js +1 -1
- package/dist/core/dbquery/drivers/postgres.js.map +1 -1
- package/dist/core/dbquery/executor.d.ts.map +1 -1
- package/dist/core/dbquery/executor.js +46 -12
- package/dist/core/dbquery/executor.js.map +1 -1
- package/dist/core/dbquery/format.d.ts.map +1 -1
- package/dist/core/dbquery/format.js +2 -1
- package/dist/core/dbquery/format.js.map +1 -1
- package/dist/core/dbquery/init.d.ts.map +1 -1
- package/dist/core/dbquery/init.js +7 -0
- package/dist/core/dbquery/init.js.map +1 -1
- package/dist/core/dbquery/types.d.ts +55 -7
- package/dist/core/dbquery/types.d.ts.map +1 -1
- package/dist/core/directory.d.ts +17 -0
- package/dist/core/directory.d.ts.map +1 -1
- package/dist/core/directory.js +37 -0
- package/dist/core/directory.js.map +1 -1
- package/dist/core/features/cli.d.ts.map +1 -1
- package/dist/core/features/cli.js +3 -2
- package/dist/core/features/cli.js.map +1 -1
- package/dist/core/features/scanner.d.ts +1 -1
- package/dist/core/features/scanner.d.ts.map +1 -1
- package/dist/core/features/scanner.js +20 -4
- package/dist/core/features/scanner.js.map +1 -1
- package/dist/core/markdown/cli.d.ts.map +1 -1
- package/dist/core/markdown/cli.js +9 -8
- package/dist/core/markdown/cli.js.map +1 -1
- 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/dist/web/register.d.ts.map +1 -1
- package/dist/web/register.js +2 -1
- package/dist/web/register.js.map +1 -1
- package/package.json +1 -1
- package/dist/.claude-template/.cgraphx/timeline-current-turn.json +0 -1
- package/dist/.claude-template/skills/.cgraphx/timeline-current-turn.json +0 -1
- package/dist/.claude-template/skills/handdrawn-deck/.cgraphx/timeline-current-turn.json +0 -1
- package/dist/.claude-template/skills/handdrawn-deck/references/.cgraphx/timeline-current-turn.json +0 -1
- package/dist/.claude-template/skills/handdrawn-sketch-engine/.cgraphx/timeline-current-turn.json +0 -1
- /package/dist/.claude-template/skills/run-api-test/assets/{template-test-verify.jsonl → template-/346/216/245/345/217/243/346/265/213/350/257/225/351/252/214/350/257/201.jsonl"} +0 -0
|
@@ -0,0 +1,710 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CSV Generator for LadybugDB Hybrid Schema
|
|
4
|
+
*
|
|
5
|
+
* Streams CSV rows directly to disk files in a single pass over graph nodes.
|
|
6
|
+
* File contents are lazy-read from disk per-node to avoid holding the entire
|
|
7
|
+
* repo in RAM. Rows are buffered (FLUSH_BYTES) before writing to minimize
|
|
8
|
+
* per-row Promise overhead.
|
|
9
|
+
*
|
|
10
|
+
* RFC 4180 Compliant:
|
|
11
|
+
* - Fields containing commas, double quotes, or newlines are enclosed in double quotes
|
|
12
|
+
* - Double quotes within fields are escaped by doubling them ("")
|
|
13
|
+
* - All fields are consistently quoted for safety with code content
|
|
14
|
+
*/
|
|
15
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
16
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
17
|
+
};
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.streamAllCSVsToDisk = exports.buildBasicBlockRow = exports.BASICBLOCK_CSV_HEADER = exports.buildRelRow = exports.REL_CSV_HEADER = exports.normalizeFtsText = exports.isBinaryContent = exports.escapeCSVNumber = exports.escapeCSVField = exports.sanitizeUTF8 = exports.shouldFlushCSVBuffer = exports.FLUSH_BYTES = exports.DECLARED_RELATION_PAIRS = void 0;
|
|
20
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
21
|
+
const fs_1 = require("fs");
|
|
22
|
+
const path_1 = __importDefault(require("path"));
|
|
23
|
+
const schema_js_1 = require("./schema.js");
|
|
24
|
+
const rel_pair_routing_js_1 = require("./rel-pair-routing.js");
|
|
25
|
+
const env_js_1 = require("../ingestion/utils/env.js");
|
|
26
|
+
const symbol_labels_js_1 = require("../ingestion/utils/symbol-labels.js");
|
|
27
|
+
/** Computed once — `RELATION_SCHEMA` is a static template literal. Exported so
|
|
28
|
+
* the streamed sinks (`GraphEmitSink`, `PdgEmitSink`) share this parse
|
|
29
|
+
* instead of each re-deriving it from the same DDL string. */
|
|
30
|
+
exports.DECLARED_RELATION_PAIRS = (0, rel_pair_routing_js_1.parseRelationSchemaPairs)(schema_js_1.RELATION_SCHEMA);
|
|
31
|
+
/**
|
|
32
|
+
* Deterministic output ordering — optional (out-of-core / windowed-resolve
|
|
33
|
+
* enabler). When `CGRAPH_SORT_GRAPH_OUTPUT` is set, nodes and relationships
|
|
34
|
+
* are emitted sorted by their (unique, dedup-key) graph `id` rather than in
|
|
35
|
+
* graph-insertion order, making the CSV a pure function of the graph's node/edge
|
|
36
|
+
* SET instead of of emit order. Default off returns the iterator untouched, so
|
|
37
|
+
* the bytes are identical to today. With it on, a windowed/out-of-core emit
|
|
38
|
+
* (the later windowed-resolve work) need only reproduce the same edge SET, not the global insertion order —
|
|
39
|
+
* which removes "CSV row order == Map insertion order" as a byte-identical
|
|
40
|
+
* hazard for every later windowing step.
|
|
41
|
+
*/
|
|
42
|
+
const byGraphId = (a, b) => a.id < b.id ? -1 : a.id > b.id ? 1 : 0;
|
|
43
|
+
const orderedNodes = (graph, sorted) => sorted ? [...graph.iterNodes()].sort(byGraphId) : graph.iterNodes();
|
|
44
|
+
const orderedRelationships = (graph, sorted) => sorted ? [...graph.iterRelationships()].sort(byGraphId) : graph.iterRelationships();
|
|
45
|
+
/**
|
|
46
|
+
* Flush buffered rows to disk once the buffered chunk reaches this many bytes.
|
|
47
|
+
* Byte-bounded rather than row-count-bounded: row size ranges from a few dozen
|
|
48
|
+
* bytes (typical symbol/relationship rows) up to a full File's content
|
|
49
|
+
* (#2317/#2323), so a row-count-only cap lets a handful of huge rows build an
|
|
50
|
+
* unbounded `buffer.join('\n')` string before ever tripping it.
|
|
51
|
+
*
|
|
52
|
+
* Not an env knob — fixed by a safety margin, not a preference. The one worst
|
|
53
|
+
* case that matters: one more oversized row lands right after the buffer was
|
|
54
|
+
* just under this threshold, before the flush fires. That row is capped at
|
|
55
|
+
* TREE_SITTER_MAX_BUFFER (32MB, hard-clamped — CGRAPH_MAX_FILE_SIZE cannot
|
|
56
|
+
* raise it), and `escapeCSVField`'s worst-case quote-doubling (2x) can grow it
|
|
57
|
+
* before it reaches the buffer. So the peak joined-string size is bounded by
|
|
58
|
+
* FLUSH_BYTES + 2 * TREE_SITTER_MAX_BUFFER ≈ 8MB + 64MB ≈ 72MB,
|
|
59
|
+
* versus Node's `buffer.constants.MAX_STRING_LENGTH` (~512MB) — a comfortable
|
|
60
|
+
* margin (see the `shouldFlushCSVBuffer stays within the V8 string-length
|
|
61
|
+
* ceiling` test, which fails loudly if any of these constants ever moves this
|
|
62
|
+
* margin the wrong way). Raising FLUSH_BYTES trades fewer/larger flushes for
|
|
63
|
+
* less margin; lowering it trades the reverse for lower peak transient memory.
|
|
64
|
+
* Change the constant directly if a real workload needs a different point on
|
|
65
|
+
* that curve — a per-host env var would let the margin get silently
|
|
66
|
+
* reintroduced by an operator with no way to know why 512MB is dangerous.
|
|
67
|
+
*/
|
|
68
|
+
exports.FLUSH_BYTES = 8 * 1024 * 1024;
|
|
69
|
+
const shouldFlushCSVBuffer = (byteCount) => byteCount >= exports.FLUSH_BYTES;
|
|
70
|
+
exports.shouldFlushCSVBuffer = shouldFlushCSVBuffer;
|
|
71
|
+
/**
|
|
72
|
+
* Yield the event loop every N relationship rows during the emit pass (#2226 F4)
|
|
73
|
+
* so a concurrent node COPY (the overlap in loadGraphToLbug) and write-stream
|
|
74
|
+
* drain callbacks get scheduling time during long synchronous emit stretches.
|
|
75
|
+
* Scheduling-only — never changes row content or order (byte-identical). Tuning
|
|
76
|
+
* constant, not load-bearing.
|
|
77
|
+
*/
|
|
78
|
+
const REL_YIELD_EVERY = 5000;
|
|
79
|
+
// ============================================================================
|
|
80
|
+
// CSV ESCAPE UTILITIES
|
|
81
|
+
// ============================================================================
|
|
82
|
+
const sanitizeUTF8 = (str) => {
|
|
83
|
+
return str
|
|
84
|
+
.replace(/\r\n/g, '\n')
|
|
85
|
+
.replace(/\r/g, '\n')
|
|
86
|
+
.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, '')
|
|
87
|
+
.replace(/[\uD800-\uDFFF]/g, '')
|
|
88
|
+
.replace(/[\uFFFE\uFFFF]/g, '');
|
|
89
|
+
};
|
|
90
|
+
exports.sanitizeUTF8 = sanitizeUTF8;
|
|
91
|
+
const escapeCSVField = (value) => {
|
|
92
|
+
if (value === undefined || value === null)
|
|
93
|
+
return '""';
|
|
94
|
+
let str = String(value);
|
|
95
|
+
str = (0, exports.sanitizeUTF8)(str);
|
|
96
|
+
return `"${str.replace(/"/g, '""')}"`;
|
|
97
|
+
};
|
|
98
|
+
exports.escapeCSVField = escapeCSVField;
|
|
99
|
+
const escapeCSVNumber = (value, defaultValue = -1) => {
|
|
100
|
+
if (value === undefined || value === null)
|
|
101
|
+
return String(defaultValue);
|
|
102
|
+
return String(value);
|
|
103
|
+
};
|
|
104
|
+
exports.escapeCSVNumber = escapeCSVNumber;
|
|
105
|
+
const formatCSVStringArray = (value) => {
|
|
106
|
+
const items = Array.isArray(value)
|
|
107
|
+
? value.filter((item) => typeof item === 'string')
|
|
108
|
+
: [];
|
|
109
|
+
const unsafe = items.find((item) => /[,\[\]'"\n\r]/.test(item));
|
|
110
|
+
if (unsafe !== undefined) {
|
|
111
|
+
throw new Error(`Cannot safely encode CSV string-list item: ${JSON.stringify(unsafe)}`);
|
|
112
|
+
}
|
|
113
|
+
return `[${items.join(',')}]`;
|
|
114
|
+
};
|
|
115
|
+
// ============================================================================
|
|
116
|
+
// CONTENT EXTRACTION (lazy — reads from disk on demand)
|
|
117
|
+
// ============================================================================
|
|
118
|
+
const isBinaryContent = (content) => {
|
|
119
|
+
if (!content || content.length === 0)
|
|
120
|
+
return false;
|
|
121
|
+
const sample = content.slice(0, 1000);
|
|
122
|
+
let nonPrintable = 0;
|
|
123
|
+
for (let i = 0; i < sample.length; i++) {
|
|
124
|
+
const code = sample.charCodeAt(i);
|
|
125
|
+
if (code < 9 || (code > 13 && code < 32) || code === 127)
|
|
126
|
+
nonPrintable++;
|
|
127
|
+
}
|
|
128
|
+
return nonPrintable / sample.length > 0.1;
|
|
129
|
+
};
|
|
130
|
+
exports.isBinaryContent = isBinaryContent;
|
|
131
|
+
/**
|
|
132
|
+
* LRU content cache — avoids re-reading the same source file for every
|
|
133
|
+
* symbol defined in it. Sized generously so most files stay cached during
|
|
134
|
+
* the single-pass node iteration.
|
|
135
|
+
*/
|
|
136
|
+
class FileContentCache {
|
|
137
|
+
cache = new Map();
|
|
138
|
+
accessOrder = [];
|
|
139
|
+
maxSize;
|
|
140
|
+
repoPath;
|
|
141
|
+
constructor(repoPath, maxSize = 3000) {
|
|
142
|
+
this.repoPath = repoPath;
|
|
143
|
+
this.maxSize = maxSize;
|
|
144
|
+
}
|
|
145
|
+
async get(relativePath) {
|
|
146
|
+
if (!relativePath)
|
|
147
|
+
return '';
|
|
148
|
+
const cached = this.cache.get(relativePath);
|
|
149
|
+
if (cached !== undefined) {
|
|
150
|
+
// Move to end of accessOrder (LRU promotion)
|
|
151
|
+
const idx = this.accessOrder.indexOf(relativePath);
|
|
152
|
+
if (idx !== -1) {
|
|
153
|
+
this.accessOrder.splice(idx, 1);
|
|
154
|
+
this.accessOrder.push(relativePath);
|
|
155
|
+
}
|
|
156
|
+
return cached;
|
|
157
|
+
}
|
|
158
|
+
try {
|
|
159
|
+
const fullPath = path_1.default.join(this.repoPath, relativePath);
|
|
160
|
+
const content = await promises_1.default.readFile(fullPath, 'utf-8');
|
|
161
|
+
this.set(relativePath, content);
|
|
162
|
+
return content;
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
this.set(relativePath, '');
|
|
166
|
+
return '';
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
set(key, value) {
|
|
170
|
+
if (this.cache.size >= this.maxSize) {
|
|
171
|
+
const oldest = this.accessOrder.shift();
|
|
172
|
+
if (oldest)
|
|
173
|
+
this.cache.delete(oldest);
|
|
174
|
+
}
|
|
175
|
+
this.cache.set(key, value);
|
|
176
|
+
this.accessOrder.push(key);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Flatten newlines and tabs to single spaces for the stored text columns
|
|
181
|
+
* (`content`, `description`), so stored file/symbol text is uniformly
|
|
182
|
+
* space-separated (#2317). This rewrites the STORED column too (the same
|
|
183
|
+
* value is COPYed in), so File content returned via the graph API is
|
|
184
|
+
* space-flattened. Leading/trailing/empty are no-ops.
|
|
185
|
+
*/
|
|
186
|
+
const normalizeFtsText = (text) => text.replace(/[\r\n\t]+/g, ' ');
|
|
187
|
+
exports.normalizeFtsText = normalizeFtsText;
|
|
188
|
+
/** Normalizes the `description` column — one place for the six emission sites below to call, instead of repeating the transform. */
|
|
189
|
+
const formatFtsDescription = (description) => (0, exports.normalizeFtsText)(description);
|
|
190
|
+
// Labels that get exact source-span content (no ±2 window). Single source of
|
|
191
|
+
// truth in `symbol-labels.ts` — see there for why the exactness depends on the
|
|
192
|
+
// 0-based line invariant. Kept as a named alias to read intent at the use site.
|
|
193
|
+
const EXACT_SYMBOL_CONTENT_LABELS = symbol_labels_js_1.SYMBOL_NODE_LABELS;
|
|
194
|
+
const extractContent = async (node, contentCache) => {
|
|
195
|
+
const filePath = node.properties.filePath;
|
|
196
|
+
const content = await contentCache.get(filePath);
|
|
197
|
+
if (!content)
|
|
198
|
+
return '';
|
|
199
|
+
if (node.label === 'Folder')
|
|
200
|
+
return '';
|
|
201
|
+
if ((0, exports.isBinaryContent)(content))
|
|
202
|
+
return '[Binary file - content not stored]';
|
|
203
|
+
// File content is stored in full — intentionally NOT length-capped here
|
|
204
|
+
// (#2317). It is already bounded upstream by the walker's max-file-size cap
|
|
205
|
+
// (512KB default / 32MB), and only whitespace-normalized. The symbol snippet
|
|
206
|
+
// path below, by contrast, deliberately stays capped at MAX_SNIPPET.
|
|
207
|
+
if (node.label === 'File') {
|
|
208
|
+
return (0, exports.normalizeFtsText)(content);
|
|
209
|
+
}
|
|
210
|
+
const startLine = node.properties.startLine;
|
|
211
|
+
const endLine = node.properties.endLine;
|
|
212
|
+
if (startLine === undefined || endLine === undefined)
|
|
213
|
+
return '';
|
|
214
|
+
const lines = content.split('\n');
|
|
215
|
+
const exactSymbolContent = EXACT_SYMBOL_CONTENT_LABELS.has(node.label);
|
|
216
|
+
const start = Math.max(0, exactSymbolContent ? startLine : startLine - 2);
|
|
217
|
+
const end = Math.min(lines.length - 1, exactSymbolContent ? endLine : endLine + 2);
|
|
218
|
+
const snippet = lines.slice(start, end + 1).join('\n');
|
|
219
|
+
const MAX_SNIPPET = 5000;
|
|
220
|
+
const capped = snippet.length > MAX_SNIPPET ? snippet.slice(0, MAX_SNIPPET) + '\n... [truncated]' : snippet;
|
|
221
|
+
return (0, exports.normalizeFtsText)(capped);
|
|
222
|
+
};
|
|
223
|
+
// ============================================================================
|
|
224
|
+
// BUFFERED CSV WRITER
|
|
225
|
+
// ============================================================================
|
|
226
|
+
class BufferedCSVWriter {
|
|
227
|
+
ws;
|
|
228
|
+
buffer = [];
|
|
229
|
+
bufferedBytes = 0;
|
|
230
|
+
rows = 0;
|
|
231
|
+
constructor(filePath, header) {
|
|
232
|
+
this.ws = (0, fs_1.createWriteStream)(filePath, 'utf-8');
|
|
233
|
+
// Large repos flush many times — raise listener cap to avoid MaxListenersExceededWarning
|
|
234
|
+
this.ws.setMaxListeners(50);
|
|
235
|
+
this.buffer.push(header);
|
|
236
|
+
this.bufferedBytes = Buffer.byteLength(header) + 1;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Buffer a row. Returns a promise ONLY when the buffer crossed FLUSH_BYTES
|
|
240
|
+
* and a disk write was issued; otherwise returns `undefined` so the caller
|
|
241
|
+
* can skip awaiting (#2203 U3) — avoiding a microtask tick on every buffered
|
|
242
|
+
* row (millions at scale). The flush promise still resolves on drain, so
|
|
243
|
+
* backpressure is preserved on the rows that actually write.
|
|
244
|
+
*/
|
|
245
|
+
addRow(row) {
|
|
246
|
+
this.buffer.push(row);
|
|
247
|
+
this.bufferedBytes += Buffer.byteLength(row) + 1;
|
|
248
|
+
this.rows++;
|
|
249
|
+
if ((0, exports.shouldFlushCSVBuffer)(this.bufferedBytes)) {
|
|
250
|
+
return this.flush();
|
|
251
|
+
}
|
|
252
|
+
return undefined;
|
|
253
|
+
}
|
|
254
|
+
flush() {
|
|
255
|
+
if (this.buffer.length === 0)
|
|
256
|
+
return Promise.resolve();
|
|
257
|
+
const chunk = this.buffer.join('\n') + '\n';
|
|
258
|
+
this.buffer.length = 0;
|
|
259
|
+
this.bufferedBytes = 0;
|
|
260
|
+
return new Promise((resolve, reject) => {
|
|
261
|
+
this.ws.once('error', reject);
|
|
262
|
+
const ok = this.ws.write(chunk);
|
|
263
|
+
if (ok) {
|
|
264
|
+
this.ws.removeListener('error', reject);
|
|
265
|
+
resolve();
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
this.ws.once('drain', () => {
|
|
269
|
+
this.ws.removeListener('error', reject);
|
|
270
|
+
resolve();
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
async finish() {
|
|
276
|
+
await this.flush();
|
|
277
|
+
return new Promise((resolve, reject) => {
|
|
278
|
+
this.ws.end(() => resolve());
|
|
279
|
+
this.ws.on('error', reject);
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// ============================================================================
|
|
284
|
+
// STREAMING CSV GENERATION — SINGLE PASS
|
|
285
|
+
// ============================================================================
|
|
286
|
+
/** Canonical relationship CSV header — shared by the emit pass and the
|
|
287
|
+
* `splitRelCsvByLabelPair` differential oracle. */
|
|
288
|
+
exports.REL_CSV_HEADER = 'from,to,type,confidence,reason,step';
|
|
289
|
+
/** Build the escaped CSV row (no trailing newline) for one relationship.
|
|
290
|
+
* Single source of the relationship row bytes — used by the emit pass and by
|
|
291
|
+
* the byte-identity differential test that feeds the legacy split oracle. */
|
|
292
|
+
const buildRelRow = (rel) => [
|
|
293
|
+
(0, exports.escapeCSVField)(rel.sourceId),
|
|
294
|
+
(0, exports.escapeCSVField)(rel.targetId),
|
|
295
|
+
(0, exports.escapeCSVField)(rel.type),
|
|
296
|
+
(0, exports.escapeCSVNumber)(rel.confidence, 1.0),
|
|
297
|
+
(0, exports.escapeCSVField)(rel.reason),
|
|
298
|
+
(0, exports.escapeCSVNumber)(rel.step, 0),
|
|
299
|
+
].join(',');
|
|
300
|
+
exports.buildRelRow = buildRelRow;
|
|
301
|
+
/** Canonical BasicBlock node CSV header — taint/PDG substrate (issue #2080).
|
|
302
|
+
* No `name` column; blocks are identified by id + source span. Shared by the
|
|
303
|
+
* whole-graph emit pass and the streaming PDG emit sink (issue #2202) so the
|
|
304
|
+
* two paths produce byte-identical BasicBlock rows by construction. */
|
|
305
|
+
exports.BASICBLOCK_CSV_HEADER = 'id,filePath,startLine,endLine,text,callees,calleeIds';
|
|
306
|
+
/** Build the escaped CSV row (no trailing newline) for one BasicBlock node.
|
|
307
|
+
* Single source of the BasicBlock row bytes — used by `streamAllCSVsToDisk`
|
|
308
|
+
* and by the streaming `PdgEmitSink` (issue #2202). `callees` is a comma-free
|
|
309
|
+
* (space-joined) list of the leaf callee names invoked in the block — the
|
|
310
|
+
* statement-precise inter-procedural reach substrate (the field is itself a CSV
|
|
311
|
+
* cell, so the inner separator must NOT be a comma). `calleeIds` is the SOUND
|
|
312
|
+
* parallel to `callees`: the space-joined RESOLVED callee symbol ids for the
|
|
313
|
+
* block (#2227 follow-up), likewise a comma-free cell. */
|
|
314
|
+
const buildBasicBlockRow = (node) => [
|
|
315
|
+
(0, exports.escapeCSVField)(node.id),
|
|
316
|
+
(0, exports.escapeCSVField)(node.properties.filePath || ''),
|
|
317
|
+
(0, exports.escapeCSVNumber)(node.properties.startLine, -1),
|
|
318
|
+
(0, exports.escapeCSVNumber)(node.properties.endLine, -1),
|
|
319
|
+
(0, exports.escapeCSVField)(node.properties.text || ''),
|
|
320
|
+
(0, exports.escapeCSVField)(String(node.properties.callees ?? '')),
|
|
321
|
+
(0, exports.escapeCSVField)(String(node.properties.calleeIds ?? '')),
|
|
322
|
+
].join(',');
|
|
323
|
+
exports.buildBasicBlockRow = buildBasicBlockRow;
|
|
324
|
+
/**
|
|
325
|
+
* Stream all CSV data directly to disk files.
|
|
326
|
+
* Iterates graph nodes exactly ONCE — routes each node to the right writer.
|
|
327
|
+
* File contents are lazy-read from disk with a generous LRU cache.
|
|
328
|
+
*
|
|
329
|
+
* `onNodePhaseComplete` (optional, #2203 parallelism leg): fired exactly once,
|
|
330
|
+
* right after every node CSV is fully flushed to disk and BEFORE the
|
|
331
|
+
* relationship pass starts writing any `rel_*.csv`. It receives the finished
|
|
332
|
+
* node-file manifest so the caller can begin `COPY`-ing nodes while this
|
|
333
|
+
* function keeps generating relationship CSVs (the only single-writer-safe
|
|
334
|
+
* overlap — node `COPY` ‖ relationship emit). It is intentionally NOT awaited:
|
|
335
|
+
* the relationship pass proceeds concurrently with whatever the caller
|
|
336
|
+
* schedules. A synchronous throw from the callback is allowed and propagates out
|
|
337
|
+
* of this function (rejecting the returned promise) — it is raised before the
|
|
338
|
+
* relationship pass begins, so no `rel_*.csv` is written; `loadGraphToLbug` uses
|
|
339
|
+
* this to surface its PDG-manifest collision guard. The callback must NOT, however,
|
|
340
|
+
* schedule un-awaited async work that can reject unobserved. Absent ⇒ today's
|
|
341
|
+
* behavior, byte-for-byte.
|
|
342
|
+
*/
|
|
343
|
+
const streamAllCSVsToDisk = async (graph, repoPath, csvDir, onNodePhaseComplete) => {
|
|
344
|
+
// Deterministic (id-sorted) node/relationship row order when enabled;
|
|
345
|
+
// default off = today's graph-insertion order (byte-identical).
|
|
346
|
+
const sortOutput = (0, env_js_1.parseTruthyEnv)(process.env.CGRAPH_SORT_GRAPH_OUTPUT);
|
|
347
|
+
// Remove stale CSVs from previous crashed runs, then recreate
|
|
348
|
+
try {
|
|
349
|
+
await promises_1.default.rm(csvDir, { recursive: true, force: true });
|
|
350
|
+
}
|
|
351
|
+
catch { }
|
|
352
|
+
await promises_1.default.mkdir(csvDir, { recursive: true });
|
|
353
|
+
// We open ~30 concurrent write-streams; raise process limit to suppress
|
|
354
|
+
// MaxListenersExceededWarning (restored after all streams finish).
|
|
355
|
+
const prevMax = process.getMaxListeners();
|
|
356
|
+
process.setMaxListeners(prevMax + 40);
|
|
357
|
+
// try/finally so the listener bump is ALWAYS restored — including the
|
|
358
|
+
// rel-routing throw path (#2203 U2) and any node-writer finish() rejection,
|
|
359
|
+
// not just the success path (avoids leaking +40 listeners across failed runs
|
|
360
|
+
// in long-lived hosts / the test suite).
|
|
361
|
+
try {
|
|
362
|
+
const contentCache = new FileContentCache(repoPath);
|
|
363
|
+
// Create writers for every node type up-front
|
|
364
|
+
const fileWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'file.csv'), 'id,name,filePath,content');
|
|
365
|
+
const folderWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'folder.csv'), 'id,name,filePath');
|
|
366
|
+
const codeElementHeader = 'id,name,filePath,startLine,endLine,isExported,content,description';
|
|
367
|
+
const functionWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'function.csv'), codeElementHeader);
|
|
368
|
+
const classWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'class.csv'), `${codeElementHeader},frameworkAnnotations`);
|
|
369
|
+
const interfaceWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'interface.csv'), codeElementHeader);
|
|
370
|
+
const methodHeader = 'id,name,filePath,startLine,endLine,isExported,content,description,parameterCount,returnType';
|
|
371
|
+
const methodWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'method.csv'), methodHeader);
|
|
372
|
+
const codeElemWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'codeelement.csv'), codeElementHeader);
|
|
373
|
+
const communityWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'community.csv'), 'id,label,heuristicLabel,keywords,description,enrichedBy,cohesion,symbolCount');
|
|
374
|
+
const processWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'process.csv'), 'id,label,heuristicLabel,processType,stepCount,communities,entryPointId,terminalId');
|
|
375
|
+
// Section nodes have an extra 'level' column
|
|
376
|
+
const sectionWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'section.csv'), 'id,name,filePath,startLine,endLine,level,content,description');
|
|
377
|
+
// Route nodes for API endpoint mapping
|
|
378
|
+
const routeWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'route.csv'), 'id,name,filePath,responseKeys,errorKeys,middleware,method,handlerSymbolId');
|
|
379
|
+
// Tool nodes for MCP tool definitions
|
|
380
|
+
const toolWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'tool.csv'), 'id,name,filePath,description');
|
|
381
|
+
// BasicBlock nodes — taint/PDG substrate (issue #2080). No `name` column;
|
|
382
|
+
// blocks are identified by id + source span. Emitted by no phase yet.
|
|
383
|
+
const basicBlockWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'basicblock.csv'), exports.BASICBLOCK_CSV_HEADER);
|
|
384
|
+
// Multi-language node types share the same CSV shape (no isExported column)
|
|
385
|
+
const multiLangHeader = 'id,name,filePath,startLine,endLine,content,description';
|
|
386
|
+
const MULTI_LANG_TYPES = [
|
|
387
|
+
'Struct',
|
|
388
|
+
'Enum',
|
|
389
|
+
'Macro',
|
|
390
|
+
'Typedef',
|
|
391
|
+
'Union',
|
|
392
|
+
'Namespace',
|
|
393
|
+
'Trait',
|
|
394
|
+
'Impl',
|
|
395
|
+
'TypeAlias',
|
|
396
|
+
'Const',
|
|
397
|
+
'Static',
|
|
398
|
+
'Variable',
|
|
399
|
+
'Property',
|
|
400
|
+
'Record',
|
|
401
|
+
'Delegate',
|
|
402
|
+
'Annotation',
|
|
403
|
+
'Constructor',
|
|
404
|
+
'Template',
|
|
405
|
+
'Module',
|
|
406
|
+
];
|
|
407
|
+
const propertyHeader = 'id,name,filePath,startLine,endLine,content,description,declaredType';
|
|
408
|
+
const multiLangWriters = new Map();
|
|
409
|
+
for (const t of MULTI_LANG_TYPES) {
|
|
410
|
+
multiLangWriters.set(t, new BufferedCSVWriter(path_1.default.join(csvDir, `${t.toLowerCase()}.csv`), t === 'Property' ? propertyHeader : multiLangHeader));
|
|
411
|
+
}
|
|
412
|
+
// ExternalService 节点 —— spec §6.1 单边情形的合成外部 RPC 服务端点。
|
|
413
|
+
// rpc-edges / http-api-calls 阶段在仅有一侧(消费方或提供方)落在仓库内时
|
|
414
|
+
// 生成它,使 RCALLS / HTTP_CALLS 边始终可解析、impact 能追踪外部依赖。列形态
|
|
415
|
+
// 与 EXTERNAL_SERVICE_SCHEMA 一致(通用 code-element 形,复用 multiLangHeader),
|
|
416
|
+
// 故 getCopyQuery 默认分支与 deleteNodesForFile 的 filePath 表过滤均无需改动 ——
|
|
417
|
+
// 此前仅缺本处 emit 接线,导致节点被 switch default 的"未知标签"分支静默丢弃。
|
|
418
|
+
const externalServiceWriter = new BufferedCSVWriter(path_1.default.join(csvDir, 'externalservice.csv'), multiLangHeader);
|
|
419
|
+
const codeWriterMap = {
|
|
420
|
+
Function: functionWriter,
|
|
421
|
+
Class: classWriter,
|
|
422
|
+
Interface: interfaceWriter,
|
|
423
|
+
CodeElement: codeElemWriter,
|
|
424
|
+
};
|
|
425
|
+
// Deduplicate all node types — the pipeline can produce duplicate IDs across
|
|
426
|
+
// all symbol types (Class, Method, Function, etc.), not just File nodes.
|
|
427
|
+
// A single Set covering every label prevents PK violations on COPY.
|
|
428
|
+
const seenNodeIds = new Set();
|
|
429
|
+
// --- SINGLE PASS over all nodes ---
|
|
430
|
+
for (const node of orderedNodes(graph, sortOutput)) {
|
|
431
|
+
if (seenNodeIds.has(node.id))
|
|
432
|
+
continue;
|
|
433
|
+
seenNodeIds.add(node.id);
|
|
434
|
+
// addRow returns a promise only when it flushes; awaiting it once after the
|
|
435
|
+
// switch (instead of `await`-ing every addRow) skips a per-row microtask
|
|
436
|
+
// tick on the rows buffered between byte-bounded flushes (#2203 U3).
|
|
437
|
+
let pending;
|
|
438
|
+
switch (node.label) {
|
|
439
|
+
case 'File': {
|
|
440
|
+
const content = await extractContent(node, contentCache);
|
|
441
|
+
pending = fileWriter.addRow([
|
|
442
|
+
(0, exports.escapeCSVField)(node.id),
|
|
443
|
+
(0, exports.escapeCSVField)(node.properties.name || ''),
|
|
444
|
+
(0, exports.escapeCSVField)(node.properties.filePath || ''),
|
|
445
|
+
(0, exports.escapeCSVField)(content),
|
|
446
|
+
].join(','));
|
|
447
|
+
break;
|
|
448
|
+
}
|
|
449
|
+
case 'Folder':
|
|
450
|
+
pending = folderWriter.addRow([
|
|
451
|
+
(0, exports.escapeCSVField)(node.id),
|
|
452
|
+
(0, exports.escapeCSVField)(node.properties.name || ''),
|
|
453
|
+
(0, exports.escapeCSVField)(node.properties.filePath || ''),
|
|
454
|
+
].join(','));
|
|
455
|
+
break;
|
|
456
|
+
case 'Community': {
|
|
457
|
+
const keywords = node.properties.keywords || [];
|
|
458
|
+
const keywordsStr = `[${keywords.map((k) => `'${k.replace(/\\/g, '\\\\').replace(/'/g, "''").replace(/,/g, '\\,')}'`).join(',')}]`;
|
|
459
|
+
pending = communityWriter.addRow([
|
|
460
|
+
(0, exports.escapeCSVField)(node.id),
|
|
461
|
+
(0, exports.escapeCSVField)(node.properties.name || ''),
|
|
462
|
+
(0, exports.escapeCSVField)(node.properties.heuristicLabel || ''),
|
|
463
|
+
keywordsStr,
|
|
464
|
+
(0, exports.escapeCSVField)(formatFtsDescription(node.properties.description || '')),
|
|
465
|
+
(0, exports.escapeCSVField)(node.properties.enrichedBy || 'heuristic'),
|
|
466
|
+
(0, exports.escapeCSVNumber)(node.properties.cohesion, 0),
|
|
467
|
+
(0, exports.escapeCSVNumber)(node.properties.symbolCount, 0),
|
|
468
|
+
].join(','));
|
|
469
|
+
break;
|
|
470
|
+
}
|
|
471
|
+
case 'Process': {
|
|
472
|
+
const communities = node.properties.communities || [];
|
|
473
|
+
const communitiesStr = `[${communities.map((c) => `'${c.replace(/'/g, "''")}'`).join(',')}]`;
|
|
474
|
+
pending = processWriter.addRow([
|
|
475
|
+
(0, exports.escapeCSVField)(node.id),
|
|
476
|
+
(0, exports.escapeCSVField)(node.properties.name || ''),
|
|
477
|
+
(0, exports.escapeCSVField)(node.properties.heuristicLabel || ''),
|
|
478
|
+
(0, exports.escapeCSVField)(node.properties.processType || ''),
|
|
479
|
+
(0, exports.escapeCSVNumber)(node.properties.stepCount, 0),
|
|
480
|
+
(0, exports.escapeCSVField)(communitiesStr),
|
|
481
|
+
(0, exports.escapeCSVField)(node.properties.entryPointId || ''),
|
|
482
|
+
(0, exports.escapeCSVField)(node.properties.terminalId || ''),
|
|
483
|
+
].join(','));
|
|
484
|
+
break;
|
|
485
|
+
}
|
|
486
|
+
case 'Method': {
|
|
487
|
+
const content = await extractContent(node, contentCache);
|
|
488
|
+
pending = methodWriter.addRow([
|
|
489
|
+
(0, exports.escapeCSVField)(node.id),
|
|
490
|
+
(0, exports.escapeCSVField)(node.properties.name || ''),
|
|
491
|
+
(0, exports.escapeCSVField)(node.properties.filePath || ''),
|
|
492
|
+
(0, exports.escapeCSVNumber)(node.properties.startLine, -1),
|
|
493
|
+
(0, exports.escapeCSVNumber)(node.properties.endLine, -1),
|
|
494
|
+
node.properties.isExported ? 'true' : 'false',
|
|
495
|
+
(0, exports.escapeCSVField)(content),
|
|
496
|
+
(0, exports.escapeCSVField)(formatFtsDescription(node.properties.description || '')),
|
|
497
|
+
(0, exports.escapeCSVNumber)(node.properties.parameterCount, 0),
|
|
498
|
+
(0, exports.escapeCSVField)(node.properties.returnType || ''),
|
|
499
|
+
].join(','));
|
|
500
|
+
break;
|
|
501
|
+
}
|
|
502
|
+
case 'Section': {
|
|
503
|
+
const content = await extractContent(node, contentCache);
|
|
504
|
+
pending = sectionWriter.addRow([
|
|
505
|
+
(0, exports.escapeCSVField)(node.id),
|
|
506
|
+
(0, exports.escapeCSVField)(node.properties.name || ''),
|
|
507
|
+
(0, exports.escapeCSVField)(node.properties.filePath || ''),
|
|
508
|
+
(0, exports.escapeCSVNumber)(node.properties.startLine, -1),
|
|
509
|
+
(0, exports.escapeCSVNumber)(node.properties.endLine, -1),
|
|
510
|
+
(0, exports.escapeCSVNumber)(node.properties.level, 1),
|
|
511
|
+
(0, exports.escapeCSVField)(content),
|
|
512
|
+
(0, exports.escapeCSVField)(formatFtsDescription(node.properties.description || '')),
|
|
513
|
+
].join(','));
|
|
514
|
+
break;
|
|
515
|
+
}
|
|
516
|
+
case 'Route': {
|
|
517
|
+
const responseKeys = node.properties.responseKeys || [];
|
|
518
|
+
// LadybugDB array literal inside a quoted CSV field: escapeCSVField wraps in "..."
|
|
519
|
+
// and the array uses single-quoted elements
|
|
520
|
+
const keysStr = `[${responseKeys.map((k) => `'${k.replace(/'/g, "''")}'`).join(',')}]`;
|
|
521
|
+
const errorKeys = node.properties.errorKeys || [];
|
|
522
|
+
const errorKeysStr = `[${errorKeys.map((k) => `'${k.replace(/'/g, "''")}'`).join(',')}]`;
|
|
523
|
+
const middleware = node.properties.middleware || [];
|
|
524
|
+
const middlewareStr = `[${middleware.map((m) => `'${m.replace(/'/g, "''")}'`).join(',')}]`;
|
|
525
|
+
pending = routeWriter.addRow([
|
|
526
|
+
(0, exports.escapeCSVField)(node.id),
|
|
527
|
+
(0, exports.escapeCSVField)(node.properties.name || ''),
|
|
528
|
+
(0, exports.escapeCSVField)(node.properties.filePath || ''),
|
|
529
|
+
(0, exports.escapeCSVField)(keysStr),
|
|
530
|
+
(0, exports.escapeCSVField)(errorKeysStr),
|
|
531
|
+
(0, exports.escapeCSVField)(middlewareStr),
|
|
532
|
+
(0, exports.escapeCSVField)(String(node.properties.method ?? '')),
|
|
533
|
+
(0, exports.escapeCSVField)(String(node.properties.handlerSymbolId ?? '')),
|
|
534
|
+
].join(','));
|
|
535
|
+
break;
|
|
536
|
+
}
|
|
537
|
+
case 'Tool':
|
|
538
|
+
pending = toolWriter.addRow([
|
|
539
|
+
(0, exports.escapeCSVField)(node.id),
|
|
540
|
+
(0, exports.escapeCSVField)(node.properties.name || ''),
|
|
541
|
+
(0, exports.escapeCSVField)(node.properties.filePath || ''),
|
|
542
|
+
(0, exports.escapeCSVField)(formatFtsDescription(node.properties.description || '')),
|
|
543
|
+
].join(','));
|
|
544
|
+
break;
|
|
545
|
+
case 'BasicBlock':
|
|
546
|
+
pending = basicBlockWriter.addRow((0, exports.buildBasicBlockRow)(node));
|
|
547
|
+
break;
|
|
548
|
+
case 'ExternalService': {
|
|
549
|
+
// 合成外部 RPC 服务节点(无源码):content 取空,行/列为 -1,其余字段
|
|
550
|
+
// 直接取 node.properties,列序与 multiLangHeader 严格对齐。
|
|
551
|
+
const content = await extractContent(node, contentCache);
|
|
552
|
+
pending = externalServiceWriter.addRow([
|
|
553
|
+
(0, exports.escapeCSVField)(node.id),
|
|
554
|
+
(0, exports.escapeCSVField)(node.properties.name || ''),
|
|
555
|
+
(0, exports.escapeCSVField)(node.properties.filePath || ''),
|
|
556
|
+
(0, exports.escapeCSVNumber)(node.properties.startLine, -1),
|
|
557
|
+
(0, exports.escapeCSVNumber)(node.properties.endLine, -1),
|
|
558
|
+
(0, exports.escapeCSVField)(content),
|
|
559
|
+
(0, exports.escapeCSVField)(formatFtsDescription(node.properties.description || '')),
|
|
560
|
+
].join(','));
|
|
561
|
+
break;
|
|
562
|
+
}
|
|
563
|
+
default: {
|
|
564
|
+
// Code element nodes (Function, Class, Interface, CodeElement)
|
|
565
|
+
const writer = codeWriterMap[node.label];
|
|
566
|
+
if (writer) {
|
|
567
|
+
const content = await extractContent(node, contentCache);
|
|
568
|
+
const row = [
|
|
569
|
+
(0, exports.escapeCSVField)(node.id),
|
|
570
|
+
(0, exports.escapeCSVField)(node.properties.name || ''),
|
|
571
|
+
(0, exports.escapeCSVField)(node.properties.filePath || ''),
|
|
572
|
+
(0, exports.escapeCSVNumber)(node.properties.startLine, -1),
|
|
573
|
+
(0, exports.escapeCSVNumber)(node.properties.endLine, -1),
|
|
574
|
+
node.properties.isExported ? 'true' : 'false',
|
|
575
|
+
(0, exports.escapeCSVField)(content),
|
|
576
|
+
(0, exports.escapeCSVField)(formatFtsDescription(node.properties.description || '')),
|
|
577
|
+
];
|
|
578
|
+
if (node.label === 'Class') {
|
|
579
|
+
row.push((0, exports.escapeCSVField)(formatCSVStringArray(node.properties.frameworkAnnotations)));
|
|
580
|
+
}
|
|
581
|
+
pending = writer.addRow(row.join(','));
|
|
582
|
+
}
|
|
583
|
+
else {
|
|
584
|
+
// Multi-language node types (Struct, Impl, Trait, Macro, etc.)
|
|
585
|
+
const mlWriter = multiLangWriters.get(node.label);
|
|
586
|
+
if (mlWriter) {
|
|
587
|
+
const content = await extractContent(node, contentCache);
|
|
588
|
+
pending = mlWriter.addRow([
|
|
589
|
+
(0, exports.escapeCSVField)(node.id),
|
|
590
|
+
(0, exports.escapeCSVField)(node.properties.name || ''),
|
|
591
|
+
(0, exports.escapeCSVField)(node.properties.filePath || ''),
|
|
592
|
+
(0, exports.escapeCSVNumber)(node.properties.startLine, -1),
|
|
593
|
+
(0, exports.escapeCSVNumber)(node.properties.endLine, -1),
|
|
594
|
+
(0, exports.escapeCSVField)(content),
|
|
595
|
+
(0, exports.escapeCSVField)(formatFtsDescription(node.properties.description || '')),
|
|
596
|
+
...(node.label === 'Property'
|
|
597
|
+
? [(0, exports.escapeCSVField)(node.properties.declaredType || '')]
|
|
598
|
+
: []),
|
|
599
|
+
].join(','));
|
|
600
|
+
}
|
|
601
|
+
else {
|
|
602
|
+
// Unknown label: not in codeWriterMap or multiLangWriters, so there
|
|
603
|
+
// is no CSV table for it and it is intentionally NOT persisted —
|
|
604
|
+
// `pending` stays undefined, so the loop awaits nothing. Made
|
|
605
|
+
// explicit so a future node type isn't silently dropped here: wire
|
|
606
|
+
// it into one of the writer maps above (or this branch).
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
break;
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
if (pending)
|
|
613
|
+
await pending;
|
|
614
|
+
}
|
|
615
|
+
// Finish all node writers
|
|
616
|
+
const allWriters = [
|
|
617
|
+
fileWriter,
|
|
618
|
+
folderWriter,
|
|
619
|
+
functionWriter,
|
|
620
|
+
classWriter,
|
|
621
|
+
interfaceWriter,
|
|
622
|
+
methodWriter,
|
|
623
|
+
codeElemWriter,
|
|
624
|
+
communityWriter,
|
|
625
|
+
processWriter,
|
|
626
|
+
sectionWriter,
|
|
627
|
+
routeWriter,
|
|
628
|
+
toolWriter,
|
|
629
|
+
basicBlockWriter,
|
|
630
|
+
externalServiceWriter,
|
|
631
|
+
...multiLangWriters.values(),
|
|
632
|
+
];
|
|
633
|
+
await Promise.all(allWriters.map((w) => w.finish()));
|
|
634
|
+
// Build the node-file manifest now (all writers are flushed; `.rows` is
|
|
635
|
+
// final). Hoisted above the relationship pass so `onNodePhaseComplete` can
|
|
636
|
+
// hand the caller a complete node manifest to start COPY-ing while we keep
|
|
637
|
+
// generating relationship CSVs below (#2203 overlap). The same map is
|
|
638
|
+
// returned, so the result is unchanged when no callback is supplied.
|
|
639
|
+
const nodeFiles = new Map();
|
|
640
|
+
const tableMap = [
|
|
641
|
+
['File', fileWriter],
|
|
642
|
+
['Folder', folderWriter],
|
|
643
|
+
['Function', functionWriter],
|
|
644
|
+
['Class', classWriter],
|
|
645
|
+
['Interface', interfaceWriter],
|
|
646
|
+
['Method', methodWriter],
|
|
647
|
+
['CodeElement', codeElemWriter],
|
|
648
|
+
['Community', communityWriter],
|
|
649
|
+
['Process', processWriter],
|
|
650
|
+
['Section', sectionWriter],
|
|
651
|
+
['Route', routeWriter],
|
|
652
|
+
['Tool', toolWriter],
|
|
653
|
+
['BasicBlock', basicBlockWriter],
|
|
654
|
+
['ExternalService', externalServiceWriter],
|
|
655
|
+
...Array.from(multiLangWriters.entries()).map(([name, w]) => [name, w]),
|
|
656
|
+
];
|
|
657
|
+
for (const [name, writer] of tableMap) {
|
|
658
|
+
if (writer.rows > 0) {
|
|
659
|
+
nodeFiles.set(name, {
|
|
660
|
+
csvPath: path_1.default.join(csvDir, `${name.toLowerCase()}.csv`),
|
|
661
|
+
rows: writer.rows,
|
|
662
|
+
});
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
// Node CSVs are on disk; relationship CSVs have not been touched yet. Hand
|
|
666
|
+
// the manifest to the caller (not awaited — the rel pass runs concurrently).
|
|
667
|
+
onNodePhaseComplete?.(nodeFiles);
|
|
668
|
+
// --- Stream relationships directly to per-FROM→TO-label-pair files ---
|
|
669
|
+
// (#2203 U2) Route every edge to its pair file in this single pass. The old
|
|
670
|
+
// monolithic relations.csv — and its line-by-line re-read + per-edge regex
|
|
671
|
+
// re-split in loadGraphToLbug — are gone, so the ~1M-edge set is written and
|
|
672
|
+
// read once instead of twice. The router applies the SAME label-derivation +
|
|
673
|
+
// validTables filter as the legacy splitRelCsvByLabelPair, so the per-pair
|
|
674
|
+
// files are byte-identical (asserted by the differential test).
|
|
675
|
+
const relRouter = new rel_pair_routing_js_1.RelPairRouter(csvDir, exports.REL_CSV_HEADER, rel_pair_routing_js_1.VALID_NODE_TABLES, exports.DECLARED_RELATION_PAIRS);
|
|
676
|
+
try {
|
|
677
|
+
let emitted = 0;
|
|
678
|
+
for (const rel of orderedRelationships(graph, sortOutput)) {
|
|
679
|
+
const pending = relRouter.route(rel.sourceId, rel.targetId, (0, exports.buildRelRow)(rel), rel.type);
|
|
680
|
+
if (pending)
|
|
681
|
+
await pending;
|
|
682
|
+
// Periodically hand the event loop back so the overlapped node COPY and
|
|
683
|
+
// write-stream drains run instead of starving behind this synchronous
|
|
684
|
+
// loop (#2226 F4). No effect on emitted bytes — pure scheduling.
|
|
685
|
+
if (++emitted % REL_YIELD_EVERY === 0)
|
|
686
|
+
await new Promise((r) => setImmediate(r));
|
|
687
|
+
}
|
|
688
|
+
await relRouter.close();
|
|
689
|
+
}
|
|
690
|
+
catch (err) {
|
|
691
|
+
relRouter.destroy();
|
|
692
|
+
// Rethrow the real stream error (EMFILE / disk-full) rather than the generic
|
|
693
|
+
// AbortError a pending drain-await rejects with — mirrors the retained
|
|
694
|
+
// splitRelCsvByLabelPair's `throw streamError ?? err`.
|
|
695
|
+
throw relRouter.lastError ?? err;
|
|
696
|
+
}
|
|
697
|
+
return {
|
|
698
|
+
nodeFiles,
|
|
699
|
+
relsByPair: relRouter.byPair,
|
|
700
|
+
relHeader: exports.REL_CSV_HEADER,
|
|
701
|
+
skippedRels: relRouter.skipped,
|
|
702
|
+
totalValidRels: relRouter.total,
|
|
703
|
+
};
|
|
704
|
+
}
|
|
705
|
+
finally {
|
|
706
|
+
// Restore original process listener limit on every path (success or throw).
|
|
707
|
+
process.setMaxListeners(prevMax);
|
|
708
|
+
}
|
|
709
|
+
};
|
|
710
|
+
exports.streamAllCSVsToDisk = streamAllCSVsToDisk;
|