code-auditor-mcp 3.1.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +665 -1
  3. package/README.md +85 -11
  4. package/dist/__test_tmp__/spec18_test.d.ts +2 -0
  5. package/dist/__test_tmp__/spec18_test.d.ts.map +1 -0
  6. package/dist/__test_tmp__/spec18_test.js +5 -0
  7. package/dist/__test_tmp__/spec18_test.js.map +1 -0
  8. package/dist/__tests__/fixtures/spec-20/scripts/tool.d.ts +6 -0
  9. package/dist/__tests__/fixtures/spec-20/scripts/tool.d.ts.map +1 -0
  10. package/dist/__tests__/fixtures/spec-20/scripts/tool.js +12 -0
  11. package/dist/__tests__/fixtures/spec-20/scripts/tool.js.map +1 -0
  12. package/dist/__tests__/fixtures/spec-20/src/demo-module.d.ts +7 -0
  13. package/dist/__tests__/fixtures/spec-20/src/demo-module.d.ts.map +1 -0
  14. package/dist/__tests__/fixtures/spec-20/src/demo-module.js +13 -0
  15. package/dist/__tests__/fixtures/spec-20/src/demo-module.js.map +1 -0
  16. package/dist/analyzers/analyzerUtils.js +2 -2
  17. package/dist/analyzers/analyzerUtils.js.map +1 -1
  18. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts +1 -1
  19. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
  20. package/dist/analyzers/cross-language/APIContractAnalyzer.js +2 -4
  21. package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -1
  22. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts +3 -0
  23. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts.map +1 -1
  24. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js +3 -5
  25. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js.map +1 -1
  26. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
  27. package/dist/analyzers/cross-language/DependencyGraphBuilder.js +0 -3
  28. package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
  29. package/dist/analyzers/cross-language/SchemaValidator.d.ts +1 -1
  30. package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
  31. package/dist/analyzers/cross-language/SchemaValidator.js +2 -5
  32. package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
  33. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +83 -0
  34. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -0
  35. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +611 -0
  36. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -0
  37. package/dist/analyzers/documentationAnalyzer.d.ts.map +1 -1
  38. package/dist/analyzers/documentationAnalyzer.js +8 -4
  39. package/dist/analyzers/documentationAnalyzer.js.map +1 -1
  40. package/dist/analyzers/orm/adapterRegistry.d.ts +41 -0
  41. package/dist/analyzers/orm/adapterRegistry.d.ts.map +1 -0
  42. package/dist/analyzers/orm/adapterRegistry.js +73 -0
  43. package/dist/analyzers/orm/adapterRegistry.js.map +1 -0
  44. package/dist/analyzers/orm/drizzleAdapter.d.ts +42 -0
  45. package/dist/analyzers/orm/drizzleAdapter.d.ts.map +1 -0
  46. package/dist/analyzers/orm/drizzleAdapter.js +166 -0
  47. package/dist/analyzers/orm/drizzleAdapter.js.map +1 -0
  48. package/dist/analyzers/orm/index.d.ts +14 -0
  49. package/dist/analyzers/orm/index.d.ts.map +1 -0
  50. package/dist/analyzers/orm/index.js +24 -0
  51. package/dist/analyzers/orm/index.js.map +1 -0
  52. package/dist/analyzers/orm/prismaAdapter.d.ts +45 -0
  53. package/dist/analyzers/orm/prismaAdapter.d.ts.map +1 -0
  54. package/dist/analyzers/orm/prismaAdapter.js +170 -0
  55. package/dist/analyzers/orm/prismaAdapter.js.map +1 -0
  56. package/dist/analyzers/orm/types.d.ts +63 -0
  57. package/dist/analyzers/orm/types.d.ts.map +1 -0
  58. package/dist/analyzers/orm/types.js +10 -0
  59. package/dist/analyzers/orm/types.js.map +1 -0
  60. package/dist/analyzers/provenance.d.ts +133 -0
  61. package/dist/analyzers/provenance.d.ts.map +1 -0
  62. package/dist/analyzers/provenance.js +1041 -0
  63. package/dist/analyzers/provenance.js.map +1 -0
  64. package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
  65. package/dist/analyzers/reactAnalyzer.js +117 -1
  66. package/dist/analyzers/reactAnalyzer.js.map +1 -1
  67. package/dist/analyzers/ruleRegistry.d.ts +38 -0
  68. package/dist/analyzers/ruleRegistry.d.ts.map +1 -0
  69. package/dist/analyzers/ruleRegistry.js +123 -0
  70. package/dist/analyzers/ruleRegistry.js.map +1 -0
  71. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts +58 -0
  72. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -0
  73. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +445 -0
  74. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -0
  75. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +52 -0
  76. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
  77. package/dist/analyzers/universal/UniversalDRYAnalyzer.js +108 -26
  78. package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
  79. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +64 -0
  80. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
  81. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +259 -103
  82. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
  83. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
  84. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +5 -15
  85. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
  86. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
  87. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +10 -10
  88. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
  89. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +25 -0
  90. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
  91. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +250 -59
  92. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
  93. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +103 -0
  94. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -0
  95. package/dist/analyzers/universal/UniversalStylesAnalyzer.js +750 -0
  96. package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -0
  97. package/dist/auditRunner.d.ts.map +1 -1
  98. package/dist/auditRunner.js +483 -3
  99. package/dist/auditRunner.js.map +1 -1
  100. package/dist/baseline.d.ts +98 -0
  101. package/dist/baseline.d.ts.map +1 -0
  102. package/dist/baseline.js +184 -0
  103. package/dist/baseline.js.map +1 -0
  104. package/dist/churn/churnExtractor.d.ts +32 -0
  105. package/dist/churn/churnExtractor.d.ts.map +1 -0
  106. package/dist/churn/churnExtractor.js +261 -0
  107. package/dist/churn/churnExtractor.js.map +1 -0
  108. package/dist/cli.js +1215 -11
  109. package/dist/cli.js.map +1 -1
  110. package/dist/codeIndexDB-enhanced.js +1 -1
  111. package/dist/codeIndexDB-enhanced.js.map +1 -1
  112. package/dist/codeIndexDB.d.ts +101 -0
  113. package/dist/codeIndexDB.d.ts.map +1 -1
  114. package/dist/codeIndexDB.js +661 -5
  115. package/dist/codeIndexDB.js.map +1 -1
  116. package/dist/config/configLoader.d.ts.map +1 -1
  117. package/dist/config/configLoader.js +95 -1
  118. package/dist/config/configLoader.js.map +1 -1
  119. package/dist/config/defaults.d.ts +72 -1
  120. package/dist/config/defaults.d.ts.map +1 -1
  121. package/dist/config/defaults.js +146 -15
  122. package/dist/config/defaults.js.map +1 -1
  123. package/dist/config/pathProfiles.d.ts +38 -0
  124. package/dist/config/pathProfiles.d.ts.map +1 -0
  125. package/dist/config/pathProfiles.js +47 -0
  126. package/dist/config/pathProfiles.js.map +1 -0
  127. package/dist/conventions/conventionMiner.d.ts +63 -0
  128. package/dist/conventions/conventionMiner.d.ts.map +1 -0
  129. package/dist/conventions/conventionMiner.js +696 -0
  130. package/dist/conventions/conventionMiner.js.map +1 -0
  131. package/dist/coverage/coverageService.d.ts +49 -0
  132. package/dist/coverage/coverageService.d.ts.map +1 -0
  133. package/dist/coverage/coverageService.js +117 -0
  134. package/dist/coverage/coverageService.js.map +1 -0
  135. package/dist/coverage/istanbulParser.d.ts +84 -0
  136. package/dist/coverage/istanbulParser.d.ts.map +1 -0
  137. package/dist/coverage/istanbulParser.js +120 -0
  138. package/dist/coverage/istanbulParser.js.map +1 -0
  139. package/dist/coverage/lcovParser.d.ts +40 -0
  140. package/dist/coverage/lcovParser.d.ts.map +1 -0
  141. package/dist/coverage/lcovParser.js +168 -0
  142. package/dist/coverage/lcovParser.js.map +1 -0
  143. package/dist/fingerprint.d.ts +17 -0
  144. package/dist/fingerprint.d.ts.map +1 -1
  145. package/dist/fingerprint.js +42 -0
  146. package/dist/fingerprint.js.map +1 -1
  147. package/dist/grammars/tree-sitter-css.wasm +0 -0
  148. package/dist/graph/blastRadius.d.ts +27 -0
  149. package/dist/graph/blastRadius.d.ts.map +1 -0
  150. package/dist/graph/blastRadius.js +150 -0
  151. package/dist/graph/blastRadius.js.map +1 -0
  152. package/dist/graph/callGraph.d.ts +78 -0
  153. package/dist/graph/callGraph.d.ts.map +1 -0
  154. package/dist/graph/callGraph.js +484 -0
  155. package/dist/graph/callGraph.js.map +1 -0
  156. package/dist/graph/importGraph.d.ts +91 -0
  157. package/dist/graph/importGraph.d.ts.map +1 -0
  158. package/dist/graph/importGraph.js +602 -0
  159. package/dist/graph/importGraph.js.map +1 -0
  160. package/dist/graph/outputFormatter.d.ts +55 -0
  161. package/dist/graph/outputFormatter.d.ts.map +1 -0
  162. package/dist/graph/outputFormatter.js +283 -0
  163. package/dist/graph/outputFormatter.js.map +1 -0
  164. package/dist/hooks/codex.d.ts +36 -1
  165. package/dist/hooks/codex.d.ts.map +1 -1
  166. package/dist/hooks/codex.js +88 -54
  167. package/dist/hooks/codex.js.map +1 -1
  168. package/dist/hotspots/hotspotScorer.d.ts +20 -0
  169. package/dist/hotspots/hotspotScorer.d.ts.map +1 -0
  170. package/dist/hotspots/hotspotScorer.js +202 -0
  171. package/dist/hotspots/hotspotScorer.js.map +1 -0
  172. package/dist/invariants/invariant-rules.schema.json +42 -1
  173. package/dist/invariants/ruleEngine.d.ts +4 -1
  174. package/dist/invariants/ruleEngine.d.ts.map +1 -1
  175. package/dist/invariants/ruleEngine.js +141 -5
  176. package/dist/invariants/ruleEngine.js.map +1 -1
  177. package/dist/invariants/ruleValidator.d.ts.map +1 -1
  178. package/dist/invariants/ruleValidator.js +62 -1
  179. package/dist/invariants/ruleValidator.js.map +1 -1
  180. package/dist/invariants/types.d.ts +23 -2
  181. package/dist/invariants/types.d.ts.map +1 -1
  182. package/dist/languages/UniversalAnalyzer.d.ts +1 -1
  183. package/dist/languages/UniversalAnalyzer.d.ts.map +1 -1
  184. package/dist/languages/UniversalAnalyzer.js +59 -24
  185. package/dist/languages/UniversalAnalyzer.js.map +1 -1
  186. package/dist/languages/index.d.ts +1 -0
  187. package/dist/languages/index.d.ts.map +1 -1
  188. package/dist/languages/index.js +3 -0
  189. package/dist/languages/index.js.map +1 -1
  190. package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts +59 -0
  191. package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts.map +1 -0
  192. package/dist/languages/tree-sitter/TreeSitterCssAdapter.js +236 -0
  193. package/dist/languages/tree-sitter/TreeSitterCssAdapter.js.map +1 -0
  194. package/dist/languages/tree-sitter/parser.d.ts.map +1 -1
  195. package/dist/languages/tree-sitter/parser.js +2 -0
  196. package/dist/languages/tree-sitter/parser.js.map +1 -1
  197. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
  198. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +61 -10
  199. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
  200. package/dist/ledger.d.ts +128 -0
  201. package/dist/ledger.d.ts.map +1 -0
  202. package/dist/ledger.js +345 -0
  203. package/dist/ledger.js.map +1 -0
  204. package/dist/mcp-tools/projectTasks.d.ts.map +1 -1
  205. package/dist/mcp-tools/projectTasks.js +9 -14
  206. package/dist/mcp-tools/projectTasks.js.map +1 -1
  207. package/dist/mcp.js +0 -0
  208. package/dist/mcpAuditJobs.d.ts.map +1 -1
  209. package/dist/mcpAuditJobs.js +3 -0
  210. package/dist/mcpAuditJobs.js.map +1 -1
  211. package/dist/reporting/csvReportGenerator.d.ts.map +1 -1
  212. package/dist/reporting/csvReportGenerator.js +7 -1
  213. package/dist/reporting/csvReportGenerator.js.map +1 -1
  214. package/dist/reporting/htmlReportGenerator.d.ts.map +1 -1
  215. package/dist/reporting/htmlReportGenerator.js +5 -1
  216. package/dist/reporting/htmlReportGenerator.js.map +1 -1
  217. package/dist/reporting/jsonReportGenerator.d.ts.map +1 -1
  218. package/dist/reporting/jsonReportGenerator.js +10 -2
  219. package/dist/reporting/jsonReportGenerator.js.map +1 -1
  220. package/dist/reporting/sarifReportGenerator.d.ts.map +1 -1
  221. package/dist/reporting/sarifReportGenerator.js +17 -17
  222. package/dist/reporting/sarifReportGenerator.js.map +1 -1
  223. package/dist/scripts/runBench.d.ts +94 -0
  224. package/dist/scripts/runBench.d.ts.map +1 -0
  225. package/dist/scripts/runBench.js +1559 -0
  226. package/dist/scripts/runBench.js.map +1 -0
  227. package/dist/search/QueryParser.d.ts.map +1 -1
  228. package/dist/search/QueryParser.js +51 -4
  229. package/dist/search/QueryParser.js.map +1 -1
  230. package/dist/services/CodeMapGenerator.d.ts +33 -0
  231. package/dist/services/CodeMapGenerator.d.ts.map +1 -1
  232. package/dist/services/CodeMapGenerator.js +404 -0
  233. package/dist/services/CodeMapGenerator.js.map +1 -1
  234. package/dist/styles/normalizer.d.ts +37 -0
  235. package/dist/styles/normalizer.d.ts.map +1 -0
  236. package/dist/styles/normalizer.js +301 -0
  237. package/dist/styles/normalizer.js.map +1 -0
  238. package/dist/styles/styleExtractor.d.ts +38 -0
  239. package/dist/styles/styleExtractor.d.ts.map +1 -0
  240. package/dist/styles/styleExtractor.js +630 -0
  241. package/dist/styles/styleExtractor.js.map +1 -0
  242. package/dist/styles/styleIndexer.d.ts +35 -0
  243. package/dist/styles/styleIndexer.d.ts.map +1 -0
  244. package/dist/styles/styleIndexer.js +266 -0
  245. package/dist/styles/styleIndexer.js.map +1 -0
  246. package/dist/styles/tailwindConfigLoader.d.ts +38 -0
  247. package/dist/styles/tailwindConfigLoader.d.ts.map +1 -0
  248. package/dist/styles/tailwindConfigLoader.js +374 -0
  249. package/dist/styles/tailwindConfigLoader.js.map +1 -0
  250. package/dist/styles/tailwindExpander.d.ts +38 -0
  251. package/dist/styles/tailwindExpander.d.ts.map +1 -0
  252. package/dist/styles/tailwindExpander.js +637 -0
  253. package/dist/styles/tailwindExpander.js.map +1 -0
  254. package/dist/styles/types.d.ts +92 -0
  255. package/dist/styles/types.d.ts.map +1 -0
  256. package/dist/styles/types.js +10 -0
  257. package/dist/styles/types.js.map +1 -0
  258. package/dist/symbols.d.ts +21 -0
  259. package/dist/symbols.d.ts.map +1 -0
  260. package/dist/symbols.js +31 -0
  261. package/dist/symbols.js.map +1 -0
  262. package/dist/types.d.ts +326 -3
  263. package/dist/types.d.ts.map +1 -1
  264. package/dist/types.js.map +1 -1
  265. package/package.json +9 -5
  266. package/plugin/.claude-plugin/plugin.json +1 -1
  267. package/plugin/scripts/hook-audit.sh +5 -1
  268. package/plugin/skills/code-auditor/SKILL.md +51 -0
  269. package/dist/analyzers/__tests__/fixtures/spec-17/anonymous-callback-map.d.ts +0 -21
  270. package/dist/analyzers/__tests__/fixtures/spec-17/anonymous-callback-map.d.ts.map +0 -1
  271. package/dist/analyzers/__tests__/fixtures/spec-17/anonymous-callback-map.js +0 -21
  272. package/dist/analyzers/__tests__/fixtures/spec-17/anonymous-callback-map.js.map +0 -1
  273. package/dist/analyzers/__tests__/fixtures/spec-17/barrel-test-migration.d.ts +0 -13
  274. package/dist/analyzers/__tests__/fixtures/spec-17/barrel-test-migration.d.ts.map +0 -1
  275. package/dist/analyzers/__tests__/fixtures/spec-17/barrel-test-migration.js +0 -12
  276. package/dist/analyzers/__tests__/fixtures/spec-17/barrel-test-migration.js.map +0 -1
  277. package/dist/analyzers/__tests__/fixtures/spec-17/direct-access-allow-config.d.ts +0 -11
  278. package/dist/analyzers/__tests__/fixtures/spec-17/direct-access-allow-config.d.ts.map +0 -1
  279. package/dist/analyzers/__tests__/fixtures/spec-17/direct-access-allow-config.js +0 -22
  280. package/dist/analyzers/__tests__/fixtures/spec-17/direct-access-allow-config.js.map +0 -1
  281. package/dist/analyzers/__tests__/fixtures/spec-17/exported-undocumented.d.ts +0 -9
  282. package/dist/analyzers/__tests__/fixtures/spec-17/exported-undocumented.d.ts.map +0 -1
  283. package/dist/analyzers/__tests__/fixtures/spec-17/exported-undocumented.js +0 -13
  284. package/dist/analyzers/__tests__/fixtures/spec-17/exported-undocumented.js.map +0 -1
  285. package/dist/analyzers/__tests__/fixtures/spec-17/for-loop-query.d.ts +0 -13
  286. package/dist/analyzers/__tests__/fixtures/spec-17/for-loop-query.d.ts.map +0 -1
  287. package/dist/analyzers/__tests__/fixtures/spec-17/for-loop-query.js +0 -18
  288. package/dist/analyzers/__tests__/fixtures/spec-17/for-loop-query.js.map +0 -1
  289. package/dist/analyzers/__tests__/fixtures/spec-17/import-node-builtin.d.ts +0 -10
  290. package/dist/analyzers/__tests__/fixtures/spec-17/import-node-builtin.d.ts.map +0 -1
  291. package/dist/analyzers/__tests__/fixtures/spec-17/import-node-builtin.js +0 -16
  292. package/dist/analyzers/__tests__/fixtures/spec-17/import-node-builtin.js.map +0 -1
  293. package/dist/analyzers/__tests__/fixtures/spec-17/jsx-event-handler.d.ts +0 -14
  294. package/dist/analyzers/__tests__/fixtures/spec-17/jsx-event-handler.d.ts.map +0 -1
  295. package/dist/analyzers/__tests__/fixtures/spec-17/jsx-event-handler.js +0 -18
  296. package/dist/analyzers/__tests__/fixtures/spec-17/jsx-event-handler.js.map +0 -1
  297. package/dist/analyzers/__tests__/fixtures/spec-17/nested-loops-query.d.ts +0 -13
  298. package/dist/analyzers/__tests__/fixtures/spec-17/nested-loops-query.d.ts.map +0 -1
  299. package/dist/analyzers/__tests__/fixtures/spec-17/nested-loops-query.js +0 -22
  300. package/dist/analyzers/__tests__/fixtures/spec-17/nested-loops-query.js.map +0 -1
  301. package/dist/analyzers/__tests__/fixtures/spec-17/nine-line-repeated.d.ts +0 -10
  302. package/dist/analyzers/__tests__/fixtures/spec-17/nine-line-repeated.d.ts.map +0 -1
  303. package/dist/analyzers/__tests__/fixtures/spec-17/nine-line-repeated.js +0 -20
  304. package/dist/analyzers/__tests__/fixtures/spec-17/nine-line-repeated.js.map +0 -1
  305. package/dist/analyzers/__tests__/fixtures/spec-17/private-methods.d.ts +0 -18
  306. package/dist/analyzers/__tests__/fixtures/spec-17/private-methods.d.ts.map +0 -1
  307. package/dist/analyzers/__tests__/fixtures/spec-17/private-methods.js +0 -28
  308. package/dist/analyzers/__tests__/fixtures/spec-17/private-methods.js.map +0 -1
  309. package/dist/analyzers/__tests__/fixtures/spec-17/scope-all-config.d.ts +0 -11
  310. package/dist/analyzers/__tests__/fixtures/spec-17/scope-all-config.d.ts.map +0 -1
  311. package/dist/analyzers/__tests__/fixtures/spec-17/scope-all-config.js +0 -31
  312. package/dist/analyzers/__tests__/fixtures/spec-17/scope-all-config.js.map +0 -1
  313. package/dist/analyzers/__tests__/fixtures/spec-17/sql-tagged-template.d.ts +0 -11
  314. package/dist/analyzers/__tests__/fixtures/spec-17/sql-tagged-template.d.ts.map +0 -1
  315. package/dist/analyzers/__tests__/fixtures/spec-17/sql-tagged-template.js +0 -18
  316. package/dist/analyzers/__tests__/fixtures/spec-17/sql-tagged-template.js.map +0 -1
  317. package/dist/analyzers/__tests__/fixtures/spec-17/structural-similar-methods.d.ts +0 -13
  318. package/dist/analyzers/__tests__/fixtures/spec-17/structural-similar-methods.d.ts.map +0 -1
  319. package/dist/analyzers/__tests__/fixtures/spec-17/structural-similar-methods.js +0 -61
  320. package/dist/analyzers/__tests__/fixtures/spec-17/structural-similar-methods.js.map +0 -1
  321. package/dist/analyzers/__tests__/fixtures/spec-17/template-prefix-table.d.ts +0 -10
  322. package/dist/analyzers/__tests__/fixtures/spec-17/template-prefix-table.d.ts.map +0 -1
  323. package/dist/analyzers/__tests__/fixtures/spec-17/template-prefix-table.js +0 -15
  324. package/dist/analyzers/__tests__/fixtures/spec-17/template-prefix-table.js.map +0 -1
  325. package/dist/analyzers/__tests__/fixtures/spec-17/token-identical-20-lines.d.ts +0 -11
  326. package/dist/analyzers/__tests__/fixtures/spec-17/token-identical-20-lines.d.ts.map +0 -1
  327. package/dist/analyzers/__tests__/fixtures/spec-17/token-identical-20-lines.js +0 -49
  328. package/dist/analyzers/__tests__/fixtures/spec-17/token-identical-20-lines.js.map +0 -1
  329. package/dist/analyzers/__tests__/fixtures/spec-17/tsx-no-db-usage.d.ts +0 -10
  330. package/dist/analyzers/__tests__/fixtures/spec-17/tsx-no-db-usage.d.ts.map +0 -1
  331. package/dist/analyzers/__tests__/fixtures/spec-17/tsx-no-db-usage.js +0 -19
  332. package/dist/analyzers/__tests__/fixtures/spec-17/tsx-no-db-usage.js.map +0 -1
  333. package/dist/analyzers/__tests__/fixtures/spec-17/twenty-methods-vs-complex.d.ts +0 -37
  334. package/dist/analyzers/__tests__/fixtures/spec-17/twenty-methods-vs-complex.d.ts.map +0 -1
  335. package/dist/analyzers/__tests__/fixtures/spec-17/twenty-methods-vs-complex.js +0 -73
  336. package/dist/analyzers/__tests__/fixtures/spec-17/twenty-methods-vs-complex.js.map +0 -1
  337. package/dist/analyzers/__tests__/fixtures/spec-17/unique-method-74-lines.d.ts +0 -12
  338. package/dist/analyzers/__tests__/fixtures/spec-17/unique-method-74-lines.d.ts.map +0 -1
  339. package/dist/analyzers/__tests__/fixtures/spec-17/unique-method-74-lines.js +0 -82
  340. package/dist/analyzers/__tests__/fixtures/spec-17/unique-method-74-lines.js.map +0 -1
  341. package/dist/analyzers/__tests__/fixtures/spec-17/word-the-in-comment.d.ts +0 -10
  342. package/dist/analyzers/__tests__/fixtures/spec-17/word-the-in-comment.d.ts.map +0 -1
  343. package/dist/analyzers/__tests__/fixtures/spec-17/word-the-in-comment.js +0 -15
  344. package/dist/analyzers/__tests__/fixtures/spec-17/word-the-in-comment.js.map +0 -1
  345. package/dist/analyzers/dataAccessAnalyzer.d.ts +0 -46
  346. package/dist/analyzers/dataAccessAnalyzer.d.ts.map +0 -1
  347. package/dist/analyzers/dataAccessAnalyzer.js +0 -474
  348. package/dist/analyzers/dataAccessAnalyzer.js.map +0 -1
  349. package/dist/analyzers/dryAnalyzer.d.ts +0 -31
  350. package/dist/analyzers/dryAnalyzer.d.ts.map +0 -1
  351. package/dist/analyzers/dryAnalyzer.js +0 -734
  352. package/dist/analyzers/dryAnalyzer.js.map +0 -1
  353. package/dist/analyzers/schemaAnalyzer.d.ts +0 -23
  354. package/dist/analyzers/schemaAnalyzer.d.ts.map +0 -1
  355. package/dist/analyzers/schemaAnalyzer.js +0 -564
  356. package/dist/analyzers/schemaAnalyzer.js.map +0 -1
  357. package/dist/analyzers/solidAnalyzer.d.ts +0 -33
  358. package/dist/analyzers/solidAnalyzer.d.ts.map +0 -1
  359. package/dist/analyzers/solidAnalyzer.js +0 -847
  360. package/dist/analyzers/solidAnalyzer.js.map +0 -1
@@ -0,0 +1,630 @@
1
+ /**
2
+ * Style declaration extractor — Spec 10.
3
+ *
4
+ * Extracts normalized declarations from all five style mechanisms:
5
+ * 1. CSS/SCSS files — tree-sitter-css parsed rule sets
6
+ * 2. Tailwind — className/class attributes in JSX/HTML
7
+ * 3. Inline styles — style={{...}} object expressions
8
+ * 4. CSS-in-JS — styled-components / emotion tagged templates
9
+ * 5. Design tokens — CSS custom property definitions
10
+ *
11
+ * Single entry point: extractDeclarations(filePath, adapter, sourceCode, ast?)
12
+ */
13
+ import { normalizeValue, expandShorthand } from './normalizer.js';
14
+ import { expandUtility } from './tailwindExpander.js';
15
+ import { loadTailwindConfig } from './tailwindConfigLoader.js';
16
+ // ---------------------------------------------------------------------------
17
+ // Public API
18
+ // ---------------------------------------------------------------------------
19
+ /**
20
+ * Extract all style declarations from a file.
21
+ *
22
+ * Dispatches to the correct sub-extractor based on file extension.
23
+ * Returns an empty array for files that don't contain styles.
24
+ *
25
+ * @param filePath - Project-relative file path
26
+ * @param adapter - Language adapter for this file
27
+ * @param sourceCode - Raw file content
28
+ * @param ast - Optional pre-parsed AST (avoids re-parsing)
29
+ * @param tailwindTokens - Optional pre-loaded Tailwind tokens (avoids re-loading per file)
30
+ */
31
+ export function extractDeclarations(filePath, adapter, sourceCode, ast, tailwindTokens) {
32
+ const ext = filePath.includes('.') ? filePath.slice(filePath.lastIndexOf('.')) : '';
33
+ switch (ext) {
34
+ case '.css':
35
+ return extractFromCSS(filePath, sourceCode, 'css');
36
+ case '.scss':
37
+ return extractFromCSS(filePath, sourceCode, 'scss');
38
+ case '.tsx':
39
+ case '.jsx':
40
+ case '.ts':
41
+ case '.js':
42
+ return extractFromTypeScript(filePath, adapter, sourceCode, ast, tailwindTokens);
43
+ case '.html':
44
+ case '.vue':
45
+ case '.svelte':
46
+ // HTML/Vue/Svelte: extract class attributes only (limited support)
47
+ return extractFromHTML(filePath, sourceCode, tailwindTokens);
48
+ default:
49
+ return [];
50
+ }
51
+ }
52
+ /**
53
+ * Extract CSS custom property definitions from all CSS/SCSS files
54
+ * and produce design tokens.
55
+ */
56
+ export function extractTokens(filePath, sourceCode) {
57
+ const ext = filePath.includes('.') ? filePath.slice(filePath.lastIndexOf('.')) : '';
58
+ if (ext !== '.css' && ext !== '.scss')
59
+ return [];
60
+ const tokens = [];
61
+ const varRegex = /--([a-zA-Z0-9_-]+)\s*:\s*([^;};]+)/g;
62
+ let match;
63
+ while ((match = varRegex.exec(sourceCode)) !== null) {
64
+ const name = match[1].trim();
65
+ const value = match[2].trim();
66
+ if (name && value) {
67
+ tokens.push({
68
+ name: `--${name}`,
69
+ value,
70
+ filePath,
71
+ mechanism: 'css-custom-property',
72
+ });
73
+ }
74
+ }
75
+ return tokens;
76
+ }
77
+ /**
78
+ * Load Tailwind tokens, optionally from a cached result.
79
+ */
80
+ export function getOrLoadTailwindTokens(projectRoot, existing) {
81
+ if (existing)
82
+ return existing;
83
+ return loadTailwindConfig(projectRoot).tokens;
84
+ }
85
+ // ---------------------------------------------------------------------------
86
+ // Sub-extractor: CSS / SCSS
87
+ // ---------------------------------------------------------------------------
88
+ function extractFromCSS(filePath, sourceCode, mechanism) {
89
+ const declarations = [];
90
+ // Extract rule set contents
91
+ // We use regex for extraction because the CSS adapter's AST walk is heavy
92
+ // and we only need declaration extraction, not structural analysis.
93
+ extractRuleSets(sourceCode, filePath, mechanism, declarations);
94
+ return declarations;
95
+ }
96
+ /**
97
+ * Parse CSS content using regex to extract rule sets and their declarations.
98
+ *
99
+ * This is a pragmatic approach: regex is simpler and faster than full tree-sitter
100
+ * parsing for declaration extraction. The tree-sitter adapter handles structural
101
+ * analysis when needed.
102
+ */
103
+ function extractRuleSets(css, filePath, mechanism, declarations) {
104
+ // Track current context (selector, at-rule)
105
+ const lines = css.split('\n');
106
+ // Regex approach: find rule blocks with their selectors
107
+ let i = 0;
108
+ let atRuleStack = [];
109
+ while (i < css.length) {
110
+ // Skip whitespace and comments
111
+ if (css[i] === '/' && css[i + 1] === '*') {
112
+ const end = css.indexOf('*/', i + 2);
113
+ if (end === -1)
114
+ break;
115
+ i = end + 2;
116
+ continue;
117
+ }
118
+ if (css[i] === '/' && css[i + 1] === '/') {
119
+ const end = css.indexOf('\n', i);
120
+ if (end === -1)
121
+ break;
122
+ i = end + 1;
123
+ continue;
124
+ }
125
+ // Detect @-rules
126
+ if (css[i] === '@') {
127
+ const semiIdx = css.indexOf(';', i);
128
+ const braceIdx = css.indexOf('{', i);
129
+ const endIdx = semiIdx !== -1 && semiIdx < (braceIdx !== -1 ? braceIdx : Infinity)
130
+ ? semiIdx : braceIdx;
131
+ if (endIdx !== -1) {
132
+ const atRule = css.slice(i + 1, endIdx).trim().split(/\s+/)[0];
133
+ const afterAt = css.slice(i + 1, endIdx).trim();
134
+ if (braceIdx !== -1 && braceIdx === endIdx) {
135
+ // @media, @supports, @keyframes — has a block
136
+ atRuleStack.push(afterAt);
137
+ i = braceIdx + 1;
138
+ }
139
+ else {
140
+ // @import, @charset — no block
141
+ i = endIdx + 1;
142
+ }
143
+ continue;
144
+ }
145
+ }
146
+ // Find the start of a rule set: selector { ... }
147
+ const braceOpen = css.indexOf('{', i);
148
+ if (braceOpen === -1)
149
+ break;
150
+ // Extract the selector (everything between last } and {)
151
+ const selectorStart = findSelectorStart(css, braceOpen);
152
+ const selector = css.slice(selectorStart, braceOpen).trim();
153
+ if (!selector || selector === '}' || selector.startsWith('@')) {
154
+ i = braceOpen + 1;
155
+ continue;
156
+ }
157
+ // Find matching closing brace
158
+ const braceClose = findMatchingBrace(css, braceOpen);
159
+ if (braceClose === -1) {
160
+ i = braceOpen + 1;
161
+ continue;
162
+ }
163
+ // Extract declarations inside this block
164
+ const block = css.slice(braceOpen + 1, braceClose);
165
+ extractDeclarationsFromBlock(block, filePath, mechanism, selector, atRuleStack.length > 0 ? atRuleStack.join(', ') : null, declarations, css.slice(0, braceOpen).split('\n').length);
166
+ i = braceClose + 1;
167
+ }
168
+ }
169
+ function findSelectorStart(css, braceOpen) {
170
+ // Walk backwards from braceOpen, skip whitespace
171
+ let i = braceOpen - 1;
172
+ while (i >= 0 && (css[i] === ' ' || css[i] === '\t' || css[i] === '\n' || css[i] === '\r')) {
173
+ i--;
174
+ }
175
+ if (i < 0)
176
+ return 0;
177
+ // Now find the start of this selector: previous } or start of file
178
+ // Walk backwards finding the start of the line or previous closing brace
179
+ let depth = 0;
180
+ while (i >= 0) {
181
+ if (css[i] === '}') {
182
+ depth++;
183
+ i--;
184
+ }
185
+ else if (css[i] === '{') {
186
+ depth--;
187
+ if (depth < 0) {
188
+ // We hit an opening brace — selector starts after it
189
+ return i + 1;
190
+ }
191
+ i--;
192
+ }
193
+ else {
194
+ i--;
195
+ }
196
+ }
197
+ return 0;
198
+ }
199
+ function findMatchingBrace(css, openIdx) {
200
+ let depth = 1;
201
+ let i = openIdx + 1;
202
+ while (i < css.length && depth > 0) {
203
+ if (css[i] === '{')
204
+ depth++;
205
+ else if (css[i] === '}')
206
+ depth--;
207
+ // Skip strings
208
+ else if (css[i] === '"' || css[i] === "'") {
209
+ const quote = css[i];
210
+ i++;
211
+ while (i < css.length && css[i] !== quote) {
212
+ if (css[i] === '\\')
213
+ i++;
214
+ i++;
215
+ }
216
+ }
217
+ else if (css[i] === '/' && css[i + 1] === '*') {
218
+ const end = css.indexOf('*/', i + 2);
219
+ if (end === -1)
220
+ return -1;
221
+ i = end + 1;
222
+ continue;
223
+ }
224
+ i++;
225
+ }
226
+ return depth === 0 ? i - 1 : -1;
227
+ }
228
+ function extractDeclarationsFromBlock(block, filePath, mechanism, selector, variantContext, declarations, baseLine) {
229
+ const lines = block.split('\n');
230
+ // Parse each line for property: value; declarations
231
+ let lineInBlock = 0;
232
+ let buffer = '';
233
+ let inComment = false;
234
+ for (const line of lines) {
235
+ lineInBlock++;
236
+ const trimmed = line.trim();
237
+ // Skip empty lines
238
+ if (!trimmed) {
239
+ if (buffer) {
240
+ // Multi-line value continuation
241
+ buffer += ' ';
242
+ continue;
243
+ }
244
+ continue;
245
+ }
246
+ // Handle block comments inside the block
247
+ if (inComment) {
248
+ const end = trimmed.indexOf('*/');
249
+ if (end !== -1) {
250
+ buffer = trimmed.slice(end + 2).trim();
251
+ inComment = false;
252
+ }
253
+ else {
254
+ continue;
255
+ }
256
+ }
257
+ // Check for comment starts
258
+ const commentStart = trimmed.indexOf('/*');
259
+ if (commentStart !== -1) {
260
+ const before = trimmed.slice(0, commentStart).trim();
261
+ if (before)
262
+ buffer += (buffer ? ' ' : '') + before;
263
+ const afterComment = trimmed.indexOf('*/', commentStart + 2);
264
+ if (afterComment !== -1) {
265
+ const after = trimmed.slice(afterComment + 2).trim();
266
+ if (after)
267
+ buffer += (buffer ? ' ' : '') + after;
268
+ }
269
+ else {
270
+ inComment = true;
271
+ continue;
272
+ }
273
+ }
274
+ buffer += (buffer ? ' ' : '') + trimmed;
275
+ // Check if this buffer contains a complete declaration
276
+ if (buffer.includes(':')) {
277
+ const semiIdx = buffer.indexOf(';');
278
+ if (semiIdx !== -1) {
279
+ const decl = buffer.slice(0, semiIdx).trim();
280
+ const rest = buffer.slice(semiIdx + 1).trim();
281
+ buffer = rest;
282
+ const colonIdx = decl.indexOf(':');
283
+ if (colonIdx !== -1) {
284
+ const property = decl.slice(0, colonIdx).trim();
285
+ const rawValue = decl.slice(colonIdx + 1).trim();
286
+ if (property && rawValue && !property.includes('{') && !rawValue.includes('{')) {
287
+ const normalizedValue = normalizeValue(rawValue, property);
288
+ // Expand shorthands
289
+ const expanded = expandShorthand(property, rawValue, normalizedValue);
290
+ for (const exp of expanded) {
291
+ declarations.push({
292
+ property: exp.property,
293
+ rawValue: exp.rawValue,
294
+ normalizedValue: exp.normalizedValue,
295
+ mechanism,
296
+ filePath,
297
+ line: baseLine + lineInBlock,
298
+ context: selector,
299
+ variantContext,
300
+ tokenRef: rawValue.startsWith('var(--') ? extractTokenRef(rawValue) : null,
301
+ });
302
+ }
303
+ }
304
+ }
305
+ }
306
+ }
307
+ }
308
+ }
309
+ // ---------------------------------------------------------------------------
310
+ // Sub-extractor: TypeScript / JSX
311
+ // ---------------------------------------------------------------------------
312
+ function extractFromTypeScript(filePath, adapter, sourceCode, ast, tailwindTokens) {
313
+ const declarations = [];
314
+ if (!ast)
315
+ return declarations;
316
+ // Walk the AST to find style-related nodes
317
+ walkASTNodes(ast.root, (node) => {
318
+ const nodeType = node.type;
319
+ // 1. className/class attributes → Tailwind
320
+ if (extractFromClassName(node, sourceCode, filePath, tailwindTokens, declarations))
321
+ return;
322
+ // 2. style={{...}} attributes → Inline styles
323
+ if (extractFromInlineStyle(node, sourceCode, filePath, declarations))
324
+ return;
325
+ // 3. styled.div`...` / css`...` → CSS-in-JS
326
+ if (extractFromCSSinJS(node, sourceCode, filePath, declarations))
327
+ return;
328
+ });
329
+ return declarations;
330
+ }
331
+ // ---------------------------------------------------------------------------
332
+ // Tailwind (className/class)
333
+ // ---------------------------------------------------------------------------
334
+ function extractFromClassName(node, sourceCode, filePath, tailwindTokens, declarations) {
335
+ if (node.type !== 'jsx_attribute')
336
+ return false;
337
+ // Get the attribute name
338
+ const attrName = getJSXAttributeName(node, sourceCode);
339
+ if (!attrName || !['className', 'class', 'classname'].includes(attrName))
340
+ return false;
341
+ // Get the attribute value
342
+ const valueNode = findChildByType(node, 'string');
343
+ if (valueNode) {
344
+ // Static string: className="flex bg-red-500"
345
+ let rawValue = sourceCode.slice(valueNode.range[0], valueNode.range[1]);
346
+ // Strip quotes
347
+ if ((rawValue.startsWith('"') && rawValue.endsWith('"')) ||
348
+ (rawValue.startsWith("'") && rawValue.endsWith("'"))) {
349
+ rawValue = rawValue.slice(1, -1);
350
+ }
351
+ const classNames = rawValue.split(/\s+/).filter(Boolean);
352
+ const line = getLine(sourceCode, valueNode.range[0]);
353
+ if (tailwindTokens) {
354
+ for (const className of classNames) {
355
+ const expanded = expandUtility(className, tailwindTokens, filePath, line);
356
+ declarations.push(...expanded);
357
+ }
358
+ }
359
+ else {
360
+ // Without tokens, record class usage for later token resolution
361
+ for (const className of classNames) {
362
+ declarations.push({
363
+ property: 'class',
364
+ rawValue: className,
365
+ normalizedValue: { type: 'literal', value: className },
366
+ mechanism: 'tailwind',
367
+ filePath,
368
+ line,
369
+ context: null,
370
+ variantContext: null,
371
+ tokenRef: null,
372
+ });
373
+ }
374
+ }
375
+ }
376
+ else {
377
+ // Dynamic expression: className={clsx(...)} or className={`...`}
378
+ const exprNode = findChildByType(node, 'jsx_expression');
379
+ if (exprNode) {
380
+ const line = getLine(sourceCode, node.range[0]);
381
+ const exprText = sourceCode.slice(exprNode.range[0], exprNode.range[1]);
382
+ const classNames = extractStaticStringsFromExpression(exprText);
383
+ if (tailwindTokens && classNames.length > 0) {
384
+ for (const className of classNames) {
385
+ const expanded = expandUtility(className, tailwindTokens, filePath, line);
386
+ declarations.push(...expanded);
387
+ }
388
+ }
389
+ // Mark as potentially unresolvable (for R3.3 exempt handling)
390
+ if (exprText.includes('clsx') || exprText.includes('classnames') || exprText.includes('`')) {
391
+ // Record the unresolvable marker as a declaration with null normalized value
392
+ declarations.push({
393
+ property: 'class',
394
+ rawValue: exprText.length > 80 ? exprText.slice(0, 77) + '...' : exprText,
395
+ normalizedValue: null,
396
+ mechanism: 'tailwind',
397
+ filePath,
398
+ line,
399
+ context: null,
400
+ variantContext: null,
401
+ tokenRef: null,
402
+ });
403
+ }
404
+ }
405
+ }
406
+ return true;
407
+ }
408
+ // ---------------------------------------------------------------------------
409
+ // Inline styles (style={{...}})
410
+ // ---------------------------------------------------------------------------
411
+ function extractFromInlineStyle(node, sourceCode, filePath, declarations) {
412
+ if (node.type !== 'jsx_attribute')
413
+ return false;
414
+ const attrName = getJSXAttributeName(node, sourceCode);
415
+ if (attrName !== 'style')
416
+ return false;
417
+ const exprNode = findChildByType(node, 'jsx_expression');
418
+ if (!exprNode)
419
+ return false;
420
+ const line = getLine(sourceCode, node.range[0]);
421
+ const exprText = sourceCode.slice(exprNode.range[0], exprNode.range[1]);
422
+ // Strip { } wrapping
423
+ const inner = exprText.slice(1, -1).trim();
424
+ // Extract static property: value pairs from the object expression
425
+ const propertyPairs = parseStyleObjectExpression(inner);
426
+ for (const { property, value } of propertyPairs) {
427
+ const camelToCss = camelToKebab(property);
428
+ const normalizedValue = normalizeValue(value, camelToCss);
429
+ declarations.push({
430
+ property: camelToCss,
431
+ rawValue: value,
432
+ normalizedValue,
433
+ mechanism: 'inline',
434
+ filePath,
435
+ line,
436
+ context: null,
437
+ variantContext: null,
438
+ tokenRef: value.startsWith('var(--') ? extractTokenRef(value) : null,
439
+ });
440
+ }
441
+ // If there were dynamic parts (template literals, variables), mark them
442
+ if (inner.includes('${') || inner.includes('?') || inner.includes('&&')) {
443
+ declarations.push({
444
+ property: 'style',
445
+ rawValue: inner.length > 80 ? inner.slice(0, 77) + '...' : inner,
446
+ normalizedValue: null,
447
+ mechanism: 'inline',
448
+ filePath,
449
+ line,
450
+ context: null,
451
+ variantContext: null,
452
+ tokenRef: null,
453
+ });
454
+ }
455
+ return true;
456
+ }
457
+ function parseStyleObjectExpression(expr) {
458
+ const pairs = [];
459
+ // Simple regex-based property: value extraction from JS object expressions
460
+ // Handles: property: 'value', property: "value", property: 42, property: 3.14
461
+ const propRegex = /([a-zA-Z_$][a-zA-Z0-9_$]*)\s*:\s*(?:'([^']*)'|"([^"]*)"|([\d.]+))/g;
462
+ let match;
463
+ while ((match = propRegex.exec(expr)) !== null) {
464
+ const property = match[1];
465
+ const value = match[2] ?? match[3] ?? match[4];
466
+ if (property && value !== undefined) {
467
+ pairs.push({ property, value });
468
+ }
469
+ }
470
+ return pairs;
471
+ }
472
+ // ---------------------------------------------------------------------------
473
+ // CSS-in-JS (styled-components / emotion)
474
+ // ---------------------------------------------------------------------------
475
+ function extractFromCSSinJS(node, sourceCode, filePath, declarations) {
476
+ // Tagged template expression: styled.div`...` or css`...`
477
+ if (node.type !== 'tagged_template_expression')
478
+ return false;
479
+ const nodeText = sourceCode.slice(node.range[0], node.range[1]);
480
+ const line = getLine(sourceCode, node.range[0]);
481
+ // Check for styled.xxx or css tag
482
+ const tagMatch = nodeText.match(/^(styled\.[a-zA-Z]+|css|keyframes|createGlobalStyle)\s*(?:\()?\s*`/);
483
+ if (!tagMatch)
484
+ return false;
485
+ // Extract the template literal content
486
+ const templateStart = nodeText.indexOf('`');
487
+ if (templateStart === -1)
488
+ return false;
489
+ // Find the closing backtick (accounting for escape sequences)
490
+ let templateEnd = templateStart + 1;
491
+ while (templateEnd < nodeText.length) {
492
+ if (nodeText[templateEnd] === '`' && nodeText[templateEnd - 1] !== '\\') {
493
+ break;
494
+ }
495
+ templateEnd++;
496
+ }
497
+ const template = nodeText.slice(templateStart + 1, templateEnd);
498
+ // Replace template expressions ${expr} with placeholders for parsing
499
+ const cleanedTemplate = template.replace(/\$\{[^}]*\}/g, '/* dynamic */');
500
+ // Parse the CSS template content
501
+ if (cleanedTemplate.includes(':')) {
502
+ const block = cleanedTemplate;
503
+ extractDeclarationsFromBlock(block, filePath, 'css-in-js', `styled`, null, declarations, line);
504
+ }
505
+ return true;
506
+ }
507
+ // ---------------------------------------------------------------------------
508
+ // Sub-extractor: HTML (limited)
509
+ // ---------------------------------------------------------------------------
510
+ function extractFromHTML(filePath, sourceCode, tailwindTokens) {
511
+ const declarations = [];
512
+ // Simple class attribute extraction from HTML
513
+ const classRegex = /class(Name)?\s*=\s*"([^"]*)"/g;
514
+ let match;
515
+ while ((match = classRegex.exec(sourceCode)) !== null) {
516
+ const classValue = match[2];
517
+ const line = sourceCode.slice(0, match.index).split('\n').length;
518
+ const classNames = classValue.split(/\s+/).filter(Boolean);
519
+ if (tailwindTokens) {
520
+ for (const className of classNames) {
521
+ const expanded = expandUtility(className, tailwindTokens, filePath, line);
522
+ declarations.push(...expanded);
523
+ }
524
+ }
525
+ else {
526
+ for (const className of classNames) {
527
+ declarations.push({
528
+ property: 'class',
529
+ rawValue: className,
530
+ normalizedValue: { type: 'literal', value: className },
531
+ mechanism: 'tailwind',
532
+ filePath,
533
+ line,
534
+ context: null,
535
+ variantContext: null,
536
+ tokenRef: null,
537
+ });
538
+ }
539
+ }
540
+ }
541
+ // Inline style attributes
542
+ const styleRegex = /style\s*=\s*"([^"]*)"/g;
543
+ while ((match = styleRegex.exec(sourceCode)) !== null) {
544
+ const styleValue = match[1];
545
+ const line = sourceCode.slice(0, match.index).split('\n').length;
546
+ // Parse CSS declarations from the style attribute
547
+ const parts = styleValue.split(';').filter(Boolean);
548
+ for (const part of parts) {
549
+ const colonIdx = part.indexOf(':');
550
+ if (colonIdx !== -1) {
551
+ const property = part.slice(0, colonIdx).trim();
552
+ const value = part.slice(colonIdx + 1).trim();
553
+ if (property && value) {
554
+ const normalizedValue = normalizeValue(value, property);
555
+ declarations.push({
556
+ property,
557
+ rawValue: value,
558
+ normalizedValue,
559
+ mechanism: 'inline',
560
+ filePath,
561
+ line,
562
+ context: null,
563
+ variantContext: null,
564
+ tokenRef: null,
565
+ });
566
+ }
567
+ }
568
+ }
569
+ }
570
+ return declarations;
571
+ }
572
+ // ---------------------------------------------------------------------------
573
+ // AST Helpers
574
+ // ---------------------------------------------------------------------------
575
+ function walkASTNodes(node, visitor) {
576
+ visitor(node);
577
+ if (node.children) {
578
+ for (const child of node.children) {
579
+ walkASTNodes(child, visitor);
580
+ }
581
+ }
582
+ }
583
+ function findChildByType(node, type) {
584
+ if (!node.children)
585
+ return null;
586
+ for (const child of node.children) {
587
+ if (child.type === type)
588
+ return child;
589
+ }
590
+ return null;
591
+ }
592
+ function getJSXAttributeName(node, sourceCode) {
593
+ // The attribute name is typically stored in a property_identifier child
594
+ if (!node.children)
595
+ return null;
596
+ for (const child of node.children) {
597
+ if (child.type === 'property_identifier' || child.type === 'identifier') {
598
+ return sourceCode.slice(child.range[0], child.range[1]);
599
+ }
600
+ }
601
+ return null;
602
+ }
603
+ // ---------------------------------------------------------------------------
604
+ // Miscellaneous Helpers
605
+ // ---------------------------------------------------------------------------
606
+ function getLine(sourceCode, offset) {
607
+ return sourceCode.slice(0, offset).split('\n').length;
608
+ }
609
+ function camelToKebab(str) {
610
+ return str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);
611
+ }
612
+ function extractTokenRef(rawValue) {
613
+ const match = rawValue.match(/var\((--[a-zA-Z0-9_-]+)\)/);
614
+ return match ? match[1] : null;
615
+ }
616
+ function extractStaticStringsFromExpression(expr) {
617
+ const strings = [];
618
+ // Extract static string literals from template literals and clsx calls
619
+ const strRegex = /'([^']*)'|"([^"]*)"/g;
620
+ let match;
621
+ while ((match = strRegex.exec(expr)) !== null) {
622
+ const str = match[1] ?? match[2];
623
+ if (str) {
624
+ const parts = str.split(/\s+/).filter(Boolean);
625
+ strings.push(...parts);
626
+ }
627
+ }
628
+ return strings;
629
+ }
630
+ //# sourceMappingURL=styleExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styleExtractor.js","sourceRoot":"","sources":["../../src/styles/styleExtractor.ts"],"names":[],"mappings":"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"}