@codefast/cli 0.3.13-canary.3 → 0.3.13

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 (465) hide show
  1. package/README.md +29 -3
  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 -108
  154. package/dist/commands/mirror.d.ts +0 -3
  155. package/dist/commands/mirror.d.ts.map +0 -1
  156. package/dist/commands/mirror.js +0 -36
  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 -44
  160. package/dist/lib/arrange/application/ports/domain-source-parser.port.d.ts +0 -5
  161. package/dist/lib/arrange/application/ports/domain-source-parser.port.d.ts.map +0 -1
  162. package/dist/lib/arrange/application/ports/file-walker.port.d.ts +0 -5
  163. package/dist/lib/arrange/application/ports/file-walker.port.d.ts.map +0 -1
  164. package/dist/lib/arrange/application/requests/analyze-directory.request.d.ts +0 -6
  165. package/dist/lib/arrange/application/requests/analyze-directory.request.d.ts.map +0 -1
  166. package/dist/lib/arrange/application/requests/analyze-directory.request.js +0 -4
  167. package/dist/lib/arrange/application/requests/arrange-sync.request.d.ts +0 -18
  168. package/dist/lib/arrange/application/requests/arrange-sync.request.d.ts.map +0 -1
  169. package/dist/lib/arrange/application/requests/arrange-sync.request.js +0 -15
  170. package/dist/lib/arrange/application/requests/suggest-groups.request.d.ts +0 -8
  171. package/dist/lib/arrange/application/requests/suggest-groups.request.d.ts.map +0 -1
  172. package/dist/lib/arrange/application/requests/suggest-groups.request.js +0 -8
  173. package/dist/lib/arrange/application/use-cases/analyze-directory.use-case.d.ts +0 -17
  174. package/dist/lib/arrange/application/use-cases/analyze-directory.use-case.d.ts.map +0 -1
  175. package/dist/lib/arrange/application/use-cases/analyze-directory.use-case.js +0 -24
  176. package/dist/lib/arrange/application/use-cases/group-file-preview.use-case.d.ts +0 -17
  177. package/dist/lib/arrange/application/use-cases/group-file-preview.use-case.d.ts.map +0 -1
  178. package/dist/lib/arrange/application/use-cases/group-file-preview.use-case.js +0 -46
  179. package/dist/lib/arrange/application/use-cases/group-file.use-case.d.ts +0 -5
  180. package/dist/lib/arrange/application/use-cases/group-file.use-case.d.ts.map +0 -1
  181. package/dist/lib/arrange/application/use-cases/group-file.use-case.js +0 -40
  182. package/dist/lib/arrange/application/use-cases/run-arrange-sync.use-case.d.ts +0 -19
  183. package/dist/lib/arrange/application/use-cases/run-arrange-sync.use-case.d.ts.map +0 -1
  184. package/dist/lib/arrange/application/use-cases/run-arrange-sync.use-case.js +0 -85
  185. package/dist/lib/arrange/application/use-cases/suggest-cn-groups.use-case.d.ts +0 -7
  186. package/dist/lib/arrange/application/use-cases/suggest-cn-groups.use-case.d.ts.map +0 -1
  187. package/dist/lib/arrange/application/use-cases/suggest-cn-groups.use-case.js +0 -10
  188. package/dist/lib/arrange/domain/arrange-analyze.service.d.ts +0 -12
  189. package/dist/lib/arrange/domain/arrange-analyze.service.d.ts.map +0 -1
  190. package/dist/lib/arrange/domain/arrange-analyze.service.js +0 -116
  191. package/dist/lib/arrange/domain/arrange-grouping.service.d.ts +0 -53
  192. package/dist/lib/arrange/domain/arrange-grouping.service.d.ts.map +0 -1
  193. package/dist/lib/arrange/domain/arrange-grouping.service.js +0 -106
  194. package/dist/lib/arrange/domain/ast/ast-helpers.helper.d.ts +0 -28
  195. package/dist/lib/arrange/domain/ast/ast-helpers.helper.d.ts.map +0 -1
  196. package/dist/lib/arrange/domain/ast/ast-helpers.helper.js +0 -130
  197. package/dist/lib/arrange/domain/ast/ast-node.model.d.ts +0 -179
  198. package/dist/lib/arrange/domain/ast/ast-node.model.d.ts.map +0 -1
  199. package/dist/lib/arrange/domain/ast/ast-node.model.js +0 -210
  200. package/dist/lib/arrange/domain/ast/collectors-cn.collector.d.ts +0 -7
  201. package/dist/lib/arrange/domain/ast/collectors-cn.collector.d.ts.map +0 -1
  202. package/dist/lib/arrange/domain/ast/collectors-cn.collector.js +0 -70
  203. package/dist/lib/arrange/domain/ast/collectors-jsx.collector.d.ts +0 -4
  204. package/dist/lib/arrange/domain/ast/collectors-jsx.collector.d.ts.map +0 -1
  205. package/dist/lib/arrange/domain/ast/collectors-jsx.collector.js +0 -21
  206. package/dist/lib/arrange/domain/ast/collectors-tv.collector.d.ts +0 -13
  207. package/dist/lib/arrange/domain/ast/collectors-tv.collector.d.ts.map +0 -1
  208. package/dist/lib/arrange/domain/ast/collectors-tv.collector.js +0 -302
  209. package/dist/lib/arrange/domain/ast/targets.model.d.ts +0 -8
  210. package/dist/lib/arrange/domain/ast/targets.model.d.ts.map +0 -1
  211. package/dist/lib/arrange/domain/ast/targets.model.js +0 -147
  212. package/dist/lib/arrange/domain/constants.domain.d.ts +0 -70
  213. package/dist/lib/arrange/domain/constants.domain.d.ts.map +0 -1
  214. package/dist/lib/arrange/domain/constants.domain.js +0 -182
  215. package/dist/lib/arrange/domain/errors.domain.d.ts +0 -14
  216. package/dist/lib/arrange/domain/errors.domain.d.ts.map +0 -1
  217. package/dist/lib/arrange/domain/errors.domain.js +0 -16
  218. package/dist/lib/arrange/domain/grouping.domain.d.ts +0 -41
  219. package/dist/lib/arrange/domain/grouping.domain.d.ts.map +0 -1
  220. package/dist/lib/arrange/domain/grouping.domain.js +0 -371
  221. package/dist/lib/arrange/domain/imports.domain.d.ts +0 -7
  222. package/dist/lib/arrange/domain/imports.domain.d.ts.map +0 -1
  223. package/dist/lib/arrange/domain/imports.domain.js +0 -80
  224. package/dist/lib/arrange/domain/source-text-formatters.formatter.d.ts +0 -16
  225. package/dist/lib/arrange/domain/source-text-formatters.formatter.d.ts.map +0 -1
  226. package/dist/lib/arrange/domain/source-text-formatters.formatter.js +0 -55
  227. package/dist/lib/arrange/domain/tokenizer.util.d.ts +0 -45
  228. package/dist/lib/arrange/domain/tokenizer.util.d.ts.map +0 -1
  229. package/dist/lib/arrange/domain/tokenizer.util.js +0 -469
  230. package/dist/lib/arrange/domain/types.domain.d.ts +0 -115
  231. package/dist/lib/arrange/domain/types.domain.d.ts.map +0 -1
  232. package/dist/lib/arrange/domain/types.domain.js +0 -10
  233. package/dist/lib/arrange/index.d.ts +0 -45
  234. package/dist/lib/arrange/index.d.ts.map +0 -1
  235. package/dist/lib/arrange/index.js +0 -41
  236. package/dist/lib/arrange/infra/arrange-sync-cli-options.adapter.d.ts +0 -14
  237. package/dist/lib/arrange/infra/arrange-sync-cli-options.adapter.d.ts.map +0 -1
  238. package/dist/lib/arrange/infra/domain-source-parser.adapter.d.ts +0 -11
  239. package/dist/lib/arrange/infra/domain-source-parser.adapter.d.ts.map +0 -1
  240. package/dist/lib/arrange/infra/domain-source-parser.adapter.js +0 -19
  241. package/dist/lib/arrange/infra/ensure-cn-import.adapter.d.ts +0 -3
  242. package/dist/lib/arrange/infra/ensure-cn-import.adapter.d.ts.map +0 -1
  243. package/dist/lib/arrange/infra/ensure-cn-import.adapter.js +0 -6
  244. package/dist/lib/arrange/infra/file-walker.adapter.d.ts +0 -8
  245. package/dist/lib/arrange/infra/file-walker.adapter.d.ts.map +0 -1
  246. package/dist/lib/arrange/infra/file-walker.adapter.js +0 -17
  247. package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.test-helper.d.ts +0 -8
  248. package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.test-helper.d.ts.map +0 -1
  249. package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.test-helper.js +0 -25
  250. package/dist/lib/arrange/infra/ts-ast-translator.adapter.d.ts +0 -10
  251. package/dist/lib/arrange/infra/ts-ast-translator.adapter.d.ts.map +0 -1
  252. package/dist/lib/arrange/infra/ts-ast-translator.adapter.js +0 -363
  253. package/dist/lib/arrange/presentation/arrange-prelude.presenter.d.ts +0 -14
  254. package/dist/lib/arrange/presentation/arrange-prelude.presenter.d.ts.map +0 -1
  255. package/dist/lib/arrange/presentation/arrange-prelude.presenter.js +0 -24
  256. package/dist/lib/arrange/presentation/formatters.presenter.d.ts +0 -3
  257. package/dist/lib/arrange/presentation/formatters.presenter.d.ts.map +0 -1
  258. package/dist/lib/arrange/presentation/formatters.presenter.js +0 -2
  259. package/dist/lib/arrange/presentation/present-analyze-cli.presenter.d.ts +0 -4
  260. package/dist/lib/arrange/presentation/present-analyze-cli.presenter.d.ts.map +0 -1
  261. package/dist/lib/arrange/presentation/present-analyze-cli.presenter.js +0 -4
  262. package/dist/lib/arrange/presentation/report.presenter.d.ts +0 -4
  263. package/dist/lib/arrange/presentation/report.presenter.d.ts.map +0 -1
  264. package/dist/lib/arrange/presentation/report.presenter.js +0 -37
  265. package/dist/lib/arrange/presentation/resolve-arrange-cli-target.presenter.d.ts +0 -2
  266. package/dist/lib/arrange/presentation/resolve-arrange-cli-target.presenter.d.ts.map +0 -1
  267. package/dist/lib/arrange/presentation/resolve-arrange-cli-target.presenter.js +0 -7
  268. package/dist/lib/config/domain/schema.domain.d.ts +0 -50
  269. package/dist/lib/config/domain/schema.domain.d.ts.map +0 -1
  270. package/dist/lib/config/domain/schema.domain.js +0 -43
  271. package/dist/lib/config/index.d.ts +0 -4
  272. package/dist/lib/config/index.d.ts.map +0 -1
  273. package/dist/lib/config/index.js +0 -2
  274. package/dist/lib/config/infra/loader.adapter.d.ts +0 -11
  275. package/dist/lib/config/infra/loader.adapter.d.ts.map +0 -1
  276. package/dist/lib/config/infra/loader.adapter.js +0 -90
  277. package/dist/lib/core/application/architecture-boundaries.policy.d.ts +0 -19
  278. package/dist/lib/core/application/architecture-boundaries.policy.d.ts.map +0 -1
  279. package/dist/lib/core/application/architecture-boundaries.policy.js +0 -370
  280. package/dist/lib/core/application/ports/cli-io.port.d.ts +0 -31
  281. package/dist/lib/core/application/ports/cli-io.port.d.ts.map +0 -1
  282. package/dist/lib/core/application/schema-parse.util.d.ts +0 -8
  283. package/dist/lib/core/application/schema-parse.util.d.ts.map +0 -1
  284. package/dist/lib/core/application/schema-parse.util.js +0 -20
  285. package/dist/lib/core/application/utils/caught-unknown-message.util.d.ts +0 -6
  286. package/dist/lib/core/application/utils/caught-unknown-message.util.d.ts.map +0 -1
  287. package/dist/lib/core/application/utils/caught-unknown-message.util.js +0 -34
  288. package/dist/lib/core/application/utils/verbose-diagnostics.util.d.ts +0 -5
  289. package/dist/lib/core/application/utils/verbose-diagnostics.util.d.ts.map +0 -1
  290. package/dist/lib/core/application/utils/verbose-diagnostics.util.js +0 -7
  291. package/dist/lib/core/domain/errors.domain.d.ts +0 -11
  292. package/dist/lib/core/domain/errors.domain.d.ts.map +0 -1
  293. package/dist/lib/core/domain/errors.domain.js +0 -9
  294. package/dist/lib/core/domain/result.model.d.ts +0 -17
  295. package/dist/lib/core/domain/result.model.d.ts.map +0 -1
  296. package/dist/lib/core/domain/result.model.js +0 -15
  297. package/dist/lib/core/infra/container.adapter.d.ts +0 -58
  298. package/dist/lib/core/infra/container.adapter.d.ts.map +0 -1
  299. package/dist/lib/core/infra/container.adapter.js +0 -80
  300. package/dist/lib/core/infra/logging-decorator.adapter.d.ts +0 -12
  301. package/dist/lib/core/infra/logging-decorator.adapter.d.ts.map +0 -1
  302. package/dist/lib/core/infra/logging-decorator.adapter.js +0 -75
  303. package/dist/lib/core/presentation/cli-executor.presenter.d.ts +0 -33
  304. package/dist/lib/core/presentation/cli-executor.presenter.d.ts.map +0 -1
  305. package/dist/lib/core/presentation/cli-executor.presenter.js +0 -73
  306. package/dist/lib/core/presentation/format-app-error.presenter.d.ts +0 -6
  307. package/dist/lib/core/presentation/format-app-error.presenter.d.ts.map +0 -1
  308. package/dist/lib/core/presentation/format-app-error.presenter.js +0 -19
  309. package/dist/lib/core/presentation/global-cli-options.presenter.d.ts +0 -9
  310. package/dist/lib/core/presentation/global-cli-options.presenter.d.ts.map +0 -1
  311. package/dist/lib/core/presentation/global-cli-options.presenter.js +0 -8
  312. package/dist/lib/core/presentation/load-codefast-config.presenter.d.ts +0 -8
  313. package/dist/lib/core/presentation/load-codefast-config.presenter.d.ts.map +0 -1
  314. package/dist/lib/core/presentation/load-codefast-config.presenter.js +0 -15
  315. package/dist/lib/core/presentation/parse-cli-schema.presenter.d.ts +0 -5
  316. package/dist/lib/core/presentation/parse-cli-schema.presenter.d.ts.map +0 -1
  317. package/dist/lib/core/presentation/parse-cli-schema.presenter.js +0 -4
  318. package/dist/lib/core/presentation/run-cli-use-case-after-parse.presenter.d.ts +0 -6
  319. package/dist/lib/core/presentation/run-cli-use-case-after-parse.presenter.d.ts.map +0 -1
  320. package/dist/lib/core/presentation/run-cli-use-case-after-parse.presenter.js +0 -17
  321. package/dist/lib/core/presentation/workspace-root-strict.presenter.d.ts +0 -5
  322. package/dist/lib/core/presentation/workspace-root-strict.presenter.d.ts.map +0 -1
  323. package/dist/lib/core/presentation/workspace-root-strict.presenter.js +0 -12
  324. package/dist/lib/infra/config-reporter.adapter.d.ts +0 -4
  325. package/dist/lib/infra/config-reporter.adapter.d.ts.map +0 -1
  326. package/dist/lib/infra/config-reporter.adapter.js +0 -9
  327. package/dist/lib/infra/fs-contract.port.d.ts +0 -2
  328. package/dist/lib/infra/fs-contract.port.d.ts.map +0 -1
  329. package/dist/lib/infra/node-io.adapter.d.ts +0 -4
  330. package/dist/lib/infra/node-io.adapter.d.ts.map +0 -1
  331. package/dist/lib/infra/node-io.adapter.js +0 -37
  332. package/dist/lib/infra/workspace/repo-root.adapter.d.ts +0 -7
  333. package/dist/lib/infra/workspace/repo-root.adapter.d.ts.map +0 -1
  334. package/dist/lib/infra/workspace/repo-root.adapter.js +0 -23
  335. package/dist/lib/mirror/application/ports/file-system-service.port.d.ts +0 -6
  336. package/dist/lib/mirror/application/ports/file-system-service.port.d.ts.map +0 -1
  337. package/dist/lib/mirror/application/ports/mirror-sync-reporter.port.d.ts +0 -27
  338. package/dist/lib/mirror/application/ports/mirror-sync-reporter.port.d.ts.map +0 -1
  339. package/dist/lib/mirror/application/ports/package-repository.port.d.ts +0 -16
  340. package/dist/lib/mirror/application/ports/package-repository.port.d.ts.map +0 -1
  341. package/dist/lib/mirror/application/ports/workspace-service.port.d.ts +0 -7
  342. package/dist/lib/mirror/application/ports/workspace-service.port.d.ts.map +0 -1
  343. package/dist/lib/mirror/application/requests/mirror-sync.request.d.ts +0 -10
  344. package/dist/lib/mirror/application/requests/mirror-sync.request.d.ts.map +0 -1
  345. package/dist/lib/mirror/application/requests/mirror-sync.request.js +0 -8
  346. package/dist/lib/mirror/application/use-cases/generate-mirror-exports.use-case.d.ts +0 -10
  347. package/dist/lib/mirror/application/use-cases/generate-mirror-exports.use-case.d.ts.map +0 -1
  348. package/dist/lib/mirror/application/use-cases/generate-mirror-exports.use-case.js +0 -271
  349. package/dist/lib/mirror/application/use-cases/run-mirror-sync.use-case.d.ts +0 -19
  350. package/dist/lib/mirror/application/use-cases/run-mirror-sync.use-case.d.ts.map +0 -1
  351. package/dist/lib/mirror/application/use-cases/run-mirror-sync.use-case.js +0 -168
  352. package/dist/lib/mirror/domain/constants.domain.d.ts +0 -6
  353. package/dist/lib/mirror/domain/constants.domain.d.ts.map +0 -1
  354. package/dist/lib/mirror/domain/constants.domain.js +0 -5
  355. package/dist/lib/mirror/domain/errors.domain.d.ts +0 -10
  356. package/dist/lib/mirror/domain/errors.domain.d.ts.map +0 -1
  357. package/dist/lib/mirror/domain/errors.domain.js +0 -12
  358. package/dist/lib/mirror/domain/types.domain.d.ts +0 -65
  359. package/dist/lib/mirror/domain/types.domain.d.ts.map +0 -1
  360. package/dist/lib/mirror/index.d.ts +0 -6
  361. package/dist/lib/mirror/index.d.ts.map +0 -1
  362. package/dist/lib/mirror/index.js +0 -1
  363. package/dist/lib/mirror/infra/dirent-list.adapter.d.ts +0 -9
  364. package/dist/lib/mirror/infra/dirent-list.adapter.d.ts.map +0 -1
  365. package/dist/lib/mirror/infra/dirent-list.adapter.js +0 -13
  366. package/dist/lib/mirror/infra/file-system-service.adapter.d.ts +0 -7
  367. package/dist/lib/mirror/infra/file-system-service.adapter.d.ts.map +0 -1
  368. package/dist/lib/mirror/infra/file-system-service.adapter.js +0 -47
  369. package/dist/lib/mirror/infra/mirror-sync-cli-options.adapter.d.ts +0 -14
  370. package/dist/lib/mirror/infra/mirror-sync-cli-options.adapter.d.ts.map +0 -1
  371. package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.d.ts +0 -3
  372. package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.d.ts.map +0 -1
  373. package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.js +0 -13
  374. package/dist/lib/mirror/infra/package-filter.adapter.d.ts +0 -8
  375. package/dist/lib/mirror/infra/package-filter.adapter.d.ts.map +0 -1
  376. package/dist/lib/mirror/infra/package-filter.adapter.js +0 -33
  377. package/dist/lib/mirror/infra/package-repository.adapter.d.ts +0 -17
  378. package/dist/lib/mirror/infra/package-repository.adapter.d.ts.map +0 -1
  379. package/dist/lib/mirror/infra/package-repository.adapter.js +0 -17
  380. package/dist/lib/mirror/infra/path-normalizer.adapter.d.ts +0 -2
  381. package/dist/lib/mirror/infra/path-normalizer.adapter.d.ts.map +0 -1
  382. package/dist/lib/mirror/infra/path-normalizer.adapter.js +0 -4
  383. package/dist/lib/mirror/infra/update-pkg.adapter.d.ts +0 -19
  384. package/dist/lib/mirror/infra/update-pkg.adapter.d.ts.map +0 -1
  385. package/dist/lib/mirror/infra/update-pkg.adapter.js +0 -156
  386. package/dist/lib/mirror/infra/workspace-packages.adapter.d.ts +0 -26
  387. package/dist/lib/mirror/infra/workspace-packages.adapter.d.ts.map +0 -1
  388. package/dist/lib/mirror/infra/workspace-packages.adapter.js +0 -170
  389. package/dist/lib/mirror/infra/workspace-service.adapter.d.ts +0 -8
  390. package/dist/lib/mirror/infra/workspace-service.adapter.d.ts.map +0 -1
  391. package/dist/lib/mirror/infra/workspace-service.adapter.js +0 -10
  392. package/dist/lib/mirror/presentation/mirror-prelude.presenter.d.ts +0 -17
  393. package/dist/lib/mirror/presentation/mirror-prelude.presenter.d.ts.map +0 -1
  394. package/dist/lib/mirror/presentation/mirror-prelude.presenter.js +0 -35
  395. package/dist/lib/mirror/presentation/reporter.presenter.d.ts +0 -25
  396. package/dist/lib/mirror/presentation/reporter.presenter.d.ts.map +0 -1
  397. package/dist/lib/mirror/presentation/reporter.presenter.js +0 -140
  398. package/dist/lib/mirror/presentation/resolve-mirror-package-arg.presenter.d.ts +0 -11
  399. package/dist/lib/mirror/presentation/resolve-mirror-package-arg.presenter.d.ts.map +0 -1
  400. package/dist/lib/mirror/presentation/resolve-mirror-package-arg.presenter.js +0 -27
  401. package/dist/lib/shared/source-code/domain/text-edit.model.d.ts +0 -14
  402. package/dist/lib/shared/source-code/domain/text-edit.model.d.ts.map +0 -1
  403. package/dist/lib/shared/source-code/domain/text-edit.model.js +0 -30
  404. package/dist/lib/shared/source-code/infra/tsx-file-walk.adapter.d.ts +0 -4
  405. package/dist/lib/shared/source-code/infra/tsx-file-walk.adapter.d.ts.map +0 -1
  406. package/dist/lib/shared/source-code/infra/tsx-file-walk.adapter.js +0 -37
  407. package/dist/lib/tag/application/ports/target-resolver.port.d.ts +0 -6
  408. package/dist/lib/tag/application/ports/target-resolver.port.d.ts.map +0 -1
  409. package/dist/lib/tag/application/ports/typescript-tree-walk.port.d.ts +0 -6
  410. package/dist/lib/tag/application/ports/typescript-tree-walk.port.d.ts.map +0 -1
  411. package/dist/lib/tag/application/requests/tag-sync.request.d.ts +0 -10
  412. package/dist/lib/tag/application/requests/tag-sync.request.d.ts.map +0 -1
  413. package/dist/lib/tag/application/requests/tag-sync.request.js +0 -8
  414. package/dist/lib/tag/application/use-cases/run-tag-sync.use-case.d.ts +0 -23
  415. package/dist/lib/tag/application/use-cases/run-tag-sync.use-case.d.ts.map +0 -1
  416. package/dist/lib/tag/application/use-cases/run-tag-sync.use-case.js +0 -357
  417. package/dist/lib/tag/domain/types.domain.d.ts +0 -56
  418. package/dist/lib/tag/domain/types.domain.d.ts.map +0 -1
  419. package/dist/lib/tag/index.d.ts +0 -14
  420. package/dist/lib/tag/index.d.ts.map +0 -1
  421. package/dist/lib/tag/index.js +0 -10
  422. package/dist/lib/tag/infra/tag-sync-cli-options.adapter.d.ts +0 -14
  423. package/dist/lib/tag/infra/tag-sync-cli-options.adapter.d.ts.map +0 -1
  424. package/dist/lib/tag/infra/tag-target-candidates.adapter.d.ts +0 -4
  425. package/dist/lib/tag/infra/tag-target-candidates.adapter.d.ts.map +0 -1
  426. package/dist/lib/tag/infra/tag-target-candidates.adapter.js +0 -200
  427. package/dist/lib/tag/infra/tag-target-resolver.adapter.d.ts +0 -3
  428. package/dist/lib/tag/infra/tag-target-resolver.adapter.d.ts.map +0 -1
  429. package/dist/lib/tag/infra/tag-target-resolver.adapter.js +0 -4
  430. package/dist/lib/tag/infra/typescript-tree-walk.adapter.d.ts +0 -3
  431. package/dist/lib/tag/infra/typescript-tree-walk.adapter.d.ts.map +0 -1
  432. package/dist/lib/tag/infra/typescript-tree-walk.adapter.js +0 -4
  433. package/dist/lib/tag/presentation/colors.presenter.d.ts +0 -8
  434. package/dist/lib/tag/presentation/colors.presenter.d.ts.map +0 -1
  435. package/dist/lib/tag/presentation/colors.presenter.js +0 -9
  436. package/dist/lib/tag/presentation/resolve-tag-cli-target.presenter.d.ts +0 -8
  437. package/dist/lib/tag/presentation/resolve-tag-cli-target.presenter.d.ts.map +0 -1
  438. package/dist/lib/tag/presentation/resolve-tag-cli-target.presenter.js +0 -10
  439. package/dist/lib/tag/presentation/resolve-tag-workspace-root.presenter.d.ts +0 -8
  440. package/dist/lib/tag/presentation/resolve-tag-workspace-root.presenter.d.ts.map +0 -1
  441. package/dist/lib/tag/presentation/resolve-tag-workspace-root.presenter.js +0 -10
  442. package/dist/lib/tag/presentation/tag-prelude.presenter.d.ts +0 -15
  443. package/dist/lib/tag/presentation/tag-prelude.presenter.d.ts.map +0 -1
  444. package/dist/lib/tag/presentation/tag-prelude.presenter.js +0 -31
  445. package/dist/lib/tag/presentation/tag-sync.presenter.d.ts +0 -20
  446. package/dist/lib/tag/presentation/tag-sync.presenter.d.ts.map +0 -1
  447. package/dist/lib/tag/presentation/tag-sync.presenter.js +0 -92
  448. package/dist/program.d.ts +0 -4
  449. package/dist/program.d.ts.map +0 -1
  450. package/dist/program.js +0 -40
  451. /package/dist/lib/arrange/application/ports/{domain-source-parser.port.js → domain-source-parser.port.mjs} +0 -0
  452. /package/dist/lib/arrange/application/ports/{file-walker.port.js → file-walker.port.mjs} +0 -0
  453. /package/dist/lib/arrange/{infra/arrange-sync-cli-options.adapter.js → application/ports/group-file-preview.port.mjs} +0 -0
  454. /package/dist/lib/{core/application/ports/cli-io.port.js → arrange/application/requests/analyze-directory.request.mjs} +0 -0
  455. /package/dist/lib/{infra/fs-contract.port.js → arrange/application/requests/arrange-sync.request.mjs} +0 -0
  456. /package/dist/lib/{mirror/application/ports/file-system-service.port.js → arrange/application/requests/suggest-groups.request.mjs} +0 -0
  457. /package/dist/lib/{mirror/application/ports/mirror-sync-reporter.port.js → arrange/contracts/models.mjs} +0 -0
  458. /package/dist/lib/{mirror/application/ports/package-repository.port.js → arrange/contracts/presentation.contract.mjs} +0 -0
  459. /package/dist/lib/{mirror/application/ports/workspace-service.port.js → arrange/contracts/services.contract.mjs} +0 -0
  460. /package/dist/lib/{mirror/domain/types.domain.js → arrange/contracts/use-cases.contract.mjs} +0 -0
  461. /package/dist/lib/{mirror/infra/mirror-sync-cli-options.adapter.js → arrange/domain/types.domain.mjs} +0 -0
  462. /package/dist/lib/{tag/application/ports/target-resolver.port.js → arrange/infra/arrange-sync-cli-options.adapter.mjs} +0 -0
  463. /package/dist/lib/{tag/application/ports/typescript-tree-walk.port.js → config/application/ports/config-loader.port.mjs} +0 -0
  464. /package/dist/lib/{tag/domain/types.domain.js → config/domain/schema.domain.mjs} +0 -0
  465. /package/dist/lib/{tag/infra/tag-sync-cli-options.adapter.js → core/application/ports/cli-io.port.mjs} +0 -0
@@ -1,37 +0,0 @@
1
- import path from "node:path";
2
- import { LONG_STRING_TOKEN_THRESHOLD, MAX_REPORT_LINES, } from "#lib/arrange/domain/constants.domain";
3
- export function printAnalyzeReport(analyzeRootDirectoryPath, analyzeReport, logger) {
4
- const { out } = logger;
5
- out(`Path: ${path.resolve(analyzeRootDirectoryPath)}`);
6
- out(`.ts/.tsx files: ${analyzeReport.files}`);
7
- out(`cn(...) call sites: ${analyzeReport.cnCallExpressions}`);
8
- out(`tv(...) call sites: ${analyzeReport.tvCallExpressions}`);
9
- out(`\nLong cn(...) string literals (≥${LONG_STRING_TOKEN_THRESHOLD} tokens — consider splitting arguments): ${analyzeReport.longCnStringLiterals.length}`);
10
- for (const findingEntry of analyzeReport.longCnStringLiterals.slice(0, MAX_REPORT_LINES)) {
11
- out(` ${findingEntry.file}:${findingEntry.line} (${findingEntry.tokenCount} tokens) ${findingEntry.preview}`);
12
- }
13
- if (analyzeReport.longCnStringLiterals.length > MAX_REPORT_LINES) {
14
- out(` … and ${analyzeReport.longCnStringLiterals.length - MAX_REPORT_LINES} more`);
15
- }
16
- out(`\nLong tv({...}) string literals in base/variants/… (≥${LONG_STRING_TOKEN_THRESHOLD} tokens): ${analyzeReport.longTvStringLiterals.length}`);
17
- for (const findingEntry of analyzeReport.longTvStringLiterals.slice(0, MAX_REPORT_LINES)) {
18
- out(` ${findingEntry.file}:${findingEntry.line} (${findingEntry.tokenCount} tokens) ${findingEntry.preview}`);
19
- }
20
- if (analyzeReport.longTvStringLiterals.length > MAX_REPORT_LINES) {
21
- out(` … and ${analyzeReport.longTvStringLiterals.length - MAX_REPORT_LINES} more`);
22
- }
23
- out(`\nJSX className="..." or className={'...'} (static strings, ≥${LONG_STRING_TOKEN_THRESHOLD} tokens): ${analyzeReport.longJsxClassNameLiterals.length}`);
24
- for (const findingEntry of analyzeReport.longJsxClassNameLiterals.slice(0, MAX_REPORT_LINES)) {
25
- out(` ${findingEntry.file}:${findingEntry.line} (${findingEntry.tokenCount} tokens) ${findingEntry.preview}`);
26
- }
27
- if (analyzeReport.longJsxClassNameLiterals.length > MAX_REPORT_LINES) {
28
- out(` … and ${analyzeReport.longJsxClassNameLiterals.length - MAX_REPORT_LINES} more`);
29
- }
30
- out(`\ncn(...) nested inside tv({...}) (prefer a string or array — preview/apply can rewrite): ${analyzeReport.cnInsideTvCalls.length}`);
31
- for (const findingEntry of analyzeReport.cnInsideTvCalls.slice(0, MAX_REPORT_LINES)) {
32
- out(` ${findingEntry.file}:${findingEntry.line} (${findingEntry.argCount} args) ${findingEntry.preview}`);
33
- }
34
- if (analyzeReport.cnInsideTvCalls.length > MAX_REPORT_LINES) {
35
- out(` … and ${analyzeReport.cnInsideTvCalls.length - MAX_REPORT_LINES} more`);
36
- }
37
- }
@@ -1,2 +0,0 @@
1
- export declare function resolveArrangeCliTargetPath(currentWorkingDirectory: string, target: string | undefined): string;
2
- //# sourceMappingURL=resolve-arrange-cli-target.presenter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve-arrange-cli-target.presenter.d.ts","sourceRoot":"","sources":["../../../../src/lib/arrange/presentation/resolve-arrange-cli-target.presenter.ts"],"names":[],"mappings":"AAGA,wBAAgB,2BAA2B,CACzC,uBAAuB,EAAE,MAAM,EAC/B,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,MAAM,CAIR"}
@@ -1,7 +0,0 @@
1
- import path from "node:path";
2
- import { DEFAULT_ARRANGE_TARGET } from "#lib/arrange/domain/constants.domain";
3
- export function resolveArrangeCliTargetPath(currentWorkingDirectory, target) {
4
- return target
5
- ? path.resolve(target)
6
- : path.resolve(currentWorkingDirectory, DEFAULT_ARRANGE_TARGET);
7
- }
@@ -1,50 +0,0 @@
1
- import { z } from "zod";
2
- export type CodefastAfterWriteHook = (ctx: {
3
- files: string[];
4
- }) => void | Promise<void>;
5
- export declare const hookSchema: z.ZodCustom<CodefastAfterWriteHook, CodefastAfterWriteHook>;
6
- export declare const mirrorConfigSchema: z.ZodObject<{
7
- skipPackages: z.ZodOptional<z.ZodArray<z.ZodString>>;
8
- pathTransformations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
9
- removePrefix: z.ZodOptional<z.ZodString>;
10
- }, z.core.$strict>>>;
11
- customExports: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>>>;
12
- cssExports: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
13
- enabled: z.ZodOptional<z.ZodBoolean>;
14
- customExports: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
15
- forceExportFiles: z.ZodOptional<z.ZodBoolean>;
16
- }, z.core.$strict>]>>>;
17
- }, z.core.$strict>;
18
- export declare const codefastTagConfigSchema: z.ZodObject<{
19
- skipPackages: z.ZodOptional<z.ZodArray<z.ZodString>>;
20
- onAfterWrite: z.ZodOptional<z.ZodCustom<CodefastAfterWriteHook, CodefastAfterWriteHook>>;
21
- }, z.core.$strict>;
22
- export declare const codefastArrangeConfigSchema: z.ZodObject<{
23
- onAfterWrite: z.ZodOptional<z.ZodCustom<CodefastAfterWriteHook, CodefastAfterWriteHook>>;
24
- }, z.core.$strict>;
25
- export declare const codefastConfigSchema: z.ZodObject<{
26
- mirror: z.ZodOptional<z.ZodObject<{
27
- skipPackages: z.ZodOptional<z.ZodArray<z.ZodString>>;
28
- pathTransformations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
29
- removePrefix: z.ZodOptional<z.ZodString>;
30
- }, z.core.$strict>>>;
31
- customExports: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>>>;
32
- cssExports: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
33
- enabled: z.ZodOptional<z.ZodBoolean>;
34
- customExports: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
35
- forceExportFiles: z.ZodOptional<z.ZodBoolean>;
36
- }, z.core.$strict>]>>>;
37
- }, z.core.$strict>>;
38
- tag: z.ZodOptional<z.ZodObject<{
39
- skipPackages: z.ZodOptional<z.ZodArray<z.ZodString>>;
40
- onAfterWrite: z.ZodOptional<z.ZodCustom<CodefastAfterWriteHook, CodefastAfterWriteHook>>;
41
- }, z.core.$strict>>;
42
- arrange: z.ZodOptional<z.ZodObject<{
43
- onAfterWrite: z.ZodOptional<z.ZodCustom<CodefastAfterWriteHook, CodefastAfterWriteHook>>;
44
- }, z.core.$strict>>;
45
- }, z.core.$strict>;
46
- export type MirrorConfig = z.infer<typeof mirrorConfigSchema>;
47
- export type CodefastTagConfig = z.infer<typeof codefastTagConfigSchema>;
48
- export type CodefastArrangeConfig = z.infer<typeof codefastArrangeConfigSchema>;
49
- export type CodefastConfig = z.infer<typeof codefastConfigSchema>;
50
- //# sourceMappingURL=schema.domain.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.domain.d.ts","sourceRoot":"","sources":["../../../../src/lib/config/domain/schema.domain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAExF,eAAO,MAAM,UAAU,6DAErB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;kBAuBpB,CAAC;AAEZ,eAAO,MAAM,uBAAuB;;;kBAKzB,CAAC;AAEZ,eAAO,MAAM,2BAA2B;;kBAI7B,CAAC;AAEZ,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;kBAMtB,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
@@ -1,43 +0,0 @@
1
- import { z } from "zod";
2
- export const hookSchema = z.custom((value) => typeof value === "function", {
3
- message: "Expected a function",
4
- });
5
- export const mirrorConfigSchema = z
6
- .object({
7
- skipPackages: z.array(z.string()).optional(),
8
- pathTransformations: z
9
- .record(z.string(), z.object({ removePrefix: z.string().optional() }).strict())
10
- .optional(),
11
- customExports: z.record(z.string(), z.record(z.string(), z.string())).optional(),
12
- cssExports: z
13
- .record(z.string(), z.union([
14
- z.boolean(),
15
- z
16
- .object({
17
- enabled: z.boolean().optional(),
18
- customExports: z.record(z.string(), z.string()).optional(),
19
- forceExportFiles: z.boolean().optional(),
20
- })
21
- .strict(),
22
- ]))
23
- .optional(),
24
- })
25
- .strict();
26
- export const codefastTagConfigSchema = z
27
- .object({
28
- skipPackages: z.array(z.string()).optional(),
29
- onAfterWrite: hookSchema.optional(),
30
- })
31
- .strict();
32
- export const codefastArrangeConfigSchema = z
33
- .object({
34
- onAfterWrite: hookSchema.optional(),
35
- })
36
- .strict();
37
- export const codefastConfigSchema = z
38
- .object({
39
- mirror: mirrorConfigSchema.optional(),
40
- tag: codefastTagConfigSchema.optional(),
41
- arrange: codefastArrangeConfigSchema.optional(),
42
- })
43
- .strict();
@@ -1,4 +0,0 @@
1
- export { loadConfig, resetConfigLoaderCacheForTests } from "#lib/config/infra/loader.adapter";
2
- export { codefastArrangeConfigSchema, codefastConfigSchema, codefastTagConfigSchema, hookSchema, mirrorConfigSchema, } from "#lib/config/domain/schema.domain";
3
- export type { CodefastAfterWriteHook, CodefastArrangeConfig, CodefastConfig, CodefastTagConfig, MirrorConfig, } from "#lib/config/domain/schema.domain";
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAC9F,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,EACpB,uBAAuB,EACvB,UAAU,EACV,kBAAkB,GACnB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EACjB,YAAY,GACb,MAAM,kCAAkC,CAAC"}
@@ -1,2 +0,0 @@
1
- export { loadConfig, resetConfigLoaderCacheForTests } from "#lib/config/infra/loader.adapter";
2
- export { codefastArrangeConfigSchema, codefastConfigSchema, codefastTagConfigSchema, hookSchema, mirrorConfigSchema, } from "#lib/config/domain/schema.domain";
@@ -1,11 +0,0 @@
1
- import type { CliFs } from "#lib/infra/fs-contract.port";
2
- import type { CodefastConfig } from "#lib/config/domain/schema.domain";
3
- type LoadConfigResult = {
4
- config: CodefastConfig;
5
- warnings: string[];
6
- configPath?: string;
7
- };
8
- export declare function loadConfig(fs: CliFs, startDir?: string): Promise<LoadConfigResult>;
9
- export declare function resetConfigLoaderCacheForTests(): void;
10
- export {};
11
- //# sourceMappingURL=loader.adapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.adapter.d.ts","sourceRoot":"","sources":["../../../../src/lib/config/infra/loader.adapter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AASvE,KAAK,gBAAgB,GAAG;IACtB,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAkFF,wBAAsB,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,SAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAM/F;AAED,wBAAgB,8BAA8B,IAAI,IAAI,CAErD"}
@@ -1,90 +0,0 @@
1
- import path from "node:path";
2
- import process from "node:process";
3
- import jiti from "jiti";
4
- import { ZodError } from "zod";
5
- import { codefastConfigSchema } from "#lib/config/domain/schema.domain";
6
- const CONFIG_JS_PRIORITY = [
7
- "codefast.config.mjs",
8
- "codefast.config.js",
9
- "codefast.config.cjs",
10
- ];
11
- const CONFIG_JSON = "codefast.config.json";
12
- const cachedLoads = new Map();
13
- function formatZodError(error, filePath) {
14
- const formatted = error.issues
15
- .map((issue) => {
16
- const pathLabel = issue.path.length > 0 ? issue.path.join(".") : "<root>";
17
- return ` - ${pathLabel}: ${issue.message}`;
18
- })
19
- .join("\n");
20
- return `Invalid config schema in ${path.basename(filePath)}:\n${formatted}`;
21
- }
22
- function parseLoadedConfig(raw, filePath) {
23
- try {
24
- return codefastConfigSchema.parse(raw);
25
- }
26
- catch (caughtError) {
27
- if (caughtError instanceof ZodError) {
28
- throw new Error(formatZodError(caughtError, filePath));
29
- }
30
- throw caughtError;
31
- }
32
- }
33
- function listConfigCandidates(startDir, fs) {
34
- const candidates = [];
35
- let current = path.resolve(startDir);
36
- while (true) {
37
- for (const name of CONFIG_JS_PRIORITY) {
38
- const candidate = path.join(current, name);
39
- if (fs.existsSync(candidate)) {
40
- candidates.push(candidate);
41
- }
42
- }
43
- const jsonCandidate = path.join(current, CONFIG_JSON);
44
- if (fs.existsSync(jsonCandidate)) {
45
- candidates.push(jsonCandidate);
46
- }
47
- const parent = path.dirname(current);
48
- if (parent === current) {
49
- break;
50
- }
51
- current = parent;
52
- }
53
- return candidates;
54
- }
55
- async function readConfigFromPath(filePath, fs) {
56
- const ext = path.extname(filePath);
57
- if (ext === ".json") {
58
- const content = await fs.readFile(filePath, "utf8");
59
- return parseLoadedConfig(JSON.parse(content), filePath);
60
- }
61
- const loadWithJiti = jiti(process.cwd(), {
62
- interopDefault: true,
63
- moduleCache: false,
64
- });
65
- const moduleConfig = loadWithJiti(filePath);
66
- const unwrappedConfig = typeof moduleConfig === "object" && moduleConfig !== null && "default" in moduleConfig
67
- ? moduleConfig.default
68
- : moduleConfig;
69
- return parseLoadedConfig(unwrappedConfig, filePath);
70
- }
71
- async function loadOnce(fs, startDir) {
72
- const warnings = [];
73
- const configPaths = listConfigCandidates(startDir, fs);
74
- if (configPaths.length === 0) {
75
- return { config: {}, warnings };
76
- }
77
- const configPath = configPaths[0];
78
- const config = await readConfigFromPath(configPath, fs);
79
- return { config, warnings, configPath };
80
- }
81
- export async function loadConfig(fs, startDir = process.cwd()) {
82
- const cacheKey = path.resolve(startDir);
83
- if (!cachedLoads.has(cacheKey)) {
84
- cachedLoads.set(cacheKey, loadOnce(fs, cacheKey));
85
- }
86
- return cachedLoads.get(cacheKey);
87
- }
88
- export function resetConfigLoaderCacheForTests() {
89
- cachedLoads.clear();
90
- }
@@ -1,19 +0,0 @@
1
- export type LibSourceLocation = {
2
- readonly context: string;
3
- readonly layer: string;
4
- };
5
- /**
6
- * Extract `#lib/...` and relative import specifiers from TypeScript source (static `from` / `import("...")` only).
7
- */
8
- export declare function extractImportSpecifiers(sourceText: string): string[];
9
- export declare function parseLibSourceLocation(absoluteFilePath: string): LibSourceLocation | null;
10
- export declare function isArchitectureExcludedSourceFile(absoluteFilePath: string): boolean;
11
- /**
12
- * Returns human-readable violations for a single file's imports (for unit tests and tooling).
13
- */
14
- export declare function violationsForFileContent(absoluteFilePath: string, loc: LibSourceLocation, sourceText: string): string[];
15
- /**
16
- * Scans `packages/cli/src/lib` for explicit-architecture boundary violations (non-test sources only).
17
- */
18
- export declare function scanCliPackageArchitectureViolations(cliPackageRoot: string): string[];
19
- //# sourceMappingURL=architecture-boundaries.policy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"architecture-boundaries.policy.d.ts","sourceRoot":"","sources":["../../../../src/lib/core/application/architecture-boundaries.policy.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAkBpE;AAYD,wBAAgB,sBAAsB,CAAC,gBAAgB,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CA8BzF;AAED,wBAAgB,gCAAgC,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAMlF;AA2QD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,gBAAgB,EAAE,MAAM,EACxB,GAAG,EAAE,iBAAiB,EACtB,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CA6BV;AAuBD;;GAEG;AACH,wBAAgB,oCAAoC,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,CAYrF"}
@@ -1,370 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- /** Product bounded contexts: no direct cross-imports between these (domain + application rules). */
4
- const PRODUCT_BOUNDED_CONTEXTS = new Set(["arrange", "mirror", "tag"]);
5
- const SHARED_SOURCE_CODE_CONTEXT = "shared-source-code";
6
- const LAYERS = new Set(["domain", "application", "infra", "presentation"]);
7
- /** Import roots that any product slice may depend on without going "through" another slice. */
8
- const NEUTRAL_LIB_IMPORT_ROOTS = new Set(["core", "config", "infra", "shared"]);
9
- function sharedSourceCodeLayerFromSpecifier(segments) {
10
- if (segments.length < 3 || segments[0] !== "shared" || segments[1] !== "source-code") {
11
- return null;
12
- }
13
- return segments[2];
14
- }
15
- /**
16
- * Extract `#lib/...` and relative import specifiers from TypeScript source (static `from` / `import("...")` only).
17
- */
18
- export function extractImportSpecifiers(sourceText) {
19
- const specifiers = [];
20
- const fromPattern = /\bfrom\s+["']([^"']+)["']/g;
21
- let fromMatch;
22
- while ((fromMatch = fromPattern.exec(sourceText)) !== null) {
23
- specifiers.push(fromMatch[1]);
24
- }
25
- const importOnlyPattern = /^\s*import\s+["']([^"']+)["']\s*;/gm;
26
- let importOnlyMatch;
27
- while ((importOnlyMatch = importOnlyPattern.exec(sourceText)) !== null) {
28
- specifiers.push(importOnlyMatch[1]);
29
- }
30
- const importCallPattern = /\bimport\s*\(\s*["']([^"']+)["']\s*\)/g;
31
- let importCallMatch;
32
- while ((importCallMatch = importCallPattern.exec(sourceText)) !== null) {
33
- specifiers.push(importCallMatch[1]);
34
- }
35
- return specifiers;
36
- }
37
- function pathUnderCliSrcLib(absolutePath) {
38
- const normalized = path.normalize(absolutePath);
39
- const marker = `${path.sep}src${path.sep}lib${path.sep}`;
40
- const index = normalized.lastIndexOf(marker);
41
- if (index === -1) {
42
- return null;
43
- }
44
- return normalized.slice(index + marker.length);
45
- }
46
- export function parseLibSourceLocation(absoluteFilePath) {
47
- const tail = pathUnderCliSrcLib(absoluteFilePath);
48
- if (tail === null) {
49
- return null;
50
- }
51
- const parts = tail.split(path.sep).filter(Boolean);
52
- if (parts.length < 2) {
53
- return null;
54
- }
55
- if (parts[0] === "shared" && parts[1] === "source-code" && parts.length >= 3) {
56
- const layer = parts[2];
57
- if (!LAYERS.has(layer)) {
58
- return null;
59
- }
60
- const rest = parts.slice(3);
61
- if (layer === "domain" && rest[0] === "__tests__") {
62
- return { context: SHARED_SOURCE_CODE_CONTEXT, layer: "domain" };
63
- }
64
- return { context: SHARED_SOURCE_CODE_CONTEXT, layer };
65
- }
66
- const [context, layer, ...rest] = parts;
67
- if (!LAYERS.has(layer)) {
68
- return null;
69
- }
70
- if (layer === "domain" && rest[0] === "__tests__") {
71
- return { context, layer };
72
- }
73
- return { context, layer };
74
- }
75
- export function isArchitectureExcludedSourceFile(absoluteFilePath) {
76
- const base = path.basename(absoluteFilePath);
77
- if (base.endsWith(".test.ts") || base.endsWith(".integration.test.ts")) {
78
- return true;
79
- }
80
- return absoluteFilePath.split(path.sep).includes("__tests__");
81
- }
82
- function resolveRelativeSpecifier(fromAbsoluteFile, specifier) {
83
- if (!specifier.startsWith(".")) {
84
- return null;
85
- }
86
- const dir = path.dirname(fromAbsoluteFile);
87
- const resolved = path.normalize(path.join(dir, specifier));
88
- return resolved;
89
- }
90
- function libTailAfterResolution(absoluteResolved) {
91
- const tail = pathUnderCliSrcLib(absoluteResolved);
92
- if (tail === null) {
93
- return null;
94
- }
95
- return tail.split(path.sep).filter(Boolean);
96
- }
97
- function lastSegmentOfLibSpecifier(specifier) {
98
- if (!specifier.startsWith("#lib/")) {
99
- return null;
100
- }
101
- const segments = specifier.slice("#lib/".length).split("/").filter(Boolean);
102
- return segments.length > 0 ? segments[segments.length - 1] : null;
103
- }
104
- function importedModuleStem(specifier, fromAbsoluteFile) {
105
- if (specifier.startsWith("#lib/")) {
106
- return lastSegmentOfLibSpecifier(specifier);
107
- }
108
- const resolved = resolveRelativeSpecifier(fromAbsoluteFile, specifier);
109
- if (resolved === null) {
110
- return null;
111
- }
112
- const withTsExtension = resolved.endsWith(".ts") ? resolved : `${resolved}.ts`;
113
- const baseName = path.basename(withTsExtension);
114
- return baseName.endsWith(".ts") ? baseName.slice(0, -".ts".length) : baseName;
115
- }
116
- function isPureDomainOrModelFileName(fileBaseName) {
117
- return /\.(domain|model)\.ts$/.test(fileBaseName);
118
- }
119
- function isRuleAForbiddenImportedStem(moduleStem) {
120
- return (moduleStem.includes(".use-case") ||
121
- moduleStem.includes(".adapter") ||
122
- moduleStem.includes(".presenter"));
123
- }
124
- function isRuleBForbiddenImportedStem(moduleStem) {
125
- return moduleStem.includes(".adapter") || moduleStem.includes(".presenter");
126
- }
127
- function violationRuleAPureDomainModel(absoluteFilePath, fileBaseName, specifier) {
128
- if (!isPureDomainOrModelFileName(fileBaseName)) {
129
- return null;
130
- }
131
- const stem = importedModuleStem(specifier, absoluteFilePath);
132
- if (stem === null || !isRuleAForbiddenImportedStem(stem)) {
133
- return null;
134
- }
135
- return `${absoluteFilePath}: Rule A (pure domain/model) must not import orchestration or IO modules — blocked ${specifier} (stem "${stem}")`;
136
- }
137
- function violationRuleBApplicationIsolation(loc, absoluteFilePath, specifier) {
138
- if (loc.layer !== "application") {
139
- return null;
140
- }
141
- const stem = importedModuleStem(specifier, absoluteFilePath);
142
- if (stem === null || !isRuleBForbiddenImportedStem(stem)) {
143
- return null;
144
- }
145
- return `${absoluteFilePath}: Rule B (application isolation) must not import adapters or presenters — blocked ${specifier} (stem "${stem}")`;
146
- }
147
- function violationRuleCAntiCrossSlice(loc, specifier, fromAbsoluteFile) {
148
- if (!PRODUCT_BOUNDED_CONTEXTS.has(loc.context)) {
149
- return null;
150
- }
151
- if (specifier.startsWith("#lib/")) {
152
- const segments = specifier.slice("#lib/".length).split("/").filter(Boolean);
153
- if (segments.length === 0) {
154
- return null;
155
- }
156
- const importedRoot = segments[0];
157
- if (NEUTRAL_LIB_IMPORT_ROOTS.has(importedRoot)) {
158
- return null;
159
- }
160
- if (importedRoot === loc.context) {
161
- return null;
162
- }
163
- if (PRODUCT_BOUNDED_CONTEXTS.has(importedRoot)) {
164
- return `${fromAbsoluteFile}: Rule C (slice isolation) context "${loc.context}" must not import "${specifier}" — use #lib/shared/... or neutral roots (core, config, infra) instead`;
165
- }
166
- return null;
167
- }
168
- const resolved = resolveRelativeSpecifier(fromAbsoluteFile, specifier);
169
- if (resolved === null) {
170
- return null;
171
- }
172
- const resolvedPath = resolved.endsWith(".ts") ? resolved : `${resolved}.ts`;
173
- const parts = libTailAfterResolution(resolvedPath);
174
- if (parts === null || parts.length === 0) {
175
- return null;
176
- }
177
- const importedContext = parts[0];
178
- if (NEUTRAL_LIB_IMPORT_ROOTS.has(importedContext)) {
179
- return null;
180
- }
181
- if (importedContext === loc.context) {
182
- return null;
183
- }
184
- if (PRODUCT_BOUNDED_CONTEXTS.has(importedContext)) {
185
- return `${fromAbsoluteFile}: Rule C (slice isolation) context "${loc.context}" must not resolve into sibling slice via ${specifier}`;
186
- }
187
- return null;
188
- }
189
- function violationDomainLayer(loc, specifier, fromAbsoluteFile) {
190
- if (specifier.startsWith("#lib/")) {
191
- const segments = specifier.slice("#lib/".length).split("/").filter(Boolean);
192
- if (segments.length === 0) {
193
- return null;
194
- }
195
- if (segments[0] === "infra") {
196
- return `${fromAbsoluteFile}: domain must not import ${specifier}`;
197
- }
198
- const sharedLayerImported = sharedSourceCodeLayerFromSpecifier(segments);
199
- if (sharedLayerImported !== null && sharedLayerImported !== "domain") {
200
- return `${fromAbsoluteFile}: domain must not import ${specifier}`;
201
- }
202
- if (segments[0] === loc.context && segments.length >= 2) {
203
- const importLayer = segments[1];
204
- if (importLayer === "application" ||
205
- importLayer === "infra" ||
206
- importLayer === "presentation") {
207
- return `${fromAbsoluteFile}: domain must not import ${specifier}`;
208
- }
209
- }
210
- if (segments.length >= 2 &&
211
- segments[1] === "domain" &&
212
- PRODUCT_BOUNDED_CONTEXTS.has(segments[0]) &&
213
- segments[0] !== loc.context) {
214
- return `${fromAbsoluteFile}: domain (${loc.context}) must not import other bounded context domain ${specifier}`;
215
- }
216
- if (loc.context === "core" &&
217
- segments.length >= 2 &&
218
- segments[1] === "domain" &&
219
- PRODUCT_BOUNDED_CONTEXTS.has(segments[0])) {
220
- return `${fromAbsoluteFile}: core/domain must not import bounded context domain ${specifier}`;
221
- }
222
- if (loc.context === "config" &&
223
- segments.length >= 2 &&
224
- segments[1] === "domain" &&
225
- PRODUCT_BOUNDED_CONTEXTS.has(segments[0])) {
226
- return `${fromAbsoluteFile}: config/domain must not import bounded context domain ${specifier}`;
227
- }
228
- if (loc.context === SHARED_SOURCE_CODE_CONTEXT && PRODUCT_BOUNDED_CONTEXTS.has(segments[0])) {
229
- return `${fromAbsoluteFile}: shared source-code domain must not import product context ${specifier}`;
230
- }
231
- return null;
232
- }
233
- const resolved = resolveRelativeSpecifier(fromAbsoluteFile, specifier);
234
- if (resolved === null) {
235
- return null;
236
- }
237
- const parts = libTailAfterResolution(resolved);
238
- if (parts === null || parts.length < 2) {
239
- return null;
240
- }
241
- const [relCtx, relLayer] = parts;
242
- if (relCtx === "infra") {
243
- return `${fromAbsoluteFile}: domain must not resolve into infra via ${specifier}`;
244
- }
245
- if (relCtx === loc.context) {
246
- if (relLayer === "application" || relLayer === "infra" || relLayer === "presentation") {
247
- return `${fromAbsoluteFile}: domain must not resolve into ${relLayer} via ${specifier}`;
248
- }
249
- }
250
- if (relLayer === "domain" && PRODUCT_BOUNDED_CONTEXTS.has(relCtx) && relCtx !== loc.context) {
251
- return `${fromAbsoluteFile}: domain must not resolve into other bounded context domain via ${specifier}`;
252
- }
253
- if (loc.context === "core" && relLayer === "domain" && PRODUCT_BOUNDED_CONTEXTS.has(relCtx)) {
254
- return `${fromAbsoluteFile}: core/domain must not resolve into bounded context domain via ${specifier}`;
255
- }
256
- return null;
257
- }
258
- function violationApplicationLayer(loc, specifier, fromAbsoluteFile) {
259
- if (specifier.startsWith("#lib/")) {
260
- const segments = specifier.slice("#lib/".length).split("/").filter(Boolean);
261
- if (segments.length === 0) {
262
- return null;
263
- }
264
- if (segments[0] === "infra") {
265
- return `${fromAbsoluteFile}: application must not import ${specifier}`;
266
- }
267
- const sharedLayerImported = sharedSourceCodeLayerFromSpecifier(segments);
268
- if (sharedLayerImported === "infra" ||
269
- sharedLayerImported === "presentation" ||
270
- sharedLayerImported === "application") {
271
- return `${fromAbsoluteFile}: application must not import ${specifier}`;
272
- }
273
- if (segments.length >= 2 && (segments[1] === "infra" || segments[1] === "presentation")) {
274
- return `${fromAbsoluteFile}: application must not import ${specifier}`;
275
- }
276
- if (PRODUCT_BOUNDED_CONTEXTS.has(loc.context) &&
277
- PRODUCT_BOUNDED_CONTEXTS.has(segments[0]) &&
278
- segments[0] !== loc.context) {
279
- return `${fromAbsoluteFile}: application (${loc.context}) must not import ${specifier}`;
280
- }
281
- return null;
282
- }
283
- const resolved = resolveRelativeSpecifier(fromAbsoluteFile, specifier);
284
- if (resolved === null) {
285
- return null;
286
- }
287
- const parts = libTailAfterResolution(resolved);
288
- if (parts === null || parts.length < 2) {
289
- return null;
290
- }
291
- const [relCtx, relLayer] = parts;
292
- if (relCtx === "infra") {
293
- return `${fromAbsoluteFile}: application must not resolve into infra via ${specifier}`;
294
- }
295
- if (relLayer === "infra" || relLayer === "presentation") {
296
- return `${fromAbsoluteFile}: application must not resolve into ${relLayer} via ${specifier}`;
297
- }
298
- return null;
299
- }
300
- /**
301
- * Returns human-readable violations for a single file's imports (for unit tests and tooling).
302
- */
303
- export function violationsForFileContent(absoluteFilePath, loc, sourceText) {
304
- const violations = [];
305
- const fileBaseName = path.basename(absoluteFilePath);
306
- for (const specifier of extractImportSpecifiers(sourceText)) {
307
- const ruleA = violationRuleAPureDomainModel(absoluteFilePath, fileBaseName, specifier);
308
- if (ruleA !== null) {
309
- violations.push(ruleA);
310
- }
311
- const ruleB = violationRuleBApplicationIsolation(loc, absoluteFilePath, specifier);
312
- if (ruleB !== null) {
313
- violations.push(ruleB);
314
- }
315
- const ruleC = violationRuleCAntiCrossSlice(loc, specifier, absoluteFilePath);
316
- if (ruleC !== null) {
317
- violations.push(ruleC);
318
- }
319
- if (loc.layer === "domain") {
320
- const domainViolation = violationDomainLayer(loc, specifier, absoluteFilePath);
321
- if (domainViolation !== null) {
322
- violations.push(domainViolation);
323
- }
324
- }
325
- else if (loc.layer === "application") {
326
- const appViolation = violationApplicationLayer(loc, specifier, absoluteFilePath);
327
- if (appViolation !== null) {
328
- violations.push(appViolation);
329
- }
330
- }
331
- }
332
- return [...new Set(violations)];
333
- }
334
- function walkNonTestTsFiles(rootDir) {
335
- const results = [];
336
- const scan = (dir) => {
337
- for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
338
- const full = path.join(dir, entry.name);
339
- if (entry.isDirectory()) {
340
- if (entry.name === "node_modules" || entry.name === "dist") {
341
- continue;
342
- }
343
- scan(full);
344
- }
345
- else if (entry.isFile() && entry.name.endsWith(".ts")) {
346
- if (!isArchitectureExcludedSourceFile(full)) {
347
- results.push(full);
348
- }
349
- }
350
- }
351
- };
352
- scan(rootDir);
353
- return results;
354
- }
355
- /**
356
- * Scans `packages/cli/src/lib` for explicit-architecture boundary violations (non-test sources only).
357
- */
358
- export function scanCliPackageArchitectureViolations(cliPackageRoot) {
359
- const libRoot = path.join(cliPackageRoot, "src", "lib");
360
- const violations = [];
361
- for (const absoluteFilePath of walkNonTestTsFiles(libRoot)) {
362
- const loc = parseLibSourceLocation(absoluteFilePath);
363
- if (loc === null) {
364
- continue;
365
- }
366
- const sourceText = fs.readFileSync(absoluteFilePath, "utf8");
367
- violations.push(...violationsForFileContent(absoluteFilePath, loc, sourceText));
368
- }
369
- return violations;
370
- }