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

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 (426) hide show
  1. package/README.md +30 -4
  2. package/dist/{bin.js → bin.mjs} +4 -1
  3. package/dist/commands/arrange.mjs +325 -0
  4. package/dist/commands/mirror.mjs +267 -0
  5. package/dist/commands/tag.mjs +283 -0
  6. package/dist/lib/arrange/application/arrange-analyze-json.format.mjs +10 -0
  7. package/dist/lib/arrange/application/arrange-group-json.format.mjs +11 -0
  8. package/dist/lib/arrange/application/arrange-sync-cli-result.mjs +7 -0
  9. package/dist/lib/arrange/application/arrange-sync-json.format.mjs +12 -0
  10. package/dist/lib/arrange/application/services/arrange-file-processor.service.mjs +242 -0
  11. package/dist/lib/arrange/application/services/arrange-target-scanner.service.mjs +237 -0
  12. package/dist/lib/arrange/application/use-cases/analyze-directory.use-case.mjs +258 -0
  13. package/dist/lib/arrange/application/use-cases/group-file.use-case.mjs +35 -0
  14. package/dist/lib/arrange/application/use-cases/run-arrange-sync.use-case.mjs +283 -0
  15. package/dist/lib/arrange/application/use-cases/suggest-cn-groups.use-case.mjs +233 -0
  16. package/dist/lib/arrange/arrange.feature.module.mjs +19 -0
  17. package/dist/lib/arrange/arrange.module.mjs +27 -0
  18. package/dist/lib/arrange/arrange.presentation.module.mjs +13 -0
  19. package/dist/lib/arrange/contracts/tokens.mjs +14 -0
  20. package/dist/lib/arrange/domain/arrange-analyze.service.mjs +95 -0
  21. package/dist/lib/arrange/domain/arrange-grouping.service.mjs +100 -0
  22. package/dist/lib/arrange/domain/ast/ast-helpers.helper.mjs +89 -0
  23. package/dist/lib/arrange/domain/ast/ast-node.model.mjs +181 -0
  24. package/dist/lib/arrange/domain/ast/collectors-cn.collector.mjs +52 -0
  25. package/dist/lib/arrange/domain/ast/collectors-jsx.collector.mjs +20 -0
  26. package/dist/lib/arrange/domain/ast/collectors-tv.collector.mjs +174 -0
  27. package/dist/lib/arrange/domain/ast/targets.model.mjs +110 -0
  28. package/dist/lib/arrange/domain/constants.domain.mjs +154 -0
  29. package/dist/lib/arrange/domain/errors.domain.mjs +18 -0
  30. package/dist/lib/arrange/domain/grouping.domain.mjs +306 -0
  31. package/dist/lib/arrange/domain/imports.domain.mjs +55 -0
  32. package/dist/lib/arrange/domain/source-text-formatters.formatter.mjs +54 -0
  33. package/dist/lib/arrange/domain/tokenizer.util.mjs +209 -0
  34. package/dist/lib/arrange/infra/domain-source-parser.adapter.mjs +240 -0
  35. package/dist/lib/arrange/infra/ensure-cn-import.adapter.mjs +8 -0
  36. package/dist/lib/arrange/infra/file-walker.adapter.mjs +239 -0
  37. package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.test-helper.mjs +18 -0
  38. package/dist/lib/arrange/infra/ts-ast-translator.adapter.mjs +355 -0
  39. package/dist/lib/arrange/presentation/arrange-cli-schema.presenter.mjs +29 -0
  40. package/dist/lib/arrange/presentation/arrange-sync.presenter.mjs +12 -0
  41. package/dist/lib/arrange/presentation/formatters.presenter.mjs +2 -0
  42. package/dist/lib/arrange/presentation/group-file-preview.presenter.mjs +275 -0
  43. package/dist/lib/arrange/presentation/prepare-arrange.orchestrator.mjs +258 -0
  44. package/dist/lib/arrange/presentation/present-analyze-cli.presenter.mjs +7 -0
  45. package/dist/lib/arrange/presentation/present-analyze-report.presenter.mjs +233 -0
  46. package/dist/lib/arrange/presentation/report.presenter.mjs +24 -0
  47. package/dist/lib/arrange/presentation/resolve-arrange-cli-target.presenter.mjs +21 -0
  48. package/dist/lib/config/application/use-cases/load-config.use-case.mjs +17 -0
  49. package/dist/lib/config/contracts/tokens.mjs +5 -0
  50. package/dist/lib/config/infra/config-schema.adapter.mjs +25 -0
  51. package/dist/lib/config/infra/loader.adapter.mjs +84 -0
  52. package/dist/lib/core/application/architecture-boundaries.policy.mjs +311 -0
  53. package/dist/lib/core/application/ports/path.port.mjs +1 -0
  54. package/dist/lib/core/application/schema-parse.util.mjs +17 -0
  55. package/dist/lib/core/application/utils/caught-unknown-message.util.mjs +19 -0
  56. package/dist/lib/core/application/utils/verbose-diagnostics.util.mjs +9 -0
  57. package/dist/lib/core/contracts/presentation.contract.mjs +1 -0
  58. package/dist/lib/core/contracts/tokens.mjs +5 -0
  59. package/dist/lib/core/core.module.mjs +9 -0
  60. package/dist/lib/core/domain/cli-exit-codes.domain.mjs +11 -0
  61. package/dist/lib/core/domain/errors.domain.mjs +16 -0
  62. package/dist/lib/core/domain/result.model.mjs +23 -0
  63. package/dist/lib/core/infra/composition-root.mjs +21 -0
  64. package/dist/lib/core/infra/infra.module.mjs +23 -0
  65. package/dist/lib/core/infra/logging-decorator.adapter.mjs +62 -0
  66. package/dist/lib/core/infra/path.adapter.mjs +13 -0
  67. package/dist/lib/core/operational/contracts/tokens.mjs +7 -0
  68. package/dist/lib/core/presentation/cli-executor.presenter.mjs +57 -0
  69. package/dist/lib/core/presentation/command.interface.mjs +1 -0
  70. package/dist/lib/core/presentation/format-app-error.presenter.mjs +17 -0
  71. package/dist/lib/core/presentation/global-cli-options.presenter.mjs +9 -0
  72. package/dist/lib/core/presentation/load-codefast-config.presenter.mjs +18 -0
  73. package/dist/lib/core/presentation/parse-cli-schema.presenter.mjs +7 -0
  74. package/dist/lib/core/presentation/presentation.module.mjs +11 -0
  75. package/dist/lib/core/presentation/try-load-codefast-config.presenter.mjs +245 -0
  76. package/dist/lib/infra/config-reporter.adapter.mjs +9 -0
  77. package/dist/lib/infra/fs-contract.port.mjs +1 -0
  78. package/dist/lib/infra/node-io.adapter.mjs +266 -0
  79. package/dist/lib/infra/workspace/repo-root.adapter.mjs +21 -0
  80. package/dist/lib/kernel/di/command.token.mjs +5 -0
  81. package/dist/lib/mirror/application/mirror-sync-json.format.mjs +12 -0
  82. package/dist/lib/mirror/application/ports/file-system-service.port.mjs +1 -0
  83. package/dist/lib/mirror/application/ports/mirror-sync-reporter.port.mjs +1 -0
  84. package/dist/lib/mirror/application/ports/package-repository.port.mjs +1 -0
  85. package/dist/lib/mirror/application/ports/sync-workspace-package.port.mjs +1 -0
  86. package/dist/lib/mirror/application/ports/workspace-service.port.mjs +1 -0
  87. package/dist/lib/mirror/application/requests/mirror-sync.request.mjs +1 -0
  88. package/dist/lib/mirror/application/services/sync-workspace-package.service.mjs +351 -0
  89. package/dist/lib/mirror/application/use-cases/generate-mirror-exports.use-case.mjs +219 -0
  90. package/dist/lib/mirror/application/use-cases/run-mirror-sync.use-case.mjs +302 -0
  91. package/dist/lib/mirror/contracts/models.mjs +1 -0
  92. package/dist/lib/mirror/contracts/presentation.contract.mjs +1 -0
  93. package/dist/lib/mirror/contracts/tokens.mjs +11 -0
  94. package/dist/lib/mirror/contracts/use-cases.contract.mjs +1 -0
  95. package/dist/lib/mirror/domain/constants.domain.mjs +16 -0
  96. package/dist/lib/mirror/domain/errors.domain.mjs +15 -0
  97. package/dist/lib/mirror/domain/types.domain.mjs +1 -0
  98. package/dist/lib/mirror/infra/dirent-list.adapter.mjs +13 -0
  99. package/dist/lib/mirror/infra/file-system-service.adapter.mjs +256 -0
  100. package/dist/lib/mirror/infra/mirror-sync-cli-options.adapter.mjs +1 -0
  101. package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.mjs +236 -0
  102. package/dist/lib/mirror/infra/package-filter.adapter.mjs +25 -0
  103. package/dist/lib/mirror/infra/package-repository.adapter.mjs +235 -0
  104. package/dist/lib/mirror/infra/path-normalizer.adapter.mjs +7 -0
  105. package/dist/lib/mirror/infra/update-pkg.adapter.mjs +102 -0
  106. package/dist/lib/mirror/infra/workspace-packages.adapter.mjs +154 -0
  107. package/dist/lib/mirror/infra/workspace-service.adapter.mjs +232 -0
  108. package/dist/lib/mirror/mirror.feature.module.mjs +19 -0
  109. package/dist/lib/mirror/mirror.module.mjs +23 -0
  110. package/dist/lib/mirror/mirror.presentation.module.mjs +11 -0
  111. package/dist/lib/mirror/presentation/mirror-cli-schema.presenter.mjs +12 -0
  112. package/dist/lib/mirror/presentation/prepare-mirror.orchestrator.mjs +263 -0
  113. package/dist/lib/mirror/presentation/reporter.presenter.mjs +111 -0
  114. package/dist/lib/mirror/presentation/resolve-mirror-package-arg.presenter.mjs +20 -0
  115. package/dist/lib/shared/source-code/domain/text-edit.model.mjs +28 -0
  116. package/dist/lib/shared/source-code/infra/tsx-file-walk.adapter.mjs +33 -0
  117. package/dist/lib/tag/application/ports/tag-since-writer.port.mjs +1 -0
  118. package/dist/lib/tag/application/ports/tag-version-resolver.port.mjs +1 -0
  119. package/dist/lib/tag/application/ports/target-resolver.port.mjs +1 -0
  120. package/dist/lib/tag/application/ports/typescript-tree-walk.port.mjs +1 -0
  121. package/dist/lib/tag/application/requests/tag-sync.request.mjs +1 -0
  122. package/dist/lib/tag/application/tag-sync-cli-result.mjs +11 -0
  123. package/dist/lib/tag/application/tag-sync-json.format.mjs +14 -0
  124. package/dist/lib/tag/application/use-cases/run-tag-sync.use-case.mjs +398 -0
  125. package/dist/lib/tag/contracts/models.mjs +1 -0
  126. package/dist/lib/tag/contracts/presentation.contract.mjs +1 -0
  127. package/dist/lib/tag/contracts/tokens.mjs +12 -0
  128. package/dist/lib/tag/contracts/use-cases.contract.mjs +1 -0
  129. package/dist/lib/tag/domain/types.domain.mjs +1 -0
  130. package/dist/lib/tag/infra/tag-since-writer.adapter.mjs +343 -0
  131. package/dist/lib/tag/infra/tag-sync-cli-options.adapter.mjs +1 -0
  132. package/dist/lib/tag/infra/tag-target-candidates.adapter.mjs +170 -0
  133. package/dist/lib/tag/infra/tag-target-resolver.adapter.mjs +226 -0
  134. package/dist/lib/tag/infra/tag-version-resolver.adapter.mjs +247 -0
  135. package/dist/lib/tag/infra/typescript-tree-walk.adapter.mjs +226 -0
  136. package/dist/lib/tag/presentation/colors.presenter.mjs +12 -0
  137. package/dist/lib/tag/presentation/create-tag-progress-listener.presenter.mjs +228 -0
  138. package/dist/lib/tag/presentation/prepare-tag.orchestrator.mjs +264 -0
  139. package/dist/lib/tag/presentation/present-tag-sync-result.presenter.mjs +233 -0
  140. package/dist/lib/tag/presentation/resolve-tag-cli-target.presenter.mjs +9 -0
  141. package/dist/lib/tag/presentation/resolve-tag-workspace-root.presenter.mjs +12 -0
  142. package/dist/lib/tag/presentation/tag-cli-schema.presenter.mjs +12 -0
  143. package/dist/lib/tag/presentation/tag-sync.presenter.mjs +78 -0
  144. package/dist/lib/tag/tag.feature.module.mjs +19 -0
  145. package/dist/lib/tag/tag.module.mjs +21 -0
  146. package/dist/lib/tag/tag.presentation.module.mjs +15 -0
  147. package/dist/program.mjs +39 -0
  148. package/package.json +16 -19
  149. package/dist/bin.d.ts +0 -3
  150. package/dist/bin.d.ts.map +0 -1
  151. package/dist/commands/arrange.d.ts +0 -3
  152. package/dist/commands/arrange.d.ts.map +0 -1
  153. package/dist/commands/arrange.js +0 -129
  154. package/dist/commands/mirror.d.ts +0 -4
  155. package/dist/commands/mirror.d.ts.map +0 -1
  156. package/dist/commands/mirror.js +0 -75
  157. package/dist/commands/tag.d.ts +0 -3
  158. package/dist/commands/tag.d.ts.map +0 -1
  159. package/dist/commands/tag.js +0 -41
  160. package/dist/lib/arrange/application/analyze.d.ts +0 -17
  161. package/dist/lib/arrange/application/analyze.d.ts.map +0 -1
  162. package/dist/lib/arrange/application/analyze.js +0 -24
  163. package/dist/lib/arrange/application/group-file-preview.d.ts +0 -17
  164. package/dist/lib/arrange/application/group-file-preview.d.ts.map +0 -1
  165. package/dist/lib/arrange/application/group-file-preview.js +0 -46
  166. package/dist/lib/arrange/application/group-file.d.ts +0 -5
  167. package/dist/lib/arrange/application/group-file.d.ts.map +0 -1
  168. package/dist/lib/arrange/application/group-file.js +0 -40
  169. package/dist/lib/arrange/application/ports/domain-source-parser.port.d.ts +0 -5
  170. package/dist/lib/arrange/application/ports/domain-source-parser.port.d.ts.map +0 -1
  171. package/dist/lib/arrange/application/ports/file-walker.port.d.ts +0 -5
  172. package/dist/lib/arrange/application/ports/file-walker.port.d.ts.map +0 -1
  173. package/dist/lib/arrange/application/requests/analyze-directory.request.d.ts +0 -6
  174. package/dist/lib/arrange/application/requests/analyze-directory.request.d.ts.map +0 -1
  175. package/dist/lib/arrange/application/requests/analyze-directory.request.js +0 -4
  176. package/dist/lib/arrange/application/requests/arrange-sync.request.d.ts +0 -18
  177. package/dist/lib/arrange/application/requests/arrange-sync.request.d.ts.map +0 -1
  178. package/dist/lib/arrange/application/requests/arrange-sync.request.js +0 -15
  179. package/dist/lib/arrange/application/run-target.d.ts +0 -19
  180. package/dist/lib/arrange/application/run-target.d.ts.map +0 -1
  181. package/dist/lib/arrange/application/run-target.js +0 -85
  182. package/dist/lib/arrange/domain/arrange-analyze.service.d.ts +0 -12
  183. package/dist/lib/arrange/domain/arrange-analyze.service.d.ts.map +0 -1
  184. package/dist/lib/arrange/domain/arrange-analyze.service.js +0 -116
  185. package/dist/lib/arrange/domain/arrange-grouping.service.d.ts +0 -53
  186. package/dist/lib/arrange/domain/arrange-grouping.service.d.ts.map +0 -1
  187. package/dist/lib/arrange/domain/arrange-grouping.service.js +0 -106
  188. package/dist/lib/arrange/domain/ast/ast-helpers.d.ts +0 -28
  189. package/dist/lib/arrange/domain/ast/ast-helpers.d.ts.map +0 -1
  190. package/dist/lib/arrange/domain/ast/ast-helpers.js +0 -130
  191. package/dist/lib/arrange/domain/ast/ast-node.model.d.ts +0 -179
  192. package/dist/lib/arrange/domain/ast/ast-node.model.d.ts.map +0 -1
  193. package/dist/lib/arrange/domain/ast/ast-node.model.js +0 -210
  194. package/dist/lib/arrange/domain/ast/collectors-cn.d.ts +0 -7
  195. package/dist/lib/arrange/domain/ast/collectors-cn.d.ts.map +0 -1
  196. package/dist/lib/arrange/domain/ast/collectors-cn.js +0 -70
  197. package/dist/lib/arrange/domain/ast/collectors-jsx.d.ts +0 -4
  198. package/dist/lib/arrange/domain/ast/collectors-jsx.d.ts.map +0 -1
  199. package/dist/lib/arrange/domain/ast/collectors-jsx.js +0 -21
  200. package/dist/lib/arrange/domain/ast/collectors-tv.d.ts +0 -13
  201. package/dist/lib/arrange/domain/ast/collectors-tv.d.ts.map +0 -1
  202. package/dist/lib/arrange/domain/ast/collectors-tv.js +0 -302
  203. package/dist/lib/arrange/domain/ast/targets.d.ts +0 -8
  204. package/dist/lib/arrange/domain/ast/targets.d.ts.map +0 -1
  205. package/dist/lib/arrange/domain/ast/targets.js +0 -147
  206. package/dist/lib/arrange/domain/constants.d.ts +0 -68
  207. package/dist/lib/arrange/domain/constants.d.ts.map +0 -1
  208. package/dist/lib/arrange/domain/constants.js +0 -180
  209. package/dist/lib/arrange/domain/errors.d.ts +0 -14
  210. package/dist/lib/arrange/domain/errors.d.ts.map +0 -1
  211. package/dist/lib/arrange/domain/errors.js +0 -16
  212. package/dist/lib/arrange/domain/grouping.d.ts +0 -41
  213. package/dist/lib/arrange/domain/grouping.d.ts.map +0 -1
  214. package/dist/lib/arrange/domain/grouping.js +0 -307
  215. package/dist/lib/arrange/domain/imports.d.ts +0 -7
  216. package/dist/lib/arrange/domain/imports.d.ts.map +0 -1
  217. package/dist/lib/arrange/domain/imports.js +0 -80
  218. package/dist/lib/arrange/domain/source-text-formatters.d.ts +0 -16
  219. package/dist/lib/arrange/domain/source-text-formatters.d.ts.map +0 -1
  220. package/dist/lib/arrange/domain/source-text-formatters.js +0 -55
  221. package/dist/lib/arrange/domain/tokenizer.d.ts +0 -45
  222. package/dist/lib/arrange/domain/tokenizer.d.ts.map +0 -1
  223. package/dist/lib/arrange/domain/tokenizer.js +0 -466
  224. package/dist/lib/arrange/domain/types.d.ts +0 -112
  225. package/dist/lib/arrange/domain/types.d.ts.map +0 -1
  226. package/dist/lib/arrange/domain/types.js +0 -7
  227. package/dist/lib/arrange/index.d.ts +0 -45
  228. package/dist/lib/arrange/index.d.ts.map +0 -1
  229. package/dist/lib/arrange/index.js +0 -41
  230. package/dist/lib/arrange/infra/arrange-sync-cli-options.d.ts +0 -14
  231. package/dist/lib/arrange/infra/arrange-sync-cli-options.d.ts.map +0 -1
  232. package/dist/lib/arrange/infra/domain-source-parser.adapter.d.ts +0 -11
  233. package/dist/lib/arrange/infra/domain-source-parser.adapter.d.ts.map +0 -1
  234. package/dist/lib/arrange/infra/domain-source-parser.adapter.js +0 -19
  235. package/dist/lib/arrange/infra/ensure-cn-import.d.ts +0 -3
  236. package/dist/lib/arrange/infra/ensure-cn-import.d.ts.map +0 -1
  237. package/dist/lib/arrange/infra/ensure-cn-import.js +0 -6
  238. package/dist/lib/arrange/infra/file-walker.adapter.d.ts +0 -8
  239. package/dist/lib/arrange/infra/file-walker.adapter.d.ts.map +0 -1
  240. package/dist/lib/arrange/infra/file-walker.adapter.js +0 -17
  241. package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.d.ts +0 -8
  242. package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.d.ts.map +0 -1
  243. package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.js +0 -25
  244. package/dist/lib/arrange/infra/ts-ast-translator.d.ts +0 -10
  245. package/dist/lib/arrange/infra/ts-ast-translator.d.ts.map +0 -1
  246. package/dist/lib/arrange/infra/ts-ast-translator.js +0 -363
  247. package/dist/lib/arrange/presentation/formatters.d.ts +0 -3
  248. package/dist/lib/arrange/presentation/formatters.d.ts.map +0 -1
  249. package/dist/lib/arrange/presentation/formatters.js +0 -2
  250. package/dist/lib/arrange/presentation/report.d.ts +0 -4
  251. package/dist/lib/arrange/presentation/report.d.ts.map +0 -1
  252. package/dist/lib/arrange/presentation/report.js +0 -37
  253. package/dist/lib/config/domain/schema.d.ts +0 -50
  254. package/dist/lib/config/domain/schema.d.ts.map +0 -1
  255. package/dist/lib/config/domain/schema.js +0 -43
  256. package/dist/lib/config/index.d.ts +0 -4
  257. package/dist/lib/config/index.d.ts.map +0 -1
  258. package/dist/lib/config/index.js +0 -2
  259. package/dist/lib/config/infra/loader.d.ts +0 -11
  260. package/dist/lib/config/infra/loader.d.ts.map +0 -1
  261. package/dist/lib/config/infra/loader.js +0 -90
  262. package/dist/lib/core/application/architecture-boundaries.d.ts +0 -19
  263. package/dist/lib/core/application/architecture-boundaries.d.ts.map +0 -1
  264. package/dist/lib/core/application/architecture-boundaries.js +0 -263
  265. package/dist/lib/core/application/ports/cli-io.port.d.ts +0 -27
  266. package/dist/lib/core/application/ports/cli-io.port.d.ts.map +0 -1
  267. package/dist/lib/core/application/schema-parse.d.ts +0 -8
  268. package/dist/lib/core/application/schema-parse.d.ts.map +0 -1
  269. package/dist/lib/core/application/schema-parse.js +0 -20
  270. package/dist/lib/core/application/utils/caught-unknown-message.d.ts +0 -6
  271. package/dist/lib/core/application/utils/caught-unknown-message.d.ts.map +0 -1
  272. package/dist/lib/core/application/utils/caught-unknown-message.js +0 -34
  273. package/dist/lib/core/application/utils/verbose-diagnostics.d.ts +0 -5
  274. package/dist/lib/core/application/utils/verbose-diagnostics.d.ts.map +0 -1
  275. package/dist/lib/core/application/utils/verbose-diagnostics.js +0 -7
  276. package/dist/lib/core/domain/errors.d.ts +0 -11
  277. package/dist/lib/core/domain/errors.d.ts.map +0 -1
  278. package/dist/lib/core/domain/errors.js +0 -9
  279. package/dist/lib/core/domain/result.d.ts +0 -15
  280. package/dist/lib/core/domain/result.d.ts.map +0 -1
  281. package/dist/lib/core/domain/result.js +0 -9
  282. package/dist/lib/core/infra/container.d.ts +0 -34
  283. package/dist/lib/core/infra/container.d.ts.map +0 -1
  284. package/dist/lib/core/infra/container.js +0 -65
  285. package/dist/lib/core/infra/logging-decorator.d.ts +0 -12
  286. package/dist/lib/core/infra/logging-decorator.d.ts.map +0 -1
  287. package/dist/lib/core/infra/logging-decorator.js +0 -75
  288. package/dist/lib/core/presentation/cli-executor.d.ts +0 -33
  289. package/dist/lib/core/presentation/cli-executor.d.ts.map +0 -1
  290. package/dist/lib/core/presentation/cli-executor.js +0 -73
  291. package/dist/lib/core/presentation/create-command-handler.d.ts +0 -20
  292. package/dist/lib/core/presentation/create-command-handler.d.ts.map +0 -1
  293. package/dist/lib/core/presentation/create-command-handler.js +0 -70
  294. package/dist/lib/core/presentation/format-app-error.d.ts +0 -6
  295. package/dist/lib/core/presentation/format-app-error.d.ts.map +0 -1
  296. package/dist/lib/core/presentation/format-app-error.js +0 -19
  297. package/dist/lib/infra/caught-unknown-message.d.ts +0 -2
  298. package/dist/lib/infra/caught-unknown-message.d.ts.map +0 -1
  299. package/dist/lib/infra/caught-unknown-message.js +0 -1
  300. package/dist/lib/infra/config-reporter.d.ts +0 -4
  301. package/dist/lib/infra/config-reporter.d.ts.map +0 -1
  302. package/dist/lib/infra/config-reporter.js +0 -9
  303. package/dist/lib/infra/fs-contract.d.ts +0 -2
  304. package/dist/lib/infra/fs-contract.d.ts.map +0 -1
  305. package/dist/lib/infra/node-io.d.ts +0 -4
  306. package/dist/lib/infra/node-io.d.ts.map +0 -1
  307. package/dist/lib/infra/node-io.js +0 -27
  308. package/dist/lib/infra/workspace/repo-root.d.ts +0 -7
  309. package/dist/lib/infra/workspace/repo-root.d.ts.map +0 -1
  310. package/dist/lib/infra/workspace/repo-root.js +0 -23
  311. package/dist/lib/mirror/application/engine.d.ts +0 -10
  312. package/dist/lib/mirror/application/engine.d.ts.map +0 -1
  313. package/dist/lib/mirror/application/engine.js +0 -271
  314. package/dist/lib/mirror/application/ports/file-system-service.port.d.ts +0 -6
  315. package/dist/lib/mirror/application/ports/file-system-service.port.d.ts.map +0 -1
  316. package/dist/lib/mirror/application/ports/mirror-sync-reporter.port.d.ts +0 -27
  317. package/dist/lib/mirror/application/ports/mirror-sync-reporter.port.d.ts.map +0 -1
  318. package/dist/lib/mirror/application/ports/package-repository.port.d.ts +0 -16
  319. package/dist/lib/mirror/application/ports/package-repository.port.d.ts.map +0 -1
  320. package/dist/lib/mirror/application/ports/workspace-service.port.d.ts +0 -7
  321. package/dist/lib/mirror/application/ports/workspace-service.port.d.ts.map +0 -1
  322. package/dist/lib/mirror/application/requests/mirror-sync.request.d.ts +0 -10
  323. package/dist/lib/mirror/application/requests/mirror-sync.request.d.ts.map +0 -1
  324. package/dist/lib/mirror/application/requests/mirror-sync.request.js +0 -8
  325. package/dist/lib/mirror/application/sync.d.ts +0 -19
  326. package/dist/lib/mirror/application/sync.d.ts.map +0 -1
  327. package/dist/lib/mirror/application/sync.js +0 -168
  328. package/dist/lib/mirror/domain/constants.d.ts +0 -6
  329. package/dist/lib/mirror/domain/constants.d.ts.map +0 -1
  330. package/dist/lib/mirror/domain/constants.js +0 -5
  331. package/dist/lib/mirror/domain/errors.d.ts +0 -10
  332. package/dist/lib/mirror/domain/errors.d.ts.map +0 -1
  333. package/dist/lib/mirror/domain/errors.js +0 -12
  334. package/dist/lib/mirror/domain/types.d.ts +0 -65
  335. package/dist/lib/mirror/domain/types.d.ts.map +0 -1
  336. package/dist/lib/mirror/index.d.ts +0 -6
  337. package/dist/lib/mirror/index.d.ts.map +0 -1
  338. package/dist/lib/mirror/index.js +0 -1
  339. package/dist/lib/mirror/infra/dirent-list.d.ts +0 -9
  340. package/dist/lib/mirror/infra/dirent-list.d.ts.map +0 -1
  341. package/dist/lib/mirror/infra/dirent-list.js +0 -13
  342. package/dist/lib/mirror/infra/file-system-service.adapter.d.ts +0 -7
  343. package/dist/lib/mirror/infra/file-system-service.adapter.d.ts.map +0 -1
  344. package/dist/lib/mirror/infra/file-system-service.adapter.js +0 -47
  345. package/dist/lib/mirror/infra/mirror-sync-cli-options.d.ts +0 -14
  346. package/dist/lib/mirror/infra/mirror-sync-cli-options.d.ts.map +0 -1
  347. package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.d.ts +0 -3
  348. package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.d.ts.map +0 -1
  349. package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.js +0 -13
  350. package/dist/lib/mirror/infra/package-filter.d.ts +0 -8
  351. package/dist/lib/mirror/infra/package-filter.d.ts.map +0 -1
  352. package/dist/lib/mirror/infra/package-filter.js +0 -33
  353. package/dist/lib/mirror/infra/package-repository.adapter.d.ts +0 -17
  354. package/dist/lib/mirror/infra/package-repository.adapter.d.ts.map +0 -1
  355. package/dist/lib/mirror/infra/package-repository.adapter.js +0 -17
  356. package/dist/lib/mirror/infra/path-normalizer.d.ts +0 -2
  357. package/dist/lib/mirror/infra/path-normalizer.d.ts.map +0 -1
  358. package/dist/lib/mirror/infra/path-normalizer.js +0 -4
  359. package/dist/lib/mirror/infra/update-pkg.d.ts +0 -19
  360. package/dist/lib/mirror/infra/update-pkg.d.ts.map +0 -1
  361. package/dist/lib/mirror/infra/update-pkg.js +0 -156
  362. package/dist/lib/mirror/infra/workspace-packages.d.ts +0 -26
  363. package/dist/lib/mirror/infra/workspace-packages.d.ts.map +0 -1
  364. package/dist/lib/mirror/infra/workspace-packages.js +0 -170
  365. package/dist/lib/mirror/infra/workspace-service.adapter.d.ts +0 -8
  366. package/dist/lib/mirror/infra/workspace-service.adapter.d.ts.map +0 -1
  367. package/dist/lib/mirror/infra/workspace-service.adapter.js +0 -10
  368. package/dist/lib/mirror/presentation/reporter.d.ts +0 -25
  369. package/dist/lib/mirror/presentation/reporter.d.ts.map +0 -1
  370. package/dist/lib/mirror/presentation/reporter.js +0 -140
  371. package/dist/lib/shared/source-code/domain/text-edit.d.ts +0 -14
  372. package/dist/lib/shared/source-code/domain/text-edit.d.ts.map +0 -1
  373. package/dist/lib/shared/source-code/domain/text-edit.js +0 -30
  374. package/dist/lib/shared/source-code/infra/tsx-file-walk.d.ts +0 -4
  375. package/dist/lib/shared/source-code/infra/tsx-file-walk.d.ts.map +0 -1
  376. package/dist/lib/shared/source-code/infra/tsx-file-walk.js +0 -37
  377. package/dist/lib/tag/application/engine.d.ts +0 -23
  378. package/dist/lib/tag/application/engine.d.ts.map +0 -1
  379. package/dist/lib/tag/application/engine.js +0 -357
  380. package/dist/lib/tag/application/ports/target-resolver.port.d.ts +0 -6
  381. package/dist/lib/tag/application/ports/target-resolver.port.d.ts.map +0 -1
  382. package/dist/lib/tag/application/ports/typescript-tree-walk.port.d.ts +0 -6
  383. package/dist/lib/tag/application/ports/typescript-tree-walk.port.d.ts.map +0 -1
  384. package/dist/lib/tag/application/requests/tag-sync.request.d.ts +0 -10
  385. package/dist/lib/tag/application/requests/tag-sync.request.d.ts.map +0 -1
  386. package/dist/lib/tag/application/requests/tag-sync.request.js +0 -8
  387. package/dist/lib/tag/domain/types.d.ts +0 -56
  388. package/dist/lib/tag/domain/types.d.ts.map +0 -1
  389. package/dist/lib/tag/index.d.ts +0 -14
  390. package/dist/lib/tag/index.d.ts.map +0 -1
  391. package/dist/lib/tag/index.js +0 -10
  392. package/dist/lib/tag/infra/tag-sync-cli-options.d.ts +0 -14
  393. package/dist/lib/tag/infra/tag-sync-cli-options.d.ts.map +0 -1
  394. package/dist/lib/tag/infra/tag-target-resolver.adapter.d.ts +0 -3
  395. package/dist/lib/tag/infra/tag-target-resolver.adapter.d.ts.map +0 -1
  396. package/dist/lib/tag/infra/tag-target-resolver.adapter.js +0 -4
  397. package/dist/lib/tag/infra/target-resolver.d.ts +0 -4
  398. package/dist/lib/tag/infra/target-resolver.d.ts.map +0 -1
  399. package/dist/lib/tag/infra/target-resolver.js +0 -200
  400. package/dist/lib/tag/infra/typescript-tree-walk.adapter.d.ts +0 -3
  401. package/dist/lib/tag/infra/typescript-tree-walk.adapter.d.ts.map +0 -1
  402. package/dist/lib/tag/infra/typescript-tree-walk.adapter.js +0 -4
  403. package/dist/lib/tag/presentation/colors.d.ts +0 -8
  404. package/dist/lib/tag/presentation/colors.d.ts.map +0 -1
  405. package/dist/lib/tag/presentation/colors.js +0 -9
  406. package/dist/lib/tag/presentation/tag-presenter.d.ts +0 -20
  407. package/dist/lib/tag/presentation/tag-presenter.d.ts.map +0 -1
  408. package/dist/lib/tag/presentation/tag-presenter.js +0 -92
  409. package/dist/program.d.ts +0 -4
  410. package/dist/program.d.ts.map +0 -1
  411. package/dist/program.js +0 -40
  412. /package/dist/lib/arrange/application/ports/{domain-source-parser.port.js → domain-source-parser.port.mjs} +0 -0
  413. /package/dist/lib/arrange/application/ports/{file-walker.port.js → file-walker.port.mjs} +0 -0
  414. /package/dist/lib/arrange/{infra/arrange-sync-cli-options.js → application/ports/group-file-preview.port.mjs} +0 -0
  415. /package/dist/lib/{core/application/ports/cli-io.port.js → arrange/application/requests/analyze-directory.request.mjs} +0 -0
  416. /package/dist/lib/{infra/fs-contract.js → arrange/application/requests/arrange-sync.request.mjs} +0 -0
  417. /package/dist/lib/{mirror/application/ports/file-system-service.port.js → arrange/application/requests/suggest-groups.request.mjs} +0 -0
  418. /package/dist/lib/{mirror/application/ports/mirror-sync-reporter.port.js → arrange/contracts/models.mjs} +0 -0
  419. /package/dist/lib/{mirror/application/ports/package-repository.port.js → arrange/contracts/presentation.contract.mjs} +0 -0
  420. /package/dist/lib/{mirror/application/ports/workspace-service.port.js → arrange/contracts/services.contract.mjs} +0 -0
  421. /package/dist/lib/{mirror/domain/types.js → arrange/contracts/use-cases.contract.mjs} +0 -0
  422. /package/dist/lib/{mirror/infra/mirror-sync-cli-options.js → arrange/domain/types.domain.mjs} +0 -0
  423. /package/dist/lib/{tag/application/ports/target-resolver.port.js → arrange/infra/arrange-sync-cli-options.adapter.mjs} +0 -0
  424. /package/dist/lib/{tag/application/ports/typescript-tree-walk.port.js → config/application/ports/config-loader.port.mjs} +0 -0
  425. /package/dist/lib/{tag/domain/types.js → config/domain/schema.domain.mjs} +0 -0
  426. /package/dist/lib/{tag/infra/tag-sync-cli-options.js → core/application/ports/cli-io.port.mjs} +0 -0
@@ -1,307 +0,0 @@
1
- import { BUCKET_ORDER, MAX_GROUPS_BASE, MAX_GROUPS_CAP, MAX_GROUPS_HEADROOM, MIN_GROUP_TOKENS, } from "#lib/arrange/domain/constants";
2
- import { bucketsCompatible, bucketsMergeCompatible, classifyToken, compositeSecondaryOrder, selectorKey, stateKey, stripVariants, tokenizeClassString, } from "#lib/arrange/domain/tokenizer";
3
- function isVariantKeyedBucket(bucket) {
4
- return bucket === "selector" || bucket === "state" || bucket === "starting";
5
- }
6
- function variantGroupKey(bucket, classToken) {
7
- return bucket === "selector" ? selectorKey(classToken) : stateKey(classToken);
8
- }
9
- /**
10
- * True when `staticLiteralTexts` carries the **same partition** of Tailwind tokens as
11
- * `suggestedGroups` from {@link suggestCnGroups}, ignoring order of arguments and
12
- * order of tokens within each chunk.
13
- */
14
- export function areCnTailwindPartitionsEquivalent(staticLiteralTexts, suggestedGroups) {
15
- const partitionSignatures = (chunks) => chunks
16
- .map((chunk) => {
17
- const classTokens = tokenizeClassString(chunk);
18
- return classTokens.length === 0 ? "" : [...classTokens].sort().join(" ");
19
- })
20
- .filter((s) => s.length > 0)
21
- .sort((a, b) => a.localeCompare(b));
22
- const staticPartitionSigs = partitionSignatures(staticLiteralTexts);
23
- const suggestedPartitionSigs = partitionSignatures(suggestedGroups);
24
- if (staticPartitionSigs.length !== suggestedPartitionSigs.length) {
25
- return false;
26
- }
27
- for (let i = 0; i < staticPartitionSigs.length; i++) {
28
- if (staticPartitionSigs[i] !== suggestedPartitionSigs[i]) {
29
- return false;
30
- }
31
- }
32
- return true;
33
- }
34
- /** Dominant bucket of a whitespace-delimited class group (for merge heuristics). */
35
- function dominantBucketOfGroup(groupStr) {
36
- const counts = new Map();
37
- for (const classToken of tokenizeClassString(groupStr)) {
38
- const tokenBucket = classifyToken(classToken);
39
- counts.set(tokenBucket, (counts.get(tokenBucket) ?? 0) + 1);
40
- }
41
- let best = "other";
42
- let bestN = 0;
43
- for (const [bucket, count] of counts) {
44
- if (count > bestN) {
45
- best = bucket;
46
- bestN = count;
47
- continue;
48
- }
49
- // Deterministic tie-break: prefer earlier render-pipeline bucket.
50
- if (count === bestN && BUCKET_ORDER[bucket] < BUCKET_ORDER[best]) {
51
- best = bucket;
52
- }
53
- }
54
- return best;
55
- }
56
- /** Dynamic cap: more tokens → allow more groups, within [BASE, CAP]. */
57
- function dynamicMaxGroups(tokenCount) {
58
- const byTokens = Math.ceil(tokenCount / 2) + MAX_GROUPS_HEADROOM;
59
- return Math.max(MAX_GROUPS_BASE, Math.min(MAX_GROUPS_CAP, byTokens));
60
- }
61
- /**
62
- * Merge singleton groups (< MIN_GROUP_TOKENS tokens) into their nearest
63
- * neighbour. Prefers merging toward a bucket-compatible neighbor.
64
- *
65
- * Loop termination: each iteration either splices one element (shrinking the
66
- * array, guaranteeing progress) or finds no singleton that can merge and exits
67
- * via `changed = false`. Two mutually-incompatible singletons both hit
68
- * `continue` and `changed` stays false, so the loop exits without spinning.
69
- */
70
- export function mergeSingletons(groups) {
71
- if (groups.length <= 1) {
72
- return groups;
73
- }
74
- const result = [...groups];
75
- let changed = true;
76
- while (changed) {
77
- changed = false;
78
- for (let i = 0; i < result.length; i++) {
79
- if (tokenizeClassString(result[i]).length < MIN_GROUP_TOKENS) {
80
- if (result.length === 1) {
81
- break;
82
- }
83
- const myBucket = dominantBucketOfGroup(result[i]);
84
- const prevCompat = i > 0 && bucketsMergeCompatible(myBucket, dominantBucketOfGroup(result[i - 1]));
85
- const nextCompat = i < result.length - 1 &&
86
- bucketsMergeCompatible(myBucket, dominantBucketOfGroup(result[i + 1]));
87
- let mergeDir;
88
- if (nextCompat && !prevCompat) {
89
- mergeDir = "forward";
90
- }
91
- else if (prevCompat && !nextCompat) {
92
- mergeDir = "backward";
93
- }
94
- else if (prevCompat && nextCompat) {
95
- mergeDir = i < result.length - 1 ? "forward" : "backward";
96
- }
97
- else {
98
- continue;
99
- }
100
- if (mergeDir === "forward") {
101
- result[i + 1] = result[i] + " " + result[i + 1];
102
- }
103
- else {
104
- result[i - 1] = result[i - 1] + " " + result[i];
105
- }
106
- result.splice(i, 1);
107
- changed = true;
108
- break;
109
- }
110
- }
111
- }
112
- return result;
113
- }
114
- /** Tie-break when two merge candidates are both {@link bucketsMergeCompatible} (same bucket or COMPATIBLE_BUCKET_SETS). */
115
- function capMergePenalty(leftBucket, rightBucket) {
116
- if (leftBucket === rightBucket) {
117
- return 0;
118
- }
119
- if (bucketsCompatible(leftBucket, rightBucket)) {
120
- return 0;
121
- }
122
- return 500;
123
- }
124
- /**
125
- * Merge adjacent groups until total count ≤ maxGroups.
126
- * Only merges pairs allowed by {@link bucketsMergeCompatible} — never glues incompatible
127
- * buckets (which previously defaulted to penalty 0 and merged layout+state when over cap).
128
- *
129
- * Complexity: O(n²) in the number of groups — each merge pass scans all remaining adjacent
130
- * pairs. In practice `n` is bounded by {@link MAX_GROUPS_CAP} (24) and typical class strings
131
- * are well below that, so this is not a concern for the current usage pattern. If this ever
132
- * runs in a high-throughput batch mode, consider a priority-queue approach.
133
- */
134
- export function capGroups(groups, maxGroups) {
135
- const result = [...groups];
136
- const lengths = result.map((groupStr) => tokenizeClassString(groupStr).length);
137
- while (result.length > maxGroups) {
138
- const mergePairCandidates = [];
139
- for (let i = 0; i < result.length - 1; i++) {
140
- const dominantLeft = dominantBucketOfGroup(result[i]);
141
- const dominantRight = dominantBucketOfGroup(result[i + 1]);
142
- if (!bucketsMergeCompatible(dominantLeft, dominantRight)) {
143
- continue;
144
- }
145
- mergePairCandidates.push({
146
- i,
147
- size: lengths[i] + lengths[i + 1],
148
- penalty: capMergePenalty(dominantLeft, dominantRight),
149
- });
150
- }
151
- if (mergePairCandidates.length === 0) {
152
- break;
153
- }
154
- let best = mergePairCandidates[0];
155
- for (const candidate of mergePairCandidates) {
156
- if (candidate.penalty < best.penalty ||
157
- (candidate.penalty === best.penalty && candidate.size < best.size)) {
158
- best = candidate;
159
- }
160
- }
161
- const bestIdx = best.i;
162
- result[bestIdx] = result[bestIdx] + " " + result[bestIdx + 1];
163
- lengths[bestIdx] = lengths[bestIdx] + lengths[bestIdx + 1];
164
- result.splice(bestIdx + 1, 1);
165
- lengths.splice(bestIdx + 1, 1);
166
- }
167
- return result;
168
- }
169
- /**
170
- * If a chunk is **only** bare `ease-*` timing (Motion), buffer it and prepend to the **first**
171
- * **later** chunk that is predominantly `state` **and** contains some `animate-*` utility —
172
- * skipping intermediate `state` chunks (`sm:…`, `group-data-[…]:…`, etc.) that sit between
173
- * `ease-ui` and `data-open:animate-*`. If no such chunk exists, the ease chunk is left as-is.
174
- */
175
- export function mergeEaseTimingIntoFollowingAnimatedState(groups) {
176
- const result = [...groups];
177
- let changed = true;
178
- while (changed) {
179
- changed = false;
180
- for (let i = 0; i < result.length; i++) {
181
- if (!chunkIsOnlyEaseTimingMotion(result[i])) {
182
- continue;
183
- }
184
- const easeStr = result[i];
185
- let target = -1;
186
- for (let j = i + 1; j < result.length; j++) {
187
- if (dominantBucketOfGroup(result[j]) !== "state") {
188
- continue;
189
- }
190
- const classTokens = tokenizeClassString(result[j]);
191
- if (!classTokens.some((classToken) => /^animate/.test(stripVariants(classToken)))) {
192
- continue;
193
- }
194
- target = j;
195
- break;
196
- }
197
- if (target === -1) {
198
- continue;
199
- }
200
- result[target] = `${easeStr} ${result[target]}`.trim();
201
- result.splice(i, 1);
202
- changed = true;
203
- break;
204
- }
205
- }
206
- return result;
207
- }
208
- function chunkIsOnlyEaseTimingMotion(groupStr) {
209
- const classTokens = tokenizeClassString(groupStr);
210
- if (classTokens.length === 0) {
211
- return false;
212
- }
213
- return classTokens.every((classToken) => classifyToken(classToken) === "motion" && /^ease-/.test(stripVariants(classToken)));
214
- }
215
- export function suggestCnGroups(classString) {
216
- const tokens = tokenizeClassString(classString);
217
- if (tokens.length === 0) {
218
- return [];
219
- }
220
- const classified = tokens.map((classToken, index) => ({
221
- classToken,
222
- bucket: classifyToken(classToken),
223
- index,
224
- }));
225
- classified.sort((left, right) => {
226
- const bucketOrderDiff = BUCKET_ORDER[left.bucket] - BUCKET_ORDER[right.bucket];
227
- if (bucketOrderDiff !== 0) {
228
- return bucketOrderDiff;
229
- }
230
- if (left.bucket === "composite" && right.bucket === "composite") {
231
- const compositeOrderDiff = compositeSecondaryOrder(stripVariants(left.classToken)) -
232
- compositeSecondaryOrder(stripVariants(right.classToken));
233
- if (compositeOrderDiff !== 0) {
234
- return compositeOrderDiff;
235
- }
236
- }
237
- return left.index - right.index;
238
- });
239
- const rawGroups = [];
240
- /** Bucket of the last token already placed in the current run (pairwise compat with `COMPATIBLE_BUCKET_SETS`). */
241
- let lastBucketInRun = null;
242
- let currentStateKey = null;
243
- let currentTokens = [];
244
- const flush = () => {
245
- if (currentTokens.length > 0) {
246
- rawGroups.push(currentTokens.join(" "));
247
- currentTokens = [];
248
- }
249
- lastBucketInRun = null;
250
- currentStateKey = null;
251
- };
252
- for (const { classToken, bucket: tokenBucket } of classified) {
253
- if (lastBucketInRun === null) {
254
- lastBucketInRun = tokenBucket;
255
- currentStateKey = isVariantKeyedBucket(tokenBucket)
256
- ? variantGroupKey(tokenBucket, classToken)
257
- : null;
258
- currentTokens.push(classToken);
259
- continue;
260
- }
261
- if (isVariantKeyedBucket(tokenBucket)) {
262
- const key = variantGroupKey(tokenBucket, classToken);
263
- if (currentStateKey !== null && key !== currentStateKey) {
264
- flush();
265
- lastBucketInRun = tokenBucket;
266
- currentStateKey = key;
267
- currentTokens.push(classToken);
268
- continue;
269
- }
270
- }
271
- if (!bucketsCompatible(tokenBucket, lastBucketInRun)) {
272
- flush();
273
- lastBucketInRun = tokenBucket;
274
- currentStateKey = isVariantKeyedBucket(tokenBucket)
275
- ? variantGroupKey(tokenBucket, classToken)
276
- : null;
277
- currentTokens.push(classToken);
278
- continue;
279
- }
280
- if (isVariantKeyedBucket(tokenBucket)) {
281
- currentStateKey = variantGroupKey(tokenBucket, classToken);
282
- }
283
- else if (currentStateKey !== null) {
284
- // Defensive reset: keeps state-key logic explicit if bucket rules evolve.
285
- currentStateKey = null;
286
- }
287
- lastBucketInRun = tokenBucket;
288
- currentTokens.push(classToken);
289
- }
290
- flush();
291
- const merged = mergeSingletons(rawGroups);
292
- const withEaseMerged = mergeEaseTimingIntoFollowingAnimatedState(merged);
293
- // Never cap-merge below the semantic chunk count from the tokenizer (fixes layout+state glued
294
- // when `preferred` compat list was empty and unrelated pairs used penalty 0).
295
- const maxAllowed = Math.max(dynamicMaxGroups(tokens.length), withEaseMerged.length);
296
- return capGroups(withEaseMerged, maxAllowed);
297
- }
298
- /**
299
- * One label per suggested group: a single bucket name, or `mixed:a+b` when that chunk
300
- * spans multiple Tailwind buckets (matches `codefast arrange group` stdout).
301
- */
302
- export function summarizeGroupBucketLabels(groups) {
303
- return groups.map((g) => {
304
- const uniq = new Set(tokenizeClassString(g).map(classifyToken));
305
- return uniq.size === 1 ? [...uniq][0] : `mixed:${[...uniq].sort().join("+")}`;
306
- });
307
- }
@@ -1,7 +0,0 @@
1
- import { type DomainSourceFile } from "#lib/arrange/domain/ast/ast-node.model";
2
- /**
3
- * Resolve the module specifier used when injecting a `cn` import into a file.
4
- */
5
- export declare function cnModuleSpecifierForFile(filePath: string, override?: string): string;
6
- export declare function ensureCnImport(sourceFile: DomainSourceFile, cnImportOverride?: string): string;
7
- //# sourceMappingURL=imports.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"imports.d.ts","sourceRoot":"","sources":["../../../../src/lib/arrange/domain/imports.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EAItB,MAAM,wCAAwC,CAAC;AAsBhD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAMpF;AAeD,wBAAgB,cAAc,CAAC,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CA2C9F"}
@@ -1,80 +0,0 @@
1
- import { isDomainImportDeclaration, isDomainNamedImports, isDomainStringLiteral, } from "#lib/arrange/domain/ast/ast-node.model";
2
- function sourceFileImportsCn(sourceFile) {
3
- for (const statement of sourceFile.statements) {
4
- if (!isDomainImportDeclaration(statement) || !statement.importClause) {
5
- continue;
6
- }
7
- const clause = statement.importClause;
8
- if (clause.name?.text === "cn") {
9
- return true;
10
- }
11
- if (clause.namedBindings && isDomainNamedImports(clause.namedBindings)) {
12
- for (const importedBinding of clause.namedBindings.elements) {
13
- if (importedBinding.name.text === "cn") {
14
- return true;
15
- }
16
- }
17
- }
18
- }
19
- return false;
20
- }
21
- /**
22
- * Resolve the module specifier used when injecting a `cn` import into a file.
23
- */
24
- export function cnModuleSpecifierForFile(filePath, override) {
25
- void filePath;
26
- if (override) {
27
- return override;
28
- }
29
- return "@codefast/tailwind-variants";
30
- }
31
- function findImportDeclarationFromModule(sourceFile, moduleSpecifier) {
32
- for (const statement of sourceFile.statements) {
33
- if (!isDomainImportDeclaration(statement)) {
34
- continue;
35
- }
36
- const spec = statement.moduleSpecifier;
37
- if (isDomainStringLiteral(spec) && spec.text === moduleSpecifier) {
38
- return statement;
39
- }
40
- }
41
- return undefined;
42
- }
43
- export function ensureCnImport(sourceFile, cnImportOverride) {
44
- const sourceText = sourceFile.text;
45
- if (sourceFileImportsCn(sourceFile)) {
46
- return sourceText;
47
- }
48
- const moduleSpecifier = cnModuleSpecifierForFile(sourceFile.fileName, cnImportOverride);
49
- const decl = findImportDeclarationFromModule(sourceFile, moduleSpecifier);
50
- if (decl?.importClause &&
51
- !decl.importClause.isTypeOnly &&
52
- decl.importClause.namedBindings &&
53
- isDomainNamedImports(decl.importClause.namedBindings)) {
54
- const elements = decl.importClause.namedBindings.elements;
55
- if (elements.length > 0) {
56
- const pos = elements[0].pos;
57
- return `${sourceText.slice(0, pos)}cn, ${sourceText.slice(pos)}`;
58
- }
59
- }
60
- const importLine = `import { cn } from "${moduleSpecifier}";`;
61
- let firstImport = -1;
62
- for (const statement of sourceFile.statements) {
63
- if (isDomainImportDeclaration(statement)) {
64
- firstImport = statement.pos;
65
- break;
66
- }
67
- }
68
- const useClient = /^["']use client["'];?\s*\r?\n/.exec(sourceText);
69
- let insertAt;
70
- if (useClient) {
71
- insertAt = useClient[0].length;
72
- }
73
- else if (firstImport !== -1) {
74
- insertAt = firstImport;
75
- }
76
- else {
77
- insertAt = 0;
78
- }
79
- return `${sourceText.slice(0, insertAt)}${importLine}\n${sourceText.slice(insertAt)}`;
80
- }
@@ -1,16 +0,0 @@
1
- export declare function escapeTsStringLiteralContent(group: string): string;
2
- /**
3
- * Multiline fragment for use *inside* an existing `cn(...)` — replaces one
4
- * string argument with several, without producing `cn(cn(...))`.
5
- */
6
- export declare function formatCnArguments(groups: string[], options?: {
7
- indent?: string;
8
- commaAfterLastGroup?: boolean;
9
- trailingClassName?: boolean;
10
- }): string;
11
- export declare function formatCnCall(groups: string[], options?: {
12
- trailingClassName?: boolean;
13
- }): string;
14
- export declare function formatArray(groups: string[]): string;
15
- export declare function formatJsxCnAttributeValue(groups: string[], source: string, valueNodeStart: number): string;
16
- //# sourceMappingURL=source-text-formatters.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,55 +0,0 @@
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
- }
@@ -1,45 +0,0 @@
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
@@ -1 +0,0 @@
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"}