@codefast/cli 0.3.14-canary.2 → 0.3.15

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 (205) hide show
  1. package/README.md +8 -3
  2. package/dist/bootstrap/cli-application.module.mjs +18 -0
  3. package/dist/bootstrap/composition-root.mjs +14 -0
  4. package/dist/bootstrap/register-cli-command-trees.mjs +7 -0
  5. package/dist/{lib → domains}/arrange/application/use-cases/analyze-directory.use-case.mjs +12 -12
  6. package/dist/{lib → domains}/arrange/application/use-cases/prepare-arrange-workspace.use-case.mjs +19 -18
  7. package/dist/{lib → domains}/arrange/application/use-cases/run-arrange-sync.use-case.mjs +18 -18
  8. package/dist/{lib → domains}/arrange/application/use-cases/suggest-cn-groups.use-case.mjs +5 -5
  9. package/dist/domains/arrange/arrange.module.mjs +38 -0
  10. package/dist/domains/arrange/composition/tokens.mjs +17 -0
  11. package/dist/{lib/arrange/domain/arrange-analyze.service.mjs → domains/arrange/domain/arrange-analyze.domain-service.mjs} +1 -1
  12. package/dist/{lib/arrange/domain/arrange-grouping.service.mjs → domains/arrange/domain/arrange-grouping.domain-service.mjs} +2 -2
  13. package/dist/{lib → domains}/arrange/domain/ast/ast-helpers.helper.mjs +2 -2
  14. package/dist/{lib → domains}/arrange/domain/ast/ast-node.model.mjs +1 -1
  15. package/dist/{lib → domains}/arrange/domain/ast/collectors-cn.collector.mjs +1 -1
  16. package/dist/{lib → domains}/arrange/domain/ast/collectors-jsx.collector.mjs +1 -1
  17. package/dist/{lib → domains}/arrange/domain/ast/collectors-tv.collector.mjs +1 -1
  18. package/dist/{lib → domains}/arrange/domain/ast/targets.model.mjs +2 -2
  19. package/dist/{lib → domains}/arrange/domain/constants.domain.mjs +1 -1
  20. package/dist/{lib → domains}/arrange/domain/grouping.domain.mjs +1 -1
  21. package/dist/{lib → domains}/arrange/domain/imports.domain.mjs +1 -1
  22. package/dist/{lib → domains}/arrange/domain/source-text-formatters.formatter.mjs +2 -2
  23. package/dist/{lib/arrange/domain/tailwind-grouping.service.mjs → domains/arrange/domain/tailwind-grouping.domain-service.mjs} +5 -5
  24. package/dist/{lib → domains}/arrange/domain/tailwind-token-classifier.domain-service.mjs +1 -1
  25. package/dist/{lib → domains}/arrange/domain/tailwind-token.value-object.mjs +1 -1
  26. package/dist/{lib/arrange/application/services/arrange-file-processor.service.mjs → domains/arrange/infrastructure/adapters/arrange-file-processor.adapter.mjs} +8 -8
  27. package/dist/domains/arrange/infrastructure/adapters/arrange-target-path-resolver.adapter.mjs +247 -0
  28. package/dist/{lib/arrange/application/services/arrange-target-scanner.service.mjs → domains/arrange/infrastructure/adapters/arrange-target-scanner.adapter.mjs} +8 -8
  29. package/dist/{lib/arrange/adapters/secondary → domains/arrange/infrastructure/adapters}/domain-source-parser.adapter.mjs +10 -8
  30. package/dist/{lib/arrange/adapters/secondary → domains/arrange/infrastructure/adapters}/file-walker.adapter.mjs +8 -9
  31. package/dist/domains/arrange/infrastructure/typescript-ast-translator.mjs +580 -0
  32. package/dist/{lib/arrange/adapters/primary → domains/arrange/presentation}/cli/arrange.command.mjs +195 -54
  33. package/dist/{lib/arrange/presentation → domains/arrange/presentation/presenters}/arrange-analyze.presenter.mjs +26 -33
  34. package/dist/{lib/arrange/presentation → domains/arrange/presentation/presenters}/arrange-cli.schema.mjs +1 -1
  35. package/dist/{lib/tag/presentation/present-tag-sync-result.presenter.mjs → domains/arrange/presentation/presenters/arrange-sync.presenter.mjs} +12 -9
  36. package/dist/{lib/arrange/presentation → domains/arrange/presentation/presenters}/group-file-preview.presenter.mjs +46 -46
  37. package/dist/domains/config/composition/tokens.mjs +7 -0
  38. package/dist/{lib/config/infrastructure/config-schema.adapter.mjs → domains/config/domain/codefast-config.schema.mjs} +6 -6
  39. package/dist/{lib/config/infrastructure → domains/config/infrastructure/adapters}/config-loader.adapter.mjs +76 -77
  40. package/dist/{lib/config/infrastructure → domains/config/infrastructure/adapters}/config-warning-reporter.adapter.mjs +6 -6
  41. package/dist/domains/config/infrastructure/adapters/zod-codefast-config-schema.adapter.mjs +236 -0
  42. package/dist/domains/mirror/application/mirror-sync-cli-result.mjs +15 -0
  43. package/dist/{lib → domains}/mirror/application/use-cases/prepare-mirror-sync.use-case.mjs +14 -15
  44. package/dist/{lib → domains}/mirror/application/use-cases/run-mirror-sync.use-case.mjs +69 -54
  45. package/dist/{lib/mirror/contracts → domains/mirror/composition}/tokens.mjs +4 -3
  46. package/dist/{lib → domains}/mirror/domain/constants.domain.mjs +1 -1
  47. package/dist/{lib → domains}/mirror/domain/errors.domain.mjs +1 -1
  48. package/dist/{lib/mirror/application/services/generate-mirror-exports.service.mjs → domains/mirror/domain/generate-mirror-exports.domain-service.mjs} +2 -2
  49. package/dist/{lib → domains}/mirror/domain/package-display-name.policy.mjs +1 -1
  50. package/dist/{lib → domains}/mirror/domain/path-normalizer.value-object.mjs +1 -1
  51. package/dist/{lib/mirror/adapters/secondary → domains/mirror/infrastructure/adapters}/file-system-service.adapter.mjs +8 -8
  52. package/dist/domains/mirror/infrastructure/adapters/mirror-package-path-resolver.adapter.mjs +252 -0
  53. package/dist/{lib/mirror/adapters/secondary → domains/mirror/infrastructure/adapters}/mirror-sync-reporter.adapter.mjs +94 -15
  54. package/dist/{lib/mirror/adapters/secondary → domains/mirror/infrastructure/adapters}/package-repository.adapter.mjs +4 -4
  55. package/dist/{lib/mirror/adapters/secondary → domains/mirror/infrastructure/adapters}/sync-workspace-package.adapter.mjs +23 -46
  56. package/dist/{lib/mirror/infrastructure → domains/mirror/infrastructure/guards}/dirent-list.guard.mjs +1 -1
  57. package/dist/{lib → domains}/mirror/infrastructure/package-json-exports.repository.mjs +27 -27
  58. package/dist/domains/mirror/mirror.module.mjs +26 -0
  59. package/dist/{lib/mirror/adapters/primary → domains/mirror/presentation}/cli/mirror.command.mjs +83 -27
  60. package/dist/{lib/mirror/presentation → domains/mirror/presentation/presenters}/mirror-cli.schema.mjs +1 -4
  61. package/dist/domains/mirror/presentation/presenters/present-mirror-sync-progress.presenter.mjs +265 -0
  62. package/dist/domains/tag/application/ports/outbound/tag-eligible-workspace-paths.port.mjs +1 -0
  63. package/dist/domains/tag/application/ports/outbound/tag-since-writer.port.mjs +1 -0
  64. package/dist/domains/tag/application/ports/outbound/tag-target-path-resolver.port.mjs +1 -0
  65. package/dist/domains/tag/application/ports/outbound/tag-target-runner.port.mjs +1 -0
  66. package/dist/domains/tag/application/ports/outbound/tag-version-resolver.port.mjs +1 -0
  67. package/dist/domains/tag/application/ports/presenting/present-tag-sync-progress.presenter.mjs +1 -0
  68. package/dist/domains/tag/application/ports/presenting/present-tag-sync-result.presenter.mjs +1 -0
  69. package/dist/domains/tag/application/requests/tag-sync-execution-input.mjs +1 -0
  70. package/dist/domains/tag/application/requests/tag-sync.request.mjs +1 -0
  71. package/dist/{lib → domains}/tag/application/tag-sync-cli-result.mjs +3 -3
  72. package/dist/{lib → domains}/tag/application/use-cases/prepare-tag-sync.use-case.mjs +20 -24
  73. package/dist/{lib → domains}/tag/application/use-cases/run-tag-sync.use-case.mjs +123 -129
  74. package/dist/domains/tag/composition/tokens.mjs +13 -0
  75. package/dist/domains/tag/contracts/models.mjs +1 -0
  76. package/dist/domains/tag/domain/types.domain.mjs +1 -0
  77. package/dist/{lib/tag/adapters/secondary → domains/tag/infrastructure/adapters}/tag-since-writer.adapter.mjs +105 -105
  78. package/dist/{lib/tag/adapters/secondary/typescript-tree-walk.adapter.mjs → domains/tag/infrastructure/adapters/tag-target-path-resolver.adapter.mjs} +11 -9
  79. package/dist/domains/tag/infrastructure/adapters/tag-target-resolver.adapter.mjs +302 -0
  80. package/dist/domains/tag/infrastructure/adapters/tag-target-runner.adapter.mjs +259 -0
  81. package/dist/{lib/tag/adapters/secondary → domains/tag/infrastructure/adapters}/tag-version-resolver.adapter.mjs +6 -6
  82. package/dist/{lib/tag/adapters/primary → domains/tag/presentation}/cli/tag.command.mjs +67 -27
  83. package/dist/{lib/tag/presentation/tag-sync-progress-listener.presenter.mjs → domains/tag/presentation/presenters/present-tag-sync-progress.presenter.mjs} +14 -9
  84. package/dist/domains/tag/presentation/presenters/present-tag-sync-result.presenter.mjs +290 -0
  85. package/dist/{lib/tag/presentation → domains/tag/presentation/presenters}/tag-cli.schema.mjs +1 -1
  86. package/dist/domains/tag/tag.module.mjs +28 -0
  87. package/dist/program.mjs +3 -2
  88. package/dist/shell/application/cli-runtime.tokens.mjs +18 -0
  89. package/dist/shell/application/coordination/cli-executor.coordination.mjs +1 -0
  90. package/dist/shell/application/coordination/cli-schema-parsing.coordination.mjs +1 -0
  91. package/dist/shell/application/global-cli-options.model.mjs +5 -0
  92. package/dist/shell/application/ports/inbound/load-codefast-config.port.mjs +1 -0
  93. package/dist/shell/application/ports/outbound/cli-fs.port.mjs +1 -0
  94. package/dist/shell/application/ports/outbound/cli-logger.port.mjs +1 -0
  95. package/dist/shell/application/ports/outbound/cli-path.port.mjs +1 -0
  96. package/dist/shell/application/ports/outbound/cli-runtime.port.mjs +1 -0
  97. package/dist/shell/application/ports/outbound/cli-telemetry.port.mjs +1 -0
  98. package/dist/shell/application/ports/outbound/cli-verbose-diagnostics.port.mjs +1 -0
  99. package/dist/shell/application/ports/outbound/format-app-error.port.mjs +1 -0
  100. package/dist/shell/application/ports/outbound/global-cli-options-parse.port.mjs +1 -0
  101. package/dist/shell/application/ports/outbound/repo-root-resolver.port.mjs +1 -0
  102. package/dist/shell/application/ports/outbound/typescript-source-file-walker.port.mjs +1 -0
  103. package/dist/shell/application/ports/outbound/workspace-package-layout.port.mjs +1 -0
  104. package/dist/shell/application/ports/primary/command.port.mjs +1 -0
  105. package/dist/shell/application/services/cli-executor.service.mjs +267 -0
  106. package/dist/shell/application/services/schema-validator.service.mjs +236 -0
  107. package/dist/{lib/core/application → shell/application/use-cases}/load-codefast-config.use-case.mjs +11 -13
  108. package/dist/shell/composition/tokens.mjs +5 -0
  109. package/dist/shell/contracts/cli-command-slots.mjs +11 -0
  110. package/dist/{lib/core → shell}/domain/caught-unknown-message.value-object.mjs +1 -1
  111. package/dist/{lib/core → shell}/domain/cli-exit-codes.domain.mjs +1 -1
  112. package/dist/shell/domain/cli-positional-arg.value-object.mjs +6 -0
  113. package/dist/{lib/core → shell}/domain/errors.domain.mjs +1 -1
  114. package/dist/{lib/core → shell}/domain/result.model.mjs +1 -1
  115. package/dist/{lib/shared/source-code/domain/text-edit.model.mjs → shell/domain/source-text-edit.support.mjs} +2 -2
  116. package/dist/shell/infrastructure/adapters/cli-verbose-diagnostics.adapter.mjs +228 -0
  117. package/dist/{lib/tag/adapters/secondary/tag-target-resolver.adapter.mjs → shell/infrastructure/adapters/format-app-error.adapter.mjs} +16 -13
  118. package/dist/shell/infrastructure/adapters/global-cli-options-parser.adapter.mjs +233 -0
  119. package/dist/{lib/mirror/adapters/secondary/workspace-service.adapter.mjs → shell/infrastructure/adapters/repo-root-resolver.adapter.mjs} +20 -13
  120. package/dist/shell/infrastructure/adapters/typescript-source-file-walker.adapter.mjs +259 -0
  121. package/dist/shell/infrastructure/commander/commander-cli-host.adapter.mjs +69 -0
  122. package/dist/{lib/infrastructure/node-io.adapter.mjs → shell/infrastructure/node/node-cli-fs.adapter.mjs} +11 -47
  123. package/dist/{lib/arrange/adapters/secondary/workspace-resolver.adapter.mjs → shell/infrastructure/node/node-cli-logger.adapter.mjs} +11 -13
  124. package/dist/{lib/core/infrastructure/path.adapter.mjs → shell/infrastructure/node/node-cli-path.adapter.mjs} +1 -1
  125. package/dist/{lib/core/infrastructure/repo-root-resolver.adapter.mjs → shell/infrastructure/node/node-cli-runtime.adapter.mjs} +14 -13
  126. package/dist/shell/infrastructure/telemetry/cli-telemetry.adapter.mjs +280 -0
  127. package/dist/shell/infrastructure/workspace/node-pnpm-workspace-package-layout.adapter.mjs +385 -0
  128. package/dist/shell/shell.module.mjs +43 -0
  129. package/dist/shell/wiring/optional-cli-port-telemetry-activation.mjs +13 -0
  130. package/package.json +9 -7
  131. package/dist/lib/arrange/adapters/primary/cli/arrange.presentation.module.mjs +0 -14
  132. package/dist/lib/arrange/adapters/primary/cli/presentation.tokens.mjs +0 -5
  133. package/dist/lib/arrange/application/services/arrange-target-path-resolver.service.mjs +0 -21
  134. package/dist/lib/arrange/arrange.module.mjs +0 -31
  135. package/dist/lib/arrange/contracts/tokens.mjs +0 -15
  136. package/dist/lib/arrange/infrastructure/typescript-ast-translator.adapter.mjs +0 -355
  137. package/dist/lib/arrange/presentation/arrange-sync.presenter.mjs +0 -33
  138. package/dist/lib/bootstrap/composition-root.mjs +0 -33
  139. package/dist/lib/config/application/services/load-config.service.mjs +0 -17
  140. package/dist/lib/config/contracts/tokens.mjs +0 -6
  141. package/dist/lib/core/application/services/global-cli-options-parser.service.mjs +0 -9
  142. package/dist/lib/core/application/services/schema-validator.service.mjs +0 -17
  143. package/dist/lib/core/contracts/tokens.mjs +0 -10
  144. package/dist/lib/core/core.module.mjs +0 -9
  145. package/dist/lib/core/infrastructure/infrastructure.module.mjs +0 -30
  146. package/dist/lib/core/infrastructure/port-telemetry.decorator.mjs +0 -62
  147. package/dist/lib/core/infrastructure/verbose-diagnostics.policy.mjs +0 -9
  148. package/dist/lib/core/presentation/cli-executor.presenter.mjs +0 -42
  149. package/dist/lib/core/presentation/cli-schema.parser.mjs +0 -7
  150. package/dist/lib/core/presentation/format-app-error.presenter.mjs +0 -17
  151. package/dist/lib/core/presentation/presentation.module.mjs +0 -5
  152. package/dist/lib/infrastructure/workspace/repo-root-resolver.service.mjs +0 -21
  153. package/dist/lib/kernel/contracts/tokens.mjs +0 -5
  154. package/dist/lib/mirror/application/mirror-sync-json.format.mjs +0 -12
  155. package/dist/lib/mirror/application/services/mirror-package-arg-resolver.service.mjs +0 -20
  156. package/dist/lib/mirror/infrastructure/mirror-console-reporter.presenter.mjs +0 -99
  157. package/dist/lib/mirror/infrastructure/package-filter-resolver.service.mjs +0 -25
  158. package/dist/lib/mirror/infrastructure/workspace-packages.service.mjs +0 -158
  159. package/dist/lib/mirror/mirror.module.mjs +0 -25
  160. package/dist/lib/shared/source-code/infrastructure/typescript-source-file-walker.service.mjs +0 -33
  161. package/dist/lib/tag/adapters/primary/cli/presentation.tokens.mjs +0 -6
  162. package/dist/lib/tag/adapters/primary/cli/tag.presentation.module.mjs +0 -13
  163. package/dist/lib/tag/application/services/tag-cli-target-path-resolver.service.mjs +0 -9
  164. package/dist/lib/tag/application/services/tag-target-runner.service.mjs +0 -21
  165. package/dist/lib/tag/application/tag-sync-json.format.mjs +0 -14
  166. package/dist/lib/tag/contracts/tokens.mjs +0 -10
  167. package/dist/lib/tag/infrastructure/tag-target-candidates.adapter.mjs +0 -170
  168. package/dist/lib/tag/presentation/colors.presenter.mjs +0 -12
  169. package/dist/lib/tag/presentation/tag-sync.presenter.mjs +0 -61
  170. package/dist/lib/tag/tag.module.mjs +0 -23
  171. /package/dist/{lib/arrange/application/ports/domain-source-parser.port.mjs → domains/arrange/application/ports/inbound/analyze-directory.port.mjs} +0 -0
  172. /package/dist/{lib/arrange/application/ports/file-walker.port.mjs → domains/arrange/application/ports/inbound/prepare-arrange-workspace.port.mjs} +0 -0
  173. /package/dist/{lib/arrange/application/ports/group-file-preview.port.mjs → domains/arrange/application/ports/inbound/run-arrange-sync.port.mjs} +0 -0
  174. /package/dist/{lib/arrange/application/ports/workspace-resolver.port.mjs → domains/arrange/application/ports/inbound/suggest-cn-groups.port.mjs} +0 -0
  175. /package/dist/{lib/arrange/application/requests/analyze-directory.request.mjs → domains/arrange/application/ports/outbound/arrange-file-processor.port.mjs} +0 -0
  176. /package/dist/{lib/arrange/application/requests/arrange-sync.request.mjs → domains/arrange/application/ports/outbound/arrange-target-path-resolver.port.mjs} +0 -0
  177. /package/dist/{lib/arrange/application/requests/suggest-groups.request.mjs → domains/arrange/application/ports/outbound/arrange-target-scanner.port.mjs} +0 -0
  178. /package/dist/{lib/arrange/contracts/analyze-report-presenter.contract.mjs → domains/arrange/application/ports/outbound/domain-source-parser.port.mjs} +0 -0
  179. /package/dist/{lib/arrange/contracts/models.mjs → domains/arrange/application/ports/outbound/file-walker.port.mjs} +0 -0
  180. /package/dist/{lib/arrange/contracts/services.contract.mjs → domains/arrange/application/ports/presenting/present-analyze-report.presenter.mjs} +0 -0
  181. /package/dist/{lib/arrange/domain/types.domain.mjs → domains/arrange/application/ports/presenting/present-arrange-sync-result.presenter.mjs} +0 -0
  182. /package/dist/{lib/config/application/ports/config-loader.port.mjs → domains/arrange/application/ports/presenting/present-group-file-preview.presenter.mjs} +0 -0
  183. /package/dist/{lib/config/application/ports/config-warning-reporter.port.mjs → domains/arrange/application/requests/analyze-directory.request.mjs} +0 -0
  184. /package/dist/{lib/config/domain/schema.domain.mjs → domains/arrange/application/requests/arrange-sync.request.mjs} +0 -0
  185. /package/dist/{lib/core/application/ports/cli-io.port.mjs → domains/arrange/application/requests/suggest-groups.request.mjs} +0 -0
  186. /package/dist/{lib/mirror → domains/arrange}/contracts/models.mjs +0 -0
  187. /package/dist/{lib/mirror → domains/arrange}/domain/types.domain.mjs +0 -0
  188. /package/dist/{lib/core/application/ports/path.port.mjs → domains/config/application/ports/outbound/codefast-config-schema.port.mjs} +0 -0
  189. /package/dist/{lib/core/application/ports/repo-root-resolver.port.mjs → domains/config/application/ports/outbound/config-loader.port.mjs} +0 -0
  190. /package/dist/{lib/core/application/ports/runtime.port.mjs → domains/config/application/ports/outbound/config-warning-reporter.port.mjs} +0 -0
  191. /package/dist/{lib/kernel/contracts/cli-command.contract.mjs → domains/config/domain/schema.domain.mjs} +0 -0
  192. /package/dist/{lib/mirror/application/ports/file-system-service.port.mjs → domains/mirror/application/ports/inbound/prepare-mirror-sync.port.mjs} +0 -0
  193. /package/dist/{lib/mirror/application/ports/mirror-sync-reporter.port.mjs → domains/mirror/application/ports/inbound/run-mirror-sync.port.mjs} +0 -0
  194. /package/dist/{lib/mirror/application/ports/package-repository.port.mjs → domains/mirror/application/ports/outbound/file-system-service.port.mjs} +0 -0
  195. /package/dist/{lib/mirror/application/ports/sync-workspace-package.port.mjs → domains/mirror/application/ports/outbound/mirror-package-path.port.mjs} +0 -0
  196. /package/dist/{lib/mirror/application/ports/workspace-service.port.mjs → domains/mirror/application/ports/outbound/mirror-sync-reporter.port.mjs} +0 -0
  197. /package/dist/{lib/mirror/application/requests/mirror-sync.request.mjs → domains/mirror/application/ports/outbound/package-repository.port.mjs} +0 -0
  198. /package/dist/{lib/tag/application/ports/tag-since-writer.port.mjs → domains/mirror/application/ports/outbound/sync-workspace-package.port.mjs} +0 -0
  199. /package/dist/{lib/tag/application/ports/tag-version-resolver.port.mjs → domains/mirror/application/ports/presenting/present-mirror-sync-progress.presenter.mjs} +0 -0
  200. /package/dist/{lib/tag/application/ports/target-resolver.port.mjs → domains/mirror/application/requests/mirror-sync-execution-input.mjs} +0 -0
  201. /package/dist/{lib/tag/application/ports/typescript-tree-walk.port.mjs → domains/mirror/application/requests/mirror-sync.request.mjs} +0 -0
  202. /package/dist/{lib/tag → domains/mirror}/contracts/models.mjs +0 -0
  203. /package/dist/{lib/tag → domains/mirror}/domain/types.domain.mjs +0 -0
  204. /package/dist/{lib/tag/application/requests/tag-sync.request.mjs → domains/tag/application/ports/inbound/prepare-tag-sync.port.mjs} +0 -0
  205. /package/dist/{lib/tag/contracts/tag-sync-result-presenter.contract.mjs → domains/tag/application/ports/inbound/run-tag-sync.port.mjs} +0 -0
@@ -1,13 +1,11 @@
1
- import { CliLoggerToken, CliRuntimeToken } from "../../../../core/contracts/tokens.mjs";
2
- import { parseWithCliSchema } from "../../../../core/presentation/cli-schema.parser.mjs";
3
- import { consumeCliAppError } from "../../../../core/presentation/cli-executor.presenter.mjs";
4
- import { exitCodeForTagSyncResult } from "../../../application/tag-sync-cli-result.mjs";
5
- import { formatTagSyncJsonOutput } from "../../../application/tag-sync-json.format.mjs";
6
- import { PrepareTagSyncUseCaseToken, RunTagSyncUseCaseToken } from "../../../contracts/tokens.mjs";
7
- import { tagSyncRunRequestSchema } from "../../../presentation/tag-cli.schema.mjs";
8
- import { PresentTagSyncResultPresenterToken, TagSyncProgressListenerToken } from "./presentation.tokens.mjs";
1
+ import { CliExecutorToken, CliLoggerPortToken, CliRuntimeToken, CliSchemaParsingToken } from "../../../../shell/application/cli-runtime.tokens.mjs";
2
+ import { PrepareTagSyncUseCaseToken, PresentTagSyncProgressPresenterToken, PresentTagSyncResultPresenterToken, RunTagSyncUseCaseToken } from "../../composition/tokens.mjs";
3
+ import { exitCodeForTagSyncResult } from "../../application/tag-sync-cli-result.mjs";
4
+ import { CLI_COMMAND_SLOT_NAME } from "../../../../shell/contracts/cli-command-slots.mjs";
5
+ import { readOptionalPositionalArg } from "../../../../shell/domain/cli-positional-arg.value-object.mjs";
6
+ import { tagSyncRunRequestSchema } from "../presenters/tag-cli.schema.mjs";
9
7
  import { inject, injectable } from "@codefast/di";
10
- //#region src/lib/tag/adapters/primary/cli/tag.command.ts
8
+ //#region src/domains/tag/presentation/cli/tag.command.ts
11
9
  function toPrimitive(input, hint) {
12
10
  if (typeof input !== "object" || input === null) return input;
13
11
  var prim = input[Symbol.toPrimitive];
@@ -219,12 +217,14 @@ function _apply_decs_2311(targetClass, classDecs, memberDecs, classDecsHaveThis,
219
217
  }
220
218
  let _dec, _initClass;
221
219
  _dec = injectable([
222
- inject(CliLoggerToken),
220
+ inject(CliLoggerPortToken),
223
221
  inject(CliRuntimeToken),
224
222
  inject(PrepareTagSyncUseCaseToken),
225
223
  inject(RunTagSyncUseCaseToken),
226
- inject(TagSyncProgressListenerToken),
227
- inject(PresentTagSyncResultPresenterToken)
224
+ inject(PresentTagSyncProgressPresenterToken),
225
+ inject(PresentTagSyncResultPresenterToken),
226
+ inject(CliSchemaParsingToken),
227
+ inject(CliExecutorToken)
228
228
  ]);
229
229
  let _TagCommand;
230
230
  (class {
@@ -232,33 +232,65 @@ let _TagCommand;
232
232
  runtime;
233
233
  prepareTagSync;
234
234
  runTagSync;
235
- tagProgressListener;
235
+ tagProgressPresenter;
236
236
  presentSyncCliResult;
237
+ schemaValidation;
238
+ cliExecutor;
237
239
  static {
238
240
  ({c: [_TagCommand, _initClass]} = _apply_decs_2311(this, [_dec], []));
239
241
  }
240
- constructor(logger, runtime, prepareTagSync, runTagSync, tagProgressListener, presentSyncCliResult) {
242
+ constructor(logger, runtime, prepareTagSync, runTagSync, tagProgressPresenter, presentSyncCliResult, schemaValidation, cliExecutor) {
241
243
  this.logger = logger;
242
244
  this.runtime = runtime;
243
245
  this.prepareTagSync = prepareTagSync;
244
246
  this.runTagSync = runTagSync;
245
- this.tagProgressListener = tagProgressListener;
247
+ this.tagProgressPresenter = tagProgressPresenter;
246
248
  this.presentSyncCliResult = presentSyncCliResult;
249
+ this.schemaValidation = schemaValidation;
250
+ this.cliExecutor = cliExecutor;
247
251
  }
248
- name = "tag";
249
- description = "Add @since <version> JSDoc tags to exported declarations";
250
- register(program) {
251
- program.command(this.name).alias("annotate").description(this.description).argument("[target]", "Directory or file to annotate (default: auto-discover workspace packages)").option("--dry-run", "Show summary without writing files", false).option("--json", "Print one JSON summary on stdout (suppresses human progress)", false).action(this.execute.bind(this));
252
+ get definition() {
253
+ return {
254
+ name: CLI_COMMAND_SLOT_NAME.tag,
255
+ description: "Add @since <version> JSDoc tags to exported declarations",
256
+ aliases: ["annotate"],
257
+ route: [
258
+ {
259
+ kind: "optionalPositional",
260
+ argumentTemplate: "[target]",
261
+ helpBlurb: "Directory or file to annotate (default: auto-discover workspace packages)"
262
+ },
263
+ {
264
+ kind: "booleanFlag",
265
+ flagPhrase: "--dry-run",
266
+ helpBlurb: "Show summary without writing files",
267
+ whenUnsetUses: false
268
+ },
269
+ {
270
+ kind: "booleanFlag",
271
+ flagPhrase: "--json",
272
+ helpBlurb: "Print one JSON summary on stdout (suppresses human progress)",
273
+ whenUnsetUses: false
274
+ }
275
+ ],
276
+ action: async (positionalArguments, localOptionRecord) => {
277
+ const typedOptionsCarrier = localOptionRecord;
278
+ await this.runAnnotatedTagVerb(readOptionalPositionalArg(positionalArguments[0]), {
279
+ dryRun: typedOptionsCarrier.dryRun,
280
+ json: typedOptionsCarrier.json
281
+ });
282
+ }
283
+ };
252
284
  }
253
- async execute(target, options, _command) {
285
+ async runAnnotatedTagVerb(rawTargetPiece, options) {
254
286
  const prelude = await this.prepareTagSync.execute({
255
287
  currentWorkingDirectory: this.runtime.cwd(),
256
- rawTarget: target
288
+ rawTarget: rawTargetPiece
257
289
  });
258
- if (!consumeCliAppError(this.logger, prelude)) return;
290
+ if (!this.cliExecutor.consumeCliAppError(prelude)) return;
259
291
  const { rootDir, config, resolvedTargetPath } = prelude.value;
260
292
  const tagConfig = config.tag ?? {};
261
- const parsed = parseWithCliSchema(tagSyncRunRequestSchema, {
293
+ const parsed = this.schemaValidation.parseWithSchema(tagSyncRunRequestSchema, {
262
294
  rootDir,
263
295
  write: !options.dryRun,
264
296
  json: options.json,
@@ -266,17 +298,25 @@ let _TagCommand;
266
298
  skipPackages: tagConfig.skipPackages,
267
299
  config: tagConfig
268
300
  });
269
- if (!consumeCliAppError(this.logger, parsed)) return;
301
+ if (!this.cliExecutor.consumeCliAppError(parsed)) return;
270
302
  const tagOutcome = await this.runTagSync.execute({
271
303
  ...parsed.value,
272
- listener: parsed.value.json ? void 0 : this.tagProgressListener
304
+ listener: parsed.value.json ? void 0 : this.tagProgressPresenter
273
305
  });
274
- if (!consumeCliAppError(this.logger, tagOutcome)) return;
306
+ if (!this.cliExecutor.consumeCliAppError(tagOutcome)) return;
275
307
  if (parsed.value.json) {
276
- this.logger.out(formatTagSyncJsonOutput(tagOutcome.value, rootDir));
308
+ this.logger.out(this.formatTagSyncJsonOutput(tagOutcome.value, rootDir));
277
309
  this.runtime.setExitCode(exitCodeForTagSyncResult(tagOutcome.value));
278
310
  } else this.runtime.setExitCode(this.presentSyncCliResult.present(tagOutcome.value, rootDir));
279
311
  }
312
+ formatTagSyncJsonOutput(result, rootDir) {
313
+ return JSON.stringify({
314
+ schemaVersion: 1,
315
+ ok: result.hookError === null,
316
+ cwd: rootDir,
317
+ result
318
+ });
319
+ }
280
320
  static {
281
321
  _initClass();
282
322
  }
@@ -1,7 +1,6 @@
1
- import { CliLoggerToken } from "../../core/contracts/tokens.mjs";
2
- import { formatProgress } from "./tag-sync.presenter.mjs";
1
+ import { CliLoggerPortToken } from "../../../../shell/application/cli-runtime.tokens.mjs";
3
2
  import { inject, injectable } from "@codefast/di";
4
- //#region src/lib/tag/presentation/tag-sync-progress-listener.presenter.ts
3
+ //#region src/domains/tag/presentation/presenters/present-tag-sync-progress.presenter.ts
5
4
  function toPrimitive(input, hint) {
6
5
  if (typeof input !== "object" || input === null) return input;
7
6
  var prim = input[Symbol.toPrimitive];
@@ -212,32 +211,38 @@ function _apply_decs_2311(targetClass, classDecs, memberDecs, classDecsHaveThis,
212
211
  };
213
212
  }
214
213
  let _dec, _initClass;
215
- _dec = injectable([inject(CliLoggerToken)]);
216
- let _TagSyncProgressListener;
214
+ _dec = injectable([inject(CliLoggerPortToken)]);
215
+ let _PresentTagSyncProgressPresenter;
217
216
  (class {
218
217
  logger;
219
218
  static {
220
- ({c: [_TagSyncProgressListener, _initClass]} = _apply_decs_2311(this, [_dec], []));
219
+ ({c: [_PresentTagSyncProgressPresenter, _initClass]} = _apply_decs_2311(this, [_dec], []));
221
220
  }
222
221
  constructor(logger) {
223
222
  this.logger = logger;
224
223
  }
225
224
  onTargetStarted(target) {
226
- this.logger.out(formatProgress({
225
+ this.logger.out(this.formatProgress({
227
226
  type: "target-started",
228
227
  target
229
228
  }));
230
229
  }
231
230
  onTargetCompleted(target, result) {
232
- this.logger.out(formatProgress({
231
+ this.logger.out(this.formatProgress({
233
232
  type: "target-completed",
234
233
  target,
235
234
  result
236
235
  }));
237
236
  }
237
+ formatProgress(event) {
238
+ const targetDisplayName = (target) => target.packageName ?? target.rootRelativeTargetPath;
239
+ if (event.type === "target-started") return `[tag] Processing ${targetDisplayName(event.target)}...`;
240
+ const changedFiles = event.result.result?.filesChanged ?? 0;
241
+ return `[tag] Done ${targetDisplayName(event.target)} (${changedFiles} changes)`;
242
+ }
238
243
  static {
239
244
  _initClass();
240
245
  }
241
246
  });
242
247
  //#endregion
243
- export { _TagSyncProgressListener as TagSyncProgressListener };
248
+ export { _PresentTagSyncProgressPresenter as PresentTagSyncProgressPresenter };
@@ -0,0 +1,290 @@
1
+ import { CliLoggerPortToken } from "../../../../shell/application/cli-runtime.tokens.mjs";
2
+ import "../../../../shell/domain/cli-exit-codes.domain.mjs";
3
+ import { exitCodeForTagSyncResult } from "../../application/tag-sync-cli-result.mjs";
4
+ import { inject, injectable } from "@codefast/di";
5
+ //#region src/domains/tag/presentation/presenters/present-tag-sync-result.presenter.ts
6
+ function toPrimitive(input, hint) {
7
+ if (typeof input !== "object" || input === null) return input;
8
+ var prim = input[Symbol.toPrimitive];
9
+ if (prim !== void 0) {
10
+ var res = prim.call(input, hint || "default");
11
+ if (typeof res !== "object") return res;
12
+ throw new TypeError("@@toPrimitive must return a primitive value.");
13
+ }
14
+ return (hint === "string" ? String : Number)(input);
15
+ }
16
+ function toPropertyKey(arg) {
17
+ var key = toPrimitive(arg, "string");
18
+ return typeof key === "symbol" ? key : String(key);
19
+ }
20
+ function checkInRHS(value) {
21
+ if (Object(value) !== value) throw TypeError("right-hand side of 'in' should be an object, got " + (value !== null ? typeof value : "null"));
22
+ return value;
23
+ }
24
+ function setFunctionName(fn, name, prefix) {
25
+ if (typeof name === "symbol") {
26
+ name = name.description;
27
+ name = name ? "[" + name + "]" : "";
28
+ }
29
+ try {
30
+ Object.defineProperty(fn, "name", {
31
+ configurable: true,
32
+ value: prefix ? prefix + " " + name : name
33
+ });
34
+ } catch (_) {}
35
+ return fn;
36
+ }
37
+ function _apply_decs_2311(targetClass, classDecs, memberDecs, classDecsHaveThis, instanceBrand, parentClass) {
38
+ var symbolMetadata = Symbol.metadata || Symbol.for("Symbol.metadata");
39
+ var defineProperty = Object.defineProperty;
40
+ var create = Object.create;
41
+ var metadata;
42
+ var existingNonFields = [create(null), create(null)];
43
+ var hasClassDecs = classDecs.length;
44
+ var _;
45
+ function createRunInitializers(initializers, useStaticThis, hasValue) {
46
+ return function(thisArg, value) {
47
+ if (useStaticThis) {
48
+ value = thisArg;
49
+ thisArg = targetClass;
50
+ }
51
+ for (var i = 0; i < initializers.length; i++) value = initializers[i].apply(thisArg, hasValue ? [value] : []);
52
+ return hasValue ? value : thisArg;
53
+ };
54
+ }
55
+ function assertCallable(fn, hint1, hint2, throwUndefined) {
56
+ if (typeof fn !== "function") {
57
+ if (throwUndefined || fn !== void 0) throw new TypeError(hint1 + " must " + (hint2 || "be") + " a function" + (throwUndefined ? "" : " or undefined"));
58
+ }
59
+ return fn;
60
+ }
61
+ function applyDec(Class, decInfo, decoratorsHaveThis, name, kind, initializers, ret, isStatic, isPrivate, isField, hasPrivateBrand) {
62
+ function assertInstanceIfPrivate(target) {
63
+ if (!hasPrivateBrand(target)) throw new TypeError("Attempted to access private element on non-instance");
64
+ }
65
+ var decs = [].concat(decInfo[0]);
66
+ var decVal = decInfo[3];
67
+ var isClass = !ret;
68
+ var isAccessor = kind === 1;
69
+ var isGetter = kind === 3;
70
+ var isSetter = kind === 4;
71
+ var isMethod = kind === 2;
72
+ function bindPropCall(name, useStaticThis, before) {
73
+ return function(_this, value) {
74
+ if (useStaticThis) {
75
+ value = _this;
76
+ _this = Class;
77
+ }
78
+ if (before) before(_this);
79
+ return desc[name].call(_this, value);
80
+ };
81
+ }
82
+ var desc1 = {};
83
+ var init = [];
84
+ var key = isGetter ? "get" : isSetter || isAccessor ? "set" : "value";
85
+ if (!isClass) {
86
+ if (isPrivate) {
87
+ if (isField || isAccessor) desc1 = {
88
+ get: setFunctionName(function() {
89
+ return decVal(this);
90
+ }, name, "get"),
91
+ set: function(value) {
92
+ decInfo[4](this, value);
93
+ }
94
+ };
95
+ else desc1[key] = decVal;
96
+ if (!isField) setFunctionName(desc1[key], name, isMethod ? "" : key);
97
+ } else if (!isField) desc1 = Object.getOwnPropertyDescriptor(Class, name);
98
+ if (!isField && !isPrivate) {
99
+ _ = existingNonFields[+isStatic][name];
100
+ if (_ && (_ ^ kind) !== 7) throw new Error("Decorating two elements with the same name (" + desc1[key].name + ") is not supported yet");
101
+ existingNonFields[+isStatic][name] = kind < 3 ? 1 : kind;
102
+ }
103
+ }
104
+ var newValue = Class;
105
+ for (var i = decs.length - 1; i >= 0; i -= decoratorsHaveThis ? 2 : 1) {
106
+ var dec = assertCallable(decs[i], "A decorator", "be", true);
107
+ var decThis = decoratorsHaveThis ? decs[i - 1] : void 0;
108
+ var decoratorFinishedRef = {};
109
+ var ctx = {
110
+ kind: [
111
+ "field",
112
+ "accessor",
113
+ "method",
114
+ "getter",
115
+ "setter",
116
+ "class"
117
+ ][kind],
118
+ name,
119
+ metadata,
120
+ addInitializer: (function(decoratorFinishedRef, initializer) {
121
+ if (decoratorFinishedRef.v) throw new TypeError("attempted to call addInitializer after decoration was finished");
122
+ assertCallable(initializer, "An initializer", "be", true);
123
+ initializers.push(initializer);
124
+ }).bind(null, decoratorFinishedRef)
125
+ };
126
+ if (isClass) {
127
+ _ = dec.call(decThis, newValue, ctx);
128
+ decoratorFinishedRef.v = 1;
129
+ if (assertCallable(_, "class decorators", "return")) newValue = _;
130
+ continue;
131
+ }
132
+ ctx.static = isStatic;
133
+ ctx.private = isPrivate;
134
+ _ = ctx.access = { has: isPrivate ? hasPrivateBrand.bind() : function(target) {
135
+ return name in target;
136
+ } };
137
+ if (!isSetter) _.get = isPrivate ? isMethod ? function(_this) {
138
+ assertInstanceIfPrivate(_this);
139
+ return desc1.value;
140
+ } : bindPropCall("get", 0, assertInstanceIfPrivate) : function(target) {
141
+ return target[name];
142
+ };
143
+ if (!isMethod && !isGetter) _.set = isPrivate ? bindPropCall("set", 0, assertInstanceIfPrivate) : function(target, value) {
144
+ target[name] = value;
145
+ };
146
+ newValue = dec.call(decThis, isAccessor ? {
147
+ get: desc1.get,
148
+ set: desc1.set
149
+ } : desc1[key], ctx);
150
+ decoratorFinishedRef.v = 1;
151
+ if (isAccessor) {
152
+ if (typeof newValue === "object" && newValue) {
153
+ if (_ = assertCallable(newValue.get, "accessor.get")) desc1.get = _;
154
+ if (_ = assertCallable(newValue.set, "accessor.set")) desc1.set = _;
155
+ if (_ = assertCallable(newValue.init, "accessor.init")) init.unshift(_);
156
+ } else if (newValue !== void 0) throw new TypeError("accessor decorators must return an object with get, set, or init properties or undefined");
157
+ } else if (assertCallable(newValue, (isField ? "field" : "method") + " decorators", "return")) if (isField) init.unshift(newValue);
158
+ else desc1[key] = newValue;
159
+ }
160
+ if (kind < 2) ret.push(createRunInitializers(init, isStatic, 1), createRunInitializers(initializers, isStatic, 0));
161
+ if (!isField && !isClass) if (isPrivate) if (isAccessor) ret.splice(-1, 0, bindPropCall("get", isStatic), bindPropCall("set", isStatic));
162
+ else ret.push(isMethod ? desc1[key] : assertCallable.call.bind(desc1[key]));
163
+ else defineProperty(Class, name, desc1);
164
+ return newValue;
165
+ }
166
+ function applyMemberDecs() {
167
+ var ret = [];
168
+ var protoInitializers;
169
+ var staticInitializers;
170
+ var pushInitializers = function(initializers) {
171
+ if (initializers) ret.push(createRunInitializers(initializers));
172
+ };
173
+ var applyMemberDecsOfKind = function(isStatic, isField) {
174
+ for (var i = 0; i < memberDecs.length; i++) {
175
+ var decInfo = memberDecs[i];
176
+ var kind = decInfo[1];
177
+ var kindOnly = kind & 7;
178
+ if ((kind & 8) == isStatic && !kindOnly == isField) {
179
+ var name = decInfo[2];
180
+ var isPrivate = !!decInfo[3];
181
+ var decoratorsHaveThis = kind & 16;
182
+ applyDec(isStatic ? targetClass : targetClass.prototype, decInfo, decoratorsHaveThis, isPrivate ? "#" + name : toPropertyKey(name), kindOnly, kindOnly < 2 ? [] : isStatic ? staticInitializers = staticInitializers || [] : protoInitializers = protoInitializers || [], ret, !!isStatic, isPrivate, isField, isStatic && isPrivate ? function(_) {
183
+ return checkInRHS(_) === targetClass;
184
+ } : instanceBrand);
185
+ }
186
+ }
187
+ };
188
+ applyMemberDecsOfKind(8, 0);
189
+ applyMemberDecsOfKind(0, 0);
190
+ applyMemberDecsOfKind(8, 1);
191
+ applyMemberDecsOfKind(0, 1);
192
+ pushInitializers(protoInitializers);
193
+ pushInitializers(staticInitializers);
194
+ return ret;
195
+ }
196
+ function defineMetadata(Class) {
197
+ return defineProperty(Class, symbolMetadata, {
198
+ configurable: true,
199
+ enumerable: true,
200
+ value: metadata
201
+ });
202
+ }
203
+ if (parentClass !== void 0) metadata = parentClass[symbolMetadata];
204
+ metadata = create(metadata == null ? null : metadata);
205
+ _ = applyMemberDecs();
206
+ if (!hasClassDecs) defineMetadata(targetClass);
207
+ return {
208
+ e: _,
209
+ get c() {
210
+ var initializers = [];
211
+ return hasClassDecs && [defineMetadata(targetClass = applyDec(targetClass, [classDecs], classDecsHaveThis, targetClass.name, 5, initializers)), createRunInitializers(initializers, 1)];
212
+ }
213
+ };
214
+ }
215
+ function _identity(x) {
216
+ return x;
217
+ }
218
+ let _dec, _initClass;
219
+ _dec = injectable([inject(CliLoggerPortToken)]);
220
+ let _PresentTagSyncResultPresenter;
221
+ new class extends _identity {
222
+ constructor() {
223
+ super(_PresentTagSyncResultPresenter), _initClass();
224
+ }
225
+ static [class PresentTagSyncResultPresenter {
226
+ logger;
227
+ static {
228
+ ({c: [_PresentTagSyncResultPresenter, _initClass]} = _apply_decs_2311(this, [_dec], []));
229
+ }
230
+ constructor(logger) {
231
+ this.logger = logger;
232
+ }
233
+ present(result, rootDir) {
234
+ this.logger.out(this.formatTargetTable(result.selectedTargets, rootDir));
235
+ if (result.selectedTargets.length === 0) {
236
+ this.logger.err("No packages found in workspace. Check your pnpm-workspace.yaml or provide an explicit target path.");
237
+ return 1;
238
+ }
239
+ const warningsAndErrorsSection = this.formatWarningsAndErrors(result);
240
+ if (warningsAndErrorsSection) this.logger.err(warningsAndErrorsSection);
241
+ this.logger.out(this.formatSummary(result));
242
+ return exitCodeForTagSyncResult(result);
243
+ }
244
+ withColorizedLine(line, colorCode) {
245
+ return `${colorCode}${line}${_PresentTagSyncResultPresenter.colorReset}`;
246
+ }
247
+ warningsAndErrorsFromResult(result) {
248
+ const entries = [];
249
+ for (const targetResult of result.targetResults) if (targetResult.runError) entries.push(targetResult.runError);
250
+ if (result.hookError) entries.push(result.hookError);
251
+ return entries;
252
+ }
253
+ formatTargetTable(targets, rootDir) {
254
+ const packageColumnWidth = Math.max(7, ...targets.map((target) => (target.packageName ?? "-").length));
255
+ const pathColumnWidth = Math.max(4, ...targets.map((target) => target.rootRelativeTargetPath.length));
256
+ const lines = [];
257
+ lines.push(`[tag] Root: ${rootDir}`);
258
+ lines.push(`[tag] Resolved targets: ${targets.length}`);
259
+ lines.push("[tag] Targets:");
260
+ lines.push(` ${"package".padEnd(packageColumnWidth)} ${"path".padEnd(pathColumnWidth)} source`);
261
+ lines.push(` ${"-".repeat(packageColumnWidth)} ${"-".repeat(pathColumnWidth)} ${"-".repeat(6)}`);
262
+ for (const target of targets) lines.push(` ${(target.packageName ?? "-").padEnd(packageColumnWidth)} ${target.rootRelativeTargetPath.padEnd(pathColumnWidth)} ${target.source}`);
263
+ return lines.join("\n");
264
+ }
265
+ formatWarningsAndErrors(result) {
266
+ const entries = this.warningsAndErrorsFromResult(result);
267
+ if (entries.length === 0) return null;
268
+ const lines = [this.withColorizedLine("⚠️ Warnings & Errors", _PresentTagSyncResultPresenter.colors.yellow)];
269
+ for (const entry of entries) lines.push(this.withColorizedLine(`- ${entry}`, _PresentTagSyncResultPresenter.colors.red));
270
+ return lines.join("\n");
271
+ }
272
+ formatSummary(result) {
273
+ const isDryRun = result.mode === "dry-run";
274
+ const summaryPrefix = isDryRun ? "[tag:dry-run]" : "[tag]";
275
+ const versionSuffix = result.versionSummary === "mixed" && result.distinctVersions.length > 0 ? ` [${result.distinctVersions.join(", ")}]` : "";
276
+ const summaryColor = result.targetResults.some((targetResult) => targetResult.runError !== null) || result.hookError !== null ? _PresentTagSyncResultPresenter.colors.red : isDryRun ? _PresentTagSyncResultPresenter.colors.yellow : _PresentTagSyncResultPresenter.colors.green;
277
+ const lines = [this.withColorizedLine(`${summaryPrefix} version=${result.versionSummary}${versionSuffix} files=${result.filesChanged}/${result.filesScanned} declarations=${result.taggedDeclarations}`, summaryColor)];
278
+ if (result.skippedPackages.length > 0) lines.push(`[tag] Skipped: ${result.skippedPackages.length} package(s)`);
279
+ return lines.join("\n");
280
+ }
281
+ }];
282
+ colorReset = "\x1B[0m";
283
+ colors = {
284
+ red: "\x1B[31m",
285
+ green: "\x1B[32m",
286
+ yellow: "\x1B[33m"
287
+ };
288
+ }();
289
+ //#endregion
290
+ export { _PresentTagSyncResultPresenter as PresentTagSyncResultPresenter };
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- //#region src/lib/tag/presentation/tag-cli.schema.ts
2
+ //#region src/domains/tag/presentation/presenters/tag-cli.schema.ts
3
3
  const tagSyncRunRequestSchema = z.object({
4
4
  rootDir: z.string().min(1),
5
5
  write: z.boolean(),
@@ -0,0 +1,28 @@
1
+ import { createOptionalCliPortTelemetryActivation } from "../../shell/wiring/optional-cli-port-telemetry-activation.mjs";
2
+ import { ShellInfrastructureModule } from "../../shell/shell.module.mjs";
3
+ import { TagTargetResolverAdapter as _TagTargetResolverAdapter } from "./infrastructure/adapters/tag-target-resolver.adapter.mjs";
4
+ import { TagSinceWriterAdapter as _TagSinceWriterAdapter } from "./infrastructure/adapters/tag-since-writer.adapter.mjs";
5
+ import { TagVersionResolverAdapter as _TagVersionResolverAdapter } from "./infrastructure/adapters/tag-version-resolver.adapter.mjs";
6
+ import { TagTargetPathResolverAdapter as _TagTargetPathResolverAdapter } from "./infrastructure/adapters/tag-target-path-resolver.adapter.mjs";
7
+ import { PrepareTagSyncUseCaseToken, PresentTagSyncProgressPresenterToken, PresentTagSyncResultPresenterToken, RunTagSyncUseCaseToken, TagEligibleWorkspacePathsPortToken, TagSinceWriterPortToken, TagTargetPathResolverPortToken, TagTargetRunnerPortToken, TagVersionResolverPortToken } from "./composition/tokens.mjs";
8
+ import { TagTargetRunnerAdapter as _TagTargetRunnerAdapter } from "./infrastructure/adapters/tag-target-runner.adapter.mjs";
9
+ import { PrepareTagSyncUseCase as _PrepareTagSyncUseCase } from "./application/use-cases/prepare-tag-sync.use-case.mjs";
10
+ import { RunTagSyncUseCase as _RunTagSyncUseCase } from "./application/use-cases/run-tag-sync.use-case.mjs";
11
+ import { PresentTagSyncResultPresenter as _PresentTagSyncResultPresenter } from "./presentation/presenters/present-tag-sync-result.presenter.mjs";
12
+ import { PresentTagSyncProgressPresenter as _PresentTagSyncProgressPresenter } from "./presentation/presenters/present-tag-sync-progress.presenter.mjs";
13
+ import { Module } from "@codefast/di";
14
+ //#region src/domains/tag/tag.module.ts
15
+ const TagModule = Module.create("cli-tag", (moduleBuilder) => {
16
+ moduleBuilder.import(ShellInfrastructureModule);
17
+ moduleBuilder.bind(TagEligibleWorkspacePathsPortToken).to(_TagTargetResolverAdapter).singleton().onActivation(createOptionalCliPortTelemetryActivation(TagEligibleWorkspacePathsPortToken));
18
+ moduleBuilder.bind(TagSinceWriterPortToken).to(_TagSinceWriterAdapter).singleton().onActivation(createOptionalCliPortTelemetryActivation(TagSinceWriterPortToken));
19
+ moduleBuilder.bind(TagVersionResolverPortToken).to(_TagVersionResolverAdapter).singleton().onActivation(createOptionalCliPortTelemetryActivation(TagVersionResolverPortToken));
20
+ moduleBuilder.bind(TagTargetRunnerPortToken).to(_TagTargetRunnerAdapter).singleton().onActivation(createOptionalCliPortTelemetryActivation(TagTargetRunnerPortToken));
21
+ moduleBuilder.bind(TagTargetPathResolverPortToken).to(_TagTargetPathResolverAdapter).singleton().onActivation(createOptionalCliPortTelemetryActivation(TagTargetPathResolverPortToken));
22
+ moduleBuilder.bind(PrepareTagSyncUseCaseToken).to(_PrepareTagSyncUseCase).singleton();
23
+ moduleBuilder.bind(RunTagSyncUseCaseToken).to(_RunTagSyncUseCase).singleton();
24
+ moduleBuilder.bind(PresentTagSyncResultPresenterToken).to(_PresentTagSyncResultPresenter).singleton();
25
+ moduleBuilder.bind(PresentTagSyncProgressPresenterToken).to(_PresentTagSyncProgressPresenter).singleton();
26
+ });
27
+ //#endregion
28
+ export { TagModule };
package/dist/program.mjs CHANGED
@@ -1,4 +1,5 @@
1
- import { createCliRuntimeContainer, resolveCliCommands } from "./lib/bootstrap/composition-root.mjs";
1
+ import { registerCliCommandTreesOnProgram } from "./bootstrap/register-cli-command-trees.mjs";
2
+ import { createCliRuntimeContainer, resolveCliCommands } from "./bootstrap/composition-root.mjs";
2
3
  import process from "node:process";
3
4
  import { readFileSync } from "node:fs";
4
5
  import path from "node:path";
@@ -18,7 +19,7 @@ function readVersion() {
18
19
  function createProgram(commands) {
19
20
  const program = new Command();
20
21
  program.name("codefast").description("Codefast monorepo developer CLI").version(readVersion()).option("--no-color", "Disable ANSI color output").configureHelp({ sortSubcommands: true }).showHelpAfterError("(use --help for usage)");
21
- for (const cliCommand of commands) cliCommand.register(program);
22
+ registerCliCommandTreesOnProgram(program, commands);
22
23
  return program;
23
24
  }
24
25
  async function runCli(argv) {
@@ -0,0 +1,18 @@
1
+ import { token } from "@codefast/di";
2
+ //#region src/shell/application/cli-runtime.tokens.ts
3
+ const CliTelemetryPortToken = token("CliTelemetryPort");
4
+ const CliFilesystemPortToken = token("FilesystemPort");
5
+ const CliLoggerPortToken = token("CliLoggerPort");
6
+ const CliPathPortToken = token("CliPathPort");
7
+ const RepoRootResolverPortToken = token("RepoRootResolverPort");
8
+ const TypeScriptSourceFileWalkerPortToken = token("TypeScriptSourceFileWalkerPort");
9
+ const CliRuntimeToken = token("CliRuntimePort");
10
+ const LoadCodefastConfigUseCaseToken = token("LoadCodefastConfigUseCase");
11
+ const CliSchemaParsingToken = token("CliSchemaParsing");
12
+ const GlobalCliOptionsParsePortToken = token("GlobalCliOptionsParsePort");
13
+ const FormatAppErrorPortToken = token("FormatAppErrorPort");
14
+ const CliVerboseDiagnosticsPortToken = token("CliVerboseDiagnosticsPort");
15
+ const CliExecutorToken = token("CliExecutor");
16
+ const WorkspacePackageLayoutPortToken = token("WorkspacePackageLayoutPort");
17
+ //#endregion
18
+ export { CliExecutorToken, CliFilesystemPortToken, CliLoggerPortToken, CliPathPortToken, CliRuntimeToken, CliSchemaParsingToken, CliTelemetryPortToken, CliVerboseDiagnosticsPortToken, FormatAppErrorPortToken, GlobalCliOptionsParsePortToken, LoadCodefastConfigUseCaseToken, RepoRootResolverPortToken, TypeScriptSourceFileWalkerPortToken, WorkspacePackageLayoutPortToken };
@@ -0,0 +1,5 @@
1
+ import { z } from "zod";
2
+ //#region src/shell/application/global-cli-options.model.ts
3
+ /** Commander global opts shape validated before mirror prelude (`color` from `--no-color`). */ const globalCliCommanderOptionsSchema = z.object({ color: z.boolean().optional() });
4
+ //#endregion
5
+ export { globalCliCommanderOptionsSchema };