code-auditor-mcp 4.1.1 → 5.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 (1082) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +338 -0
  3. package/README.md +4 -4
  4. package/configs/hhra-compat.json +0 -8
  5. package/dist/__tests__/fixtures/spec-52/item-03-exec-in-loop.d.ts +1 -1
  6. package/dist/__tests__/fixtures/spec-52/item-03-exec-in-loop.d.ts.map +1 -1
  7. package/dist/__tests__/fixtures/spec-52/item-03-exec-in-loop.js +7 -1
  8. package/dist/__tests__/fixtures/spec-52/item-03-exec-in-loop.js.map +1 -1
  9. package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.d.ts +2 -8
  10. package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.d.ts.map +1 -1
  11. package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.js +4 -4
  12. package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.js.map +1 -1
  13. package/dist/__tests__/fixtures/spec-52/item-06-chained-prepare-run-in-loop.d.ts +1 -1
  14. package/dist/__tests__/fixtures/spec-52/item-06-chained-prepare-run-in-loop.d.ts.map +1 -1
  15. package/dist/__tests__/fixtures/spec-52/item-06-chained-prepare-run-in-loop.js.map +1 -1
  16. package/dist/__tests__/fixtures/spec-52/item-07-chained-prepare-bind-first-in-loop.d.ts +2 -2
  17. package/dist/__tests__/fixtures/spec-52/item-07-chained-prepare-bind-first-in-loop.d.ts.map +1 -1
  18. package/dist/__tests__/fixtures/spec-52/item-07-chained-prepare-bind-first-in-loop.js.map +1 -1
  19. package/dist/__tests__/fixtures/spec-52/item-10-promise-all-map-of-eager-all-in-loop.d.ts +1 -1
  20. package/dist/__tests__/fixtures/spec-52/item-10-promise-all-map-of-eager-all-in-loop.d.ts.map +1 -1
  21. package/dist/__tests__/fixtures/spec-52/item-10-promise-all-map-of-eager-all-in-loop.js.map +1 -1
  22. package/dist/analyzers/applicability.d.ts +42 -0
  23. package/dist/analyzers/applicability.d.ts.map +1 -1
  24. package/dist/analyzers/applicability.js +74 -0
  25. package/dist/analyzers/applicability.js.map +1 -1
  26. package/dist/analyzers/cross-language/APIContractAnalyzer.js +18 -24
  27. package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -1
  28. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +30 -23
  29. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
  30. package/dist/analyzers/cross-language/DependencyGraphBuilder.js +113 -76
  31. package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
  32. package/dist/analyzers/cross-language/SchemaValidator.d.ts +2 -0
  33. package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
  34. package/dist/analyzers/cross-language/SchemaValidator.js +8 -3
  35. package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
  36. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -1
  37. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +210 -148
  38. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
  39. package/dist/analyzers/documentationAnalyzer.d.ts.map +1 -1
  40. package/dist/analyzers/documentationAnalyzer.js +23 -28
  41. package/dist/analyzers/documentationAnalyzer.js.map +1 -1
  42. package/dist/analyzers/handleIdentification.d.ts +356 -0
  43. package/dist/analyzers/handleIdentification.d.ts.map +1 -0
  44. package/dist/analyzers/handleIdentification.js +424 -0
  45. package/dist/analyzers/handleIdentification.js.map +1 -0
  46. package/dist/analyzers/manifestStaleness.d.ts +64 -0
  47. package/dist/analyzers/manifestStaleness.d.ts.map +1 -0
  48. package/dist/analyzers/manifestStaleness.js +115 -0
  49. package/dist/analyzers/manifestStaleness.js.map +1 -0
  50. package/dist/analyzers/orgFilterTiers.d.ts +73 -1
  51. package/dist/analyzers/orgFilterTiers.d.ts.map +1 -1
  52. package/dist/analyzers/orgFilterTiers.js +166 -1
  53. package/dist/analyzers/orgFilterTiers.js.map +1 -1
  54. package/dist/analyzers/provenance.d.ts +251 -57
  55. package/dist/analyzers/provenance.d.ts.map +1 -1
  56. package/dist/analyzers/provenance.js +1109 -429
  57. package/dist/analyzers/provenance.js.map +1 -1
  58. package/dist/analyzers/reactAnalyzer.d.ts +2 -0
  59. package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
  60. package/dist/analyzers/reactAnalyzer.js +2 -0
  61. package/dist/analyzers/reactAnalyzer.js.map +1 -1
  62. package/dist/analyzers/receiverResolution.d.ts +183 -0
  63. package/dist/analyzers/receiverResolution.d.ts.map +1 -0
  64. package/dist/analyzers/receiverResolution.js +540 -0
  65. package/dist/analyzers/receiverResolution.js.map +1 -0
  66. package/dist/analyzers/receiverRoot.d.ts +328 -0
  67. package/dist/analyzers/receiverRoot.d.ts.map +1 -0
  68. package/dist/analyzers/receiverRoot.js +990 -0
  69. package/dist/analyzers/receiverRoot.js.map +1 -0
  70. package/dist/analyzers/ruleRegistry.d.ts +12 -68
  71. package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
  72. package/dist/analyzers/ruleRegistry.js +32 -342
  73. package/dist/analyzers/ruleRegistry.js.map +1 -1
  74. package/dist/analyzers/ruleTiming.d.ts +10 -0
  75. package/dist/analyzers/ruleTiming.d.ts.map +1 -1
  76. package/dist/analyzers/ruleTiming.js +20 -0
  77. package/dist/analyzers/ruleTiming.js.map +1 -1
  78. package/dist/analyzers/sqlLiteral.d.ts +76 -0
  79. package/dist/analyzers/sqlLiteral.d.ts.map +1 -0
  80. package/dist/analyzers/sqlLiteral.js +419 -0
  81. package/dist/analyzers/sqlLiteral.js.map +1 -0
  82. package/dist/analyzers/tsEcosystem.d.ts +115 -0
  83. package/dist/analyzers/tsEcosystem.d.ts.map +1 -0
  84. package/dist/analyzers/tsEcosystem.js +231 -0
  85. package/dist/analyzers/tsEcosystem.js.map +1 -0
  86. package/dist/analyzers/tsExpressionDescriptor.d.ts +156 -0
  87. package/dist/analyzers/tsExpressionDescriptor.d.ts.map +1 -0
  88. package/dist/analyzers/tsExpressionDescriptor.js +374 -0
  89. package/dist/analyzers/tsExpressionDescriptor.js.map +1 -0
  90. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts +6 -0
  91. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -1
  92. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +107 -44
  93. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -1
  94. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
  95. package/dist/analyzers/universal/UniversalDRYAnalyzer.js +23 -35
  96. package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
  97. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +287 -49
  98. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
  99. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +2130 -512
  100. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
  101. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
  102. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +2 -18
  103. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
  104. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +0 -33
  105. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
  106. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +20 -143
  107. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
  108. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +4 -3
  109. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
  110. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +36 -13
  111. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
  112. package/dist/analyzers/universal/UniversalSecretsAnalyzer.d.ts.map +1 -1
  113. package/dist/analyzers/universal/UniversalSecretsAnalyzer.js +6 -0
  114. package/dist/analyzers/universal/UniversalSecretsAnalyzer.js.map +1 -1
  115. package/dist/analyzers/universal/UniversalSecurityAnalyzer.d.ts +15 -0
  116. package/dist/analyzers/universal/UniversalSecurityAnalyzer.d.ts.map +1 -1
  117. package/dist/analyzers/universal/UniversalSecurityAnalyzer.js +25 -0
  118. package/dist/analyzers/universal/UniversalSecurityAnalyzer.js.map +1 -1
  119. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +21 -32
  120. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
  121. package/dist/analyzers/universal/UniversalStylesAnalyzer.js +166 -196
  122. package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
  123. package/dist/analyzers/universal/functionConcerns.d.ts +3 -0
  124. package/dist/analyzers/universal/functionConcerns.d.ts.map +1 -1
  125. package/dist/analyzers/universal/functionConcerns.js +4 -1
  126. package/dist/analyzers/universal/functionConcerns.js.map +1 -1
  127. package/dist/analyzers/universal/schema/codeAnalysis.d.ts +310 -69
  128. package/dist/analyzers/universal/schema/codeAnalysis.d.ts.map +1 -1
  129. package/dist/analyzers/universal/schema/codeAnalysis.js +709 -383
  130. package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -1
  131. package/dist/analyzers/universal/schema/config.d.ts +3 -14
  132. package/dist/analyzers/universal/schema/config.d.ts.map +1 -1
  133. package/dist/analyzers/universal/schema/config.js +3 -16
  134. package/dist/analyzers/universal/schema/config.js.map +1 -1
  135. package/dist/analyzers/universal/schema/discovery.d.ts +22 -1
  136. package/dist/analyzers/universal/schema/discovery.d.ts.map +1 -1
  137. package/dist/analyzers/universal/schema/discovery.js +36 -20
  138. package/dist/analyzers/universal/schema/discovery.js.map +1 -1
  139. package/dist/analyzers/universal/schema/jsonSchema.d.ts.map +1 -1
  140. package/dist/analyzers/universal/schema/jsonSchema.js +13 -3
  141. package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -1
  142. package/dist/analyzers/universal/schema/migrations.d.ts +187 -27
  143. package/dist/analyzers/universal/schema/migrations.d.ts.map +1 -1
  144. package/dist/analyzers/universal/schema/migrations.js +443 -186
  145. package/dist/analyzers/universal/schema/migrations.js.map +1 -1
  146. package/dist/analyzers/universal/schema/types.d.ts +17 -3
  147. package/dist/analyzers/universal/schema/types.d.ts.map +1 -1
  148. package/dist/analyzers/universal/schema/violations.js +1 -1
  149. package/dist/analyzers/universal/schema/violations.js.map +1 -1
  150. package/dist/analyzers/universal/styleScale.d.ts +52 -0
  151. package/dist/analyzers/universal/styleScale.d.ts.map +1 -0
  152. package/dist/analyzers/universal/styleScale.js +95 -0
  153. package/dist/analyzers/universal/styleScale.js.map +1 -0
  154. package/dist/applyDataDirEnv.js +1 -1
  155. package/dist/applyDataDirEnv.js.map +1 -1
  156. package/dist/auditRouter.d.ts +26 -30
  157. package/dist/auditRouter.d.ts.map +1 -1
  158. package/dist/auditRouter.js +373 -143
  159. package/dist/auditRouter.js.map +1 -1
  160. package/dist/auditRunner.d.ts +64 -1
  161. package/dist/auditRunner.d.ts.map +1 -1
  162. package/dist/auditRunner.js +1538 -1033
  163. package/dist/auditRunner.js.map +1 -1
  164. package/dist/baseline.d.ts +30 -3
  165. package/dist/baseline.d.ts.map +1 -1
  166. package/dist/baseline.js +70 -9
  167. package/dist/baseline.js.map +1 -1
  168. package/dist/cli.js +969 -821
  169. package/dist/cli.js.map +1 -1
  170. package/dist/codeIndex/analyzerConfig.d.ts +60 -0
  171. package/dist/codeIndex/analyzerConfig.d.ts.map +1 -0
  172. package/dist/codeIndex/analyzerConfig.js +98 -0
  173. package/dist/codeIndex/analyzerConfig.js.map +1 -0
  174. package/dist/codeIndex/auditResults.d.ts +39 -0
  175. package/dist/codeIndex/auditResults.d.ts.map +1 -0
  176. package/dist/codeIndex/auditResults.js +99 -0
  177. package/dist/codeIndex/auditResults.js.map +1 -0
  178. package/dist/codeIndex/codeMap.d.ts +59 -0
  179. package/dist/codeIndex/codeMap.d.ts.map +1 -0
  180. package/dist/codeIndex/codeMap.js +72 -0
  181. package/dist/codeIndex/codeMap.js.map +1 -0
  182. package/dist/codeIndex/conventions.d.ts +33 -0
  183. package/dist/codeIndex/conventions.d.ts.map +1 -0
  184. package/dist/codeIndex/conventions.js +84 -0
  185. package/dist/codeIndex/conventions.js.map +1 -0
  186. package/dist/codeIndex/coverage.d.ts +78 -0
  187. package/dist/codeIndex/coverage.d.ts.map +1 -0
  188. package/dist/codeIndex/coverage.js +164 -0
  189. package/dist/codeIndex/coverage.js.map +1 -0
  190. package/dist/codeIndex/dependencyGraph.d.ts +97 -0
  191. package/dist/codeIndex/dependencyGraph.d.ts.map +1 -0
  192. package/dist/codeIndex/dependencyGraph.js +241 -0
  193. package/dist/codeIndex/dependencyGraph.js.map +1 -0
  194. package/dist/codeIndex/functionIndex.d.ts +111 -0
  195. package/dist/codeIndex/functionIndex.d.ts.map +1 -0
  196. package/dist/codeIndex/functionIndex.js +306 -0
  197. package/dist/codeIndex/functionIndex.js.map +1 -0
  198. package/dist/codeIndex/inferredReceivers.d.ts +32 -0
  199. package/dist/codeIndex/inferredReceivers.d.ts.map +1 -0
  200. package/dist/codeIndex/inferredReceivers.js +41 -0
  201. package/dist/codeIndex/inferredReceivers.js.map +1 -0
  202. package/dist/codeIndex/meta.d.ts +30 -0
  203. package/dist/codeIndex/meta.d.ts.map +1 -0
  204. package/dist/codeIndex/meta.js +37 -0
  205. package/dist/codeIndex/meta.js.map +1 -0
  206. package/dist/codeIndex/migrations.d.ts +96 -0
  207. package/dist/codeIndex/migrations.d.ts.map +1 -0
  208. package/dist/codeIndex/migrations.js +1302 -0
  209. package/dist/codeIndex/migrations.js.map +1 -0
  210. package/dist/codeIndex/projectTasks.d.ts +54 -0
  211. package/dist/codeIndex/projectTasks.d.ts.map +1 -0
  212. package/dist/codeIndex/projectTasks.js +81 -0
  213. package/dist/codeIndex/projectTasks.js.map +1 -0
  214. package/dist/codeIndex/provenance.d.ts +47 -0
  215. package/dist/codeIndex/provenance.d.ts.map +1 -0
  216. package/dist/codeIndex/provenance.js +48 -0
  217. package/dist/codeIndex/provenance.js.map +1 -0
  218. package/dist/codeIndex/rawSql.d.ts +54 -0
  219. package/dist/codeIndex/rawSql.d.ts.map +1 -0
  220. package/dist/codeIndex/rawSql.js +71 -0
  221. package/dist/codeIndex/rawSql.js.map +1 -0
  222. package/dist/codeIndex/schema.d.ts +99 -0
  223. package/dist/codeIndex/schema.d.ts.map +1 -0
  224. package/dist/codeIndex/schema.js +174 -0
  225. package/dist/codeIndex/schema.js.map +1 -0
  226. package/dist/codeIndex/search.d.ts +40 -0
  227. package/dist/codeIndex/search.d.ts.map +1 -0
  228. package/dist/codeIndex/search.js +316 -0
  229. package/dist/codeIndex/search.js.map +1 -0
  230. package/dist/codeIndex/shared.d.ts +27 -0
  231. package/dist/codeIndex/shared.d.ts.map +1 -0
  232. package/dist/codeIndex/shared.js +46 -0
  233. package/dist/codeIndex/shared.js.map +1 -0
  234. package/dist/codeIndex/sqliteCollection.d.ts +81 -0
  235. package/dist/codeIndex/sqliteCollection.d.ts.map +1 -0
  236. package/dist/codeIndex/sqliteCollection.js +250 -0
  237. package/dist/codeIndex/sqliteCollection.js.map +1 -0
  238. package/dist/codeIndex/whitelist.d.ts +59 -0
  239. package/dist/codeIndex/whitelist.d.ts.map +1 -0
  240. package/dist/codeIndex/whitelist.js +188 -0
  241. package/dist/codeIndex/whitelist.js.map +1 -0
  242. package/dist/codeIndexDB.d.ts +132 -271
  243. package/dist/codeIndexDB.d.ts.map +1 -1
  244. package/dist/codeIndexDB.js +365 -2729
  245. package/dist/codeIndexDB.js.map +1 -1
  246. package/dist/codeIndexService.d.ts +87 -12
  247. package/dist/codeIndexService.d.ts.map +1 -1
  248. package/dist/codeIndexService.js +110 -34
  249. package/dist/codeIndexService.js.map +1 -1
  250. package/dist/componentScanner.d.ts +35 -0
  251. package/dist/componentScanner.d.ts.map +1 -1
  252. package/dist/componentScanner.js +114 -80
  253. package/dist/componentScanner.js.map +1 -1
  254. package/dist/config/configGeneratePath.d.ts +4 -0
  255. package/dist/config/configGeneratePath.d.ts.map +1 -1
  256. package/dist/config/configGeneratePath.js +4 -0
  257. package/dist/config/configGeneratePath.js.map +1 -1
  258. package/dist/config/configLoader.d.ts +15 -0
  259. package/dist/config/configLoader.d.ts.map +1 -1
  260. package/dist/config/configLoader.js +15 -16
  261. package/dist/config/configLoader.js.map +1 -1
  262. package/dist/config/defaults.d.ts +11 -7
  263. package/dist/config/defaults.d.ts.map +1 -1
  264. package/dist/config/defaults.js +16 -14
  265. package/dist/config/defaults.js.map +1 -1
  266. package/dist/config/effectiveConfig.d.ts +17 -2
  267. package/dist/config/effectiveConfig.d.ts.map +1 -1
  268. package/dist/config/effectiveConfig.js +32 -25
  269. package/dist/config/effectiveConfig.js.map +1 -1
  270. package/dist/config/lintConfigReader.d.ts +6 -0
  271. package/dist/config/lintConfigReader.d.ts.map +1 -1
  272. package/dist/config/lintConfigReader.js +6 -0
  273. package/dist/config/lintConfigReader.js.map +1 -1
  274. package/dist/config/staticObjectExtract.d.ts +4 -0
  275. package/dist/config/staticObjectExtract.d.ts.map +1 -1
  276. package/dist/config/staticObjectExtract.js +7 -3
  277. package/dist/config/staticObjectExtract.js.map +1 -1
  278. package/dist/config/thresholdRationales.d.ts +2 -0
  279. package/dist/config/thresholdRationales.d.ts.map +1 -1
  280. package/dist/config/thresholdRationales.js +5 -2
  281. package/dist/config/thresholdRationales.js.map +1 -1
  282. package/dist/constants.d.ts +1 -1
  283. package/dist/conventions/conventionMiner.d.ts +105 -2
  284. package/dist/conventions/conventionMiner.d.ts.map +1 -1
  285. package/dist/conventions/conventionMiner.js +334 -259
  286. package/dist/conventions/conventionMiner.js.map +1 -1
  287. package/dist/coverage/coverageService.js +4 -4
  288. package/dist/coverage/coverageService.js.map +1 -1
  289. package/dist/daemon/args.d.ts +3 -0
  290. package/dist/daemon/args.d.ts.map +1 -1
  291. package/dist/daemon/args.js +3 -0
  292. package/dist/daemon/args.js.map +1 -1
  293. package/dist/daemon/core.d.ts +33 -27
  294. package/dist/daemon/core.d.ts.map +1 -1
  295. package/dist/daemon/core.js +198 -162
  296. package/dist/daemon/core.js.map +1 -1
  297. package/dist/daemon/lspServer.d.ts +8 -0
  298. package/dist/daemon/lspServer.d.ts.map +1 -1
  299. package/dist/daemon/lspServer.js +8 -0
  300. package/dist/daemon/lspServer.js.map +1 -1
  301. package/dist/daemon/main.d.ts +2 -0
  302. package/dist/daemon/main.d.ts.map +1 -1
  303. package/dist/daemon/main.js +2 -0
  304. package/dist/daemon/main.js.map +1 -1
  305. package/dist/daemon/resolve.d.ts +18 -3
  306. package/dist/daemon/resolve.d.ts.map +1 -1
  307. package/dist/daemon/resolve.js +25 -4
  308. package/dist/daemon/resolve.js.map +1 -1
  309. package/dist/daemon/socketClient.d.ts +10 -1
  310. package/dist/daemon/socketClient.d.ts.map +1 -1
  311. package/dist/daemon/socketClient.js +10 -1
  312. package/dist/daemon/socketClient.js.map +1 -1
  313. package/dist/daemon/socketServer.d.ts +13 -0
  314. package/dist/daemon/socketServer.d.ts.map +1 -1
  315. package/dist/daemon/socketServer.js +13 -0
  316. package/dist/daemon/socketServer.js.map +1 -1
  317. package/dist/dataPaths.d.ts +17 -8
  318. package/dist/dataPaths.d.ts.map +1 -1
  319. package/dist/dataPaths.js +16 -44
  320. package/dist/dataPaths.js.map +1 -1
  321. package/dist/dismissals.d.ts +22 -1
  322. package/dist/dismissals.d.ts.map +1 -1
  323. package/dist/dismissals.js +22 -1
  324. package/dist/dismissals.js.map +1 -1
  325. package/dist/enforcement/gate.d.ts +1 -0
  326. package/dist/enforcement/gate.d.ts.map +1 -1
  327. package/dist/enforcement/gate.js +1 -0
  328. package/dist/enforcement/gate.js.map +1 -1
  329. package/dist/fingerprint.d.ts +6 -0
  330. package/dist/fingerprint.d.ts.map +1 -1
  331. package/dist/fingerprint.js +46 -1
  332. package/dist/fingerprint.js.map +1 -1
  333. package/dist/functionScanner.d.ts +30 -1
  334. package/dist/functionScanner.d.ts.map +1 -1
  335. package/dist/functionScanner.js +258 -256
  336. package/dist/functionScanner.js.map +1 -1
  337. package/dist/generators/AWSQConfigGenerator.d.ts +23 -0
  338. package/dist/generators/AWSQConfigGenerator.d.ts.map +1 -1
  339. package/dist/generators/AWSQConfigGenerator.js +23 -0
  340. package/dist/generators/AWSQConfigGenerator.js.map +1 -1
  341. package/dist/generators/BaseConfigGenerator.d.ts +7 -0
  342. package/dist/generators/BaseConfigGenerator.d.ts.map +1 -1
  343. package/dist/generators/BaseConfigGenerator.js +7 -0
  344. package/dist/generators/BaseConfigGenerator.js.map +1 -1
  345. package/dist/generators/ClaudeConfigGenerator.d.ts +23 -0
  346. package/dist/generators/ClaudeConfigGenerator.d.ts.map +1 -1
  347. package/dist/generators/ClaudeConfigGenerator.js +23 -0
  348. package/dist/generators/ClaudeConfigGenerator.js.map +1 -1
  349. package/dist/generators/ClineConfigGenerator.d.ts +23 -0
  350. package/dist/generators/ClineConfigGenerator.d.ts.map +1 -1
  351. package/dist/generators/ClineConfigGenerator.js +23 -0
  352. package/dist/generators/ClineConfigGenerator.js.map +1 -1
  353. package/dist/generators/CodeiumConfigGenerator.d.ts +23 -0
  354. package/dist/generators/CodeiumConfigGenerator.d.ts.map +1 -1
  355. package/dist/generators/CodeiumConfigGenerator.js +23 -0
  356. package/dist/generators/CodeiumConfigGenerator.js.map +1 -1
  357. package/dist/generators/CodexConfigGenerator.d.ts +23 -0
  358. package/dist/generators/CodexConfigGenerator.d.ts.map +1 -1
  359. package/dist/generators/CodexConfigGenerator.js +23 -0
  360. package/dist/generators/CodexConfigGenerator.js.map +1 -1
  361. package/dist/generators/ConfigGeneratorFactory.d.ts +9 -0
  362. package/dist/generators/ConfigGeneratorFactory.d.ts.map +1 -1
  363. package/dist/generators/ConfigGeneratorFactory.js +9 -0
  364. package/dist/generators/ConfigGeneratorFactory.js.map +1 -1
  365. package/dist/generators/ContinueConfigGenerator.d.ts +23 -0
  366. package/dist/generators/ContinueConfigGenerator.d.ts.map +1 -1
  367. package/dist/generators/ContinueConfigGenerator.js +23 -0
  368. package/dist/generators/ContinueConfigGenerator.js.map +1 -1
  369. package/dist/generators/CopilotConfigGenerator.d.ts +23 -0
  370. package/dist/generators/CopilotConfigGenerator.d.ts.map +1 -1
  371. package/dist/generators/CopilotConfigGenerator.js +23 -0
  372. package/dist/generators/CopilotConfigGenerator.js.map +1 -1
  373. package/dist/generators/CursorConfigGenerator.d.ts +23 -0
  374. package/dist/generators/CursorConfigGenerator.d.ts.map +1 -1
  375. package/dist/generators/CursorConfigGenerator.js +23 -0
  376. package/dist/generators/CursorConfigGenerator.js.map +1 -1
  377. package/dist/generators/GeminiConfigGenerator.d.ts +23 -0
  378. package/dist/generators/GeminiConfigGenerator.d.ts.map +1 -1
  379. package/dist/generators/GeminiConfigGenerator.js +23 -0
  380. package/dist/generators/GeminiConfigGenerator.js.map +1 -1
  381. package/dist/generators/VSCodeConfigGenerator.d.ts +23 -0
  382. package/dist/generators/VSCodeConfigGenerator.d.ts.map +1 -1
  383. package/dist/generators/VSCodeConfigGenerator.js +23 -0
  384. package/dist/generators/VSCodeConfigGenerator.js.map +1 -1
  385. package/dist/generators/ZCodeConfigGenerator.d.ts +23 -0
  386. package/dist/generators/ZCodeConfigGenerator.d.ts.map +1 -1
  387. package/dist/generators/ZCodeConfigGenerator.js +23 -0
  388. package/dist/generators/ZCodeConfigGenerator.js.map +1 -1
  389. package/dist/graph/blastRadius.d.ts.map +1 -1
  390. package/dist/graph/blastRadius.js +12 -7
  391. package/dist/graph/blastRadius.js.map +1 -1
  392. package/dist/graph/callGraph.d.ts +31 -0
  393. package/dist/graph/callGraph.d.ts.map +1 -1
  394. package/dist/graph/callGraph.js +62 -32
  395. package/dist/graph/callGraph.js.map +1 -1
  396. package/dist/graph/importClassification.d.ts +28 -0
  397. package/dist/graph/importClassification.d.ts.map +1 -1
  398. package/dist/graph/importClassification.js +57 -0
  399. package/dist/graph/importClassification.js.map +1 -1
  400. package/dist/graph/importGraph.d.ts +38 -0
  401. package/dist/graph/importGraph.d.ts.map +1 -1
  402. package/dist/graph/importGraph.js +38 -0
  403. package/dist/graph/importGraph.js.map +1 -1
  404. package/dist/graph/outputFormatter.d.ts +12 -4
  405. package/dist/graph/outputFormatter.d.ts.map +1 -1
  406. package/dist/graph/outputFormatter.js +12 -62
  407. package/dist/graph/outputFormatter.js.map +1 -1
  408. package/dist/hooks/codex.d.ts +8 -1
  409. package/dist/hooks/codex.d.ts.map +1 -1
  410. package/dist/hooks/codex.js +7 -0
  411. package/dist/hooks/codex.js.map +1 -1
  412. package/dist/hooks/core.d.ts +6 -0
  413. package/dist/hooks/core.d.ts.map +1 -1
  414. package/dist/hooks/core.js +6 -1
  415. package/dist/hooks/core.js.map +1 -1
  416. package/dist/hooks/cursor.d.ts +11 -1
  417. package/dist/hooks/cursor.d.ts.map +1 -1
  418. package/dist/hooks/cursor.js +10 -0
  419. package/dist/hooks/cursor.js.map +1 -1
  420. package/dist/index.d.ts +4 -0
  421. package/dist/index.d.ts.map +1 -1
  422. package/dist/index.js +4 -0
  423. package/dist/index.js.map +1 -1
  424. package/dist/installConfig.d.ts +23 -5
  425. package/dist/installConfig.d.ts.map +1 -1
  426. package/dist/installConfig.js +23 -5
  427. package/dist/installConfig.js.map +1 -1
  428. package/dist/installer.d.ts +6 -0
  429. package/dist/installer.d.ts.map +1 -1
  430. package/dist/installer.js +6 -0
  431. package/dist/installer.js.map +1 -1
  432. package/dist/invariants/ruleEngine.d.ts +3 -0
  433. package/dist/invariants/ruleEngine.d.ts.map +1 -1
  434. package/dist/invariants/ruleEngine.js +156 -119
  435. package/dist/invariants/ruleEngine.js.map +1 -1
  436. package/dist/invariants/ruleValidator.d.ts +3 -0
  437. package/dist/invariants/ruleValidator.d.ts.map +1 -1
  438. package/dist/invariants/ruleValidator.js +185 -178
  439. package/dist/invariants/ruleValidator.js.map +1 -1
  440. package/dist/languages/LanguageOrchestrator.d.ts +4 -1
  441. package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
  442. package/dist/languages/LanguageOrchestrator.js +8 -19
  443. package/dist/languages/LanguageOrchestrator.js.map +1 -1
  444. package/dist/languages/RuntimeManager.d.ts +8 -0
  445. package/dist/languages/RuntimeManager.d.ts.map +1 -1
  446. package/dist/languages/RuntimeManager.js +55 -5
  447. package/dist/languages/RuntimeManager.js.map +1 -1
  448. package/dist/languages/UniversalAnalyzer.js +1 -1
  449. package/dist/languages/UniversalAnalyzer.js.map +1 -1
  450. package/dist/languages/adapterBridge.d.ts +4 -0
  451. package/dist/languages/adapterBridge.d.ts.map +1 -1
  452. package/dist/languages/adapterBridge.js +37 -3
  453. package/dist/languages/adapterBridge.js.map +1 -1
  454. package/dist/languages/go/GoAdapter.d.ts.map +1 -1
  455. package/dist/languages/go/GoAdapter.js +11 -14
  456. package/dist/languages/go/GoAdapter.js.map +1 -1
  457. package/dist/languages/go/analyzer-darwin-amd64 +0 -0
  458. package/dist/languages/go/analyzer-darwin-arm64 +0 -0
  459. package/dist/languages/go/analyzer-linux-amd64 +0 -0
  460. package/dist/languages/go/analyzer-linux-arm64 +0 -0
  461. package/dist/languages/go/analyzer-src/analyzer.go +2 -0
  462. package/dist/languages/go/analyzer-src/dataaccess.go +388 -0
  463. package/dist/languages/go/analyzer-src/types.go +8 -0
  464. package/dist/languages/go/analyzer-windows-amd64.exe +0 -0
  465. package/dist/languages/go/database-packages.json +8 -0
  466. package/dist/languages/go/goResolution.d.ts +229 -0
  467. package/dist/languages/go/goResolution.d.ts.map +1 -0
  468. package/dist/languages/go/goResolution.js +799 -0
  469. package/dist/languages/go/goResolution.js.map +1 -0
  470. package/dist/languages/go/stdlib-packages.json +353 -0
  471. package/dist/languages/go/tenantInputs.d.ts +37 -0
  472. package/dist/languages/go/tenantInputs.d.ts.map +1 -0
  473. package/dist/languages/go/tenantInputs.js +121 -0
  474. package/dist/languages/go/tenantInputs.js.map +1 -0
  475. package/dist/languages/index.d.ts +1 -0
  476. package/dist/languages/index.d.ts.map +1 -1
  477. package/dist/languages/index.js +5 -0
  478. package/dist/languages/index.js.map +1 -1
  479. package/dist/languages/json/JsonAdapter.d.ts +177 -0
  480. package/dist/languages/json/JsonAdapter.d.ts.map +1 -0
  481. package/dist/languages/json/JsonAdapter.js +531 -0
  482. package/dist/languages/json/JsonAdapter.js.map +1 -0
  483. package/dist/languages/locationIndex.d.ts +41 -0
  484. package/dist/languages/locationIndex.d.ts.map +1 -0
  485. package/dist/languages/locationIndex.js +42 -0
  486. package/dist/languages/locationIndex.js.map +1 -0
  487. package/dist/languages/sql/dialectDetection.d.ts +57 -0
  488. package/dist/languages/sql/dialectDetection.d.ts.map +1 -0
  489. package/dist/languages/sql/dialectDetection.js +135 -0
  490. package/dist/languages/sql/dialectDetection.js.map +1 -0
  491. package/dist/languages/sql/sqlAst.d.ts +494 -0
  492. package/dist/languages/sql/sqlAst.d.ts.map +1 -0
  493. package/dist/languages/sql/sqlAst.js +1817 -0
  494. package/dist/languages/sql/sqlAst.js.map +1 -0
  495. package/dist/languages/testConventions.d.ts +12 -1
  496. package/dist/languages/testConventions.d.ts.map +1 -1
  497. package/dist/languages/testConventions.js +13 -1
  498. package/dist/languages/testConventions.js.map +1 -1
  499. package/dist/languages/tree-sitter/TreeSitterCssAdapter.js +1 -1
  500. package/dist/languages/tree-sitter/TreeSitterCssAdapter.js.map +1 -1
  501. package/dist/languages/tree-sitter/converter.js +2 -2
  502. package/dist/languages/tree-sitter/converter.js.map +1 -1
  503. package/dist/languages/tree-sitter/parser.d.ts +3 -4
  504. package/dist/languages/tree-sitter/parser.d.ts.map +1 -1
  505. package/dist/languages/tree-sitter/parser.js +10 -4
  506. package/dist/languages/tree-sitter/parser.js.map +1 -1
  507. package/dist/languages/tree-sitter/rawNode.d.ts +3 -0
  508. package/dist/languages/tree-sitter/rawNode.d.ts.map +1 -1
  509. package/dist/languages/tree-sitter/rawNode.js +3 -0
  510. package/dist/languages/tree-sitter/rawNode.js.map +1 -1
  511. package/dist/languages/types.d.ts +7 -0
  512. package/dist/languages/types.d.ts.map +1 -1
  513. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +36 -0
  514. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
  515. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +168 -45
  516. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
  517. package/dist/languages/typescript/database-packages.json +19 -0
  518. package/dist/ledger.d.ts +118 -2
  519. package/dist/ledger.d.ts.map +1 -1
  520. package/dist/ledger.js +167 -45
  521. package/dist/ledger.js.map +1 -1
  522. package/dist/legacyIndexNotice.d.ts +32 -0
  523. package/dist/legacyIndexNotice.d.ts.map +1 -0
  524. package/dist/legacyIndexNotice.js +89 -0
  525. package/dist/legacyIndexNotice.js.map +1 -0
  526. package/dist/mcp-tools/discoveryQueries.d.ts +55 -0
  527. package/dist/mcp-tools/discoveryQueries.d.ts.map +1 -0
  528. package/dist/mcp-tools/discoveryQueries.js +157 -0
  529. package/dist/mcp-tools/discoveryQueries.js.map +1 -0
  530. package/dist/mcp-tools/projectTasks.d.ts +9 -123
  531. package/dist/mcp-tools/projectTasks.d.ts.map +1 -1
  532. package/dist/mcp-tools/projectTasks.js +180 -170
  533. package/dist/mcp-tools/projectTasks.js.map +1 -1
  534. package/dist/mcp-tools/whitelistTools.d.ts +20 -0
  535. package/dist/mcp-tools/whitelistTools.d.ts.map +1 -1
  536. package/dist/mcp-tools/whitelistTools.js +20 -0
  537. package/dist/mcp-tools/whitelistTools.js.map +1 -1
  538. package/dist/mcp-tools/workflowGuide.d.ts +9 -0
  539. package/dist/mcp-tools/workflowGuide.d.ts.map +1 -1
  540. package/dist/mcp-tools/workflowGuide.js +13 -5
  541. package/dist/mcp-tools/workflowGuide.js.map +1 -1
  542. package/dist/mcp-tools-shared.d.ts +78 -0
  543. package/dist/mcp-tools-shared.d.ts.map +1 -1
  544. package/dist/mcp-tools-shared.js +203 -340
  545. package/dist/mcp-tools-shared.js.map +1 -1
  546. package/dist/mcp-ui-simple.d.ts +2 -0
  547. package/dist/mcp-ui-simple.d.ts.map +1 -1
  548. package/dist/mcp-ui-simple.js +12 -5
  549. package/dist/mcp-ui-simple.js.map +1 -1
  550. package/dist/mcp.d.ts +6 -0
  551. package/dist/mcp.d.ts.map +1 -1
  552. package/dist/mcp.js +827 -850
  553. package/dist/mcp.js.map +1 -1
  554. package/dist/mcpAuditJobs.d.ts +29 -33
  555. package/dist/mcpAuditJobs.d.ts.map +1 -1
  556. package/dist/mcpAuditJobs.js +102 -791
  557. package/dist/mcpAuditJobs.js.map +1 -1
  558. package/dist/mcpAutoIndex.d.ts +5 -0
  559. package/dist/mcpAutoIndex.d.ts.map +1 -1
  560. package/dist/mcpAutoIndex.js +7 -2
  561. package/dist/mcpAutoIndex.js.map +1 -1
  562. package/dist/mcpDiagnostics.d.ts +7 -0
  563. package/dist/mcpDiagnostics.d.ts.map +1 -1
  564. package/dist/mcpDiagnostics.js +34 -9
  565. package/dist/mcpDiagnostics.js.map +1 -1
  566. package/dist/mcpToolErrors.d.ts +16 -0
  567. package/dist/mcpToolErrors.d.ts.map +1 -1
  568. package/dist/mcpToolErrors.js +16 -0
  569. package/dist/mcpToolErrors.js.map +1 -1
  570. package/dist/nextFile.d.ts +6 -0
  571. package/dist/nextFile.d.ts.map +1 -1
  572. package/dist/nextFile.js +6 -0
  573. package/dist/nextFile.js.map +1 -1
  574. package/dist/nextFileIncremental.d.ts +44 -4
  575. package/dist/nextFileIncremental.d.ts.map +1 -1
  576. package/dist/nextFileIncremental.js +47 -7
  577. package/dist/nextFileIncremental.js.map +1 -1
  578. package/dist/phase/batchFunctions.d.ts +38 -0
  579. package/dist/phase/batchFunctions.d.ts.map +1 -0
  580. package/dist/phase/batchFunctions.js +64 -0
  581. package/dist/phase/batchFunctions.js.map +1 -0
  582. package/dist/phase/checks.d.ts +39 -0
  583. package/dist/phase/checks.d.ts.map +1 -0
  584. package/dist/phase/checks.js +48 -0
  585. package/dist/phase/checks.js.map +1 -0
  586. package/dist/phase/codeBlocks.d.ts +25 -0
  587. package/dist/phase/codeBlocks.d.ts.map +1 -0
  588. package/dist/phase/codeBlocks.js +268 -0
  589. package/dist/phase/codeBlocks.js.map +1 -0
  590. package/dist/phase/colorMath.d.ts +41 -0
  591. package/dist/phase/colorMath.d.ts.map +1 -0
  592. package/dist/phase/colorMath.js +109 -0
  593. package/dist/phase/colorMath.js.map +1 -0
  594. package/dist/phase/config.d.ts +29 -0
  595. package/dist/phase/config.d.ts.map +1 -0
  596. package/dist/phase/config.js +54 -0
  597. package/dist/phase/config.js.map +1 -0
  598. package/dist/phase/consumed.d.ts +47 -0
  599. package/dist/phase/consumed.d.ts.map +1 -0
  600. package/dist/phase/consumed.js +22 -0
  601. package/dist/phase/consumed.js.map +1 -0
  602. package/dist/phase/conventionMining.d.ts +59 -0
  603. package/dist/phase/conventionMining.d.ts.map +1 -0
  604. package/dist/phase/conventionMining.js +152 -0
  605. package/dist/phase/conventionMining.js.map +1 -0
  606. package/dist/phase/coverage.d.ts +65 -0
  607. package/dist/phase/coverage.d.ts.map +1 -0
  608. package/dist/phase/coverage.js +121 -0
  609. package/dist/phase/coverage.js.map +1 -0
  610. package/dist/phase/dag.d.ts +49 -0
  611. package/dist/phase/dag.d.ts.map +1 -0
  612. package/dist/phase/dag.js +120 -0
  613. package/dist/phase/dag.js.map +1 -0
  614. package/dist/phase/dataAccessCalls.d.ts +33 -0
  615. package/dist/phase/dataAccessCalls.d.ts.map +1 -0
  616. package/dist/phase/dataAccessCalls.js +42 -0
  617. package/dist/phase/dataAccessCalls.js.map +1 -0
  618. package/dist/phase/dataAccessCallsCandidates.d.ts +25 -0
  619. package/dist/phase/dataAccessCallsCandidates.d.ts.map +1 -0
  620. package/dist/phase/dataAccessCallsCandidates.js +27 -0
  621. package/dist/phase/dataAccessCallsCandidates.js.map +1 -0
  622. package/dist/phase/dynamicSql.d.ts +18 -0
  623. package/dist/phase/dynamicSql.d.ts.map +1 -0
  624. package/dist/phase/dynamicSql.js +20 -0
  625. package/dist/phase/dynamicSql.js.map +1 -0
  626. package/dist/phase/exportForm.d.ts +23 -0
  627. package/dist/phase/exportForm.d.ts.map +1 -0
  628. package/dist/phase/exportForm.js +29 -0
  629. package/dist/phase/exportForm.js.map +1 -0
  630. package/dist/phase/exportSymbols.d.ts +21 -0
  631. package/dist/phase/exportSymbols.d.ts.map +1 -0
  632. package/dist/phase/exportSymbols.js +28 -0
  633. package/dist/phase/exportSymbols.js.map +1 -0
  634. package/dist/phase/fileHeader.d.ts +15 -0
  635. package/dist/phase/fileHeader.d.ts.map +1 -0
  636. package/dist/phase/fileHeader.js +33 -0
  637. package/dist/phase/fileHeader.js.map +1 -0
  638. package/dist/phase/fileImports.d.ts +39 -0
  639. package/dist/phase/fileImports.d.ts.map +1 -0
  640. package/dist/phase/fileImports.js +138 -0
  641. package/dist/phase/fileImports.js.map +1 -0
  642. package/dist/phase/fileSymbols.d.ts +25 -0
  643. package/dist/phase/fileSymbols.d.ts.map +1 -0
  644. package/dist/phase/fileSymbols.js +302 -0
  645. package/dist/phase/fileSymbols.js.map +1 -0
  646. package/dist/phase/functionBodies.d.ts +28 -0
  647. package/dist/phase/functionBodies.d.ts.map +1 -0
  648. package/dist/phase/functionBodies.js +67 -0
  649. package/dist/phase/functionBodies.js.map +1 -0
  650. package/dist/phase/functionIndex.d.ts +28 -0
  651. package/dist/phase/functionIndex.d.ts.map +1 -0
  652. package/dist/phase/functionIndex.js +152 -0
  653. package/dist/phase/functionIndex.js.map +1 -0
  654. package/dist/phase/goFunctionAnalysis.d.ts +47 -0
  655. package/dist/phase/goFunctionAnalysis.d.ts.map +1 -0
  656. package/dist/phase/goFunctionAnalysis.js +291 -0
  657. package/dist/phase/goFunctionAnalysis.js.map +1 -0
  658. package/dist/phase/goFunctions.d.ts +38 -0
  659. package/dist/phase/goFunctions.d.ts.map +1 -0
  660. package/dist/phase/goFunctions.js +154 -0
  661. package/dist/phase/goFunctions.js.map +1 -0
  662. package/dist/phase/goImports.d.ts +29 -0
  663. package/dist/phase/goImports.d.ts.map +1 -0
  664. package/dist/phase/goImports.js +68 -0
  665. package/dist/phase/goImports.js.map +1 -0
  666. package/dist/phase/goPackageBindings.d.ts +22 -0
  667. package/dist/phase/goPackageBindings.d.ts.map +1 -0
  668. package/dist/phase/goPackageBindings.js +30 -0
  669. package/dist/phase/goPackageBindings.js.map +1 -0
  670. package/dist/phase/goSwitches.d.ts +28 -0
  671. package/dist/phase/goSwitches.d.ts.map +1 -0
  672. package/dist/phase/goSwitches.js +52 -0
  673. package/dist/phase/goSwitches.js.map +1 -0
  674. package/dist/phase/importForm.d.ts +20 -0
  675. package/dist/phase/importForm.d.ts.map +1 -0
  676. package/dist/phase/importForm.js +27 -0
  677. package/dist/phase/importForm.js.map +1 -0
  678. package/dist/phase/importSpecifiers.d.ts +20 -0
  679. package/dist/phase/importSpecifiers.d.ts.map +1 -0
  680. package/dist/phase/importSpecifiers.js +30 -0
  681. package/dist/phase/importSpecifiers.js.map +1 -0
  682. package/dist/phase/imports.d.ts +18 -0
  683. package/dist/phase/imports.d.ts.map +1 -0
  684. package/dist/phase/imports.js +25 -0
  685. package/dist/phase/imports.js.map +1 -0
  686. package/dist/phase/jsonDocument.d.ts +26 -0
  687. package/dist/phase/jsonDocument.d.ts.map +1 -0
  688. package/dist/phase/jsonDocument.js +36 -0
  689. package/dist/phase/jsonDocument.js.map +1 -0
  690. package/dist/phase/localBinding.d.ts +33 -0
  691. package/dist/phase/localBinding.d.ts.map +1 -0
  692. package/dist/phase/localBinding.js +208 -0
  693. package/dist/phase/localBinding.js.map +1 -0
  694. package/dist/phase/loopQueries.d.ts +31 -0
  695. package/dist/phase/loopQueries.d.ts.map +1 -0
  696. package/dist/phase/loopQueries.js +44 -0
  697. package/dist/phase/loopQueries.js.map +1 -0
  698. package/dist/phase/loopQueryCandidates.d.ts +26 -0
  699. package/dist/phase/loopQueryCandidates.d.ts.map +1 -0
  700. package/dist/phase/loopQueryCandidates.js +28 -0
  701. package/dist/phase/loopQueryCandidates.js.map +1 -0
  702. package/dist/phase/oracles.d.ts +216 -0
  703. package/dist/phase/oracles.d.ts.map +1 -0
  704. package/dist/phase/oracles.js +484 -0
  705. package/dist/phase/oracles.js.map +1 -0
  706. package/dist/phase/phaseModel.d.ts +190 -0
  707. package/dist/phase/phaseModel.d.ts.map +1 -0
  708. package/dist/phase/phaseModel.js +468 -0
  709. package/dist/phase/phaseModel.js.map +1 -0
  710. package/dist/phase/producers.d.ts +450 -0
  711. package/dist/phase/producers.d.ts.map +1 -0
  712. package/dist/phase/producers.js +1027 -0
  713. package/dist/phase/producers.js.map +1 -0
  714. package/dist/phase/querySiteCandidates.d.ts +27 -0
  715. package/dist/phase/querySiteCandidates.d.ts.map +1 -0
  716. package/dist/phase/querySiteCandidates.js +66 -0
  717. package/dist/phase/querySiteCandidates.js.map +1 -0
  718. package/dist/phase/querySites.d.ts +30 -0
  719. package/dist/phase/querySites.d.ts.map +1 -0
  720. package/dist/phase/querySites.js +93 -0
  721. package/dist/phase/querySites.js.map +1 -0
  722. package/dist/phase/reachability.d.ts +61 -0
  723. package/dist/phase/reachability.d.ts.map +1 -0
  724. package/dist/phase/reachability.js +104 -0
  725. package/dist/phase/reachability.js.map +1 -0
  726. package/dist/phase/reactComponents.d.ts +33 -0
  727. package/dist/phase/reactComponents.d.ts.map +1 -0
  728. package/dist/phase/reactComponents.js +47 -0
  729. package/dist/phase/reactComponents.js.map +1 -0
  730. package/dist/phase/receiverActivity.d.ts +35 -0
  731. package/dist/phase/receiverActivity.d.ts.map +1 -0
  732. package/dist/phase/receiverActivity.js +66 -0
  733. package/dist/phase/receiverActivity.js.map +1 -0
  734. package/dist/phase/receiverConsumers.d.ts +200 -0
  735. package/dist/phase/receiverConsumers.d.ts.map +1 -0
  736. package/dist/phase/receiverConsumers.js +1025 -0
  737. package/dist/phase/receiverConsumers.js.map +1 -0
  738. package/dist/phase/receiverProvenance.d.ts +97 -0
  739. package/dist/phase/receiverProvenance.d.ts.map +1 -0
  740. package/dist/phase/receiverProvenance.js +337 -0
  741. package/dist/phase/receiverProvenance.js.map +1 -0
  742. package/dist/phase/routing.d.ts +47 -0
  743. package/dist/phase/routing.d.ts.map +1 -0
  744. package/dist/phase/routing.js +62 -0
  745. package/dist/phase/routing.js.map +1 -0
  746. package/dist/phase/rules/conventions.d.ts +61 -0
  747. package/dist/phase/rules/conventions.d.ts.map +1 -0
  748. package/dist/phase/rules/conventions.js +403 -0
  749. package/dist/phase/rules/conventions.js.map +1 -0
  750. package/dist/phase/rules/crossDomain.d.ts +102 -0
  751. package/dist/phase/rules/crossDomain.d.ts.map +1 -0
  752. package/dist/phase/rules/crossDomain.js +918 -0
  753. package/dist/phase/rules/crossDomain.js.map +1 -0
  754. package/dist/phase/rules/dataAccess.d.ts +62 -0
  755. package/dist/phase/rules/dataAccess.d.ts.map +1 -0
  756. package/dist/phase/rules/dataAccess.js +480 -0
  757. package/dist/phase/rules/dataAccess.js.map +1 -0
  758. package/dist/phase/rules/dependencyGraph.d.ts +44 -0
  759. package/dist/phase/rules/dependencyGraph.d.ts.map +1 -0
  760. package/dist/phase/rules/dependencyGraph.js +260 -0
  761. package/dist/phase/rules/dependencyGraph.js.map +1 -0
  762. package/dist/phase/rules/documentation.d.ts +45 -0
  763. package/dist/phase/rules/documentation.d.ts.map +1 -0
  764. package/dist/phase/rules/documentation.js +340 -0
  765. package/dist/phase/rules/documentation.js.map +1 -0
  766. package/dist/phase/rules/dry.d.ts +109 -0
  767. package/dist/phase/rules/dry.d.ts.map +1 -0
  768. package/dist/phase/rules/dry.js +803 -0
  769. package/dist/phase/rules/dry.js.map +1 -0
  770. package/dist/phase/rules/fileDocumentation.d.ts +36 -0
  771. package/dist/phase/rules/fileDocumentation.d.ts.map +1 -0
  772. package/dist/phase/rules/fileDocumentation.js +134 -0
  773. package/dist/phase/rules/fileDocumentation.js.map +1 -0
  774. package/dist/phase/rules/functionBodies.d.ts +33 -0
  775. package/dist/phase/rules/functionBodies.d.ts.map +1 -0
  776. package/dist/phase/rules/functionBodies.js +71 -0
  777. package/dist/phase/rules/functionBodies.js.map +1 -0
  778. package/dist/phase/rules/goRules.d.ts +49 -0
  779. package/dist/phase/rules/goRules.d.ts.map +1 -0
  780. package/dist/phase/rules/goRules.js +209 -0
  781. package/dist/phase/rules/goRules.js.map +1 -0
  782. package/dist/phase/rules/querySites.d.ts +29 -0
  783. package/dist/phase/rules/querySites.d.ts.map +1 -0
  784. package/dist/phase/rules/querySites.js +94 -0
  785. package/dist/phase/rules/querySites.js.map +1 -0
  786. package/dist/phase/rules/react.d.ts +38 -0
  787. package/dist/phase/rules/react.d.ts.map +1 -0
  788. package/dist/phase/rules/react.js +202 -0
  789. package/dist/phase/rules/react.js.map +1 -0
  790. package/dist/phase/rules/registry.d.ts +170 -0
  791. package/dist/phase/rules/registry.d.ts.map +1 -0
  792. package/dist/phase/rules/registry.js +103 -0
  793. package/dist/phase/rules/registry.js.map +1 -0
  794. package/dist/phase/rules/schema.d.ts +79 -0
  795. package/dist/phase/rules/schema.d.ts.map +1 -0
  796. package/dist/phase/rules/schema.js +273 -0
  797. package/dist/phase/rules/schema.js.map +1 -0
  798. package/dist/phase/rules/schemaJson.d.ts +32 -0
  799. package/dist/phase/rules/schemaJson.d.ts.map +1 -0
  800. package/dist/phase/rules/schemaJson.js +81 -0
  801. package/dist/phase/rules/schemaJson.js.map +1 -0
  802. package/dist/phase/rules/schemaValidator.d.ts +38 -0
  803. package/dist/phase/rules/schemaValidator.d.ts.map +1 -0
  804. package/dist/phase/rules/schemaValidator.js +107 -0
  805. package/dist/phase/rules/schemaValidator.js.map +1 -0
  806. package/dist/phase/rules/secrets.d.ts +34 -0
  807. package/dist/phase/rules/secrets.d.ts.map +1 -0
  808. package/dist/phase/rules/secrets.js +208 -0
  809. package/dist/phase/rules/secrets.js.map +1 -0
  810. package/dist/phase/rules/security.d.ts +30 -0
  811. package/dist/phase/rules/security.d.ts.map +1 -0
  812. package/dist/phase/rules/security.js +85 -0
  813. package/dist/phase/rules/security.js.map +1 -0
  814. package/dist/phase/rules/securityDefects.d.ts +37 -0
  815. package/dist/phase/rules/securityDefects.d.ts.map +1 -0
  816. package/dist/phase/rules/securityDefects.js +167 -0
  817. package/dist/phase/rules/securityDefects.js.map +1 -0
  818. package/dist/phase/rules/solid.d.ts +61 -0
  819. package/dist/phase/rules/solid.d.ts.map +1 -0
  820. package/dist/phase/rules/solid.js +562 -0
  821. package/dist/phase/rules/solid.js.map +1 -0
  822. package/dist/phase/rules/styles.d.ts +77 -0
  823. package/dist/phase/rules/styles.d.ts.map +1 -0
  824. package/dist/phase/rules/styles.js +868 -0
  825. package/dist/phase/rules/styles.js.map +1 -0
  826. package/dist/phase/rules/unreferencedModule.d.ts +26 -0
  827. package/dist/phase/rules/unreferencedModule.d.ts.map +1 -0
  828. package/dist/phase/rules/unreferencedModule.js +61 -0
  829. package/dist/phase/rules/unreferencedModule.js.map +1 -0
  830. package/dist/phase/runner.d.ts +549 -0
  831. package/dist/phase/runner.d.ts.map +1 -0
  832. package/dist/phase/runner.js +1098 -0
  833. package/dist/phase/runner.js.map +1 -0
  834. package/dist/phase/schemaCode.d.ts +34 -0
  835. package/dist/phase/schemaCode.d.ts.map +1 -0
  836. package/dist/phase/schemaCode.js +53 -0
  837. package/dist/phase/schemaCode.js.map +1 -0
  838. package/dist/phase/schemaObjects.d.ts +37 -0
  839. package/dist/phase/schemaObjects.d.ts.map +1 -0
  840. package/dist/phase/schemaObjects.js +139 -0
  841. package/dist/phase/schemaObjects.js.map +1 -0
  842. package/dist/phase/schemaUsage.d.ts +30 -0
  843. package/dist/phase/schemaUsage.d.ts.map +1 -0
  844. package/dist/phase/schemaUsage.js +99 -0
  845. package/dist/phase/schemaUsage.js.map +1 -0
  846. package/dist/phase/schemaUsageCandidates.d.ts +32 -0
  847. package/dist/phase/schemaUsageCandidates.d.ts.map +1 -0
  848. package/dist/phase/schemaUsageCandidates.js +165 -0
  849. package/dist/phase/schemaUsageCandidates.js.map +1 -0
  850. package/dist/phase/schemaValidations.d.ts +34 -0
  851. package/dist/phase/schemaValidations.d.ts.map +1 -0
  852. package/dist/phase/schemaValidations.js +53 -0
  853. package/dist/phase/schemaValidations.js.map +1 -0
  854. package/dist/phase/secretCandidates.d.ts +28 -0
  855. package/dist/phase/secretCandidates.d.ts.map +1 -0
  856. package/dist/phase/secretCandidates.js +132 -0
  857. package/dist/phase/secretCandidates.js.map +1 -0
  858. package/dist/phase/securityCandidates.d.ts +29 -0
  859. package/dist/phase/securityCandidates.d.ts.map +1 -0
  860. package/dist/phase/securityCandidates.js +469 -0
  861. package/dist/phase/securityCandidates.js.map +1 -0
  862. package/dist/phase/seeded-defects.d.ts +18 -0
  863. package/dist/phase/seeded-defects.d.ts.map +1 -0
  864. package/dist/phase/seeded-defects.js +61 -0
  865. package/dist/phase/seeded-defects.js.map +1 -0
  866. package/dist/phase/stringLiterals.d.ts +24 -0
  867. package/dist/phase/stringLiterals.d.ts.map +1 -0
  868. package/dist/phase/stringLiterals.js +35 -0
  869. package/dist/phase/stringLiterals.js.map +1 -0
  870. package/dist/phase/stylesCss.d.ts +25 -0
  871. package/dist/phase/stylesCss.d.ts.map +1 -0
  872. package/dist/phase/stylesCss.js +34 -0
  873. package/dist/phase/stylesCss.js.map +1 -0
  874. package/dist/phase/stylesMarkup.d.ts +31 -0
  875. package/dist/phase/stylesMarkup.d.ts.map +1 -0
  876. package/dist/phase/stylesMarkup.js +48 -0
  877. package/dist/phase/stylesMarkup.js.map +1 -0
  878. package/dist/phase/stylesSource.d.ts +36 -0
  879. package/dist/phase/stylesSource.d.ts.map +1 -0
  880. package/dist/phase/stylesSource.js +50 -0
  881. package/dist/phase/stylesSource.js.map +1 -0
  882. package/dist/phase/typeDeclarations.d.ts +33 -0
  883. package/dist/phase/typeDeclarations.d.ts.map +1 -0
  884. package/dist/phase/typeDeclarations.js +76 -0
  885. package/dist/phase/typeDeclarations.js.map +1 -0
  886. package/dist/phase/types.d.ts +2191 -0
  887. package/dist/phase/types.d.ts.map +1 -0
  888. package/dist/phase/types.js +27 -0
  889. package/dist/phase/types.js.map +1 -0
  890. package/dist/phase/withinFileProvenance.d.ts +50 -0
  891. package/dist/phase/withinFileProvenance.d.ts.map +1 -0
  892. package/dist/phase/withinFileProvenance.js +112 -0
  893. package/dist/phase/withinFileProvenance.js.map +1 -0
  894. package/dist/pipeline.d.ts +37 -30
  895. package/dist/pipeline.d.ts.map +1 -1
  896. package/dist/pipeline.js +131 -326
  897. package/dist/pipeline.js.map +1 -1
  898. package/dist/pipelineAdapters.d.ts +104 -21
  899. package/dist/pipelineAdapters.d.ts.map +1 -1
  900. package/dist/pipelineAdapters.js +1144 -984
  901. package/dist/pipelineAdapters.js.map +1 -1
  902. package/dist/pipelineTypes.d.ts +21 -0
  903. package/dist/pipelineTypes.d.ts.map +1 -1
  904. package/dist/pipelineTypes.js +21 -10
  905. package/dist/pipelineTypes.js.map +1 -1
  906. package/dist/presets/presets.d.ts +9 -2
  907. package/dist/presets/presets.d.ts.map +1 -1
  908. package/dist/presets/presets.js +15 -26
  909. package/dist/presets/presets.js.map +1 -1
  910. package/dist/reporting/csvReportGenerator.d.ts +14 -3
  911. package/dist/reporting/csvReportGenerator.d.ts.map +1 -1
  912. package/dist/reporting/csvReportGenerator.js +14 -3
  913. package/dist/reporting/csvReportGenerator.js.map +1 -1
  914. package/dist/reporting/htmlReportGenerator.d.ts +5 -1
  915. package/dist/reporting/htmlReportGenerator.d.ts.map +1 -1
  916. package/dist/reporting/htmlReportGenerator.js +5 -1
  917. package/dist/reporting/htmlReportGenerator.js.map +1 -1
  918. package/dist/reporting/jsonReportGenerator.d.ts +9 -2
  919. package/dist/reporting/jsonReportGenerator.d.ts.map +1 -1
  920. package/dist/reporting/jsonReportGenerator.js +19 -5
  921. package/dist/reporting/jsonReportGenerator.js.map +1 -1
  922. package/dist/reporting/reportGenerator.d.ts +9 -2
  923. package/dist/reporting/reportGenerator.d.ts.map +1 -1
  924. package/dist/reporting/reportGenerator.js +9 -2
  925. package/dist/reporting/reportGenerator.js.map +1 -1
  926. package/dist/reporting/sarifReportGenerator.d.ts +14 -0
  927. package/dist/reporting/sarifReportGenerator.d.ts.map +1 -1
  928. package/dist/reporting/sarifReportGenerator.js +14 -0
  929. package/dist/reporting/sarifReportGenerator.js.map +1 -1
  930. package/dist/reporting/sizeDistribution.d.ts +19 -2
  931. package/dist/reporting/sizeDistribution.d.ts.map +1 -1
  932. package/dist/reporting/sizeDistribution.js +23 -5
  933. package/dist/reporting/sizeDistribution.js.map +1 -1
  934. package/dist/ruleAliases.d.ts +6 -8
  935. package/dist/ruleAliases.d.ts.map +1 -1
  936. package/dist/ruleAliases.js +29 -4
  937. package/dist/ruleAliases.js.map +1 -1
  938. package/dist/search/QueryParser.d.ts +1 -0
  939. package/dist/search/QueryParser.d.ts.map +1 -1
  940. package/dist/search/QueryParser.js +32 -91
  941. package/dist/search/QueryParser.js.map +1 -1
  942. package/dist/services/CodeMapGenerator.d.ts +19 -20
  943. package/dist/services/CodeMapGenerator.d.ts.map +1 -1
  944. package/dist/services/CodeMapGenerator.js +214 -194
  945. package/dist/services/CodeMapGenerator.js.map +1 -1
  946. package/dist/services/ProjectTaskRepository.d.ts +65 -3
  947. package/dist/services/ProjectTaskRepository.d.ts.map +1 -1
  948. package/dist/services/ProjectTaskRepository.js +94 -25
  949. package/dist/services/ProjectTaskRepository.js.map +1 -1
  950. package/dist/services/auditJobService.d.ts +17 -1
  951. package/dist/services/auditJobService.d.ts.map +1 -1
  952. package/dist/services/auditJobService.js +16 -0
  953. package/dist/services/auditJobService.js.map +1 -1
  954. package/dist/services/fileAccounting.d.ts +43 -5
  955. package/dist/services/fileAccounting.d.ts.map +1 -1
  956. package/dist/services/fileAccounting.js +48 -9
  957. package/dist/services/fileAccounting.js.map +1 -1
  958. package/dist/services/projectTaskHelpers.d.ts +45 -0
  959. package/dist/services/projectTaskHelpers.d.ts.map +1 -1
  960. package/dist/services/projectTaskHelpers.js +45 -0
  961. package/dist/services/projectTaskHelpers.js.map +1 -1
  962. package/dist/services/whitelistService.d.ts +40 -5
  963. package/dist/services/whitelistService.d.ts.map +1 -1
  964. package/dist/services/whitelistService.js +87 -46
  965. package/dist/services/whitelistService.js.map +1 -1
  966. package/dist/sqlite/betterSqlite3.d.ts +35 -1
  967. package/dist/sqlite/betterSqlite3.d.ts.map +1 -1
  968. package/dist/sqlite/betterSqlite3.js +35 -1
  969. package/dist/sqlite/betterSqlite3.js.map +1 -1
  970. package/dist/sqlite/driver.d.ts +23 -0
  971. package/dist/sqlite/driver.d.ts.map +1 -1
  972. package/dist/sqlite/driver.js +23 -0
  973. package/dist/sqlite/driver.js.map +1 -1
  974. package/dist/sqlite/nodeSqlite.d.ts +35 -1
  975. package/dist/sqlite/nodeSqlite.d.ts.map +1 -1
  976. package/dist/sqlite/nodeSqlite.js +35 -1
  977. package/dist/sqlite/nodeSqlite.js.map +1 -1
  978. package/dist/structuralSignature.d.ts +9 -0
  979. package/dist/structuralSignature.d.ts.map +1 -1
  980. package/dist/structuralSignature.js +9 -0
  981. package/dist/structuralSignature.js.map +1 -1
  982. package/dist/styles/cssAstExtractor.d.ts +15 -0
  983. package/dist/styles/cssAstExtractor.d.ts.map +1 -1
  984. package/dist/styles/cssAstExtractor.js +15 -0
  985. package/dist/styles/cssAstExtractor.js.map +1 -1
  986. package/dist/styles/normalizer.d.ts +6 -0
  987. package/dist/styles/normalizer.d.ts.map +1 -1
  988. package/dist/styles/normalizer.js +6 -0
  989. package/dist/styles/normalizer.js.map +1 -1
  990. package/dist/styles/styleExtractor.d.ts +29 -2
  991. package/dist/styles/styleExtractor.d.ts.map +1 -1
  992. package/dist/styles/styleExtractor.js +67 -48
  993. package/dist/styles/styleExtractor.js.map +1 -1
  994. package/dist/styles/styleIndexer.d.ts +8 -0
  995. package/dist/styles/styleIndexer.d.ts.map +1 -1
  996. package/dist/styles/styleIndexer.js +135 -138
  997. package/dist/styles/styleIndexer.js.map +1 -1
  998. package/dist/styles/tailwindConfigLoader.d.ts +12 -0
  999. package/dist/styles/tailwindConfigLoader.d.ts.map +1 -1
  1000. package/dist/styles/tailwindConfigLoader.js +12 -0
  1001. package/dist/styles/tailwindConfigLoader.js.map +1 -1
  1002. package/dist/styles/tailwindExpander.d.ts +3 -0
  1003. package/dist/styles/tailwindExpander.d.ts.map +1 -1
  1004. package/dist/styles/tailwindExpander.js +8 -4
  1005. package/dist/styles/tailwindExpander.js.map +1 -1
  1006. package/dist/styles/tailwindProbe.d.ts +9 -0
  1007. package/dist/styles/tailwindProbe.d.ts.map +1 -1
  1008. package/dist/styles/tailwindProbe.js +181 -166
  1009. package/dist/styles/tailwindProbe.js.map +1 -1
  1010. package/dist/styles/tailwindUtilityExpander.d.ts +13 -0
  1011. package/dist/styles/tailwindUtilityExpander.d.ts.map +1 -1
  1012. package/dist/styles/tailwindUtilityExpander.js +13 -0
  1013. package/dist/styles/tailwindUtilityExpander.js.map +1 -1
  1014. package/dist/symbols.d.ts +13 -11
  1015. package/dist/symbols.d.ts.map +1 -1
  1016. package/dist/symbols.js +14 -21
  1017. package/dist/symbols.js.map +1 -1
  1018. package/dist/telemetry.d.ts +31 -3
  1019. package/dist/telemetry.d.ts.map +1 -1
  1020. package/dist/telemetry.js +31 -3
  1021. package/dist/telemetry.js.map +1 -1
  1022. package/dist/tool-registry.d.ts +37 -1
  1023. package/dist/tool-registry.d.ts.map +1 -1
  1024. package/dist/tool-registry.js +37 -1
  1025. package/dist/tool-registry.js.map +1 -1
  1026. package/dist/types.d.ts +101 -71
  1027. package/dist/types.d.ts.map +1 -1
  1028. package/dist/types.js +7 -16
  1029. package/dist/types.js.map +1 -1
  1030. package/dist/ui/InteractivePrompts.d.ts +12 -0
  1031. package/dist/ui/InteractivePrompts.d.ts.map +1 -1
  1032. package/dist/ui/InteractivePrompts.js +12 -0
  1033. package/dist/ui/InteractivePrompts.js.map +1 -1
  1034. package/dist/utils/astParser.d.ts +15 -0
  1035. package/dist/utils/astParser.d.ts.map +1 -1
  1036. package/dist/utils/astParser.js +15 -0
  1037. package/dist/utils/astParser.js.map +1 -1
  1038. package/dist/utils/astUtils.d.ts +60 -0
  1039. package/dist/utils/astUtils.d.ts.map +1 -1
  1040. package/dist/utils/astUtils.js +350 -362
  1041. package/dist/utils/astUtils.js.map +1 -1
  1042. package/dist/utils/contentHash.d.ts +22 -0
  1043. package/dist/utils/contentHash.d.ts.map +1 -0
  1044. package/dist/utils/contentHash.js +26 -0
  1045. package/dist/utils/contentHash.js.map +1 -0
  1046. package/dist/utils/dependencyExtractor.d.ts +28 -0
  1047. package/dist/utils/dependencyExtractor.d.ts.map +1 -1
  1048. package/dist/utils/dependencyExtractor.js +28 -1
  1049. package/dist/utils/dependencyExtractor.js.map +1 -1
  1050. package/dist/utils/errorMessage.d.ts +10 -0
  1051. package/dist/utils/errorMessage.d.ts.map +1 -0
  1052. package/dist/utils/errorMessage.js +12 -0
  1053. package/dist/utils/errorMessage.js.map +1 -0
  1054. package/dist/utils/fileDiscovery.d.ts +61 -2
  1055. package/dist/utils/fileDiscovery.d.ts.map +1 -1
  1056. package/dist/utils/fileDiscovery.js +131 -23
  1057. package/dist/utils/fileDiscovery.js.map +1 -1
  1058. package/dist/utils/reactDetection.d.ts +34 -5
  1059. package/dist/utils/reactDetection.d.ts.map +1 -1
  1060. package/dist/utils/reactDetection.js +73 -52
  1061. package/dist/utils/reactDetection.js.map +1 -1
  1062. package/dist/version.generated.d.ts +1 -1
  1063. package/dist/version.generated.js +1 -1
  1064. package/dist/workers/auditWorker.js +7 -3
  1065. package/dist/workers/auditWorker.js.map +1 -1
  1066. package/examples/.auditrc.example.json +0 -8
  1067. package/examples/.auditrc.json +0 -11
  1068. package/examples/.code-auditor.json +0 -2
  1069. package/examples/nextjs.auditrc.json +0 -8
  1070. package/examples/node-api.auditrc.json +0 -7
  1071. package/examples/react.auditrc.json +0 -6
  1072. package/examples/tolerant-solid.auditrc.json +0 -5
  1073. package/package.json +11 -5
  1074. package/plugin/.claude-plugin/manifest.json +16 -0
  1075. package/plugin/.claude-plugin/plugin.json +1 -1
  1076. package/plugin/hooks/hooks.json +6 -2
  1077. package/plugin/scripts/hook-audit.sh +41 -14
  1078. package/plugin/scripts/hook-common.sh +50 -5
  1079. package/plugin/scripts/hook-drift-check.sh +72 -0
  1080. package/plugin/scripts/hook-self-audit.sh +17 -12
  1081. package/plugin/skills/code-auditor/SKILL.md +1 -1
  1082. package/server.json +2 -2
@@ -0,0 +1,990 @@
1
+ /**
2
+ * Receiver root resolution — Spec 69 §10 S5e.
3
+ *
4
+ * cannot-fire keys to the *receiver's root resolution being inconclusive*, not
5
+ * to the callee's method name. Every query-candidate receiver resolves to a root
6
+ * identifier, and that root gets one of three dispositions:
7
+ *
8
+ * • `handle` — the root resolves to a DB handle (package import, DB-handle
9
+ * type annotation, wrapper class/function, or form-5 function
10
+ * return). The finding path extracts it; no coverage offset.
11
+ * • `not-handle` — the root resolves to something that is *definitively* not a
12
+ * DB handle: an ambient global (no binding anywhere in the
13
+ * file's scope chain), a literal / primitive / object / array
14
+ * declaration, a non-DB-typed parameter, or a non-DB
15
+ * constructor (`new URLSearchParams()`).
16
+ * `clean` is the *correct* outcome, not a silent one.
17
+ * • `unproven` — the root resolves to something genuinely undetermined: a
18
+ * `any`/`unknown` type, an un-annotated parameter, an
19
+ * un-annotated factory return, an unresolvable import, or an
20
+ * unrecognized bare-specifier package (Spec 70 R4 — not in the
21
+ * database-packages manifest). This is the cannot-fire surface
22
+ * (Spec 69 §10 S5a).
23
+ *
24
+ * There is NO identifier list on either side. A global is `not-handle` because it
25
+ * resolved to the global scope (no binding), not because it was enumerated; a
26
+ * name is `handle` because it resolved to a DB package/type/wrapper, not because
27
+ * it *looks* like `db`.
28
+ */
29
+ import { isNodeBuiltin, isDbHandleTypeName, dbHandlePackagesForName, handleTypesForPackage, JS_GLOBALS } from './tsEcosystem.js';
30
+ // ── Binding extraction ───────────────────────────────────────────────────────
31
+ /** Node types that declare a name in the file scope (value and/or type). */
32
+ const VALUE_DECLARATION_TYPES = new Set([
33
+ 'variable_declarator',
34
+ 'required_parameter',
35
+ 'optional_parameter',
36
+ 'public_field_definition',
37
+ 'function_declaration',
38
+ 'method_definition',
39
+ 'generator_function_declaration',
40
+ 'class_declaration',
41
+ 'abstract_class_declaration',
42
+ 'interface_declaration',
43
+ 'type_alias_declaration',
44
+ 'enum_declaration',
45
+ ]);
46
+ const FUNCTION_NAME_TYPES = new Set([
47
+ 'function_declaration',
48
+ 'method_definition',
49
+ 'generator_function_declaration',
50
+ ]);
51
+ const CLASS_NAME_TYPES = new Set([
52
+ 'class_declaration',
53
+ 'abstract_class_declaration',
54
+ ]);
55
+ /** Node types that declare a *type-only* name (interface / type alias / enum) —
56
+ * a name that can appear in a type annotation but is not a runtime value, so a
57
+ * value reference to it is `unproven` and a same-named handle type is shadowed
58
+ * (Spec 70 criterion 9 — the type→package lookup must know the name is local). */
59
+ const TYPE_DECLARATION_TYPES = new Set([
60
+ 'interface_declaration',
61
+ 'type_alias_declaration',
62
+ 'enum_declaration',
63
+ ]);
64
+ /**
65
+ * Build the per-file binding environment: imports, variable/parameter/field
66
+ * declarations, and function/class declaration names.
67
+ *
68
+ * This is structural resolution — enumerating *what is actually bound in the
69
+ * file* — not a curated name list. A name is `not-handle` because it has no
70
+ * binding here (ambient global), never because it is on some list.
71
+ *
72
+ * @param ast the parsed file AST whose imports and declarations seed the map
73
+ * @param adapter the language adapter used to read node names and text
74
+ * @param sourceCode the file source text for reading node text
75
+ * @returns a name → binding map for every name bound in the file
76
+ */
77
+ /** Node types that open a function scope (the nearest enclosing function a
78
+ * binding belongs to). Reused by `enclosingFunctionScope` below. */
79
+ const FUNCTION_SCOPE_TYPES = new Set([
80
+ 'function_declaration',
81
+ 'function_expression',
82
+ 'arrow_function',
83
+ 'method_definition',
84
+ ]);
85
+ /** The binding's enclosing scope: the start byte offset (`range[0]`) of the
86
+ * enclosing function, or `0` for top-level. Two same-named bindings in
87
+ * different functions are distinct bindings, not a collision — the classifier
88
+ * keys on this when a reference's scope is known. A function/class/type
89
+ * declaration introduces its name into the *enclosing* scope, so the walk
90
+ * starts from its parent; a variable/parameter/field sits inside its scope
91
+ * directly. */
92
+ function enclosingFunctionScope(node, adapter) {
93
+ let current = FUNCTION_NAME_TYPES.has(node.type) || CLASS_NAME_TYPES.has(node.type) || TYPE_DECLARATION_TYPES.has(node.type)
94
+ ? adapter.getParent(node)
95
+ : node;
96
+ while (current) {
97
+ if (FUNCTION_SCOPE_TYPES.has(current.type))
98
+ return current.range[0];
99
+ current = adapter.getParent(current);
100
+ }
101
+ return 0;
102
+ }
103
+ /** Walk imports + value/type declarations and emit *every* binding with its
104
+ * enclosing scope — no name dedup. `buildBindingEnv` and
105
+ * `buildBindingScopeIndex` both reduce this list; it is the single source of
106
+ * truth so the flat map and the scope index cannot drift apart. */
107
+ function collectBindings(ast, adapter, sourceCode) {
108
+ const out = [];
109
+ for (const imp of adapter.extractImports(ast)) {
110
+ for (const spec of imp.specifiers) {
111
+ const name = spec.alias ?? spec.name;
112
+ if (!name || name === '*')
113
+ continue;
114
+ const importKind = spec.isDefault ? 'default' : spec.isNamespace ? 'namespace' : 'named';
115
+ out.push({ name, binding: { kind: 'import', source: imp.source, importKind, scope: 0 } });
116
+ }
117
+ }
118
+ const nodes = adapter.findNodes(ast, {
119
+ custom: (n) => VALUE_DECLARATION_TYPES.has(n.type),
120
+ });
121
+ for (const node of nodes) {
122
+ const scope = enclosingFunctionScope(node, adapter);
123
+ if (node.type === 'variable_declarator') {
124
+ for (const name of variableDeclaratorNames(node, adapter, sourceCode)) {
125
+ if (name)
126
+ out.push({ name, binding: { ...bindingFromDeclarator(node, adapter, sourceCode), scope } });
127
+ }
128
+ continue;
129
+ }
130
+ if (node.type === 'required_parameter' || node.type === 'optional_parameter') {
131
+ const name = parameterName(node, adapter, sourceCode);
132
+ if (name) {
133
+ out.push({
134
+ name,
135
+ binding: { kind: 'parameter', typeText: childTypeAnnotationText(node, adapter, sourceCode), scope },
136
+ });
137
+ }
138
+ continue;
139
+ }
140
+ if (node.type === 'public_field_definition') {
141
+ const name = fieldName(node, adapter, sourceCode);
142
+ if (name)
143
+ out.push({ name, binding: { ...bindingFromField(node, adapter, sourceCode), scope } });
144
+ continue;
145
+ }
146
+ if (FUNCTION_NAME_TYPES.has(node.type)) {
147
+ const name = adapter.getNodeName(node);
148
+ if (name)
149
+ out.push({ name, binding: { kind: 'function', scope } });
150
+ continue;
151
+ }
152
+ if (CLASS_NAME_TYPES.has(node.type)) {
153
+ const name = adapter.getNodeName(node);
154
+ if (name)
155
+ out.push({ name, binding: { kind: 'class', scope } });
156
+ continue;
157
+ }
158
+ if (TYPE_DECLARATION_TYPES.has(node.type)) {
159
+ const name = adapter.getNodeName(node);
160
+ if (name)
161
+ out.push({ name, binding: { kind: 'type', scope } });
162
+ }
163
+ }
164
+ return out;
165
+ }
166
+ /** Collapse the full binding list into the flat name-keyed map — first wins
167
+ * (declaration order). This is the legacy `buildBindingEnv` the classifier
168
+ * reads when a reference's scope is unknown; the scope-aware `resolveBinding`
169
+ * prefers `buildBindingScopeIndex` and falls back here for an enclosing scope.
170
+ *
171
+ * @param ast the parsed file AST
172
+ * @param adapter the language adapter (imports + declaration walk)
173
+ * @param sourceCode the file source text
174
+ * @returns the flat name → first-wins binding map */
175
+ export function buildBindingEnv(ast, adapter, sourceCode) {
176
+ const bindings = new Map();
177
+ for (const { name, binding } of collectBindings(ast, adapter, sourceCode)) {
178
+ if (!bindings.has(name))
179
+ bindings.set(name, binding);
180
+ }
181
+ return bindings;
182
+ }
183
+ /** The scope-keyed binding index: name → (enclosing scope → binding), with *no*
184
+ * name collapse. The classifier's scope-aware lookup reads this to resolve a
185
+ * reference to the same-scoped binding when two same-named bindings live in
186
+ * different functions; a scope with no entry for the name falls back to the
187
+ * flat `buildBindingEnv` map (a same-name binding in an enclosing scope).
188
+ *
189
+ * @param ast the parsed file AST
190
+ * @param adapter the language adapter (imports + declaration walk)
191
+ * @param sourceCode the file source text
192
+ * @returns name → (enclosing scope → binding), no name collapse */
193
+ export function buildBindingScopeIndex(ast, adapter, sourceCode) {
194
+ const index = new Map();
195
+ for (const { name, binding } of collectBindings(ast, adapter, sourceCode)) {
196
+ const scope = binding.scope ?? 0;
197
+ let byScope = index.get(name);
198
+ if (!byScope) {
199
+ byScope = new Map();
200
+ index.set(name, byScope);
201
+ }
202
+ if (!byScope.has(scope))
203
+ byScope.set(scope, binding);
204
+ }
205
+ return index;
206
+ }
207
+ /** Resolve a reference to the binding in its scope: prefer the scope-keyed
208
+ * index's exact-scope entry, else fall back to the flat (name-keyed, first-wins)
209
+ * map. A reference with no `scope` (the legacy/bare callers) uses the flat map
210
+ * only — behavior unchanged. */
211
+ function resolveBinding(name, env, scope) {
212
+ if (scope !== undefined && env.bindingsByScope) {
213
+ const scoped = env.bindingsByScope.get(name)?.get(scope);
214
+ if (scoped)
215
+ return scoped;
216
+ }
217
+ return env.bindings.get(name);
218
+ }
219
+ function variableDeclaratorNames(node, adapter, sourceCode) {
220
+ const children = adapter.getChildren(node);
221
+ const nameNode = children.find((c) => c.type === 'identifier' || c.type === 'object_pattern' || c.type === 'array_pattern');
222
+ if (!nameNode)
223
+ return [];
224
+ if (nameNode.type === 'identifier')
225
+ return [adapter.getNodeText(nameNode, sourceCode) ?? ''];
226
+ const names = [];
227
+ collectPatternNames(nameNode, adapter, sourceCode, names);
228
+ return names;
229
+ }
230
+ function collectPatternNames(node, adapter, sourceCode, out) {
231
+ if (node.type === 'identifier') {
232
+ const name = adapter.getNodeText(node, sourceCode);
233
+ if (name)
234
+ out.push(name);
235
+ return;
236
+ }
237
+ for (const child of adapter.getChildren(node)) {
238
+ if ([':', '=', '{', '}', '[', ']', ','].includes(child.type))
239
+ continue;
240
+ collectPatternNames(child, adapter, sourceCode, out);
241
+ }
242
+ }
243
+ function parameterName(node, adapter, sourceCode) {
244
+ const id = adapter.getChildren(node).find((c) => c.type === 'identifier');
245
+ return id ? adapter.getNodeText(id, sourceCode) : null;
246
+ }
247
+ function fieldName(node, adapter, sourceCode) {
248
+ const id = adapter.getChildren(node).find((c) => c.type === 'property_identifier' || c.type === 'field_identifier');
249
+ return id ? adapter.getNodeText(id, sourceCode) : null;
250
+ }
251
+ function childTypeAnnotationText(node, adapter, sourceCode) {
252
+ const typeNode = adapter.getChildren(node).find((c) => c.type === 'type_annotation');
253
+ if (!typeNode)
254
+ return undefined;
255
+ return adapter.getNodeText(typeNode, sourceCode).trim();
256
+ }
257
+ function bindingFromDeclarator(node, adapter, sourceCode) {
258
+ const children = adapter.getChildren(node);
259
+ const typeNode = children.find((c) => c.type === 'type_annotation');
260
+ let valueNode;
261
+ let pastEquals = false;
262
+ for (const child of children) {
263
+ if (child.type === '=' || child.type === 'equals') {
264
+ pastEquals = true;
265
+ continue;
266
+ }
267
+ if (child.type === ':' || child.type === 'type_annotation')
268
+ continue;
269
+ if (pastEquals || (!valueNode && child.type !== 'identifier' && child.type !== 'object_pattern' && child.type !== 'array_pattern')) {
270
+ valueNode = child;
271
+ break;
272
+ }
273
+ }
274
+ return {
275
+ kind: 'variable',
276
+ typeText: typeNode ? adapter.getNodeText(typeNode, sourceCode).trim() : undefined,
277
+ value: valueNode ? describeValue(valueNode, adapter, sourceCode) : undefined,
278
+ };
279
+ }
280
+ function bindingFromField(node, adapter, sourceCode) {
281
+ const children = adapter.getChildren(node);
282
+ const typeNode = children.find((c) => c.type === 'type_annotation');
283
+ const valueNode = children.find((c) => c.type !== 'property_identifier' &&
284
+ c.type !== 'field_identifier' &&
285
+ c.type !== 'decorator' &&
286
+ c.type !== 'accessibility_modifier' &&
287
+ c.type !== 'private' &&
288
+ c.type !== 'public' &&
289
+ c.type !== 'protected' &&
290
+ c.type !== 'static' &&
291
+ c.type !== 'readonly' &&
292
+ c.type !== 'abstract' &&
293
+ c.type !== 'type_annotation');
294
+ return {
295
+ kind: 'field',
296
+ typeText: typeNode ? adapter.getNodeText(typeNode, sourceCode).trim() : undefined,
297
+ value: valueNode ? describeValue(valueNode, adapter, sourceCode) : undefined,
298
+ };
299
+ }
300
+ /**
301
+ * Extract interface and type-alias field-type maps (`Env → { DB: 'D1Database' }`)
302
+ * for the member-chain resolution arm (Spec 70 decision B3). Walks
303
+ * `interface_declaration` bodies (`interface_body`) and `type_alias_declaration`
304
+ * object-literal bodies (`object_type`) for `property_signature` nodes, mapping
305
+ * each declared field name to its type text. A name with a body but no typed
306
+ * fields still yields a (possibly empty) entry — the entry's presence tells
307
+ * {@link classifyMemberPath} the name is a *known* interface, so an unknown
308
+ * field cannot-fire rather than falls back to the bare type name.
309
+ *
310
+ * @param ast the parsed file AST to walk for interface/type-alias declarations
311
+ * @param adapter the language adapter used to find and read declaration nodes
312
+ * @param sourceCode the file source text for reading node text
313
+ * @returns a name → field-name → type-text map for every interface/type alias
314
+ */
315
+ export function extractInterfaceFields(ast, adapter, sourceCode) {
316
+ const fields = new Map();
317
+ const decls = adapter.findNodes(ast, {
318
+ custom: (n) => n.type === 'interface_declaration' ||
319
+ (n.type === 'type_alias_declaration' &&
320
+ adapter.getChildren(n).some((c) => c.type === 'object_type')),
321
+ });
322
+ for (const decl of decls) {
323
+ const nameNode = adapter.getChildren(decl).find((c) => c.type === 'type_identifier');
324
+ const name = nameNode ? adapter.getNodeText(nameNode, sourceCode) : null;
325
+ if (!name)
326
+ continue;
327
+ const body = adapter
328
+ .getChildren(decl)
329
+ .find((c) => c.type === 'interface_body' || c.type === 'object_type');
330
+ if (!body)
331
+ continue;
332
+ let fieldMap = fields.get(name);
333
+ if (!fieldMap) {
334
+ fieldMap = new Map();
335
+ fields.set(name, fieldMap);
336
+ }
337
+ for (const sig of adapter.getChildren(body)) {
338
+ if (sig.type !== 'property_signature')
339
+ continue;
340
+ const fieldNameNode = adapter.getChildren(sig).find((c) => c.type === 'property_identifier');
341
+ const fieldName = fieldNameNode ? adapter.getNodeText(fieldNameNode, sourceCode) : null;
342
+ if (!fieldName)
343
+ continue;
344
+ const typeText = propertySignatureFieldType(sig, adapter, sourceCode);
345
+ if (typeText === undefined)
346
+ continue;
347
+ if (!fieldMap.has(fieldName))
348
+ fieldMap.set(fieldName, typeText);
349
+ }
350
+ }
351
+ return fields;
352
+ }
353
+ /** Read a `property_signature`'s type text, stripping the annotation's `:`. */
354
+ function propertySignatureFieldType(node, adapter, sourceCode) {
355
+ const typeAnn = adapter.getChildren(node).find((c) => c.type === 'type_annotation');
356
+ if (!typeAnn)
357
+ return undefined;
358
+ const typeNode = adapter.getChildren(typeAnn).find((c) => c.type !== ':');
359
+ if (typeNode) {
360
+ const text = adapter.getNodeText(typeNode, sourceCode);
361
+ if (text)
362
+ return text.trim();
363
+ }
364
+ const raw = adapter.getNodeText(typeAnn, sourceCode);
365
+ return raw ? raw.trim().replace(/^:\s*/, '') : undefined;
366
+ }
367
+ /**
368
+ * Extract a serializable {@link ValueDescriptor} from a value/initializer
369
+ * expression node, mirroring {@link classifyValue}'s structural dispatch exactly
370
+ * but extracting names/structure instead of classifying. The descriptor lets a
371
+ * binding outlive its file's AST; classification is deferred to
372
+ * {@link classifyValue} at the point of use, where the file's provenance and
373
+ * bindings are known.
374
+ */
375
+ function describeValue(node, adapter, sourceCode) {
376
+ const { type } = node;
377
+ if (NON_HANDLE_VALUE_TYPES.has(type))
378
+ return { kind: 'literal' };
379
+ if (type === 'identifier')
380
+ return { kind: 'identifier', name: adapter.getNodeText(node, sourceCode) ?? '' };
381
+ if (type === 'await_expression' || type === 'parenthesized_expression' || type === 'binary_expression' || type === 'ternary_expression') {
382
+ for (const child of adapter.getChildren(node)) {
383
+ if (type === 'await_expression' && child.type === 'await')
384
+ continue;
385
+ if (type === 'parenthesized_expression' && (child.type === '(' || child.type === ')'))
386
+ continue;
387
+ if ((type === 'binary_expression' || type === 'ternary_expression') && isPunctuation(child.type))
388
+ continue;
389
+ return { kind: 'unwrap', operand: describeValue(child, adapter, sourceCode) };
390
+ }
391
+ return { kind: 'unwrap', operand: null };
392
+ }
393
+ if (type === 'new_expression') {
394
+ const ctor = findChildOfType(node, ['identifier', 'member_expression']);
395
+ const ctorName = ctor ? extractIdentifierName(ctor, adapter, sourceCode) : null;
396
+ return { kind: 'new', ctorName };
397
+ }
398
+ if (type === 'call_expression') {
399
+ const callee = getCallExpressionCallee(node, adapter);
400
+ if (callee?.type === 'identifier') {
401
+ return { kind: 'call', calleeKind: 'identifier', calleeName: adapter.getNodeText(callee, sourceCode) ?? '', receiverRoot: null };
402
+ }
403
+ if (callee && (callee.type === 'member_expression' || callee.type === 'selector_expression')) {
404
+ return { kind: 'call', calleeKind: 'member', calleeName: null, receiverRoot: resolveReceiverRoot(callee, adapter, sourceCode) };
405
+ }
406
+ return { kind: 'call', calleeKind: 'other', calleeName: null, receiverRoot: null };
407
+ }
408
+ if (type === 'member_expression' || type === 'selector_expression') {
409
+ return { kind: 'member', root: resolveReceiverRoot(node, adapter, sourceCode) };
410
+ }
411
+ if (type === 'as_expression' || type === 'satisfies_expression') {
412
+ const children = adapter.getChildren(node);
413
+ const typeNode = children.find((c) => c.type === 'type_annotation' || c.type === 'predefined_type');
414
+ if (typeNode) {
415
+ return { kind: 'as', typeText: adapter.getNodeText(typeNode, sourceCode), operand: null };
416
+ }
417
+ const operand = children.find((c) => c.type !== 'as' && c.type !== 'satisfies');
418
+ if (operand && operand !== node)
419
+ return { kind: 'as', typeText: null, operand: describeValue(operand, adapter, sourceCode) };
420
+ return { kind: 'as', typeText: null, operand: null };
421
+ }
422
+ if (type === 'arrow_function' || type === 'function_expression' || type === 'function') {
423
+ return { kind: 'function' };
424
+ }
425
+ return { kind: 'other' };
426
+ }
427
+ // ── Classification ───────────────────────────────────────────────────────────
428
+ const NON_HANDLE_VALUE_TYPES = new Set([
429
+ 'string',
430
+ 'string_fragment',
431
+ 'template_string',
432
+ 'number',
433
+ 'object',
434
+ 'array',
435
+ 'true',
436
+ 'false',
437
+ 'null',
438
+ 'undefined',
439
+ 'regex',
440
+ 'bigint',
441
+ ]);
442
+ const NON_HANDLE_PRIMITIVES = new Set([
443
+ 'string',
444
+ 'number',
445
+ 'boolean',
446
+ 'bigint',
447
+ 'symbol',
448
+ 'void',
449
+ 'null',
450
+ 'undefined',
451
+ 'never',
452
+ ]);
453
+ /**
454
+ * Classify a bare root identifier's disposition under the file's resolution env.
455
+ *
456
+ * @param name the bare root identifier to classify
457
+ * @param env the file's resolution environment (provenance, bindings, adapter)
458
+ * @param depth recursion guard; classification gives up past depth 8
459
+ * @param opts `thisField` marks the name as a `this.<field>` reference;
460
+ * `memberPath` is the receiver's member chain after the root
461
+ * (e.g. `env.DB.prepare` → `['DB']`), resolved through the root's
462
+ * interface field types when present (Spec 70 decision B3)
463
+ * @returns `handle`, `not-handle`, or `unproven`
464
+ */
465
+ export function classifyRootIdentifier(name, env, depth = 0, opts) {
466
+ if (!name)
467
+ return 'unproven';
468
+ // A provenanced name is a DB handle — except a `this.<name>` reference to a
469
+ // *wrapper* (a function/method whose body does DB work). Wrapper evidence
470
+ // describes the method's own body, not the receiver `this.<method>`: a method
471
+ // name is not evidence (the method-name proof this path removed lists for).
472
+ // A package-import / sql-argument / binding seed still proves a `this.<field>`
473
+ // handle (`this.env`, `this.db`), and those reasons are not `wrapper`, so they
474
+ // keep short-circuiting here. This must stay *before* the binding lookup.
475
+ const evidence = env.provenance.get(name);
476
+ if (evidence && !(opts?.thisField && evidence.reason === 'wrapper'))
477
+ return 'handle';
478
+ if (depth > 8)
479
+ return 'unproven';
480
+ // Form-3 heritage (Spec 70 Q3, Item 1): a `this.<field>` reference resolves to
481
+ // the enclosing class's base-class field type (`extends WorkflowEntrypoint<Env>`
482
+ // → `this.env` is `Env`), then through the member path by the same
483
+ // interface-field seam as B3. The base class is resolved *to its declaration*
484
+ // in the project's declared dependencies' `.d.ts` via `env.resolveHeritageField`
485
+ // — never a bundled name map. This runs *before* the binding lookup — the
486
+ // heritage contract is authoritative, and a same-named local binding is a
487
+ // shadow, not the field's type. No heritage (`thisHeritage` null), no resolver,
488
+ // or an unresolvable declaration all fall through to `unproven` (abstain,
489
+ // never a guess from the class merely having a generic parameter).
490
+ if (opts?.thisField && opts.thisHeritage && env.resolveHeritageField) {
491
+ const { base, args } = splitHeritage(opts.thisHeritage);
492
+ const fieldType = env.resolveHeritageField(base, name, args);
493
+ if (fieldType !== null) {
494
+ return classifyTypeOrMember(fieldType, opts.memberPath, env, depth + 1);
495
+ }
496
+ }
497
+ const binding = resolveBinding(name, env, opts?.scope);
498
+ if (!binding) {
499
+ // A bare unbound name is an ambient global → not-handle. An undeclared
500
+ // `this.<field>` is a dynamic/unseen field → unproven (the caller passes
501
+ // `thisField` when the receiver chain bottoms out at `this`/`super`).
502
+ return opts?.thisField ? 'unproven' : 'not-handle';
503
+ }
504
+ if (opts?.thisField && binding.kind !== 'field') {
505
+ // `this.<field>` is a field reference, never a local name. A parameter,
506
+ // variable, import, function, or class of the same name is a *shadow*, not
507
+ // the field's type — consulting it would let `env`/`ctx`/`state` resolve to
508
+ // a local's disposition instead of the field. Leave it unproven: a plain
509
+ // unresolvable field stays cannot-fire rather than clean.
510
+ return 'unproven';
511
+ }
512
+ switch (binding.kind) {
513
+ case 'import':
514
+ return classifyImportSource(binding.source ?? '', name, binding.importKind, env);
515
+ case 'variable':
516
+ case 'field':
517
+ if (binding.typeText)
518
+ return classifyTypeOrMember(binding.typeText, opts?.memberPath, env, depth);
519
+ if (binding.value)
520
+ return classifyValue(binding.value, env, depth);
521
+ return 'unproven';
522
+ case 'parameter':
523
+ if (binding.typeText)
524
+ return classifyTypeOrMember(binding.typeText, opts?.memberPath, env, depth);
525
+ return 'unproven';
526
+ case 'function':
527
+ case 'class':
528
+ case 'type':
529
+ return 'unproven';
530
+ }
531
+ }
532
+ /**
533
+ * Classify a typed binding, resolving a member chain through interface field
534
+ * types when one is supplied (Spec 70 decision B3). With no member path this is
535
+ * the plain type-text classification.
536
+ */
537
+ function classifyTypeOrMember(typeText, memberPath, env, depth) {
538
+ if (memberPath && memberPath.length > 0) {
539
+ return classifyMemberPath(typeText, memberPath, env, depth);
540
+ }
541
+ return classifyTypeText(typeText, env, depth);
542
+ }
543
+ /**
544
+ * Resolve a member receiver through its interface / type-alias field types
545
+ * (Spec 70 decision B3): `env.DB` where `env` is typed `Env` and
546
+ * `interface Env { DB: D1Database }` resolves `DB` → `D1Database` → handle.
547
+ * Each step looks up the head member's declared field type in
548
+ * `env.interfaceFields` and recurses on the remaining path; the final field
549
+ * type is classified by the ordinary type-text rules. A field absent from the
550
+ * known interface (or a type name with no known fields) cannot-fire — the
551
+ * member is not a declared DB field, never a guessed clean.
552
+ */
553
+ function classifyMemberPath(typeText, memberPath, env, depth) {
554
+ const fields = env.interfaceFields;
555
+ if (!fields || memberPath.length === 0)
556
+ return classifyTypeText(typeText, env, depth);
557
+ const base = baseTypeName(typeText);
558
+ const iface = fields.get(base);
559
+ if (!iface)
560
+ return classifyTypeText(typeText, env, depth);
561
+ const [head, ...rest] = memberPath;
562
+ const fieldType = iface.get(head);
563
+ if (fieldType === undefined)
564
+ return 'unproven';
565
+ if (rest.length === 0)
566
+ return classifyTypeText(fieldType, env, depth + 1);
567
+ return classifyMemberPath(fieldType, rest, env, depth + 1);
568
+ }
569
+ /**
570
+ * Derive the receiver's member path after the root from the site strings (Spec 70
571
+ * decision B3). `receiver` is the member-chain text left of the method (`env.DB`
572
+ * for `env.DB.prepare`); `root` is its leftmost identifier (`env`); the path is
573
+ * the non-root segments (`['DB']`). A `this`/`super`-rooted receiver has no
574
+ * resolvable member path (its `thisField` guard already leaves it unproven), and
575
+ * any segment that is not a plain identifier (a method name, an index, a call
576
+ * result) is dropped to empty — only declared interface fields are resolvable.
577
+ *
578
+ * @param root the receiver's leftmost identifier
579
+ * @param receiver the member-chain text left of the method
580
+ * @param thisField true when the receiver is a `this`/`super` field
581
+ * @returns the non-root member-path segments, or an empty array when not resolvable
582
+ */
583
+ export function deriveMemberPath(root, receiver, thisField) {
584
+ if (thisField || !root || !receiver.startsWith(root))
585
+ return [];
586
+ const rest = receiver.slice(root.length).replace(/^[.\s]+/, '');
587
+ if (!rest)
588
+ return [];
589
+ const parts = rest.split('.').map((p) => p.trim()).filter((p) => p.length > 0);
590
+ if (parts.length === 0 || parts.some((p) => !/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(p)))
591
+ return [];
592
+ return parts;
593
+ }
594
+ /**
595
+ * Derive the member path after the root for a `this`/`super`-rooted receiver
596
+ * (Spec 70 Q3): `this.env.DB` → root `env`, path `['DB']`. Unlike
597
+ * {@link deriveMemberPath} (which returns `[]` for a `this`-rooted receiver), the
598
+ * `this.`/`super.` prefix is stripped first so the root's member chain is
599
+ * recoverable — it resolves through the root's base-class field type (`this.env`
600
+ * is `Env`) and then the same interface-field seam as B3.
601
+ *
602
+ * @param root the receiver's leftmost identifier (after the `this.`/`super.` strip)
603
+ * @param receiver the member-chain text left of the method
604
+ * @returns the member-path segments after the root, or an empty array when not resolvable
605
+ */
606
+ export function deriveThisMemberPath(root, receiver) {
607
+ if (!root || !receiver)
608
+ return [];
609
+ const t = receiver.trim().replace(/^(?:this|super)\./, '');
610
+ if (!t.startsWith(root))
611
+ return [];
612
+ const rest = t.slice(root.length).replace(/^[.\s]+/, '');
613
+ if (!rest)
614
+ return [];
615
+ const parts = rest.split('.').map((p) => p.trim()).filter((p) => p.length > 0);
616
+ if (parts.length === 0 || parts.some((p) => !/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(p)))
617
+ return [];
618
+ return parts;
619
+ }
620
+ /**
621
+ * True when a receiver root is DB-shaped — its disposition is `handle` or
622
+ * `unproven` — never a name list. This is the package-discriminant replacement
623
+ * for the deleted `DB_CALL_METHODS` / `isDbShapedMethod` candidacy filters: a
624
+ * call is a DB/ORM candidate when its receiver resolves to a DB package/handle
625
+ * or to something unresolved, and NOT when it resolves to a provably non-DB
626
+ * receiver (a JS global, primitive, or Node builtin). `join` is
627
+ * `Array.prototype.join` (root `Array` → not-handle) and also `SQL JOIN`
628
+ * (root `db` → handle) — the receiver's resolution, not the method name,
629
+ * distinguishes them.
630
+ *
631
+ * @param root the bare receiver-root identifier to classify
632
+ * @param env the file's resolution environment (provenance, bindings, adapter)
633
+ * @returns true unless the root provably resolves to a non-DB receiver
634
+ */
635
+ export function isDbShapedRoot(root, env, opts) {
636
+ return classifyRootIdentifier(root, env, 0, opts) !== 'not-handle';
637
+ }
638
+ function classifyImportSource(source, name, importKind, env) {
639
+ // One seam (Spec 70 B1): every specifier kind — relative, tsconfig-`paths`
640
+ // alias, bare (tsconfig-`paths` → in-repo, else node_modules vendor `.d.ts`),
641
+ // and the `@/`/`~/` fallback — answers through `resolveImport`. An in-repo
642
+ // resolution means the name's origin is a project file whose export chain is
643
+ // not walked here, so the name's DB-handle status is unknown → `unproven`
644
+ // (never the old `not-handle`, which claimed to have proven a re-exported
645
+ // handle is clean). Absent a resolver, relative/alias still abstain below.
646
+ const resolved = env.resolveImport?.(source);
647
+ if (resolved?.kind === 'in-repo') {
648
+ env.importResolutionReason = `resolves to in-repo file \`${resolved.path}\` whose export chain is not walked here`;
649
+ return 'unproven';
650
+ }
651
+ // A bare specifier that did not land in-repo → node_modules or a Node builtin.
652
+ // A Node builtin (`fs`, `node:path`, …) is provably not a DB client →
653
+ // `not-handle`. A manifest DB package resolves by import kind: a
654
+ // default/namespace import is the package's handle (its local name is
655
+ // arbitrary — `import mysql from 'mysql2/promise'`), while a *named* import is
656
+ // a handle only when the manifest lists its name — `import { eq } from
657
+ // 'drizzle-orm'` is provably NOT a handle, `import { Pool } from 'pg'` is. An
658
+ // unrecognized package reached by resolution reports cannot-fire (Spec 70 R4),
659
+ // never a guessed clean.
660
+ if (isNodeBuiltin(source))
661
+ return 'not-handle';
662
+ const handles = handleTypesForPackage(source);
663
+ if (handles) {
664
+ if (importKind === 'default' || importKind === 'namespace')
665
+ return 'handle';
666
+ return handles.has(name) ? 'handle' : 'not-handle';
667
+ }
668
+ // A bare specifier that resolved to neither an in-repo file, a node_modules
669
+ // declaration, a Node builtin, nor a manifest DB package names no module in
670
+ // this tree. That is the honest cannot-fire case — a codegen token
671
+ // (`__prismaFolder__`), a build-step alias (blitz `db`), or a genuinely absent
672
+ // module all resolve to nothing here, and guessing a target from the name would
673
+ // be a fabrication (Spec 70 B1). Only when a resolver was threaded and answered
674
+ // `unresolved` do we say this; without a resolver (Go, bare-root callers) the
675
+ // fallback reason below is the conservative "unrecognized package".
676
+ if (resolved?.kind === 'unresolved') {
677
+ env.importResolutionReason = `imports from \`${source}\`, which names no module in this tree (no in-repo file reachable from the specifier, no node_modules declaration)`;
678
+ return 'unproven';
679
+ }
680
+ return 'unproven';
681
+ }
682
+ function classifyTypeText(typeText, env, depth) {
683
+ const t = typeText.trim();
684
+ const unionParts = splitTopLevel(t, '|');
685
+ const interParts = splitTopLevel(t, '&');
686
+ if (unionParts.length > 1 || interParts.length > 1) {
687
+ const parts = unionParts.length > 1 ? unionParts : interParts;
688
+ const dispositions = parts.map((p) => classifyTypeText(p, env, depth + 1));
689
+ if (dispositions.some((d) => d === 'handle'))
690
+ return 'handle';
691
+ if (dispositions.every((d) => d === 'not-handle'))
692
+ return 'not-handle';
693
+ return 'unproven';
694
+ }
695
+ const base = baseTypeName(t);
696
+ if (base === 'any' || base === 'unknown')
697
+ return 'unproven';
698
+ if (NON_HANDLE_PRIMITIVES.has(base))
699
+ return 'not-handle';
700
+ if (/\[\]$/.test(t) || /^ReadonlyArray</.test(t) || /^Array</.test(t))
701
+ return 'not-handle';
702
+ // A JS builtin global type (`Map`, `Set`, `Buffer`, `Date`, `Promise`, `String`,
703
+ // …) is provably not a DB handle — the global object's own names, enumerated at
704
+ // load, never a hand-written list.
705
+ if (JS_GLOBALS.has(base))
706
+ return 'not-handle';
707
+ // Resolve a handle-candidate type name to its *origin* before consulting the
708
+ // manifest (Spec 70 criterion 9 — the lookup keys on package AND type). A bare
709
+ // name match against the flattened handle-name set would credit a project's own
710
+ // unrelated `D1Database` declaration or an import from a non-DB package, so ask
711
+ // where the name came from first:
712
+ // · an import resolves through its package's handle list in the manifest;
713
+ // · a local type declaration (class/interface/type-alias/enum) shadows the
714
+ // ambient manifest name — it is not the DB handle;
715
+ // · only an *ambient* (unbound) name falls through to the name match, which
716
+ // is what a Workers `D1Database` without an import relies on (the type is
717
+ // injected by `@cloudflare/workers-types` via tsconfig `types`).
718
+ const binding = env.bindings.get(base);
719
+ if (binding) {
720
+ if (binding.kind === 'import') {
721
+ const handles = handleTypesForPackage(binding.source ?? '');
722
+ if (handles?.has(base))
723
+ return 'handle';
724
+ // Imported from a non-manifest package, or a non-handle name from a DB
725
+ // package (`KVNamespace` from `@cloudflare/workers-types`) — cannot-fire,
726
+ // never a guessed clean.
727
+ return 'unproven';
728
+ }
729
+ if (binding.kind === 'class' || binding.kind === 'type') {
730
+ // A local class/interface/type-alias/enum of this name shadows the ambient
731
+ // manifest type — it is not the DB handle.
732
+ return 'unproven';
733
+ }
734
+ // variable / parameter / field / function bind only a *value*, not a type,
735
+ // so a type annotation naming one still refers to the ambient type.
736
+ }
737
+ if (isDbHandleTypeName(base)) {
738
+ // The ambient arm (Spec 70 criterion 9, Item 3): an unbound handle-type name
739
+ // is credited only when a manifest package that declares it is a declared
740
+ // dependency of the project (package.json deps/devDeps or tsconfig `types`).
741
+ // Otherwise the name resolved to nothing — cannot-fire, never a guessed
742
+ // clean — and the cause is recorded for `resolveRoot`'s reason.
743
+ const declaring = dbHandlePackagesForName(base);
744
+ const declared = env.declaredTypePackages;
745
+ if (declaring && declared && [...declaring].some((pkg) => declared.has(pkg))) {
746
+ return 'handle';
747
+ }
748
+ env.ambientRejectionReason = `type \`${base}\` resolves to nothing (its declaring package is not a declared dependency)`;
749
+ return 'unproven';
750
+ }
751
+ return 'unproven';
752
+ }
753
+ function baseTypeName(typeText) {
754
+ let t = typeText.trim();
755
+ if (t.startsWith(':'))
756
+ t = t.slice(1).trim();
757
+ if (t.startsWith('typeof '))
758
+ t = t.slice('typeof '.length).trim();
759
+ if (t.startsWith('keyof '))
760
+ t = t.slice('keyof '.length).trim();
761
+ const lt = t.indexOf('<');
762
+ if (lt > 0 && t.endsWith('>'))
763
+ t = t.slice(0, lt).trim();
764
+ return t;
765
+ }
766
+ function splitTopLevel(text, sep) {
767
+ const parts = [];
768
+ let depth = 0;
769
+ let current = '';
770
+ for (const ch of text) {
771
+ if (ch === '<' || ch === '(' || ch === '[' || ch === '{')
772
+ depth++;
773
+ if (ch === '>' || ch === ')' || ch === ']' || ch === '}')
774
+ depth--;
775
+ if (ch === sep && depth === 0) {
776
+ parts.push(current.trim());
777
+ current = '';
778
+ continue;
779
+ }
780
+ current += ch;
781
+ }
782
+ if (current.trim())
783
+ parts.push(current.trim());
784
+ return parts;
785
+ }
786
+ function classifyValue(value, env, depth) {
787
+ switch (value.kind) {
788
+ case 'literal':
789
+ case 'function':
790
+ return 'not-handle';
791
+ case 'identifier':
792
+ return classifyRootIdentifier(value.name, env, depth + 1);
793
+ case 'new':
794
+ if (value.ctorName)
795
+ return classifyRootIdentifier(value.ctorName, env, depth + 1);
796
+ return 'unproven';
797
+ case 'call':
798
+ if (value.calleeKind === 'identifier') {
799
+ const name = value.calleeName ?? '';
800
+ // A provenanced factory name yields a handle when called: the provenance
801
+ // already established the name as a handle-shaped value, and calling it
802
+ // produces a handle (`resolveHero`, a wrapper that queries in a loop).
803
+ if (env.provenance.has(name))
804
+ return 'handle';
805
+ // A *declared* factory name that resolves non-handle (an import from a
806
+ // non-DB package, a variable typed as a non-handle) proves the return is
807
+ // non-handle: `const $ = load(html)` with `load` from `cheerio`. A truly
808
+ // *unbound* factory name is NOT proof of non-handle — `getConnection()`
809
+ // might return a connection — so only accept not-handle for a name that has
810
+ // a binding in scope.
811
+ const disp = classifyRootIdentifier(name, env, depth + 1);
812
+ if (disp === 'not-handle' && env.bindings.has(name))
813
+ return 'not-handle';
814
+ return 'unproven';
815
+ }
816
+ if (value.calleeKind === 'member') {
817
+ const root = value.receiverRoot;
818
+ // A method call on a *provably non-DB* root is itself non-DB: `cheerio.load()`,
819
+ // `JSON.parse()`, `lodash.get()` all resolve to a package/global that is not a
820
+ // handle, so the call's return is not a handle either. A method call on a
821
+ // *handle* root is NOT itself a handle — `db.prepare()` returns a Statement,
822
+ // `db.transaction()` a Transaction, `stmt.all()` a result row — so it
823
+ // abstains to `unproven` rather than over-claiming `handle`.
824
+ if (root) {
825
+ const rootDisp = classifyRootIdentifier(root, env, depth + 1);
826
+ if (rootDisp === 'not-handle')
827
+ return 'not-handle';
828
+ }
829
+ }
830
+ return 'unproven';
831
+ case 'member':
832
+ if (value.root)
833
+ return classifyRootIdentifier(value.root, env, depth + 1);
834
+ return 'not-handle';
835
+ case 'as':
836
+ if (value.typeText != null)
837
+ return classifyTypeText(value.typeText, env, depth + 1);
838
+ if (value.operand)
839
+ return classifyValue(value.operand, env, depth + 1);
840
+ return 'unproven';
841
+ case 'unwrap':
842
+ if (value.operand)
843
+ return classifyValue(value.operand, env, depth + 1);
844
+ return 'unproven';
845
+ case 'other':
846
+ return 'unproven';
847
+ }
848
+ }
849
+ function isPunctuation(type) {
850
+ return [
851
+ '?', ':', '(', ')', '??', '&&', '||', '=', '===', '==', '+', '-', '*', '/', '%', '.', ',',
852
+ ].includes(type);
853
+ }
854
+ function findChildOfType(node, types) {
855
+ for (const child of node.children ?? []) {
856
+ if (types.includes(child.type))
857
+ return child;
858
+ const found = findChildOfType(child, types);
859
+ if (found)
860
+ return found;
861
+ }
862
+ return null;
863
+ }
864
+ function extractIdentifierName(node, adapter, sourceCode) {
865
+ if (node.type === 'identifier')
866
+ return adapter.getNodeText(node, sourceCode);
867
+ if (node.type === 'member_expression' || node.type === 'selector_expression') {
868
+ const firstChild = node.children?.[0];
869
+ if (firstChild)
870
+ return extractIdentifierName(firstChild, adapter, sourceCode);
871
+ }
872
+ return null;
873
+ }
874
+ function getCallExpressionCallee(node, adapter) {
875
+ for (const child of adapter.getChildren(node)) {
876
+ if (child.type === 'arguments')
877
+ break;
878
+ if (child.type === 'await_expression') {
879
+ const inner = getCallExpressionCallee(child, adapter);
880
+ if (inner)
881
+ return inner;
882
+ continue;
883
+ }
884
+ if (child.type === 'identifier' ||
885
+ child.type === 'member_expression' ||
886
+ child.type === 'selector_expression' ||
887
+ child.type === 'call_expression') {
888
+ return child;
889
+ }
890
+ }
891
+ return null;
892
+ }
893
+ /**
894
+ * Resolve a member/selector chain to its root identifier name (the leftmost
895
+ * segment, descending through call expressions for builder chains). Returns the
896
+ * bare name (`"db"` for `db.select().from()`, `"page"` for `page.locator()`), or
897
+ * `null` when the root is a literal (array/object/string) or otherwise not an
898
+ * identifier.
899
+ *
900
+ * @param callee the member/selector/identifier expression to resolve
901
+ * @param adapter the language adapter used to read children and text
902
+ * @param sourceCode the file source text for reading node text
903
+ * @returns the leftmost identifier name, or null for a non-identifier root
904
+ */
905
+ export function resolveReceiverRoot(callee, adapter, sourceCode) {
906
+ let current = callee;
907
+ while (current.type === 'member_expression' || current.type === 'selector_expression') {
908
+ const children = adapter.getChildren(current);
909
+ const object = children.find((c) => c.type !== '.' && c.type !== 'property_identifier' && c.type !== 'field_identifier');
910
+ if (!object)
911
+ return null;
912
+ // When the object is `this`/`super`, the receiver's root is the property of
913
+ // THIS member expression — the first segment after `this` (`env` in
914
+ // `this.env.DB`, `ctx` in `this.ctx.storage.sql`). Returning it here avoids
915
+ // the old `findFirstProperty` fallback, which scanned the whole callee for
916
+ // the first `property_identifier` it could find — which is the *method*
917
+ // (`prepare`/`exec`), i.e. the last segment, not the first.
918
+ if (object.type === 'this' || object.type === 'super') {
919
+ const prop = children.find((c) => c.type === 'property_identifier' || c.type === 'field_identifier');
920
+ return prop ? adapter.getNodeText(prop, sourceCode) : null;
921
+ }
922
+ current = object;
923
+ }
924
+ if (current.type === 'call_expression') {
925
+ const innerCallee = getCallExpressionCallee(current, adapter);
926
+ if (innerCallee)
927
+ return resolveReceiverRoot(innerCallee, adapter, sourceCode);
928
+ return null;
929
+ }
930
+ if (current.type === 'identifier') {
931
+ return adapter.getNodeText(current, sourceCode);
932
+ }
933
+ return null;
934
+ }
935
+ // ── Form-3 this-field type heritage (Spec 70 Q3) ─────────────────────────────
936
+ /** Split `Agent<Env>` / `WorkflowEntrypoint` into its base-class name and type
937
+ * arguments. A heritage with no `<…>` has an empty argument list; nested
938
+ * generics (`Foo<Bar<Baz>, Qux>`) split at top-level commas only. The base-class
939
+ * name and arguments are then handed to `env.resolveHeritageField` for the
940
+ * declaration lookup, or left unresolvable (abstain) when no resolver is
941
+ * threaded. */
942
+ function splitHeritage(text) {
943
+ const t = text.trim();
944
+ const base = baseTypeName(t);
945
+ const lt = t.indexOf('<');
946
+ if (lt <= 0 || !t.endsWith('>'))
947
+ return { base, args: [] };
948
+ return { base, args: splitTopLevel(t.slice(lt + 1, -1), ',') };
949
+ }
950
+ /**
951
+ * The enclosing class declaration's `extends` clause text
952
+ * (`WorkflowEntrypoint<Env>`), or null when the node is not inside a class or
953
+ * the class has no base class. The smallest enclosing class wins (nested classes
954
+ * resolve to the innermost), matching the deleted form-3 producer.
955
+ *
956
+ * @param ast the parsed file AST searched for enclosing classes
957
+ * @param adapter the language adapter used to find and read class nodes
958
+ * @param node the node whose enclosing class heritage is sought
959
+ * @param sourceCode the file source text for reading the heritage text
960
+ * @returns the enclosing class's `extends` clause text, or null when none applies
961
+ */
962
+ export function findEnclosingClassHeritage(ast, adapter, node, sourceCode) {
963
+ const line = node.location.start.line;
964
+ const classes = adapter.findNodes(ast, {
965
+ custom: (n) => n.type === 'class_declaration' || n.type === 'abstract_class_declaration',
966
+ });
967
+ let best = null;
968
+ let bestSpan = Number.POSITIVE_INFINITY;
969
+ for (const cls of classes) {
970
+ const start = cls.location.start.line;
971
+ const end = cls.location.end.line;
972
+ if (start <= line && line <= end) {
973
+ const span = end - start;
974
+ if (span < bestSpan) {
975
+ bestSpan = span;
976
+ best = cls;
977
+ }
978
+ }
979
+ }
980
+ if (!best)
981
+ return null;
982
+ const heritage = adapter.getChildren(best).find((c) => c.type === 'class_heritage');
983
+ if (!heritage)
984
+ return null;
985
+ const ext = adapter.getChildren(heritage).find((c) => c.type === 'extends_clause');
986
+ if (!ext)
987
+ return null;
988
+ return adapter.getNodeText(ext, sourceCode).trim().replace(/^extends\s+/, '');
989
+ }
990
+ //# sourceMappingURL=receiverRoot.js.map