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.
Files changed (358) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +197 -0
  3. package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.d.ts.map +1 -1
  4. package/dist/__tests__/fixtures/spec-52/item-05-upsert-forms.d.ts +4 -4
  5. package/dist/__tests__/fixtures/spec-52/item-05-upsert-forms.d.ts.map +1 -1
  6. package/dist/analyzers/analyzerUtils.d.ts.map +1 -1
  7. package/dist/analyzers/analyzerUtils.js +2 -2
  8. package/dist/analyzers/analyzerUtils.js.map +1 -1
  9. package/dist/analyzers/applicability.d.ts.map +1 -1
  10. package/dist/analyzers/applicability.js +1 -0
  11. package/dist/analyzers/applicability.js.map +1 -1
  12. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
  13. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +1 -1
  14. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
  15. package/dist/analyzers/cross-language/DependencyGraphBuilder.js +3 -3
  16. package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
  17. package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
  18. package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
  19. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +2 -2
  20. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -1
  21. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +62 -17
  22. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
  23. package/dist/analyzers/documentationAnalyzer.d.ts.map +1 -1
  24. package/dist/analyzers/documentationAnalyzer.js +14 -16
  25. package/dist/analyzers/documentationAnalyzer.js.map +1 -1
  26. package/dist/analyzers/invariantsAnalyzer.d.ts.map +1 -1
  27. package/dist/analyzers/invariantsAnalyzer.js +30 -25
  28. package/dist/analyzers/invariantsAnalyzer.js.map +1 -1
  29. package/dist/analyzers/orm/adapterRegistry.d.ts.map +1 -1
  30. package/dist/analyzers/orm/drizzleAdapter.d.ts.map +1 -1
  31. package/dist/analyzers/orm/prismaAdapter.d.ts.map +1 -1
  32. package/dist/analyzers/provenance.d.ts +10 -1
  33. package/dist/analyzers/provenance.d.ts.map +1 -1
  34. package/dist/analyzers/provenance.js +138 -1
  35. package/dist/analyzers/provenance.js.map +1 -1
  36. package/dist/analyzers/reactAnalyzer.d.ts +1 -1
  37. package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
  38. package/dist/analyzers/reactAnalyzer.js +34 -116
  39. package/dist/analyzers/reactAnalyzer.js.map +1 -1
  40. package/dist/analyzers/ruleRegistry.d.ts +5 -3
  41. package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
  42. package/dist/analyzers/ruleRegistry.js +199 -55
  43. package/dist/analyzers/ruleRegistry.js.map +1 -1
  44. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts +2 -2
  45. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -1
  46. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +10 -17
  47. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -1
  48. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +6 -6
  49. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
  50. package/dist/analyzers/universal/UniversalDRYAnalyzer.js +13 -13
  51. package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
  52. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
  53. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +266 -101
  54. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
  55. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +3 -2
  56. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
  57. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +14 -13
  58. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
  59. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
  60. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +11 -11
  61. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
  62. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +1 -1
  63. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
  64. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +19 -7
  65. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
  66. package/dist/analyzers/universal/UniversalSecretsAnalyzer.d.ts.map +1 -1
  67. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +2 -2
  68. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
  69. package/dist/analyzers/universal/UniversalStylesAnalyzer.js +93 -46
  70. package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
  71. package/dist/analyzers/universal/schema/codeAnalysis.d.ts +58 -34
  72. package/dist/analyzers/universal/schema/codeAnalysis.d.ts.map +1 -1
  73. package/dist/analyzers/universal/schema/codeAnalysis.js +239 -97
  74. package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -1
  75. package/dist/analyzers/universal/schema/config.d.ts +6 -6
  76. package/dist/analyzers/universal/schema/config.d.ts.map +1 -1
  77. package/dist/analyzers/universal/schema/jsonSchema.js +1 -1
  78. package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -1
  79. package/dist/analyzers/universal/schema/types.d.ts +10 -0
  80. package/dist/analyzers/universal/schema/types.d.ts.map +1 -1
  81. package/dist/analyzers/universal/schema/violations.d.ts +1 -1
  82. package/dist/analyzers/universal/schema/violations.d.ts.map +1 -1
  83. package/dist/auditRouter.js +7 -7
  84. package/dist/auditRouter.js.map +1 -1
  85. package/dist/auditRunner.d.ts +1 -1
  86. package/dist/auditRunner.d.ts.map +1 -1
  87. package/dist/auditRunner.js +53 -8
  88. package/dist/auditRunner.js.map +1 -1
  89. package/dist/churn/churnExtractor.js.map +1 -1
  90. package/dist/cli.js +52 -24
  91. package/dist/cli.js.map +1 -1
  92. package/dist/codeIndexDB.d.ts +1 -1
  93. package/dist/codeIndexDB.d.ts.map +1 -1
  94. package/dist/codeIndexDB.js +164 -18
  95. package/dist/codeIndexDB.js.map +1 -1
  96. package/dist/codeIndexService.d.ts.map +1 -1
  97. package/dist/codeIndexService.js.map +1 -1
  98. package/dist/componentScanner.d.ts.map +1 -1
  99. package/dist/componentScanner.js +89 -28
  100. package/dist/componentScanner.js.map +1 -1
  101. package/dist/config/configLoader.js +1 -1
  102. package/dist/config/configLoader.js.map +1 -1
  103. package/dist/config/defaults.d.ts +2 -2
  104. package/dist/config/defaults.d.ts.map +1 -1
  105. package/dist/config/defaults.js +10 -3
  106. package/dist/config/defaults.js.map +1 -1
  107. package/dist/constants.d.ts +1 -1
  108. package/dist/constants.d.ts.map +1 -1
  109. package/dist/conventions/conventionMiner.d.ts.map +1 -1
  110. package/dist/conventions/conventionMiner.js +3 -10
  111. package/dist/conventions/conventionMiner.js.map +1 -1
  112. package/dist/coverage/lcovParser.js.map +1 -1
  113. package/dist/daemon/args.js.map +1 -1
  114. package/dist/daemon/core.d.ts.map +1 -1
  115. package/dist/daemon/core.js +50 -46
  116. package/dist/daemon/core.js.map +1 -1
  117. package/dist/daemon/lspServer.d.ts.map +1 -1
  118. package/dist/daemon/lspServer.js +1 -1
  119. package/dist/daemon/lspServer.js.map +1 -1
  120. package/dist/daemon/main.d.ts.map +1 -1
  121. package/dist/daemon/main.js +14 -4
  122. package/dist/daemon/main.js.map +1 -1
  123. package/dist/daemon/resolve.js.map +1 -1
  124. package/dist/daemon/socketServer.d.ts.map +1 -1
  125. package/dist/enforcement/gate.js +2 -2
  126. package/dist/functionScanner.d.ts.map +1 -1
  127. package/dist/functionScanner.js +47 -42
  128. package/dist/functionScanner.js.map +1 -1
  129. package/dist/generators/AWSQConfigGenerator.d.ts.map +1 -1
  130. package/dist/generators/AiderConfigGenerator.d.ts.map +1 -1
  131. package/dist/generators/BaseConfigGenerator.d.ts.map +1 -1
  132. package/dist/generators/BaseConfigGenerator.js.map +1 -1
  133. package/dist/generators/ClaudeConfigGenerator.d.ts.map +1 -1
  134. package/dist/generators/ClineConfigGenerator.d.ts.map +1 -1
  135. package/dist/generators/CodeiumConfigGenerator.d.ts.map +1 -1
  136. package/dist/generators/CodexConfigGenerator.d.ts.map +1 -1
  137. package/dist/generators/ConfigGeneratorFactory.d.ts.map +1 -1
  138. package/dist/generators/ConfigGeneratorFactory.js.map +1 -1
  139. package/dist/generators/ContinueConfigGenerator.d.ts.map +1 -1
  140. package/dist/generators/CopilotConfigGenerator.d.ts.map +1 -1
  141. package/dist/generators/CursorConfigGenerator.d.ts.map +1 -1
  142. package/dist/generators/GeminiConfigGenerator.d.ts.map +1 -1
  143. package/dist/generators/JetBrainsConfigGenerator.d.ts.map +1 -1
  144. package/dist/generators/VSCodeConfigGenerator.d.ts.map +1 -1
  145. package/dist/generators/ZCodeConfigGenerator.d.ts.map +1 -1
  146. package/dist/graph/importClassification.d.ts +114 -0
  147. package/dist/graph/importClassification.d.ts.map +1 -0
  148. package/dist/graph/importClassification.js +393 -0
  149. package/dist/graph/importClassification.js.map +1 -0
  150. package/dist/graph/importGraph.d.ts +1 -0
  151. package/dist/graph/importGraph.d.ts.map +1 -1
  152. package/dist/graph/importGraph.js +1 -1
  153. package/dist/graph/importGraph.js.map +1 -1
  154. package/dist/graph/outputFormatter.js.map +1 -1
  155. package/dist/hooks/codex.d.ts.map +1 -1
  156. package/dist/hooks/codex.js +1 -1
  157. package/dist/hooks/codex.js.map +1 -1
  158. package/dist/hooks/core.d.ts +1 -1
  159. package/dist/hooks/core.d.ts.map +1 -1
  160. package/dist/hooks/core.js +4 -4
  161. package/dist/hooks/core.js.map +1 -1
  162. package/dist/hooks/cursor.d.ts.map +1 -1
  163. package/dist/hooks/cursor.js +2 -2
  164. package/dist/hooks/cursor.js.map +1 -1
  165. package/dist/index.d.ts +1 -1
  166. package/dist/index.d.ts.map +1 -1
  167. package/dist/index.js.map +1 -1
  168. package/dist/installer.d.ts +13 -7
  169. package/dist/installer.d.ts.map +1 -1
  170. package/dist/installer.js +25 -15
  171. package/dist/installer.js.map +1 -1
  172. package/dist/invariants/invariant-rules.schema.json +1 -1
  173. package/dist/invariants/ruleEngine.js.map +1 -1
  174. package/dist/invariants/ruleValidator.js +1 -1
  175. package/dist/invariants/ruleValidator.js.map +1 -1
  176. package/dist/invariants/types.d.ts +1 -1
  177. package/dist/invariants/types.d.ts.map +1 -1
  178. package/dist/languages/LanguageOrchestrator.d.ts +3 -2
  179. package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
  180. package/dist/languages/LanguageOrchestrator.js +1 -1
  181. package/dist/languages/LanguageOrchestrator.js.map +1 -1
  182. package/dist/languages/LanguageRegistry.d.ts.map +1 -1
  183. package/dist/languages/RuntimeManager.d.ts +20 -11
  184. package/dist/languages/RuntimeManager.d.ts.map +1 -1
  185. package/dist/languages/RuntimeManager.js +151 -51
  186. package/dist/languages/RuntimeManager.js.map +1 -1
  187. package/dist/languages/UniversalAnalyzer.d.ts.map +1 -1
  188. package/dist/languages/UniversalAnalyzer.js.map +1 -1
  189. package/dist/languages/adapterBridge.d.ts +10 -0
  190. package/dist/languages/adapterBridge.d.ts.map +1 -1
  191. package/dist/languages/adapterBridge.js +30 -7
  192. package/dist/languages/adapterBridge.js.map +1 -1
  193. package/dist/languages/go/GoAdapter.d.ts +1 -19
  194. package/dist/languages/go/GoAdapter.d.ts.map +1 -1
  195. package/dist/languages/go/GoAdapter.js +33 -116
  196. package/dist/languages/go/GoAdapter.js.map +1 -1
  197. package/dist/languages/go/analyzer +0 -0
  198. package/dist/languages/go/analyzer-src/analyzer.go +8 -8
  199. package/dist/languages/go/analyzer-src/solid.go +5 -5
  200. package/dist/languages/goBinary.d.ts +46 -0
  201. package/dist/languages/goBinary.d.ts.map +1 -0
  202. package/dist/languages/goBinary.js +169 -0
  203. package/dist/languages/goBinary.js.map +1 -0
  204. package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts +1 -28
  205. package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts.map +1 -1
  206. package/dist/languages/tree-sitter/TreeSitterCssAdapter.js +3 -42
  207. package/dist/languages/tree-sitter/TreeSitterCssAdapter.js.map +1 -1
  208. package/dist/languages/tree-sitter/converter.d.ts.map +1 -1
  209. package/dist/languages/tree-sitter/converter.js +2 -1
  210. package/dist/languages/tree-sitter/converter.js.map +1 -1
  211. package/dist/languages/tree-sitter/parser.js.map +1 -1
  212. package/dist/languages/tree-sitter/rawNode.d.ts +31 -0
  213. package/dist/languages/tree-sitter/rawNode.d.ts.map +1 -0
  214. package/dist/languages/tree-sitter/rawNode.js +38 -0
  215. package/dist/languages/tree-sitter/rawNode.js.map +1 -0
  216. package/dist/languages/types.d.ts +15 -21
  217. package/dist/languages/types.d.ts.map +1 -1
  218. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +12 -32
  219. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
  220. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +103 -203
  221. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
  222. package/dist/ledger.d.ts +3 -0
  223. package/dist/ledger.d.ts.map +1 -1
  224. package/dist/ledger.js +45 -9
  225. package/dist/ledger.js.map +1 -1
  226. package/dist/mcp-tools/projectTasks.d.ts +37 -37
  227. package/dist/mcp-tools/projectTasks.js +2 -2
  228. package/dist/mcp-tools/projectTasks.js.map +1 -1
  229. package/dist/mcp-tools/whitelistTools.d.ts +17 -17
  230. package/dist/mcp-tools/whitelistTools.d.ts.map +1 -1
  231. package/dist/mcp-tools/workflowGuide.js +3 -3
  232. package/dist/mcp-tools/workflowGuide.js.map +1 -1
  233. package/dist/mcp-tools-shared.d.ts.map +1 -1
  234. package/dist/mcp-tools-shared.js +13 -13
  235. package/dist/mcp-tools-shared.js.map +1 -1
  236. package/dist/mcp-ui-simple.js +7 -7
  237. package/dist/mcp-ui-simple.js.map +1 -1
  238. package/dist/mcp.js +14 -14
  239. package/dist/mcp.js.map +1 -1
  240. package/dist/mcpAuditJobs.js +7 -7
  241. package/dist/mcpAuditJobs.js.map +1 -1
  242. package/dist/mcpAutoIndex.js +1 -1
  243. package/dist/mcpAutoIndex.js.map +1 -1
  244. package/dist/mcpToolErrors.d.ts.map +1 -1
  245. package/dist/mcpToolErrors.js.map +1 -1
  246. package/dist/native-bootstrap.js.map +1 -1
  247. package/dist/nextFile.d.ts +2 -2
  248. package/dist/nextFile.d.ts.map +1 -1
  249. package/dist/nextFile.js +19 -5
  250. package/dist/nextFile.js.map +1 -1
  251. package/dist/nextFileIncremental.d.ts +10 -2
  252. package/dist/nextFileIncremental.d.ts.map +1 -1
  253. package/dist/nextFileIncremental.js +45 -16
  254. package/dist/nextFileIncremental.js.map +1 -1
  255. package/dist/pipeline.d.ts +2 -2
  256. package/dist/pipeline.d.ts.map +1 -1
  257. package/dist/pipeline.js +35 -0
  258. package/dist/pipeline.js.map +1 -1
  259. package/dist/pipelineAdapters.d.ts +17 -0
  260. package/dist/pipelineAdapters.d.ts.map +1 -1
  261. package/dist/pipelineAdapters.js +356 -197
  262. package/dist/pipelineAdapters.js.map +1 -1
  263. package/dist/reporting/csvReportGenerator.d.ts.map +1 -1
  264. package/dist/reporting/csvReportGenerator.js +6 -6
  265. package/dist/reporting/csvReportGenerator.js.map +1 -1
  266. package/dist/reporting/htmlReportGenerator.d.ts.map +1 -1
  267. package/dist/reporting/htmlReportGenerator.js +11 -11
  268. package/dist/reporting/htmlReportGenerator.js.map +1 -1
  269. package/dist/reporting/jsonReportGenerator.d.ts.map +1 -1
  270. package/dist/reporting/jsonReportGenerator.js +2 -2
  271. package/dist/reporting/jsonReportGenerator.js.map +1 -1
  272. package/dist/reporting/reportGenerator.d.ts.map +1 -1
  273. package/dist/reporting/sarifReportGenerator.d.ts.map +1 -1
  274. package/dist/reporting/sarifReportGenerator.js +1 -1
  275. package/dist/reporting/sarifReportGenerator.js.map +1 -1
  276. package/dist/scripts/benchmarkWorkers.js +1 -1
  277. package/dist/scripts/benchmarkWorkers.js.map +1 -1
  278. package/dist/search/QueryParser.d.ts.map +1 -1
  279. package/dist/search/QueryParser.js.map +1 -1
  280. package/dist/services/CodeMapGenerator.d.ts.map +1 -1
  281. package/dist/services/CodeMapGenerator.js.map +1 -1
  282. package/dist/services/ProjectTaskRepository.d.ts.map +1 -1
  283. package/dist/services/ProjectTaskRepository.js.map +1 -1
  284. package/dist/services/auditJobService.js.map +1 -1
  285. package/dist/services/fileAccounting.d.ts.map +1 -1
  286. package/dist/services/projectTaskHelpers.js.map +1 -1
  287. package/dist/services/whitelistService.d.ts.map +1 -1
  288. package/dist/sqlite/betterSqlite3.d.ts.map +1 -1
  289. package/dist/sqlite/betterSqlite3.js.map +1 -1
  290. package/dist/sqlite/nodeSqlite.d.ts.map +1 -1
  291. package/dist/sqlite/nodeSqlite.js.map +1 -1
  292. package/dist/structuralSignature.js.map +1 -1
  293. package/dist/styles/cssAstExtractor.d.ts +2 -2
  294. package/dist/styles/cssAstExtractor.d.ts.map +1 -1
  295. package/dist/styles/cssAstExtractor.js +67 -111
  296. package/dist/styles/cssAstExtractor.js.map +1 -1
  297. package/dist/styles/styleExtractor.js.map +1 -1
  298. package/dist/styles/styleIndexer.d.ts.map +1 -1
  299. package/dist/styles/styleIndexer.js +19 -6
  300. package/dist/styles/styleIndexer.js.map +1 -1
  301. package/dist/styles/tailwindConfigLoader.js.map +1 -1
  302. package/dist/styles/tailwindProbe.d.ts.map +1 -1
  303. package/dist/styles/tailwindUtilityExpander.d.ts.map +1 -1
  304. package/dist/styles/tailwindUtilityExpander.js.map +1 -1
  305. package/dist/telemetry.d.ts +1 -1
  306. package/dist/telemetry.d.ts.map +1 -1
  307. package/dist/telemetry.js.map +1 -1
  308. package/dist/tool-registry.d.ts.map +1 -1
  309. package/dist/types/crossLanguage.d.ts +1 -1
  310. package/dist/types/crossLanguage.d.ts.map +1 -1
  311. package/dist/types.d.ts +67 -19
  312. package/dist/types.d.ts.map +1 -1
  313. package/dist/types.js +6 -5
  314. package/dist/types.js.map +1 -1
  315. package/dist/ui/InteractivePrompts.d.ts.map +1 -1
  316. package/dist/ui/InteractivePrompts.js.map +1 -1
  317. package/dist/utils/astParser.d.ts +1 -17
  318. package/dist/utils/astParser.d.ts.map +1 -1
  319. package/dist/utils/astParser.js +18 -60
  320. package/dist/utils/astParser.js.map +1 -1
  321. package/dist/utils/astUtils.d.ts +12 -12
  322. package/dist/utils/astUtils.d.ts.map +1 -1
  323. package/dist/utils/astUtils.js +83 -82
  324. package/dist/utils/astUtils.js.map +1 -1
  325. package/dist/utils/componentPatterns.js.map +1 -1
  326. package/dist/utils/componentResponsibility.d.ts +8 -8
  327. package/dist/utils/componentResponsibility.d.ts.map +1 -1
  328. package/dist/utils/componentResponsibility.js +33 -38
  329. package/dist/utils/componentResponsibility.js.map +1 -1
  330. package/dist/utils/dependencyExtractor.d.ts +3 -3
  331. package/dist/utils/dependencyExtractor.d.ts.map +1 -1
  332. package/dist/utils/dependencyExtractor.js +26 -30
  333. package/dist/utils/dependencyExtractor.js.map +1 -1
  334. package/dist/utils/fileDiscovery.d.ts.map +1 -1
  335. package/dist/utils/fileDiscovery.js +65 -0
  336. package/dist/utils/fileDiscovery.js.map +1 -1
  337. package/dist/utils/jsDocParser.d.ts +6 -6
  338. package/dist/utils/jsDocParser.d.ts.map +1 -1
  339. package/dist/utils/jsDocParser.js +18 -21
  340. package/dist/utils/jsDocParser.js.map +1 -1
  341. package/dist/utils/reactDetection.d.ts +7 -7
  342. package/dist/utils/reactDetection.d.ts.map +1 -1
  343. package/dist/utils/reactDetection.js +42 -49
  344. package/dist/utils/reactDetection.js.map +1 -1
  345. package/dist/version.generated.d.ts +1 -1
  346. package/dist/version.generated.d.ts.map +1 -1
  347. package/dist/version.generated.js +1 -1
  348. package/dist/version.generated.js.map +1 -1
  349. package/dist/workers/auditWorker.js.map +1 -1
  350. package/package.json +4 -3
  351. package/plugin/.claude-plugin/plugin.json +1 -1
  352. package/plugin/README.md +5 -4
  353. package/plugin/hooks/hooks.json +11 -0
  354. package/plugin/scripts/hook-common.sh +85 -31
  355. package/plugin/scripts/hook-warm.sh +44 -0
  356. package/plugin/skills/code-auditor/SKILL-RULE-KINDS.md +28 -21
  357. package/plugin/skills/code-auditor/SKILL.md +10 -10
  358. 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;AAuBD;;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"}
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