@codefast/cli 0.3.13-canary.1 → 0.3.13-canary.3

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 (364) hide show
  1. package/README.md +1 -1
  2. package/dist/bin.d.ts +3 -0
  3. package/dist/bin.d.ts.map +1 -0
  4. package/dist/{bin.mjs → bin.js} +1 -4
  5. package/dist/commands/arrange.d.ts +3 -0
  6. package/dist/commands/arrange.d.ts.map +1 -0
  7. package/dist/commands/arrange.js +108 -0
  8. package/dist/commands/mirror.d.ts +3 -0
  9. package/dist/commands/mirror.d.ts.map +1 -0
  10. package/dist/commands/mirror.js +36 -0
  11. package/dist/commands/tag.d.ts +3 -0
  12. package/dist/commands/tag.d.ts.map +1 -0
  13. package/dist/commands/tag.js +44 -0
  14. package/dist/lib/arrange/application/ports/domain-source-parser.port.d.ts +5 -0
  15. package/dist/lib/arrange/application/ports/domain-source-parser.port.d.ts.map +1 -0
  16. package/dist/lib/arrange/application/ports/file-walker.port.d.ts +5 -0
  17. package/dist/lib/arrange/application/ports/file-walker.port.d.ts.map +1 -0
  18. package/dist/lib/arrange/application/requests/analyze-directory.request.d.ts +6 -0
  19. package/dist/lib/arrange/application/requests/analyze-directory.request.d.ts.map +1 -0
  20. package/dist/lib/arrange/application/requests/analyze-directory.request.js +4 -0
  21. package/dist/lib/arrange/application/requests/arrange-sync.request.d.ts +18 -0
  22. package/dist/lib/arrange/application/requests/arrange-sync.request.d.ts.map +1 -0
  23. package/dist/lib/arrange/application/requests/arrange-sync.request.js +15 -0
  24. package/dist/lib/arrange/application/requests/suggest-groups.request.d.ts +8 -0
  25. package/dist/lib/arrange/application/requests/suggest-groups.request.d.ts.map +1 -0
  26. package/dist/lib/arrange/application/requests/suggest-groups.request.js +8 -0
  27. package/dist/lib/arrange/application/use-cases/analyze-directory.use-case.d.ts +17 -0
  28. package/dist/lib/arrange/application/use-cases/analyze-directory.use-case.d.ts.map +1 -0
  29. package/dist/lib/arrange/application/use-cases/analyze-directory.use-case.js +24 -0
  30. package/dist/lib/arrange/application/use-cases/group-file-preview.use-case.d.ts +17 -0
  31. package/dist/lib/arrange/application/use-cases/group-file-preview.use-case.d.ts.map +1 -0
  32. package/dist/lib/arrange/application/use-cases/group-file-preview.use-case.js +46 -0
  33. package/dist/lib/arrange/application/use-cases/group-file.use-case.d.ts +5 -0
  34. package/dist/lib/arrange/application/use-cases/group-file.use-case.d.ts.map +1 -0
  35. package/dist/lib/arrange/application/use-cases/group-file.use-case.js +40 -0
  36. package/dist/lib/arrange/application/use-cases/run-arrange-sync.use-case.d.ts +19 -0
  37. package/dist/lib/arrange/application/use-cases/run-arrange-sync.use-case.d.ts.map +1 -0
  38. package/dist/lib/arrange/application/use-cases/run-arrange-sync.use-case.js +85 -0
  39. package/dist/lib/arrange/application/use-cases/suggest-cn-groups.use-case.d.ts +7 -0
  40. package/dist/lib/arrange/application/use-cases/suggest-cn-groups.use-case.d.ts.map +1 -0
  41. package/dist/lib/arrange/application/use-cases/suggest-cn-groups.use-case.js +10 -0
  42. package/dist/lib/arrange/domain/arrange-analyze.service.d.ts +12 -0
  43. package/dist/lib/arrange/domain/arrange-analyze.service.d.ts.map +1 -0
  44. package/dist/lib/arrange/domain/arrange-analyze.service.js +116 -0
  45. package/dist/lib/arrange/domain/arrange-grouping.service.d.ts +53 -0
  46. package/dist/lib/arrange/domain/arrange-grouping.service.d.ts.map +1 -0
  47. package/dist/lib/arrange/domain/arrange-grouping.service.js +106 -0
  48. package/dist/lib/arrange/domain/ast/ast-helpers.helper.d.ts +28 -0
  49. package/dist/lib/arrange/domain/ast/ast-helpers.helper.d.ts.map +1 -0
  50. package/dist/lib/arrange/domain/ast/ast-helpers.helper.js +130 -0
  51. package/dist/lib/arrange/domain/ast/ast-node.model.d.ts +179 -0
  52. package/dist/lib/arrange/domain/ast/ast-node.model.d.ts.map +1 -0
  53. package/dist/lib/arrange/domain/ast/ast-node.model.js +210 -0
  54. package/dist/lib/arrange/domain/ast/collectors-cn.collector.d.ts +7 -0
  55. package/dist/lib/arrange/domain/ast/collectors-cn.collector.d.ts.map +1 -0
  56. package/dist/lib/arrange/domain/ast/collectors-cn.collector.js +70 -0
  57. package/dist/lib/arrange/domain/ast/collectors-jsx.collector.d.ts +4 -0
  58. package/dist/lib/arrange/domain/ast/collectors-jsx.collector.d.ts.map +1 -0
  59. package/dist/lib/arrange/domain/ast/collectors-jsx.collector.js +21 -0
  60. package/dist/lib/arrange/domain/ast/collectors-tv.collector.d.ts +13 -0
  61. package/dist/lib/arrange/domain/ast/collectors-tv.collector.d.ts.map +1 -0
  62. package/dist/lib/arrange/domain/ast/collectors-tv.collector.js +302 -0
  63. package/dist/lib/arrange/domain/ast/targets.model.d.ts +8 -0
  64. package/dist/lib/arrange/domain/ast/targets.model.d.ts.map +1 -0
  65. package/dist/lib/arrange/domain/ast/targets.model.js +147 -0
  66. package/dist/lib/arrange/domain/constants.domain.d.ts +70 -0
  67. package/dist/lib/arrange/domain/constants.domain.d.ts.map +1 -0
  68. package/dist/lib/arrange/domain/constants.domain.js +182 -0
  69. package/dist/lib/arrange/domain/errors.domain.d.ts +14 -0
  70. package/dist/lib/arrange/domain/errors.domain.d.ts.map +1 -0
  71. package/dist/lib/arrange/domain/errors.domain.js +16 -0
  72. package/dist/lib/arrange/domain/grouping.domain.d.ts +41 -0
  73. package/dist/lib/arrange/domain/grouping.domain.d.ts.map +1 -0
  74. package/dist/lib/arrange/domain/grouping.domain.js +371 -0
  75. package/dist/lib/arrange/domain/imports.domain.d.ts +7 -0
  76. package/dist/lib/arrange/domain/imports.domain.d.ts.map +1 -0
  77. package/dist/lib/arrange/domain/imports.domain.js +80 -0
  78. package/dist/lib/arrange/domain/source-text-formatters.formatter.d.ts +16 -0
  79. package/dist/lib/arrange/domain/source-text-formatters.formatter.d.ts.map +1 -0
  80. package/dist/lib/arrange/domain/source-text-formatters.formatter.js +55 -0
  81. package/dist/lib/arrange/domain/tokenizer.util.d.ts +45 -0
  82. package/dist/lib/arrange/domain/tokenizer.util.d.ts.map +1 -0
  83. package/dist/lib/arrange/domain/tokenizer.util.js +469 -0
  84. package/dist/lib/arrange/domain/types.domain.d.ts +115 -0
  85. package/dist/lib/arrange/domain/types.domain.d.ts.map +1 -0
  86. package/dist/lib/arrange/domain/types.domain.js +10 -0
  87. package/dist/lib/arrange/index.d.ts +45 -0
  88. package/dist/lib/arrange/index.d.ts.map +1 -0
  89. package/dist/lib/arrange/index.js +41 -0
  90. package/dist/lib/arrange/infra/arrange-sync-cli-options.adapter.d.ts +14 -0
  91. package/dist/lib/arrange/infra/arrange-sync-cli-options.adapter.d.ts.map +1 -0
  92. package/dist/lib/arrange/infra/domain-source-parser.adapter.d.ts +11 -0
  93. package/dist/lib/arrange/infra/domain-source-parser.adapter.d.ts.map +1 -0
  94. package/dist/lib/arrange/infra/domain-source-parser.adapter.js +19 -0
  95. package/dist/lib/arrange/infra/ensure-cn-import.adapter.d.ts +3 -0
  96. package/dist/lib/arrange/infra/ensure-cn-import.adapter.d.ts.map +1 -0
  97. package/dist/lib/arrange/infra/ensure-cn-import.adapter.js +6 -0
  98. package/dist/lib/arrange/infra/file-walker.adapter.d.ts +8 -0
  99. package/dist/lib/arrange/infra/file-walker.adapter.d.ts.map +1 -0
  100. package/dist/lib/arrange/infra/file-walker.adapter.js +17 -0
  101. package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.test-helper.d.ts +8 -0
  102. package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.test-helper.d.ts.map +1 -0
  103. package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.test-helper.js +25 -0
  104. package/dist/lib/arrange/infra/ts-ast-translator.adapter.d.ts +10 -0
  105. package/dist/lib/arrange/infra/ts-ast-translator.adapter.d.ts.map +1 -0
  106. package/dist/lib/arrange/infra/ts-ast-translator.adapter.js +363 -0
  107. package/dist/lib/arrange/presentation/arrange-prelude.presenter.d.ts +14 -0
  108. package/dist/lib/arrange/presentation/arrange-prelude.presenter.d.ts.map +1 -0
  109. package/dist/lib/arrange/presentation/arrange-prelude.presenter.js +24 -0
  110. package/dist/lib/arrange/presentation/formatters.presenter.d.ts +3 -0
  111. package/dist/lib/arrange/presentation/formatters.presenter.d.ts.map +1 -0
  112. package/dist/lib/arrange/presentation/formatters.presenter.js +2 -0
  113. package/dist/lib/arrange/presentation/present-analyze-cli.presenter.d.ts +4 -0
  114. package/dist/lib/arrange/presentation/present-analyze-cli.presenter.d.ts.map +1 -0
  115. package/dist/lib/arrange/presentation/present-analyze-cli.presenter.js +4 -0
  116. package/dist/lib/arrange/presentation/report.presenter.d.ts +4 -0
  117. package/dist/lib/arrange/presentation/report.presenter.d.ts.map +1 -0
  118. package/dist/lib/arrange/presentation/report.presenter.js +37 -0
  119. package/dist/lib/arrange/presentation/resolve-arrange-cli-target.presenter.d.ts +2 -0
  120. package/dist/lib/arrange/presentation/resolve-arrange-cli-target.presenter.d.ts.map +1 -0
  121. package/dist/lib/arrange/presentation/resolve-arrange-cli-target.presenter.js +7 -0
  122. package/dist/lib/config/domain/schema.domain.d.ts +50 -0
  123. package/dist/lib/config/domain/schema.domain.d.ts.map +1 -0
  124. package/dist/lib/config/domain/schema.domain.js +43 -0
  125. package/dist/lib/config/index.d.ts +4 -0
  126. package/dist/lib/config/index.d.ts.map +1 -0
  127. package/dist/lib/config/index.js +2 -0
  128. package/dist/lib/config/infra/loader.adapter.d.ts +11 -0
  129. package/dist/lib/config/infra/loader.adapter.d.ts.map +1 -0
  130. package/dist/lib/config/infra/loader.adapter.js +90 -0
  131. package/dist/lib/core/application/architecture-boundaries.policy.d.ts +19 -0
  132. package/dist/lib/core/application/architecture-boundaries.policy.d.ts.map +1 -0
  133. package/dist/lib/core/application/architecture-boundaries.policy.js +370 -0
  134. package/dist/lib/core/application/ports/cli-io.port.d.ts +31 -0
  135. package/dist/lib/core/application/ports/cli-io.port.d.ts.map +1 -0
  136. package/dist/lib/core/application/schema-parse.util.d.ts +8 -0
  137. package/dist/lib/core/application/schema-parse.util.d.ts.map +1 -0
  138. package/dist/lib/core/application/schema-parse.util.js +20 -0
  139. package/dist/lib/core/application/utils/caught-unknown-message.util.d.ts +6 -0
  140. package/dist/lib/core/application/utils/caught-unknown-message.util.d.ts.map +1 -0
  141. package/dist/lib/core/application/utils/caught-unknown-message.util.js +34 -0
  142. package/dist/lib/core/application/utils/verbose-diagnostics.util.d.ts +5 -0
  143. package/dist/lib/core/application/utils/verbose-diagnostics.util.d.ts.map +1 -0
  144. package/dist/lib/core/application/utils/verbose-diagnostics.util.js +7 -0
  145. package/dist/lib/core/domain/errors.domain.d.ts +11 -0
  146. package/dist/lib/core/domain/errors.domain.d.ts.map +1 -0
  147. package/dist/lib/core/domain/errors.domain.js +9 -0
  148. package/dist/lib/core/domain/result.model.d.ts +17 -0
  149. package/dist/lib/core/domain/result.model.d.ts.map +1 -0
  150. package/dist/lib/core/domain/result.model.js +15 -0
  151. package/dist/lib/core/infra/container.adapter.d.ts +58 -0
  152. package/dist/lib/core/infra/container.adapter.d.ts.map +1 -0
  153. package/dist/lib/core/infra/container.adapter.js +80 -0
  154. package/dist/lib/core/infra/logging-decorator.adapter.d.ts +12 -0
  155. package/dist/lib/core/infra/logging-decorator.adapter.d.ts.map +1 -0
  156. package/dist/lib/core/infra/logging-decorator.adapter.js +75 -0
  157. package/dist/lib/core/presentation/cli-executor.presenter.d.ts +33 -0
  158. package/dist/lib/core/presentation/cli-executor.presenter.d.ts.map +1 -0
  159. package/dist/lib/core/presentation/cli-executor.presenter.js +73 -0
  160. package/dist/lib/core/presentation/format-app-error.presenter.d.ts +6 -0
  161. package/dist/lib/core/presentation/format-app-error.presenter.d.ts.map +1 -0
  162. package/dist/lib/core/presentation/format-app-error.presenter.js +19 -0
  163. package/dist/lib/core/presentation/global-cli-options.presenter.d.ts +9 -0
  164. package/dist/lib/core/presentation/global-cli-options.presenter.d.ts.map +1 -0
  165. package/dist/lib/core/presentation/global-cli-options.presenter.js +8 -0
  166. package/dist/lib/core/presentation/load-codefast-config.presenter.d.ts +8 -0
  167. package/dist/lib/core/presentation/load-codefast-config.presenter.d.ts.map +1 -0
  168. package/dist/lib/core/presentation/load-codefast-config.presenter.js +15 -0
  169. package/dist/lib/core/presentation/parse-cli-schema.presenter.d.ts +5 -0
  170. package/dist/lib/core/presentation/parse-cli-schema.presenter.d.ts.map +1 -0
  171. package/dist/lib/core/presentation/parse-cli-schema.presenter.js +4 -0
  172. package/dist/lib/core/presentation/run-cli-use-case-after-parse.presenter.d.ts +6 -0
  173. package/dist/lib/core/presentation/run-cli-use-case-after-parse.presenter.d.ts.map +1 -0
  174. package/dist/lib/core/presentation/run-cli-use-case-after-parse.presenter.js +17 -0
  175. package/dist/lib/core/presentation/workspace-root-strict.presenter.d.ts +5 -0
  176. package/dist/lib/core/presentation/workspace-root-strict.presenter.d.ts.map +1 -0
  177. package/dist/lib/core/presentation/workspace-root-strict.presenter.js +12 -0
  178. package/dist/lib/infra/config-reporter.adapter.d.ts +4 -0
  179. package/dist/lib/infra/config-reporter.adapter.d.ts.map +1 -0
  180. package/dist/lib/infra/config-reporter.adapter.js +9 -0
  181. package/dist/lib/infra/fs-contract.port.d.ts +2 -0
  182. package/dist/lib/infra/fs-contract.port.d.ts.map +1 -0
  183. package/dist/lib/infra/fs-contract.port.js +1 -0
  184. package/dist/lib/infra/node-io.adapter.d.ts +4 -0
  185. package/dist/lib/infra/node-io.adapter.d.ts.map +1 -0
  186. package/dist/lib/infra/node-io.adapter.js +37 -0
  187. package/dist/lib/infra/workspace/repo-root.adapter.d.ts +7 -0
  188. package/dist/lib/infra/workspace/repo-root.adapter.d.ts.map +1 -0
  189. package/dist/lib/infra/workspace/repo-root.adapter.js +23 -0
  190. package/dist/lib/mirror/application/ports/file-system-service.port.d.ts +6 -0
  191. package/dist/lib/mirror/application/ports/file-system-service.port.d.ts.map +1 -0
  192. package/dist/lib/mirror/application/ports/file-system-service.port.js +1 -0
  193. package/dist/lib/mirror/application/ports/mirror-sync-reporter.port.d.ts +27 -0
  194. package/dist/lib/mirror/application/ports/mirror-sync-reporter.port.d.ts.map +1 -0
  195. package/dist/lib/mirror/application/ports/mirror-sync-reporter.port.js +1 -0
  196. package/dist/lib/mirror/application/ports/package-repository.port.d.ts +16 -0
  197. package/dist/lib/mirror/application/ports/package-repository.port.d.ts.map +1 -0
  198. package/dist/lib/mirror/application/ports/package-repository.port.js +1 -0
  199. package/dist/lib/mirror/application/ports/workspace-service.port.d.ts +7 -0
  200. package/dist/lib/mirror/application/ports/workspace-service.port.d.ts.map +1 -0
  201. package/dist/lib/mirror/application/ports/workspace-service.port.js +1 -0
  202. package/dist/lib/mirror/application/requests/mirror-sync.request.d.ts +10 -0
  203. package/dist/lib/mirror/application/requests/mirror-sync.request.d.ts.map +1 -0
  204. package/dist/lib/mirror/application/requests/mirror-sync.request.js +8 -0
  205. package/dist/lib/mirror/application/use-cases/generate-mirror-exports.use-case.d.ts +10 -0
  206. package/dist/lib/mirror/application/use-cases/generate-mirror-exports.use-case.d.ts.map +1 -0
  207. package/dist/lib/mirror/application/use-cases/generate-mirror-exports.use-case.js +271 -0
  208. package/dist/lib/mirror/application/use-cases/run-mirror-sync.use-case.d.ts +19 -0
  209. package/dist/lib/mirror/application/use-cases/run-mirror-sync.use-case.d.ts.map +1 -0
  210. package/dist/lib/mirror/application/use-cases/run-mirror-sync.use-case.js +168 -0
  211. package/dist/lib/mirror/domain/constants.domain.d.ts +6 -0
  212. package/dist/lib/mirror/domain/constants.domain.d.ts.map +1 -0
  213. package/dist/lib/mirror/domain/constants.domain.js +5 -0
  214. package/dist/lib/mirror/domain/errors.domain.d.ts +10 -0
  215. package/dist/lib/mirror/domain/errors.domain.d.ts.map +1 -0
  216. package/dist/lib/mirror/domain/errors.domain.js +12 -0
  217. package/dist/lib/mirror/domain/types.domain.d.ts +65 -0
  218. package/dist/lib/mirror/domain/types.domain.d.ts.map +1 -0
  219. package/dist/lib/mirror/domain/types.domain.js +1 -0
  220. package/dist/lib/mirror/index.d.ts +6 -0
  221. package/dist/lib/mirror/index.d.ts.map +1 -0
  222. package/dist/lib/mirror/index.js +1 -0
  223. package/dist/lib/mirror/infra/dirent-list.adapter.d.ts +9 -0
  224. package/dist/lib/mirror/infra/dirent-list.adapter.d.ts.map +1 -0
  225. package/dist/lib/mirror/infra/dirent-list.adapter.js +13 -0
  226. package/dist/lib/mirror/infra/file-system-service.adapter.d.ts +7 -0
  227. package/dist/lib/mirror/infra/file-system-service.adapter.d.ts.map +1 -0
  228. package/dist/lib/mirror/infra/file-system-service.adapter.js +47 -0
  229. package/dist/lib/mirror/infra/mirror-sync-cli-options.adapter.d.ts +14 -0
  230. package/dist/lib/mirror/infra/mirror-sync-cli-options.adapter.d.ts.map +1 -0
  231. package/dist/lib/mirror/infra/mirror-sync-cli-options.adapter.js +1 -0
  232. package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.d.ts +3 -0
  233. package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.d.ts.map +1 -0
  234. package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.js +13 -0
  235. package/dist/lib/mirror/infra/package-filter.adapter.d.ts +8 -0
  236. package/dist/lib/mirror/infra/package-filter.adapter.d.ts.map +1 -0
  237. package/dist/lib/mirror/infra/package-filter.adapter.js +33 -0
  238. package/dist/lib/mirror/infra/package-repository.adapter.d.ts +17 -0
  239. package/dist/lib/mirror/infra/package-repository.adapter.d.ts.map +1 -0
  240. package/dist/lib/mirror/infra/package-repository.adapter.js +17 -0
  241. package/dist/lib/mirror/infra/path-normalizer.adapter.d.ts +2 -0
  242. package/dist/lib/mirror/infra/path-normalizer.adapter.d.ts.map +1 -0
  243. package/dist/lib/mirror/infra/path-normalizer.adapter.js +4 -0
  244. package/dist/lib/mirror/infra/update-pkg.adapter.d.ts +19 -0
  245. package/dist/lib/mirror/infra/update-pkg.adapter.d.ts.map +1 -0
  246. package/dist/lib/mirror/infra/update-pkg.adapter.js +156 -0
  247. package/dist/lib/mirror/infra/workspace-packages.adapter.d.ts +26 -0
  248. package/dist/lib/mirror/infra/workspace-packages.adapter.d.ts.map +1 -0
  249. package/dist/lib/mirror/infra/workspace-packages.adapter.js +170 -0
  250. package/dist/lib/mirror/infra/workspace-service.adapter.d.ts +8 -0
  251. package/dist/lib/mirror/infra/workspace-service.adapter.d.ts.map +1 -0
  252. package/dist/lib/mirror/infra/workspace-service.adapter.js +10 -0
  253. package/dist/lib/mirror/presentation/mirror-prelude.presenter.d.ts +17 -0
  254. package/dist/lib/mirror/presentation/mirror-prelude.presenter.d.ts.map +1 -0
  255. package/dist/lib/mirror/presentation/mirror-prelude.presenter.js +35 -0
  256. package/dist/lib/mirror/presentation/reporter.presenter.d.ts +25 -0
  257. package/dist/lib/mirror/presentation/reporter.presenter.d.ts.map +1 -0
  258. package/dist/lib/mirror/presentation/reporter.presenter.js +140 -0
  259. package/dist/lib/mirror/presentation/resolve-mirror-package-arg.presenter.d.ts +11 -0
  260. package/dist/lib/mirror/presentation/resolve-mirror-package-arg.presenter.d.ts.map +1 -0
  261. package/dist/lib/mirror/presentation/resolve-mirror-package-arg.presenter.js +27 -0
  262. package/dist/lib/shared/source-code/domain/text-edit.model.d.ts +14 -0
  263. package/dist/lib/shared/source-code/domain/text-edit.model.d.ts.map +1 -0
  264. package/dist/lib/shared/source-code/domain/text-edit.model.js +30 -0
  265. package/dist/lib/shared/source-code/infra/tsx-file-walk.adapter.d.ts +4 -0
  266. package/dist/lib/shared/source-code/infra/tsx-file-walk.adapter.d.ts.map +1 -0
  267. package/dist/lib/shared/source-code/infra/tsx-file-walk.adapter.js +37 -0
  268. package/dist/lib/tag/application/ports/target-resolver.port.d.ts +6 -0
  269. package/dist/lib/tag/application/ports/target-resolver.port.d.ts.map +1 -0
  270. package/dist/lib/tag/application/ports/target-resolver.port.js +1 -0
  271. package/dist/lib/tag/application/ports/typescript-tree-walk.port.d.ts +6 -0
  272. package/dist/lib/tag/application/ports/typescript-tree-walk.port.d.ts.map +1 -0
  273. package/dist/lib/tag/application/ports/typescript-tree-walk.port.js +1 -0
  274. package/dist/lib/tag/application/requests/tag-sync.request.d.ts +10 -0
  275. package/dist/lib/tag/application/requests/tag-sync.request.d.ts.map +1 -0
  276. package/dist/lib/tag/application/requests/tag-sync.request.js +8 -0
  277. package/dist/lib/tag/application/use-cases/run-tag-sync.use-case.d.ts +23 -0
  278. package/dist/lib/tag/application/use-cases/run-tag-sync.use-case.d.ts.map +1 -0
  279. package/dist/lib/tag/application/use-cases/run-tag-sync.use-case.js +357 -0
  280. package/dist/lib/tag/domain/types.domain.d.ts +56 -0
  281. package/dist/lib/tag/domain/types.domain.d.ts.map +1 -0
  282. package/dist/lib/tag/domain/types.domain.js +1 -0
  283. package/dist/lib/tag/index.d.ts +14 -0
  284. package/dist/lib/tag/index.d.ts.map +1 -0
  285. package/dist/lib/tag/index.js +10 -0
  286. package/dist/lib/tag/infra/tag-sync-cli-options.adapter.d.ts +14 -0
  287. package/dist/lib/tag/infra/tag-sync-cli-options.adapter.d.ts.map +1 -0
  288. package/dist/lib/tag/infra/tag-sync-cli-options.adapter.js +1 -0
  289. package/dist/lib/tag/infra/tag-target-candidates.adapter.d.ts +4 -0
  290. package/dist/lib/tag/infra/tag-target-candidates.adapter.d.ts.map +1 -0
  291. package/dist/lib/tag/infra/tag-target-candidates.adapter.js +200 -0
  292. package/dist/lib/tag/infra/tag-target-resolver.adapter.d.ts +3 -0
  293. package/dist/lib/tag/infra/tag-target-resolver.adapter.d.ts.map +1 -0
  294. package/dist/lib/tag/infra/tag-target-resolver.adapter.js +4 -0
  295. package/dist/lib/tag/infra/typescript-tree-walk.adapter.d.ts +3 -0
  296. package/dist/lib/tag/infra/typescript-tree-walk.adapter.d.ts.map +1 -0
  297. package/dist/lib/tag/infra/typescript-tree-walk.adapter.js +4 -0
  298. package/dist/lib/tag/presentation/colors.presenter.d.ts +8 -0
  299. package/dist/lib/tag/presentation/colors.presenter.d.ts.map +1 -0
  300. package/dist/lib/tag/presentation/colors.presenter.js +9 -0
  301. package/dist/lib/tag/presentation/resolve-tag-cli-target.presenter.d.ts +8 -0
  302. package/dist/lib/tag/presentation/resolve-tag-cli-target.presenter.d.ts.map +1 -0
  303. package/dist/lib/tag/presentation/resolve-tag-cli-target.presenter.js +10 -0
  304. package/dist/lib/tag/presentation/resolve-tag-workspace-root.presenter.d.ts +8 -0
  305. package/dist/lib/tag/presentation/resolve-tag-workspace-root.presenter.d.ts.map +1 -0
  306. package/dist/lib/tag/presentation/resolve-tag-workspace-root.presenter.js +10 -0
  307. package/dist/lib/tag/presentation/tag-prelude.presenter.d.ts +15 -0
  308. package/dist/lib/tag/presentation/tag-prelude.presenter.d.ts.map +1 -0
  309. package/dist/lib/tag/presentation/tag-prelude.presenter.js +31 -0
  310. package/dist/lib/tag/presentation/tag-sync.presenter.d.ts +20 -0
  311. package/dist/lib/tag/presentation/tag-sync.presenter.d.ts.map +1 -0
  312. package/dist/lib/tag/presentation/tag-sync.presenter.js +92 -0
  313. package/dist/program.d.ts +4 -0
  314. package/dist/program.d.ts.map +1 -0
  315. package/dist/program.js +40 -0
  316. package/package.json +8 -5
  317. package/dist/commands/arrange.mjs +0 -107
  318. package/dist/commands/mirror.mjs +0 -66
  319. package/dist/commands/tag.mjs +0 -58
  320. package/dist/lib/arrange/application/analyze.mjs +0 -92
  321. package/dist/lib/arrange/application/group-file.mjs +0 -113
  322. package/dist/lib/arrange/application/run-target.mjs +0 -65
  323. package/dist/lib/arrange/domain/ast/ast-helpers.mjs +0 -115
  324. package/dist/lib/arrange/domain/ast/collectors-cn.mjs +0 -61
  325. package/dist/lib/arrange/domain/ast/collectors-jsx.mjs +0 -20
  326. package/dist/lib/arrange/domain/ast/collectors-tv.mjs +0 -170
  327. package/dist/lib/arrange/domain/ast/targets.mjs +0 -106
  328. package/dist/lib/arrange/domain/constants.mjs +0 -169
  329. package/dist/lib/arrange/domain/errors.mjs +0 -19
  330. package/dist/lib/arrange/domain/grouping.mjs +0 -235
  331. package/dist/lib/arrange/domain/imports.mjs +0 -54
  332. package/dist/lib/arrange/domain/tokenizer.mjs +0 -216
  333. package/dist/lib/arrange/index.mjs +0 -15
  334. package/dist/lib/arrange/infra/walk.mjs +0 -33
  335. package/dist/lib/arrange/presentation/formatters.mjs +0 -52
  336. package/dist/lib/arrange/presentation/report.mjs +0 -24
  337. package/dist/lib/config/domain/schema.mjs +0 -25
  338. package/dist/lib/config/index.mjs +0 -3
  339. package/dist/lib/config/infra/loader.mjs +0 -78
  340. package/dist/lib/infra/caught-unknown-message.mjs +0 -20
  341. package/dist/lib/infra/config-reporter.mjs +0 -10
  342. package/dist/lib/infra/node-io.mjs +0 -30
  343. package/dist/lib/infra/workspace/repo-root.mjs +0 -22
  344. package/dist/lib/mirror/application/engine.mjs +0 -248
  345. package/dist/lib/mirror/application/sync.mjs +0 -162
  346. package/dist/lib/mirror/domain/constants.mjs +0 -12
  347. package/dist/lib/mirror/domain/errors.mjs +0 -15
  348. package/dist/lib/mirror/index.mjs +0 -2
  349. package/dist/lib/mirror/infra/dirent-list.mjs +0 -14
  350. package/dist/lib/mirror/infra/package-filter.mjs +0 -26
  351. package/dist/lib/mirror/infra/path-normalizer.mjs +0 -7
  352. package/dist/lib/mirror/infra/update-pkg.mjs +0 -105
  353. package/dist/lib/mirror/infra/workspace-packages.mjs +0 -159
  354. package/dist/lib/mirror/presentation/reporter.mjs +0 -111
  355. package/dist/lib/tag/application/engine.mjs +0 -287
  356. package/dist/lib/tag/index.mjs +0 -4
  357. package/dist/lib/tag/infra/target-resolver.mjs +0 -170
  358. package/dist/lib/tag/presentation/colors.mjs +0 -12
  359. package/dist/lib/tag/presentation/tag-presenter.mjs +0 -63
  360. package/dist/program.mjs +0 -34
  361. /package/dist/lib/arrange/{domain/types.mjs → application/ports/domain-source-parser.port.js} +0 -0
  362. /package/dist/lib/{infra/fs-contract.mjs → arrange/application/ports/file-walker.port.js} +0 -0
  363. /package/dist/lib/{mirror/domain/types.mjs → arrange/infra/arrange-sync-cli-options.adapter.js} +0 -0
  364. /package/dist/lib/{tag/domain/types.mjs → core/application/ports/cli-io.port.js} +0 -0
package/README.md CHANGED
@@ -221,7 +221,7 @@ The `<version>` value is read from the nearest `package.json` found by walking u
221
221
 
222
222
  Adjacent buckets may be merged into one string literal when declared _compatible_ (e.g. `layout` + `sizing`). This keeps `cn()` calls readable without flattening unrelated concerns into a single undifferentiated blob.
223
223
 
224
- To change a placement, edit `classifyBareUtility` in `src/lib/arrange/tokenizer.ts` and add a corresponding `classifyToken` test in `src/lib/arrange.test.ts`.
224
+ To change a placement, edit `classifyBareUtility` in `src/lib/arrange/domain/tokenizer.util.ts` and add a corresponding `classifyToken` test in `src/lib/arrange/domain/tokenizer.util.test.ts`.
225
225
 
226
226
  ---
227
227
 
package/dist/bin.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
@@ -1,8 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { runCli } from "./program.mjs";
3
2
  import process from "node:process";
4
- //#region src/bin.ts
3
+ import { runCli } from "#program";
5
4
  const code = await runCli(process.argv);
6
5
  process.exit(code);
7
- //#endregion
8
- export {};
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerArrangeCommand(program: Command): void;
3
+ //# sourceMappingURL=arrange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrange.d.ts","sourceRoot":"","sources":["../../src/commands/arrange.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgH7D"}
@@ -0,0 +1,108 @@
1
+ import process from "node:process";
2
+ import { Option } from "commander";
3
+ import { ArrangeAnalyzeDirectoryRequestSchema } from "#lib/arrange/application/requests/analyze-directory.request";
4
+ import { ArrangeSyncRunRequestSchema } from "#lib/arrange/application/requests/arrange-sync.request";
5
+ import { ArrangeSuggestGroupsRequestSchema } from "#lib/arrange/application/requests/suggest-groups.request";
6
+ import { createCliContainer } from "#lib/core/infra/container.adapter";
7
+ import { consumeCliAppError } from "#lib/core/presentation/cli-executor.presenter";
8
+ import { parseWithCliSchema } from "#lib/core/presentation/parse-cli-schema.presenter";
9
+ import { runAsyncExitCodeUseCaseAfterParse, runSyncUseCaseAfterParse, } from "#lib/core/presentation/run-cli-use-case-after-parse.presenter";
10
+ function withClassNameOption() {
11
+ return new Option("--with-classname, --with-class-name", "Append className as final cn() argument").default(false);
12
+ }
13
+ export function registerArrangeCommand(program) {
14
+ const arrange = program
15
+ .command("arrange")
16
+ .description("Analyze and regroup Tailwind classes in cn() / tv() calls (Tailwind v4)");
17
+ arrange
18
+ .command("analyze")
19
+ .description("Report long strings, nested cn in tv(), and related findings")
20
+ .argument("[target]", "Directory or file (default: packages/ui/src/components)")
21
+ .action(async (target) => {
22
+ const cli = createCliContainer();
23
+ const prelude = await cli.arrange.prepareTargetWorkspaceAndConfig({
24
+ currentWorkingDirectory: process.cwd(),
25
+ rawTarget: target,
26
+ });
27
+ if (!consumeCliAppError(cli.logger, prelude)) {
28
+ return;
29
+ }
30
+ const { resolvedTarget } = prelude.value;
31
+ const parsed = parseWithCliSchema(ArrangeAnalyzeDirectoryRequestSchema, {
32
+ analyzeRootPath: resolvedTarget,
33
+ });
34
+ runSyncUseCaseAfterParse(cli, parsed, (input) => cli.arrange.analyzeDirectory(input), (report) => cli.arrange.presentAnalyzeReport(resolvedTarget, report));
35
+ });
36
+ arrange
37
+ .command("preview")
38
+ .description("Dry-run: print suggested replacements without writing files")
39
+ .argument("[target]", "Directory or file (default: packages/ui/src/components)")
40
+ .addOption(withClassNameOption())
41
+ .option("--cn-import <spec>", "Override module specifier when adding cn import")
42
+ .action(async (target, opts) => {
43
+ const cli = createCliContainer();
44
+ const prelude = await cli.arrange.prepareTargetWorkspaceAndConfig({
45
+ currentWorkingDirectory: process.cwd(),
46
+ rawTarget: target,
47
+ });
48
+ if (!consumeCliAppError(cli.logger, prelude)) {
49
+ return;
50
+ }
51
+ const { resolvedTarget, rootDir, config } = prelude.value;
52
+ const parsed = parseWithCliSchema(ArrangeSyncRunRequestSchema, {
53
+ rootDir,
54
+ targetPath: resolvedTarget,
55
+ write: false,
56
+ withClassName: opts.withClassName,
57
+ cnImport: opts.cnImport,
58
+ config: config.arrange ?? {},
59
+ });
60
+ await runAsyncExitCodeUseCaseAfterParse(cli, parsed, (input) => cli.arrange.runArrangeSync(input));
61
+ });
62
+ arrange
63
+ .command("apply")
64
+ .description("Apply grouping and cn-in-tv unwrap edits to files")
65
+ .argument("[target]", "Directory or file (default: packages/ui/src/components)")
66
+ .addOption(withClassNameOption())
67
+ .option("--cn-import <spec>", "Override module specifier when adding cn import")
68
+ .action(async (target, opts) => {
69
+ const cli = createCliContainer();
70
+ const prelude = await cli.arrange.prepareTargetWorkspaceAndConfig({
71
+ currentWorkingDirectory: process.cwd(),
72
+ rawTarget: target,
73
+ });
74
+ if (!consumeCliAppError(cli.logger, prelude)) {
75
+ return;
76
+ }
77
+ const { resolvedTarget, rootDir, config } = prelude.value;
78
+ const parsed = parseWithCliSchema(ArrangeSyncRunRequestSchema, {
79
+ rootDir,
80
+ targetPath: resolvedTarget,
81
+ write: true,
82
+ withClassName: opts.withClassName,
83
+ cnImport: opts.cnImport,
84
+ config: config.arrange ?? {},
85
+ });
86
+ await runAsyncExitCodeUseCaseAfterParse(cli, parsed, (input) => cli.arrange.runArrangeSync(input));
87
+ });
88
+ arrange
89
+ .command("group")
90
+ .description("Try grouping on a pasted class string (stdout: cn(...) or tv array with --tv)")
91
+ .argument("[tokens...]", "Class tokens (quote a single string if it contains spaces)")
92
+ .option("--tv", "Emit tv()-style array instead of cn() call", false)
93
+ .addOption(withClassNameOption())
94
+ .action((tokens, opts) => {
95
+ const cli = createCliContainer();
96
+ const parsed = parseWithCliSchema(ArrangeSuggestGroupsRequestSchema, {
97
+ inlineClasses: tokens.join(" ").trim(),
98
+ emitTvStyleArray: !!opts.tv,
99
+ trailingClassName: !!opts.withClassName,
100
+ });
101
+ if (!consumeCliAppError(cli.logger, parsed)) {
102
+ return;
103
+ }
104
+ const output = cli.arrange.suggestCnGroups(parsed.value);
105
+ cli.logger.out(output.primaryLine);
106
+ cli.logger.out(output.bucketsCommentLine);
107
+ });
108
+ }
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerMirrorCommand(program: Command): void;
3
+ //# sourceMappingURL=mirror.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mirror.d.ts","sourceRoot":"","sources":["../../src/commands/mirror.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoC5D"}
@@ -0,0 +1,36 @@
1
+ import process from "node:process";
2
+ import { createCliContainer } from "#lib/core/infra/container.adapter";
3
+ import { consumeCliAppError } from "#lib/core/presentation/cli-executor.presenter";
4
+ import { parseWithCliSchema } from "#lib/core/presentation/parse-cli-schema.presenter";
5
+ import { runAsyncExitCodeUseCaseAfterParse } from "#lib/core/presentation/run-cli-use-case-after-parse.presenter";
6
+ import { MirrorSyncRunRequestSchema } from "#lib/mirror/application/requests/mirror-sync.request";
7
+ export function registerMirrorCommand(program) {
8
+ const mirror = program
9
+ .command("mirror")
10
+ .description("Keep package manifests aligned with what you ship");
11
+ mirror
12
+ .command("sync")
13
+ .description("Write package.json exports from dist/ for workspace packages")
14
+ .argument("[package]", "Optional package path relative to repo root (e.g. packages/ui)")
15
+ .option("-v, --verbose", "Print extra diagnostics", false)
16
+ .action(async function (pkg, options) {
17
+ const cli = createCliContainer();
18
+ const prelude = await cli.mirror.prepareMirrorSync({
19
+ currentWorkingDirectory: process.cwd(),
20
+ packageArg: pkg,
21
+ globalCliRaw: this.optsWithGlobals(),
22
+ });
23
+ if (!consumeCliAppError(cli.logger, prelude)) {
24
+ return;
25
+ }
26
+ const { rootDir, config, packageFilter, globals } = prelude.value;
27
+ const parsed = parseWithCliSchema(MirrorSyncRunRequestSchema, {
28
+ rootDir,
29
+ config: config.mirror ?? {},
30
+ verbose: options.verbose,
31
+ noColor: globals.color === false,
32
+ packageFilter,
33
+ });
34
+ await runAsyncExitCodeUseCaseAfterParse(cli, parsed, (input) => cli.mirror.runMirrorSync(input));
35
+ });
36
+ }
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerTagCommand(program: Command): void;
3
+ //# sourceMappingURL=tag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../src/commands/tag.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6CzD"}
@@ -0,0 +1,44 @@
1
+ import process from "node:process";
2
+ import { createCliContainer } from "#lib/core/infra/container.adapter";
3
+ import { consumeCliAppError } from "#lib/core/presentation/cli-executor.presenter";
4
+ import { parseWithCliSchema } from "#lib/core/presentation/parse-cli-schema.presenter";
5
+ import { TagSyncRunRequestSchema } from "#lib/tag/application/requests/tag-sync.request";
6
+ export function registerTagCommand(program) {
7
+ program
8
+ .command("tag")
9
+ .alias("annotate")
10
+ .description("Add @since <version> JSDoc tags to exported declarations")
11
+ .argument("[target]", "Directory or file to annotate (default: auto-discover workspace packages)")
12
+ .option("--dry-run", "Show summary without writing files", false)
13
+ .action(async function (target, options) {
14
+ const cli = createCliContainer();
15
+ const prelude = await cli.tag.prepareTagSync({
16
+ currentWorkingDirectory: process.cwd(),
17
+ rawTarget: target,
18
+ globalCliRaw: this.optsWithGlobals(),
19
+ });
20
+ if (!consumeCliAppError(cli.logger, prelude)) {
21
+ return;
22
+ }
23
+ const { rootDir, config, resolvedTargetPath } = prelude.value;
24
+ const tagConfig = config.tag ?? {};
25
+ const parsed = parseWithCliSchema(TagSyncRunRequestSchema, {
26
+ rootDir,
27
+ write: !options.dryRun,
28
+ targetPath: resolvedTargetPath,
29
+ skipPackages: tagConfig.skipPackages,
30
+ config: tagConfig,
31
+ });
32
+ if (!consumeCliAppError(cli.logger, parsed)) {
33
+ return;
34
+ }
35
+ const tagOutcome = await cli.tag.runTagSync({
36
+ ...parsed.value,
37
+ listener: cli.tag.createProgressListener((line) => cli.logger.out(line)),
38
+ });
39
+ if (!consumeCliAppError(cli.logger, tagOutcome)) {
40
+ return;
41
+ }
42
+ process.exitCode = cli.tag.presentSyncCliResult(tagOutcome.value, rootDir);
43
+ });
44
+ }
@@ -0,0 +1,5 @@
1
+ import type { DomainSourceFile } from "#lib/arrange/domain/ast/ast-node.model";
2
+ export interface DomainSourceParserPort {
3
+ parseDomainSourceFile(filePath: string, sourceText: string): DomainSourceFile;
4
+ }
5
+ //# sourceMappingURL=domain-source-parser.port.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-source-parser.port.d.ts","sourceRoot":"","sources":["../../../../../src/lib/arrange/application/ports/domain-source-parser.port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE/E,MAAM,WAAW,sBAAsB;IACrC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAAC;CAC/E"}
@@ -0,0 +1,5 @@
1
+ import type { CliFs } from "#lib/core/application/ports/cli-io.port";
2
+ export interface FileWalkerPort {
3
+ walkTypeScriptFiles(rootDirectoryPath: string, fs: CliFs): string[];
4
+ }
5
+ //# sourceMappingURL=file-walker.port.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-walker.port.d.ts","sourceRoot":"","sources":["../../../../../src/lib/arrange/application/ports/file-walker.port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yCAAyC,CAAC;AAErE,MAAM,WAAW,cAAc;IAC7B,mBAAmB,CAAC,iBAAiB,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;CACrE"}
@@ -0,0 +1,6 @@
1
+ import { z } from "zod";
2
+ export declare const ArrangeAnalyzeDirectoryRequestSchema: z.ZodObject<{
3
+ analyzeRootPath: z.ZodString;
4
+ }, z.core.$strip>;
5
+ export type ArrangeAnalyzeDirectoryRequest = z.infer<typeof ArrangeAnalyzeDirectoryRequestSchema>;
6
+ //# sourceMappingURL=analyze-directory.request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-directory.request.d.ts","sourceRoot":"","sources":["../../../../../src/lib/arrange/application/requests/analyze-directory.request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,oCAAoC;;iBAE/C,CAAC;AAEH,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oCAAoC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { z } from "zod";
2
+ export const ArrangeAnalyzeDirectoryRequestSchema = z.object({
3
+ analyzeRootPath: z.string().min(1, "analyzeRootPath is required"),
4
+ });
@@ -0,0 +1,18 @@
1
+ import { z } from "zod";
2
+ export declare const ArrangeSyncRunRequestSchema: z.ZodObject<{
3
+ rootDir: z.ZodString;
4
+ targetPath: z.ZodString;
5
+ write: z.ZodBoolean;
6
+ withClassName: z.ZodOptional<z.ZodBoolean>;
7
+ cnImport: z.ZodOptional<z.ZodString>;
8
+ config: z.ZodOptional<z.ZodUnknown>;
9
+ }, z.core.$strip>;
10
+ export type ArrangeSyncRunRequest = z.infer<typeof ArrangeSyncRunRequestSchema>;
11
+ export declare const ArrangeRunTargetRequestSchema: z.ZodObject<{
12
+ targetPath: z.ZodString;
13
+ write: z.ZodBoolean;
14
+ withClassName: z.ZodOptional<z.ZodBoolean>;
15
+ cnImport: z.ZodOptional<z.ZodString>;
16
+ }, z.core.$strip>;
17
+ export type ArrangeRunTargetRequest = z.infer<typeof ArrangeRunTargetRequestSchema>;
18
+ //# sourceMappingURL=arrange-sync.request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrange-sync.request.d.ts","sourceRoot":"","sources":["../../../../../src/lib/arrange/application/requests/arrange-sync.request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,2BAA2B;;;;;;;iBAOtC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,eAAO,MAAM,6BAA6B;;;;;iBAKxC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { z } from "zod";
2
+ export const ArrangeSyncRunRequestSchema = z.object({
3
+ rootDir: z.string().min(1),
4
+ targetPath: z.string().min(1),
5
+ write: z.boolean(),
6
+ withClassName: z.boolean().optional(),
7
+ cnImport: z.string().optional(),
8
+ config: z.unknown().optional(),
9
+ });
10
+ export const ArrangeRunTargetRequestSchema = z.object({
11
+ targetPath: z.string().min(1),
12
+ write: z.boolean(),
13
+ withClassName: z.boolean().optional(),
14
+ cnImport: z.string().optional(),
15
+ });
@@ -0,0 +1,8 @@
1
+ import { z } from "zod";
2
+ export declare const ArrangeSuggestGroupsRequestSchema: z.ZodObject<{
3
+ inlineClasses: z.ZodString;
4
+ emitTvStyleArray: z.ZodBoolean;
5
+ trailingClassName: z.ZodBoolean;
6
+ }, z.core.$strip>;
7
+ export type ArrangeSuggestGroupsRequest = z.infer<typeof ArrangeSuggestGroupsRequestSchema>;
8
+ //# sourceMappingURL=suggest-groups.request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest-groups.request.d.ts","sourceRoot":"","sources":["../../../../../src/lib/arrange/application/requests/suggest-groups.request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iCAAiC;;;;iBAM5C,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { z } from "zod";
2
+ export const ArrangeSuggestGroupsRequestSchema = z.object({
3
+ inlineClasses: z
4
+ .string()
5
+ .min(1, 'Pass a class string. Example: codefast arrange group "flex gap-2 text-sm rounded-md"'),
6
+ emitTvStyleArray: z.boolean(),
7
+ trailingClassName: z.boolean(),
8
+ });
@@ -0,0 +1,17 @@
1
+ import { type AppError } from "#lib/core/domain/errors.domain";
2
+ import { type Result } from "#lib/core/domain/result.model";
3
+ import type { CliFs } from "#lib/core/application/ports/cli-io.port";
4
+ import type { DomainSourceParserPort } from "#lib/arrange/application/ports/domain-source-parser.port";
5
+ import type { ArrangeAnalyzeDirectoryRequest } from "#lib/arrange/application/requests/analyze-directory.request";
6
+ import type { FileWalkerPort } from "#lib/arrange/application/ports/file-walker.port";
7
+ import type { AnalyzeReport } from "#lib/arrange/domain/types.domain";
8
+ export type AnalyzeDirectoryDeps = {
9
+ readonly fs: CliFs;
10
+ readonly fileWalker: FileWalkerPort;
11
+ readonly domainSourceParser: DomainSourceParserPort;
12
+ };
13
+ /**
14
+ * Orchestrates filesystem + parse ports, delegates analysis rules to the domain service.
15
+ */
16
+ export declare function analyzeDirectory(request: ArrangeAnalyzeDirectoryRequest, deps: AnalyzeDirectoryDeps): Result<AnalyzeReport, AppError>;
17
+ //# sourceMappingURL=analyze-directory.use-case.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-directory.use-case.d.ts","sourceRoot":"","sources":["../../../../../src/lib/arrange/application/use-cases/analyze-directory.use-case.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yCAAyC,CAAC;AAErE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0DAA0D,CAAC;AACvG,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,6DAA6D,CAAC;AAClH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AACtF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAMtE,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;CACrD,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,8BAA8B,EACvC,IAAI,EAAE,oBAAoB,GACzB,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAiBjC"}
@@ -0,0 +1,24 @@
1
+ import { appError } from "#lib/core/domain/errors.domain";
2
+ import { err, ok } from "#lib/core/domain/result.model";
3
+ import { messageFromCaughtUnknown } from "#lib/core/application/utils/caught-unknown-message.util";
4
+ import { accumulateAnalyzeReportForSourceFile, createEmptyAnalyzeReport, } from "#lib/arrange/domain/arrange-analyze.service";
5
+ /**
6
+ * Orchestrates filesystem + parse ports, delegates analysis rules to the domain service.
7
+ */
8
+ export function analyzeDirectory(request, deps) {
9
+ const report = createEmptyAnalyzeReport();
10
+ try {
11
+ const files = deps.fs.statSync(request.analyzeRootPath).isDirectory()
12
+ ? deps.fileWalker.walkTypeScriptFiles(request.analyzeRootPath, deps.fs)
13
+ : [request.analyzeRootPath];
14
+ for (const filePath of files) {
15
+ const sourceText = deps.fs.readFileSync(filePath, "utf8");
16
+ const domainSf = deps.domainSourceParser.parseDomainSourceFile(filePath, sourceText);
17
+ accumulateAnalyzeReportForSourceFile(report, domainSf, sourceText, filePath);
18
+ }
19
+ return ok(report);
20
+ }
21
+ catch (caughtError) {
22
+ return err(appError("INFRA_FAILURE", messageFromCaughtUnknown(caughtError), caughtError));
23
+ }
24
+ }
@@ -0,0 +1,17 @@
1
+ import type { CliLogger } from "#lib/core/application/ports/cli-io.port";
2
+ import type { GroupFileUnwrapPlan, GroupFileWorkPlan } from "#lib/arrange/domain/arrange-grouping.service";
3
+ import type { DomainCallExpression, DomainSourceFile } from "#lib/arrange/domain/ast/ast-node.model";
4
+ import type { PlannedGroupEdit } from "#lib/arrange/domain/types.domain";
5
+ export declare function printGroupFilePreview(logger: CliLogger, args: {
6
+ filePath: string;
7
+ reportTotal: number;
8
+ cnInTvNoReplacement: number;
9
+ cnInTvCalls: readonly DomainCallExpression[];
10
+ unwrapReplacementByCall: ReadonlyMap<DomainCallExpression, string>;
11
+ sourceText: string;
12
+ domainSf: DomainSourceFile;
13
+ unwrapEdits: readonly GroupFileUnwrapPlan[];
14
+ plannedGroupEdits: readonly PlannedGroupEdit[];
15
+ }): void;
16
+ export declare function printGroupFilePreviewFromWork(logger: CliLogger, work: GroupFileWorkPlan): void;
17
+ //# sourceMappingURL=group-file-preview.use-case.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-file-preview.use-case.d.ts","sourceRoot":"","sources":["../../../../../src/lib/arrange/application/use-cases/group-file-preview.use-case.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,8CAA8C,CAAC;AAEtD,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE;IACJ,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC7C,uBAAuB,EAAE,WAAW,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,WAAW,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC5C,iBAAiB,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAChD,GACA,IAAI,CA6CN;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAY9F"}
@@ -0,0 +1,46 @@
1
+ import { lineOf } from "#lib/arrange/domain/ast/ast-helpers.helper";
2
+ export function printGroupFilePreview(logger, args) {
3
+ const { out } = logger;
4
+ const { filePath, reportTotal, cnInTvNoReplacement, cnInTvCalls, unwrapReplacementByCall, sourceText, domainSf, unwrapEdits, plannedGroupEdits, } = args;
5
+ let header = `\n── ${filePath} (${reportTotal} site(s)`;
6
+ if (cnInTvNoReplacement > 0) {
7
+ header += `; plus ${cnInTvNoReplacement} cn() inside tv left unchanged (0 args)`;
8
+ }
9
+ header += `) ──`;
10
+ out(header);
11
+ for (const call of cnInTvCalls) {
12
+ const replacement = unwrapReplacementByCall.get(call);
13
+ if (replacement === undefined) {
14
+ out(` Line ${lineOf(domainSf, call)} [tv \u2283 cn]: cn(...) has no arguments — skipped`);
15
+ continue;
16
+ }
17
+ const start = call.pos;
18
+ const end = call.end;
19
+ if (sourceText.slice(start, end) === replacement) {
20
+ continue;
21
+ }
22
+ out(` Line ${lineOf(domainSf, call)} [tv \u2283 cn \u2192 string/array]:`);
23
+ out(` ${replacement.split("\n").join("\n ")}`);
24
+ }
25
+ if (unwrapEdits.length > 0 && plannedGroupEdits.length > 0) {
26
+ out(" ([cn] / [tv] / [JSX className] lines below reflect content after unwrap of cn inside tv.)");
27
+ }
28
+ for (const plan of plannedGroupEdits) {
29
+ out(` Line ${lineOf(plan.lineSf, plan.reportNode)} [${plan.label}]:`);
30
+ out(` ${plan.replacement.split("\n").join("\n ")}`);
31
+ out(` // Buckets: ${JSON.stringify(plan.bucketSummary)}`);
32
+ }
33
+ }
34
+ export function printGroupFilePreviewFromWork(logger, work) {
35
+ printGroupFilePreview(logger, {
36
+ filePath: work.filePath,
37
+ reportTotal: work.reportTotal,
38
+ cnInTvNoReplacement: work.cnInTvNoReplacement,
39
+ cnInTvCalls: work.cnInTvCalls,
40
+ unwrapReplacementByCall: work.unwrapReplacementByCall,
41
+ sourceText: work.sourceText,
42
+ domainSf: work.domainSfForLineNumbers,
43
+ unwrapEdits: work.unwrapEdits,
44
+ plannedGroupEdits: work.plannedGroupEdits,
45
+ });
46
+ }
@@ -0,0 +1,5 @@
1
+ import type { CliFs, CliLogger } from "#lib/core/application/ports/cli-io.port";
2
+ import type { DomainSourceParserPort } from "#lib/arrange/application/ports/domain-source-parser.port";
3
+ import type { ArrangeGroupFileOptions, GroupFileResult } from "#lib/arrange/domain/types.domain";
4
+ export declare function groupFile(filePath: string, options: ArrangeGroupFileOptions, fs: CliFs, logger: CliLogger, domainSourceParser: DomainSourceParserPort): GroupFileResult;
5
+ //# sourceMappingURL=group-file.use-case.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-file.use-case.d.ts","sourceRoot":"","sources":["../../../../../src/lib/arrange/application/use-cases/group-file.use-case.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0DAA0D,CAAC;AAEvG,OAAO,KAAK,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAajG,wBAAgB,SAAS,CACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,uBAAuB,EAChC,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,SAAS,EACjB,kBAAkB,EAAE,sBAAsB,GACzC,eAAe,CAgDjB"}
@@ -0,0 +1,40 @@
1
+ import { printGroupFilePreviewFromWork } from "#lib/arrange/application/use-cases/group-file-preview.use-case";
2
+ import { buildGroupFileUnwrapState, countPersistedGroupFileEdits, groupFileDryRunNoEdits, groupFileEditsTouchJsxCn, groupFilePreviewTotals, groupFileWorkHasNothingToReport, mergeGroupFileBodyText, tryBuildGroupFileWorkPlan, } from "#lib/arrange/domain/arrange-grouping.service";
3
+ import { ensureCnImport } from "#lib/arrange/domain/imports.domain";
4
+ export function groupFile(filePath, options, fs, logger, domainSourceParser) {
5
+ const sourceText = fs.readFileSync(filePath, "utf8");
6
+ const domainSfInitial = domainSourceParser.parseDomainSourceFile(filePath, sourceText);
7
+ const unwrap = buildGroupFileUnwrapState(domainSfInitial, sourceText);
8
+ const domainSfGrouped = domainSourceParser.parseDomainSourceFile(filePath, unwrap.textAfterUnwrap);
9
+ const work = tryBuildGroupFileWorkPlan({
10
+ filePath,
11
+ sourceText,
12
+ domainSfInitial,
13
+ domainSfGrouped,
14
+ withClassName: options.withClassName,
15
+ unwrap,
16
+ });
17
+ if (work === null) {
18
+ return groupFileDryRunNoEdits(filePath);
19
+ }
20
+ if (!options.write) {
21
+ if (groupFileWorkHasNothingToReport(work)) {
22
+ return groupFileDryRunNoEdits(filePath);
23
+ }
24
+ printGroupFilePreviewFromWork(logger, work);
25
+ return groupFilePreviewTotals(work);
26
+ }
27
+ const persistedEditCount = countPersistedGroupFileEdits(work);
28
+ let newText = mergeGroupFileBodyText(work);
29
+ if (persistedEditCount > 0) {
30
+ if (groupFileEditsTouchJsxCn(work)) {
31
+ newText = ensureCnImport(domainSourceParser.parseDomainSourceFile(filePath, newText), options.cnImport);
32
+ }
33
+ fs.writeFileSync(filePath, newText, "utf8");
34
+ }
35
+ return {
36
+ filePath,
37
+ totalFound: persistedEditCount + work.cnInTvNoReplacement,
38
+ changed: persistedEditCount,
39
+ };
40
+ }
@@ -0,0 +1,19 @@
1
+ import { type AppError } from "#lib/core/domain/errors.domain";
2
+ import { type Result } from "#lib/core/domain/result.model";
3
+ import type { CliFs, CliLogger } from "#lib/core/application/ports/cli-io.port";
4
+ import type { DomainSourceParserPort } from "#lib/arrange/application/ports/domain-source-parser.port";
5
+ import type { FileWalkerPort } from "#lib/arrange/application/ports/file-walker.port";
6
+ import type { ArrangeRunTargetRequest, ArrangeSyncRunRequest } from "#lib/arrange/application/requests/arrange-sync.request";
7
+ import type { ArrangeRunResult } from "#lib/arrange/domain/types.domain";
8
+ export type ArrangeSyncDeps = {
9
+ readonly fs: CliFs;
10
+ readonly logger: CliLogger;
11
+ readonly fileWalker: FileWalkerPort;
12
+ readonly domainSourceParser: DomainSourceParserPort;
13
+ };
14
+ export declare function runOnTarget(request: ArrangeRunTargetRequest, deps: ArrangeSyncDeps): Result<ArrangeRunResult, AppError>;
15
+ /**
16
+ * Preview/apply orchestration: resolves target path, runs grouping pipeline, optional hook.
17
+ */
18
+ export declare function runArrangeSync(request: ArrangeSyncRunRequest, deps: ArrangeSyncDeps): Promise<Result<number, AppError>>;
19
+ //# sourceMappingURL=run-arrange-sync.use-case.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-arrange-sync.use-case.d.ts","sourceRoot":"","sources":["../../../../../src/lib/arrange/application/use-cases/run-arrange-sync.use-case.ts"],"names":[],"mappings":"AAKA,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGhF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0DAA0D,CAAC;AACvG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AACtF,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,wDAAwD,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;CACrD,CAAC;AAEF,wBAAgB,WAAW,CACzB,OAAO,EAAE,uBAAuB,EAChC,IAAI,EAAE,eAAe,GACpB,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAsDpC;AAiBD;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,qBAAqB,EAC9B,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CA+BnC"}
@@ -0,0 +1,85 @@
1
+ import path from "node:path";
2
+ import { appError } from "#lib/core/domain/errors.domain";
3
+ import { err, ok } from "#lib/core/domain/result.model";
4
+ import { messageFromCaughtUnknown } from "#lib/core/application/utils/caught-unknown-message.util";
5
+ import { groupFile } from "#lib/arrange/application/use-cases/group-file.use-case";
6
+ export function runOnTarget(request, deps) {
7
+ const { out } = deps.logger;
8
+ const { fs, fileWalker, domainSourceParser } = deps;
9
+ if (!fs.existsSync(request.targetPath)) {
10
+ return err(appError("NOT_FOUND", `Not found: ${request.targetPath}`));
11
+ }
12
+ const filePaths = fs.statSync(request.targetPath).isDirectory()
13
+ ? fileWalker.walkTypeScriptFiles(request.targetPath, fs)
14
+ : [request.targetPath];
15
+ const modifiedFiles = [];
16
+ let totalFound = 0;
17
+ let totalChanged = 0;
18
+ const groupOptions = {
19
+ write: request.write,
20
+ withClassName: !!request.withClassName,
21
+ cnImport: request.cnImport,
22
+ };
23
+ for (const filePath of filePaths) {
24
+ const result = groupFile(filePath, groupOptions, fs, deps.logger, domainSourceParser);
25
+ totalFound += result.totalFound;
26
+ totalChanged += result.changed;
27
+ if (result.changed > 0) {
28
+ modifiedFiles.push(result.filePath);
29
+ }
30
+ }
31
+ out(`\nTotal: ${filePaths.length} file(s), ${totalFound} site(s) (cn/tv/JSX className) to review.`);
32
+ if (request.write) {
33
+ out(`Applied: ${totalChanged} site(s) updated.`);
34
+ }
35
+ else {
36
+ out(`(Run "apply" to write changes, or "pnpm cli:arrange-apply" / "pnpm exec codefast arrange apply")`);
37
+ }
38
+ const showCascadeHint = request.write ? totalChanged > 0 : totalFound > 0;
39
+ if (showCascadeHint) {
40
+ out("Note: class order may change across concern groups — smoke-test the UI if you rely on cascade order.");
41
+ }
42
+ return ok({
43
+ filePaths,
44
+ modifiedFiles,
45
+ totalFound,
46
+ totalChanged,
47
+ });
48
+ }
49
+ async function runArrangeOnAfterWriteHook(logger, hook, modifiedFiles) {
50
+ if (!hook || modifiedFiles.length === 0) {
51
+ return;
52
+ }
53
+ try {
54
+ await hook({ files: modifiedFiles });
55
+ }
56
+ catch (caughtHookError) {
57
+ logger.err(`[arrange] onAfterWrite hook failed: ${messageFromCaughtUnknown(caughtHookError)}`);
58
+ }
59
+ }
60
+ /**
61
+ * Preview/apply orchestration: resolves target path, runs grouping pipeline, optional hook.
62
+ */
63
+ export async function runArrangeSync(request, deps) {
64
+ void request.rootDir;
65
+ const resolvedTarget = path.resolve(request.targetPath);
66
+ const runTargetRequest = {
67
+ targetPath: resolvedTarget,
68
+ write: request.write,
69
+ withClassName: request.withClassName,
70
+ cnImport: request.cnImport,
71
+ };
72
+ const runOutcome = runOnTarget(runTargetRequest, deps);
73
+ if (!runOutcome.ok) {
74
+ if (runOutcome.error.code === "NOT_FOUND") {
75
+ deps.logger.err(runOutcome.error.message);
76
+ }
77
+ return runOutcome;
78
+ }
79
+ const result = runOutcome.value;
80
+ if (request.write && result.modifiedFiles.length > 0) {
81
+ const arrangeConfig = request.config;
82
+ await runArrangeOnAfterWriteHook(deps.logger, arrangeConfig?.onAfterWrite, result.modifiedFiles);
83
+ }
84
+ return ok(0);
85
+ }