@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
@@ -0,0 +1,156 @@
1
+ import { messageFromCaughtUnknown } from "#lib/core/application/utils/caught-unknown-message.util";
2
+ import { MirrorError, MirrorErrorCode } from "#lib/mirror/domain/errors.domain";
3
+ import { PACKAGE_JSON_EXPORT } from "#lib/mirror/domain/constants.domain";
4
+ function containsDistTarget(value) {
5
+ if (typeof value === "string") {
6
+ return value.startsWith("./dist/");
7
+ }
8
+ if (Array.isArray(value)) {
9
+ return value.some((entryValue) => containsDistTarget(entryValue));
10
+ }
11
+ if (value && typeof value === "object") {
12
+ return Object.values(value).some((entryValue) => containsDistTarget(entryValue));
13
+ }
14
+ return false;
15
+ }
16
+ /**
17
+ * Keep `./package.json` at the very end for aesthetics by default.
18
+ * If a catch-all `./*` exists, move `./package.json` before wildcards so it remains reachable.
19
+ */
20
+ function exportSpecifierRank(exportSpecifier, hasCatchAllWildcard) {
21
+ if (exportSpecifier === ".") {
22
+ return 0;
23
+ }
24
+ if (exportSpecifier === PACKAGE_JSON_EXPORT) {
25
+ return hasCatchAllWildcard ? 2 : 4;
26
+ }
27
+ if (exportSpecifier.includes("*")) {
28
+ return 3;
29
+ }
30
+ return 1;
31
+ }
32
+ function compareExportSpecifiers(leftSpecifier, rightSpecifier, originalPathBySpecifier, hasCatchAllWildcard) {
33
+ const leftRank = exportSpecifierRank(leftSpecifier, hasCatchAllWildcard);
34
+ const rightRank = exportSpecifierRank(rightSpecifier, hasCatchAllWildcard);
35
+ if (leftRank !== rightRank) {
36
+ return leftRank - rightRank;
37
+ }
38
+ const leftOriginalPath = originalPathBySpecifier[leftSpecifier] ?? leftSpecifier;
39
+ const rightOriginalPath = originalPathBySpecifier[rightSpecifier] ?? rightSpecifier;
40
+ const originalPathComparison = leftOriginalPath.localeCompare(rightOriginalPath);
41
+ if (originalPathComparison !== 0) {
42
+ return originalPathComparison;
43
+ }
44
+ return leftSpecifier.localeCompare(rightSpecifier);
45
+ }
46
+ /** Shared rule: show `package.json#name` when it is a non-empty string; else folder basename. */
47
+ export function resolvePackageDisplayName(packageJson, folderBasename) {
48
+ const declaredName = packageJson.name;
49
+ return typeof declaredName === "string" && declaredName.length > 0
50
+ ? declaredName
51
+ : folderBasename;
52
+ }
53
+ export async function readPackageJsonDisplayName(fs, packageJsonPath, folderBasename) {
54
+ if (!fs.existsSync(packageJsonPath)) {
55
+ return folderBasename;
56
+ }
57
+ try {
58
+ const raw = await fs.readFile(packageJsonPath, "utf8");
59
+ const parsed = JSON.parse(raw);
60
+ return resolvePackageDisplayName(parsed, folderBasename);
61
+ }
62
+ catch {
63
+ return folderBasename;
64
+ }
65
+ }
66
+ /**
67
+ * Writes `exports` into `package.json` via a temp file + rename (atomic on same volume).
68
+ * Preserves a trailing newline after JSON.
69
+ */
70
+ export async function writePackageJsonExportsAtomic(fs, packageJsonPath, mergeInput) {
71
+ const raw = await fs.readFile(packageJsonPath, "utf8");
72
+ const packageJson = JSON.parse(raw);
73
+ const existingExports = packageJson.exports;
74
+ const existingExportMap = existingExports && typeof existingExports === "object" && !Array.isArray(existingExports)
75
+ ? existingExports
76
+ : {};
77
+ const managedSpecifiers = new Set(mergeInput.managedExportSpecifiers);
78
+ const originalPathBySpecifier = {
79
+ ...mergeInput.originalPathBySpecifier,
80
+ };
81
+ const mergedExportMap = {};
82
+ const prunedKeys = [];
83
+ // Preserve unmanaged manual entries; drop unmanaged stale entries targeting dist/.
84
+ for (const [exportSpecifier, exportValue] of Object.entries(existingExportMap)) {
85
+ if (exportSpecifier === PACKAGE_JSON_EXPORT) {
86
+ mergedExportMap[exportSpecifier] = exportValue;
87
+ if (!(exportSpecifier in originalPathBySpecifier)) {
88
+ originalPathBySpecifier[exportSpecifier] = exportSpecifier;
89
+ }
90
+ continue;
91
+ }
92
+ if (!managedSpecifiers.has(exportSpecifier)) {
93
+ if (containsDistTarget(exportValue)) {
94
+ prunedKeys.push(exportSpecifier);
95
+ }
96
+ else {
97
+ mergedExportMap[exportSpecifier] = exportValue;
98
+ if (!(exportSpecifier in originalPathBySpecifier)) {
99
+ originalPathBySpecifier[exportSpecifier] = exportSpecifier;
100
+ }
101
+ }
102
+ }
103
+ }
104
+ // Generated entries always win for managed specifiers (including ".").
105
+ for (const [exportSpecifier, exportValue] of Object.entries(mergeInput.generatedExports)) {
106
+ mergedExportMap[exportSpecifier] = exportValue;
107
+ }
108
+ if (!(PACKAGE_JSON_EXPORT in mergedExportMap)) {
109
+ mergedExportMap[PACKAGE_JSON_EXPORT] = PACKAGE_JSON_EXPORT;
110
+ }
111
+ originalPathBySpecifier[PACKAGE_JSON_EXPORT] = PACKAGE_JSON_EXPORT;
112
+ const rootExport = mergedExportMap["."];
113
+ if (rootExport && typeof rootExport === "object" && !Array.isArray(rootExport)) {
114
+ const rootEntry = rootExport;
115
+ const requirePath = typeof rootEntry.require === "string" ? rootEntry.require : undefined;
116
+ const importPath = typeof rootEntry.import === "string" ? rootEntry.import : undefined;
117
+ const typesPath = typeof rootEntry.types === "string" ? rootEntry.types : undefined;
118
+ if (requirePath || importPath) {
119
+ packageJson.main = requirePath ?? importPath;
120
+ }
121
+ if (importPath && importPath.endsWith(".mjs")) {
122
+ packageJson.module = importPath;
123
+ }
124
+ if (typesPath) {
125
+ packageJson.types = typesPath;
126
+ }
127
+ }
128
+ const filesField = packageJson.files;
129
+ if (Array.isArray(filesField)) {
130
+ const normalizedFiles = filesField.filter((entry) => typeof entry === "string");
131
+ if (!normalizedFiles.includes("dist")) {
132
+ normalizedFiles.push("dist");
133
+ }
134
+ packageJson.files = normalizedFiles;
135
+ }
136
+ else {
137
+ packageJson.files = ["dist"];
138
+ }
139
+ const sortedExportMap = {};
140
+ const hasCatchAllWildcard = "./*" in mergedExportMap;
141
+ for (const exportSpecifier of Object.keys(mergedExportMap).sort((leftSpecifier, rightSpecifier) => compareExportSpecifiers(leftSpecifier, rightSpecifier, originalPathBySpecifier, hasCatchAllWildcard))) {
142
+ sortedExportMap[exportSpecifier] = mergedExportMap[exportSpecifier];
143
+ }
144
+ packageJson.exports = sortedExportMap;
145
+ const serialized = JSON.stringify(packageJson, null, 2) + "\n";
146
+ const tmpPath = `${packageJsonPath}.tmp`;
147
+ await fs.writeFile(tmpPath, serialized, "utf8");
148
+ try {
149
+ await fs.rename(tmpPath, packageJsonPath);
150
+ }
151
+ catch (caughtRenameError) {
152
+ await fs.unlink(tmpPath).catch(() => { });
153
+ throw new MirrorError(MirrorErrorCode.PACKAGE_WRITE, `Failed to atomically update ${packageJsonPath}: ${messageFromCaughtUnknown(caughtRenameError)}`, caughtRenameError instanceof Error ? { cause: caughtRenameError } : undefined);
154
+ }
155
+ return { prunedKeys };
156
+ }
@@ -0,0 +1,26 @@
1
+ import type { CliFs, CliLogger } from "#lib/infra/fs-contract.port";
2
+ import type { FindWorkspacePackagesResult } from "#lib/mirror/domain/types.domain";
3
+ /** Turn a pnpm `packages` glob into a `globSync` pattern that finds `package.json` files. */
4
+ export declare function workspacePatternToPackageJsonGlob(pattern: string): string;
5
+ export declare function splitWorkspacePackageEntries(raw: unknown): {
6
+ include: string[];
7
+ exclude: string[];
8
+ };
9
+ /**
10
+ * Reads `packages` from a parsed pnpm workspace document.
11
+ * @throws If the document is invalid or `packages` is present but not an array.
12
+ */
13
+ export declare function parsePnpmWorkspaceDocument(doc: unknown): {
14
+ include: string[];
15
+ exclude: string[];
16
+ hasPackagesKey: boolean;
17
+ /** True only when `packages` exists and the YAML array is literally `[]`. */
18
+ isEmptyPackagesArray: boolean;
19
+ };
20
+ /**
21
+ * Workspace package directories relative to `rootDir` (POSIX slashes), sorted.
22
+ * Reads `pnpm-workspace.yaml` when present; otherwise uses `packages/*`.
23
+ * Only paths with a `package.json` are returned (same practical rule as pnpm).
24
+ */
25
+ export declare function findWorkspacePackageRelPaths(rootDir: string, fs: CliFs, logger: CliLogger): Promise<FindWorkspacePackagesResult>;
26
+ //# sourceMappingURL=workspace-packages.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-packages.adapter.d.ts","sourceRoot":"","sources":["../../../../src/lib/mirror/infra/workspace-packages.adapter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAGpE,OAAO,KAAK,EACV,2BAA2B,EAE5B,MAAM,iCAAiC,CAAC;AAmBzC,6FAA6F;AAC7F,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMzE;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,GAAG;IAC1D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAqBA;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG;IACxD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,6EAA6E;IAC7E,oBAAoB,EAAE,OAAO,CAAC;CAC/B,CAuBA;AAiCD;;;;GAIG;AACH,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,2BAA2B,CAAC,CAoEtC"}
@@ -0,0 +1,170 @@
1
+ import { globSync } from "node:fs";
2
+ import path from "node:path";
3
+ import picomatch from "picomatch";
4
+ import { parse as parseYaml } from "yaml";
5
+ import { messageFromCaughtUnknown } from "#lib/core/application/utils/caught-unknown-message.util";
6
+ import { normalizePath } from "#lib/mirror/infra/path-normalizer.adapter";
7
+ import { mirrorGlobWarning } from "#lib/mirror/presentation/reporter.presenter";
8
+ const PNPM_WORKSPACE = "pnpm-workspace.yaml";
9
+ /** Default when the workspace file is missing or has no `packages` key. */
10
+ const DEFAULT_INCLUDE = ["packages/*"];
11
+ function toPosix(filePath) {
12
+ return filePath.split(path.sep).join("/");
13
+ }
14
+ function isGlobPermissionError(caughtError) {
15
+ if (typeof caughtError !== "object" || caughtError === null || !("code" in caughtError)) {
16
+ return false;
17
+ }
18
+ const code = caughtError.code;
19
+ return code === "EACCES" || code === "EPERM";
20
+ }
21
+ /** Turn a pnpm `packages` glob into a `globSync` pattern that finds `package.json` files. */
22
+ export function workspacePatternToPackageJsonGlob(pattern) {
23
+ const normalizedPattern = toPosix(pattern.trim()).replace(/\/+$/, "");
24
+ if (!normalizedPattern) {
25
+ return "**/package.json";
26
+ }
27
+ return `${normalizedPattern}/package.json`;
28
+ }
29
+ export function splitWorkspacePackageEntries(raw) {
30
+ const include = [];
31
+ const exclude = [];
32
+ if (!Array.isArray(raw)) {
33
+ return { include, exclude };
34
+ }
35
+ for (const entry of raw) {
36
+ if (typeof entry !== "string") {
37
+ continue;
38
+ }
39
+ const trimmed = entry.trim();
40
+ if (!trimmed) {
41
+ continue;
42
+ }
43
+ if (trimmed.startsWith("!")) {
44
+ exclude.push(trimmed.slice(1).trim());
45
+ }
46
+ else {
47
+ include.push(trimmed);
48
+ }
49
+ }
50
+ return { include, exclude };
51
+ }
52
+ /**
53
+ * Reads `packages` from a parsed pnpm workspace document.
54
+ * @throws If the document is invalid or `packages` is present but not an array.
55
+ */
56
+ export function parsePnpmWorkspaceDocument(doc) {
57
+ if (doc === null || doc === undefined) {
58
+ throw new Error(`${PNPM_WORKSPACE} root document must be an object (got empty or null)`);
59
+ }
60
+ if (typeof doc !== "object" || Array.isArray(doc)) {
61
+ throw new Error(`${PNPM_WORKSPACE} root must be a mapping, not an array or scalar`);
62
+ }
63
+ const parsedDoc = doc;
64
+ if (!Object.prototype.hasOwnProperty.call(parsedDoc, "packages")) {
65
+ return { include: [], exclude: [], hasPackagesKey: false, isEmptyPackagesArray: false };
66
+ }
67
+ const pkgs = parsedDoc.packages;
68
+ if (!Array.isArray(pkgs)) {
69
+ throw new Error(`${PNPM_WORKSPACE} field "packages" must be an array`);
70
+ }
71
+ if (pkgs.length === 0) {
72
+ return { include: [], exclude: [], hasPackagesKey: true, isEmptyPackagesArray: true };
73
+ }
74
+ return {
75
+ ...splitWorkspacePackageEntries(pkgs),
76
+ hasPackagesKey: true,
77
+ isEmptyPackagesArray: false,
78
+ };
79
+ }
80
+ async function readWorkspaceYaml(rootDir, fs) {
81
+ const workspaceYamlPath = path.join(rootDir, PNPM_WORKSPACE);
82
+ if (!fs.existsSync(workspaceYamlPath)) {
83
+ return { exists: false };
84
+ }
85
+ let raw;
86
+ try {
87
+ raw = await fs.readFile(workspaceYamlPath, "utf8");
88
+ }
89
+ catch (caughtReadError) {
90
+ throw new Error(`Failed to read ${PNPM_WORKSPACE}: ${messageFromCaughtUnknown(caughtReadError)}`);
91
+ }
92
+ let doc;
93
+ try {
94
+ doc = parseYaml(raw);
95
+ }
96
+ catch (caughtYamlParseError) {
97
+ throw new Error(`Failed to parse ${PNPM_WORKSPACE}: ${messageFromCaughtUnknown(caughtYamlParseError)}`);
98
+ }
99
+ if (doc === null || doc === undefined) {
100
+ throw new Error(`${PNPM_WORKSPACE} must define a mapping at the document root`);
101
+ }
102
+ return { exists: true, doc };
103
+ }
104
+ /**
105
+ * Workspace package directories relative to `rootDir` (POSIX slashes), sorted.
106
+ * Reads `pnpm-workspace.yaml` when present; otherwise uses `packages/*`.
107
+ * Only paths with a `package.json` are returned (same practical rule as pnpm).
108
+ */
109
+ export async function findWorkspacePackageRelPaths(rootDir, fs, logger) {
110
+ const workspaceYaml = await readWorkspaceYaml(rootDir, fs);
111
+ let include;
112
+ let exclude;
113
+ let multiSource;
114
+ if (!workspaceYaml.exists) {
115
+ include = [...DEFAULT_INCLUDE];
116
+ exclude = [];
117
+ multiSource = "default-patterns";
118
+ }
119
+ else {
120
+ const parsed = parsePnpmWorkspaceDocument(workspaceYaml.doc);
121
+ if (!parsed.hasPackagesKey) {
122
+ include = [...DEFAULT_INCLUDE];
123
+ exclude = [];
124
+ multiSource = "default-patterns";
125
+ }
126
+ else if (parsed.isEmptyPackagesArray) {
127
+ return { relPaths: [], multiSource: "declared-empty" };
128
+ }
129
+ else {
130
+ include = parsed.include;
131
+ exclude = parsed.exclude;
132
+ multiSource = "pnpm-workspace-yaml";
133
+ }
134
+ }
135
+ const found = new Set();
136
+ const globOpts = {
137
+ cwd: rootDir,
138
+ posix: true,
139
+ ...(path.sep === "\\" ? { windowsPathsNoEscape: true } : {}),
140
+ };
141
+ for (const pattern of include) {
142
+ const globPat = workspacePatternToPackageJsonGlob(pattern);
143
+ let matches;
144
+ try {
145
+ matches = globSync(globPat, globOpts);
146
+ }
147
+ catch (caughtGlobError) {
148
+ if (isGlobPermissionError(caughtGlobError)) {
149
+ mirrorGlobWarning(logger, `Skipping workspace glob "${pattern}" (${messageFromCaughtUnknown(caughtGlobError)})`);
150
+ continue;
151
+ }
152
+ throw new Error(`Invalid workspace glob "${pattern}": ${messageFromCaughtUnknown(caughtGlobError)}`);
153
+ }
154
+ for (const matchedPath of matches) {
155
+ const posix = toPosix(matchedPath);
156
+ if (!posix.endsWith("/package.json")) {
157
+ continue;
158
+ }
159
+ const rel = posix.slice(0, -"/package.json".length);
160
+ if (!rel) {
161
+ continue;
162
+ }
163
+ found.add(normalizePath(rel));
164
+ }
165
+ }
166
+ const excludeMatchers = exclude.map((pat) => picomatch(pat, { dot: true }));
167
+ const relPaths = [...found].filter((rel) => !excludeMatchers.some((isMatch) => isMatch(rel)));
168
+ relPaths.sort((a, b) => a.localeCompare(b));
169
+ return { relPaths, multiSource };
170
+ }
@@ -0,0 +1,8 @@
1
+ import type { CliFs, CliLogger } from "#lib/infra/fs-contract.port";
2
+ import type { WorkspaceServicePort } from "#lib/mirror/application/ports/workspace-service.port";
3
+ import type { FindWorkspacePackagesResult } from "#lib/mirror/domain/types.domain";
4
+ export declare class WorkspaceServiceAdapter implements WorkspaceServicePort {
5
+ resolvePackageFilterUnderRoot(rootDir: string, packageFilter: string): string;
6
+ findWorkspacePackageRelPaths(rootDir: string, fs: CliFs, logger: CliLogger): Promise<FindWorkspacePackagesResult>;
7
+ }
8
+ //# sourceMappingURL=workspace-service.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-service.adapter.d.ts","sourceRoot":"","sources":["../../../../src/lib/mirror/infra/workspace-service.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sDAAsD,CAAC;AACjG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAInF,qBAAa,uBAAwB,YAAW,oBAAoB;IAClE,6BAA6B,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAE5E;IAED,4BAA4B,CAC1B,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,2BAA2B,CAAC,CAEtC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { resolvePackageFilterUnderRoot } from "#lib/mirror/infra/package-filter.adapter";
2
+ import { findWorkspacePackageRelPaths } from "#lib/mirror/infra/workspace-packages.adapter";
3
+ export class WorkspaceServiceAdapter {
4
+ resolvePackageFilterUnderRoot(rootDir, packageFilter) {
5
+ return resolvePackageFilterUnderRoot(rootDir, packageFilter);
6
+ }
7
+ findWorkspacePackageRelPaths(rootDir, fs, logger) {
8
+ return findWorkspacePackageRelPaths(rootDir, fs, logger);
9
+ }
10
+ }
@@ -0,0 +1,17 @@
1
+ import type { CodefastConfig } from "#lib/config/domain/schema.domain";
2
+ import type { AppError } from "#lib/core/domain/errors.domain";
3
+ import { type Result } from "#lib/core/domain/result.model";
4
+ import type { CliContainer } from "#lib/core/infra/container.adapter";
5
+ import { type GlobalCliOptions } from "#lib/core/presentation/global-cli-options.presenter";
6
+ export type MirrorSyncCommandPrelude = {
7
+ readonly globals: GlobalCliOptions;
8
+ readonly rootDir: string;
9
+ readonly config: CodefastConfig;
10
+ readonly packageFilter: string | undefined;
11
+ };
12
+ export declare function prepareMirrorSync(cli: CliContainer, args: {
13
+ readonly currentWorkingDirectory: string;
14
+ readonly packageArg: string | undefined;
15
+ readonly globalCliRaw: unknown;
16
+ }): Promise<Result<MirrorSyncCommandPrelude, AppError>>;
17
+ //# sourceMappingURL=mirror-prelude.presenter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mirror-prelude.presenter.d.ts","sourceRoot":"","sources":["../../../../src/lib/mirror/presentation/mirror-prelude.presenter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAM,KAAK,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,qDAAqD,CAAC;AAI7D,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE;IACJ,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC,GACA,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC,CA6BrD"}
@@ -0,0 +1,35 @@
1
+ import { ok } from "#lib/core/domain/result.model";
2
+ import { tryLoadCodefastConfig } from "#lib/core/presentation/load-codefast-config.presenter";
3
+ import { parseGlobalCliOptions, } from "#lib/core/presentation/global-cli-options.presenter";
4
+ import { resolveCliWorkspaceRootStrict } from "#lib/core/presentation/workspace-root-strict.presenter";
5
+ import { resolveMirrorPackageArgToRelative } from "#lib/mirror/presentation/resolve-mirror-package-arg.presenter";
6
+ export async function prepareMirrorSync(cli, args) {
7
+ const globalsOutcome = parseGlobalCliOptions(args.globalCliRaw);
8
+ if (!globalsOutcome.ok) {
9
+ return globalsOutcome;
10
+ }
11
+ const rootOutcome = resolveCliWorkspaceRootStrict(cli);
12
+ if (!rootOutcome.ok) {
13
+ return rootOutcome;
14
+ }
15
+ const rootDir = rootOutcome.value;
16
+ const filterOutcome = resolveMirrorPackageArgToRelative({
17
+ fs: cli.fs,
18
+ rootDir,
19
+ packageArg: args.packageArg,
20
+ currentWorkingDirectory: args.currentWorkingDirectory,
21
+ });
22
+ if (!filterOutcome.ok) {
23
+ return filterOutcome;
24
+ }
25
+ const loadedOutcome = await tryLoadCodefastConfig(cli, rootDir);
26
+ if (!loadedOutcome.ok) {
27
+ return loadedOutcome;
28
+ }
29
+ return ok({
30
+ globals: globalsOutcome.value,
31
+ rootDir,
32
+ config: loadedOutcome.value.config,
33
+ packageFilter: filterOutcome.value,
34
+ });
35
+ }
@@ -0,0 +1,25 @@
1
+ import type { CliLogger } from "#lib/core/application/ports/cli-io.port";
2
+ import type { GlobalStats, PackageStats, WorkspaceMultiDiscoverySource } from "#lib/mirror/domain/types.domain";
3
+ export declare function configureMirrorColors(noColor: boolean): void;
4
+ export declare function printMirrorConfigWarnings(logger: CliLogger, warnings: string[]): void;
5
+ export declare function mirrorGlobWarning(logger: CliLogger, message: string): void;
6
+ export declare function logSkippedWorkspacePackage(logger: CliLogger, index: number, total: number, displayName: string, reason: string): void;
7
+ export declare function mirrorBanner(logger: CliLogger): void;
8
+ export type MirrorProcessingMode = {
9
+ kind: "single";
10
+ } | {
11
+ kind: "multi";
12
+ source: WorkspaceMultiDiscoverySource;
13
+ };
14
+ export declare function mirrorProcessingMode(logger: CliLogger, mode: MirrorProcessingMode): void;
15
+ export declare function mirrorNoPackages(logger: CliLogger): void;
16
+ export declare function logPackageSuccess(logger: CliLogger, index: number, total: number, pkgStats: PackageStats, generatedDistAssetCounts: {
17
+ jsCount: number;
18
+ cssCount: number;
19
+ }, verbose: boolean): void;
20
+ export declare function logPrunedStaleExport(logger: CliLogger, exportSpecifier: string): void;
21
+ export declare function logPackageError(logger: CliLogger, index: number, total: number, displayName: string, errValue: unknown, verbose: boolean): void;
22
+ export declare function mirrorSummarySeparator(logger: CliLogger): void;
23
+ export declare function mirrorSummary(logger: CliLogger, stats: GlobalStats, elapsedSeconds: number): void;
24
+ export declare function mirrorFatalError(logger: CliLogger, caughtError: unknown): void;
25
+ //# sourceMappingURL=reporter.presenter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporter.presenter.d.ts","sourceRoot":"","sources":["../../../../src/lib/mirror/presentation/reporter.presenter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,6BAA6B,EAC9B,MAAM,iCAAiC,CAAC;AAuBzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAI5D;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAErF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAG1E;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,IAAI,CAMN;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAIpD;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,6BAA6B,CAAA;CAAE,CAAC;AAE7D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAqBxF;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAExD;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,YAAY,EACtB,wBAAwB,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAC/D,OAAO,EAAE,OAAO,GACf,IAAI,CA0CN;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,CAIrF;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,OAAO,GACf,IAAI,CAeN;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAE9D;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAkCjG;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,GAAG,IAAI,CAQ9E"}
@@ -0,0 +1,140 @@
1
+ import process from "node:process";
2
+ import { messageFromCaughtUnknown } from "#lib/core/application/utils/caught-unknown-message.util";
3
+ import { printConfigSchemaWarnings } from "#lib/infra/config-reporter.adapter";
4
+ const Colors = {
5
+ RESET: "\x1b[0m",
6
+ BOLD: "\x1b[1m",
7
+ DIM: "\x1b[2m",
8
+ GREEN: "\x1b[32m",
9
+ YELLOW: "\x1b[33m",
10
+ CYAN: "\x1b[36m",
11
+ GRAY: "\x1b[90m",
12
+ MAGENTA: "\x1b[35m",
13
+ BRIGHT_GREEN: "\x1b[92m",
14
+ BRIGHT_YELLOW: "\x1b[93m",
15
+ BRIGHT_CYAN: "\x1b[96m",
16
+ disable() {
17
+ for (const key of Object.keys(this)) {
18
+ if (typeof this[key] === "string") {
19
+ this[key] = "";
20
+ }
21
+ }
22
+ },
23
+ };
24
+ export function configureMirrorColors(noColor) {
25
+ if (!process.stdout.isTTY || noColor) {
26
+ Colors.disable();
27
+ }
28
+ }
29
+ export function printMirrorConfigWarnings(logger, warnings) {
30
+ printConfigSchemaWarnings(logger, warnings);
31
+ }
32
+ export function mirrorGlobWarning(logger, message) {
33
+ const { out } = logger;
34
+ out(`${Colors.YELLOW}⚠ ${message}${Colors.RESET}`);
35
+ }
36
+ export function logSkippedWorkspacePackage(logger, index, total, displayName, reason) {
37
+ const { out } = logger;
38
+ const progress = `${Colors.DIM}[${index}/${total}]${Colors.RESET}`;
39
+ out(`${progress} ${Colors.GRAY}○${Colors.RESET} ${Colors.DIM}${displayName}${Colors.RESET}`);
40
+ out(` ${Colors.DIM}└─${Colors.RESET} ${Colors.GRAY}Skipped: ${reason}${Colors.RESET}`);
41
+ out("");
42
+ }
43
+ export function mirrorBanner(logger) {
44
+ const { out } = logger;
45
+ out(`\n${Colors.BOLD}${Colors.CYAN}📦 Mirror — package exports${Colors.RESET}`);
46
+ out(`${Colors.DIM}${"═".repeat(60)}${Colors.RESET}\n`);
47
+ }
48
+ export function mirrorProcessingMode(logger, mode) {
49
+ const { out } = logger;
50
+ if (mode.kind === "single") {
51
+ out(`${Colors.DIM}Processing single package...${Colors.RESET}\n`);
52
+ return;
53
+ }
54
+ switch (mode.source) {
55
+ case "default-patterns":
56
+ out(`${Colors.DIM}Discovering workspace packages using default patterns (packages/*)…${Colors.RESET}\n`);
57
+ break;
58
+ case "pnpm-workspace-yaml":
59
+ out(`${Colors.DIM}Discovering workspace packages from pnpm-workspace.yaml…${Colors.RESET}\n`);
60
+ break;
61
+ case "declared-empty":
62
+ out(`${Colors.DIM}pnpm-workspace.yaml declares an empty workspace package list.${Colors.RESET}\n`);
63
+ break;
64
+ }
65
+ }
66
+ export function mirrorNoPackages(logger) {
67
+ logger.out(`${Colors.YELLOW}⚠ No packages found${Colors.RESET}`);
68
+ }
69
+ export function logPackageSuccess(logger, index, total, pkgStats, generatedDistAssetCounts, verbose) {
70
+ const { out } = logger;
71
+ const progress = `${Colors.DIM}[${index}/${total}]${Colors.RESET}`;
72
+ out(`${progress} ${Colors.BRIGHT_GREEN}✓${Colors.RESET} ${Colors.BOLD}${pkgStats.name}${Colors.RESET}`);
73
+ if (verbose) {
74
+ out(` ${Colors.DIM}├─${Colors.RESET} Path: ${pkgStats.path}`);
75
+ if (pkgStats.hasTransform) {
76
+ out(` ${Colors.DIM}├─${Colors.RESET} ${Colors.CYAN}Custom path transformation${Colors.RESET}`);
77
+ }
78
+ if (pkgStats.cssConfigStatus) {
79
+ out(` ${Colors.DIM}├─${Colors.RESET} ${Colors.CYAN}${pkgStats.cssConfigStatus === "disabled" ? "CSS disabled" : "CSS configured"}${Colors.RESET}`);
80
+ }
81
+ }
82
+ const breakdown = [];
83
+ if (generatedDistAssetCounts.jsCount > 0) {
84
+ breakdown.push(`${Colors.GREEN}${generatedDistAssetCounts.jsCount} modules${Colors.RESET}`);
85
+ }
86
+ if (generatedDistAssetCounts.cssCount > 0) {
87
+ breakdown.push(`${Colors.MAGENTA}${generatedDistAssetCounts.cssCount} CSS${Colors.RESET}`);
88
+ }
89
+ if (pkgStats.customExports > 0) {
90
+ breakdown.push(`${Colors.YELLOW}${pkgStats.customExports} custom${Colors.RESET}`);
91
+ }
92
+ if (breakdown.length > 0) {
93
+ out(` ${Colors.DIM}└─${Colors.RESET} ${breakdown.join(" + ")} = ${Colors.BRIGHT_CYAN}${pkgStats.totalExports} exports${Colors.RESET}`);
94
+ }
95
+ else {
96
+ out(` ${Colors.DIM}└─${Colors.RESET} ${Colors.BRIGHT_CYAN}${pkgStats.totalExports} exports${Colors.RESET}`);
97
+ }
98
+ out("");
99
+ }
100
+ export function logPrunedStaleExport(logger, exportSpecifier) {
101
+ logger.out(` ${Colors.DIM}└─${Colors.RESET} ${Colors.GRAY}Pruned stale export: ${exportSpecifier}${Colors.RESET}`);
102
+ }
103
+ export function logPackageError(logger, index, total, displayName, errValue, verbose) {
104
+ const { out, err: errLine } = logger;
105
+ out(`${Colors.DIM}[${index}/${total}]${Colors.RESET} ${Colors.YELLOW}✗${Colors.RESET} ${Colors.BOLD}${displayName}${Colors.RESET}`);
106
+ out(` ${Colors.DIM}└─${Colors.RESET} ${Colors.YELLOW}Error: ${messageFromCaughtUnknown(errValue)}${Colors.RESET}\n`);
107
+ if (verbose) {
108
+ errLine(errValue instanceof Error && errValue.stack
109
+ ? errValue.stack
110
+ : messageFromCaughtUnknown(errValue));
111
+ }
112
+ }
113
+ export function mirrorSummarySeparator(logger) {
114
+ logger.out(`${Colors.DIM}${"═".repeat(60)}${Colors.RESET}`);
115
+ }
116
+ export function mirrorSummary(logger, stats, elapsedSeconds) {
117
+ const { out } = logger;
118
+ out(`${Colors.BOLD}📊 Summary${Colors.RESET} ${Colors.DIM}(completed in ${elapsedSeconds.toFixed(2)}s)${Colors.RESET}\n`);
119
+ out(` ${Colors.BOLD}Packages:${Colors.RESET}`);
120
+ out(` ${Colors.DIM}├─${Colors.RESET} Processed: ${Colors.GREEN}${stats.packagesProcessed}${Colors.RESET}`);
121
+ if (stats.packagesSkipped > 0) {
122
+ out(` ${Colors.DIM}├─${Colors.RESET} Skipped: ${Colors.GRAY}${stats.packagesSkipped}${Colors.RESET}`);
123
+ }
124
+ if (stats.packagesErrored > 0) {
125
+ out(` ${Colors.DIM}├─${Colors.RESET} Errors: ${Colors.YELLOW}${stats.packagesErrored}${Colors.RESET}`);
126
+ }
127
+ out(` ${Colors.DIM}└─${Colors.RESET} Total found: ${stats.packagesFound}\n`);
128
+ out(` ${Colors.BOLD}Exports:${Colors.RESET}`);
129
+ out(` ${Colors.DIM}├─${Colors.RESET} JS Modules: ${Colors.CYAN}${stats.totalJsModules}${Colors.RESET}`);
130
+ out(` ${Colors.DIM}├─${Colors.RESET} CSS Files: ${Colors.MAGENTA}${stats.totalCssExports}${Colors.RESET}`);
131
+ out(` ${Colors.DIM}└─${Colors.RESET} Total: ${Colors.BRIGHT_CYAN}${stats.totalExports}${Colors.RESET}\n`);
132
+ out(`${Colors.DIM}${"═".repeat(60)}${Colors.RESET}\n`);
133
+ }
134
+ export function mirrorFatalError(logger, caughtError) {
135
+ const { out, err: errLine } = logger;
136
+ out(`${Colors.YELLOW}Fatal error: ${messageFromCaughtUnknown(caughtError)}${Colors.RESET}`);
137
+ errLine(caughtError instanceof Error && caughtError.stack
138
+ ? caughtError.stack
139
+ : messageFromCaughtUnknown(caughtError));
140
+ }
@@ -0,0 +1,11 @@
1
+ import type { CliFs } from "#lib/core/application/ports/cli-io.port";
2
+ import { type AppError } from "#lib/core/domain/errors.domain";
3
+ import { type Result } from "#lib/core/domain/result.model";
4
+ export type ResolveMirrorPackageArgInput = {
5
+ readonly fs: CliFs;
6
+ readonly rootDir: string;
7
+ readonly packageArg: string | undefined;
8
+ readonly currentWorkingDirectory: string;
9
+ };
10
+ export declare function resolveMirrorPackageArgToRelative(input: ResolveMirrorPackageArgInput): Result<string | undefined, AppError>;
11
+ //# sourceMappingURL=resolve-mirror-package-arg.presenter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-mirror-package-arg.presenter.d.ts","sourceRoot":"","sources":["../../../../src/lib/mirror/presentation/resolve-mirror-package-arg.presenter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yCAAyC,CAAC;AACrE,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAErE,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;CAC1C,CAAC;AAMF,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,4BAA4B,GAClC,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,QAAQ,CAAC,CA2BtC"}
@@ -0,0 +1,27 @@
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
+ function normalizePathSegments(relPath) {
5
+ return relPath.split(path.sep).join("/").replace(/\\/g, "/");
6
+ }
7
+ export function resolveMirrorPackageArgToRelative(input) {
8
+ const { fs, rootDir, packageArg, currentWorkingDirectory } = input;
9
+ if (!packageArg) {
10
+ return ok(undefined);
11
+ }
12
+ const rootReal = fs.canonicalPathSync(path.resolve(rootDir));
13
+ const cwdReal = fs.canonicalPathSync(currentWorkingDirectory);
14
+ const resolved = path.isAbsolute(packageArg)
15
+ ? path.resolve(packageArg)
16
+ : path.resolve(cwdReal, packageArg);
17
+ const targetReal = fs.canonicalPathSync(resolved);
18
+ const rel = path.relative(rootReal, targetReal);
19
+ const normalized = normalizePathSegments(rel);
20
+ if (normalized.startsWith("..") ||
21
+ path.isAbsolute(normalized) ||
22
+ normalized === "" ||
23
+ normalized === ".") {
24
+ return err(appError("VALIDATION_ERROR", `Package path must be a subdirectory under monorepo root: ${rootDir}`));
25
+ }
26
+ return ok(normalized);
27
+ }