@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,17 +0,0 @@
1
- import { AppError } from "../../domain/errors.domain.mjs";
2
- import { err, ok } from "../../domain/result.model.mjs";
3
- //#region src/lib/core/application/services/schema-validator.service.ts
4
- function formatSchemaIssues(issues) {
5
- return issues.map((issue) => {
6
- return `${issue.path.length > 0 ? `${issue.path.join(".")}: ` : ""}${issue.message}`;
7
- }).join("; ");
8
- }
9
- /**
10
- * Validates `input` with `schema`, returning {@link AppError} (code `VALIDATION_ERROR`) on failure.
11
- */ function parseWithSchema(schema, input) {
12
- const parsed = schema.safeParse(input);
13
- if (!parsed.success) return err(new AppError("VALIDATION_ERROR", formatSchemaIssues(parsed.error.issues)));
14
- return ok(parsed.data);
15
- }
16
- //#endregion
17
- export { parseWithSchema };
@@ -1,10 +0,0 @@
1
- import { token } from "@codefast/di";
2
- //#region src/lib/core/contracts/tokens.ts
3
- const CliFsToken = token("CliFs");
4
- const CliLoggerToken = token("CliLogger");
5
- const CliPathToken = token("CliPath");
6
- const RepoRootResolverPortToken = token("RepoRootResolverPort");
7
- const CliRuntimeToken = token("CliRuntime");
8
- const LoadCodefastConfigUseCaseToken = token("LoadCodefastConfigUseCase");
9
- //#endregion
10
- export { CliFsToken, CliLoggerToken, CliPathToken, CliRuntimeToken, LoadCodefastConfigUseCaseToken, RepoRootResolverPortToken };
@@ -1,9 +0,0 @@
1
- import { CliPathToken } from "./contracts/tokens.mjs";
2
- import { NodeCliPathAdapter as _NodeCliPathAdapter } from "./infrastructure/path.adapter.mjs";
3
- import { Module } from "@codefast/di";
4
- //#region src/lib/core/core.module.ts
5
- const CoreModule = Module.create("cli-core", (moduleBuilder) => {
6
- moduleBuilder.bind(CliPathToken).to(_NodeCliPathAdapter).singleton();
7
- });
8
- //#endregion
9
- export { CoreModule };
@@ -1,30 +0,0 @@
1
- import { CliFsToken, CliLoggerToken, CliRuntimeToken, LoadCodefastConfigUseCaseToken, RepoRootResolverPortToken } from "../contracts/tokens.mjs";
2
- import { ConfigLoaderPortToken, ConfigWarningReporterPortToken } from "../../config/contracts/tokens.mjs";
3
- import { ConfigLoaderAdapterImpl as _ConfigLoaderAdapterImpl } from "../../config/infrastructure/config-loader.adapter.mjs";
4
- import { ConfigWarningReporterAdapter as _ConfigWarningReporterAdapter } from "../../config/infrastructure/config-warning-reporter.adapter.mjs";
5
- import { LoadCodefastConfigUseCaseImpl as _LoadCodefastConfigUseCaseImpl } from "../application/load-codefast-config.use-case.mjs";
6
- import { CoreModule } from "../core.module.mjs";
7
- import { isCliTelemetryEnabled, withCliPortTelemetry } from "./port-telemetry.decorator.mjs";
8
- import { RepoRootResolverAdapter as _RepoRootResolverAdapter } from "./repo-root-resolver.adapter.mjs";
9
- import { NodeCliFsAdapter as _NodeCliFsAdapter, NodeCliLoggerAdapter as _NodeCliLoggerAdapter, NodeCliRuntimeAdapter as _NodeCliRuntimeAdapter } from "../../infrastructure/node-io.adapter.mjs";
10
- import { Module } from "@codefast/di";
11
- //#region src/lib/core/infrastructure/infrastructure.module.ts
12
- const InfrastructureModule = Module.create("cli-infrastructure", (moduleBuilder) => {
13
- moduleBuilder.import(CoreModule);
14
- moduleBuilder.bind(CliLoggerToken).to(_NodeCliLoggerAdapter).singleton();
15
- moduleBuilder.bind(CliRuntimeToken).to(_NodeCliRuntimeAdapter).singleton();
16
- moduleBuilder.bind(RepoRootResolverPortToken).to(_RepoRootResolverAdapter).singleton();
17
- moduleBuilder.bind(CliFsToken).to(_NodeCliFsAdapter).singleton().onActivation((ctx, rawFs) => {
18
- if (!isCliTelemetryEnabled()) return rawFs;
19
- return withCliPortTelemetry({
20
- portName: "CliFs",
21
- implementation: rawFs,
22
- logger: ctx.resolve(CliLoggerToken)
23
- });
24
- });
25
- moduleBuilder.bind(ConfigLoaderPortToken).to(_ConfigLoaderAdapterImpl).singleton();
26
- moduleBuilder.bind(ConfigWarningReporterPortToken).to(_ConfigWarningReporterAdapter).singleton();
27
- moduleBuilder.bind(LoadCodefastConfigUseCaseToken).to(_LoadCodefastConfigUseCaseImpl).singleton();
28
- });
29
- //#endregion
30
- export { InfrastructureModule };
@@ -1,62 +0,0 @@
1
- //#region src/lib/core/infrastructure/port-telemetry.decorator.ts
2
- function summarizeTelemetryArg(value, maxLen = 160) {
3
- if (typeof value === "string") return value.length > maxLen ? `${value.slice(0, maxLen)}…(${value.length} chars)` : value;
4
- if (value === null || value === void 0) return String(value);
5
- if (typeof value === "number" || typeof value === "boolean") return String(value);
6
- if (typeof value === "object") try {
7
- const json = JSON.stringify(value);
8
- if (typeof json === "string") return json.length > maxLen ? `${json.slice(0, maxLen)}…` : json;
9
- } catch {
10
- return "[object]";
11
- }
12
- return "[value]";
13
- }
14
- function isPromiseLike(value) {
15
- return value !== null && typeof value === "object" && "then" in value && typeof value.then === "function";
16
- }
17
- /**
18
- * Wraps a port implementation (object of functions) to log call timing and summarized arguments via `logger`.
19
- * Does not modify application or domain code — wire only from the composition root.
20
- */ function withCliPortTelemetry(args) {
21
- const { portName, implementation, logger } = args;
22
- return new Proxy(implementation, { get(target, propertyKey, receiver) {
23
- if (typeof propertyKey === "symbol") return Reflect.get(target, propertyKey, receiver);
24
- const propertyName = String(propertyKey);
25
- const value = Reflect.get(target, propertyKey, receiver);
26
- if (typeof value !== "function") return value;
27
- return (...callArgs) => {
28
- const argSummary = callArgs.map((arg) => summarizeTelemetryArg(arg)).join(", ");
29
- logger.out(`[telemetry:${portName}.${propertyName}] ← (${argSummary})`);
30
- const startedAt = performance.now();
31
- try {
32
- const result = value.apply(target, callArgs);
33
- if (isPromiseLike(result)) return result.then((resolved) => {
34
- logger.out(`[telemetry:${portName}.${propertyName}] → ok ${(performance.now() - startedAt).toFixed(2)}ms`);
35
- return resolved;
36
- }, (rejection) => {
37
- logger.out(`[telemetry:${portName}.${propertyName}] → err ${(performance.now() - startedAt).toFixed(2)}ms`);
38
- throw rejection;
39
- });
40
- logger.out(`[telemetry:${portName}.${propertyName}] → ${(performance.now() - startedAt).toFixed(2)}ms`);
41
- return result;
42
- } catch (caughtSyncError) {
43
- logger.out(`[telemetry:${portName}.${propertyName}] → err ${(performance.now() - startedAt).toFixed(2)}ms`);
44
- throw caughtSyncError;
45
- }
46
- };
47
- } });
48
- }
49
- function isCliTelemetryEnabled() {
50
- const raw = process.env.ENABLE_TELEMETRY;
51
- return raw === "1" || raw === "true";
52
- }
53
- function withOptionalPortTelemetry(portName, implementation, logger) {
54
- if (!isCliTelemetryEnabled()) return implementation;
55
- return withCliPortTelemetry({
56
- portName,
57
- implementation,
58
- logger
59
- });
60
- }
61
- //#endregion
62
- export { isCliTelemetryEnabled, withCliPortTelemetry, withOptionalPortTelemetry };
@@ -1,9 +0,0 @@
1
- //#region src/lib/core/infrastructure/verbose-diagnostics.policy.ts
2
- /**
3
- * When true, infrastructure failures may log full stack traces (e.g. in {@link consumeCliAppError}).
4
- */ function isVerboseInfraDiagnostics() {
5
- const raw = process.env.CODEFAST_VERBOSE;
6
- return raw === "1" || raw === "true";
7
- }
8
- //#endregion
9
- export { isVerboseInfraDiagnostics };
@@ -1,42 +0,0 @@
1
- import "../domain/cli-exit-codes.domain.mjs";
2
- import { formatAppError } from "./format-app-error.presenter.mjs";
3
- import { isVerboseInfraDiagnostics } from "../infrastructure/verbose-diagnostics.policy.mjs";
4
- import process from "node:process";
5
- //#region src/lib/core/presentation/cli-executor.presenter.ts
6
- function assertExhaustiveAppErrorCode(code) {
7
- return code;
8
- }
9
- /**
10
- * Maps {@link AppError} codes to `process.exitCode` for CLI commands.
11
- */ function exitCodeForAppError(error) {
12
- const { code } = error;
13
- switch (code) {
14
- case "NOT_FOUND": return 1;
15
- case "VALIDATION_ERROR": return 2;
16
- case "INFRA_FAILURE": return 1;
17
- default: return assertExhaustiveAppErrorCode(code);
18
- }
19
- }
20
- /**
21
- * When `outcome` is {@link Err}, logs via {@link formatAppError}, sets `process.exitCode`, returns `false`.
22
- * When `Ok`, optionally logs `successMessage` to stdout and returns `true`.
23
- */ function consumeCliAppError(logger, outcome, options) {
24
- if (!outcome.ok) {
25
- logger.err(formatAppError(outcome.error));
26
- if (isVerboseInfraDiagnostics() && outcome.error.code === "INFRA_FAILURE" && outcome.error.cause instanceof Error && outcome.error.cause.stack !== void 0) logger.err(outcome.error.cause.stack);
27
- process.exitCode = exitCodeForAppError(outcome.error);
28
- return false;
29
- }
30
- if (options?.successMessage !== void 0) logger.out(options.successMessage);
31
- return true;
32
- }
33
- /**
34
- * Async CLI result handling that sets `process.exitCode` from success/error outcome.
35
- */ async function runCliResultAsync(logger, outcomePromise, onSuccess) {
36
- const outcome = await outcomePromise;
37
- if (!consumeCliAppError(logger, outcome)) return;
38
- const exit = await onSuccess(outcome.value);
39
- process.exitCode = exit === void 0 ? 0 : exit;
40
- }
41
- //#endregion
42
- export { consumeCliAppError, runCliResultAsync };
@@ -1,7 +0,0 @@
1
- import { parseWithSchema } from "../application/services/schema-validator.service.mjs";
2
- //#region src/lib/core/presentation/cli-schema.parser.ts
3
- function parseWithCliSchema(schema, raw) {
4
- return parseWithSchema(schema, raw);
5
- }
6
- //#endregion
7
- export { parseWithCliSchema };
@@ -1,17 +0,0 @@
1
- //#region src/lib/core/presentation/format-app-error.presenter.ts
2
- function assertExhaustiveAppErrorCode(code) {
3
- return `Unhandled error code: ${String(code)}`;
4
- }
5
- /**
6
- * Stable, user-facing line for CLI output. Exhaustive over every `AppError["code"]`.
7
- */ function formatAppError(error) {
8
- const { code, message } = error;
9
- switch (code) {
10
- case "NOT_FOUND": return `[NOT_FOUND] ${message}`;
11
- case "VALIDATION_ERROR": return `[VALIDATION_ERROR] ${message}`;
12
- case "INFRA_FAILURE": return `[INFRA_FAILURE] ${message}`;
13
- default: return assertExhaustiveAppErrorCode(code);
14
- }
15
- }
16
- //#endregion
17
- export { formatAppError };
@@ -1,5 +0,0 @@
1
- import { Module } from "@codefast/di";
2
- //#region src/lib/core/presentation/presentation.module.ts
3
- const PresentationModule = Module.create("cli-presentation", () => {});
4
- //#endregion
5
- export { PresentationModule };
@@ -1,21 +0,0 @@
1
- import path from "node:path";
2
- import { fileURLToPath } from "node:url";
3
- //#region src/lib/infrastructure/workspace/repo-root-resolver.service.ts
4
- /**
5
- * Resolve the monorepo root (directory containing `pnpm-workspace.yaml`).
6
- * Tries the compiled package location first, then the provided `startDir`.
7
- */ function findRepoRoot(fs, startDir) {
8
- const candidates = [path.dirname(fileURLToPath(import.meta.url)), startDir];
9
- for (const start of candidates) {
10
- let dir = path.resolve(start);
11
- for (;;) {
12
- if (fs.existsSync(path.join(dir, "pnpm-workspace.yaml"))) return dir;
13
- const parent = path.dirname(dir);
14
- if (parent === dir) break;
15
- dir = parent;
16
- }
17
- }
18
- throw new Error(`Could not locate monorepo root (missing pnpm-workspace.yaml). Searched from: ${candidates.join(", ")}`);
19
- }
20
- //#endregion
21
- export { findRepoRoot };
@@ -1,5 +0,0 @@
1
- import { token } from "@codefast/di";
2
- //#region src/lib/kernel/contracts/tokens.ts
3
- const CliCommandToken = token("CliCommand");
4
- //#endregion
5
- export { CliCommandToken };
@@ -1,12 +0,0 @@
1
- //#region src/lib/mirror/application/mirror-sync-json.format.ts
2
- function formatMirrorSyncJsonOutput(stats, elapsedSeconds) {
3
- const payload = {
4
- schemaVersion: 1,
5
- ok: stats.packagesErrored === 0,
6
- elapsedSeconds,
7
- stats
8
- };
9
- return JSON.stringify(payload);
10
- }
11
- //#endregion
12
- export { formatMirrorSyncJsonOutput };
@@ -1,20 +0,0 @@
1
- import { AppError } from "../../../core/domain/errors.domain.mjs";
2
- import { err, ok } from "../../../core/domain/result.model.mjs";
3
- import path from "node:path";
4
- //#region src/lib/mirror/application/services/mirror-package-arg-resolver.service.ts
5
- function normalizePathSegments(relPath) {
6
- return relPath.split(path.sep).join("/").replace(/\\/g, "/");
7
- }
8
- function resolveMirrorPackageArgToRelative(input) {
9
- const { fs, rootDir, packageArg, currentWorkingDirectory } = input;
10
- if (!packageArg) return ok(void 0);
11
- const rootReal = fs.canonicalPathSync(path.resolve(rootDir));
12
- const cwdReal = fs.canonicalPathSync(currentWorkingDirectory);
13
- const resolved = path.isAbsolute(packageArg) ? path.resolve(packageArg) : path.resolve(cwdReal, packageArg);
14
- const targetReal = fs.canonicalPathSync(resolved);
15
- const normalized = normalizePathSegments(path.relative(rootReal, targetReal));
16
- if (normalized.startsWith("..") || path.isAbsolute(normalized) || normalized === "" || normalized === ".") return err(new AppError("VALIDATION_ERROR", `Package path must be a subdirectory under monorepo root: ${rootDir}`));
17
- return ok(normalized);
18
- }
19
- //#endregion
20
- export { resolveMirrorPackageArgToRelative };
@@ -1,99 +0,0 @@
1
- import { messageFromCaughtUnknown } from "../../core/domain/caught-unknown-message.value-object.mjs";
2
- //#region src/lib/mirror/infrastructure/mirror-console-reporter.presenter.ts
3
- const COLORS = {
4
- reset: "\x1B[0m",
5
- bold: "\x1B[1m",
6
- dim: "\x1B[2m",
7
- green: "\x1B[32m",
8
- yellow: "\x1B[33m",
9
- cyan: "\x1B[36m",
10
- gray: "\x1B[90m",
11
- magenta: "\x1B[35m",
12
- brightGreen: "\x1B[92m",
13
- brightCyan: "\x1B[96m"
14
- };
15
- let colorsEnabled = true;
16
- function color(value, code) {
17
- if (!colorsEnabled) return value;
18
- return `${code}${value}${COLORS.reset}`;
19
- }
20
- function configureMirrorColors(noColor, isStdoutTty) {
21
- colorsEnabled = isStdoutTty && !noColor;
22
- }
23
- function mirrorBanner(logger) {
24
- logger.out(`\n${color("📦 Mirror — package exports", COLORS.bold + COLORS.cyan)}`);
25
- logger.out(`${color("═".repeat(60), COLORS.dim)}\n`);
26
- }
27
- function mirrorProcessingMode(logger, mode) {
28
- if (mode.kind === "single") {
29
- logger.out(`${color("Processing single package...", COLORS.dim)}\n`);
30
- return;
31
- }
32
- if (mode.source === "default-patterns") {
33
- logger.out(`${color("Discovering workspace packages using default patterns (packages/*)…", COLORS.dim)}\n`);
34
- return;
35
- }
36
- if (mode.source === "pnpm-workspace-yaml") {
37
- logger.out(`${color("Discovering workspace packages from pnpm-workspace.yaml…", COLORS.dim)}\n`);
38
- return;
39
- }
40
- logger.out(`${color("pnpm-workspace.yaml declares an empty workspace package list.", COLORS.dim)}\n`);
41
- }
42
- function mirrorNoPackages(logger) {
43
- logger.out(color("⚠ No packages found", COLORS.yellow));
44
- }
45
- function mirrorGlobWarning(logger, message) {
46
- logger.out(color(`⚠ ${message}`, COLORS.yellow));
47
- }
48
- function logSkippedWorkspacePackage(logger, index, total, displayName, reason) {
49
- const progress = color(`[${index}/${total}]`, COLORS.dim);
50
- logger.out(`${progress} ${color("○", COLORS.gray)} ${color(displayName, COLORS.dim)}`);
51
- logger.out(` ${color("└─", COLORS.dim)} ${color(`Skipped: ${reason}`, COLORS.gray)}`);
52
- logger.out("");
53
- }
54
- function logPackageSuccess(logger, index, total, packageStats, generatedDistAssetCounts, verbose) {
55
- const progress = color(`[${index}/${total}]`, COLORS.dim);
56
- logger.out(`${progress} ${color("✓", COLORS.brightGreen)} ${color(packageStats.name, COLORS.bold)}`);
57
- if (verbose) {
58
- logger.out(` ${color("├─", COLORS.dim)} Path: ${packageStats.path}`);
59
- if (packageStats.hasTransform) logger.out(` ${color("├─", COLORS.dim)} ${color("Custom path transformation", COLORS.cyan)}`);
60
- if (packageStats.cssConfigStatus) {
61
- const status = packageStats.cssConfigStatus === "disabled" ? "CSS disabled" : "CSS configured";
62
- logger.out(` ${color("├─", COLORS.dim)} ${color(status, COLORS.cyan)}`);
63
- }
64
- }
65
- const breakdown = [];
66
- if (generatedDistAssetCounts.jsCount > 0) breakdown.push(color(`${generatedDistAssetCounts.jsCount} modules`, COLORS.green));
67
- if (generatedDistAssetCounts.cssCount > 0) breakdown.push(color(`${generatedDistAssetCounts.cssCount} CSS`, COLORS.magenta));
68
- if (packageStats.customExports > 0) breakdown.push(color(`${packageStats.customExports} custom`, COLORS.yellow));
69
- const totalExportsText = color(`${packageStats.totalExports} exports`, COLORS.brightCyan);
70
- if (breakdown.length === 0) logger.out(` ${color("└─", COLORS.dim)} ${totalExportsText}`);
71
- else logger.out(` ${color("└─", COLORS.dim)} ${breakdown.join(" + ")} = ${totalExportsText}`);
72
- logger.out("");
73
- }
74
- function logPrunedStaleExport(logger, exportSpecifier) {
75
- logger.out(` ${color("└─", COLORS.dim)} ${color(`Pruned stale export: ${exportSpecifier}`, COLORS.gray)}`);
76
- }
77
- function logPackageError(logger, index, total, displayName, errorValue, verbose) {
78
- logger.out(`${color(`[${index}/${total}]`, COLORS.dim)} ${color("✗", COLORS.yellow)} ${color(displayName, COLORS.bold)}`);
79
- logger.out(` ${color("└─", COLORS.dim)} ${color(`Error: ${messageFromCaughtUnknown(errorValue)}`, COLORS.yellow)}\n`);
80
- if (verbose) logger.err(errorValue instanceof Error && errorValue.stack ? errorValue.stack : messageFromCaughtUnknown(errorValue));
81
- }
82
- function mirrorSummarySeparator(logger) {
83
- logger.out(color("═".repeat(60), COLORS.dim));
84
- }
85
- function mirrorSummary(logger, stats, elapsedSeconds) {
86
- logger.out(`${color("📊 Summary", COLORS.bold)} ${color(`(completed in ${elapsedSeconds.toFixed(2)}s)`, COLORS.dim)}\n`);
87
- logger.out(` ${color("Packages:", COLORS.bold)}`);
88
- logger.out(` ${color("├─", COLORS.dim)} Processed: ${color(String(stats.packagesProcessed), COLORS.green)}`);
89
- if (stats.packagesSkipped > 0) logger.out(` ${color("├─", COLORS.dim)} Skipped: ${color(String(stats.packagesSkipped), COLORS.gray)}`);
90
- if (stats.packagesErrored > 0) logger.out(` ${color("├─", COLORS.dim)} Errors: ${color(String(stats.packagesErrored), COLORS.yellow)}`);
91
- logger.out(` ${color("└─", COLORS.dim)} Total found: ${stats.packagesFound}\n`);
92
- logger.out(` ${color("Exports:", COLORS.bold)}`);
93
- logger.out(` ${color("├─", COLORS.dim)} JS Modules: ${color(String(stats.totalJsModules), COLORS.cyan)}`);
94
- logger.out(` ${color("├─", COLORS.dim)} CSS Files: ${color(String(stats.totalCssExports), COLORS.magenta)}`);
95
- logger.out(` ${color("└─", COLORS.dim)} Total: ${color(String(stats.totalExports), COLORS.brightCyan)}\n`);
96
- logger.out(`${color("═".repeat(60), COLORS.dim)}\n`);
97
- }
98
- //#endregion
99
- export { configureMirrorColors, logPackageError, logPackageSuccess, logPrunedStaleExport, logSkippedWorkspacePackage, mirrorBanner, mirrorGlobWarning, mirrorNoPackages, mirrorProcessingMode, mirrorSummary, mirrorSummarySeparator };
@@ -1,25 +0,0 @@
1
- import { normalizePath } from "../domain/path-normalizer.value-object.mjs";
2
- import { realpathSync } from "node:fs";
3
- import path from "node:path";
4
- //#region src/lib/mirror/infrastructure/package-filter-resolver.service.ts
5
- function tryRealpath(entryPath) {
6
- try {
7
- return realpathSync.native(entryPath);
8
- } catch {
9
- return path.resolve(entryPath);
10
- }
11
- }
12
- /**
13
- * Resolve `packageFilter` to a POSIX-ish path relative to `rootDir`, without using
14
- * `process.cwd()`. Use for programmatic `runMirrorSync` calls.
15
- *
16
- * @throws If the resolved path is not a strict subdirectory of `rootDir`.
17
- */ function resolvePackageFilterUnderRoot(rootDir, packageFilter) {
18
- const rootReal = tryRealpath(path.resolve(rootDir));
19
- const resolved = path.isAbsolute(packageFilter) ? tryRealpath(path.resolve(packageFilter)) : tryRealpath(path.join(rootReal, packageFilter));
20
- const normalized = normalizePath(path.relative(rootReal, resolved));
21
- if (normalized.startsWith("..") || path.isAbsolute(normalized) || normalized === "" || normalized === ".") throw new Error(`Package path must be a subdirectory under monorepo root: ${rootDir}`);
22
- return normalized;
23
- }
24
- //#endregion
25
- export { resolvePackageFilterUnderRoot };
@@ -1,158 +0,0 @@
1
- import { messageFromCaughtUnknown } from "../../core/domain/caught-unknown-message.value-object.mjs";
2
- import { normalizePath } from "../domain/path-normalizer.value-object.mjs";
3
- import { globSync } from "node:fs";
4
- import path from "node:path";
5
- import picomatch from "picomatch";
6
- import { parse } from "yaml";
7
- //#region src/lib/mirror/infrastructure/workspace-packages.service.ts
8
- const PNPM_WORKSPACE = "pnpm-workspace.yaml";
9
- /**
10
- * Default when the workspace file is missing or has no `packages` key.
11
- */ const DEFAULT_INCLUDE = ["packages/*"];
12
- function toPosix(filePath) {
13
- return filePath.split(path.sep).join("/");
14
- }
15
- function isGlobPermissionError(caughtError) {
16
- if (typeof caughtError !== "object" || caughtError === null || !("code" in caughtError)) return false;
17
- const code = caughtError.code;
18
- return code === "EACCES" || code === "EPERM";
19
- }
20
- /**
21
- * Turn a pnpm `packages` glob into a `globSync` pattern that finds `package.json` files.
22
- */ function workspacePatternToPackageJsonGlob(pattern) {
23
- const normalizedPattern = toPosix(pattern.trim()).replace(/\/+$/, "");
24
- if (!normalizedPattern) return "**/package.json";
25
- return `${normalizedPattern}/package.json`;
26
- }
27
- function splitWorkspacePackageEntries(raw) {
28
- const include = [];
29
- const exclude = [];
30
- if (!Array.isArray(raw)) return {
31
- include,
32
- exclude
33
- };
34
- for (const entry of raw) {
35
- if (typeof entry !== "string") continue;
36
- const trimmed = entry.trim();
37
- if (!trimmed) continue;
38
- if (trimmed.startsWith("!")) exclude.push(trimmed.slice(1).trim());
39
- else include.push(trimmed);
40
- }
41
- return {
42
- include,
43
- exclude
44
- };
45
- }
46
- /**
47
- * Reads `packages` from a parsed pnpm workspace document.
48
- * @throws If the document is invalid or `packages` is present but not an array.
49
- */ function parsePnpmWorkspaceDocument(doc) {
50
- if (doc === null || doc === void 0) throw new Error(`${PNPM_WORKSPACE} root document must be an object (got empty or null)`);
51
- if (typeof doc !== "object" || Array.isArray(doc)) throw new Error(`${PNPM_WORKSPACE} root must be a mapping, not an array or scalar`);
52
- const parsedDoc = doc;
53
- if (!Object.prototype.hasOwnProperty.call(parsedDoc, "packages")) return {
54
- include: [],
55
- exclude: [],
56
- hasPackagesKey: false,
57
- isEmptyPackagesArray: false
58
- };
59
- const pkgs = parsedDoc.packages;
60
- if (!Array.isArray(pkgs)) throw new Error(`${PNPM_WORKSPACE} field "packages" must be an array`);
61
- if (pkgs.length === 0) return {
62
- include: [],
63
- exclude: [],
64
- hasPackagesKey: true,
65
- isEmptyPackagesArray: true
66
- };
67
- return {
68
- ...splitWorkspacePackageEntries(pkgs),
69
- hasPackagesKey: true,
70
- isEmptyPackagesArray: false
71
- };
72
- }
73
- async function readWorkspaceYaml(rootDir, fs) {
74
- const workspaceYamlPath = path.join(rootDir, PNPM_WORKSPACE);
75
- if (!fs.existsSync(workspaceYamlPath)) return { exists: false };
76
- let raw;
77
- try {
78
- raw = await fs.readFile(workspaceYamlPath, "utf8");
79
- } catch (caughtReadError) {
80
- throw new Error(`Failed to read ${PNPM_WORKSPACE}: ${messageFromCaughtUnknown(caughtReadError)}`);
81
- }
82
- let doc;
83
- try {
84
- doc = parse(raw);
85
- } catch (caughtYamlParseError) {
86
- throw new Error(`Failed to parse ${PNPM_WORKSPACE}: ${messageFromCaughtUnknown(caughtYamlParseError)}`);
87
- }
88
- if (doc === null || doc === void 0) throw new Error(`${PNPM_WORKSPACE} must define a mapping at the document root`);
89
- return {
90
- exists: true,
91
- doc
92
- };
93
- }
94
- /**
95
- * Workspace package directories relative to `rootDir` (POSIX slashes), sorted.
96
- * Reads `pnpm-workspace.yaml` when present; otherwise uses `packages/*`.
97
- * Only paths with a `package.json` are returned (same practical rule as pnpm).
98
- */ async function findWorkspacePackageRelPaths(rootDir, fs, onGlobWarning) {
99
- const workspaceYaml = await readWorkspaceYaml(rootDir, fs);
100
- let include;
101
- let exclude;
102
- let multiSource;
103
- if (!workspaceYaml.exists) {
104
- include = [...DEFAULT_INCLUDE];
105
- exclude = [];
106
- multiSource = "default-patterns";
107
- } else {
108
- const parsed = parsePnpmWorkspaceDocument(workspaceYaml.doc);
109
- if (!parsed.hasPackagesKey) {
110
- include = [...DEFAULT_INCLUDE];
111
- exclude = [];
112
- multiSource = "default-patterns";
113
- } else if (parsed.isEmptyPackagesArray) return {
114
- relPaths: [],
115
- multiSource: "declared-empty"
116
- };
117
- else {
118
- include = parsed.include;
119
- exclude = parsed.exclude;
120
- multiSource = "pnpm-workspace-yaml";
121
- }
122
- }
123
- const found = /* @__PURE__ */ new Set();
124
- const globOpts = {
125
- cwd: rootDir,
126
- posix: true,
127
- ...path.sep === "\\" ? { windowsPathsNoEscape: true } : {}
128
- };
129
- for (const pattern of include) {
130
- const globPat = workspacePatternToPackageJsonGlob(pattern);
131
- let matches;
132
- try {
133
- matches = globSync(globPat, globOpts);
134
- } catch (caughtGlobError) {
135
- if (isGlobPermissionError(caughtGlobError)) {
136
- onGlobWarning(`Skipping workspace glob "${pattern}" (${messageFromCaughtUnknown(caughtGlobError)})`);
137
- continue;
138
- }
139
- throw new Error(`Invalid workspace glob "${pattern}": ${messageFromCaughtUnknown(caughtGlobError)}`);
140
- }
141
- for (const matchedPath of matches) {
142
- const posix = toPosix(matchedPath);
143
- if (!posix.endsWith("/package.json")) continue;
144
- const rel = posix.slice(0, -13);
145
- if (!rel) continue;
146
- found.add(normalizePath(rel));
147
- }
148
- }
149
- const excludeMatchers = exclude.map((pat) => picomatch(pat, { dot: true }));
150
- const relPaths = [...found].filter((rel) => !excludeMatchers.some((isMatch) => isMatch(rel)));
151
- relPaths.sort((a, b) => a.localeCompare(b));
152
- return {
153
- relPaths,
154
- multiSource
155
- };
156
- }
157
- //#endregion
158
- export { findWorkspacePackageRelPaths };
@@ -1,25 +0,0 @@
1
- import { CliLoggerToken } from "../core/contracts/tokens.mjs";
2
- import { withOptionalPortTelemetry } from "../core/infrastructure/port-telemetry.decorator.mjs";
3
- import { InfrastructureModule } from "../core/infrastructure/infrastructure.module.mjs";
4
- import { FileSystemServicePortToken, MirrorSyncReporterPortToken, PackageRepositoryPortToken, PrepareMirrorSyncUseCaseToken, RunMirrorSyncUseCaseToken, SyncWorkspacePackagePortToken, WorkspaceServicePortToken } from "./contracts/tokens.mjs";
5
- import { FileSystemServiceAdapter as _FileSystemServiceAdapter } from "./adapters/secondary/file-system-service.adapter.mjs";
6
- import { MirrorSyncReporterAdapter as _MirrorSyncReporterAdapter } from "./adapters/secondary/mirror-sync-reporter.adapter.mjs";
7
- import { PackageRepositoryAdapter as _PackageRepositoryAdapter } from "./adapters/secondary/package-repository.adapter.mjs";
8
- import { SyncWorkspacePackageAdapter as _SyncWorkspacePackageAdapter } from "./adapters/secondary/sync-workspace-package.adapter.mjs";
9
- import { WorkspaceServiceAdapter as _WorkspaceServiceAdapter } from "./adapters/secondary/workspace-service.adapter.mjs";
10
- import { PrepareMirrorSyncUseCaseImpl as _PrepareMirrorSyncUseCaseImpl } from "./application/use-cases/prepare-mirror-sync.use-case.mjs";
11
- import { RunMirrorSyncUseCaseImpl as _RunMirrorSyncUseCaseImpl } from "./application/use-cases/run-mirror-sync.use-case.mjs";
12
- import { Module } from "@codefast/di";
13
- //#region src/lib/mirror/mirror.module.ts
14
- const MirrorModule = Module.create("cli-mirror", (moduleBuilder) => {
15
- moduleBuilder.import(InfrastructureModule);
16
- moduleBuilder.bind(WorkspaceServicePortToken).to(_WorkspaceServiceAdapter).singleton().onActivation((ctx, implementation) => withOptionalPortTelemetry("WorkspaceServicePort", implementation, ctx.resolve(CliLoggerToken)));
17
- moduleBuilder.bind(PackageRepositoryPortToken).to(_PackageRepositoryAdapter).singleton().onActivation((ctx, implementation) => withOptionalPortTelemetry("PackageRepositoryPort", implementation, ctx.resolve(CliLoggerToken)));
18
- moduleBuilder.bind(FileSystemServicePortToken).to(_FileSystemServiceAdapter).singleton().onActivation((ctx, implementation) => withOptionalPortTelemetry("FileSystemServicePort", implementation, ctx.resolve(CliLoggerToken)));
19
- moduleBuilder.bind(MirrorSyncReporterPortToken).to(_MirrorSyncReporterAdapter).singleton().onActivation((ctx, implementation) => withOptionalPortTelemetry("MirrorSyncReporterPort", implementation, ctx.resolve(CliLoggerToken)));
20
- moduleBuilder.bind(SyncWorkspacePackagePortToken).to(_SyncWorkspacePackageAdapter).singleton();
21
- moduleBuilder.bind(PrepareMirrorSyncUseCaseToken).to(_PrepareMirrorSyncUseCaseImpl).singleton();
22
- moduleBuilder.bind(RunMirrorSyncUseCaseToken).to(_RunMirrorSyncUseCaseImpl).singleton();
23
- });
24
- //#endregion
25
- export { MirrorModule };
@@ -1,33 +0,0 @@
1
- import path from "node:path";
2
- //#region src/lib/shared/source-code/infrastructure/typescript-source-file-walker.service.ts
3
- const DEFAULT_SKIP_DIRS = new Set([
4
- "node_modules",
5
- "dist",
6
- ".git",
7
- ".turbo",
8
- ".next",
9
- ".cache",
10
- "out",
11
- "build",
12
- "coverage",
13
- ".vercel",
14
- ".output"
15
- ]);
16
- function walkTsxFiles(rootDirectoryPath, fs) {
17
- const result = [];
18
- const visit = (entryPath) => {
19
- if (fs.statSync(entryPath).isDirectory()) {
20
- for (const childName of fs.readdirSync(entryPath)) {
21
- if (DEFAULT_SKIP_DIRS.has(childName)) continue;
22
- visit(path.join(entryPath, childName));
23
- }
24
- return;
25
- }
26
- if (entryPath.endsWith(".d.ts")) return;
27
- if (entryPath.endsWith(".tsx") || entryPath.endsWith(".ts")) result.push(entryPath);
28
- };
29
- visit(rootDirectoryPath);
30
- return result;
31
- }
32
- //#endregion
33
- export { walkTsxFiles };
@@ -1,6 +0,0 @@
1
- import { token } from "@codefast/di";
2
- //#region src/lib/tag/adapters/primary/cli/presentation.tokens.ts
3
- const PresentTagSyncResultPresenterToken = token("PresentTagSyncResultPresenter");
4
- const TagSyncProgressListenerToken = token("TagSyncProgressListener");
5
- //#endregion
6
- export { PresentTagSyncResultPresenterToken, TagSyncProgressListenerToken };
@@ -1,13 +0,0 @@
1
- import { PresentationModule } from "../../../../core/presentation/presentation.module.mjs";
2
- import { PresentTagSyncResultPresenterToken, TagSyncProgressListenerToken } from "./presentation.tokens.mjs";
3
- import { PresentTagSyncResultPresenterImpl as _PresentTagSyncResultPresenterImpl } from "../../../presentation/present-tag-sync-result.presenter.mjs";
4
- import { TagSyncProgressListener as _TagSyncProgressListener } from "../../../presentation/tag-sync-progress-listener.presenter.mjs";
5
- import { Module } from "@codefast/di";
6
- //#region src/lib/tag/adapters/primary/cli/tag.presentation.module.ts
7
- const TagPresentationModule = Module.create("cli-tag-presentation", (moduleBuilder) => {
8
- moduleBuilder.import(PresentationModule);
9
- moduleBuilder.bind(PresentTagSyncResultPresenterToken).to(_PresentTagSyncResultPresenterImpl).singleton();
10
- moduleBuilder.bind(TagSyncProgressListenerToken).to(_TagSyncProgressListener).singleton();
11
- });
12
- //#endregion
13
- export { TagPresentationModule };