@codefast/cli 0.3.13-canary.0 → 0.3.13-canary.2

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 (390) hide show
  1. package/dist/bin.d.ts +3 -0
  2. package/dist/bin.d.ts.map +1 -0
  3. package/dist/{bin.mjs → bin.js} +1 -4
  4. package/dist/commands/arrange.d.ts +3 -0
  5. package/dist/commands/arrange.d.ts.map +1 -0
  6. package/dist/commands/arrange.js +129 -0
  7. package/dist/commands/mirror.d.ts +4 -0
  8. package/dist/commands/mirror.d.ts.map +1 -0
  9. package/dist/commands/mirror.js +75 -0
  10. package/dist/commands/tag.d.ts +3 -0
  11. package/dist/commands/tag.d.ts.map +1 -0
  12. package/dist/commands/tag.js +41 -0
  13. package/dist/lib/arrange/application/analyze.d.ts +17 -0
  14. package/dist/lib/arrange/application/analyze.d.ts.map +1 -0
  15. package/dist/lib/arrange/application/analyze.js +24 -0
  16. package/dist/lib/arrange/application/group-file-preview.d.ts +17 -0
  17. package/dist/lib/arrange/application/group-file-preview.d.ts.map +1 -0
  18. package/dist/lib/arrange/application/group-file-preview.js +46 -0
  19. package/dist/lib/arrange/application/group-file.d.ts +5 -0
  20. package/dist/lib/arrange/application/group-file.d.ts.map +1 -0
  21. package/dist/lib/arrange/application/group-file.js +40 -0
  22. package/dist/lib/arrange/application/ports/domain-source-parser.port.d.ts +5 -0
  23. package/dist/lib/arrange/application/ports/domain-source-parser.port.d.ts.map +1 -0
  24. package/dist/lib/arrange/application/ports/file-walker.port.d.ts +5 -0
  25. package/dist/lib/arrange/application/ports/file-walker.port.d.ts.map +1 -0
  26. package/dist/lib/arrange/application/requests/analyze-directory.request.d.ts +6 -0
  27. package/dist/lib/arrange/application/requests/analyze-directory.request.d.ts.map +1 -0
  28. package/dist/lib/arrange/application/requests/analyze-directory.request.js +4 -0
  29. package/dist/lib/arrange/application/requests/arrange-sync.request.d.ts +18 -0
  30. package/dist/lib/arrange/application/requests/arrange-sync.request.d.ts.map +1 -0
  31. package/dist/lib/arrange/application/requests/arrange-sync.request.js +15 -0
  32. package/dist/lib/arrange/application/run-target.d.ts +19 -0
  33. package/dist/lib/arrange/application/run-target.d.ts.map +1 -0
  34. package/dist/lib/arrange/application/run-target.js +85 -0
  35. package/dist/lib/arrange/domain/arrange-analyze.service.d.ts +12 -0
  36. package/dist/lib/arrange/domain/arrange-analyze.service.d.ts.map +1 -0
  37. package/dist/lib/arrange/domain/arrange-analyze.service.js +116 -0
  38. package/dist/lib/arrange/domain/arrange-grouping.service.d.ts +53 -0
  39. package/dist/lib/arrange/domain/arrange-grouping.service.d.ts.map +1 -0
  40. package/dist/lib/arrange/domain/arrange-grouping.service.js +106 -0
  41. package/dist/lib/arrange/domain/ast/ast-helpers.d.ts +28 -0
  42. package/dist/lib/arrange/domain/ast/ast-helpers.d.ts.map +1 -0
  43. package/dist/lib/arrange/domain/ast/ast-helpers.js +130 -0
  44. package/dist/lib/arrange/domain/ast/ast-node.model.d.ts +179 -0
  45. package/dist/lib/arrange/domain/ast/ast-node.model.d.ts.map +1 -0
  46. package/dist/lib/arrange/domain/ast/ast-node.model.js +210 -0
  47. package/dist/lib/arrange/domain/ast/collectors-cn.d.ts +7 -0
  48. package/dist/lib/arrange/domain/ast/collectors-cn.d.ts.map +1 -0
  49. package/dist/lib/arrange/domain/ast/collectors-cn.js +70 -0
  50. package/dist/lib/arrange/domain/ast/collectors-jsx.d.ts +4 -0
  51. package/dist/lib/arrange/domain/ast/collectors-jsx.d.ts.map +1 -0
  52. package/dist/lib/arrange/domain/ast/collectors-jsx.js +21 -0
  53. package/dist/lib/arrange/domain/ast/collectors-tv.d.ts +13 -0
  54. package/dist/lib/arrange/domain/ast/collectors-tv.d.ts.map +1 -0
  55. package/dist/lib/arrange/domain/ast/collectors-tv.js +302 -0
  56. package/dist/lib/arrange/domain/ast/targets.d.ts +8 -0
  57. package/dist/lib/arrange/domain/ast/targets.d.ts.map +1 -0
  58. package/dist/lib/arrange/domain/ast/targets.js +147 -0
  59. package/dist/lib/arrange/domain/constants.d.ts +68 -0
  60. package/dist/lib/arrange/domain/constants.d.ts.map +1 -0
  61. package/dist/lib/arrange/domain/constants.js +180 -0
  62. package/dist/lib/arrange/domain/errors.d.ts +14 -0
  63. package/dist/lib/arrange/domain/errors.d.ts.map +1 -0
  64. package/dist/lib/arrange/domain/errors.js +16 -0
  65. package/dist/lib/arrange/domain/grouping.d.ts +41 -0
  66. package/dist/lib/arrange/domain/grouping.d.ts.map +1 -0
  67. package/dist/lib/arrange/domain/grouping.js +307 -0
  68. package/dist/lib/arrange/domain/imports.d.ts +7 -0
  69. package/dist/lib/arrange/domain/imports.d.ts.map +1 -0
  70. package/dist/lib/arrange/domain/imports.js +80 -0
  71. package/dist/lib/arrange/domain/source-text-formatters.d.ts +16 -0
  72. package/dist/lib/arrange/domain/source-text-formatters.d.ts.map +1 -0
  73. package/dist/lib/arrange/domain/source-text-formatters.js +55 -0
  74. package/dist/lib/arrange/domain/tokenizer.d.ts +45 -0
  75. package/dist/lib/arrange/domain/tokenizer.d.ts.map +1 -0
  76. package/dist/lib/arrange/domain/tokenizer.js +466 -0
  77. package/dist/lib/arrange/domain/types.d.ts +112 -0
  78. package/dist/lib/arrange/domain/types.d.ts.map +1 -0
  79. package/dist/lib/arrange/domain/types.js +7 -0
  80. package/dist/lib/arrange/index.d.ts +45 -0
  81. package/dist/lib/arrange/index.d.ts.map +1 -0
  82. package/dist/lib/arrange/index.js +41 -0
  83. package/dist/lib/arrange/infra/arrange-sync-cli-options.d.ts +14 -0
  84. package/dist/lib/arrange/infra/arrange-sync-cli-options.d.ts.map +1 -0
  85. package/dist/lib/arrange/infra/domain-source-parser.adapter.d.ts +11 -0
  86. package/dist/lib/arrange/infra/domain-source-parser.adapter.d.ts.map +1 -0
  87. package/dist/lib/arrange/infra/domain-source-parser.adapter.js +19 -0
  88. package/dist/lib/arrange/infra/ensure-cn-import.d.ts +3 -0
  89. package/dist/lib/arrange/infra/ensure-cn-import.d.ts.map +1 -0
  90. package/dist/lib/arrange/infra/ensure-cn-import.js +6 -0
  91. package/dist/lib/arrange/infra/file-walker.adapter.d.ts +8 -0
  92. package/dist/lib/arrange/infra/file-walker.adapter.d.ts.map +1 -0
  93. package/dist/lib/arrange/infra/file-walker.adapter.js +17 -0
  94. package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.d.ts +8 -0
  95. package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.d.ts.map +1 -0
  96. package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.js +25 -0
  97. package/dist/lib/arrange/infra/ts-ast-translator.d.ts +10 -0
  98. package/dist/lib/arrange/infra/ts-ast-translator.d.ts.map +1 -0
  99. package/dist/lib/arrange/infra/ts-ast-translator.js +363 -0
  100. package/dist/lib/arrange/presentation/formatters.d.ts +3 -0
  101. package/dist/lib/arrange/presentation/formatters.d.ts.map +1 -0
  102. package/dist/lib/arrange/presentation/formatters.js +2 -0
  103. package/dist/lib/arrange/presentation/report.d.ts +4 -0
  104. package/dist/lib/arrange/presentation/report.d.ts.map +1 -0
  105. package/dist/lib/arrange/presentation/report.js +37 -0
  106. package/dist/lib/config/domain/schema.d.ts +50 -0
  107. package/dist/lib/config/domain/schema.d.ts.map +1 -0
  108. package/dist/lib/config/domain/schema.js +43 -0
  109. package/dist/lib/config/index.d.ts +4 -0
  110. package/dist/lib/config/index.d.ts.map +1 -0
  111. package/dist/lib/config/index.js +2 -0
  112. package/dist/lib/config/infra/loader.d.ts +11 -0
  113. package/dist/lib/config/infra/loader.d.ts.map +1 -0
  114. package/dist/lib/config/infra/loader.js +90 -0
  115. package/dist/lib/core/application/architecture-boundaries.d.ts +19 -0
  116. package/dist/lib/core/application/architecture-boundaries.d.ts.map +1 -0
  117. package/dist/lib/core/application/architecture-boundaries.js +263 -0
  118. package/dist/lib/core/application/ports/cli-io.port.d.ts +27 -0
  119. package/dist/lib/core/application/ports/cli-io.port.d.ts.map +1 -0
  120. package/dist/lib/core/application/schema-parse.d.ts +8 -0
  121. package/dist/lib/core/application/schema-parse.d.ts.map +1 -0
  122. package/dist/lib/core/application/schema-parse.js +20 -0
  123. package/dist/lib/core/application/utils/caught-unknown-message.d.ts +6 -0
  124. package/dist/lib/core/application/utils/caught-unknown-message.d.ts.map +1 -0
  125. package/dist/lib/core/application/utils/caught-unknown-message.js +34 -0
  126. package/dist/lib/core/application/utils/verbose-diagnostics.d.ts +5 -0
  127. package/dist/lib/core/application/utils/verbose-diagnostics.d.ts.map +1 -0
  128. package/dist/lib/core/application/utils/verbose-diagnostics.js +7 -0
  129. package/dist/lib/core/domain/errors.d.ts +11 -0
  130. package/dist/lib/core/domain/errors.d.ts.map +1 -0
  131. package/dist/lib/core/domain/errors.js +9 -0
  132. package/dist/lib/core/domain/result.d.ts +15 -0
  133. package/dist/lib/core/domain/result.d.ts.map +1 -0
  134. package/dist/lib/core/domain/result.js +9 -0
  135. package/dist/lib/core/infra/container.d.ts +34 -0
  136. package/dist/lib/core/infra/container.d.ts.map +1 -0
  137. package/dist/lib/core/infra/container.js +65 -0
  138. package/dist/lib/core/infra/logging-decorator.d.ts +12 -0
  139. package/dist/lib/core/infra/logging-decorator.d.ts.map +1 -0
  140. package/dist/lib/core/infra/logging-decorator.js +75 -0
  141. package/dist/lib/core/presentation/cli-executor.d.ts +33 -0
  142. package/dist/lib/core/presentation/cli-executor.d.ts.map +1 -0
  143. package/dist/lib/core/presentation/cli-executor.js +73 -0
  144. package/dist/lib/core/presentation/create-command-handler.d.ts +20 -0
  145. package/dist/lib/core/presentation/create-command-handler.d.ts.map +1 -0
  146. package/dist/lib/core/presentation/create-command-handler.js +70 -0
  147. package/dist/lib/core/presentation/format-app-error.d.ts +6 -0
  148. package/dist/lib/core/presentation/format-app-error.d.ts.map +1 -0
  149. package/dist/lib/core/presentation/format-app-error.js +19 -0
  150. package/dist/lib/infra/caught-unknown-message.d.ts +2 -0
  151. package/dist/lib/infra/caught-unknown-message.d.ts.map +1 -0
  152. package/dist/lib/infra/caught-unknown-message.js +1 -0
  153. package/dist/lib/infra/config-reporter.d.ts +4 -0
  154. package/dist/lib/infra/config-reporter.d.ts.map +1 -0
  155. package/dist/lib/infra/config-reporter.js +9 -0
  156. package/dist/lib/infra/fs-contract.d.ts +2 -0
  157. package/dist/lib/infra/fs-contract.d.ts.map +1 -0
  158. package/dist/lib/infra/fs-contract.js +1 -0
  159. package/dist/lib/infra/node-io.d.ts +4 -0
  160. package/dist/lib/infra/node-io.d.ts.map +1 -0
  161. package/dist/lib/infra/node-io.js +27 -0
  162. package/dist/lib/infra/workspace/repo-root.d.ts +7 -0
  163. package/dist/lib/infra/workspace/repo-root.d.ts.map +1 -0
  164. package/dist/lib/infra/workspace/repo-root.js +23 -0
  165. package/dist/lib/mirror/application/engine.d.ts +10 -0
  166. package/dist/lib/mirror/application/engine.d.ts.map +1 -0
  167. package/dist/lib/mirror/application/engine.js +271 -0
  168. package/dist/lib/mirror/application/ports/file-system-service.port.d.ts +6 -0
  169. package/dist/lib/mirror/application/ports/file-system-service.port.d.ts.map +1 -0
  170. package/dist/lib/mirror/application/ports/file-system-service.port.js +1 -0
  171. package/dist/lib/mirror/application/ports/mirror-sync-reporter.port.d.ts +27 -0
  172. package/dist/lib/mirror/application/ports/mirror-sync-reporter.port.d.ts.map +1 -0
  173. package/dist/lib/mirror/application/ports/mirror-sync-reporter.port.js +1 -0
  174. package/dist/lib/mirror/application/ports/package-repository.port.d.ts +16 -0
  175. package/dist/lib/mirror/application/ports/package-repository.port.d.ts.map +1 -0
  176. package/dist/lib/mirror/application/ports/package-repository.port.js +1 -0
  177. package/dist/lib/mirror/application/ports/workspace-service.port.d.ts +7 -0
  178. package/dist/lib/mirror/application/ports/workspace-service.port.d.ts.map +1 -0
  179. package/dist/lib/mirror/application/ports/workspace-service.port.js +1 -0
  180. package/dist/lib/mirror/application/requests/mirror-sync.request.d.ts +10 -0
  181. package/dist/lib/mirror/application/requests/mirror-sync.request.d.ts.map +1 -0
  182. package/dist/lib/mirror/application/requests/mirror-sync.request.js +8 -0
  183. package/dist/lib/mirror/application/sync.d.ts +19 -0
  184. package/dist/lib/mirror/application/sync.d.ts.map +1 -0
  185. package/dist/lib/mirror/application/sync.js +168 -0
  186. package/dist/lib/mirror/domain/constants.d.ts +6 -0
  187. package/dist/lib/mirror/domain/constants.d.ts.map +1 -0
  188. package/dist/lib/mirror/domain/constants.js +5 -0
  189. package/dist/lib/mirror/domain/errors.d.ts +10 -0
  190. package/dist/lib/mirror/domain/errors.d.ts.map +1 -0
  191. package/dist/lib/mirror/domain/errors.js +12 -0
  192. package/dist/lib/mirror/domain/types.d.ts +65 -0
  193. package/dist/lib/mirror/domain/types.d.ts.map +1 -0
  194. package/dist/lib/mirror/domain/types.js +1 -0
  195. package/dist/lib/mirror/index.d.ts +6 -0
  196. package/dist/lib/mirror/index.d.ts.map +1 -0
  197. package/dist/lib/mirror/index.js +1 -0
  198. package/dist/lib/mirror/infra/dirent-list.d.ts +9 -0
  199. package/dist/lib/mirror/infra/dirent-list.d.ts.map +1 -0
  200. package/dist/lib/mirror/infra/dirent-list.js +13 -0
  201. package/dist/lib/mirror/infra/file-system-service.adapter.d.ts +7 -0
  202. package/dist/lib/mirror/infra/file-system-service.adapter.d.ts.map +1 -0
  203. package/dist/lib/mirror/infra/file-system-service.adapter.js +47 -0
  204. package/dist/lib/mirror/infra/mirror-sync-cli-options.d.ts +14 -0
  205. package/dist/lib/mirror/infra/mirror-sync-cli-options.d.ts.map +1 -0
  206. package/dist/lib/mirror/infra/mirror-sync-cli-options.js +1 -0
  207. package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.d.ts +3 -0
  208. package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.d.ts.map +1 -0
  209. package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.js +13 -0
  210. package/dist/lib/mirror/infra/package-filter.d.ts +8 -0
  211. package/dist/lib/mirror/infra/package-filter.d.ts.map +1 -0
  212. package/dist/lib/mirror/infra/package-filter.js +33 -0
  213. package/dist/lib/mirror/infra/package-repository.adapter.d.ts +17 -0
  214. package/dist/lib/mirror/infra/package-repository.adapter.d.ts.map +1 -0
  215. package/dist/lib/mirror/infra/package-repository.adapter.js +17 -0
  216. package/dist/lib/mirror/infra/path-normalizer.d.ts +2 -0
  217. package/dist/lib/mirror/infra/path-normalizer.d.ts.map +1 -0
  218. package/dist/lib/mirror/infra/path-normalizer.js +4 -0
  219. package/dist/lib/mirror/infra/update-pkg.d.ts +19 -0
  220. package/dist/lib/mirror/infra/update-pkg.d.ts.map +1 -0
  221. package/dist/lib/mirror/infra/update-pkg.js +156 -0
  222. package/dist/lib/mirror/infra/workspace-packages.d.ts +26 -0
  223. package/dist/lib/mirror/infra/workspace-packages.d.ts.map +1 -0
  224. package/dist/lib/mirror/infra/workspace-packages.js +170 -0
  225. package/dist/lib/mirror/infra/workspace-service.adapter.d.ts +8 -0
  226. package/dist/lib/mirror/infra/workspace-service.adapter.d.ts.map +1 -0
  227. package/dist/lib/mirror/infra/workspace-service.adapter.js +10 -0
  228. package/dist/lib/mirror/presentation/reporter.d.ts +25 -0
  229. package/dist/lib/mirror/presentation/reporter.d.ts.map +1 -0
  230. package/dist/lib/mirror/presentation/reporter.js +140 -0
  231. package/dist/lib/shared/source-code/domain/text-edit.d.ts +14 -0
  232. package/dist/lib/shared/source-code/domain/text-edit.d.ts.map +1 -0
  233. package/dist/lib/shared/source-code/domain/text-edit.js +30 -0
  234. package/dist/lib/shared/source-code/infra/tsx-file-walk.d.ts +4 -0
  235. package/dist/lib/shared/source-code/infra/tsx-file-walk.d.ts.map +1 -0
  236. package/dist/lib/shared/source-code/infra/tsx-file-walk.js +37 -0
  237. package/dist/lib/tag/application/engine.d.ts +23 -0
  238. package/dist/lib/tag/application/engine.d.ts.map +1 -0
  239. package/dist/lib/tag/application/engine.js +357 -0
  240. package/dist/lib/tag/application/ports/target-resolver.port.d.ts +6 -0
  241. package/dist/lib/tag/application/ports/target-resolver.port.d.ts.map +1 -0
  242. package/dist/lib/tag/application/ports/target-resolver.port.js +1 -0
  243. package/dist/lib/tag/application/ports/typescript-tree-walk.port.d.ts +6 -0
  244. package/dist/lib/tag/application/ports/typescript-tree-walk.port.d.ts.map +1 -0
  245. package/dist/lib/tag/application/ports/typescript-tree-walk.port.js +1 -0
  246. package/dist/lib/tag/application/requests/tag-sync.request.d.ts +10 -0
  247. package/dist/lib/tag/application/requests/tag-sync.request.d.ts.map +1 -0
  248. package/dist/lib/tag/application/requests/tag-sync.request.js +8 -0
  249. package/dist/lib/tag/domain/types.d.ts +56 -0
  250. package/dist/lib/tag/domain/types.d.ts.map +1 -0
  251. package/dist/lib/tag/domain/types.js +1 -0
  252. package/dist/lib/tag/index.d.ts +14 -0
  253. package/dist/lib/tag/index.d.ts.map +1 -0
  254. package/dist/lib/tag/index.js +10 -0
  255. package/dist/lib/tag/infra/tag-sync-cli-options.d.ts +14 -0
  256. package/dist/lib/tag/infra/tag-sync-cli-options.d.ts.map +1 -0
  257. package/dist/lib/tag/infra/tag-sync-cli-options.js +1 -0
  258. package/dist/lib/tag/infra/tag-target-resolver.adapter.d.ts +3 -0
  259. package/dist/lib/tag/infra/tag-target-resolver.adapter.d.ts.map +1 -0
  260. package/dist/lib/tag/infra/tag-target-resolver.adapter.js +4 -0
  261. package/dist/lib/tag/infra/target-resolver.d.ts +4 -0
  262. package/dist/lib/tag/infra/target-resolver.d.ts.map +1 -0
  263. package/dist/lib/tag/infra/target-resolver.js +200 -0
  264. package/dist/lib/tag/infra/typescript-tree-walk.adapter.d.ts +3 -0
  265. package/dist/lib/tag/infra/typescript-tree-walk.adapter.d.ts.map +1 -0
  266. package/dist/lib/tag/infra/typescript-tree-walk.adapter.js +4 -0
  267. package/dist/lib/tag/presentation/colors.d.ts +8 -0
  268. package/dist/lib/tag/presentation/colors.d.ts.map +1 -0
  269. package/dist/lib/tag/presentation/colors.js +9 -0
  270. package/dist/lib/tag/presentation/tag-presenter.d.ts +20 -0
  271. package/dist/lib/tag/presentation/tag-presenter.d.ts.map +1 -0
  272. package/dist/lib/tag/presentation/tag-presenter.js +92 -0
  273. package/dist/program.d.ts +4 -0
  274. package/dist/program.d.ts.map +1 -0
  275. package/dist/program.js +40 -0
  276. package/package.json +8 -5
  277. package/dist/analyze-DvtJ3j9m.mjs +0 -92
  278. package/dist/arrange-Bbh62DrU.mjs +0 -107
  279. package/dist/arrange-BqP2DI3w.mjs +0 -8
  280. package/dist/ast-helpers-MDRYuIAk.mjs +0 -115
  281. package/dist/caught-unknown-message-CRhkDWO7.mjs +0 -20
  282. package/dist/collectors-cn-BS8TTQ8O.mjs +0 -61
  283. package/dist/collectors-jsx-D9tL2ZPM.mjs +0 -20
  284. package/dist/collectors-tv-D2PXZaRt.mjs +0 -170
  285. package/dist/colors-BjdkCfGK.mjs +0 -12
  286. package/dist/commands/arrange.mjs +0 -2
  287. package/dist/commands/mirror.mjs +0 -2
  288. package/dist/commands/mirror.test.mjs +0 -48
  289. package/dist/commands/tag.mjs +0 -2
  290. package/dist/config-DVia_f9a.mjs +0 -3
  291. package/dist/config-reporter-SCcWDZc1.mjs +0 -10
  292. package/dist/constants-AtPhF-Ct.mjs +0 -169
  293. package/dist/constants-Bq5wdyLC.mjs +0 -8
  294. package/dist/dirent-list-BSDeRG5i.mjs +0 -14
  295. package/dist/engine-CcWEHSCq.mjs +0 -287
  296. package/dist/engine-DRTdkc5u.mjs +0 -236
  297. package/dist/errors-CFH4w6ic.mjs +0 -15
  298. package/dist/errors-CpU1ogfA.mjs +0 -19
  299. package/dist/formatters-DGE8jJ53.mjs +0 -52
  300. package/dist/group-file-ClW7XdD6.mjs +0 -113
  301. package/dist/grouping-c1grpCQT.mjs +0 -235
  302. package/dist/imports-DSVq1xhB.mjs +0 -54
  303. package/dist/lib/arrange/application/analyze.mjs +0 -2
  304. package/dist/lib/arrange/application/analyze.test.mjs +0 -171
  305. package/dist/lib/arrange/application/group-file.mjs +0 -2
  306. package/dist/lib/arrange/application/group-file.test.mjs +0 -273
  307. package/dist/lib/arrange/application/run-target.mjs +0 -2
  308. package/dist/lib/arrange/application/run-target.test.mjs +0 -97
  309. package/dist/lib/arrange/domain/ast/ast-helpers.mjs +0 -2
  310. package/dist/lib/arrange/domain/ast/ast-helpers.test.mjs +0 -148
  311. package/dist/lib/arrange/domain/ast/collectors-cn.mjs +0 -2
  312. package/dist/lib/arrange/domain/ast/collectors-cn.test.mjs +0 -58
  313. package/dist/lib/arrange/domain/ast/collectors-jsx.mjs +0 -2
  314. package/dist/lib/arrange/domain/ast/collectors-jsx.test.mjs +0 -20
  315. package/dist/lib/arrange/domain/ast/collectors-tv.mjs +0 -2
  316. package/dist/lib/arrange/domain/ast/collectors-tv.test.mjs +0 -145
  317. package/dist/lib/arrange/domain/ast/targets.mjs +0 -2
  318. package/dist/lib/arrange/domain/ast/targets.test.mjs +0 -50
  319. package/dist/lib/arrange/domain/constants.mjs +0 -2
  320. package/dist/lib/arrange/domain/errors.mjs +0 -2
  321. package/dist/lib/arrange/domain/grouping.mjs +0 -2
  322. package/dist/lib/arrange/domain/grouping.test.mjs +0 -186
  323. package/dist/lib/arrange/domain/imports.mjs +0 -2
  324. package/dist/lib/arrange/domain/imports.test.mjs +0 -48
  325. package/dist/lib/arrange/domain/tokenizer.mjs +0 -2
  326. package/dist/lib/arrange/domain/tokenizer.test.mjs +0 -165
  327. package/dist/lib/arrange/index.mjs +0 -16
  328. package/dist/lib/arrange/infra/walk.mjs +0 -2
  329. package/dist/lib/arrange/infra/walk.test.mjs +0 -50
  330. package/dist/lib/arrange/presentation/formatters.mjs +0 -2
  331. package/dist/lib/arrange/presentation/formatters.test.mjs +0 -73
  332. package/dist/lib/arrange/presentation/report.mjs +0 -2
  333. package/dist/lib/config/domain/schema.mjs +0 -2
  334. package/dist/lib/config/index.mjs +0 -4
  335. package/dist/lib/config/infra/loader.mjs +0 -2
  336. package/dist/lib/config/infra/loader.test.mjs +0 -116
  337. package/dist/lib/infra/caught-unknown-message.mjs +0 -2
  338. package/dist/lib/infra/config-reporter.mjs +0 -2
  339. package/dist/lib/infra/node-io.mjs +0 -2
  340. package/dist/lib/infra/workspace/repo-root.mjs +0 -2
  341. package/dist/lib/infra/workspace/repo-root.test.mjs +0 -45
  342. package/dist/lib/mirror/application/engine.mjs +0 -2
  343. package/dist/lib/mirror/application/sync.mjs +0 -2
  344. package/dist/lib/mirror/application/sync.test.mjs +0 -482
  345. package/dist/lib/mirror/domain/constants.mjs +0 -2
  346. package/dist/lib/mirror/domain/errors.mjs +0 -2
  347. package/dist/lib/mirror/index.mjs +0 -3
  348. package/dist/lib/mirror/infra/dirent-list.mjs +0 -2
  349. package/dist/lib/mirror/infra/dirent-list.test.mjs +0 -18
  350. package/dist/lib/mirror/infra/package-filter.mjs +0 -2
  351. package/dist/lib/mirror/infra/package-filter.test.mjs +0 -32
  352. package/dist/lib/mirror/infra/path-normalizer.mjs +0 -2
  353. package/dist/lib/mirror/infra/update-pkg.mjs +0 -2
  354. package/dist/lib/mirror/infra/workspace-packages.mjs +0 -2
  355. package/dist/lib/mirror/infra/workspace-packages.test.mjs +0 -167
  356. package/dist/lib/mirror/presentation/reporter.mjs +0 -2
  357. package/dist/lib/tag/application/engine.mjs +0 -2
  358. package/dist/lib/tag/application/engine.test.mjs +0 -159
  359. package/dist/lib/tag/index.mjs +0 -5
  360. package/dist/lib/tag/infra/target-resolver.mjs +0 -2
  361. package/dist/lib/tag/presentation/colors.mjs +0 -2
  362. package/dist/lib/tag/presentation/tag-presenter.mjs +0 -2
  363. package/dist/lib/tag/presentation/tag-presenter.test.mjs +0 -29
  364. package/dist/loader-DpN-zl5g.mjs +0 -78
  365. package/dist/mirror-CbGiLXKT.mjs +0 -2
  366. package/dist/mirror-DqJE3ejL.mjs +0 -66
  367. package/dist/node-io-DFRbHO6m.mjs +0 -30
  368. package/dist/package-filter-C_8ryqvz.mjs +0 -26
  369. package/dist/path-normalizer-D4ceBO3l.mjs +0 -7
  370. package/dist/program-DR-H4tH3.mjs +0 -34
  371. package/dist/program.mjs +0 -2
  372. package/dist/repo-root-HmtIEm6J.mjs +0 -22
  373. package/dist/report-DYxvw34T.mjs +0 -24
  374. package/dist/reporter-CwIe_tAM.mjs +0 -108
  375. package/dist/run-target-CJWrqNT4.mjs +0 -65
  376. package/dist/schema-Or8RAARd.mjs +0 -25
  377. package/dist/sync-e1Sp-shi.mjs +0 -157
  378. package/dist/tag-Cd9JujU5.mjs +0 -2
  379. package/dist/tag-hEKVZ_-7.mjs +0 -58
  380. package/dist/tag-presenter-Cs66UBsH.mjs +0 -63
  381. package/dist/target-resolver-CR3FXMTy.mjs +0 -170
  382. package/dist/targets-pCTslnFh.mjs +0 -106
  383. package/dist/tokenizer-CeZx73Zu.mjs +0 -216
  384. package/dist/update-pkg-CnGfjWBy.mjs +0 -37
  385. package/dist/walk-DjgQn66n.mjs +0 -33
  386. package/dist/workspace-packages-K2NYTHJq.mjs +0 -159
  387. /package/dist/lib/arrange/{domain/types.mjs → application/ports/domain-source-parser.port.js} +0 -0
  388. /package/dist/lib/{infra/fs-contract.mjs → arrange/application/ports/file-walker.port.js} +0 -0
  389. /package/dist/lib/{mirror/domain/types.mjs → arrange/infra/arrange-sync-cli-options.js} +0 -0
  390. /package/dist/lib/{tag/domain/types.mjs → core/application/ports/cli-io.port.js} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-text-formatters.d.ts","sourceRoot":"","sources":["../../../../src/lib/arrange/domain/source-text-formatters.ts"],"names":[],"mappings":"AAEA,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,GACA,MAAM,CAaR;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;IAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAahG;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CASpD;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,GACrB,MAAM,CAQR"}
@@ -0,0 +1,55 @@
1
+ import { indentOfLineContaining } from "#lib/shared/source-code/domain/text-edit";
2
+ export function escapeTsStringLiteralContent(group) {
3
+ return group.replaceAll("\\", "\\\\").replaceAll('"', '\\"');
4
+ }
5
+ /**
6
+ * Multiline fragment for use *inside* an existing `cn(...)` — replaces one
7
+ * string argument with several, without producing `cn(cn(...))`.
8
+ */
9
+ export function formatCnArguments(groups, options) {
10
+ const indent = options?.indent ?? " ";
11
+ const commaAfterLast = options?.commaAfterLastGroup ?? options?.trailingClassName ?? false;
12
+ const lines = [];
13
+ for (let i = 0; i < groups.length; i++) {
14
+ const group = groups[i];
15
+ const comma = i < groups.length - 1 || commaAfterLast ? "," : "";
16
+ lines.push(`${indent}"${escapeTsStringLiteralContent(group)}"${comma}`);
17
+ }
18
+ if (options?.trailingClassName) {
19
+ lines.push(`${indent}className,`);
20
+ }
21
+ return lines.join("\n");
22
+ }
23
+ export function formatCnCall(groups, options) {
24
+ const lines = ["cn("];
25
+ const commaOnEachStringLine = groups.length > 1 || Boolean(options?.trailingClassName);
26
+ for (let i = 0; i < groups.length; i++) {
27
+ const group = groups[i];
28
+ const comma = commaOnEachStringLine ? "," : "";
29
+ lines.push(` "${escapeTsStringLiteralContent(group)}"${comma}`);
30
+ }
31
+ if (options?.trailingClassName) {
32
+ lines.push(" className,");
33
+ }
34
+ lines.push(")");
35
+ return lines.join("\n");
36
+ }
37
+ export function formatArray(groups) {
38
+ const lines = ["["];
39
+ for (let i = 0; i < groups.length; i++) {
40
+ const group = groups[i];
41
+ const comma = i < groups.length - 1 || groups.length > 1 ? "," : "";
42
+ lines.push(` "${escapeTsStringLiteralContent(group)}"${comma}`);
43
+ }
44
+ lines.push("]");
45
+ return lines.join("\n");
46
+ }
47
+ export function formatJsxCnAttributeValue(groups, source, valueNodeStart) {
48
+ const baseIndent = indentOfLineContaining(source, valueNodeStart);
49
+ const argIndent = `${baseIndent} `;
50
+ const cnArgumentsBlock = formatCnArguments(groups, {
51
+ indent: argIndent,
52
+ commaAfterLastGroup: groups.length > 1,
53
+ });
54
+ return `{cn(\n${cnArgumentsBlock}\n${baseIndent})}`;
55
+ }
@@ -0,0 +1,45 @@
1
+ import type { Bucket } from "#lib/arrange/domain/types";
2
+ export declare function tokenizeClassString(classString: string): string[];
3
+ /**
4
+ * Index of the first `:` that separates a Tailwind variant segment from the rest.
5
+ * Colons inside `[...]` (at positive bracket depth) are ignored so selectors like
6
+ * `[&_a:hover]:text-red-500` split as `[&_a:hover]:` + `text-red-500`.
7
+ */
8
+ export declare function indexOfFirstVariantColon(text: string): number;
9
+ export declare function stripVariants(token: string): string;
10
+ /**
11
+ * Secondary sort inside the **composite** bucket: opacity / blend / isolation →
12
+ * 3D context → 3D transforms → 2D transforms → filters → will-change.
13
+ */
14
+ export declare function compositeSecondaryOrder(bareUtility: string): number;
15
+ /** Classify a **bare** utility (no `hover:` / `md:` / … prefixes). */
16
+ export declare function classifyBareUtility(bareUtility: string): Bucket;
17
+ /**
18
+ * Arbitrary **parent** selectors (`[&…]`, `[&>a]:…`, slot forms with `&` inside the bracket)
19
+ * scope utilities to descendants — bucket as `selector` so they chunk apart from base layout/typography
20
+ * and are labeled distinctly from interactive `state` variants (`hover:`, `data-[…]:`, …).
21
+ * Pure arbitrary **properties** (`[--x]:`, `[color:red]`) have no `&` in the leading `[…]` segment.
22
+ */
23
+ export declare function isArbitraryParentSelectorStateToken(token: string): boolean;
24
+ export declare function classifyToken(token: string): Bucket;
25
+ /**
26
+ * Stable key for splitting adjacent `state` / `starting` tokens in {@link suggestCnGroups}
27
+ * (`selector` uses {@link selectorKey}).
28
+ * Uses the **full variant stack** (every `:` segment outside `[…]`), not only the
29
+ * outermost prefix, so `@md/foo:[&>*]:w-auto` and `@md/foo:has-[…]:mt-px` stay in
30
+ * separate groups while `hover:opacity` still keys as `hover` + `opacity`…
31
+ *
32
+ * `data-[…]` / `aria-[…]` normalize the first segment via {@link dataAttributeStem} /
33
+ * {@link ariaAttributeStem} (full token required for bracket capture).
34
+ */
35
+ export declare function stateKey(token: string): string;
36
+ /**
37
+ * Variant key for {@link Bucket} `"selector"` tokens in {@link suggestCnGroups}.
38
+ * Reuses {@link stateKey} layer splitting, then normalizes common shadcn/Radix SVG patterns so
39
+ * `[&_svg]:…` and `[&_svg:not([class*='size-'])]:…` stay in one chunk.
40
+ */
41
+ export declare function selectorKey(token: string): string;
42
+ export declare function bucketsCompatible(a: Bucket, b: Bucket): boolean;
43
+ /** Like {@link bucketsCompatible}, but never merge two distinct state / starting / selector variant blobs. */
44
+ export declare function bucketsMergeCompatible(a: Bucket, b: Bucket): boolean;
45
+ //# sourceMappingURL=tokenizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.d.ts","sourceRoot":"","sources":["../../../../src/lib/arrange/domain/tokenizer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AA4CxD,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAEjE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAa7D;AAMD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWnD;AA6FD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAiDnE;AAED,sEAAsE;AACtE,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAiK/D;AAED;;;;;GAKG;AACH,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAa1E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAmCnD;AAwBD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAsB9C;AAID;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjD;AASD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAK/D;AAED,8GAA8G;AAC9G,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAcpE"}
@@ -0,0 +1,466 @@
1
+ import { COMPATIBLE_BUCKET_SETS, MAX_STRIP_VARIANT_PASSES, RESPONSIVE_PREFIX, STATE_PREFIXES, } from "#lib/arrange/domain/constants";
2
+ /**
3
+ * Variant stems not covered by a single entry in STATE_PREFIXES (compound `has-*`,
4
+ * numbered `nth-*`, media features, v4 `in-[…]`, child selectors `*` / `**`, …).
5
+ * When these are missed, `isStateToken` is false and the variant is stripped — the
6
+ * utility is then bucketed as if it were unconditional, which breaks preview grouping.
7
+ */
8
+ function isCompoundOrMediaVariantPrefix(prefix) {
9
+ if (prefix === "*" || prefix === "**") {
10
+ return true;
11
+ }
12
+ if (prefix === "inert") {
13
+ return true;
14
+ }
15
+ if (prefix.startsWith("has-")) {
16
+ return true;
17
+ }
18
+ if (prefix.startsWith("in-[")) {
19
+ return true;
20
+ }
21
+ if (/^nth(?:-last)?(?:-of-type)?(?:-\d+|-\[)/.test(prefix) ||
22
+ /^nth-of-type-\d+$/.test(prefix) ||
23
+ /^nth-last-of-type-\d+$/.test(prefix)) {
24
+ return true;
25
+ }
26
+ if (/^(?:user-valid|user-invalid|contrast-more|contrast-less|forced-colors|inverted-colors)$/.test(prefix)) {
27
+ return true;
28
+ }
29
+ if (/^(?:any-)?pointer-(?:fine|coarse|none)$/.test(prefix)) {
30
+ return true;
31
+ }
32
+ if (/^(?:portrait|landscape|noscript)$/.test(prefix)) {
33
+ return true;
34
+ }
35
+ return false;
36
+ }
37
+ export function tokenizeClassString(classString) {
38
+ return classString.trim().split(/\s+/).filter(Boolean);
39
+ }
40
+ /**
41
+ * Index of the first `:` that separates a Tailwind variant segment from the rest.
42
+ * Colons inside `[...]` (at positive bracket depth) are ignored so selectors like
43
+ * `[&_a:hover]:text-red-500` split as `[&_a:hover]:` + `text-red-500`.
44
+ */
45
+ export function indexOfFirstVariantColon(text) {
46
+ let depth = 0;
47
+ for (let i = 0; i < text.length; i++) {
48
+ const ch = text[i];
49
+ if (ch === "[") {
50
+ depth++;
51
+ }
52
+ else if (ch === "]") {
53
+ depth = Math.max(0, depth - 1);
54
+ }
55
+ else if (ch === ":" && depth === 0) {
56
+ return i;
57
+ }
58
+ }
59
+ return -1;
60
+ }
61
+ // Strip all variant prefixes to get the bare utility name.
62
+ // e.g. "hover:dark:md:text-sm" → "text-sm"
63
+ // e.g. "@min-[600px]:flex" → "flex"
64
+ // e.g. "[&_a:hover]:text-red-500" → "text-red-500"
65
+ export function stripVariants(token) {
66
+ let withoutVariants = token;
67
+ const MAX_PASSES = MAX_STRIP_VARIANT_PASSES;
68
+ for (let i = 0; i < MAX_PASSES; i++) {
69
+ const colonIdx = indexOfFirstVariantColon(withoutVariants);
70
+ if (colonIdx === -1) {
71
+ break;
72
+ }
73
+ withoutVariants = withoutVariants.slice(colonIdx + 1);
74
+ }
75
+ return withoutVariants;
76
+ }
77
+ /** Outermost variant segment: first `:` at bracket depth 0 → text before it. */
78
+ function firstLeadingVariantPrefix(token) {
79
+ const colonIdx = indexOfFirstVariantColon(token);
80
+ if (colonIdx === -1) {
81
+ return undefined;
82
+ }
83
+ return token.slice(0, colonIdx);
84
+ }
85
+ function isSelectorVariantToken(token) {
86
+ const prefix = firstLeadingVariantPrefix(token);
87
+ if (prefix === undefined) {
88
+ return false;
89
+ }
90
+ if (prefix === "*" || prefix === "**") {
91
+ return true;
92
+ }
93
+ if (prefix.startsWith("has-")) {
94
+ return true;
95
+ }
96
+ if (prefix.startsWith("in-[")) {
97
+ return true;
98
+ }
99
+ if (prefix.startsWith("group-[")) {
100
+ return true;
101
+ }
102
+ if (prefix.startsWith("peer-[")) {
103
+ return true;
104
+ }
105
+ if (prefix.startsWith("not-[")) {
106
+ return true;
107
+ }
108
+ return false;
109
+ }
110
+ function isStateToken(token) {
111
+ const prefix = firstLeadingVariantPrefix(token);
112
+ if (prefix === undefined) {
113
+ return false;
114
+ }
115
+ if (RESPONSIVE_PREFIX.test(token)) {
116
+ return true;
117
+ }
118
+ if (STATE_PREFIXES.has(prefix)) {
119
+ return true;
120
+ }
121
+ if (prefix.startsWith("data-[")) {
122
+ return true;
123
+ }
124
+ if (prefix.startsWith("aria-[")) {
125
+ return true;
126
+ }
127
+ if (prefix.startsWith("supports-[")) {
128
+ return true;
129
+ }
130
+ // Tailwind v4: style when inside an ancestor with matching `data-*` (e.g. `in-data-side-left:`,
131
+ // `in-data-[slot=tooltip-content]:`). The short stem `in` is in STATE_PREFIXES but outer
132
+ // prefixes are `in-data-…`, so they must be recognized explicitly.
133
+ if (prefix.startsWith("in-data-")) {
134
+ return true;
135
+ }
136
+ if (/^data-(?!\[)/.test(prefix)) {
137
+ return true;
138
+ }
139
+ if (/^aria-/.test(prefix)) {
140
+ return true;
141
+ }
142
+ if (/^(group|peer)-/.test(prefix)) {
143
+ return true;
144
+ }
145
+ if (/^not-/.test(prefix)) {
146
+ return true;
147
+ }
148
+ if (isCompoundOrMediaVariantPrefix(prefix)) {
149
+ return true;
150
+ }
151
+ if (prefix.startsWith("[") && prefix.endsWith("]")) {
152
+ return true;
153
+ }
154
+ return false;
155
+ }
156
+ /**
157
+ * Secondary sort inside the **composite** bucket: opacity / blend / isolation →
158
+ * 3D context → 3D transforms → 2D transforms → filters → will-change.
159
+ */
160
+ export function compositeSecondaryOrder(bareUtility) {
161
+ const b = bareUtility;
162
+ if (/^opacity(?:-|$)/.test(b) ||
163
+ /^mix-blend-/.test(b) ||
164
+ /^isolation(?:-|$)/.test(b) ||
165
+ b === "isolate") {
166
+ return 0;
167
+ }
168
+ if (b === "transform-3d" || /^perspective(?:-|$)/.test(b)) {
169
+ return 10;
170
+ }
171
+ if (/^rotate-[xyz](?:-|$)/.test(b) ||
172
+ /^translate-z(?:-|$)/.test(b) ||
173
+ /^scale-z(?:-|$)/.test(b)) {
174
+ return 20;
175
+ }
176
+ if (/^translate(?:-|$)/.test(b) ||
177
+ /^scale(?:-|$)/.test(b) ||
178
+ /^rotate(?:-|$)/.test(b) ||
179
+ /^skew(?:-|$)/.test(b)) {
180
+ return 30;
181
+ }
182
+ if (/^transform(?:-(?:gpu|cpu|none))?$/.test(b)) {
183
+ return 35;
184
+ }
185
+ if (/^blur(?:-|$)/.test(b) ||
186
+ /^backdrop-/.test(b) ||
187
+ /^filter(?:-|$)/.test(b) ||
188
+ /^brightness-/.test(b) ||
189
+ /^contrast-/.test(b) ||
190
+ /^grayscale(?:-|$)/.test(b) ||
191
+ /^hue-rotate-/.test(b) ||
192
+ /^invert(?:-|$)/.test(b) ||
193
+ /^saturate-/.test(b) ||
194
+ /^sepia(?:-|$)/.test(b)) {
195
+ return 40;
196
+ }
197
+ if (/^will-change/.test(b)) {
198
+ return 50;
199
+ }
200
+ return 99;
201
+ }
202
+ /** Classify a **bare** utility (no `hover:` / `md:` / … prefixes). */
203
+ export function classifyBareUtility(bareUtility) {
204
+ const b = bareUtility;
205
+ // --- Existence: display roots, containment, named groups/peers ---
206
+ if (/^@container(?:\/[a-z][a-z0-9-]*)?$/i.test(b)) {
207
+ return "existence";
208
+ }
209
+ if (/^(?:hidden|contents|sr-only|not-sr-only|list-item|flow-root)$/.test(b) ||
210
+ /^(?:block|inline-block|inline)$/.test(b)) {
211
+ return "existence";
212
+ }
213
+ if (/^table(?:$|-)/.test(b)) {
214
+ return "existence";
215
+ }
216
+ if (/^contain-/.test(b)) {
217
+ return "existence";
218
+ }
219
+ if (/^(?:group|peer)(?:\/[a-z][a-z0-9-]*)?$/.test(b)) {
220
+ return "existence";
221
+ }
222
+ // --- Position ---
223
+ if (/^(?:static|relative|absolute|fixed|sticky)$/.test(b)) {
224
+ return "position";
225
+ }
226
+ if (/^-?(?:inset|top|right|bottom|left|start|end)(?:-|\/|$)/.test(b) ||
227
+ /^-?(?:inset-x|inset-y|inset-s|inset-e)-/.test(b)) {
228
+ return "position";
229
+ }
230
+ if (/^-?z-/.test(b) || b === "z-auto") {
231
+ return "position";
232
+ }
233
+ // --- Layout ---
234
+ if (/^(?:flex|inline-flex|grid|inline-grid|subgrid|masonry)(?:$|-)/.test(b) ||
235
+ /^(?:items|justify|justify-items|justify-self|content|self|place|place-content|place-items|place-self)-/.test(b) ||
236
+ /^-?(?:gap|space-[xy]|col-|row-|grid-|auto-cols|auto-rows|order-|order$)/.test(b) ||
237
+ /^-?(?:auto-flow|grid-flow)-/.test(b) ||
238
+ /^(?:columns-|break-after|break-before|break-inside)-/.test(b) ||
239
+ /^(?:float|clear)-/.test(b) ||
240
+ /^(?:wrap-|flex-wrap|flex-nowrap|flex-row|flex-col|flex-auto|flex-initial|flex-none|flex-1|flex-\[)/.test(b) ||
241
+ /^container$/.test(b)) {
242
+ return "layout";
243
+ }
244
+ // --- Sizing ---
245
+ if (/^-?(?:w|h|min-w|max-w|min-h|max-h|size|aspect|shrink|grow|basis)-/.test(b) ||
246
+ /^(?:shrink|grow)(?:$|-)/.test(b) ||
247
+ /^-?overflow-/.test(b) ||
248
+ /^-?object-/.test(b)) {
249
+ return "sizing";
250
+ }
251
+ // --- Spacing (margin / padding only; gap lives in layout) ---
252
+ if (/^-?(?:p|px|py|pt|pb|pl|pr|ps|pe|m|mx|my|mt|mb|ml|mr|ms|me)-/.test(b)) {
253
+ return "spacing";
254
+ }
255
+ // --- Shape & border (no `outline-*` — see Shadow; outline paints in the overlay pass) ---
256
+ if (/^-?(?:rounded|border|ring|divide|inset-ring)(?:-|\/|$)/.test(b) ||
257
+ /^(?:rounded|border|ring|divide|inset-ring)$/.test(b) ||
258
+ /^ring-offset-/.test(b)) {
259
+ return "shape";
260
+ }
261
+ // --- Background & fill ---
262
+ if (/^-?bg-/.test(b) ||
263
+ /^(?:from|via|to)(?:-|\/|$)/.test(b) ||
264
+ /^bg-(?:linear|radial|conic)-/.test(b) ||
265
+ /^-?mask-/.test(b) ||
266
+ /^-?(?:fill|stroke)-/.test(b)) {
267
+ return "background";
268
+ }
269
+ // --- Shadow & depth (includes `outline-*` — same paint phase as box-shadow overlay) ---
270
+ if (/^-?(?:shadow|inset-shadow|drop-shadow|text-shadow)(?:-|\/|$)/.test(b) ||
271
+ /^(?:shadow|inset-shadow)$/.test(b) ||
272
+ /^-?outline(?:-|\/|$)/.test(b) ||
273
+ /^outline$/.test(b)) {
274
+ return "shadow";
275
+ }
276
+ // --- Typography ---
277
+ if (/^-?(?:font|leading|tracking|list|indent|align|decoration|underline-offset|text-wrap|text-balance|text-pretty)-/.test(b) ||
278
+ /^-?(?:text-(?!shadow))/.test(b) ||
279
+ /^-?(?:whitespace|break|line-clamp|hyphens)-/.test(b) ||
280
+ /^(?:antialiased|subpixel-antialiased|italic|not-italic|overline|line-through|underline|no-underline|uppercase|lowercase|capitalize|normal-case|truncate|text-wrap|text-balance|text-pretty)$/.test(b) ||
281
+ /^text-wrap-/.test(b) ||
282
+ /^tabular-nums$|^slashed-zero$|^lining-nums$|^oldstyle-nums$|^proportional-nums$/.test(b)) {
283
+ return "typography";
284
+ }
285
+ // --- Composite & transforms (GPU / filter stack) ---
286
+ if (/^opacity(?:-|$)/.test(b) ||
287
+ /^mix-blend-/.test(b) ||
288
+ /^isolation(?:-|$)/.test(b) ||
289
+ b === "isolate" ||
290
+ /^transform(?:-(?:gpu|cpu|none))?$/.test(b) ||
291
+ /^-?(?:translate|scale|rotate|skew)-/.test(b) ||
292
+ /^perspective(?:-|$)/.test(b) ||
293
+ b === "transform-3d" ||
294
+ /^blur(?:-|$)/.test(b) ||
295
+ /^backdrop-/.test(b) ||
296
+ /^filter(?:-|$)/.test(b) ||
297
+ /^brightness-/.test(b) ||
298
+ /^contrast-/.test(b) ||
299
+ /^grayscale(?:-|$)/.test(b) ||
300
+ /^hue-rotate-/.test(b) ||
301
+ /^invert(?:-|$)/.test(b) ||
302
+ /^saturate-/.test(b) ||
303
+ /^sepia(?:-|$)/.test(b) ||
304
+ /^will-change/.test(b)) {
305
+ return "composite";
306
+ }
307
+ // --- Motion ---
308
+ if (/^(?:transition|duration|ease|delay|animate)(?:-|$)/.test(b) || /^ease-/.test(b)) {
309
+ return "motion";
310
+ }
311
+ // --- Behavior & interaction ---
312
+ if (/^(?:cursor|pointer-events|select|touch|scroll|scroll-m|scroll-p|overscroll|snap|resize|field-sizing|appearance|scheme|color-scheme|accent|caret)(?:-|$)/.test(b) ||
313
+ /^(?:cursor|select|resize)$/.test(b) ||
314
+ /^scroll-behavior/.test(b) ||
315
+ /^scroll-snap/.test(b) ||
316
+ /^touch-action/.test(b) ||
317
+ b === "inert") {
318
+ return "behavior";
319
+ }
320
+ return "other";
321
+ }
322
+ /**
323
+ * Arbitrary **parent** selectors (`[&…]`, `[&>a]:…`, slot forms with `&` inside the bracket)
324
+ * scope utilities to descendants — bucket as `selector` so they chunk apart from base layout/typography
325
+ * and are labeled distinctly from interactive `state` variants (`hover:`, `data-[…]:`, …).
326
+ * Pure arbitrary **properties** (`[--x]:`, `[color:red]`) have no `&` in the leading `[…]` segment.
327
+ */
328
+ export function isArbitraryParentSelectorStateToken(token) {
329
+ if (/^\[&/.test(token)) {
330
+ return true;
331
+ }
332
+ if (!token.startsWith("[")) {
333
+ return false;
334
+ }
335
+ const colonIdx = indexOfFirstVariantColon(token);
336
+ if (colonIdx === -1 || colonIdx === 0 || token[colonIdx - 1] !== "]") {
337
+ return false;
338
+ }
339
+ const selector = token.slice(0, colonIdx);
340
+ return selector.includes("&");
341
+ }
342
+ export function classifyToken(token) {
343
+ // Before `[` arbitrary-property handling and `isStateToken`, parent-selector tokens must
344
+ // be `selector` so they flush into their own chunk after unconditional utilities.
345
+ if (isArbitraryParentSelectorStateToken(token)) {
346
+ return "selector";
347
+ }
348
+ if (isSelectorVariantToken(token)) {
349
+ return "selector";
350
+ }
351
+ if (/^@container(?:\/[a-z][a-z0-9-]*)?$/i.test(token)) {
352
+ return "existence";
353
+ }
354
+ if (token.startsWith("[")) {
355
+ const splitIdx = indexOfFirstVariantColon(token);
356
+ if (splitIdx === -1) {
357
+ return "arbitrary";
358
+ }
359
+ if (splitIdx === 0 || token[splitIdx - 1] !== "]") {
360
+ return "arbitrary";
361
+ }
362
+ }
363
+ const outer = firstLeadingVariantPrefix(token);
364
+ if (outer === "starting") {
365
+ return "starting";
366
+ }
367
+ if (isStateToken(token)) {
368
+ return "state";
369
+ }
370
+ const bareUtility = stripVariants(token);
371
+ return classifyBareUtility(bareUtility);
372
+ }
373
+ /**
374
+ * Stable key for `data-[…]` variants so unrelated selectors stay split, while
375
+ * **branching on the full bracket** (e.g. `data-[vaul-drawer-direction=bottom]`
376
+ * vs `=left`) keeps direction-specific utilities in separate state groups.
377
+ */
378
+ function dataAttributeStem(token) {
379
+ const match = token.match(/^data-\[([^\]]*)\]/);
380
+ return match ? `data-[${match[1]}]` : "data";
381
+ }
382
+ /** Same idea as {@link dataAttributeStem} for `aria-[…]:` variants. */
383
+ function ariaAttributeStem(token) {
384
+ const match = token.match(/^aria-\[([^\]]*)\]/);
385
+ return match ? `aria-[${match[1]}]` : "aria";
386
+ }
387
+ /** `in-data-[…]:` — normalize on the full bracket expression like {@link dataAttributeStem}. */
388
+ function inDataAttributeStem(token) {
389
+ const match = token.match(/^in-data-\[([^\]]*)\]/);
390
+ return match ? `in-data-[${match[1]}]` : "in-data";
391
+ }
392
+ /**
393
+ * Stable key for splitting adjacent `state` / `starting` tokens in {@link suggestCnGroups}
394
+ * (`selector` uses {@link selectorKey}).
395
+ * Uses the **full variant stack** (every `:` segment outside `[…]`), not only the
396
+ * outermost prefix, so `@md/foo:[&>*]:w-auto` and `@md/foo:has-[…]:mt-px` stay in
397
+ * separate groups while `hover:opacity` still keys as `hover` + `opacity`…
398
+ *
399
+ * `data-[…]` / `aria-[…]` normalize the first segment via {@link dataAttributeStem} /
400
+ * {@link ariaAttributeStem} (full token required for bracket capture).
401
+ */
402
+ export function stateKey(token) {
403
+ const layers = [];
404
+ let rest = token;
405
+ while (rest.length > 0) {
406
+ const colonIdx = indexOfFirstVariantColon(rest);
407
+ if (colonIdx === -1) {
408
+ break;
409
+ }
410
+ layers.push(rest.slice(0, colonIdx));
411
+ rest = rest.slice(colonIdx + 1);
412
+ }
413
+ if (layers.length === 0) {
414
+ return token;
415
+ }
416
+ if (layers[0].startsWith("data-[")) {
417
+ layers[0] = dataAttributeStem(token);
418
+ }
419
+ else if (layers[0].startsWith("aria-[")) {
420
+ layers[0] = ariaAttributeStem(token);
421
+ }
422
+ else if (layers[0].startsWith("in-data-[")) {
423
+ layers[0] = inDataAttributeStem(token);
424
+ }
425
+ return layers.join("\u001f");
426
+ }
427
+ const SELECTOR_KEY_SEP = "\u001f";
428
+ /**
429
+ * Variant key for {@link Bucket} `"selector"` tokens in {@link suggestCnGroups}.
430
+ * Reuses {@link stateKey} layer splitting, then normalizes common shadcn/Radix SVG patterns so
431
+ * `[&_svg]:…` and `[&_svg:not([class*='size-'])]:…` stay in one chunk.
432
+ */
433
+ export function selectorKey(token) {
434
+ return stateKey(token)
435
+ .split(SELECTOR_KEY_SEP)
436
+ .map(normalizeSelectorVariantLayer)
437
+ .join(SELECTOR_KEY_SEP);
438
+ }
439
+ function normalizeSelectorVariantLayer(layer) {
440
+ if (layer === "[&_svg:not([class*='size-'])]") {
441
+ return "[&_svg]";
442
+ }
443
+ return layer;
444
+ }
445
+ export function bucketsCompatible(a, b) {
446
+ if (a === b) {
447
+ return true;
448
+ }
449
+ return COMPATIBLE_BUCKET_SETS.some((bucketSet) => bucketSet.has(a) && bucketSet.has(b));
450
+ }
451
+ /** Like {@link bucketsCompatible}, but never merge two distinct state / starting / selector variant blobs. */
452
+ export function bucketsMergeCompatible(a, b) {
453
+ if (a === "state" && b === "state") {
454
+ return false;
455
+ }
456
+ if (a === "starting" && b === "starting") {
457
+ return false;
458
+ }
459
+ if (a === "selector" && b === "selector") {
460
+ return false;
461
+ }
462
+ if (a === "arbitrary" || b === "arbitrary") {
463
+ return false;
464
+ }
465
+ return bucketsCompatible(a, b);
466
+ }
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Shared types for the arrange pipeline (Tailwind `cn()` / `tv()` tooling).
3
+ *
4
+ * Buckets follow a **render-pipeline order** (existence → … → conditions), aligned
5
+ * with Tailwind v4 utility groupings.
6
+ */
7
+ import type { DomainAstNode, DomainCallExpression, DomainSourceFile, DomainTailwindClassLiteral } from "#lib/arrange/domain/ast/ast-node.model";
8
+ export type Bucket = "existence" | "position" | "layout" | "sizing" | "spacing" | "shape" | "background" | "shadow" | "typography" | "composite" | "motion" | "starting" | "behavior"
9
+ /** Selector variants (e.g. `[&…]:`, `*:`, `has-*`) distinct from interactive/data state. */
10
+ | "selector" | "state" | "arbitrary" | "other";
11
+ /** String or no-substitution template literal used as a Tailwind class blob. */
12
+ export type TailwindClassLiteral = DomainTailwindClassLiteral;
13
+ export type ForEachStringLiteralInClassExpressionOptions = {
14
+ /**
15
+ * When `false`, do not visit literals inside `cond ? "a" : "b"`. Used when
16
+ * building the cn/tv **apply** pool so mutually exclusive branch classes are
17
+ * never merged into one static string (while `analyze` still uses the default).
18
+ */
19
+ descendIntoConditional?: boolean;
20
+ };
21
+ export type JsxClassNameStatic = {
22
+ lit: TailwindClassLiteral;
23
+ /** Replace this node: `StringLiteral` or whole `JsxExpression`. */
24
+ valueNode: DomainAstNode;
25
+ };
26
+ /**
27
+ * A StringNode represents a single "grouping slot" — the full set of static
28
+ * string literals that belong to one logical class surface.
29
+ */
30
+ export type StringNode = {
31
+ /** All static string literals belonging to this slot, in source order. */
32
+ nodes: TailwindClassLiteral[];
33
+ sf: DomainSourceFile;
34
+ /** String slots in `tv({ ... })` that are not `cn(...)` arguments — use `formatArray`. */
35
+ isTvContext: boolean;
36
+ /** When set, the entire cn(...) call is replaced at once. */
37
+ cnCall?: DomainCallExpression;
38
+ /** First literal in the slot; used for positions and line-number reporting. */
39
+ get primaryClassLiteral(): TailwindClassLiteral;
40
+ };
41
+ export type GroupTarget = {
42
+ kind: "cnArg";
43
+ item: StringNode;
44
+ } | {
45
+ kind: "jsxClassName";
46
+ sf: DomainSourceFile;
47
+ lit: TailwindClassLiteral;
48
+ valueNode: DomainAstNode;
49
+ };
50
+ export type PlannedGroupEdit = {
51
+ start: number;
52
+ end: number;
53
+ replacement: string;
54
+ /** Per-chunk bucket labels (same as `arrange group` trailing `// Buckets:` line). */
55
+ bucketSummary: string[];
56
+ jsxCn: boolean;
57
+ lineSf: DomainSourceFile;
58
+ reportNode: DomainAstNode;
59
+ label: string;
60
+ };
61
+ export type AnalyzeReport = {
62
+ files: number;
63
+ cnCallExpressions: number;
64
+ tvCallExpressions: number;
65
+ cnInsideTvCalls: Array<{
66
+ file: string;
67
+ line: number;
68
+ argCount: number;
69
+ preview: string;
70
+ }>;
71
+ longCnStringLiterals: Array<{
72
+ file: string;
73
+ line: number;
74
+ tokenCount: number;
75
+ preview: string;
76
+ }>;
77
+ longTvStringLiterals: Array<{
78
+ file: string;
79
+ line: number;
80
+ tokenCount: number;
81
+ preview: string;
82
+ }>;
83
+ longJsxClassNameLiterals: Array<{
84
+ file: string;
85
+ line: number;
86
+ tokenCount: number;
87
+ preview: string;
88
+ }>;
89
+ };
90
+ export type GroupFileResult = {
91
+ filePath: string;
92
+ /**
93
+ * Sites worth human review: applied edits plus `cn()` inside `tv` with no args
94
+ * (skipped). Matches preview totals when `groupEdits` correspond to the same plan.
95
+ */
96
+ totalFound: number;
97
+ /** Edits actually written in apply mode; always 0 in preview mode. */
98
+ changed: number;
99
+ };
100
+ export type ArrangeGroupFileOptions = {
101
+ write: boolean;
102
+ withClassName: boolean;
103
+ cnImport?: string;
104
+ };
105
+ export type ArrangeRunOnTargetOptions = ArrangeGroupFileOptions;
106
+ export type ArrangeRunResult = {
107
+ filePaths: string[];
108
+ modifiedFiles: string[];
109
+ totalFound: number;
110
+ totalChanged: number;
111
+ };
112
+ //# sourceMappingURL=types.d.ts.map