code-auditor-mcp 3.10.0 → 4.0.1
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/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +197 -0
- package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.d.ts.map +1 -1
- package/dist/__tests__/fixtures/spec-52/item-05-upsert-forms.d.ts +4 -4
- package/dist/__tests__/fixtures/spec-52/item-05-upsert-forms.d.ts.map +1 -1
- package/dist/analyzers/analyzerUtils.d.ts.map +1 -1
- package/dist/analyzers/analyzerUtils.js +2 -2
- package/dist/analyzers/analyzerUtils.js.map +1 -1
- package/dist/analyzers/applicability.d.ts.map +1 -1
- package/dist/analyzers/applicability.js +1 -0
- package/dist/analyzers/applicability.js.map +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js +3 -3
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +2 -2
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +62 -17
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
- package/dist/analyzers/documentationAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/documentationAnalyzer.js +14 -16
- package/dist/analyzers/documentationAnalyzer.js.map +1 -1
- package/dist/analyzers/invariantsAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/invariantsAnalyzer.js +30 -25
- package/dist/analyzers/invariantsAnalyzer.js.map +1 -1
- package/dist/analyzers/orm/adapterRegistry.d.ts.map +1 -1
- package/dist/analyzers/orm/drizzleAdapter.d.ts.map +1 -1
- package/dist/analyzers/orm/prismaAdapter.d.ts.map +1 -1
- package/dist/analyzers/provenance.d.ts +10 -1
- package/dist/analyzers/provenance.d.ts.map +1 -1
- package/dist/analyzers/provenance.js +138 -1
- package/dist/analyzers/provenance.js.map +1 -1
- package/dist/analyzers/reactAnalyzer.d.ts +1 -1
- package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/reactAnalyzer.js +34 -116
- package/dist/analyzers/reactAnalyzer.js.map +1 -1
- package/dist/analyzers/ruleRegistry.d.ts +5 -3
- package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
- package/dist/analyzers/ruleRegistry.js +199 -55
- package/dist/analyzers/ruleRegistry.js.map +1 -1
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts +2 -2
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +10 -17
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +6 -6
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js +13 -13
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +266 -101
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +3 -2
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +14 -13
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +11 -11
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +19 -7
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSecretsAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +2 -2
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js +93 -46
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/schema/codeAnalysis.d.ts +58 -34
- package/dist/analyzers/universal/schema/codeAnalysis.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/codeAnalysis.js +239 -97
- package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -1
- package/dist/analyzers/universal/schema/config.d.ts +6 -6
- package/dist/analyzers/universal/schema/config.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/jsonSchema.js +1 -1
- package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -1
- package/dist/analyzers/universal/schema/types.d.ts +10 -0
- package/dist/analyzers/universal/schema/types.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/violations.d.ts +1 -1
- package/dist/analyzers/universal/schema/violations.d.ts.map +1 -1
- package/dist/auditRouter.js +7 -7
- package/dist/auditRouter.js.map +1 -1
- package/dist/auditRunner.d.ts +1 -1
- package/dist/auditRunner.d.ts.map +1 -1
- package/dist/auditRunner.js +53 -8
- package/dist/auditRunner.js.map +1 -1
- package/dist/churn/churnExtractor.js.map +1 -1
- package/dist/cli.js +52 -24
- package/dist/cli.js.map +1 -1
- package/dist/codeIndexDB.d.ts +1 -1
- package/dist/codeIndexDB.d.ts.map +1 -1
- package/dist/codeIndexDB.js +164 -18
- package/dist/codeIndexDB.js.map +1 -1
- package/dist/codeIndexService.d.ts.map +1 -1
- package/dist/codeIndexService.js.map +1 -1
- package/dist/componentScanner.d.ts.map +1 -1
- package/dist/componentScanner.js +89 -28
- package/dist/componentScanner.js.map +1 -1
- package/dist/config/configLoader.js +1 -1
- package/dist/config/configLoader.js.map +1 -1
- package/dist/config/defaults.d.ts +2 -2
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +10 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/conventions/conventionMiner.d.ts.map +1 -1
- package/dist/conventions/conventionMiner.js +3 -10
- package/dist/conventions/conventionMiner.js.map +1 -1
- package/dist/coverage/lcovParser.js.map +1 -1
- package/dist/daemon/args.js.map +1 -1
- package/dist/daemon/core.d.ts.map +1 -1
- package/dist/daemon/core.js +50 -46
- package/dist/daemon/core.js.map +1 -1
- package/dist/daemon/lspServer.d.ts.map +1 -1
- package/dist/daemon/lspServer.js +1 -1
- package/dist/daemon/lspServer.js.map +1 -1
- package/dist/daemon/main.d.ts.map +1 -1
- package/dist/daemon/main.js +14 -4
- package/dist/daemon/main.js.map +1 -1
- package/dist/daemon/resolve.js.map +1 -1
- package/dist/daemon/socketServer.d.ts.map +1 -1
- package/dist/enforcement/gate.js +2 -2
- package/dist/functionScanner.d.ts.map +1 -1
- package/dist/functionScanner.js +47 -42
- package/dist/functionScanner.js.map +1 -1
- package/dist/generators/AWSQConfigGenerator.d.ts.map +1 -1
- package/dist/generators/AiderConfigGenerator.d.ts.map +1 -1
- package/dist/generators/BaseConfigGenerator.d.ts.map +1 -1
- package/dist/generators/BaseConfigGenerator.js.map +1 -1
- package/dist/generators/ClaudeConfigGenerator.d.ts.map +1 -1
- package/dist/generators/ClineConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CodeiumConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CodexConfigGenerator.d.ts.map +1 -1
- package/dist/generators/ConfigGeneratorFactory.d.ts.map +1 -1
- package/dist/generators/ConfigGeneratorFactory.js.map +1 -1
- package/dist/generators/ContinueConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CopilotConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CursorConfigGenerator.d.ts.map +1 -1
- package/dist/generators/GeminiConfigGenerator.d.ts.map +1 -1
- package/dist/generators/JetBrainsConfigGenerator.d.ts.map +1 -1
- package/dist/generators/VSCodeConfigGenerator.d.ts.map +1 -1
- package/dist/generators/ZCodeConfigGenerator.d.ts.map +1 -1
- package/dist/graph/importClassification.d.ts +114 -0
- package/dist/graph/importClassification.d.ts.map +1 -0
- package/dist/graph/importClassification.js +393 -0
- package/dist/graph/importClassification.js.map +1 -0
- package/dist/graph/importGraph.d.ts +1 -0
- package/dist/graph/importGraph.d.ts.map +1 -1
- package/dist/graph/importGraph.js +1 -1
- package/dist/graph/importGraph.js.map +1 -1
- package/dist/graph/outputFormatter.js.map +1 -1
- package/dist/hooks/codex.d.ts.map +1 -1
- package/dist/hooks/codex.js +1 -1
- package/dist/hooks/codex.js.map +1 -1
- package/dist/hooks/core.d.ts +1 -1
- package/dist/hooks/core.d.ts.map +1 -1
- package/dist/hooks/core.js +4 -4
- package/dist/hooks/core.js.map +1 -1
- package/dist/hooks/cursor.d.ts.map +1 -1
- package/dist/hooks/cursor.js +2 -2
- package/dist/hooks/cursor.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/installer.d.ts +13 -7
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +25 -15
- package/dist/installer.js.map +1 -1
- package/dist/invariants/invariant-rules.schema.json +1 -1
- package/dist/invariants/ruleEngine.js.map +1 -1
- package/dist/invariants/ruleValidator.js +1 -1
- package/dist/invariants/ruleValidator.js.map +1 -1
- package/dist/invariants/types.d.ts +1 -1
- package/dist/invariants/types.d.ts.map +1 -1
- package/dist/languages/LanguageOrchestrator.d.ts +3 -2
- package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
- package/dist/languages/LanguageOrchestrator.js +1 -1
- package/dist/languages/LanguageOrchestrator.js.map +1 -1
- package/dist/languages/LanguageRegistry.d.ts.map +1 -1
- package/dist/languages/RuntimeManager.d.ts +20 -11
- package/dist/languages/RuntimeManager.d.ts.map +1 -1
- package/dist/languages/RuntimeManager.js +151 -51
- package/dist/languages/RuntimeManager.js.map +1 -1
- package/dist/languages/UniversalAnalyzer.d.ts.map +1 -1
- package/dist/languages/UniversalAnalyzer.js.map +1 -1
- package/dist/languages/adapterBridge.d.ts +10 -0
- package/dist/languages/adapterBridge.d.ts.map +1 -1
- package/dist/languages/adapterBridge.js +30 -7
- package/dist/languages/adapterBridge.js.map +1 -1
- package/dist/languages/go/GoAdapter.d.ts +1 -19
- package/dist/languages/go/GoAdapter.d.ts.map +1 -1
- package/dist/languages/go/GoAdapter.js +33 -116
- package/dist/languages/go/GoAdapter.js.map +1 -1
- package/dist/languages/go/analyzer +0 -0
- package/dist/languages/go/analyzer-src/analyzer.go +8 -8
- package/dist/languages/go/analyzer-src/solid.go +5 -5
- package/dist/languages/goBinary.d.ts +46 -0
- package/dist/languages/goBinary.d.ts.map +1 -0
- package/dist/languages/goBinary.js +169 -0
- package/dist/languages/goBinary.js.map +1 -0
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts +1 -28
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts.map +1 -1
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.js +3 -42
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.js.map +1 -1
- package/dist/languages/tree-sitter/converter.d.ts.map +1 -1
- package/dist/languages/tree-sitter/converter.js +2 -1
- package/dist/languages/tree-sitter/converter.js.map +1 -1
- package/dist/languages/tree-sitter/parser.js.map +1 -1
- package/dist/languages/tree-sitter/rawNode.d.ts +31 -0
- package/dist/languages/tree-sitter/rawNode.d.ts.map +1 -0
- package/dist/languages/tree-sitter/rawNode.js +38 -0
- package/dist/languages/tree-sitter/rawNode.js.map +1 -0
- package/dist/languages/types.d.ts +15 -21
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +12 -32
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +103 -203
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
- package/dist/ledger.d.ts +3 -0
- package/dist/ledger.d.ts.map +1 -1
- package/dist/ledger.js +45 -9
- package/dist/ledger.js.map +1 -1
- package/dist/mcp-tools/projectTasks.d.ts +37 -37
- package/dist/mcp-tools/projectTasks.js +2 -2
- package/dist/mcp-tools/projectTasks.js.map +1 -1
- package/dist/mcp-tools/whitelistTools.d.ts +17 -17
- package/dist/mcp-tools/whitelistTools.d.ts.map +1 -1
- package/dist/mcp-tools/workflowGuide.js +3 -3
- package/dist/mcp-tools/workflowGuide.js.map +1 -1
- package/dist/mcp-tools-shared.d.ts.map +1 -1
- package/dist/mcp-tools-shared.js +13 -13
- package/dist/mcp-tools-shared.js.map +1 -1
- package/dist/mcp-ui-simple.js +7 -7
- package/dist/mcp-ui-simple.js.map +1 -1
- package/dist/mcp.js +14 -14
- package/dist/mcp.js.map +1 -1
- package/dist/mcpAuditJobs.js +7 -7
- package/dist/mcpAuditJobs.js.map +1 -1
- package/dist/mcpAutoIndex.js +1 -1
- package/dist/mcpAutoIndex.js.map +1 -1
- package/dist/mcpToolErrors.d.ts.map +1 -1
- package/dist/mcpToolErrors.js.map +1 -1
- package/dist/native-bootstrap.js.map +1 -1
- package/dist/nextFile.d.ts +2 -2
- package/dist/nextFile.d.ts.map +1 -1
- package/dist/nextFile.js +19 -5
- package/dist/nextFile.js.map +1 -1
- package/dist/nextFileIncremental.d.ts +10 -2
- package/dist/nextFileIncremental.d.ts.map +1 -1
- package/dist/nextFileIncremental.js +45 -16
- package/dist/nextFileIncremental.js.map +1 -1
- package/dist/pipeline.d.ts +2 -2
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +35 -0
- package/dist/pipeline.js.map +1 -1
- package/dist/pipelineAdapters.d.ts +17 -0
- package/dist/pipelineAdapters.d.ts.map +1 -1
- package/dist/pipelineAdapters.js +356 -197
- package/dist/pipelineAdapters.js.map +1 -1
- package/dist/reporting/csvReportGenerator.d.ts.map +1 -1
- package/dist/reporting/csvReportGenerator.js +6 -6
- package/dist/reporting/csvReportGenerator.js.map +1 -1
- package/dist/reporting/htmlReportGenerator.d.ts.map +1 -1
- package/dist/reporting/htmlReportGenerator.js +11 -11
- package/dist/reporting/htmlReportGenerator.js.map +1 -1
- package/dist/reporting/jsonReportGenerator.d.ts.map +1 -1
- package/dist/reporting/jsonReportGenerator.js +2 -2
- package/dist/reporting/jsonReportGenerator.js.map +1 -1
- package/dist/reporting/reportGenerator.d.ts.map +1 -1
- package/dist/reporting/sarifReportGenerator.d.ts.map +1 -1
- package/dist/reporting/sarifReportGenerator.js +1 -1
- package/dist/reporting/sarifReportGenerator.js.map +1 -1
- package/dist/scripts/benchmarkWorkers.js +1 -1
- package/dist/scripts/benchmarkWorkers.js.map +1 -1
- package/dist/search/QueryParser.d.ts.map +1 -1
- package/dist/search/QueryParser.js.map +1 -1
- package/dist/services/CodeMapGenerator.d.ts.map +1 -1
- package/dist/services/CodeMapGenerator.js.map +1 -1
- package/dist/services/ProjectTaskRepository.d.ts.map +1 -1
- package/dist/services/ProjectTaskRepository.js.map +1 -1
- package/dist/services/auditJobService.js.map +1 -1
- package/dist/services/fileAccounting.d.ts.map +1 -1
- package/dist/services/projectTaskHelpers.js.map +1 -1
- package/dist/services/whitelistService.d.ts.map +1 -1
- package/dist/sqlite/betterSqlite3.d.ts.map +1 -1
- package/dist/sqlite/betterSqlite3.js.map +1 -1
- package/dist/sqlite/nodeSqlite.d.ts.map +1 -1
- package/dist/sqlite/nodeSqlite.js.map +1 -1
- package/dist/structuralSignature.js.map +1 -1
- package/dist/styles/cssAstExtractor.d.ts +2 -2
- package/dist/styles/cssAstExtractor.d.ts.map +1 -1
- package/dist/styles/cssAstExtractor.js +67 -111
- package/dist/styles/cssAstExtractor.js.map +1 -1
- package/dist/styles/styleExtractor.js.map +1 -1
- package/dist/styles/styleIndexer.d.ts.map +1 -1
- package/dist/styles/styleIndexer.js +19 -6
- package/dist/styles/styleIndexer.js.map +1 -1
- package/dist/styles/tailwindConfigLoader.js.map +1 -1
- package/dist/styles/tailwindProbe.d.ts.map +1 -1
- package/dist/styles/tailwindUtilityExpander.d.ts.map +1 -1
- package/dist/styles/tailwindUtilityExpander.js.map +1 -1
- package/dist/telemetry.d.ts +1 -1
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js.map +1 -1
- package/dist/tool-registry.d.ts.map +1 -1
- package/dist/types/crossLanguage.d.ts +1 -1
- package/dist/types/crossLanguage.d.ts.map +1 -1
- package/dist/types.d.ts +67 -19
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +6 -5
- package/dist/types.js.map +1 -1
- package/dist/ui/InteractivePrompts.d.ts.map +1 -1
- package/dist/ui/InteractivePrompts.js.map +1 -1
- package/dist/utils/astParser.d.ts +1 -17
- package/dist/utils/astParser.d.ts.map +1 -1
- package/dist/utils/astParser.js +18 -60
- package/dist/utils/astParser.js.map +1 -1
- package/dist/utils/astUtils.d.ts +12 -12
- package/dist/utils/astUtils.d.ts.map +1 -1
- package/dist/utils/astUtils.js +83 -82
- package/dist/utils/astUtils.js.map +1 -1
- package/dist/utils/componentPatterns.js.map +1 -1
- package/dist/utils/componentResponsibility.d.ts +8 -8
- package/dist/utils/componentResponsibility.d.ts.map +1 -1
- package/dist/utils/componentResponsibility.js +33 -38
- package/dist/utils/componentResponsibility.js.map +1 -1
- package/dist/utils/dependencyExtractor.d.ts +3 -3
- package/dist/utils/dependencyExtractor.d.ts.map +1 -1
- package/dist/utils/dependencyExtractor.js +26 -30
- package/dist/utils/dependencyExtractor.js.map +1 -1
- package/dist/utils/fileDiscovery.d.ts.map +1 -1
- package/dist/utils/fileDiscovery.js +65 -0
- package/dist/utils/fileDiscovery.js.map +1 -1
- package/dist/utils/jsDocParser.d.ts +6 -6
- package/dist/utils/jsDocParser.d.ts.map +1 -1
- package/dist/utils/jsDocParser.js +18 -21
- package/dist/utils/jsDocParser.js.map +1 -1
- package/dist/utils/reactDetection.d.ts +7 -7
- package/dist/utils/reactDetection.d.ts.map +1 -1
- package/dist/utils/reactDetection.js +42 -49
- package/dist/utils/reactDetection.js.map +1 -1
- package/dist/version.generated.d.ts +1 -1
- package/dist/version.generated.d.ts.map +1 -1
- package/dist/version.generated.js +1 -1
- package/dist/version.generated.js.map +1 -1
- package/dist/workers/auditWorker.js.map +1 -1
- package/package.json +4 -3
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/README.md +5 -4
- package/plugin/hooks/hooks.json +11 -0
- package/plugin/scripts/hook-common.sh +85 -31
- package/plugin/scripts/hook-warm.sh +44 -0
- package/plugin/skills/code-auditor/SKILL-RULE-KINDS.md +28 -21
- package/plugin/skills/code-auditor/SKILL.md +10 -10
- package/server.json +2 -2
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec 60.1 — import specifier classification at emission (five classes).
|
|
3
|
+
*
|
|
4
|
+
* Supersedes Spec 60's three-class scheme. Every import specifier is exactly one of
|
|
5
|
+
* five classes:
|
|
6
|
+
*
|
|
7
|
+
* - `package` — does not begin with `.` or `/`, does not match a tsconfig
|
|
8
|
+
* `paths` pattern, and does not begin with `@/`. A complete
|
|
9
|
+
* answer (Node builtin, npm package, scoped package); never
|
|
10
|
+
* an edge.
|
|
11
|
+
* - `unresolved-alias` — does not begin with `.` or `/`, and *does* match a tsconfig
|
|
12
|
+
* `paths` pattern or begins with `@/`, but its target did not
|
|
13
|
+
* resolve to a corpus file. A gap in the tool's coverage of the
|
|
14
|
+
* project, not a defect in the project (never an edge).
|
|
15
|
+
* - `internal-resolved` — begins with `.` or `/`, and normalization finds exactly one
|
|
16
|
+
* existing file in the corpus file set. Carries that path.
|
|
17
|
+
* - `internal-broken` — begins with `.` or `/`, and normalization finds no existing
|
|
18
|
+
* file. A real defect in the audited project.
|
|
19
|
+
* - `unresolved-virtual` — begins with `.` or `/`, and the specifier exactly matches a
|
|
20
|
+
* configured virtual-module entry (e.g. Blitz's `.blitz`).
|
|
21
|
+
*
|
|
22
|
+
* This deliberately does NOT use `resolveDependency` (src/graph/importGraph.ts) — that
|
|
23
|
+
* function's basename / path-segment fallback produced blitz tested=350 against a truth
|
|
24
|
+
* of 39, and is exactly what this spec exists to replace. It reuses only `normalizePath`,
|
|
25
|
+
* which the spec forbids reimplementing.
|
|
26
|
+
*/
|
|
27
|
+
export type SpecifierClassification = 'package' | 'unresolved-alias' | 'internal-resolved' | 'internal-broken' | 'unresolved-virtual';
|
|
28
|
+
export interface ClassifiedSpecifier {
|
|
29
|
+
classification: SpecifierClassification;
|
|
30
|
+
/** Absolute path when `classification` is 'internal-resolved'; undefined otherwise. */
|
|
31
|
+
resolvedPath?: string;
|
|
32
|
+
}
|
|
33
|
+
/** Options threaded in by the caller (pure-function inputs — no I/O here). */
|
|
34
|
+
export interface ClassifyOptions {
|
|
35
|
+
/** Virtual-module specifiers matched exactly. Defaults to DEFAULT_VIRTUAL_MODULES. */
|
|
36
|
+
virtualModules?: readonly string[];
|
|
37
|
+
/** tsconfig `compilerOptions.paths` keys, used for pattern matching only. */
|
|
38
|
+
aliasPatterns?: readonly string[];
|
|
39
|
+
/** Full tsconfig `compilerOptions.paths` mapping (pattern → targets), used to
|
|
40
|
+
* resolve alias specifiers to files. */
|
|
41
|
+
pathMappings?: Readonly<Record<string, readonly string[]>>;
|
|
42
|
+
/** tsconfig `compilerOptions.baseUrl`, resolved against `projectRoot` when
|
|
43
|
+
* relative. Only meaningful alongside `pathMappings`. */
|
|
44
|
+
baseUrl?: string;
|
|
45
|
+
/** Absolute project root — the base `baseUrl` resolves against. */
|
|
46
|
+
projectRoot?: string;
|
|
47
|
+
}
|
|
48
|
+
/** Default virtual-module list. A project overrides via config (not code). */
|
|
49
|
+
export declare const DEFAULT_VIRTUAL_MODULES: readonly string[];
|
|
50
|
+
/**
|
|
51
|
+
* Classify a single import specifier against the corpus file set.
|
|
52
|
+
*
|
|
53
|
+
* @param specifier The raw specifier as written (quotes stripped), e.g. `react`,
|
|
54
|
+
* `./types.js`, `@/components/Button`, `.blitz`, `./x.jsonl?raw`.
|
|
55
|
+
* @param sourceFile The absolute path of the file the specifier is written in.
|
|
56
|
+
* @param corpusFiles The in-memory set of absolute paths in the corpus (the stage-1
|
|
57
|
+
* discovery file list). Existence is checked against this set —
|
|
58
|
+
* never `fs.existsSync`.
|
|
59
|
+
* @param options `virtualModules` (exact-match virtual list), `aliasPatterns`
|
|
60
|
+
* (tsconfig `paths` keys), `pathMappings` (full `paths` mapping),
|
|
61
|
+
* and `baseUrl`/`projectRoot` (for alias + baseUrl-rooted bare
|
|
62
|
+
* resolution). All default to empty; the caller supplies them
|
|
63
|
+
* from config/tsconfig.
|
|
64
|
+
*/
|
|
65
|
+
export declare function classifyImportSpecifier(specifier: string, sourceFile: string, corpusFiles: ReadonlySet<string>, options?: ClassifyOptions): ClassifiedSpecifier;
|
|
66
|
+
export interface TsconfigAliases {
|
|
67
|
+
/** Keys of `compilerOptions.paths` (e.g. `['@/*', '~/*']`). */
|
|
68
|
+
pathPatterns: string[];
|
|
69
|
+
/** Raw `compilerOptions.baseUrl` string, if present. */
|
|
70
|
+
baseUrl?: string;
|
|
71
|
+
/** Whether a readable, parseable tsconfig.json existed at projectRoot. */
|
|
72
|
+
hasTsconfig: boolean;
|
|
73
|
+
/** Full `compilerOptions.paths` mapping: pattern → target patterns. */
|
|
74
|
+
paths: Record<string, string[]>;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Read `compilerOptions.paths` + `baseUrl` from the project's tsconfig.json for
|
|
78
|
+
* alias classification and resolution. Behavior:
|
|
79
|
+
* - absent — returns `{ hasTsconfig: false, pathPatterns: [] }` (a project with no
|
|
80
|
+
* tsconfig still classifies `@/`-prefixed specifiers as alias, independent of this).
|
|
81
|
+
* - malformed (JSON parse fails, or comments the stripper can't recover from) —
|
|
82
|
+
* same as absent.
|
|
83
|
+
* - `extends` — the extended config is read first (relative to the extending file),
|
|
84
|
+
* then this config's `paths`/`baseUrl` override it. A cycle or a non-relative
|
|
85
|
+
* (package-name) extends that can't be read yields the base as empty.
|
|
86
|
+
*/
|
|
87
|
+
export declare function readTsconfigAliases(projectRoot: string): TsconfigAliases;
|
|
88
|
+
export interface PackageEntryPoints {
|
|
89
|
+
/** Absolute paths of declared entry points plus their sibling facades. */
|
|
90
|
+
entryPaths: string[];
|
|
91
|
+
/** Whether a readable, parseable package.json existed at projectRoot. */
|
|
92
|
+
hasPackageJson: boolean;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Pure: expand declared entry paths (package.json `main`/`module`/`types`/
|
|
96
|
+
* `bin`/`exports` targets) into their absolute paths plus every sibling facade.
|
|
97
|
+
* `main: knex.js` expands to `knex.js`, `knex.mjs`, `knex.cjs`, `knex.d.mts`,
|
|
98
|
+
* … so the ESM/types facades that no in-tree import reaches are still counted
|
|
99
|
+
* as live. Each declared path is resolved against `projectRoot`; `./`-prefixed
|
|
100
|
+
* and extensionless entries resolve the same way.
|
|
101
|
+
*/
|
|
102
|
+
export declare function expandEntryPointFacades(declared: readonly string[], projectRoot: string): Set<string>;
|
|
103
|
+
/**
|
|
104
|
+
* Read a package's declared entry points from package.json and expand each into
|
|
105
|
+
* its sibling facades. A file reachable only through the package manifest is an
|
|
106
|
+
* entry point, not dead code — the filename heuristic (`clIsEntryPointFile`)
|
|
107
|
+
* covers `app`/`route`/`page`/`index` but not `knex.mjs` / `knex.d.mts`, so a
|
|
108
|
+
* published library's facades were being flagged `unreferenced-module`.
|
|
109
|
+
*
|
|
110
|
+
* Malformed or absent package.json yields an empty set (same failure mode as
|
|
111
|
+
* `readTsconfigAliases`).
|
|
112
|
+
*/
|
|
113
|
+
export declare function readPackageEntryPoints(projectRoot: string): PackageEntryPoints;
|
|
114
|
+
//# sourceMappingURL=importClassification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importClassification.d.ts","sourceRoot":"","sources":["../../src/graph/importClassification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAMH,MAAM,MAAM,uBAAuB,GAC/B,SAAS,GACT,kBAAkB,GAClB,mBAAmB,GACnB,iBAAiB,GACjB,oBAAoB,CAAC;AAEzB,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,uBAAuB,CAAC;IACxC,uFAAuF;IACvF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,8EAA8E;AAC9E,MAAM,WAAW,eAAe;IAC9B,sFAAsF;IACtF,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,6EAA6E;IAC7E,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC;6CACyC;IACzC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3D;8DAC0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAoBD,8EAA8E;AAC9E,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAAe,CAAC;AA+FrE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,EAChC,OAAO,GAAE,eAAoB,GAC5B,mBAAmB,CA+CrB;AAID,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,WAAW,EAAE,OAAO,CAAC;IACrB,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACjC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAGxE;AAyED,MAAM,WAAW,kBAAkB;IACjC,0EAA0E;IAC1E,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,yEAAyE;IACzE,cAAc,EAAE,OAAO,CAAC;CACzB;AA+CD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,WAAW,EAAE,MAAM,GAClB,GAAG,CAAC,MAAM,CAAC,CASb;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,CA8B9E"}
|
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec 60.1 — import specifier classification at emission (five classes).
|
|
3
|
+
*
|
|
4
|
+
* Supersedes Spec 60's three-class scheme. Every import specifier is exactly one of
|
|
5
|
+
* five classes:
|
|
6
|
+
*
|
|
7
|
+
* - `package` — does not begin with `.` or `/`, does not match a tsconfig
|
|
8
|
+
* `paths` pattern, and does not begin with `@/`. A complete
|
|
9
|
+
* answer (Node builtin, npm package, scoped package); never
|
|
10
|
+
* an edge.
|
|
11
|
+
* - `unresolved-alias` — does not begin with `.` or `/`, and *does* match a tsconfig
|
|
12
|
+
* `paths` pattern or begins with `@/`, but its target did not
|
|
13
|
+
* resolve to a corpus file. A gap in the tool's coverage of the
|
|
14
|
+
* project, not a defect in the project (never an edge).
|
|
15
|
+
* - `internal-resolved` — begins with `.` or `/`, and normalization finds exactly one
|
|
16
|
+
* existing file in the corpus file set. Carries that path.
|
|
17
|
+
* - `internal-broken` — begins with `.` or `/`, and normalization finds no existing
|
|
18
|
+
* file. A real defect in the audited project.
|
|
19
|
+
* - `unresolved-virtual` — begins with `.` or `/`, and the specifier exactly matches a
|
|
20
|
+
* configured virtual-module entry (e.g. Blitz's `.blitz`).
|
|
21
|
+
*
|
|
22
|
+
* This deliberately does NOT use `resolveDependency` (src/graph/importGraph.ts) — that
|
|
23
|
+
* function's basename / path-segment fallback produced blitz tested=350 against a truth
|
|
24
|
+
* of 39, and is exactly what this spec exists to replace. It reuses only `normalizePath`,
|
|
25
|
+
* which the spec forbids reimplementing.
|
|
26
|
+
*/
|
|
27
|
+
import fs from 'node:fs';
|
|
28
|
+
import path from 'path';
|
|
29
|
+
import { normalizePath } from './importGraph.js';
|
|
30
|
+
/**
|
|
31
|
+
* Extensions stripped off the base path before probing — ESM TypeScript writes
|
|
32
|
+
* `./types.js` for a file named `types.ts`, so exact resolution of the `.js` form
|
|
33
|
+
* fails until the extension is removed.
|
|
34
|
+
*/
|
|
35
|
+
const JS_STRIP_EXTS = ['.js', '.jsx', '.mjs', '.cjs'];
|
|
36
|
+
/**
|
|
37
|
+
* Extensions probed in order. Declaration extensions are appended LAST so a `.ts`
|
|
38
|
+
* beats a `.d.ts` at the same stem. `.d.ts` was missing from Spec 60's list, which
|
|
39
|
+
* classified knex's `../types` (resolving to a `.d.ts`) as broken.
|
|
40
|
+
*/
|
|
41
|
+
const PROBE_EXTS = [
|
|
42
|
+
'.ts', '.tsx', '.mts', '.cts',
|
|
43
|
+
'.js', '.jsx', '.mjs', '.cjs',
|
|
44
|
+
'.d.ts', '.d.mts', '.d.cts',
|
|
45
|
+
];
|
|
46
|
+
/** Default virtual-module list. A project overrides via config (not code). */
|
|
47
|
+
export const DEFAULT_VIRTUAL_MODULES = ['.blitz'];
|
|
48
|
+
/**
|
|
49
|
+
* Strip a trailing `?query` and `#fragment` suffix. Done first, before the alias
|
|
50
|
+
* check, the virtual check, and the `.js`→`.ts` strip — so `./x.jsonl?raw`
|
|
51
|
+
* normalizes as `./x.jsonl` (Vite convention) and `./x.js#frag` still strips `.js`.
|
|
52
|
+
*/
|
|
53
|
+
function stripQueryAndFragment(specifier) {
|
|
54
|
+
const q = specifier.indexOf('?');
|
|
55
|
+
const h = specifier.indexOf('#');
|
|
56
|
+
let end = specifier.length;
|
|
57
|
+
if (q >= 0)
|
|
58
|
+
end = Math.min(end, q);
|
|
59
|
+
if (h >= 0)
|
|
60
|
+
end = Math.min(end, h);
|
|
61
|
+
return specifier.slice(0, end);
|
|
62
|
+
}
|
|
63
|
+
function escapeRegex(s) {
|
|
64
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Match a tsconfig `paths` key pattern against a specifier. `*` matches any string
|
|
68
|
+
* (including empty), matching tsconfig's documented semantics. Pattern matching only
|
|
69
|
+
* — this never resolves the alias to a file.
|
|
70
|
+
*/
|
|
71
|
+
function matchesPathsPattern(specifier, pattern) {
|
|
72
|
+
const re = new RegExp('^' + pattern.split('*').map(escapeRegex).join('.*') + '$');
|
|
73
|
+
return re.test(specifier);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Probe a resolved base path for an existing corpus file: exact, then JS
|
|
77
|
+
* extension stripped + TypeScript probe extensions, then `/index` forms.
|
|
78
|
+
* Returns the first existing file, or `undefined`.
|
|
79
|
+
*/
|
|
80
|
+
function probeResolvedPath(base, corpusFiles) {
|
|
81
|
+
let stripped = base;
|
|
82
|
+
for (const ext of JS_STRIP_EXTS) {
|
|
83
|
+
if (base.endsWith(ext)) {
|
|
84
|
+
stripped = base.slice(0, base.length - ext.length);
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const candidates = [base];
|
|
89
|
+
for (const ext of PROBE_EXTS)
|
|
90
|
+
candidates.push(stripped + ext);
|
|
91
|
+
for (const ext of PROBE_EXTS)
|
|
92
|
+
candidates.push(stripped + '/index' + ext);
|
|
93
|
+
for (const candidate of candidates) {
|
|
94
|
+
if (corpusFiles.has(candidate))
|
|
95
|
+
return candidate;
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Resolve a bare specifier through tsconfig `paths` mappings (alias resolution).
|
|
101
|
+
*
|
|
102
|
+
* For each mapping whose pattern matches the specifier, the `*` wildcard is
|
|
103
|
+
* captured and substituted into each target pattern; the result is resolved
|
|
104
|
+
* against `baseUrl` (relative to `projectRoot`) and probed against the corpus.
|
|
105
|
+
* Returns the first existing file, or `undefined` when nothing resolves.
|
|
106
|
+
*
|
|
107
|
+
* tsconfig `paths` supports a single `*` per pattern; multiple stars are
|
|
108
|
+
* unsupported here (they have no defined substitution order anyway).
|
|
109
|
+
*/
|
|
110
|
+
function resolveAliasTarget(specifier, options, corpusFiles) {
|
|
111
|
+
const mappings = options.pathMappings;
|
|
112
|
+
const root = options.projectRoot;
|
|
113
|
+
if (!mappings || !root)
|
|
114
|
+
return undefined;
|
|
115
|
+
for (const [pattern, targets] of Object.entries(mappings)) {
|
|
116
|
+
let wildcard = null;
|
|
117
|
+
const starIdx = pattern.indexOf('*');
|
|
118
|
+
if (starIdx !== -1) {
|
|
119
|
+
const prefix = pattern.slice(0, starIdx);
|
|
120
|
+
const suffix = pattern.slice(starIdx + 1);
|
|
121
|
+
if (!specifier.startsWith(prefix) || !specifier.endsWith(suffix))
|
|
122
|
+
continue;
|
|
123
|
+
wildcard = specifier.slice(prefix.length, specifier.length - suffix.length);
|
|
124
|
+
}
|
|
125
|
+
else if (specifier !== pattern) {
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
for (const target of targets) {
|
|
129
|
+
const substituted = wildcard === null ? target : target.split('*').join(wildcard);
|
|
130
|
+
const base = normalizePath(path.resolve(root, options.baseUrl ?? '.', substituted));
|
|
131
|
+
const resolved = probeResolvedPath(base, corpusFiles);
|
|
132
|
+
if (resolved)
|
|
133
|
+
return resolved;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Classify a single import specifier against the corpus file set.
|
|
140
|
+
*
|
|
141
|
+
* @param specifier The raw specifier as written (quotes stripped), e.g. `react`,
|
|
142
|
+
* `./types.js`, `@/components/Button`, `.blitz`, `./x.jsonl?raw`.
|
|
143
|
+
* @param sourceFile The absolute path of the file the specifier is written in.
|
|
144
|
+
* @param corpusFiles The in-memory set of absolute paths in the corpus (the stage-1
|
|
145
|
+
* discovery file list). Existence is checked against this set —
|
|
146
|
+
* never `fs.existsSync`.
|
|
147
|
+
* @param options `virtualModules` (exact-match virtual list), `aliasPatterns`
|
|
148
|
+
* (tsconfig `paths` keys), `pathMappings` (full `paths` mapping),
|
|
149
|
+
* and `baseUrl`/`projectRoot` (for alias + baseUrl-rooted bare
|
|
150
|
+
* resolution). All default to empty; the caller supplies them
|
|
151
|
+
* from config/tsconfig.
|
|
152
|
+
*/
|
|
153
|
+
export function classifyImportSpecifier(specifier, sourceFile, corpusFiles, options = {}) {
|
|
154
|
+
const clean = stripQueryAndFragment(specifier);
|
|
155
|
+
// 1. Bare (non-relative) specifier → alias resolution, then package vs alias.
|
|
156
|
+
if (!clean.startsWith('.') && !clean.startsWith('/')) {
|
|
157
|
+
// A tsconfig `paths` alias that resolves to a corpus file is a live internal
|
|
158
|
+
// edge, not a coverage gap — resolve it before falling back to classification.
|
|
159
|
+
const aliasTarget = resolveAliasTarget(clean, options, corpusFiles);
|
|
160
|
+
if (aliasTarget)
|
|
161
|
+
return { classification: 'internal-resolved', resolvedPath: aliasTarget };
|
|
162
|
+
// A `baseUrl`-rooted bare import (classic node resolution with `baseUrl`):
|
|
163
|
+
// `baseUrl + specifier` resolves a local file — e.g. hhra's `from "app/actions"`
|
|
164
|
+
// with `baseUrl: "."`. Probe it before declaring `package`; a non-existent
|
|
165
|
+
// target (e.g. `react`) simply misses and falls through to `package`.
|
|
166
|
+
if (options.baseUrl && options.projectRoot) {
|
|
167
|
+
const baseUrlTarget = probeResolvedPath(normalizePath(path.resolve(options.projectRoot, options.baseUrl, clean)), corpusFiles);
|
|
168
|
+
if (baseUrlTarget)
|
|
169
|
+
return { classification: 'internal-resolved', resolvedPath: baseUrlTarget };
|
|
170
|
+
}
|
|
171
|
+
if (clean.startsWith('@/'))
|
|
172
|
+
return { classification: 'unresolved-alias' };
|
|
173
|
+
for (const pattern of options.aliasPatterns ?? []) {
|
|
174
|
+
if (matchesPathsPattern(clean, pattern)) {
|
|
175
|
+
return { classification: 'unresolved-alias' };
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return { classification: 'package' };
|
|
179
|
+
}
|
|
180
|
+
// 2. Relative/absolute specifier that exactly matches a virtual-module entry.
|
|
181
|
+
// Defaults to DEFAULT_VIRTUAL_MODULES (['.blitz']); the caller overrides it
|
|
182
|
+
// from config.
|
|
183
|
+
if ((options.virtualModules ?? DEFAULT_VIRTUAL_MODULES).includes(clean)) {
|
|
184
|
+
return { classification: 'unresolved-virtual' };
|
|
185
|
+
}
|
|
186
|
+
// 3. base = normalize(join(dirname(sourceFile), clean)). `path.join` resolves
|
|
187
|
+
// `.`/`..`; `normalizePath` converts backslashes and preserves a leading slash.
|
|
188
|
+
const base = normalizePath(path.join(path.dirname(sourceFile), clean));
|
|
189
|
+
// 4-5. Probe in order — first existing file in the corpus file set wins.
|
|
190
|
+
const resolved = probeResolvedPath(base, corpusFiles);
|
|
191
|
+
if (resolved)
|
|
192
|
+
return { classification: 'internal-resolved', resolvedPath: resolved };
|
|
193
|
+
return { classification: 'internal-broken' };
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Read `compilerOptions.paths` + `baseUrl` from the project's tsconfig.json for
|
|
197
|
+
* alias classification and resolution. Behavior:
|
|
198
|
+
* - absent — returns `{ hasTsconfig: false, pathPatterns: [] }` (a project with no
|
|
199
|
+
* tsconfig still classifies `@/`-prefixed specifiers as alias, independent of this).
|
|
200
|
+
* - malformed (JSON parse fails, or comments the stripper can't recover from) —
|
|
201
|
+
* same as absent.
|
|
202
|
+
* - `extends` — the extended config is read first (relative to the extending file),
|
|
203
|
+
* then this config's `paths`/`baseUrl` override it. A cycle or a non-relative
|
|
204
|
+
* (package-name) extends that can't be read yields the base as empty.
|
|
205
|
+
*/
|
|
206
|
+
export function readTsconfigAliases(projectRoot) {
|
|
207
|
+
const visited = new Set();
|
|
208
|
+
return readTsconfigAt(path.resolve(projectRoot, 'tsconfig.json'), visited);
|
|
209
|
+
}
|
|
210
|
+
function readTsconfigAt(configPath, visited) {
|
|
211
|
+
if (visited.has(configPath))
|
|
212
|
+
return { pathPatterns: [], hasTsconfig: false, paths: {} };
|
|
213
|
+
visited.add(configPath);
|
|
214
|
+
let raw;
|
|
215
|
+
try {
|
|
216
|
+
raw = fs.readFileSync(configPath, 'utf-8');
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
return { pathPatterns: [], hasTsconfig: false, paths: {} };
|
|
220
|
+
}
|
|
221
|
+
let parsed;
|
|
222
|
+
try {
|
|
223
|
+
parsed = JSON.parse(stripJsonComments(raw));
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
return { pathPatterns: [], hasTsconfig: false, paths: {} };
|
|
227
|
+
}
|
|
228
|
+
let base = { pathPatterns: [], hasTsconfig: false, paths: {} };
|
|
229
|
+
if (typeof parsed.extends === 'string') {
|
|
230
|
+
base = readTsconfigAt(path.resolve(path.dirname(configPath), parsed.extends), visited);
|
|
231
|
+
}
|
|
232
|
+
const co = parsed.compilerOptions ?? {};
|
|
233
|
+
const baseUrl = typeof co.baseUrl === 'string' ? co.baseUrl : base.baseUrl;
|
|
234
|
+
const paths = co.paths && typeof co.paths === 'object' && !Array.isArray(co.paths)
|
|
235
|
+
? co.paths
|
|
236
|
+
: base.paths;
|
|
237
|
+
const pathPatterns = Object.keys(paths);
|
|
238
|
+
return { pathPatterns, baseUrl, paths, hasTsconfig: true };
|
|
239
|
+
}
|
|
240
|
+
/** Strip `//` and `/* */` comments, respecting double-quoted strings (JSON). */
|
|
241
|
+
function stripJsonComments(text) {
|
|
242
|
+
if (!text)
|
|
243
|
+
return text;
|
|
244
|
+
let out = '';
|
|
245
|
+
let i = 0;
|
|
246
|
+
const n = text.length;
|
|
247
|
+
let inString = false;
|
|
248
|
+
while (i < n) {
|
|
249
|
+
const ch = text[i];
|
|
250
|
+
const next = text[i + 1];
|
|
251
|
+
if (inString) {
|
|
252
|
+
out += ch;
|
|
253
|
+
if (ch === '\\' && i + 1 < n) {
|
|
254
|
+
out += next;
|
|
255
|
+
i += 2;
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
if (ch === '"')
|
|
259
|
+
inString = false;
|
|
260
|
+
i += 1;
|
|
261
|
+
continue;
|
|
262
|
+
}
|
|
263
|
+
if (ch === '"') {
|
|
264
|
+
inString = true;
|
|
265
|
+
out += ch;
|
|
266
|
+
i += 1;
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
if (ch === '/' && next === '/') {
|
|
270
|
+
while (i < n && text[i] !== '\n')
|
|
271
|
+
i += 1;
|
|
272
|
+
continue;
|
|
273
|
+
}
|
|
274
|
+
if (ch === '/' && next === '*') {
|
|
275
|
+
i += 2;
|
|
276
|
+
while (i < n && !(text[i] === '*' && text[i + 1] === '/'))
|
|
277
|
+
i += 1;
|
|
278
|
+
i += 2;
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
out += ch;
|
|
282
|
+
i += 1;
|
|
283
|
+
}
|
|
284
|
+
return out;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Facade extensions in stem-stripping order. Declaration extensions (`.d.mts`,
|
|
288
|
+
* `.d.cts`, `.d.ts`) come first so `knex.d.mts` strips its stem to `knex`
|
|
289
|
+
* rather than `knex.d`; the code extensions follow. This is the module-format
|
|
290
|
+
* set a published package ships its entry in — and the `.mjs` / `.d.mts` /
|
|
291
|
+
* `.cjs` siblings of `main` are exactly the files `unreferenced-module` flags
|
|
292
|
+
* dead (knex's `knex.mjs` / `knex.d.mts` beside `main: knex.js`), because no
|
|
293
|
+
* in-tree import ever reaches them.
|
|
294
|
+
*/
|
|
295
|
+
const FACADE_EXTS = [
|
|
296
|
+
'.d.mts', '.d.cts', '.d.ts',
|
|
297
|
+
'.mts', '.cts', '.tsx',
|
|
298
|
+
'.mjs', '.cjs', '.jsx', '.js', '.ts',
|
|
299
|
+
];
|
|
300
|
+
function stripFacadeExt(p) {
|
|
301
|
+
for (const ext of FACADE_EXTS) {
|
|
302
|
+
if (p.endsWith(ext))
|
|
303
|
+
return p.slice(0, p.length - ext.length);
|
|
304
|
+
}
|
|
305
|
+
return p;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Collect relative subpath targets (`./dist/x.js`) from an `exports` field.
|
|
309
|
+
* `exports` is a nested structure of condition keys (`import`, `require`,
|
|
310
|
+
* `node`, `types`, `default`, …) over string targets, fallback arrays, or
|
|
311
|
+
* nested objects. Only string leaves are local files; a non-relative leaf
|
|
312
|
+
* (a package name or bare pattern) is not.
|
|
313
|
+
*/
|
|
314
|
+
function collectExportsTargets(exports, out) {
|
|
315
|
+
if (typeof exports === 'string') {
|
|
316
|
+
if (exports.startsWith('./'))
|
|
317
|
+
out.push(exports);
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
if (Array.isArray(exports)) {
|
|
321
|
+
for (const e of exports)
|
|
322
|
+
collectExportsTargets(e, out);
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
if (exports && typeof exports === 'object') {
|
|
326
|
+
for (const v of Object.values(exports)) {
|
|
327
|
+
collectExportsTargets(v, out);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Pure: expand declared entry paths (package.json `main`/`module`/`types`/
|
|
333
|
+
* `bin`/`exports` targets) into their absolute paths plus every sibling facade.
|
|
334
|
+
* `main: knex.js` expands to `knex.js`, `knex.mjs`, `knex.cjs`, `knex.d.mts`,
|
|
335
|
+
* … so the ESM/types facades that no in-tree import reaches are still counted
|
|
336
|
+
* as live. Each declared path is resolved against `projectRoot`; `./`-prefixed
|
|
337
|
+
* and extensionless entries resolve the same way.
|
|
338
|
+
*/
|
|
339
|
+
export function expandEntryPointFacades(declared, projectRoot) {
|
|
340
|
+
const entryPaths = new Set();
|
|
341
|
+
for (const d of declared) {
|
|
342
|
+
const resolved = normalizePath(path.resolve(projectRoot, d));
|
|
343
|
+
entryPaths.add(resolved);
|
|
344
|
+
const stem = stripFacadeExt(resolved);
|
|
345
|
+
for (const ext of FACADE_EXTS)
|
|
346
|
+
entryPaths.add(stem + ext);
|
|
347
|
+
}
|
|
348
|
+
return entryPaths;
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Read a package's declared entry points from package.json and expand each into
|
|
352
|
+
* its sibling facades. A file reachable only through the package manifest is an
|
|
353
|
+
* entry point, not dead code — the filename heuristic (`clIsEntryPointFile`)
|
|
354
|
+
* covers `app`/`route`/`page`/`index` but not `knex.mjs` / `knex.d.mts`, so a
|
|
355
|
+
* published library's facades were being flagged `unreferenced-module`.
|
|
356
|
+
*
|
|
357
|
+
* Malformed or absent package.json yields an empty set (same failure mode as
|
|
358
|
+
* `readTsconfigAliases`).
|
|
359
|
+
*/
|
|
360
|
+
export function readPackageEntryPoints(projectRoot) {
|
|
361
|
+
let raw;
|
|
362
|
+
try {
|
|
363
|
+
raw = fs.readFileSync(path.resolve(projectRoot, 'package.json'), 'utf-8');
|
|
364
|
+
}
|
|
365
|
+
catch {
|
|
366
|
+
return { entryPaths: [], hasPackageJson: false };
|
|
367
|
+
}
|
|
368
|
+
let parsed;
|
|
369
|
+
try {
|
|
370
|
+
parsed = JSON.parse(stripJsonComments(raw));
|
|
371
|
+
}
|
|
372
|
+
catch {
|
|
373
|
+
return { entryPaths: [], hasPackageJson: false };
|
|
374
|
+
}
|
|
375
|
+
const declared = [];
|
|
376
|
+
for (const key of ['main', 'module', 'types', 'typings']) {
|
|
377
|
+
const v = parsed[key];
|
|
378
|
+
if (typeof v === 'string')
|
|
379
|
+
declared.push(v);
|
|
380
|
+
}
|
|
381
|
+
const bin = parsed.bin;
|
|
382
|
+
if (typeof bin === 'string')
|
|
383
|
+
declared.push(bin);
|
|
384
|
+
else if (bin && typeof bin === 'object' && !Array.isArray(bin)) {
|
|
385
|
+
for (const v of Object.values(bin)) {
|
|
386
|
+
if (typeof v === 'string')
|
|
387
|
+
declared.push(v);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
collectExportsTargets(parsed.exports, declared);
|
|
391
|
+
return { entryPaths: [...expandEntryPointFacades(declared, projectRoot)], hasPackageJson: true };
|
|
392
|
+
}
|
|
393
|
+
//# sourceMappingURL=importClassification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importClassification.js","sourceRoot":"","sources":["../../src/graph/importClassification.ts"],"names":[],"mappings":"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"}
|
|
@@ -60,6 +60,7 @@ export declare function basenameNoExt(fp: string): string;
|
|
|
60
60
|
* 4. Basename matching
|
|
61
61
|
*/
|
|
62
62
|
export declare function resolveDependency(dep: string, filePaths: Set<string>, moduleToFile: Map<string, Set<string>>, sourceFile: string): string[];
|
|
63
|
+
export declare function normalizePath(p: string): string;
|
|
63
64
|
/**
|
|
64
65
|
* Populate `graph_cache` with import graph edges.
|
|
65
66
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importGraph.d.ts","sourceRoot":"","sources":["../../src/graph/importGraph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAIhE,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,yCAAyC;IACzC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,iBAAiB,EAAE,eAAe,EAAE,CAAC;IACrC,eAAe,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC3F,eAAe,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxF,cAAc,EAAE,MAAM,CAAC;CACxB;AAID;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,cAAc,GAAG,WAAW,CAwEhE;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAKhD;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EACtB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EACtC,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CA8DV;
|
|
1
|
+
{"version":3,"file":"importGraph.d.ts","sourceRoot":"","sources":["../../src/graph/importGraph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAIhE,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,yCAAyC;IACzC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,iBAAiB,EAAE,eAAe,EAAE,CAAC;IACrC,eAAe,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC3F,eAAe,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxF,cAAc,EAAE,MAAM,CAAC;CACxB;AAID;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,cAAc,GAAG,WAAW,CAwEhE;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAKhD;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EACtB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EACtC,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CA8DV;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAmB/C;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,CAkBjE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,cAAc,GAAG,WAAW,CAgBzE;AAID;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC3C,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GACrB,eAAe,CAgMjB;AAoCD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GACrB,YAAY,CA6Fd;AAUD;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,cAAc,EAClB,WAAW,EAAE,WAAW,GACvB,WAAW,EAAE,CA4Gf"}
|
|
@@ -150,7 +150,7 @@ export function resolveDependency(dep, filePaths, moduleToFile, sourceFile) {
|
|
|
150
150
|
}
|
|
151
151
|
return results;
|
|
152
152
|
}
|
|
153
|
-
function normalizePath(p) {
|
|
153
|
+
export function normalizePath(p) {
|
|
154
154
|
// Preserve a leading slash so absolute paths survive normalization. Dropping
|
|
155
155
|
// the empty first segment (the root) here was silently turning
|
|
156
156
|
// `/abs/src/db` into `abs/src/db`, which then never matched the absolute
|