spectra-cli 4.1.1 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -5
- package/dist/.spectra-build-meta.json +9 -0
- package/dist/adapters/go-adapter.d.ts.map +1 -1
- package/dist/adapters/go-adapter.js +2 -0
- package/dist/adapters/go-adapter.js.map +1 -1
- package/dist/adapters/index.d.ts +1 -1
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/java-adapter.d.ts.map +1 -1
- package/dist/adapters/java-adapter.js +2 -0
- package/dist/adapters/java-adapter.js.map +1 -1
- package/dist/adapters/language-adapter.d.ts +42 -9
- package/dist/adapters/language-adapter.d.ts.map +1 -1
- package/dist/adapters/python-adapter.d.ts +34 -6
- package/dist/adapters/python-adapter.d.ts.map +1 -1
- package/dist/adapters/python-adapter.js +168 -61
- package/dist/adapters/python-adapter.js.map +1 -1
- package/dist/adapters/ts-js-adapter.d.ts +13 -5
- package/dist/adapters/ts-js-adapter.d.ts.map +1 -1
- package/dist/adapters/ts-js-adapter.js +55 -14
- package/dist/adapters/ts-js-adapter.js.map +1 -1
- package/dist/batch/batch-orchestrator.d.ts +74 -5
- package/dist/batch/batch-orchestrator.d.ts.map +1 -1
- package/dist/batch/batch-orchestrator.js +583 -70
- package/dist/batch/batch-orchestrator.js.map +1 -1
- package/dist/batch/delta-regenerator.d.ts +2 -2
- package/dist/batch/delta-regenerator.d.ts.map +1 -1
- package/dist/batch/delta-regenerator.js +21 -28
- package/dist/batch/delta-regenerator.js.map +1 -1
- package/dist/batch/module-grouper.d.ts +9 -2
- package/dist/batch/module-grouper.d.ts.map +1 -1
- package/dist/batch/module-grouper.js +3 -1
- package/dist/batch/module-grouper.js.map +1 -1
- package/dist/batch/regen-plan.d.ts +78 -0
- package/dist/batch/regen-plan.d.ts.map +1 -0
- package/dist/batch/regen-plan.js +93 -0
- package/dist/batch/regen-plan.js.map +1 -0
- package/dist/cli/commands/batch.d.ts.map +1 -1
- package/dist/cli/commands/batch.js +36 -8
- package/dist/cli/commands/batch.js.map +1 -1
- package/dist/cli/commands/graph.js +1 -1
- package/dist/cli/commands/graph.js.map +1 -1
- package/dist/cli/commands/index.d.ts +8 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +274 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/query.d.ts.map +1 -1
- package/dist/cli/commands/query.js +3 -1
- package/dist/cli/commands/query.js.map +1 -1
- package/dist/cli/commands/scaffold-kb.d.ts +9 -0
- package/dist/cli/commands/scaffold-kb.d.ts.map +1 -0
- package/dist/cli/commands/scaffold-kb.js +179 -0
- package/dist/cli/commands/scaffold-kb.js.map +1 -0
- package/dist/cli/index.js +33 -14
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/error-handler.d.ts +0 -6
- package/dist/cli/utils/error-handler.d.ts.map +1 -1
- package/dist/cli/utils/error-handler.js +0 -13
- package/dist/cli/utils/error-handler.js.map +1 -1
- package/dist/cli/utils/parse-args.d.ts +55 -3
- package/dist/cli/utils/parse-args.d.ts.map +1 -1
- package/dist/cli/utils/parse-args.js +176 -13
- package/dist/cli/utils/parse-args.js.map +1 -1
- package/dist/cli/version-meta.d.ts +16 -0
- package/dist/cli/version-meta.d.ts.map +1 -0
- package/dist/cli/version-meta.js +28 -0
- package/dist/cli/version-meta.js.map +1 -0
- package/dist/core/ast-analyzer.d.ts.map +1 -1
- package/dist/core/ast-analyzer.js +75 -5
- package/dist/core/ast-analyzer.js.map +1 -1
- package/dist/core/import-resolver.d.ts +93 -0
- package/dist/core/import-resolver.d.ts.map +1 -0
- package/dist/core/import-resolver.js +414 -0
- package/dist/core/import-resolver.js.map +1 -0
- package/dist/core/query-mappers/base-mapper.d.ts +13 -0
- package/dist/core/query-mappers/base-mapper.d.ts.map +1 -1
- package/dist/core/query-mappers/go-mapper.d.ts +68 -0
- package/dist/core/query-mappers/go-mapper.d.ts.map +1 -1
- package/dist/core/query-mappers/go-mapper.js +421 -0
- package/dist/core/query-mappers/go-mapper.js.map +1 -1
- package/dist/core/query-mappers/java-mapper.d.ts +196 -0
- package/dist/core/query-mappers/java-mapper.d.ts.map +1 -1
- package/dist/core/query-mappers/java-mapper.js +600 -0
- package/dist/core/query-mappers/java-mapper.js.map +1 -1
- package/dist/core/query-mappers/python-mapper.d.ts +55 -0
- package/dist/core/query-mappers/python-mapper.d.ts.map +1 -1
- package/dist/core/query-mappers/python-mapper.js +273 -0
- package/dist/core/query-mappers/python-mapper.js.map +1 -1
- package/dist/core/query-mappers/typescript-mapper.d.ts +102 -0
- package/dist/core/query-mappers/typescript-mapper.d.ts.map +1 -1
- package/dist/core/query-mappers/typescript-mapper.js +470 -0
- package/dist/core/query-mappers/typescript-mapper.js.map +1 -1
- package/dist/core/single-spec-orchestrator.d.ts +21 -0
- package/dist/core/single-spec-orchestrator.d.ts.map +1 -1
- package/dist/core/single-spec-orchestrator.js +187 -23
- package/dist/core/single-spec-orchestrator.js.map +1 -1
- package/dist/core/skeleton-hash.d.ts +33 -0
- package/dist/core/skeleton-hash.d.ts.map +1 -0
- package/dist/core/skeleton-hash.js +76 -0
- package/dist/core/skeleton-hash.js.map +1 -0
- package/dist/core/tree-sitter-analyzer.d.ts +7 -0
- package/dist/core/tree-sitter-analyzer.d.ts.map +1 -1
- package/dist/core/tree-sitter-analyzer.js +32 -1
- package/dist/core/tree-sitter-analyzer.js.map +1 -1
- package/dist/core/tree-sitter-fallback.d.ts +12 -4
- package/dist/core/tree-sitter-fallback.d.ts.map +1 -1
- package/dist/core/tree-sitter-fallback.js +160 -12
- package/dist/core/tree-sitter-fallback.js.map +1 -1
- package/dist/extraction/extraction-types.d.ts +25 -25
- package/dist/extraction/image-extractor.d.ts.map +1 -1
- package/dist/extraction/image-extractor.js +3 -1
- package/dist/extraction/image-extractor.js.map +1 -1
- package/dist/extraction/markdown-extractor.d.ts.map +1 -1
- package/dist/extraction/markdown-extractor.js +3 -1
- package/dist/extraction/markdown-extractor.js.map +1 -1
- package/dist/generator/frontmatter.d.ts +5 -0
- package/dist/generator/frontmatter.d.ts.map +1 -1
- package/dist/generator/frontmatter.js +4 -0
- package/dist/generator/frontmatter.js.map +1 -1
- package/dist/generator/index-generator.d.ts +3 -3
- package/dist/generator/index-generator.d.ts.map +1 -1
- package/dist/generator/index-generator.js +1 -1
- package/dist/generator/index-generator.js.map +1 -1
- package/dist/graph/directory-graph.d.ts +14 -4
- package/dist/graph/directory-graph.d.ts.map +1 -1
- package/dist/graph/directory-graph.js +71 -128
- package/dist/graph/directory-graph.js.map +1 -1
- package/dist/graph/mermaid-renderer.d.ts +8 -5
- package/dist/graph/mermaid-renderer.d.ts.map +1 -1
- package/dist/graph/mermaid-renderer.js +3 -3
- package/dist/graph/mermaid-renderer.js.map +1 -1
- package/dist/graph/topological-sort.d.ts +13 -6
- package/dist/graph/topological-sort.d.ts.map +1 -1
- package/dist/graph/topological-sort.js +2 -2
- package/dist/graph/topological-sort.js.map +1 -1
- package/dist/kb-mcp/index.d.ts +14 -0
- package/dist/kb-mcp/index.d.ts.map +1 -0
- package/dist/kb-mcp/index.js +24 -0
- package/dist/kb-mcp/index.js.map +1 -0
- package/dist/kb-mcp/lib/kb-error.d.ts +21 -0
- package/dist/kb-mcp/lib/kb-error.d.ts.map +1 -0
- package/dist/kb-mcp/lib/kb-error.js +28 -0
- package/dist/kb-mcp/lib/kb-error.js.map +1 -0
- package/dist/kb-mcp/lib/kb-locator.d.ts +58 -0
- package/dist/kb-mcp/lib/kb-locator.d.ts.map +1 -0
- package/dist/kb-mcp/lib/kb-locator.js +85 -0
- package/dist/kb-mcp/lib/kb-locator.js.map +1 -0
- package/dist/kb-mcp/lib/result-merger.d.ts +35 -0
- package/dist/kb-mcp/lib/result-merger.d.ts.map +1 -0
- package/dist/kb-mcp/lib/result-merger.js +64 -0
- package/dist/kb-mcp/lib/result-merger.js.map +1 -0
- package/dist/kb-mcp/server.d.ts +12 -0
- package/dist/kb-mcp/server.d.ts.map +1 -0
- package/dist/kb-mcp/server.js +29 -0
- package/dist/kb-mcp/server.js.map +1 -0
- package/dist/kb-mcp/tools/kb-api-lookup.d.ts +28 -0
- package/dist/kb-mcp/tools/kb-api-lookup.d.ts.map +1 -0
- package/dist/kb-mcp/tools/kb-api-lookup.js +237 -0
- package/dist/kb-mcp/tools/kb-api-lookup.js.map +1 -0
- package/dist/kb-mcp/tools/kb-doc-lookup.d.ts +20 -0
- package/dist/kb-mcp/tools/kb-doc-lookup.d.ts.map +1 -0
- package/dist/kb-mcp/tools/kb-doc-lookup.js +92 -0
- package/dist/kb-mcp/tools/kb-doc-lookup.js.map +1 -0
- package/dist/kb-mcp/tools/kb-search.d.ts +23 -0
- package/dist/kb-mcp/tools/kb-search.d.ts.map +1 -0
- package/dist/kb-mcp/tools/kb-search.js +126 -0
- package/dist/kb-mcp/tools/kb-search.js.map +1 -0
- package/dist/knowledge-graph/call-resolver.d.ts +64 -0
- package/dist/knowledge-graph/call-resolver.d.ts.map +1 -0
- package/dist/knowledge-graph/call-resolver.js +323 -0
- package/dist/knowledge-graph/call-resolver.js.map +1 -0
- package/dist/knowledge-graph/import-resolver.d.ts +39 -0
- package/dist/knowledge-graph/import-resolver.d.ts.map +1 -0
- package/dist/knowledge-graph/import-resolver.js +214 -0
- package/dist/knowledge-graph/import-resolver.js.map +1 -0
- package/dist/knowledge-graph/incremental.d.ts +131 -0
- package/dist/knowledge-graph/incremental.d.ts.map +1 -0
- package/dist/knowledge-graph/incremental.js +432 -0
- package/dist/knowledge-graph/incremental.js.map +1 -0
- package/dist/knowledge-graph/index.d.ts +85 -0
- package/dist/knowledge-graph/index.d.ts.map +1 -0
- package/dist/knowledge-graph/index.js +198 -0
- package/dist/knowledge-graph/index.js.map +1 -0
- package/dist/knowledge-graph/module-derivation.d.ts +252 -0
- package/dist/knowledge-graph/module-derivation.d.ts.map +1 -0
- package/dist/knowledge-graph/module-derivation.js +418 -0
- package/dist/knowledge-graph/module-derivation.js.map +1 -0
- package/dist/knowledge-graph/persistence.d.ts +310 -0
- package/dist/knowledge-graph/persistence.d.ts.map +1 -0
- package/dist/knowledge-graph/persistence.js +280 -0
- package/dist/knowledge-graph/persistence.js.map +1 -0
- package/dist/knowledge-graph/query-helpers.d.ts +191 -0
- package/dist/knowledge-graph/query-helpers.d.ts.map +1 -0
- package/dist/knowledge-graph/query-helpers.js +559 -0
- package/dist/knowledge-graph/query-helpers.js.map +1 -0
- package/dist/knowledge-graph/relativize.d.ts +51 -0
- package/dist/knowledge-graph/relativize.d.ts.map +1 -0
- package/dist/knowledge-graph/relativize.js +104 -0
- package/dist/knowledge-graph/relativize.js.map +1 -0
- package/dist/knowledge-graph/unified-graph.d.ts +310 -0
- package/dist/knowledge-graph/unified-graph.d.ts.map +1 -0
- package/dist/knowledge-graph/unified-graph.js +182 -0
- package/dist/knowledge-graph/unified-graph.js.map +1 -0
- package/dist/mcp/agent-context-tools.d.ts +53 -0
- package/dist/mcp/agent-context-tools.d.ts.map +1 -0
- package/dist/mcp/agent-context-tools.js +806 -0
- package/dist/mcp/agent-context-tools.js.map +1 -0
- package/dist/mcp/file-nav-tools.d.ts +42 -0
- package/dist/mcp/file-nav-tools.d.ts.map +1 -0
- package/dist/mcp/file-nav-tools.js +318 -0
- package/dist/mcp/file-nav-tools.js.map +1 -0
- package/dist/mcp/graph-tools.d.ts +22 -0
- package/dist/mcp/graph-tools.d.ts.map +1 -1
- package/dist/mcp/graph-tools.js +204 -133
- package/dist/mcp/graph-tools.js.map +1 -1
- package/dist/mcp/lib/file-nav-helpers.d.ts +128 -0
- package/dist/mcp/lib/file-nav-helpers.d.ts.map +1 -0
- package/dist/mcp/lib/file-nav-helpers.js +305 -0
- package/dist/mcp/lib/file-nav-helpers.js.map +1 -0
- package/dist/mcp/lib/response-helpers.d.ts +67 -0
- package/dist/mcp/lib/response-helpers.d.ts.map +1 -0
- package/dist/mcp/lib/response-helpers.js +103 -0
- package/dist/mcp/lib/response-helpers.js.map +1 -0
- package/dist/mcp/lib/telemetry.d.ts +69 -0
- package/dist/mcp/lib/telemetry.d.ts.map +1 -0
- package/dist/mcp/lib/telemetry.js +113 -0
- package/dist/mcp/lib/telemetry.js.map +1 -0
- package/dist/mcp/lib/tool-response.d.ts +46 -0
- package/dist/mcp/lib/tool-response.d.ts.map +1 -0
- package/dist/mcp/lib/tool-response.js +83 -0
- package/dist/mcp/lib/tool-response.js.map +1 -0
- package/dist/mcp/server.d.ts +14 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +216 -158
- package/dist/mcp/server.js.map +1 -1
- package/dist/models/call-site.d.ts +68 -0
- package/dist/models/call-site.d.ts.map +1 -0
- package/dist/models/call-site.js +60 -0
- package/dist/models/call-site.js.map +1 -0
- package/dist/models/code-skeleton.d.ts +80 -6
- package/dist/models/code-skeleton.d.ts.map +1 -1
- package/dist/models/code-skeleton.js +30 -0
- package/dist/models/code-skeleton.js.map +1 -1
- package/dist/models/drift-item.d.ts +4 -4
- package/dist/models/module-spec.d.ts +173 -94
- package/dist/models/module-spec.d.ts.map +1 -1
- package/dist/models/module-spec.js +6 -0
- package/dist/models/module-spec.js.map +1 -1
- package/dist/panoramic/adr-decision-pipeline.d.ts +53 -0
- package/dist/panoramic/adr-decision-pipeline.d.ts.map +1 -0
- package/dist/panoramic/adr-decision-pipeline.js +685 -0
- package/dist/panoramic/adr-decision-pipeline.js.map +1 -0
- package/dist/panoramic/api-surface-generator.d.ts +56 -0
- package/dist/panoramic/api-surface-generator.d.ts.map +1 -0
- package/dist/panoramic/api-surface-generator.js +1671 -0
- package/dist/panoramic/api-surface-generator.js.map +1 -0
- package/dist/panoramic/architecture-ir-builder.d.ts +19 -0
- package/dist/panoramic/architecture-ir-builder.d.ts.map +1 -0
- package/dist/panoramic/architecture-ir-builder.js +561 -0
- package/dist/panoramic/architecture-ir-builder.js.map +1 -0
- package/dist/panoramic/architecture-ir-exporters.d.ts +7 -0
- package/dist/panoramic/architecture-ir-exporters.d.ts.map +1 -0
- package/dist/panoramic/architecture-ir-exporters.js +183 -0
- package/dist/panoramic/architecture-ir-exporters.js.map +1 -0
- package/dist/panoramic/architecture-ir-generator.d.ts +36 -0
- package/dist/panoramic/architecture-ir-generator.d.ts.map +1 -0
- package/dist/panoramic/architecture-ir-generator.js +51 -0
- package/dist/panoramic/architecture-ir-generator.js.map +1 -0
- package/dist/panoramic/architecture-ir-mermaid-adapter.d.ts +6 -0
- package/dist/panoramic/architecture-ir-mermaid-adapter.d.ts.map +1 -0
- package/dist/panoramic/architecture-ir-mermaid-adapter.js +98 -0
- package/dist/panoramic/architecture-ir-mermaid-adapter.js.map +1 -0
- package/dist/panoramic/architecture-ir-model.d.ts +87 -0
- package/dist/panoramic/architecture-ir-model.d.ts.map +1 -0
- package/dist/panoramic/architecture-ir-model.js +20 -0
- package/dist/panoramic/architecture-ir-model.js.map +1 -0
- package/dist/panoramic/architecture-narrative.d.ts +68 -0
- package/dist/panoramic/architecture-narrative.d.ts.map +1 -0
- package/dist/panoramic/architecture-narrative.js +401 -0
- package/dist/panoramic/architecture-narrative.js.map +1 -0
- package/dist/panoramic/architecture-overview-generator.d.ts +31 -0
- package/dist/panoramic/architecture-overview-generator.d.ts.map +1 -0
- package/dist/panoramic/architecture-overview-generator.js +454 -0
- package/dist/panoramic/architecture-overview-generator.js.map +1 -0
- package/dist/panoramic/architecture-overview-model.d.ts +77 -0
- package/dist/panoramic/architecture-overview-model.d.ts.map +1 -0
- package/dist/panoramic/architecture-overview-model.js +31 -0
- package/dist/panoramic/architecture-overview-model.js.map +1 -0
- package/dist/panoramic/batch-project-docs.d.ts.map +1 -1
- package/dist/panoramic/batch-project-docs.js +4 -2
- package/dist/panoramic/batch-project-docs.js.map +1 -1
- package/dist/panoramic/builders/component-view-builder.d.ts +25 -1
- package/dist/panoramic/builders/component-view-builder.d.ts.map +1 -1
- package/dist/panoramic/builders/component-view-builder.js +83 -3
- package/dist/panoramic/builders/component-view-builder.js.map +1 -1
- package/dist/panoramic/builders/doc-graph-builder.d.ts +15 -2
- package/dist/panoramic/builders/doc-graph-builder.d.ts.map +1 -1
- package/dist/panoramic/builders/doc-graph-builder.js +20 -0
- package/dist/panoramic/builders/doc-graph-builder.js.map +1 -1
- package/dist/panoramic/component-view-builder.d.ts +17 -0
- package/dist/panoramic/component-view-builder.d.ts.map +1 -0
- package/dist/panoramic/component-view-builder.js +652 -0
- package/dist/panoramic/component-view-builder.js.map +1 -0
- package/dist/panoramic/component-view-model.d.ts +127 -0
- package/dist/panoramic/component-view-model.d.ts.map +1 -0
- package/dist/panoramic/component-view-model.js +65 -0
- package/dist/panoramic/component-view-model.js.map +1 -0
- package/dist/panoramic/config-reference-generator.d.ts +78 -0
- package/dist/panoramic/config-reference-generator.d.ts.map +1 -0
- package/dist/panoramic/config-reference-generator.js +199 -0
- package/dist/panoramic/config-reference-generator.js.map +1 -0
- package/dist/panoramic/coverage-auditor.d.ts +95 -0
- package/dist/panoramic/coverage-auditor.d.ts.map +1 -0
- package/dist/panoramic/coverage-auditor.js +290 -0
- package/dist/panoramic/coverage-auditor.js.map +1 -0
- package/dist/panoramic/cross-package-analyzer.d.ts +112 -0
- package/dist/panoramic/cross-package-analyzer.d.ts.map +1 -0
- package/dist/panoramic/cross-package-analyzer.js +258 -0
- package/dist/panoramic/cross-package-analyzer.js.map +1 -0
- package/dist/panoramic/data-model-generator.d.ts +528 -0
- package/dist/panoramic/data-model-generator.d.ts.map +1 -0
- package/dist/panoramic/data-model-generator.js +647 -0
- package/dist/panoramic/data-model-generator.js.map +1 -0
- package/dist/panoramic/doc-graph-builder.d.ts +80 -0
- package/dist/panoramic/doc-graph-builder.d.ts.map +1 -0
- package/dist/panoramic/doc-graph-builder.js +352 -0
- package/dist/panoramic/doc-graph-builder.js.map +1 -0
- package/dist/panoramic/docs-bundle-manifest-reader.d.ts +26 -0
- package/dist/panoramic/docs-bundle-manifest-reader.d.ts.map +1 -0
- package/dist/panoramic/docs-bundle-manifest-reader.js +106 -0
- package/dist/panoramic/docs-bundle-manifest-reader.js.map +1 -0
- package/dist/panoramic/docs-bundle-orchestrator.d.ts +14 -0
- package/dist/panoramic/docs-bundle-orchestrator.d.ts.map +1 -0
- package/dist/panoramic/docs-bundle-orchestrator.js +538 -0
- package/dist/panoramic/docs-bundle-orchestrator.js.map +1 -0
- package/dist/panoramic/docs-bundle-profiles.d.ts +4 -0
- package/dist/panoramic/docs-bundle-profiles.d.ts.map +1 -0
- package/dist/panoramic/docs-bundle-profiles.js +82 -0
- package/dist/panoramic/docs-bundle-profiles.js.map +1 -0
- package/dist/panoramic/docs-bundle-types.d.ts +94 -0
- package/dist/panoramic/docs-bundle-types.d.ts.map +1 -0
- package/dist/panoramic/docs-bundle-types.js +10 -0
- package/dist/panoramic/docs-bundle-types.js.map +1 -0
- package/dist/panoramic/docs-quality-evaluator.d.ts +31 -0
- package/dist/panoramic/docs-quality-evaluator.d.ts.map +1 -0
- package/dist/panoramic/docs-quality-evaluator.js +941 -0
- package/dist/panoramic/docs-quality-evaluator.js.map +1 -0
- package/dist/panoramic/docs-quality-model.d.ts +125 -0
- package/dist/panoramic/docs-quality-model.d.ts.map +1 -0
- package/dist/panoramic/docs-quality-model.js +166 -0
- package/dist/panoramic/docs-quality-model.js.map +1 -0
- package/dist/panoramic/dynamic-scenarios-builder.d.ts +18 -0
- package/dist/panoramic/dynamic-scenarios-builder.d.ts.map +1 -0
- package/dist/panoramic/dynamic-scenarios-builder.js +316 -0
- package/dist/panoramic/dynamic-scenarios-builder.js.map +1 -0
- package/dist/panoramic/event-surface-generator.d.ts +52 -0
- package/dist/panoramic/event-surface-generator.d.ts.map +1 -0
- package/dist/panoramic/event-surface-generator.js +507 -0
- package/dist/panoramic/event-surface-generator.js.map +1 -0
- package/dist/panoramic/generator-registry.d.ts +1 -1
- package/dist/panoramic/generator-registry.d.ts.map +1 -1
- package/dist/panoramic/generator-registry.js +5 -2
- package/dist/panoramic/generator-registry.js.map +1 -1
- package/dist/panoramic/generators/cross-package-analyzer.d.ts +5 -5
- package/dist/panoramic/generators/cross-package-analyzer.d.ts.map +1 -1
- package/dist/panoramic/generators/cross-package-analyzer.js +1 -1
- package/dist/panoramic/generators/cross-package-analyzer.js.map +1 -1
- package/dist/panoramic/generators/data-model-generator.d.ts +27 -27
- package/dist/panoramic/graph/confidence-mapper.d.ts +18 -0
- package/dist/panoramic/graph/confidence-mapper.d.ts.map +1 -1
- package/dist/panoramic/graph/confidence-mapper.js +26 -0
- package/dist/panoramic/graph/confidence-mapper.js.map +1 -1
- package/dist/panoramic/graph/graph-builder.d.ts +72 -2
- package/dist/panoramic/graph/graph-builder.d.ts.map +1 -1
- package/dist/panoramic/graph/graph-builder.js +330 -46
- package/dist/panoramic/graph/graph-builder.js.map +1 -1
- package/dist/panoramic/graph/graph-paths.d.ts +8 -0
- package/dist/panoramic/graph/graph-paths.d.ts.map +1 -1
- package/dist/panoramic/graph/graph-paths.js +10 -0
- package/dist/panoramic/graph/graph-paths.js.map +1 -1
- package/dist/panoramic/graph/graph-query.d.ts +49 -2
- package/dist/panoramic/graph/graph-query.d.ts.map +1 -1
- package/dist/panoramic/graph/graph-query.js +117 -19
- package/dist/panoramic/graph/graph-query.js.map +1 -1
- package/dist/panoramic/graph/graph-types.d.ts +32 -3
- package/dist/panoramic/graph/graph-types.d.ts.map +1 -1
- package/dist/panoramic/graph/index.d.ts +2 -1
- package/dist/panoramic/graph/index.d.ts.map +1 -1
- package/dist/panoramic/graph/index.js +1 -1
- package/dist/panoramic/graph/index.js.map +1 -1
- package/dist/panoramic/hyperedges/schema.d.ts +6 -6
- package/dist/panoramic/interface-surface-generator.d.ts +50 -0
- package/dist/panoramic/interface-surface-generator.d.ts.map +1 -0
- package/dist/panoramic/interface-surface-generator.js +388 -0
- package/dist/panoramic/interface-surface-generator.js.map +1 -0
- package/dist/panoramic/interfaces.d.ts +2 -2
- package/dist/panoramic/mock-readme-generator.d.ts +90 -0
- package/dist/panoramic/mock-readme-generator.d.ts.map +1 -0
- package/dist/panoramic/mock-readme-generator.js +111 -0
- package/dist/panoramic/mock-readme-generator.js.map +1 -0
- package/dist/panoramic/models/component-view-model.d.ts +1 -1
- package/dist/panoramic/models/component-view-model.d.ts.map +1 -1
- package/dist/panoramic/models/component-view-model.js.map +1 -1
- package/dist/panoramic/narrative-provenance-adapter.d.ts +8 -0
- package/dist/panoramic/narrative-provenance-adapter.d.ts.map +1 -0
- package/dist/panoramic/narrative-provenance-adapter.js +99 -0
- package/dist/panoramic/narrative-provenance-adapter.js.map +1 -0
- package/dist/panoramic/parser-registry.d.ts +1 -1
- package/dist/panoramic/parser-registry.js +1 -1
- package/dist/panoramic/parsers/types.d.ts +6 -6
- package/dist/panoramic/pattern-hints-generator.d.ts +28 -0
- package/dist/panoramic/pattern-hints-generator.d.ts.map +1 -0
- package/dist/panoramic/pattern-hints-generator.js +218 -0
- package/dist/panoramic/pattern-hints-generator.js.map +1 -0
- package/dist/panoramic/pattern-hints-model.d.ts +89 -0
- package/dist/panoramic/pattern-hints-model.d.ts.map +1 -0
- package/dist/panoramic/pattern-hints-model.js +61 -0
- package/dist/panoramic/pattern-hints-model.js.map +1 -0
- package/dist/panoramic/pattern-knowledge-base.d.ts +31 -0
- package/dist/panoramic/pattern-knowledge-base.d.ts.map +1 -0
- package/dist/panoramic/pattern-knowledge-base.js +407 -0
- package/dist/panoramic/pattern-knowledge-base.js.map +1 -0
- package/dist/panoramic/pipelines/adr-evidence-verifier.d.ts.map +1 -1
- package/dist/panoramic/pipelines/adr-evidence-verifier.js +1 -29
- package/dist/panoramic/pipelines/adr-evidence-verifier.js.map +1 -1
- package/dist/panoramic/pipelines/coverage-auditor.d.ts.map +1 -1
- package/dist/panoramic/pipelines/coverage-auditor.js +4 -2
- package/dist/panoramic/pipelines/coverage-auditor.js.map +1 -1
- package/dist/panoramic/pipelines/docs-bundle-orchestrator.js +13 -6
- package/dist/panoramic/pipelines/docs-bundle-orchestrator.js.map +1 -1
- package/dist/panoramic/pipelines/product-ux-docs.d.ts +5 -0
- package/dist/panoramic/pipelines/product-ux-docs.d.ts.map +1 -1
- package/dist/panoramic/pipelines/product-ux-docs.js +34 -6
- package/dist/panoramic/pipelines/product-ux-docs.js.map +1 -1
- package/dist/panoramic/product-ux-docs.d.ts +104 -0
- package/dist/panoramic/product-ux-docs.d.ts.map +1 -0
- package/dist/panoramic/product-ux-docs.js +817 -0
- package/dist/panoramic/product-ux-docs.js.map +1 -0
- package/dist/panoramic/qa/__tests__/citation.test.d.ts +2 -0
- package/dist/panoramic/qa/__tests__/citation.test.d.ts.map +1 -0
- package/dist/panoramic/qa/__tests__/citation.test.js +193 -0
- package/dist/panoramic/qa/__tests__/citation.test.js.map +1 -0
- package/dist/panoramic/qa/__tests__/debt-context.test.d.ts +2 -0
- package/dist/panoramic/qa/__tests__/debt-context.test.d.ts.map +1 -0
- package/dist/panoramic/qa/__tests__/debt-context.test.js +154 -0
- package/dist/panoramic/qa/__tests__/debt-context.test.js.map +1 -0
- package/dist/panoramic/qa/__tests__/graph-retriever.test.d.ts +2 -0
- package/dist/panoramic/qa/__tests__/graph-retriever.test.d.ts.map +1 -0
- package/dist/panoramic/qa/__tests__/graph-retriever.test.js +148 -0
- package/dist/panoramic/qa/__tests__/graph-retriever.test.js.map +1 -0
- package/dist/panoramic/qa/__tests__/index.test.d.ts +2 -0
- package/dist/panoramic/qa/__tests__/index.test.d.ts.map +1 -0
- package/dist/panoramic/qa/__tests__/index.test.js +246 -0
- package/dist/panoramic/qa/__tests__/index.test.js.map +1 -0
- package/dist/panoramic/qa/__tests__/llm-caller.test.d.ts +2 -0
- package/dist/panoramic/qa/__tests__/llm-caller.test.d.ts.map +1 -0
- package/dist/panoramic/qa/__tests__/llm-caller.test.js +168 -0
- package/dist/panoramic/qa/__tests__/llm-caller.test.js.map +1 -0
- package/dist/panoramic/qa/__tests__/prompt-builder.test.d.ts +2 -0
- package/dist/panoramic/qa/__tests__/prompt-builder.test.d.ts.map +1 -0
- package/dist/panoramic/qa/__tests__/prompt-builder.test.js +150 -0
- package/dist/panoramic/qa/__tests__/prompt-builder.test.js.map +1 -0
- package/dist/panoramic/qa/__tests__/qa-integration.test.d.ts +2 -0
- package/dist/panoramic/qa/__tests__/qa-integration.test.d.ts.map +1 -0
- package/dist/panoramic/qa/__tests__/qa-integration.test.js +296 -0
- package/dist/panoramic/qa/__tests__/qa-integration.test.js.map +1 -0
- package/dist/panoramic/qa/__tests__/rag-reranker.test.d.ts +2 -0
- package/dist/panoramic/qa/__tests__/rag-reranker.test.d.ts.map +1 -0
- package/dist/panoramic/qa/__tests__/rag-reranker.test.js +136 -0
- package/dist/panoramic/qa/__tests__/rag-reranker.test.js.map +1 -0
- package/dist/panoramic/qa/index.d.ts.map +1 -1
- package/dist/panoramic/qa/index.js +10 -3
- package/dist/panoramic/qa/index.js.map +1 -1
- package/dist/panoramic/query.d.ts +1 -0
- package/dist/panoramic/query.d.ts.map +1 -1
- package/dist/panoramic/query.js +5 -0
- package/dist/panoramic/query.js.map +1 -1
- package/dist/panoramic/runtime-topology-generator.d.ts +77 -0
- package/dist/panoramic/runtime-topology-generator.d.ts.map +1 -0
- package/dist/panoramic/runtime-topology-generator.js +676 -0
- package/dist/panoramic/runtime-topology-generator.js.map +1 -0
- package/dist/panoramic/runtime-topology-model.d.ts +145 -0
- package/dist/panoramic/runtime-topology-model.d.ts.map +1 -0
- package/dist/panoramic/runtime-topology-model.js +300 -0
- package/dist/panoramic/runtime-topology-model.js.map +1 -0
- package/dist/panoramic/troubleshooting-generator.d.ts +51 -0
- package/dist/panoramic/troubleshooting-generator.d.ts.map +1 -0
- package/dist/panoramic/troubleshooting-generator.js +451 -0
- package/dist/panoramic/troubleshooting-generator.js.map +1 -0
- package/dist/panoramic/utils/text-segmenter.d.ts +15 -0
- package/dist/panoramic/utils/text-segmenter.d.ts.map +1 -1
- package/dist/panoramic/utils/text-segmenter.js +38 -0
- package/dist/panoramic/utils/text-segmenter.js.map +1 -1
- package/dist/panoramic/workspace-index-generator.d.ts +148 -0
- package/dist/panoramic/workspace-index-generator.d.ts.map +1 -0
- package/dist/panoramic/workspace-index-generator.js +497 -0
- package/dist/panoramic/workspace-index-generator.js.map +1 -0
- package/dist/runtime-bootstrap.d.ts +9 -0
- package/dist/runtime-bootstrap.d.ts.map +1 -0
- package/dist/runtime-bootstrap.js +33 -0
- package/dist/runtime-bootstrap.js.map +1 -0
- package/dist/scaffold-kb/api-entities-serializer.d.ts +12 -0
- package/dist/scaffold-kb/api-entities-serializer.d.ts.map +1 -0
- package/dist/scaffold-kb/api-entities-serializer.js +144 -0
- package/dist/scaffold-kb/api-entities-serializer.js.map +1 -0
- package/dist/scaffold-kb/arbitration.d.ts +44 -0
- package/dist/scaffold-kb/arbitration.d.ts.map +1 -0
- package/dist/scaffold-kb/arbitration.js +144 -0
- package/dist/scaffold-kb/arbitration.js.map +1 -0
- package/dist/scaffold-kb/chunk-splitter.d.ts +20 -0
- package/dist/scaffold-kb/chunk-splitter.d.ts.map +1 -0
- package/dist/scaffold-kb/chunk-splitter.js +309 -0
- package/dist/scaffold-kb/chunk-splitter.js.map +1 -0
- package/dist/scaffold-kb/doc-graph-builder.d.ts +26 -0
- package/dist/scaffold-kb/doc-graph-builder.d.ts.map +1 -0
- package/dist/scaffold-kb/doc-graph-builder.js +72 -0
- package/dist/scaffold-kb/doc-graph-builder.js.map +1 -0
- package/dist/scaffold-kb/entity-extractor.d.ts +40 -0
- package/dist/scaffold-kb/entity-extractor.d.ts.map +1 -0
- package/dist/scaffold-kb/entity-extractor.js +0 -0
- package/dist/scaffold-kb/entity-extractor.js.map +1 -0
- package/dist/scaffold-kb/entity-heuristic.d.ts +14 -0
- package/dist/scaffold-kb/entity-heuristic.d.ts.map +1 -0
- package/dist/scaffold-kb/entity-heuristic.js +107 -0
- package/dist/scaffold-kb/entity-heuristic.js.map +1 -0
- package/dist/scaffold-kb/entity-matcher.d.ts +20 -0
- package/dist/scaffold-kb/entity-matcher.d.ts.map +1 -0
- package/dist/scaffold-kb/entity-matcher.js +53 -0
- package/dist/scaffold-kb/entity-matcher.js.map +1 -0
- package/dist/scaffold-kb/entity-util.d.ts +11 -0
- package/dist/scaffold-kb/entity-util.d.ts.map +1 -0
- package/dist/scaffold-kb/entity-util.js +23 -0
- package/dist/scaffold-kb/entity-util.js.map +1 -0
- package/dist/scaffold-kb/evidence-envelope.d.ts +17 -0
- package/dist/scaffold-kb/evidence-envelope.d.ts.map +1 -0
- package/dist/scaffold-kb/evidence-envelope.js +32 -0
- package/dist/scaffold-kb/evidence-envelope.js.map +1 -0
- package/dist/scaffold-kb/index.d.ts +20 -0
- package/dist/scaffold-kb/index.d.ts.map +1 -0
- package/dist/scaffold-kb/index.js +102 -0
- package/dist/scaffold-kb/index.js.map +1 -0
- package/dist/scaffold-kb/ingest/ingest-core.d.ts +47 -0
- package/dist/scaffold-kb/ingest/ingest-core.d.ts.map +1 -0
- package/dist/scaffold-kb/ingest/ingest-core.js +231 -0
- package/dist/scaffold-kb/ingest/ingest-core.js.map +1 -0
- package/dist/scaffold-kb/ingest/office-parser.d.ts +33 -0
- package/dist/scaffold-kb/ingest/office-parser.d.ts.map +1 -0
- package/dist/scaffold-kb/ingest/office-parser.js +187 -0
- package/dist/scaffold-kb/ingest/office-parser.js.map +1 -0
- package/dist/scaffold-kb/ingest/url-fetcher.d.ts +43 -0
- package/dist/scaffold-kb/ingest/url-fetcher.d.ts.map +1 -0
- package/dist/scaffold-kb/ingest/url-fetcher.js +245 -0
- package/dist/scaffold-kb/ingest/url-fetcher.js.map +1 -0
- package/dist/scaffold-kb/ingester.d.ts +38 -0
- package/dist/scaffold-kb/ingester.d.ts.map +1 -0
- package/dist/scaffold-kb/ingester.js +261 -0
- package/dist/scaffold-kb/ingester.js.map +1 -0
- package/dist/scaffold-kb/injection-format.d.ts +25 -0
- package/dist/scaffold-kb/injection-format.d.ts.map +1 -0
- package/dist/scaffold-kb/injection-format.js +55 -0
- package/dist/scaffold-kb/injection-format.js.map +1 -0
- package/dist/scaffold-kb/kb-writer.d.ts +13 -0
- package/dist/scaffold-kb/kb-writer.d.ts.map +1 -0
- package/dist/scaffold-kb/kb-writer.js +69 -0
- package/dist/scaffold-kb/kb-writer.js.map +1 -0
- package/dist/scaffold-kb/keyword-extract.d.ts +16 -0
- package/dist/scaffold-kb/keyword-extract.d.ts.map +1 -0
- package/dist/scaffold-kb/keyword-extract.js +49 -0
- package/dist/scaffold-kb/keyword-extract.js.map +1 -0
- package/dist/scaffold-kb/query-sanitizer.d.ts +28 -0
- package/dist/scaffold-kb/query-sanitizer.d.ts.map +1 -0
- package/dist/scaffold-kb/query-sanitizer.js +38 -0
- package/dist/scaffold-kb/query-sanitizer.js.map +1 -0
- package/dist/scaffold-kb/recall-eval.d.ts +48 -0
- package/dist/scaffold-kb/recall-eval.d.ts.map +1 -0
- package/dist/scaffold-kb/recall-eval.js +55 -0
- package/dist/scaffold-kb/recall-eval.js.map +1 -0
- package/dist/scaffold-kb/schema-compat.d.ts +22 -0
- package/dist/scaffold-kb/schema-compat.d.ts.map +1 -0
- package/dist/scaffold-kb/schema-compat.js +32 -0
- package/dist/scaffold-kb/schema-compat.js.map +1 -0
- package/dist/scaffold-kb/search-core.d.ts +42 -0
- package/dist/scaffold-kb/search-core.d.ts.map +1 -0
- package/dist/scaffold-kb/search-core.js +89 -0
- package/dist/scaffold-kb/search-core.js.map +1 -0
- package/dist/scaffold-kb/sqlite-engine.d.ts +58 -0
- package/dist/scaffold-kb/sqlite-engine.d.ts.map +1 -0
- package/dist/scaffold-kb/sqlite-engine.js +61 -0
- package/dist/scaffold-kb/sqlite-engine.js.map +1 -0
- package/dist/scaffold-kb/sqlite-writer.d.ts +18 -0
- package/dist/scaffold-kb/sqlite-writer.d.ts.map +1 -0
- package/dist/scaffold-kb/sqlite-writer.js +76 -0
- package/dist/scaffold-kb/sqlite-writer.js.map +1 -0
- package/dist/scaffold-kb/tokenizer.d.ts +26 -0
- package/dist/scaffold-kb/tokenizer.d.ts.map +1 -0
- package/dist/scaffold-kb/tokenizer.js +97 -0
- package/dist/scaffold-kb/tokenizer.js.map +1 -0
- package/dist/scaffold-kb/types.d.ts +157 -0
- package/dist/scaffold-kb/types.d.ts.map +1 -0
- package/dist/scaffold-kb/types.js +5 -0
- package/dist/scaffold-kb/types.js.map +1 -0
- package/dist/utils/file-scanner.d.ts +15 -0
- package/dist/utils/file-scanner.d.ts.map +1 -1
- package/dist/utils/file-scanner.js +18 -1
- package/dist/utils/file-scanner.js.map +1 -1
- package/dist/utils/string-distance.d.ts +20 -0
- package/dist/utils/string-distance.d.ts.map +1 -0
- package/dist/utils/string-distance.js +38 -0
- package/dist/utils/string-distance.js.map +1 -0
- package/package.json +22 -3
- package/plugins/demo-kb-en/.claude-plugin/plugin.json +11 -0
- package/plugins/demo-kb-en/.mcp.json +8 -0
- package/plugins/demo-kb-en/FIXTURE.json +23 -0
- package/plugins/demo-kb-en/FIXTURE.md +53 -0
- package/plugins/demo-kb-en/ingest-samples/meeting-notes.md +13 -0
- package/plugins/demo-kb-en/kb/api-entities.json +3445 -0
- package/plugins/demo-kb-en/kb/chunks.sqlite +0 -0
- package/plugins/demo-kb-en/kb/doc-graph.json +113 -0
- package/plugins/demo-kb-zh/.claude-plugin/plugin.json +11 -0
- package/plugins/demo-kb-zh/.mcp.json +8 -0
- package/plugins/demo-kb-zh/FIXTURE.json +23 -0
- package/plugins/demo-kb-zh/FIXTURE.md +63 -0
- package/plugins/demo-kb-zh/ingest-samples/meeting-notes.md +13 -0
- package/plugins/demo-kb-zh/kb/api-entities.json +990 -0
- package/plugins/demo-kb-zh/kb/chunks.sqlite +0 -0
- package/plugins/demo-kb-zh/kb/doc-graph.json +113 -0
- package/plugins/spec-driver/.claude-plugin/plugin.json +1 -1
- package/plugins/spec-driver/README.md +50 -1
- package/plugins/spec-driver/agents/implement.md +20 -1
- package/plugins/spec-driver/agents/plan.md +20 -1
- package/plugins/spec-driver/agents/quality-review.md +20 -1
- package/plugins/spec-driver/agents/spec-review.md +20 -1
- package/plugins/spec-driver/agents/verify.md +108 -1
- package/plugins/spec-driver/config/orchestration.yaml +39 -31
- package/plugins/spec-driver/contracts/orchestration-overrides-contract.yaml +27 -0
- package/plugins/spec-driver/contracts/orchestration-schema.mjs +272 -227
- package/plugins/spec-driver/contracts/wrapper-source-of-truth.yaml +3 -0
- package/plugins/spec-driver/docs/customization.md +134 -0
- package/plugins/spec-driver/docs/spectra-mcp-integration.md +165 -0
- package/plugins/spec-driver/hooks/hooks.json +9 -0
- package/plugins/spec-driver/hooks/stop-fix-compliance-check.sh +36 -0
- package/plugins/spec-driver/lib/delegation-contract.mjs +84 -0
- package/plugins/spec-driver/lib/orchestration-resolver.mjs +49 -0
- package/plugins/spec-driver/lib/orchestrator.mjs +29 -1
- package/plugins/spec-driver/lib/preference-rules.mjs +96 -0
- package/plugins/spec-driver/scripts/codex-skills.sh +28 -28
- package/plugins/spec-driver/scripts/dev/spike-fix-compliance-e2e.mjs +130 -0
- package/plugins/spec-driver/scripts/fix-compliance-judge.mjs +415 -0
- package/plugins/spec-driver/scripts/generate-adoption-insights.mjs +48 -1
- package/plugins/spec-driver/scripts/goal-loop-cli.mjs +307 -0
- package/plugins/spec-driver/scripts/init-project.sh +56 -0
- package/plugins/spec-driver/scripts/kb-prequery.mjs +125 -0
- package/plugins/spec-driver/scripts/lib/config-schema.mjs +200 -94
- package/plugins/spec-driver/scripts/lib/ensure-gitignore.sh +277 -0
- package/plugins/spec-driver/scripts/lib/extract-wrapper-body.mjs +136 -0
- package/plugins/spec-driver/scripts/lib/fix-compliance-core.mjs +434 -0
- package/plugins/spec-driver/scripts/lib/fix-compliance-io.mjs +335 -0
- package/plugins/spec-driver/scripts/lib/goal-loop-core.mjs +783 -0
- package/plugins/spec-driver/scripts/lib/init-project-output.sh +28 -0
- package/plugins/spec-driver/scripts/lib/load-zod.mjs +62 -0
- package/plugins/spec-driver/scripts/lib/project-profile-resolver.mjs +141 -49
- package/plugins/spec-driver/scripts/lib/project-profile-schema.mjs +88 -54
- package/plugins/spec-driver/scripts/postinstall.sh +13 -1
- package/plugins/spec-driver/scripts/record-workflow-run.mjs +75 -0
- package/plugins/spec-driver/scripts/sync-delegation-contract.mjs +187 -0
- package/plugins/spec-driver/scripts/sync-preference-rules.mjs +148 -0
- package/plugins/spec-driver/scripts/validate-orchestrator-models.mjs +156 -0
- package/plugins/spec-driver/scripts/validate-wrapper-sources.mjs +46 -1
- package/plugins/spec-driver/skills/spec-driver-feature/SKILL.md +302 -0
- package/plugins/spec-driver/skills/spec-driver-fix/SKILL.md +97 -8
- package/plugins/spec-driver/skills/spec-driver-implement/SKILL.md +18 -0
- package/plugins/spec-driver/skills/spec-driver-refactor/SKILL.md +10 -0
- package/plugins/spec-driver/skills/spec-driver-resume/SKILL.md +12 -1
- package/plugins/spec-driver/skills/spec-driver-story/SKILL.md +30 -0
- package/plugins/spec-driver/templates/delegation-contract.md +27 -0
- package/plugins/spec-driver/templates/goal-loop-override-template.yaml +284 -0
- package/plugins/spec-driver/templates/preference-rules.md +39 -0
- package/plugins/spec-driver/templates/specify-base/project-context-template.yaml +10 -0
- package/plugins/spectra/.claude-plugin/plugin.json +1 -1
- package/plugins/spectra/README.md +48 -1
- package/plugins/spectra/hooks/post-commit.sh +40 -0
- package/templates/module-spec.hbs +1 -0
- package/templates/product-overview.hbs +1 -1
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* import 路径解析结果。
|
|
3
|
+
* resolvedPath 为相对 projectRoot 的 POSIX 路径;external/unresolved 时为 null。
|
|
4
|
+
* 当 projectRoot 为空字符串(独立 AST 调用)时,resolvedPath 为绝对路径(调用方自行归一)。
|
|
5
|
+
*/
|
|
6
|
+
export interface ResolveResult {
|
|
7
|
+
/** 解析后的目标文件路径(相对 projectRoot 的 POSIX 相对路径;projectRoot 空时为绝对路径)。 */
|
|
8
|
+
resolvedPath: string | null;
|
|
9
|
+
kind: 'module' | 'package-init' | 'relative-sibling' | 'relative' | 'paths-alias' | 'absolute' | 'external' | 'unresolved';
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* TypeScript/JavaScript tsconfig.json 解析上下文。
|
|
13
|
+
* 由 findNearestTsConfig + buildTsConfigContext 协作生成。
|
|
14
|
+
*/
|
|
15
|
+
export interface TsConfigResolutionContext {
|
|
16
|
+
/** tsconfig.json 所在目录的绝对路径 */
|
|
17
|
+
configDir: string;
|
|
18
|
+
/**
|
|
19
|
+
* baseUrl 配置(经 ts.parseJsonConfigFileContent 解析,通常为绝对路径)。
|
|
20
|
+
* 用户未配置 baseUrl → null(跳过 baseUrl 解析)。
|
|
21
|
+
* 注:alias 算法用 path.resolve(configDir, baseUrl, replacement),绝对 baseUrl 会正确覆盖 configDir。
|
|
22
|
+
*/
|
|
23
|
+
baseUrl: string | null;
|
|
24
|
+
/** paths 映射(含 wildcard),key/value 保留原始 tsconfig 相对字符串 */
|
|
25
|
+
paths: Map<string, string[]>;
|
|
26
|
+
}
|
|
27
|
+
/** 将路径转换为 POSIX 格式(确保跨平台 resolvedPath 始终用 '/' 分隔符)。 */
|
|
28
|
+
export declare function toPosix(p: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* 判断 candidate 路径是否严格在 projectRoot 子树内(C-5 + N-2)。
|
|
31
|
+
*
|
|
32
|
+
* 用 path.relative 逐 component 检查第一段是否为 '..',避免字典序误判(/proj vs /projection)。
|
|
33
|
+
* candidate === projectRoot 返回 false(projectRoot 自身不算"在子树内")。
|
|
34
|
+
*/
|
|
35
|
+
export declare function isInsideProjectRoot(candidate: string, projectRoot: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* 判断路径是否指向非源文件目标(W-1)。
|
|
38
|
+
* .json 和 .d.ts 文件不进入 callSites graph,返回 external。
|
|
39
|
+
*/
|
|
40
|
+
export declare function isNonSourceTarget(p: string): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* 解析 TypeScript/JavaScript import 路径(单一权威实现,Feature 181)。
|
|
43
|
+
*
|
|
44
|
+
* 解析顺序:
|
|
45
|
+
* 1. node: 内置 → external
|
|
46
|
+
* 2. 磁盘绝对路径('/' 前缀)→ 文件候选 + projectRoot 守卫
|
|
47
|
+
* 3. 相对路径('./' '../')→ 文件候选 + projectRoot 守卫;.json/.d.ts → external
|
|
48
|
+
* 4. 非相对:tsconfig paths alias(最长前缀 + 多候选 + baseUrl 叠加)→ baseUrl 解析 → external/unresolved
|
|
49
|
+
*
|
|
50
|
+
* 守卫策略(逐分支复刻历史 kg):relative / disk-absolute 分支启用 isInsideProjectRoot
|
|
51
|
+
* (仅 projectRoot 为真时);paths-alias / baseUrl 分支不加守卫(保持 alias 语义)。
|
|
52
|
+
*
|
|
53
|
+
* @param moduleSpec - import 说明符(如 './engine'、'~/utils'、'express')
|
|
54
|
+
* @param callerFile - 调用方文件的绝对路径
|
|
55
|
+
* @param projectRoot - 项目根目录绝对路径(空字符串:返回绝对路径 + 跳过守卫)
|
|
56
|
+
* @param tsConfigContext - tsconfig 解析上下文(null/undefined:仅走相对/绝对路径)
|
|
57
|
+
* @returns ResolveResult(失败返回 { resolvedPath: null, kind: 'unresolved' },不抛异常)
|
|
58
|
+
*/
|
|
59
|
+
export declare function resolveTsJsImport(moduleSpec: string, callerFile: string, projectRoot: string, tsConfigContext?: TsConfigResolutionContext | null): ResolveResult;
|
|
60
|
+
/**
|
|
61
|
+
* AST 消费方便捷封装:解析并归一为**绝对路径**。
|
|
62
|
+
*
|
|
63
|
+
* ast-analyzer / tree-sitter-analyzer / tree-sitter-fallback 三处历史上把
|
|
64
|
+
* resolvedPath 以绝对路径写入 CodeSkeleton.imports[](module-derivation.normalizeSkeletonPaths
|
|
65
|
+
* 期望绝对输入再相对化;collect EC-10 亦绝对)。本封装保持该形态:
|
|
66
|
+
* - projectRoot 为真:把权威 resolver 的相对 POSIX 结果 path.resolve 回绝对
|
|
67
|
+
* - projectRoot 为空:权威 resolver 已返回绝对路径,原样返回
|
|
68
|
+
* external/unresolved(resolvedPath=null)统一返回 null(与历史 core string|null 语义一致)。
|
|
69
|
+
*/
|
|
70
|
+
export declare function resolveTsJsImportToAbsolute(moduleSpec: string, callerFile: string, projectRoot: string, tsConfigContext?: TsConfigResolutionContext | null): string | null;
|
|
71
|
+
/**
|
|
72
|
+
* 从 filePath 向上查找最近的 tsconfig.json(monorepo-aware)。
|
|
73
|
+
*
|
|
74
|
+
* 上溯范围:从 path.dirname(filePath) 向上,直到 projectRoot 边界(含 projectRoot 本身)。
|
|
75
|
+
* 越过 projectRoot 停止,不抛异常。
|
|
76
|
+
*
|
|
77
|
+
* @returns tsconfig.json 的绝对路径;未找到返回 null
|
|
78
|
+
*/
|
|
79
|
+
export declare function findNearestTsConfig(filePath: string, projectRoot: string): string | null;
|
|
80
|
+
/**
|
|
81
|
+
* 解析 tsconfig.json 为 TsConfigResolutionContext(单一 loader,ts API 处理 extends 链)。
|
|
82
|
+
*
|
|
83
|
+
* 用 ts.readConfigFile + ts.parseJsonConfigFileContent:
|
|
84
|
+
* - 自动处理 extends 链(优于历史 kg 手写 JSON.parse 的 YAGNI 无 extends)
|
|
85
|
+
* - baseUrl 解析为绝对路径(alias 算法 path.resolve 正确覆盖 configDir)
|
|
86
|
+
* - paths 保留原始相对字符串(由 alias 算法做唯一一次 resolve,避免双重 resolve)
|
|
87
|
+
*
|
|
88
|
+
* 失败时返回 null(不抛异常,按未配置 alias 处理)。
|
|
89
|
+
*
|
|
90
|
+
* @param configPath - tsconfig.json 的绝对路径(由 findNearestTsConfig / 调用方提供)
|
|
91
|
+
*/
|
|
92
|
+
export declare function buildTsConfigContext(configPath: string): TsConfigResolutionContext | null;
|
|
93
|
+
//# sourceMappingURL=import-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-resolver.d.ts","sourceRoot":"","sources":["../../src/core/import-resolver.ts"],"names":[],"mappings":"AAiDA;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,mEAAmE;IACnE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EACA,QAAQ,GACR,cAAc,GACd,kBAAkB,GAClB,UAAU,GACV,aAAa,GACb,UAAU,GACV,UAAU,GACV,YAAY,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,yDAAyD;IACzD,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC9B;AA8BD,uDAAuD;AACvD,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAOnF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEpD;AA6ED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,eAAe,CAAC,EAAE,yBAAyB,GAAG,IAAI,GACjD,aAAa,CAgFf;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,eAAe,CAAC,EAAE,yBAAyB,GAAG,IAAI,GACjD,MAAM,GAAG,IAAI,CAMf;AAuED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmBxF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,yBAAyB,GAAG,IAAI,CAmCzF"}
|
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* import-resolver.ts — TS/JS import specifier 单一权威解析(Feature 181 收口)
|
|
3
|
+
*
|
|
4
|
+
* 背景(Feature 181 单一权威收口):
|
|
5
|
+
* 历史上 `core/import-resolver.ts` 与 `knowledge-graph/import-resolver.ts` 各有一份
|
|
6
|
+
* `resolveTsJsImport`,行为分叉(core 返回绝对路径无 projectRoot 守卫 + ESM ext map;
|
|
7
|
+
* kg 返回相对 POSIX + kind + isInsideProjectRoot 守卫)。两者经 AST 路径
|
|
8
|
+
* (ast-analyzer / tree-sitter-*)与 batch 路径(collect / module-derivation)都进 graph.json。
|
|
9
|
+
* 本模块收口为唯一权威实现,合并两侧能力:
|
|
10
|
+
* - 相对解析:ESM ext map(`./foo.js`→`foo.ts`)+ 直接命中 + .mjs/.cjs(源自 core)
|
|
11
|
+
* - alias/baseUrl:tsconfig paths(最长前缀 + 多候选 + baseUrl 叠加,TS 官方语义)
|
|
12
|
+
* - projectRoot 边界守卫(防图污染,源自 kg;relative / disk-absolute 分支启用)
|
|
13
|
+
* - kind 分类 + external/unresolved 区分 + .json/.d.ts → external
|
|
14
|
+
*
|
|
15
|
+
* 设计约束:
|
|
16
|
+
* - 纯 node:fs / node:path(+ typescript 仅用于 tsconfig 解析,含 extends 链)
|
|
17
|
+
* - 不抛异常(无法解析返回 { resolvedPath: null, kind: 'unresolved' })
|
|
18
|
+
* - 跨平台:resolvedPath 输出统一为相对 projectRoot 的 POSIX 路径;
|
|
19
|
+
* projectRoot 为空(独立 AST 调用)时返回绝对路径且跳过守卫(保持历史 core 行为)
|
|
20
|
+
*
|
|
21
|
+
* 注:Python import 解析(resolvePythonImport)不在本次收口范围,仍在
|
|
22
|
+
* knowledge-graph/import-resolver.ts;其依赖的 ResolveResult / toPosix / isInsideProjectRoot
|
|
23
|
+
* 由本模块导出供其下行 import(knowledge-graph → core,层级方向干净)。
|
|
24
|
+
*/
|
|
25
|
+
import * as fs from 'node:fs';
|
|
26
|
+
import * as path from 'node:path';
|
|
27
|
+
// 复用 ts-morph 再导出的 typescript 命名空间(避免新增对 'typescript' 的直接运行时依赖;
|
|
28
|
+
// ts-morph 已是本仓运行时依赖)
|
|
29
|
+
import { ts } from 'ts-morph';
|
|
30
|
+
import { createLogger } from '../panoramic/utils/logger.js';
|
|
31
|
+
// F183 修复 2:buildTsConfigContext 失败时不再静默——warn 出 configPath + error 摘要。
|
|
32
|
+
const logger = createLogger('import-resolver');
|
|
33
|
+
// 仅缓存已 warn 的 configPath 做 emission 限频(monorepo 同一损坏 tsconfig 会被每个
|
|
34
|
+
// import-resolve 循环触发,造成日志洪泛)。注意:仅限频 warn,绝不跳过解析——
|
|
35
|
+
// buildTsConfigContext 始终尝试解析,失败仍 return null。
|
|
36
|
+
const warnedConfigPaths = new Set();
|
|
37
|
+
/** 同一 configPath 仅发一次 warn(emission 限频,不影响解析)。 */
|
|
38
|
+
function warnTsConfigFailureOnce(configPath, errorSummary) {
|
|
39
|
+
if (warnedConfigPaths.has(configPath))
|
|
40
|
+
return;
|
|
41
|
+
logger.warn(`[import-resolver] buildTsConfigContext 失败(${configPath}):${errorSummary}`);
|
|
42
|
+
warnedConfigPaths.add(configPath);
|
|
43
|
+
}
|
|
44
|
+
// ───────────────────────────────────────────────────────────
|
|
45
|
+
// 常量
|
|
46
|
+
// ───────────────────────────────────────────────────────────
|
|
47
|
+
/** TS/JS 候补扩展名顺序(含 .mjs/.cjs,源自历史 core 实现) */
|
|
48
|
+
const TS_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'];
|
|
49
|
+
/** index 文件名顺序 */
|
|
50
|
+
const TS_INDEX_FILES = ['index.ts', 'index.tsx', 'index.js', 'index.jsx'];
|
|
51
|
+
/** alias-like 前缀列表(C-2):以这些前缀开头的 moduleSpec 无 paths 命中时返回 unresolved */
|
|
52
|
+
const ALIAS_PREFIXES = ['~/', '#/', '$/'];
|
|
53
|
+
/**
|
|
54
|
+
* TypeScript ESM 惯例:`import './foo.js'` 实际指向 `./foo.ts`(Feature 156 CRIT-1)。
|
|
55
|
+
* specifier 以 JS 扩展名结尾时,先尝试对应 TS 扩展名候选;命中即返回,否则 fallback 标准解析。
|
|
56
|
+
*/
|
|
57
|
+
const ESM_TS_EXT_MAP = {
|
|
58
|
+
'.js': ['.ts', '.tsx'],
|
|
59
|
+
'.jsx': ['.tsx'],
|
|
60
|
+
'.mjs': ['.mts'],
|
|
61
|
+
'.cjs': ['.cts'],
|
|
62
|
+
};
|
|
63
|
+
// ───────────────────────────────────────────────────────────
|
|
64
|
+
// 共享辅助(导出供 knowledge-graph Python resolver 下行复用)
|
|
65
|
+
// ───────────────────────────────────────────────────────────
|
|
66
|
+
/** 将路径转换为 POSIX 格式(确保跨平台 resolvedPath 始终用 '/' 分隔符)。 */
|
|
67
|
+
export function toPosix(p) {
|
|
68
|
+
return p.split(path.sep).join('/');
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 判断 candidate 路径是否严格在 projectRoot 子树内(C-5 + N-2)。
|
|
72
|
+
*
|
|
73
|
+
* 用 path.relative 逐 component 检查第一段是否为 '..',避免字典序误判(/proj vs /projection)。
|
|
74
|
+
* candidate === projectRoot 返回 false(projectRoot 自身不算"在子树内")。
|
|
75
|
+
*/
|
|
76
|
+
export function isInsideProjectRoot(candidate, projectRoot) {
|
|
77
|
+
const rel = path.relative(projectRoot, candidate);
|
|
78
|
+
if (rel.length === 0)
|
|
79
|
+
return false; // candidate === projectRoot
|
|
80
|
+
if (path.isAbsolute(rel))
|
|
81
|
+
return false; // 跨盘符(Windows)
|
|
82
|
+
const firstSeg = rel.split(path.sep)[0];
|
|
83
|
+
if (firstSeg === '..')
|
|
84
|
+
return false;
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 判断路径是否指向非源文件目标(W-1)。
|
|
89
|
+
* .json 和 .d.ts 文件不进入 callSites graph,返回 external。
|
|
90
|
+
*/
|
|
91
|
+
export function isNonSourceTarget(p) {
|
|
92
|
+
return p.endsWith('.json') || p.endsWith('.d.ts');
|
|
93
|
+
}
|
|
94
|
+
// ───────────────────────────────────────────────────────────
|
|
95
|
+
// 内部:文件候选尝试(合并 core ESM ext map + 直接命中 + 扩展名 + index)
|
|
96
|
+
// ───────────────────────────────────────────────────────────
|
|
97
|
+
function existsAndIsFile(p) {
|
|
98
|
+
try {
|
|
99
|
+
return fs.statSync(p).isFile();
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function existsAndIsDir(p) {
|
|
106
|
+
try {
|
|
107
|
+
return fs.statSync(p).isDirectory();
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 给定 base 路径,依次尝试(顺序严格复刻历史 core,护 graph.json byte-identical):
|
|
115
|
+
* 1. ESM TS ext map(若 base 以 JS 扩展名结尾,先试 .ts/.tsx 等 TS 候选)
|
|
116
|
+
* 2. base 直接命中(已含扩展名)
|
|
117
|
+
* 3. base + 扩展名(.ts → .cjs)
|
|
118
|
+
* 4. base/index.{ts,tsx,js,jsx}
|
|
119
|
+
* @returns 命中的绝对路径;否则 null
|
|
120
|
+
*/
|
|
121
|
+
function tryFilePathVariants(base) {
|
|
122
|
+
// 1. ESM TS ext map(如 foo.js → foo.ts)
|
|
123
|
+
const sourceExt = path.extname(base);
|
|
124
|
+
const tsCandidatesExts = ESM_TS_EXT_MAP[sourceExt];
|
|
125
|
+
if (tsCandidatesExts) {
|
|
126
|
+
const baseWithoutExt = base.slice(0, -sourceExt.length);
|
|
127
|
+
for (const tsExt of tsCandidatesExts) {
|
|
128
|
+
const tsCandidate = baseWithoutExt + tsExt;
|
|
129
|
+
if (existsAndIsFile(tsCandidate))
|
|
130
|
+
return tsCandidate;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// 2. 直接命中
|
|
134
|
+
if (existsAndIsFile(base))
|
|
135
|
+
return base;
|
|
136
|
+
// 3. 扩展名补全
|
|
137
|
+
for (const ext of TS_EXTENSIONS) {
|
|
138
|
+
const candidate = base + ext;
|
|
139
|
+
if (existsAndIsFile(candidate))
|
|
140
|
+
return candidate;
|
|
141
|
+
}
|
|
142
|
+
// 4. 目录 + index 文件
|
|
143
|
+
if (existsAndIsDir(base)) {
|
|
144
|
+
for (const idxFile of TS_INDEX_FILES) {
|
|
145
|
+
const candidate = path.join(base, idxFile);
|
|
146
|
+
if (existsAndIsFile(candidate))
|
|
147
|
+
return candidate;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* 把命中绝对路径归一为 ResolveResult。
|
|
154
|
+
* projectRoot 为真:相对 POSIX;projectRoot 为空:保留绝对路径(历史 core 独立调用行为)。
|
|
155
|
+
*/
|
|
156
|
+
function makeHit(absHit, projectRoot, kind) {
|
|
157
|
+
return {
|
|
158
|
+
resolvedPath: projectRoot ? toPosix(path.relative(projectRoot, absHit)) : absHit,
|
|
159
|
+
kind,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
// ───────────────────────────────────────────────────────────
|
|
163
|
+
// Public API — resolveTsJsImport(单一权威)
|
|
164
|
+
// ───────────────────────────────────────────────────────────
|
|
165
|
+
/**
|
|
166
|
+
* 解析 TypeScript/JavaScript import 路径(单一权威实现,Feature 181)。
|
|
167
|
+
*
|
|
168
|
+
* 解析顺序:
|
|
169
|
+
* 1. node: 内置 → external
|
|
170
|
+
* 2. 磁盘绝对路径('/' 前缀)→ 文件候选 + projectRoot 守卫
|
|
171
|
+
* 3. 相对路径('./' '../')→ 文件候选 + projectRoot 守卫;.json/.d.ts → external
|
|
172
|
+
* 4. 非相对:tsconfig paths alias(最长前缀 + 多候选 + baseUrl 叠加)→ baseUrl 解析 → external/unresolved
|
|
173
|
+
*
|
|
174
|
+
* 守卫策略(逐分支复刻历史 kg):relative / disk-absolute 分支启用 isInsideProjectRoot
|
|
175
|
+
* (仅 projectRoot 为真时);paths-alias / baseUrl 分支不加守卫(保持 alias 语义)。
|
|
176
|
+
*
|
|
177
|
+
* @param moduleSpec - import 说明符(如 './engine'、'~/utils'、'express')
|
|
178
|
+
* @param callerFile - 调用方文件的绝对路径
|
|
179
|
+
* @param projectRoot - 项目根目录绝对路径(空字符串:返回绝对路径 + 跳过守卫)
|
|
180
|
+
* @param tsConfigContext - tsconfig 解析上下文(null/undefined:仅走相对/绝对路径)
|
|
181
|
+
* @returns ResolveResult(失败返回 { resolvedPath: null, kind: 'unresolved' },不抛异常)
|
|
182
|
+
*/
|
|
183
|
+
export function resolveTsJsImport(moduleSpec, callerFile, projectRoot, tsConfigContext) {
|
|
184
|
+
if (!moduleSpec || typeof moduleSpec !== 'string') {
|
|
185
|
+
return { resolvedPath: null, kind: 'unresolved' };
|
|
186
|
+
}
|
|
187
|
+
// 1. node 内置模块 → external(不解析外部依赖)
|
|
188
|
+
if (moduleSpec.startsWith('node:')) {
|
|
189
|
+
return { resolvedPath: null, kind: 'external' };
|
|
190
|
+
}
|
|
191
|
+
// 2. 磁盘绝对路径(罕见)
|
|
192
|
+
if (moduleSpec.startsWith('/')) {
|
|
193
|
+
const hit = tryFilePathVariants(moduleSpec);
|
|
194
|
+
if (hit) {
|
|
195
|
+
// 守卫:候选必须在 projectRoot 内(仅 projectRoot 为真时启用)
|
|
196
|
+
if (projectRoot && !isInsideProjectRoot(hit, projectRoot)) {
|
|
197
|
+
return { resolvedPath: null, kind: 'unresolved' };
|
|
198
|
+
}
|
|
199
|
+
return makeHit(hit, projectRoot, 'absolute');
|
|
200
|
+
}
|
|
201
|
+
return { resolvedPath: null, kind: 'unresolved' };
|
|
202
|
+
}
|
|
203
|
+
// 3. 相对路径(./ 或 ../)
|
|
204
|
+
if (moduleSpec.startsWith('./') || moduleSpec.startsWith('../') || moduleSpec.startsWith('.')) {
|
|
205
|
+
// W-1:moduleSpec 自身已带 .json / .d.ts 后缀 → external
|
|
206
|
+
if (isNonSourceTarget(moduleSpec)) {
|
|
207
|
+
return { resolvedPath: null, kind: 'external' };
|
|
208
|
+
}
|
|
209
|
+
const base = path.resolve(path.dirname(callerFile), moduleSpec);
|
|
210
|
+
const hit = tryFilePathVariants(base);
|
|
211
|
+
if (hit) {
|
|
212
|
+
if (projectRoot && !isInsideProjectRoot(hit, projectRoot)) {
|
|
213
|
+
return { resolvedPath: null, kind: 'unresolved' };
|
|
214
|
+
}
|
|
215
|
+
// 命中 .json / .d.ts(如 base 无扩展名却命中同名 .d.ts)双保险 external
|
|
216
|
+
if (isNonSourceTarget(hit)) {
|
|
217
|
+
return { resolvedPath: null, kind: 'external' };
|
|
218
|
+
}
|
|
219
|
+
return makeHit(hit, projectRoot, 'relative');
|
|
220
|
+
}
|
|
221
|
+
// 候补失败但 base 本身指向 .json / .d.ts → external
|
|
222
|
+
if (isNonSourceTarget(base)) {
|
|
223
|
+
return { resolvedPath: null, kind: 'external' };
|
|
224
|
+
}
|
|
225
|
+
return { resolvedPath: null, kind: 'unresolved' };
|
|
226
|
+
}
|
|
227
|
+
// 4. 非相对路径:先 paths alias,再 baseUrl,再判定 external/unresolved
|
|
228
|
+
if (tsConfigContext) {
|
|
229
|
+
const aliasHit = resolvePathsAlias(moduleSpec, projectRoot, tsConfigContext);
|
|
230
|
+
if (aliasHit)
|
|
231
|
+
return aliasHit;
|
|
232
|
+
// baseUrl 解析(baseUrl 为字符串时)
|
|
233
|
+
if (typeof tsConfigContext.baseUrl === 'string') {
|
|
234
|
+
const absBase = path.resolve(tsConfigContext.configDir, tsConfigContext.baseUrl, moduleSpec);
|
|
235
|
+
const hit = tryFilePathVariants(absBase);
|
|
236
|
+
if (hit) {
|
|
237
|
+
return makeHit(hit, projectRoot, 'absolute');
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// C-2:区分 alias-like(unresolved)与 bare npm package(external)
|
|
242
|
+
if (ALIAS_PREFIXES.some((p) => moduleSpec.startsWith(p)) || moduleSpec.startsWith('@/')) {
|
|
243
|
+
return { resolvedPath: null, kind: 'unresolved' };
|
|
244
|
+
}
|
|
245
|
+
// 合法 npm 包判定
|
|
246
|
+
const firstSeg = moduleSpec.split('/')[0] ?? '';
|
|
247
|
+
if (firstSeg.startsWith('@')) {
|
|
248
|
+
// scoped 包形如 @org/lib
|
|
249
|
+
return { resolvedPath: null, kind: 'external' };
|
|
250
|
+
}
|
|
251
|
+
if (/^[a-z0-9][a-z0-9-_.]*$/.test(firstSeg)) {
|
|
252
|
+
return { resolvedPath: null, kind: 'external' };
|
|
253
|
+
}
|
|
254
|
+
// 含 '/' 但首段不是合法 npm 包名 → alias-like 配置缺失
|
|
255
|
+
return { resolvedPath: null, kind: 'unresolved' };
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* AST 消费方便捷封装:解析并归一为**绝对路径**。
|
|
259
|
+
*
|
|
260
|
+
* ast-analyzer / tree-sitter-analyzer / tree-sitter-fallback 三处历史上把
|
|
261
|
+
* resolvedPath 以绝对路径写入 CodeSkeleton.imports[](module-derivation.normalizeSkeletonPaths
|
|
262
|
+
* 期望绝对输入再相对化;collect EC-10 亦绝对)。本封装保持该形态:
|
|
263
|
+
* - projectRoot 为真:把权威 resolver 的相对 POSIX 结果 path.resolve 回绝对
|
|
264
|
+
* - projectRoot 为空:权威 resolver 已返回绝对路径,原样返回
|
|
265
|
+
* external/unresolved(resolvedPath=null)统一返回 null(与历史 core string|null 语义一致)。
|
|
266
|
+
*/
|
|
267
|
+
export function resolveTsJsImportToAbsolute(moduleSpec, callerFile, projectRoot, tsConfigContext) {
|
|
268
|
+
const r = resolveTsJsImport(moduleSpec, callerFile, projectRoot, tsConfigContext);
|
|
269
|
+
if (!r.resolvedPath)
|
|
270
|
+
return null;
|
|
271
|
+
return path.isAbsolute(r.resolvedPath)
|
|
272
|
+
? r.resolvedPath
|
|
273
|
+
: path.resolve(projectRoot, r.resolvedPath);
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* tsconfig paths alias 解析(最长前缀 + 多候选 + baseUrl 叠加,TS 官方语义)。
|
|
277
|
+
*
|
|
278
|
+
* 合并历史两侧:
|
|
279
|
+
* - 最长前缀匹配(core:`@app/utils/*` 优先于 `@app/*`;精确 key 因 prefixLen 最长天然居首)
|
|
280
|
+
* - 多候选数组逐个尝试(core + kg)
|
|
281
|
+
* - replacement 叠加 baseUrl:path.resolve(configDir, baseUrl ?? '.', replacement)(kg C-3)
|
|
282
|
+
* - 文件候选用统一 tryFilePathVariants(含 ESM ext map / .mjs.cjs / index)
|
|
283
|
+
*
|
|
284
|
+
* @returns 命中的 ResolveResult(kind='paths-alias');未命中返回 null
|
|
285
|
+
*/
|
|
286
|
+
function resolvePathsAlias(moduleSpec, projectRoot, ctx) {
|
|
287
|
+
// 收集所有命中 alias,排序规则(TS 官方语义):
|
|
288
|
+
// 1. 最长前缀优先(`@app/utils/*` 胜过 `@app/*`)
|
|
289
|
+
// 2. 同前缀长度时精确 key(无 wildcard)优先于 wildcard(`react` 胜过 `react*`)
|
|
290
|
+
const matched = [];
|
|
291
|
+
for (const [pattern, replacements] of ctx.paths) {
|
|
292
|
+
const tail = matchPathsPattern(moduleSpec, pattern);
|
|
293
|
+
if (tail === null)
|
|
294
|
+
continue;
|
|
295
|
+
const isWildcard = pattern.includes('*');
|
|
296
|
+
const prefixLen = isWildcard ? pattern.indexOf('*') : pattern.length;
|
|
297
|
+
matched.push({ prefixLen, isWildcard, tail, replacements });
|
|
298
|
+
}
|
|
299
|
+
if (matched.length === 0)
|
|
300
|
+
return null;
|
|
301
|
+
matched.sort((a, b) => {
|
|
302
|
+
if (b.prefixLen !== a.prefixLen)
|
|
303
|
+
return b.prefixLen - a.prefixLen;
|
|
304
|
+
return (a.isWildcard ? 1 : 0) - (b.isWildcard ? 1 : 0); // 同前缀长度:exact 优先
|
|
305
|
+
});
|
|
306
|
+
const baseUrl = typeof ctx.baseUrl === 'string' ? ctx.baseUrl : '.';
|
|
307
|
+
for (const m of matched) {
|
|
308
|
+
for (const replacement of m.replacements) {
|
|
309
|
+
const resolved = replacement.includes('*') ? replacement.replace('*', m.tail) : replacement;
|
|
310
|
+
const absBase = path.resolve(ctx.configDir, baseUrl, resolved);
|
|
311
|
+
const hit = tryFilePathVariants(absBase);
|
|
312
|
+
if (hit) {
|
|
313
|
+
return makeHit(hit, projectRoot, 'paths-alias');
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return null;
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* 匹配 tsconfig paths pattern(精确 key + wildcard)。
|
|
321
|
+
* @returns null(不匹配),或 wildcard 截取的尾缀(精确 key 时为 '')
|
|
322
|
+
*/
|
|
323
|
+
function matchPathsPattern(moduleSpec, pattern) {
|
|
324
|
+
if (pattern.includes('*')) {
|
|
325
|
+
const starIdx = pattern.indexOf('*');
|
|
326
|
+
const prefix = pattern.slice(0, starIdx);
|
|
327
|
+
const suffix = pattern.slice(starIdx + 1);
|
|
328
|
+
if (moduleSpec.startsWith(prefix) && moduleSpec.endsWith(suffix) &&
|
|
329
|
+
moduleSpec.length >= prefix.length + suffix.length) {
|
|
330
|
+
return moduleSpec.slice(prefix.length, moduleSpec.length - suffix.length);
|
|
331
|
+
}
|
|
332
|
+
return null;
|
|
333
|
+
}
|
|
334
|
+
return moduleSpec === pattern ? '' : null;
|
|
335
|
+
}
|
|
336
|
+
// ───────────────────────────────────────────────────────────
|
|
337
|
+
// Public API — tsconfig loader(单一实现:ts.parseJsonConfigFileContent,含 extends 链)
|
|
338
|
+
// ───────────────────────────────────────────────────────────
|
|
339
|
+
/**
|
|
340
|
+
* 从 filePath 向上查找最近的 tsconfig.json(monorepo-aware)。
|
|
341
|
+
*
|
|
342
|
+
* 上溯范围:从 path.dirname(filePath) 向上,直到 projectRoot 边界(含 projectRoot 本身)。
|
|
343
|
+
* 越过 projectRoot 停止,不抛异常。
|
|
344
|
+
*
|
|
345
|
+
* @returns tsconfig.json 的绝对路径;未找到返回 null
|
|
346
|
+
*/
|
|
347
|
+
export function findNearestTsConfig(filePath, projectRoot) {
|
|
348
|
+
let dir = path.dirname(filePath);
|
|
349
|
+
// eslint-disable-next-line no-constant-condition
|
|
350
|
+
while (true) {
|
|
351
|
+
// 边界检查先于 fs 操作(C-3:避免越界路径误读)
|
|
352
|
+
if (dir !== projectRoot && !isInsideProjectRoot(dir, projectRoot)) {
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
355
|
+
const candidate = path.join(dir, 'tsconfig.json');
|
|
356
|
+
if (fs.existsSync(candidate)) {
|
|
357
|
+
return candidate;
|
|
358
|
+
}
|
|
359
|
+
if (dir === projectRoot)
|
|
360
|
+
break;
|
|
361
|
+
const parent = path.dirname(dir);
|
|
362
|
+
if (parent === dir)
|
|
363
|
+
break; // 文件系统根
|
|
364
|
+
dir = parent;
|
|
365
|
+
}
|
|
366
|
+
return null;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* 解析 tsconfig.json 为 TsConfigResolutionContext(单一 loader,ts API 处理 extends 链)。
|
|
370
|
+
*
|
|
371
|
+
* 用 ts.readConfigFile + ts.parseJsonConfigFileContent:
|
|
372
|
+
* - 自动处理 extends 链(优于历史 kg 手写 JSON.parse 的 YAGNI 无 extends)
|
|
373
|
+
* - baseUrl 解析为绝对路径(alias 算法 path.resolve 正确覆盖 configDir)
|
|
374
|
+
* - paths 保留原始相对字符串(由 alias 算法做唯一一次 resolve,避免双重 resolve)
|
|
375
|
+
*
|
|
376
|
+
* 失败时返回 null(不抛异常,按未配置 alias 处理)。
|
|
377
|
+
*
|
|
378
|
+
* @param configPath - tsconfig.json 的绝对路径(由 findNearestTsConfig / 调用方提供)
|
|
379
|
+
*/
|
|
380
|
+
export function buildTsConfigContext(configPath) {
|
|
381
|
+
try {
|
|
382
|
+
const configFile = ts.readConfigFile(configPath, ts.sys.readFile);
|
|
383
|
+
if (configFile.error || !configFile.config) {
|
|
384
|
+
// 解析失败仍 return null(行为不变),但不再静默——首次为该 configPath 发一次 warn
|
|
385
|
+
const errorSummary = configFile.error
|
|
386
|
+
? ts.flattenDiagnosticMessageText(configFile.error.messageText, ' ')
|
|
387
|
+
: 'config 为空';
|
|
388
|
+
warnTsConfigFailureOnce(configPath, errorSummary);
|
|
389
|
+
return null;
|
|
390
|
+
}
|
|
391
|
+
const configDir = path.dirname(configPath);
|
|
392
|
+
const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, configDir);
|
|
393
|
+
const compilerOptions = parsed.options;
|
|
394
|
+
const baseUrl = typeof compilerOptions.baseUrl === 'string' ? compilerOptions.baseUrl : null;
|
|
395
|
+
const paths = new Map();
|
|
396
|
+
if (compilerOptions.paths) {
|
|
397
|
+
for (const [key, value] of Object.entries(compilerOptions.paths)) {
|
|
398
|
+
if (Array.isArray(value)) {
|
|
399
|
+
const strs = value.filter((s) => typeof s === 'string');
|
|
400
|
+
if (strs.length > 0)
|
|
401
|
+
paths.set(key, strs);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
return { configDir, baseUrl, paths };
|
|
406
|
+
}
|
|
407
|
+
catch (err) {
|
|
408
|
+
// 解析抛错仍 return null(行为不变),但不再静默——首次为该 configPath 发一次 warn
|
|
409
|
+
const errorSummary = err instanceof Error ? err.message : String(err);
|
|
410
|
+
warnTsConfigFailureOnce(configPath, errorSummary);
|
|
411
|
+
return null;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
//# sourceMappingURL=import-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-resolver.js","sourceRoot":"","sources":["../../src/core/import-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,9 +3,12 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type Parser from 'web-tree-sitter';
|
|
5
5
|
import type { ExportSymbol, ImportReference, ParseError, Language } from '../../models/code-skeleton.js';
|
|
6
|
+
import type { CallSite } from '../../models/call-site.js';
|
|
6
7
|
export interface MapperOptions {
|
|
7
8
|
/** 包含私有/非导出符号 */
|
|
8
9
|
includePrivate?: boolean;
|
|
10
|
+
/** 抽取函数调用点(Feature 151,默认 false;仅 panoramic 流水线显式传 true) */
|
|
11
|
+
extractCallSites?: boolean;
|
|
9
12
|
}
|
|
10
13
|
export interface QueryMapper {
|
|
11
14
|
/** 映射器对应的语言 */
|
|
@@ -18,5 +21,15 @@ export interface QueryMapper {
|
|
|
18
21
|
extractParseErrors(tree: Parser.Tree): ParseError[];
|
|
19
22
|
/** 提取模块级文档注释(可选,仅支持此概念的语言实现,如 Python) */
|
|
20
23
|
extractModuleDoc?(tree: Parser.Tree): string | null;
|
|
24
|
+
/**
|
|
25
|
+
* 抽取函数调用点(Feature 151,可选;仅 PythonMapper 在 P1 阶段实现)。
|
|
26
|
+
*
|
|
27
|
+
* 实现要求:
|
|
28
|
+
* - 遍历 call / attribute / binary_operator / unary_operator / decorated_definition 等 AST 节点
|
|
29
|
+
* - 与 truth-set extractor (scripts/lib/python-call-extractor.py) 行为对齐(CL-04)
|
|
30
|
+
* - dynamic call (getattr / eval / 字符串拼接 attribute) 直接 skip 不输出(EC-12)
|
|
31
|
+
* - bare decorator (@staticmethod / @property) 不记录(CL-04)
|
|
32
|
+
*/
|
|
33
|
+
extractCallSites?(tree: Parser.Tree, source: string): CallSite[];
|
|
21
34
|
}
|
|
22
35
|
//# sourceMappingURL=base-mapper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-mapper.d.ts","sourceRoot":"","sources":["../../../src/core/query-mappers/base-mapper.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"base-mapper.d.ts","sourceRoot":"","sources":["../../../src/core/query-mappers/base-mapper.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,WAAW,aAAa;IAC5B,iBAAiB;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,eAAe;IACf,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAE5B,wBAAwB;IACxB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,YAAY,EAAE,CAAC;IAE3F,wBAAwB;IACxB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE,CAAC;IAErE,wBAAwB;IACxB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,UAAU,EAAE,CAAC;IAEpD,yCAAyC;IACzC,gBAAgB,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IAEpD;;;;;;;;OAQG;IACH,gBAAgB,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC;CAClE"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type Parser from 'web-tree-sitter';
|
|
6
6
|
import type { ExportSymbol, ImportReference, ParseError, Language } from '../../models/code-skeleton.js';
|
|
7
|
+
import type { CallSite } from '../../models/call-site.js';
|
|
7
8
|
import type { QueryMapper, MapperOptions } from './base-mapper.js';
|
|
8
9
|
export declare class GoMapper implements QueryMapper {
|
|
9
10
|
readonly language: Language;
|
|
@@ -42,5 +43,72 @@ export declare class GoMapper implements QueryMapper {
|
|
|
42
43
|
private _extractImportSpec;
|
|
43
44
|
/** 递归收集 AST 中的 ERROR 节点 */
|
|
44
45
|
private _collectErrors;
|
|
46
|
+
/**
|
|
47
|
+
* 抽取 Go 函数调用点。
|
|
48
|
+
*
|
|
49
|
+
* 行为对齐:
|
|
50
|
+
* - scripts/lib/go-call-extractor.mjs 的 _classifyCallExpression / _scanImports / _resolveGoCaller
|
|
51
|
+
* - call-resolver 4-stage 决策表(spec.md FR-2 表格 11 行 short-circuit)
|
|
52
|
+
*
|
|
53
|
+
* Size guard:source.length > 1MB 时返回 [](与 PythonMapper.extractCallSites 一致)。
|
|
54
|
+
*/
|
|
55
|
+
extractCallSites(tree: Parser.Tree, source: string): CallSite[];
|
|
56
|
+
/**
|
|
57
|
+
* FR-5: 扫描 source_file → import_declaration → import_spec 收集 alias 集合。
|
|
58
|
+
*
|
|
59
|
+
* 与 go-call-extractor.mjs `_scanImports` 行为完全一致:
|
|
60
|
+
* - 自定义 alias `import f "fmt"` → 记 alias `f`
|
|
61
|
+
* - 标准 import `import "fmt"` → 记 path 末段 `fmt`
|
|
62
|
+
* - dot import (name=dot) / blank import (name=blank_identifier) → skip(不入集合)
|
|
63
|
+
*/
|
|
64
|
+
private _scanImports;
|
|
65
|
+
/** FR-5 辅助:从 import_spec 提取 alias 名(dot/blank 返回 null)。 */
|
|
66
|
+
private _extractAliasFromImportSpec;
|
|
67
|
+
/**
|
|
68
|
+
* FR-7: 从 method_declaration 的 receiver 字段递归提取 type 名。
|
|
69
|
+
*
|
|
70
|
+
* 支持形态:值 receiver / 指针 / 嵌套指针 / 泛型 / 泛型指针 / qualified type,
|
|
71
|
+
* 与 go-call-extractor.mjs `_extractReceiverTypeName` + `_extractTypeNameRecursive` 行为一致。
|
|
72
|
+
*/
|
|
73
|
+
private _extractReceiverTypeName;
|
|
74
|
+
/** 递归从 type 节点中提取末段 type_identifier 名(值 type / pointer / generic / qualified)。 */
|
|
75
|
+
private _extractTypeNameRecursive;
|
|
76
|
+
/** FR-7: 从 method_declaration receiver 提取 var name(identifier 子节点;可能为 null)。 */
|
|
77
|
+
private _extractReceiverVarName;
|
|
78
|
+
/**
|
|
79
|
+
* FR-1, FR-7: 递归遍历 AST,对 call_expression 产 CallSite。
|
|
80
|
+
*
|
|
81
|
+
* 栈协议(try/finally 配对):
|
|
82
|
+
* - 进入 method_declaration → push `Type.method` + receiver var
|
|
83
|
+
* - 进入 function_declaration → push `funcName` + null
|
|
84
|
+
* - 进入 func_literal → push `<closure:line:col>` + null
|
|
85
|
+
* - 离开时 pop(finally 块保证)
|
|
86
|
+
*/
|
|
87
|
+
private _walkCallSites;
|
|
88
|
+
/**
|
|
89
|
+
* FR-1, FR-2 (11 行分类表), FR-6: 处理单个 call_expression 节点。
|
|
90
|
+
*
|
|
91
|
+
* 路由顺序按 spec.md FR-2 表格行 #1 → #11 short-circuit 匹配,先匹配的形态先返回。
|
|
92
|
+
*/
|
|
93
|
+
private _handleCall;
|
|
94
|
+
/**
|
|
95
|
+
* FR-2 行 #3, #4: 解开 parenthesized_expression 的 callee。
|
|
96
|
+
*
|
|
97
|
+
* 实测形态(与 go-call-extractor.mjs `_classifyCallExpression` 行 1.6 节段一致):
|
|
98
|
+
* - `(T)(nil)` → parenthesized(identifier "T") → free + "T"
|
|
99
|
+
* - `(*T)(nil)` → parenthesized(unary_expression("*", identifier "T")) → free + "T"
|
|
100
|
+
* - `(*pkg.T)(nil)` → parenthesized(unary_expression("*", selector(pkg, T))) → cross-module + "T" + qualifier "pkg"
|
|
101
|
+
*/
|
|
102
|
+
private _classifyParenthesized;
|
|
103
|
+
/**
|
|
104
|
+
* FR-6: phantom call 检测。
|
|
105
|
+
*
|
|
106
|
+
* - funcNode 缺失 / hasError → phantom(skip 抽取)
|
|
107
|
+
* - sibling 含 ERROR/MISSING → phantom
|
|
108
|
+
* children 仍由 _walkCallSites 递归 walk(不会因 phantom skip 整个子树)。
|
|
109
|
+
*/
|
|
110
|
+
private _isPhantomCall;
|
|
111
|
+
/** 构造单个 CallSite 记录。 */
|
|
112
|
+
private _mkCallSite;
|
|
45
113
|
}
|
|
46
114
|
//# sourceMappingURL=go-mapper.d.ts.map
|