@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
@@ -1,113 +0,0 @@
1
- import { l as unwrapCnInsideTvCallReplacement, n as applyEditsDescending, o as lineOf, r as buildKnownCnTvBindings } from "./ast-helpers-MDRYuIAk.mjs";
2
- import { a as listAllCnCallsInsideTvInSourceFile } from "./collectors-tv-D2PXZaRt.mjs";
3
- import { a as targetReplaceStart, i as planGroupEditForTarget, t as collectGroupTargets } from "./targets-pCTslnFh.mjs";
4
- import { n as ensureCnImport } from "./imports-DSVq1xhB.mjs";
5
- import ts from "typescript";
6
- //#region src/lib/arrange/application/group-file.ts
7
- function printGroupFilePreview(logger, args) {
8
- const { out } = logger;
9
- const { filePath, reportTotal, cnInTvNoReplacement, cnInTvCalls, unwrapReplacementByCall, sourceText, sf, unwrapEdits, plannedGroupEdits } = args;
10
- let header = `\n── ${filePath} (${reportTotal} site(s)`;
11
- if (cnInTvNoReplacement > 0) header += `; plus ${cnInTvNoReplacement} cn() inside tv left unchanged (0 args)`;
12
- header += `) ──`;
13
- out(header);
14
- for (const call of cnInTvCalls) {
15
- const replacement = unwrapReplacementByCall.get(call);
16
- if (replacement === void 0) {
17
- out(` Line ${lineOf(sf, call)} [tv ⊃ cn]: cn(...) has no arguments — skipped`);
18
- continue;
19
- }
20
- const start = call.getStart(sf);
21
- const end = call.getEnd();
22
- if (sourceText.slice(start, end) === replacement) continue;
23
- out(` Line ${lineOf(sf, call)} [tv ⊃ cn → string/array]:`);
24
- out(` ${replacement.split("\n").join("\n ")}`);
25
- }
26
- if (unwrapEdits.length > 0 && plannedGroupEdits.length > 0) out(" ([cn] / [tv] / [JSX className] lines below reflect content after unwrap of cn inside tv.)");
27
- for (const plan of plannedGroupEdits) {
28
- out(` Line ${lineOf(plan.lineSf, plan.reportNode)} [${plan.label}]:`);
29
- out(` ${plan.replacement.split("\n").join("\n ")}`);
30
- out(` // Buckets: ${JSON.stringify(plan.bucketSummary)}`);
31
- }
32
- }
33
- function applyGroupFileWrites(filePath, options, fs, logger, unwrapEdits, textAfterUnwrap, plannedGroupEdits, cnInTvNoReplacement) {
34
- const groupEdits = plannedGroupEdits.map((plannedEdit) => ({
35
- start: plannedEdit.start,
36
- end: plannedEdit.end,
37
- replacement: plannedEdit.replacement,
38
- jsxCn: plannedEdit.jsxCn
39
- }));
40
- const touchedJsxCn = groupEdits.some((groupEdit) => groupEdit.jsxCn);
41
- let newText = groupEdits.length > 0 ? applyEditsDescending(textAfterUnwrap, groupEdits) : textAfterUnwrap;
42
- const changed = unwrapEdits.length + groupEdits.length;
43
- if (changed > 0) {
44
- if (touchedJsxCn) newText = ensureCnImport(newText, filePath, options.cnImport);
45
- fs.writeFileSync(filePath, newText, "utf8");
46
- }
47
- return {
48
- filePath,
49
- totalFound: changed + cnInTvNoReplacement,
50
- changed
51
- };
52
- }
53
- function groupFile(filePath, options, fs, logger) {
54
- const sourceText = fs.readFileSync(filePath, "utf8");
55
- const sf = ts.createSourceFile(filePath, sourceText, ts.ScriptTarget.Latest, true, filePath.endsWith(".tsx") ? ts.ScriptKind.TSX : ts.ScriptKind.TS);
56
- const cnInTvCalls = listAllCnCallsInsideTvInSourceFile(sf, buildKnownCnTvBindings(sf));
57
- const unwrapPlans = cnInTvCalls.map((call) => {
58
- const replacement = unwrapCnInsideTvCallReplacement(call, sourceText, sf);
59
- if (replacement === void 0) return void 0;
60
- return {
61
- start: call.getStart(sf),
62
- end: call.getEnd(),
63
- replacement,
64
- call
65
- };
66
- }).filter((planOrUndefined) => planOrUndefined !== void 0);
67
- const unwrapReplacementByCall = new Map(unwrapPlans.map((unwrapPlan) => [unwrapPlan.call, unwrapPlan.replacement]));
68
- const unwrapEdits = unwrapPlans.filter((unwrapPlan) => sourceText.slice(unwrapPlan.start, unwrapPlan.end) !== unwrapPlan.replacement);
69
- const textAfterUnwrap = unwrapEdits.length > 0 ? applyEditsDescending(sourceText, unwrapEdits) : sourceText;
70
- const groupTargets = collectGroupTargets(ts.createSourceFile(filePath, textAfterUnwrap, ts.ScriptTarget.Latest, true, filePath.endsWith(".tsx") ? ts.ScriptKind.TSX : ts.ScriptKind.TS), filePath);
71
- const cnInTvNoReplacement = cnInTvCalls.length - unwrapPlans.length;
72
- const sortedTargets = [...groupTargets].sort((leftTarget, rightTarget) => targetReplaceStart(rightTarget) - targetReplaceStart(leftTarget));
73
- const plannedGroupEdits = [];
74
- for (const groupTarget of sortedTargets) {
75
- const plan = planGroupEditForTarget(groupTarget, textAfterUnwrap, options.withClassName);
76
- if (plan === void 0) continue;
77
- if (textAfterUnwrap.slice(plan.start, plan.end) === plan.replacement) continue;
78
- plannedGroupEdits.push(plan);
79
- }
80
- const editSitesCount = unwrapEdits.length + plannedGroupEdits.length;
81
- const reportTotal = editSitesCount + cnInTvNoReplacement;
82
- if (cnInTvCalls.length === 0 && groupTargets.length === 0) return {
83
- filePath,
84
- totalFound: 0,
85
- changed: 0
86
- };
87
- if (!options.write) {
88
- if (editSitesCount === 0 && cnInTvNoReplacement === 0) return {
89
- filePath,
90
- totalFound: 0,
91
- changed: 0
92
- };
93
- printGroupFilePreview(logger, {
94
- filePath,
95
- reportTotal,
96
- cnInTvNoReplacement,
97
- cnInTvCalls,
98
- unwrapReplacementByCall,
99
- sourceText,
100
- sf,
101
- unwrapEdits,
102
- plannedGroupEdits
103
- });
104
- return {
105
- filePath,
106
- totalFound: reportTotal,
107
- changed: 0
108
- };
109
- }
110
- return applyGroupFileWrites(filePath, options, fs, logger, unwrapEdits, textAfterUnwrap, plannedGroupEdits, cnInTvNoReplacement);
111
- }
112
- //#endregion
113
- export { groupFile as t };
@@ -1,235 +0,0 @@
1
- import { n as BUCKET_ORDER } from "./constants-AtPhF-Ct.mjs";
2
- import { a as compositeSecondaryOrder, c as selectorKey, d as tokenizeClassString, i as classifyToken, l as stateKey, n as bucketsMergeCompatible, t as bucketsCompatible, u as stripVariants } from "./tokenizer-CeZx73Zu.mjs";
3
- //#region src/lib/arrange/domain/grouping.ts
4
- function isVariantKeyedBucket(bucket) {
5
- return bucket === "selector" || bucket === "state" || bucket === "starting";
6
- }
7
- function variantGroupKey(bucket, classToken) {
8
- return bucket === "selector" ? selectorKey(classToken) : stateKey(classToken);
9
- }
10
- /**
11
- * True when `staticLiteralTexts` carries the **same partition** of Tailwind tokens as
12
- * `suggestedGroups` from {@link suggestCnGroups}, ignoring order of arguments and
13
- * order of tokens within each chunk.
14
- */
15
- function areCnTailwindPartitionsEquivalent(staticLiteralTexts, suggestedGroups) {
16
- const partitionSignatures = (chunks) => chunks.map((chunk) => {
17
- const classTokens = tokenizeClassString(chunk);
18
- return classTokens.length === 0 ? "" : [...classTokens].sort().join(" ");
19
- }).filter((s) => s.length > 0).sort((a, b) => a.localeCompare(b));
20
- const staticPartitionSigs = partitionSignatures(staticLiteralTexts);
21
- const suggestedPartitionSigs = partitionSignatures(suggestedGroups);
22
- if (staticPartitionSigs.length !== suggestedPartitionSigs.length) return false;
23
- for (let i = 0; i < staticPartitionSigs.length; i++) if (staticPartitionSigs[i] !== suggestedPartitionSigs[i]) return false;
24
- return true;
25
- }
26
- /** Dominant bucket of a whitespace-delimited class group (for merge heuristics). */
27
- function dominantBucketOfGroup(groupStr) {
28
- const counts = /* @__PURE__ */ new Map();
29
- for (const classToken of tokenizeClassString(groupStr)) {
30
- const tokenBucket = classifyToken(classToken);
31
- counts.set(tokenBucket, (counts.get(tokenBucket) ?? 0) + 1);
32
- }
33
- let best = "other";
34
- let bestN = 0;
35
- for (const [bucket, count] of counts) {
36
- if (count > bestN) {
37
- best = bucket;
38
- bestN = count;
39
- continue;
40
- }
41
- if (count === bestN && BUCKET_ORDER[bucket] < BUCKET_ORDER[best]) best = bucket;
42
- }
43
- return best;
44
- }
45
- /** Dynamic cap: more tokens → allow more groups, within [BASE, CAP]. */
46
- function dynamicMaxGroups(tokenCount) {
47
- const byTokens = Math.ceil(tokenCount / 2) + 2;
48
- return Math.max(4, Math.min(24, byTokens));
49
- }
50
- /**
51
- * Merge singleton groups (< MIN_GROUP_TOKENS tokens) into their nearest
52
- * neighbour. Prefers merging toward a bucket-compatible neighbor.
53
- *
54
- * Loop termination: each iteration either splices one element (shrinking the
55
- * array, guaranteeing progress) or finds no singleton that can merge and exits
56
- * via `changed = false`. Two mutually-incompatible singletons both hit
57
- * `continue` and `changed` stays false, so the loop exits without spinning.
58
- */
59
- function mergeSingletons(groups) {
60
- if (groups.length <= 1) return groups;
61
- const result = [...groups];
62
- let changed = true;
63
- while (changed) {
64
- changed = false;
65
- for (let i = 0; i < result.length; i++) if (tokenizeClassString(result[i]).length < 2) {
66
- if (result.length === 1) break;
67
- const myBucket = dominantBucketOfGroup(result[i]);
68
- const prevCompat = i > 0 && bucketsMergeCompatible(myBucket, dominantBucketOfGroup(result[i - 1]));
69
- const nextCompat = i < result.length - 1 && bucketsMergeCompatible(myBucket, dominantBucketOfGroup(result[i + 1]));
70
- let mergeDir;
71
- if (nextCompat && !prevCompat) mergeDir = "forward";
72
- else if (prevCompat && !nextCompat) mergeDir = "backward";
73
- else if (prevCompat && nextCompat) mergeDir = i < result.length - 1 ? "forward" : "backward";
74
- else continue;
75
- if (mergeDir === "forward") result[i + 1] = result[i] + " " + result[i + 1];
76
- else result[i - 1] = result[i - 1] + " " + result[i];
77
- result.splice(i, 1);
78
- changed = true;
79
- break;
80
- }
81
- }
82
- return result;
83
- }
84
- /** Tie-break when two merge candidates are both {@link bucketsMergeCompatible} (same bucket or COMPATIBLE_BUCKET_SETS). */
85
- function capMergePenalty(leftBucket, rightBucket) {
86
- if (leftBucket === rightBucket) return 0;
87
- if (bucketsCompatible(leftBucket, rightBucket)) return 0;
88
- return 500;
89
- }
90
- /**
91
- * Merge adjacent groups until total count ≤ maxGroups.
92
- * Only merges pairs allowed by {@link bucketsMergeCompatible} — never glues incompatible
93
- * buckets (which previously defaulted to penalty 0 and merged layout+state when over cap).
94
- *
95
- * Complexity: O(n²) in the number of groups — each merge pass scans all remaining adjacent
96
- * pairs. In practice `n` is bounded by {@link MAX_GROUPS_CAP} (24) and typical class strings
97
- * are well below that, so this is not a concern for the current usage pattern. If this ever
98
- * runs in a high-throughput batch mode, consider a priority-queue approach.
99
- */
100
- function capGroups(groups, maxGroups) {
101
- const result = [...groups];
102
- const lengths = result.map((groupStr) => tokenizeClassString(groupStr).length);
103
- while (result.length > maxGroups) {
104
- const mergePairCandidates = [];
105
- for (let i = 0; i < result.length - 1; i++) {
106
- const dominantLeft = dominantBucketOfGroup(result[i]);
107
- const dominantRight = dominantBucketOfGroup(result[i + 1]);
108
- if (!bucketsMergeCompatible(dominantLeft, dominantRight)) continue;
109
- mergePairCandidates.push({
110
- i,
111
- size: lengths[i] + lengths[i + 1],
112
- penalty: capMergePenalty(dominantLeft, dominantRight)
113
- });
114
- }
115
- if (mergePairCandidates.length === 0) break;
116
- let best = mergePairCandidates[0];
117
- for (const candidate of mergePairCandidates) if (candidate.penalty < best.penalty || candidate.penalty === best.penalty && candidate.size < best.size) best = candidate;
118
- const bestIdx = best.i;
119
- result[bestIdx] = result[bestIdx] + " " + result[bestIdx + 1];
120
- lengths[bestIdx] = lengths[bestIdx] + lengths[bestIdx + 1];
121
- result.splice(bestIdx + 1, 1);
122
- lengths.splice(bestIdx + 1, 1);
123
- }
124
- return result;
125
- }
126
- /**
127
- * If a chunk is **only** bare `ease-*` timing (Motion), buffer it and prepend to the **first**
128
- * **later** chunk that is predominantly `state` **and** contains some `animate-*` utility —
129
- * skipping intermediate `state` chunks (`sm:…`, `group-data-[…]:…`, etc.) that sit between
130
- * `ease-ui` and `data-open:animate-*`. If no such chunk exists, the ease chunk is left as-is.
131
- */
132
- function mergeEaseTimingIntoFollowingAnimatedState(groups) {
133
- const result = [...groups];
134
- let changed = true;
135
- while (changed) {
136
- changed = false;
137
- for (let i = 0; i < result.length; i++) {
138
- if (!chunkIsOnlyEaseTimingMotion(result[i])) continue;
139
- const easeStr = result[i];
140
- let target = -1;
141
- for (let j = i + 1; j < result.length; j++) {
142
- if (dominantBucketOfGroup(result[j]) !== "state") continue;
143
- if (!tokenizeClassString(result[j]).some((classToken) => /^animate/.test(stripVariants(classToken)))) continue;
144
- target = j;
145
- break;
146
- }
147
- if (target === -1) continue;
148
- result[target] = `${easeStr} ${result[target]}`.trim();
149
- result.splice(i, 1);
150
- changed = true;
151
- break;
152
- }
153
- }
154
- return result;
155
- }
156
- function chunkIsOnlyEaseTimingMotion(groupStr) {
157
- const classTokens = tokenizeClassString(groupStr);
158
- if (classTokens.length === 0) return false;
159
- return classTokens.every((classToken) => classifyToken(classToken) === "motion" && /^ease-/.test(stripVariants(classToken)));
160
- }
161
- function suggestCnGroups(classString) {
162
- const tokens = tokenizeClassString(classString);
163
- if (tokens.length === 0) return [];
164
- const classified = tokens.map((classToken, index) => ({
165
- classToken,
166
- bucket: classifyToken(classToken),
167
- index
168
- }));
169
- classified.sort((left, right) => {
170
- const bucketOrderDiff = BUCKET_ORDER[left.bucket] - BUCKET_ORDER[right.bucket];
171
- if (bucketOrderDiff !== 0) return bucketOrderDiff;
172
- if (left.bucket === "composite" && right.bucket === "composite") {
173
- const compositeOrderDiff = compositeSecondaryOrder(stripVariants(left.classToken)) - compositeSecondaryOrder(stripVariants(right.classToken));
174
- if (compositeOrderDiff !== 0) return compositeOrderDiff;
175
- }
176
- return left.index - right.index;
177
- });
178
- const rawGroups = [];
179
- /** Bucket of the last token already placed in the current run (pairwise compat with `COMPATIBLE_BUCKET_SETS`). */
180
- let lastBucketInRun = null;
181
- let currentStateKey = null;
182
- let currentTokens = [];
183
- const flush = () => {
184
- if (currentTokens.length > 0) {
185
- rawGroups.push(currentTokens.join(" "));
186
- currentTokens = [];
187
- }
188
- lastBucketInRun = null;
189
- currentStateKey = null;
190
- };
191
- for (const { classToken, bucket: tokenBucket } of classified) {
192
- if (lastBucketInRun === null) {
193
- lastBucketInRun = tokenBucket;
194
- currentStateKey = isVariantKeyedBucket(tokenBucket) ? variantGroupKey(tokenBucket, classToken) : null;
195
- currentTokens.push(classToken);
196
- continue;
197
- }
198
- if (isVariantKeyedBucket(tokenBucket)) {
199
- const key = variantGroupKey(tokenBucket, classToken);
200
- if (currentStateKey !== null && key !== currentStateKey) {
201
- flush();
202
- lastBucketInRun = tokenBucket;
203
- currentStateKey = key;
204
- currentTokens.push(classToken);
205
- continue;
206
- }
207
- }
208
- if (!bucketsCompatible(tokenBucket, lastBucketInRun)) {
209
- flush();
210
- lastBucketInRun = tokenBucket;
211
- currentStateKey = isVariantKeyedBucket(tokenBucket) ? variantGroupKey(tokenBucket, classToken) : null;
212
- currentTokens.push(classToken);
213
- continue;
214
- }
215
- if (isVariantKeyedBucket(tokenBucket)) currentStateKey = variantGroupKey(tokenBucket, classToken);
216
- else if (currentStateKey !== null) currentStateKey = null;
217
- lastBucketInRun = tokenBucket;
218
- currentTokens.push(classToken);
219
- }
220
- flush();
221
- const withEaseMerged = mergeEaseTimingIntoFollowingAnimatedState(mergeSingletons(rawGroups));
222
- return capGroups(withEaseMerged, Math.max(dynamicMaxGroups(tokens.length), withEaseMerged.length));
223
- }
224
- /**
225
- * One label per suggested group: a single bucket name, or `mixed:a+b` when that chunk
226
- * spans multiple Tailwind buckets (matches `codefast arrange group` stdout).
227
- */
228
- function summarizeGroupBucketLabels(groups) {
229
- return groups.map((g) => {
230
- const uniq = new Set(tokenizeClassString(g).map(classifyToken));
231
- return uniq.size === 1 ? [...uniq][0] : `mixed:${[...uniq].sort().join("+")}`;
232
- });
233
- }
234
- //#endregion
235
- export { suggestCnGroups as a, mergeSingletons as i, capGroups as n, summarizeGroupBucketLabels as o, mergeEaseTimingIntoFollowingAnimatedState as r, areCnTailwindPartitionsEquivalent as t };
@@ -1,54 +0,0 @@
1
- import ts from "typescript";
2
- //#region src/lib/arrange/domain/imports.ts
3
- function sourceFileImportsCn(sf) {
4
- for (const statement of sf.statements) {
5
- if (!ts.isImportDeclaration(statement) || !statement.importClause) continue;
6
- const clause = statement.importClause;
7
- if (clause.name?.text === "cn") return true;
8
- if (clause.namedBindings && ts.isNamedImports(clause.namedBindings)) {
9
- for (const importedBinding of clause.namedBindings.elements) if (importedBinding.name.text === "cn") return true;
10
- }
11
- }
12
- return false;
13
- }
14
- /**
15
- * Resolve the module specifier used when injecting a `cn` import into a file.
16
- */
17
- function cnModuleSpecifierForFile(filePath, override) {
18
- if (override) return override;
19
- return "@codefast/tailwind-variants";
20
- }
21
- function findImportDeclarationFromModule(sf, moduleSpecifier) {
22
- for (const statement of sf.statements) {
23
- if (!ts.isImportDeclaration(statement)) continue;
24
- const spec = statement.moduleSpecifier;
25
- if (ts.isStringLiteral(spec) && spec.text === moduleSpecifier) return statement;
26
- }
27
- }
28
- function ensureCnImport(sourceText, filePath, cnImportOverride) {
29
- const sf = ts.createSourceFile(filePath, sourceText, ts.ScriptTarget.Latest, true, filePath.endsWith(".tsx") ? ts.ScriptKind.TSX : ts.ScriptKind.TS);
30
- if (sourceFileImportsCn(sf)) return sourceText;
31
- const moduleSpecifier = cnModuleSpecifierForFile(filePath, cnImportOverride);
32
- const decl = findImportDeclarationFromModule(sf, moduleSpecifier);
33
- if (decl?.importClause && !decl.importClause.isTypeOnly && decl.importClause.namedBindings && ts.isNamedImports(decl.importClause.namedBindings)) {
34
- const elements = decl.importClause.namedBindings.elements;
35
- if (elements.length > 0) {
36
- const pos = elements[0].getStart(sf);
37
- return `${sourceText.slice(0, pos)}cn, ${sourceText.slice(pos)}`;
38
- }
39
- }
40
- const importLine = `import { cn } from "${moduleSpecifier}";`;
41
- let firstImport = -1;
42
- for (const statement of sf.statements) if (ts.isImportDeclaration(statement)) {
43
- firstImport = statement.getStart(sf);
44
- break;
45
- }
46
- const useClient = /^["']use client["'];?\s*\r?\n/.exec(sourceText);
47
- let insertAt;
48
- if (useClient) insertAt = useClient[0].length;
49
- else if (firstImport !== -1) insertAt = firstImport;
50
- else insertAt = 0;
51
- return `${sourceText.slice(0, insertAt)}${importLine}\n${sourceText.slice(insertAt)}`;
52
- }
53
- //#endregion
54
- export { ensureCnImport as n, cnModuleSpecifierForFile as t };
@@ -1,2 +0,0 @@
1
- import { t as analyzeDirectory } from "../../../analyze-DvtJ3j9m.mjs";
2
- export { analyzeDirectory };
@@ -1,171 +0,0 @@
1
- import { t as analyzeDirectory } from "../../../analyze-DvtJ3j9m.mjs";
2
- import { t as printAnalyzeReport } from "../../../report-DYxvw34T.mjs";
3
- import { n as createNodeCliLogger, t as createNodeCliFs } from "../../../node-io-DFRbHO6m.mjs";
4
- import "../../../arrange-BqP2DI3w.mjs";
5
- import fs from "node:fs";
6
- import path from "node:path";
7
- import os from "node:os";
8
- //#region src/lib/arrange/application/analyze.test.ts
9
- const arrangeFs = createNodeCliFs();
10
- const arrangeLogger = createNodeCliLogger();
11
- function captureStdout(fn) {
12
- const chunks = [];
13
- const spy = jest.spyOn(process.stdout, "write").mockImplementation((chunk) => {
14
- chunks.push(typeof chunk === "string" ? chunk : Buffer.from(chunk).toString("utf8"));
15
- return true;
16
- });
17
- try {
18
- fn();
19
- } finally {
20
- spy.mockRestore();
21
- }
22
- return chunks.join("");
23
- }
24
- describe("analyzeDirectory + printAnalyzeReport", () => {
25
- it("collects long cn / tv / JSX literals and nested cn in tv", () => {
26
- const dir = fs.mkdtempSync(path.join(os.tmpdir(), "arr-analyze-"));
27
- const long = "peer flex size-4 shrink-0 items-center justify-center rounded-sm border border-input text-primary-foreground shadow-xs outline-hidden transition hover:not-disabled:not-aria-checked:border-ring/60 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:opacity-50";
28
- const source = `import { cn, tv } from "@codefast/tailwind-variants";
29
-
30
- cn("${long}");
31
- export const styles = tv({ base: "${long}" });
32
- export function X() { return <div className={"${long}"} />; }
33
- export const nested = tv({ base: cn("x", "${long}") });
34
- `;
35
- try {
36
- fs.writeFileSync(path.join(dir, "Report.tsx"), source, "utf8");
37
- const report = analyzeDirectory(dir, arrangeFs);
38
- expect(report.files).toBe(1);
39
- expect(report.cnCallExpressions).toBeGreaterThanOrEqual(1);
40
- expect(report.tvCallExpressions).toBeGreaterThanOrEqual(1);
41
- expect(report.longCnStringLiterals.length).toBeGreaterThanOrEqual(1);
42
- expect(report.longTvStringLiterals.length).toBeGreaterThanOrEqual(1);
43
- expect(report.longJsxClassNameLiterals.length).toBeGreaterThanOrEqual(1);
44
- expect(report.cnInsideTvCalls.length).toBeGreaterThanOrEqual(1);
45
- const printed = captureStdout(() => printAnalyzeReport(dir, report, arrangeLogger));
46
- expect(printed).toContain("Long cn(...)");
47
- expect(printed).toContain("nested inside tv");
48
- } finally {
49
- fs.rmSync(dir, {
50
- recursive: true,
51
- force: true
52
- });
53
- }
54
- });
55
- it("truncates long-cn listing after MAX_REPORT_LINES", () => {
56
- const dir = fs.mkdtempSync(path.join(os.tmpdir(), "arr-analyze-many-"));
57
- const long = "peer flex size-4 shrink-0 items-center justify-center rounded-sm border border-input text-primary-foreground shadow-xs outline-hidden transition hover:not-disabled:not-aria-checked:border-ring/60 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:opacity-50";
58
- try {
59
- let body = `import { cn } from "@codefast/tailwind-variants";\n`;
60
- for (let i = 0; i < 42; i++) body += `cn("${long}");\n`;
61
- fs.writeFileSync(path.join(dir, "Many.tsx"), body, "utf8");
62
- const report = analyzeDirectory(dir, arrangeFs);
63
- const printed = captureStdout(() => printAnalyzeReport(dir, report, arrangeLogger));
64
- expect(report.longCnStringLiterals.length).toBeGreaterThan(40);
65
- expect(printed).toMatch(/… and \d+ more/);
66
- } finally {
67
- fs.rmSync(dir, {
68
- recursive: true,
69
- force: true
70
- });
71
- }
72
- });
73
- it("truncates long-tv, JSX, and cn-inside-tv sections", () => {
74
- const row = {
75
- file: "x.tsx",
76
- line: 1,
77
- tokenCount: 22,
78
- preview: "p".repeat(40)
79
- };
80
- const manyTv = Array.from({ length: 42 }, (_, i) => ({
81
- ...row,
82
- line: i + 1
83
- }));
84
- const manyJsx = Array.from({ length: 42 }, (_, i) => ({
85
- ...row,
86
- line: i + 1
87
- }));
88
- const manyNested = Array.from({ length: 42 }, (_, i) => ({
89
- file: "x.tsx",
90
- line: i + 1,
91
- argCount: 1,
92
- preview: "cn(...)"
93
- }));
94
- const matches = captureStdout(() => printAnalyzeReport("/tmp/arr-truncate", {
95
- files: 1,
96
- cnCallExpressions: 0,
97
- tvCallExpressions: 1,
98
- cnInsideTvCalls: manyNested,
99
- longCnStringLiterals: [],
100
- longTvStringLiterals: manyTv,
101
- longJsxClassNameLiterals: manyJsx
102
- }, arrangeLogger)).match(/… and \d+ more/g);
103
- expect(matches?.length).toBeGreaterThanOrEqual(3);
104
- });
105
- it("does not count JSX className={identifier} as long literal", () => {
106
- const dir = fs.mkdtempSync(path.join(os.tmpdir(), "arr-jsx-dyn-"));
107
- try {
108
- fs.writeFileSync(path.join(dir, "Dyn.tsx"), `export function F(cls: string) { return <div className={cls} />; }`, "utf8");
109
- const report = analyzeDirectory(dir, arrangeFs);
110
- expect(report.longJsxClassNameLiterals.length).toBe(0);
111
- } finally {
112
- fs.rmSync(dir, {
113
- recursive: true,
114
- force: true
115
- });
116
- }
117
- });
118
- it("analyzes tv compoundVariants with quoted className key", () => {
119
- const dir = fs.mkdtempSync(path.join(os.tmpdir(), "arr-tv-quoted-"));
120
- const long = "peer flex size-4 shrink-0 items-center justify-center rounded-sm border border-input text-primary-foreground shadow-xs outline-hidden transition hover:not-disabled:not-aria-checked:border-ring/60 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:opacity-50";
121
- try {
122
- fs.writeFileSync(path.join(dir, "Quoted.tsx"), `import { tv } from "@codefast/tailwind-variants";
123
- export const styles = tv({ compoundVariants: [{ "className": "${long}" }] });`, "utf8");
124
- const report = analyzeDirectory(dir, arrangeFs);
125
- expect(report.longTvStringLiterals.length).toBeGreaterThanOrEqual(1);
126
- } finally {
127
- fs.rmSync(dir, {
128
- recursive: true,
129
- force: true
130
- });
131
- }
132
- });
133
- it("analyzes tv array slots with nested cn", () => {
134
- const dir = fs.mkdtempSync(path.join(os.tmpdir(), "arr-analyze-tv-array-"));
135
- const long = "peer flex size-4 shrink-0 items-center justify-center rounded-sm border border-input text-primary-foreground shadow-xs outline-hidden transition hover:not-disabled:not-aria-checked:border-ring/60 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:opacity-50";
136
- try {
137
- fs.writeFileSync(path.join(dir, "TvArray.tsx"), `import { cn, tv } from "@codefast/tailwind-variants";
138
- export const styles = tv({ base: [cn("${long}"), "py-0"] });`, "utf8");
139
- const report = analyzeDirectory(dir, arrangeFs);
140
- expect(report.tvCallExpressions).toBeGreaterThanOrEqual(1);
141
- expect(report.cnInsideTvCalls.length).toBeGreaterThanOrEqual(1);
142
- } finally {
143
- fs.rmSync(dir, {
144
- recursive: true,
145
- force: true
146
- });
147
- }
148
- });
149
- it("accepts legacy tailwind-variants imports during analyze pass (backward compat)", () => {
150
- const dir = fs.mkdtempSync(path.join(os.tmpdir(), "arr-analyze-legacy-"));
151
- const long = "peer flex size-4 shrink-0 items-center justify-center rounded-sm border border-input text-primary-foreground shadow-xs outline-hidden transition hover:not-disabled:not-aria-checked:border-ring/60 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:opacity-50";
152
- const source = `import { cn, tv } from "tailwind-variants";
153
-
154
- cn("${long}");
155
- export const styles = tv({ base: "${long}" });
156
- `;
157
- try {
158
- fs.writeFileSync(path.join(dir, "Legacy.tsx"), source, "utf8");
159
- const report = analyzeDirectory(dir, arrangeFs);
160
- expect(report.cnCallExpressions).toBeGreaterThanOrEqual(1);
161
- expect(report.tvCallExpressions).toBeGreaterThanOrEqual(1);
162
- } finally {
163
- fs.rmSync(dir, {
164
- recursive: true,
165
- force: true
166
- });
167
- }
168
- });
169
- });
170
- //#endregion
171
- export {};
@@ -1,2 +0,0 @@
1
- import { t as groupFile } from "../../../group-file-ClW7XdD6.mjs";
2
- export { groupFile };