@codefast/cli 0.3.13-canary.2 → 0.3.13-canary.4

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 (426) hide show
  1. package/README.md +30 -4
  2. package/dist/{bin.js → bin.mjs} +4 -1
  3. package/dist/commands/arrange.mjs +325 -0
  4. package/dist/commands/mirror.mjs +267 -0
  5. package/dist/commands/tag.mjs +283 -0
  6. package/dist/lib/arrange/application/arrange-analyze-json.format.mjs +10 -0
  7. package/dist/lib/arrange/application/arrange-group-json.format.mjs +11 -0
  8. package/dist/lib/arrange/application/arrange-sync-cli-result.mjs +7 -0
  9. package/dist/lib/arrange/application/arrange-sync-json.format.mjs +12 -0
  10. package/dist/lib/arrange/application/services/arrange-file-processor.service.mjs +242 -0
  11. package/dist/lib/arrange/application/services/arrange-target-scanner.service.mjs +237 -0
  12. package/dist/lib/arrange/application/use-cases/analyze-directory.use-case.mjs +258 -0
  13. package/dist/lib/arrange/application/use-cases/group-file.use-case.mjs +35 -0
  14. package/dist/lib/arrange/application/use-cases/run-arrange-sync.use-case.mjs +283 -0
  15. package/dist/lib/arrange/application/use-cases/suggest-cn-groups.use-case.mjs +233 -0
  16. package/dist/lib/arrange/arrange.feature.module.mjs +19 -0
  17. package/dist/lib/arrange/arrange.module.mjs +27 -0
  18. package/dist/lib/arrange/arrange.presentation.module.mjs +13 -0
  19. package/dist/lib/arrange/contracts/tokens.mjs +14 -0
  20. package/dist/lib/arrange/domain/arrange-analyze.service.mjs +95 -0
  21. package/dist/lib/arrange/domain/arrange-grouping.service.mjs +100 -0
  22. package/dist/lib/arrange/domain/ast/ast-helpers.helper.mjs +89 -0
  23. package/dist/lib/arrange/domain/ast/ast-node.model.mjs +181 -0
  24. package/dist/lib/arrange/domain/ast/collectors-cn.collector.mjs +52 -0
  25. package/dist/lib/arrange/domain/ast/collectors-jsx.collector.mjs +20 -0
  26. package/dist/lib/arrange/domain/ast/collectors-tv.collector.mjs +174 -0
  27. package/dist/lib/arrange/domain/ast/targets.model.mjs +110 -0
  28. package/dist/lib/arrange/domain/constants.domain.mjs +154 -0
  29. package/dist/lib/arrange/domain/errors.domain.mjs +18 -0
  30. package/dist/lib/arrange/domain/grouping.domain.mjs +306 -0
  31. package/dist/lib/arrange/domain/imports.domain.mjs +55 -0
  32. package/dist/lib/arrange/domain/source-text-formatters.formatter.mjs +54 -0
  33. package/dist/lib/arrange/domain/tokenizer.util.mjs +209 -0
  34. package/dist/lib/arrange/infra/domain-source-parser.adapter.mjs +240 -0
  35. package/dist/lib/arrange/infra/ensure-cn-import.adapter.mjs +8 -0
  36. package/dist/lib/arrange/infra/file-walker.adapter.mjs +239 -0
  37. package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.test-helper.mjs +18 -0
  38. package/dist/lib/arrange/infra/ts-ast-translator.adapter.mjs +355 -0
  39. package/dist/lib/arrange/presentation/arrange-cli-schema.presenter.mjs +29 -0
  40. package/dist/lib/arrange/presentation/arrange-sync.presenter.mjs +12 -0
  41. package/dist/lib/arrange/presentation/formatters.presenter.mjs +2 -0
  42. package/dist/lib/arrange/presentation/group-file-preview.presenter.mjs +275 -0
  43. package/dist/lib/arrange/presentation/prepare-arrange.orchestrator.mjs +258 -0
  44. package/dist/lib/arrange/presentation/present-analyze-cli.presenter.mjs +7 -0
  45. package/dist/lib/arrange/presentation/present-analyze-report.presenter.mjs +233 -0
  46. package/dist/lib/arrange/presentation/report.presenter.mjs +24 -0
  47. package/dist/lib/arrange/presentation/resolve-arrange-cli-target.presenter.mjs +21 -0
  48. package/dist/lib/config/application/use-cases/load-config.use-case.mjs +17 -0
  49. package/dist/lib/config/contracts/tokens.mjs +5 -0
  50. package/dist/lib/config/infra/config-schema.adapter.mjs +25 -0
  51. package/dist/lib/config/infra/loader.adapter.mjs +84 -0
  52. package/dist/lib/core/application/architecture-boundaries.policy.mjs +311 -0
  53. package/dist/lib/core/application/ports/path.port.mjs +1 -0
  54. package/dist/lib/core/application/schema-parse.util.mjs +17 -0
  55. package/dist/lib/core/application/utils/caught-unknown-message.util.mjs +19 -0
  56. package/dist/lib/core/application/utils/verbose-diagnostics.util.mjs +9 -0
  57. package/dist/lib/core/contracts/presentation.contract.mjs +1 -0
  58. package/dist/lib/core/contracts/tokens.mjs +5 -0
  59. package/dist/lib/core/core.module.mjs +9 -0
  60. package/dist/lib/core/domain/cli-exit-codes.domain.mjs +11 -0
  61. package/dist/lib/core/domain/errors.domain.mjs +16 -0
  62. package/dist/lib/core/domain/result.model.mjs +23 -0
  63. package/dist/lib/core/infra/composition-root.mjs +21 -0
  64. package/dist/lib/core/infra/infra.module.mjs +23 -0
  65. package/dist/lib/core/infra/logging-decorator.adapter.mjs +62 -0
  66. package/dist/lib/core/infra/path.adapter.mjs +13 -0
  67. package/dist/lib/core/operational/contracts/tokens.mjs +7 -0
  68. package/dist/lib/core/presentation/cli-executor.presenter.mjs +57 -0
  69. package/dist/lib/core/presentation/command.interface.mjs +1 -0
  70. package/dist/lib/core/presentation/format-app-error.presenter.mjs +17 -0
  71. package/dist/lib/core/presentation/global-cli-options.presenter.mjs +9 -0
  72. package/dist/lib/core/presentation/load-codefast-config.presenter.mjs +18 -0
  73. package/dist/lib/core/presentation/parse-cli-schema.presenter.mjs +7 -0
  74. package/dist/lib/core/presentation/presentation.module.mjs +11 -0
  75. package/dist/lib/core/presentation/try-load-codefast-config.presenter.mjs +245 -0
  76. package/dist/lib/infra/config-reporter.adapter.mjs +9 -0
  77. package/dist/lib/infra/fs-contract.port.mjs +1 -0
  78. package/dist/lib/infra/node-io.adapter.mjs +266 -0
  79. package/dist/lib/infra/workspace/repo-root.adapter.mjs +21 -0
  80. package/dist/lib/kernel/di/command.token.mjs +5 -0
  81. package/dist/lib/mirror/application/mirror-sync-json.format.mjs +12 -0
  82. package/dist/lib/mirror/application/ports/file-system-service.port.mjs +1 -0
  83. package/dist/lib/mirror/application/ports/mirror-sync-reporter.port.mjs +1 -0
  84. package/dist/lib/mirror/application/ports/package-repository.port.mjs +1 -0
  85. package/dist/lib/mirror/application/ports/sync-workspace-package.port.mjs +1 -0
  86. package/dist/lib/mirror/application/ports/workspace-service.port.mjs +1 -0
  87. package/dist/lib/mirror/application/requests/mirror-sync.request.mjs +1 -0
  88. package/dist/lib/mirror/application/services/sync-workspace-package.service.mjs +351 -0
  89. package/dist/lib/mirror/application/use-cases/generate-mirror-exports.use-case.mjs +219 -0
  90. package/dist/lib/mirror/application/use-cases/run-mirror-sync.use-case.mjs +302 -0
  91. package/dist/lib/mirror/contracts/models.mjs +1 -0
  92. package/dist/lib/mirror/contracts/presentation.contract.mjs +1 -0
  93. package/dist/lib/mirror/contracts/tokens.mjs +11 -0
  94. package/dist/lib/mirror/contracts/use-cases.contract.mjs +1 -0
  95. package/dist/lib/mirror/domain/constants.domain.mjs +16 -0
  96. package/dist/lib/mirror/domain/errors.domain.mjs +15 -0
  97. package/dist/lib/mirror/domain/types.domain.mjs +1 -0
  98. package/dist/lib/mirror/infra/dirent-list.adapter.mjs +13 -0
  99. package/dist/lib/mirror/infra/file-system-service.adapter.mjs +256 -0
  100. package/dist/lib/mirror/infra/mirror-sync-cli-options.adapter.mjs +1 -0
  101. package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.mjs +236 -0
  102. package/dist/lib/mirror/infra/package-filter.adapter.mjs +25 -0
  103. package/dist/lib/mirror/infra/package-repository.adapter.mjs +235 -0
  104. package/dist/lib/mirror/infra/path-normalizer.adapter.mjs +7 -0
  105. package/dist/lib/mirror/infra/update-pkg.adapter.mjs +102 -0
  106. package/dist/lib/mirror/infra/workspace-packages.adapter.mjs +154 -0
  107. package/dist/lib/mirror/infra/workspace-service.adapter.mjs +232 -0
  108. package/dist/lib/mirror/mirror.feature.module.mjs +19 -0
  109. package/dist/lib/mirror/mirror.module.mjs +23 -0
  110. package/dist/lib/mirror/mirror.presentation.module.mjs +11 -0
  111. package/dist/lib/mirror/presentation/mirror-cli-schema.presenter.mjs +12 -0
  112. package/dist/lib/mirror/presentation/prepare-mirror.orchestrator.mjs +263 -0
  113. package/dist/lib/mirror/presentation/reporter.presenter.mjs +111 -0
  114. package/dist/lib/mirror/presentation/resolve-mirror-package-arg.presenter.mjs +20 -0
  115. package/dist/lib/shared/source-code/domain/text-edit.model.mjs +28 -0
  116. package/dist/lib/shared/source-code/infra/tsx-file-walk.adapter.mjs +33 -0
  117. package/dist/lib/tag/application/ports/tag-since-writer.port.mjs +1 -0
  118. package/dist/lib/tag/application/ports/tag-version-resolver.port.mjs +1 -0
  119. package/dist/lib/tag/application/ports/target-resolver.port.mjs +1 -0
  120. package/dist/lib/tag/application/ports/typescript-tree-walk.port.mjs +1 -0
  121. package/dist/lib/tag/application/requests/tag-sync.request.mjs +1 -0
  122. package/dist/lib/tag/application/tag-sync-cli-result.mjs +11 -0
  123. package/dist/lib/tag/application/tag-sync-json.format.mjs +14 -0
  124. package/dist/lib/tag/application/use-cases/run-tag-sync.use-case.mjs +398 -0
  125. package/dist/lib/tag/contracts/models.mjs +1 -0
  126. package/dist/lib/tag/contracts/presentation.contract.mjs +1 -0
  127. package/dist/lib/tag/contracts/tokens.mjs +12 -0
  128. package/dist/lib/tag/contracts/use-cases.contract.mjs +1 -0
  129. package/dist/lib/tag/domain/types.domain.mjs +1 -0
  130. package/dist/lib/tag/infra/tag-since-writer.adapter.mjs +343 -0
  131. package/dist/lib/tag/infra/tag-sync-cli-options.adapter.mjs +1 -0
  132. package/dist/lib/tag/infra/tag-target-candidates.adapter.mjs +170 -0
  133. package/dist/lib/tag/infra/tag-target-resolver.adapter.mjs +226 -0
  134. package/dist/lib/tag/infra/tag-version-resolver.adapter.mjs +247 -0
  135. package/dist/lib/tag/infra/typescript-tree-walk.adapter.mjs +226 -0
  136. package/dist/lib/tag/presentation/colors.presenter.mjs +12 -0
  137. package/dist/lib/tag/presentation/create-tag-progress-listener.presenter.mjs +228 -0
  138. package/dist/lib/tag/presentation/prepare-tag.orchestrator.mjs +264 -0
  139. package/dist/lib/tag/presentation/present-tag-sync-result.presenter.mjs +233 -0
  140. package/dist/lib/tag/presentation/resolve-tag-cli-target.presenter.mjs +9 -0
  141. package/dist/lib/tag/presentation/resolve-tag-workspace-root.presenter.mjs +12 -0
  142. package/dist/lib/tag/presentation/tag-cli-schema.presenter.mjs +12 -0
  143. package/dist/lib/tag/presentation/tag-sync.presenter.mjs +78 -0
  144. package/dist/lib/tag/tag.feature.module.mjs +19 -0
  145. package/dist/lib/tag/tag.module.mjs +21 -0
  146. package/dist/lib/tag/tag.presentation.module.mjs +15 -0
  147. package/dist/program.mjs +39 -0
  148. package/package.json +16 -19
  149. package/dist/bin.d.ts +0 -3
  150. package/dist/bin.d.ts.map +0 -1
  151. package/dist/commands/arrange.d.ts +0 -3
  152. package/dist/commands/arrange.d.ts.map +0 -1
  153. package/dist/commands/arrange.js +0 -129
  154. package/dist/commands/mirror.d.ts +0 -4
  155. package/dist/commands/mirror.d.ts.map +0 -1
  156. package/dist/commands/mirror.js +0 -75
  157. package/dist/commands/tag.d.ts +0 -3
  158. package/dist/commands/tag.d.ts.map +0 -1
  159. package/dist/commands/tag.js +0 -41
  160. package/dist/lib/arrange/application/analyze.d.ts +0 -17
  161. package/dist/lib/arrange/application/analyze.d.ts.map +0 -1
  162. package/dist/lib/arrange/application/analyze.js +0 -24
  163. package/dist/lib/arrange/application/group-file-preview.d.ts +0 -17
  164. package/dist/lib/arrange/application/group-file-preview.d.ts.map +0 -1
  165. package/dist/lib/arrange/application/group-file-preview.js +0 -46
  166. package/dist/lib/arrange/application/group-file.d.ts +0 -5
  167. package/dist/lib/arrange/application/group-file.d.ts.map +0 -1
  168. package/dist/lib/arrange/application/group-file.js +0 -40
  169. package/dist/lib/arrange/application/ports/domain-source-parser.port.d.ts +0 -5
  170. package/dist/lib/arrange/application/ports/domain-source-parser.port.d.ts.map +0 -1
  171. package/dist/lib/arrange/application/ports/file-walker.port.d.ts +0 -5
  172. package/dist/lib/arrange/application/ports/file-walker.port.d.ts.map +0 -1
  173. package/dist/lib/arrange/application/requests/analyze-directory.request.d.ts +0 -6
  174. package/dist/lib/arrange/application/requests/analyze-directory.request.d.ts.map +0 -1
  175. package/dist/lib/arrange/application/requests/analyze-directory.request.js +0 -4
  176. package/dist/lib/arrange/application/requests/arrange-sync.request.d.ts +0 -18
  177. package/dist/lib/arrange/application/requests/arrange-sync.request.d.ts.map +0 -1
  178. package/dist/lib/arrange/application/requests/arrange-sync.request.js +0 -15
  179. package/dist/lib/arrange/application/run-target.d.ts +0 -19
  180. package/dist/lib/arrange/application/run-target.d.ts.map +0 -1
  181. package/dist/lib/arrange/application/run-target.js +0 -85
  182. package/dist/lib/arrange/domain/arrange-analyze.service.d.ts +0 -12
  183. package/dist/lib/arrange/domain/arrange-analyze.service.d.ts.map +0 -1
  184. package/dist/lib/arrange/domain/arrange-analyze.service.js +0 -116
  185. package/dist/lib/arrange/domain/arrange-grouping.service.d.ts +0 -53
  186. package/dist/lib/arrange/domain/arrange-grouping.service.d.ts.map +0 -1
  187. package/dist/lib/arrange/domain/arrange-grouping.service.js +0 -106
  188. package/dist/lib/arrange/domain/ast/ast-helpers.d.ts +0 -28
  189. package/dist/lib/arrange/domain/ast/ast-helpers.d.ts.map +0 -1
  190. package/dist/lib/arrange/domain/ast/ast-helpers.js +0 -130
  191. package/dist/lib/arrange/domain/ast/ast-node.model.d.ts +0 -179
  192. package/dist/lib/arrange/domain/ast/ast-node.model.d.ts.map +0 -1
  193. package/dist/lib/arrange/domain/ast/ast-node.model.js +0 -210
  194. package/dist/lib/arrange/domain/ast/collectors-cn.d.ts +0 -7
  195. package/dist/lib/arrange/domain/ast/collectors-cn.d.ts.map +0 -1
  196. package/dist/lib/arrange/domain/ast/collectors-cn.js +0 -70
  197. package/dist/lib/arrange/domain/ast/collectors-jsx.d.ts +0 -4
  198. package/dist/lib/arrange/domain/ast/collectors-jsx.d.ts.map +0 -1
  199. package/dist/lib/arrange/domain/ast/collectors-jsx.js +0 -21
  200. package/dist/lib/arrange/domain/ast/collectors-tv.d.ts +0 -13
  201. package/dist/lib/arrange/domain/ast/collectors-tv.d.ts.map +0 -1
  202. package/dist/lib/arrange/domain/ast/collectors-tv.js +0 -302
  203. package/dist/lib/arrange/domain/ast/targets.d.ts +0 -8
  204. package/dist/lib/arrange/domain/ast/targets.d.ts.map +0 -1
  205. package/dist/lib/arrange/domain/ast/targets.js +0 -147
  206. package/dist/lib/arrange/domain/constants.d.ts +0 -68
  207. package/dist/lib/arrange/domain/constants.d.ts.map +0 -1
  208. package/dist/lib/arrange/domain/constants.js +0 -180
  209. package/dist/lib/arrange/domain/errors.d.ts +0 -14
  210. package/dist/lib/arrange/domain/errors.d.ts.map +0 -1
  211. package/dist/lib/arrange/domain/errors.js +0 -16
  212. package/dist/lib/arrange/domain/grouping.d.ts +0 -41
  213. package/dist/lib/arrange/domain/grouping.d.ts.map +0 -1
  214. package/dist/lib/arrange/domain/grouping.js +0 -307
  215. package/dist/lib/arrange/domain/imports.d.ts +0 -7
  216. package/dist/lib/arrange/domain/imports.d.ts.map +0 -1
  217. package/dist/lib/arrange/domain/imports.js +0 -80
  218. package/dist/lib/arrange/domain/source-text-formatters.d.ts +0 -16
  219. package/dist/lib/arrange/domain/source-text-formatters.d.ts.map +0 -1
  220. package/dist/lib/arrange/domain/source-text-formatters.js +0 -55
  221. package/dist/lib/arrange/domain/tokenizer.d.ts +0 -45
  222. package/dist/lib/arrange/domain/tokenizer.d.ts.map +0 -1
  223. package/dist/lib/arrange/domain/tokenizer.js +0 -466
  224. package/dist/lib/arrange/domain/types.d.ts +0 -112
  225. package/dist/lib/arrange/domain/types.d.ts.map +0 -1
  226. package/dist/lib/arrange/domain/types.js +0 -7
  227. package/dist/lib/arrange/index.d.ts +0 -45
  228. package/dist/lib/arrange/index.d.ts.map +0 -1
  229. package/dist/lib/arrange/index.js +0 -41
  230. package/dist/lib/arrange/infra/arrange-sync-cli-options.d.ts +0 -14
  231. package/dist/lib/arrange/infra/arrange-sync-cli-options.d.ts.map +0 -1
  232. package/dist/lib/arrange/infra/domain-source-parser.adapter.d.ts +0 -11
  233. package/dist/lib/arrange/infra/domain-source-parser.adapter.d.ts.map +0 -1
  234. package/dist/lib/arrange/infra/domain-source-parser.adapter.js +0 -19
  235. package/dist/lib/arrange/infra/ensure-cn-import.d.ts +0 -3
  236. package/dist/lib/arrange/infra/ensure-cn-import.d.ts.map +0 -1
  237. package/dist/lib/arrange/infra/ensure-cn-import.js +0 -6
  238. package/dist/lib/arrange/infra/file-walker.adapter.d.ts +0 -8
  239. package/dist/lib/arrange/infra/file-walker.adapter.d.ts.map +0 -1
  240. package/dist/lib/arrange/infra/file-walker.adapter.js +0 -17
  241. package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.d.ts +0 -8
  242. package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.d.ts.map +0 -1
  243. package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.js +0 -25
  244. package/dist/lib/arrange/infra/ts-ast-translator.d.ts +0 -10
  245. package/dist/lib/arrange/infra/ts-ast-translator.d.ts.map +0 -1
  246. package/dist/lib/arrange/infra/ts-ast-translator.js +0 -363
  247. package/dist/lib/arrange/presentation/formatters.d.ts +0 -3
  248. package/dist/lib/arrange/presentation/formatters.d.ts.map +0 -1
  249. package/dist/lib/arrange/presentation/formatters.js +0 -2
  250. package/dist/lib/arrange/presentation/report.d.ts +0 -4
  251. package/dist/lib/arrange/presentation/report.d.ts.map +0 -1
  252. package/dist/lib/arrange/presentation/report.js +0 -37
  253. package/dist/lib/config/domain/schema.d.ts +0 -50
  254. package/dist/lib/config/domain/schema.d.ts.map +0 -1
  255. package/dist/lib/config/domain/schema.js +0 -43
  256. package/dist/lib/config/index.d.ts +0 -4
  257. package/dist/lib/config/index.d.ts.map +0 -1
  258. package/dist/lib/config/index.js +0 -2
  259. package/dist/lib/config/infra/loader.d.ts +0 -11
  260. package/dist/lib/config/infra/loader.d.ts.map +0 -1
  261. package/dist/lib/config/infra/loader.js +0 -90
  262. package/dist/lib/core/application/architecture-boundaries.d.ts +0 -19
  263. package/dist/lib/core/application/architecture-boundaries.d.ts.map +0 -1
  264. package/dist/lib/core/application/architecture-boundaries.js +0 -263
  265. package/dist/lib/core/application/ports/cli-io.port.d.ts +0 -27
  266. package/dist/lib/core/application/ports/cli-io.port.d.ts.map +0 -1
  267. package/dist/lib/core/application/schema-parse.d.ts +0 -8
  268. package/dist/lib/core/application/schema-parse.d.ts.map +0 -1
  269. package/dist/lib/core/application/schema-parse.js +0 -20
  270. package/dist/lib/core/application/utils/caught-unknown-message.d.ts +0 -6
  271. package/dist/lib/core/application/utils/caught-unknown-message.d.ts.map +0 -1
  272. package/dist/lib/core/application/utils/caught-unknown-message.js +0 -34
  273. package/dist/lib/core/application/utils/verbose-diagnostics.d.ts +0 -5
  274. package/dist/lib/core/application/utils/verbose-diagnostics.d.ts.map +0 -1
  275. package/dist/lib/core/application/utils/verbose-diagnostics.js +0 -7
  276. package/dist/lib/core/domain/errors.d.ts +0 -11
  277. package/dist/lib/core/domain/errors.d.ts.map +0 -1
  278. package/dist/lib/core/domain/errors.js +0 -9
  279. package/dist/lib/core/domain/result.d.ts +0 -15
  280. package/dist/lib/core/domain/result.d.ts.map +0 -1
  281. package/dist/lib/core/domain/result.js +0 -9
  282. package/dist/lib/core/infra/container.d.ts +0 -34
  283. package/dist/lib/core/infra/container.d.ts.map +0 -1
  284. package/dist/lib/core/infra/container.js +0 -65
  285. package/dist/lib/core/infra/logging-decorator.d.ts +0 -12
  286. package/dist/lib/core/infra/logging-decorator.d.ts.map +0 -1
  287. package/dist/lib/core/infra/logging-decorator.js +0 -75
  288. package/dist/lib/core/presentation/cli-executor.d.ts +0 -33
  289. package/dist/lib/core/presentation/cli-executor.d.ts.map +0 -1
  290. package/dist/lib/core/presentation/cli-executor.js +0 -73
  291. package/dist/lib/core/presentation/create-command-handler.d.ts +0 -20
  292. package/dist/lib/core/presentation/create-command-handler.d.ts.map +0 -1
  293. package/dist/lib/core/presentation/create-command-handler.js +0 -70
  294. package/dist/lib/core/presentation/format-app-error.d.ts +0 -6
  295. package/dist/lib/core/presentation/format-app-error.d.ts.map +0 -1
  296. package/dist/lib/core/presentation/format-app-error.js +0 -19
  297. package/dist/lib/infra/caught-unknown-message.d.ts +0 -2
  298. package/dist/lib/infra/caught-unknown-message.d.ts.map +0 -1
  299. package/dist/lib/infra/caught-unknown-message.js +0 -1
  300. package/dist/lib/infra/config-reporter.d.ts +0 -4
  301. package/dist/lib/infra/config-reporter.d.ts.map +0 -1
  302. package/dist/lib/infra/config-reporter.js +0 -9
  303. package/dist/lib/infra/fs-contract.d.ts +0 -2
  304. package/dist/lib/infra/fs-contract.d.ts.map +0 -1
  305. package/dist/lib/infra/node-io.d.ts +0 -4
  306. package/dist/lib/infra/node-io.d.ts.map +0 -1
  307. package/dist/lib/infra/node-io.js +0 -27
  308. package/dist/lib/infra/workspace/repo-root.d.ts +0 -7
  309. package/dist/lib/infra/workspace/repo-root.d.ts.map +0 -1
  310. package/dist/lib/infra/workspace/repo-root.js +0 -23
  311. package/dist/lib/mirror/application/engine.d.ts +0 -10
  312. package/dist/lib/mirror/application/engine.d.ts.map +0 -1
  313. package/dist/lib/mirror/application/engine.js +0 -271
  314. package/dist/lib/mirror/application/ports/file-system-service.port.d.ts +0 -6
  315. package/dist/lib/mirror/application/ports/file-system-service.port.d.ts.map +0 -1
  316. package/dist/lib/mirror/application/ports/mirror-sync-reporter.port.d.ts +0 -27
  317. package/dist/lib/mirror/application/ports/mirror-sync-reporter.port.d.ts.map +0 -1
  318. package/dist/lib/mirror/application/ports/package-repository.port.d.ts +0 -16
  319. package/dist/lib/mirror/application/ports/package-repository.port.d.ts.map +0 -1
  320. package/dist/lib/mirror/application/ports/workspace-service.port.d.ts +0 -7
  321. package/dist/lib/mirror/application/ports/workspace-service.port.d.ts.map +0 -1
  322. package/dist/lib/mirror/application/requests/mirror-sync.request.d.ts +0 -10
  323. package/dist/lib/mirror/application/requests/mirror-sync.request.d.ts.map +0 -1
  324. package/dist/lib/mirror/application/requests/mirror-sync.request.js +0 -8
  325. package/dist/lib/mirror/application/sync.d.ts +0 -19
  326. package/dist/lib/mirror/application/sync.d.ts.map +0 -1
  327. package/dist/lib/mirror/application/sync.js +0 -168
  328. package/dist/lib/mirror/domain/constants.d.ts +0 -6
  329. package/dist/lib/mirror/domain/constants.d.ts.map +0 -1
  330. package/dist/lib/mirror/domain/constants.js +0 -5
  331. package/dist/lib/mirror/domain/errors.d.ts +0 -10
  332. package/dist/lib/mirror/domain/errors.d.ts.map +0 -1
  333. package/dist/lib/mirror/domain/errors.js +0 -12
  334. package/dist/lib/mirror/domain/types.d.ts +0 -65
  335. package/dist/lib/mirror/domain/types.d.ts.map +0 -1
  336. package/dist/lib/mirror/index.d.ts +0 -6
  337. package/dist/lib/mirror/index.d.ts.map +0 -1
  338. package/dist/lib/mirror/index.js +0 -1
  339. package/dist/lib/mirror/infra/dirent-list.d.ts +0 -9
  340. package/dist/lib/mirror/infra/dirent-list.d.ts.map +0 -1
  341. package/dist/lib/mirror/infra/dirent-list.js +0 -13
  342. package/dist/lib/mirror/infra/file-system-service.adapter.d.ts +0 -7
  343. package/dist/lib/mirror/infra/file-system-service.adapter.d.ts.map +0 -1
  344. package/dist/lib/mirror/infra/file-system-service.adapter.js +0 -47
  345. package/dist/lib/mirror/infra/mirror-sync-cli-options.d.ts +0 -14
  346. package/dist/lib/mirror/infra/mirror-sync-cli-options.d.ts.map +0 -1
  347. package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.d.ts +0 -3
  348. package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.d.ts.map +0 -1
  349. package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.js +0 -13
  350. package/dist/lib/mirror/infra/package-filter.d.ts +0 -8
  351. package/dist/lib/mirror/infra/package-filter.d.ts.map +0 -1
  352. package/dist/lib/mirror/infra/package-filter.js +0 -33
  353. package/dist/lib/mirror/infra/package-repository.adapter.d.ts +0 -17
  354. package/dist/lib/mirror/infra/package-repository.adapter.d.ts.map +0 -1
  355. package/dist/lib/mirror/infra/package-repository.adapter.js +0 -17
  356. package/dist/lib/mirror/infra/path-normalizer.d.ts +0 -2
  357. package/dist/lib/mirror/infra/path-normalizer.d.ts.map +0 -1
  358. package/dist/lib/mirror/infra/path-normalizer.js +0 -4
  359. package/dist/lib/mirror/infra/update-pkg.d.ts +0 -19
  360. package/dist/lib/mirror/infra/update-pkg.d.ts.map +0 -1
  361. package/dist/lib/mirror/infra/update-pkg.js +0 -156
  362. package/dist/lib/mirror/infra/workspace-packages.d.ts +0 -26
  363. package/dist/lib/mirror/infra/workspace-packages.d.ts.map +0 -1
  364. package/dist/lib/mirror/infra/workspace-packages.js +0 -170
  365. package/dist/lib/mirror/infra/workspace-service.adapter.d.ts +0 -8
  366. package/dist/lib/mirror/infra/workspace-service.adapter.d.ts.map +0 -1
  367. package/dist/lib/mirror/infra/workspace-service.adapter.js +0 -10
  368. package/dist/lib/mirror/presentation/reporter.d.ts +0 -25
  369. package/dist/lib/mirror/presentation/reporter.d.ts.map +0 -1
  370. package/dist/lib/mirror/presentation/reporter.js +0 -140
  371. package/dist/lib/shared/source-code/domain/text-edit.d.ts +0 -14
  372. package/dist/lib/shared/source-code/domain/text-edit.d.ts.map +0 -1
  373. package/dist/lib/shared/source-code/domain/text-edit.js +0 -30
  374. package/dist/lib/shared/source-code/infra/tsx-file-walk.d.ts +0 -4
  375. package/dist/lib/shared/source-code/infra/tsx-file-walk.d.ts.map +0 -1
  376. package/dist/lib/shared/source-code/infra/tsx-file-walk.js +0 -37
  377. package/dist/lib/tag/application/engine.d.ts +0 -23
  378. package/dist/lib/tag/application/engine.d.ts.map +0 -1
  379. package/dist/lib/tag/application/engine.js +0 -357
  380. package/dist/lib/tag/application/ports/target-resolver.port.d.ts +0 -6
  381. package/dist/lib/tag/application/ports/target-resolver.port.d.ts.map +0 -1
  382. package/dist/lib/tag/application/ports/typescript-tree-walk.port.d.ts +0 -6
  383. package/dist/lib/tag/application/ports/typescript-tree-walk.port.d.ts.map +0 -1
  384. package/dist/lib/tag/application/requests/tag-sync.request.d.ts +0 -10
  385. package/dist/lib/tag/application/requests/tag-sync.request.d.ts.map +0 -1
  386. package/dist/lib/tag/application/requests/tag-sync.request.js +0 -8
  387. package/dist/lib/tag/domain/types.d.ts +0 -56
  388. package/dist/lib/tag/domain/types.d.ts.map +0 -1
  389. package/dist/lib/tag/index.d.ts +0 -14
  390. package/dist/lib/tag/index.d.ts.map +0 -1
  391. package/dist/lib/tag/index.js +0 -10
  392. package/dist/lib/tag/infra/tag-sync-cli-options.d.ts +0 -14
  393. package/dist/lib/tag/infra/tag-sync-cli-options.d.ts.map +0 -1
  394. package/dist/lib/tag/infra/tag-target-resolver.adapter.d.ts +0 -3
  395. package/dist/lib/tag/infra/tag-target-resolver.adapter.d.ts.map +0 -1
  396. package/dist/lib/tag/infra/tag-target-resolver.adapter.js +0 -4
  397. package/dist/lib/tag/infra/target-resolver.d.ts +0 -4
  398. package/dist/lib/tag/infra/target-resolver.d.ts.map +0 -1
  399. package/dist/lib/tag/infra/target-resolver.js +0 -200
  400. package/dist/lib/tag/infra/typescript-tree-walk.adapter.d.ts +0 -3
  401. package/dist/lib/tag/infra/typescript-tree-walk.adapter.d.ts.map +0 -1
  402. package/dist/lib/tag/infra/typescript-tree-walk.adapter.js +0 -4
  403. package/dist/lib/tag/presentation/colors.d.ts +0 -8
  404. package/dist/lib/tag/presentation/colors.d.ts.map +0 -1
  405. package/dist/lib/tag/presentation/colors.js +0 -9
  406. package/dist/lib/tag/presentation/tag-presenter.d.ts +0 -20
  407. package/dist/lib/tag/presentation/tag-presenter.d.ts.map +0 -1
  408. package/dist/lib/tag/presentation/tag-presenter.js +0 -92
  409. package/dist/program.d.ts +0 -4
  410. package/dist/program.d.ts.map +0 -1
  411. package/dist/program.js +0 -40
  412. /package/dist/lib/arrange/application/ports/{domain-source-parser.port.js → domain-source-parser.port.mjs} +0 -0
  413. /package/dist/lib/arrange/application/ports/{file-walker.port.js → file-walker.port.mjs} +0 -0
  414. /package/dist/lib/arrange/{infra/arrange-sync-cli-options.js → application/ports/group-file-preview.port.mjs} +0 -0
  415. /package/dist/lib/{core/application/ports/cli-io.port.js → arrange/application/requests/analyze-directory.request.mjs} +0 -0
  416. /package/dist/lib/{infra/fs-contract.js → arrange/application/requests/arrange-sync.request.mjs} +0 -0
  417. /package/dist/lib/{mirror/application/ports/file-system-service.port.js → arrange/application/requests/suggest-groups.request.mjs} +0 -0
  418. /package/dist/lib/{mirror/application/ports/mirror-sync-reporter.port.js → arrange/contracts/models.mjs} +0 -0
  419. /package/dist/lib/{mirror/application/ports/package-repository.port.js → arrange/contracts/presentation.contract.mjs} +0 -0
  420. /package/dist/lib/{mirror/application/ports/workspace-service.port.js → arrange/contracts/services.contract.mjs} +0 -0
  421. /package/dist/lib/{mirror/domain/types.js → arrange/contracts/use-cases.contract.mjs} +0 -0
  422. /package/dist/lib/{mirror/infra/mirror-sync-cli-options.js → arrange/domain/types.domain.mjs} +0 -0
  423. /package/dist/lib/{tag/application/ports/target-resolver.port.js → arrange/infra/arrange-sync-cli-options.adapter.mjs} +0 -0
  424. /package/dist/lib/{tag/application/ports/typescript-tree-walk.port.js → config/application/ports/config-loader.port.mjs} +0 -0
  425. /package/dist/lib/{tag/domain/types.js → config/domain/schema.domain.mjs} +0 -0
  426. /package/dist/lib/{tag/infra/tag-sync-cli-options.js → core/application/ports/cli-io.port.mjs} +0 -0
@@ -1,271 +0,0 @@
1
- import path from "node:path";
2
- import { DTS_EXTENSION, PACKAGE_JSON_EXPORT, VALID_JS_EXTENSIONS, } from "#lib/mirror/domain/constants";
3
- function resolvePackageScopedConfig(configMap, pkgMeta) {
4
- if (!configMap) {
5
- return undefined;
6
- }
7
- return configMap[pkgMeta.packageName];
8
- }
9
- function groupFilesByModule(files) {
10
- const modules = new Map();
11
- for (const file of files) {
12
- let ext;
13
- let modulePath;
14
- if (file.endsWith(DTS_EXTENSION)) {
15
- ext = DTS_EXTENSION;
16
- modulePath = file.slice(0, -DTS_EXTENSION.length);
17
- }
18
- else {
19
- ext = path.extname(file);
20
- if (!VALID_JS_EXTENSIONS.has(ext)) {
21
- continue;
22
- }
23
- modulePath = file.slice(0, -ext.length);
24
- }
25
- if (!path.basename(modulePath)) {
26
- continue;
27
- }
28
- let distModule = modules.get(modulePath);
29
- if (!distModule) {
30
- distModule = { path: modulePath, files: { js: null, mjs: null, cjs: null, dts: null } };
31
- modules.set(modulePath, distModule);
32
- }
33
- if (ext === ".js") {
34
- distModule.files.js = file;
35
- }
36
- else if (ext === ".mjs") {
37
- distModule.files.mjs = file;
38
- }
39
- else if (ext === ".cjs") {
40
- distModule.files.cjs = file;
41
- }
42
- else if (ext === DTS_EXTENSION) {
43
- distModule.files.dts = file;
44
- }
45
- }
46
- return modules;
47
- }
48
- function toExportPath(distPath) {
49
- if (distPath === "index") {
50
- return ".";
51
- }
52
- if (distPath.endsWith("/index")) {
53
- return `./${distPath.slice(0, -6)}`;
54
- }
55
- return `./${distPath}`;
56
- }
57
- const GROUP_ORDER = {
58
- components: 100,
59
- hooks: 200,
60
- primitives: 300,
61
- core: 400,
62
- loaders: 500,
63
- utils: 600,
64
- adapters: 700,
65
- script: 750,
66
- css: 900,
67
- };
68
- function getExportGroup(exportPath, pathTransform) {
69
- if (exportPath === ".") {
70
- return [".", "", 0, 0];
71
- }
72
- const cleanPath = exportPath.startsWith("./") ? exportPath.slice(2) : exportPath;
73
- if (cleanPath.endsWith("/*")) {
74
- const dirName = cleanPath.slice(0, -2);
75
- return [dirName, "", dirName === "css" ? 900 : 100, 0];
76
- }
77
- const parts = cleanPath.split("/");
78
- if (parts.length === 1) {
79
- const name = parts[0];
80
- if (name in GROUP_ORDER) {
81
- return [name, "", GROUP_ORDER[name] ?? 0, 0];
82
- }
83
- if (pathTransform) {
84
- return ["components", name, 100, 1];
85
- }
86
- return ["", name, 800, 1];
87
- }
88
- const group = parts[0] ?? "";
89
- const subpath = parts.slice(1).join("/");
90
- return [group, subpath, GROUP_ORDER[group] ?? 700, 1];
91
- }
92
- export function createPathTransform(config, pkgMeta) {
93
- const pathConfig = resolvePackageScopedConfig(config?.pathTransformations, pkgMeta);
94
- if (!pathConfig) {
95
- return null;
96
- }
97
- const { removePrefix } = pathConfig;
98
- if (!removePrefix) {
99
- return null;
100
- }
101
- return (exportPath) => {
102
- if (!exportPath.startsWith(removePrefix)) {
103
- return exportPath;
104
- }
105
- const result = exportPath.slice(removePrefix.length);
106
- if (result && result !== "." && !result.startsWith("./")) {
107
- return `./${result}`;
108
- }
109
- return result;
110
- };
111
- }
112
- function getSortTuple(exportPath, pathTransform) {
113
- const [group, subpath, order, isIndex] = getExportGroup(exportPath, pathTransform);
114
- return [order, group, isIndex, subpath];
115
- }
116
- function compareTuples(left, right) {
117
- if (left[0] !== right[0]) {
118
- return left[0] - right[0];
119
- }
120
- if (left[1] !== right[1]) {
121
- return left[1] < right[1] ? -1 : 1;
122
- }
123
- if (left[2] !== right[2]) {
124
- return left[2] - right[2];
125
- }
126
- if (left[3] !== right[3]) {
127
- return left[3] < right[3] ? -1 : 1;
128
- }
129
- return 0;
130
- }
131
- async function generateCssExports(fs, fileSystemService, distDir, cssConfig) {
132
- if (cssConfig === false) {
133
- return {};
134
- }
135
- if (cssConfig === true) {
136
- cssConfig = { enabled: true };
137
- }
138
- if (!cssConfig || cssConfig.enabled === false) {
139
- return {};
140
- }
141
- const files = await fileSystemService.listRelativeFilesRecursively(fs, distDir);
142
- const cssFiles = files.filter((relativeDistPath) => relativeDistPath.endsWith(".css"));
143
- if (!cssFiles.length) {
144
- return {};
145
- }
146
- const cssExports = {
147
- ...cssConfig.customExports,
148
- };
149
- const cssByDir = new Map();
150
- const rootCss = [];
151
- for (const file of cssFiles) {
152
- const dirName = path.dirname(file).split(path.sep).join("/");
153
- if (dirName === ".") {
154
- rootCss.push(file);
155
- }
156
- else {
157
- const arr = cssByDir.get(dirName) || [];
158
- arr.push(file);
159
- cssByDir.set(dirName, arr);
160
- }
161
- }
162
- for (const file of rootCss) {
163
- const exportPath = `./${file}`;
164
- if (!(exportPath in cssExports)) {
165
- cssExports[exportPath] = `./dist/${file}`;
166
- }
167
- }
168
- for (const [dirName, dirFiles] of cssByDir.entries()) {
169
- if ((await fileSystemService.isDirectoryCssOnly(fs, distDir, dirName)) &&
170
- !cssConfig.forceExportFiles) {
171
- const wildcardExport = `./${dirName}/*`;
172
- if (!(wildcardExport in cssExports)) {
173
- cssExports[wildcardExport] = `./dist/${dirName}/*`;
174
- }
175
- }
176
- else {
177
- for (const file of dirFiles) {
178
- const exportPath = `./${file}`;
179
- if (!(exportPath in cssExports)) {
180
- cssExports[exportPath] = `./dist/${file}`;
181
- }
182
- }
183
- }
184
- }
185
- return cssExports;
186
- }
187
- /**
188
- * Compute `package.json#exports` from a built `dist/` tree. No logging; no writes.
189
- */
190
- export async function generateExports(fs, fileSystemService, distDir, pathTransform, cssConfig, customExports) {
191
- const files = await fileSystemService.listRelativeFilesRecursively(fs, distDir);
192
- if (!files.length) {
193
- return {
194
- // Keep "./package.json" self-mapped as the standard Node.js exports fallback for package metadata.
195
- exports: { [PACKAGE_JSON_EXPORT]: PACKAGE_JSON_EXPORT },
196
- originalPathBySpecifier: { [PACKAGE_JSON_EXPORT]: PACKAGE_JSON_EXPORT },
197
- jsCount: 0,
198
- cssCount: 0,
199
- };
200
- }
201
- const modules = groupFilesByModule(files);
202
- const validModules = Array.from(modules.values()).filter((moduleEntry) => (moduleEntry.files.js || moduleEntry.files.mjs) && moduleEntry.files.dts);
203
- if (!validModules.length) {
204
- return {
205
- // Keep "./package.json" self-mapped as the standard Node.js exports fallback for package metadata.
206
- exports: { [PACKAGE_JSON_EXPORT]: PACKAGE_JSON_EXPORT },
207
- originalPathBySpecifier: { [PACKAGE_JSON_EXPORT]: PACKAGE_JSON_EXPORT },
208
- jsCount: 0,
209
- cssCount: 0,
210
- };
211
- }
212
- const exportsObj = {};
213
- const originalPathBySpecifier = {};
214
- for (const distModuleEntry of validModules) {
215
- const originalExportPath = toExportPath(distModuleEntry.path);
216
- let exportPath = originalExportPath;
217
- if (pathTransform) {
218
- exportPath = pathTransform(exportPath);
219
- }
220
- const distPath = `./dist/${distModuleEntry.path}`;
221
- const entry = { types: `${distPath}.d.ts` };
222
- if (distModuleEntry.files.mjs) {
223
- entry.import = `${distPath}.mjs`;
224
- }
225
- else if (distModuleEntry.files.js) {
226
- entry.import = `${distPath}.js`;
227
- }
228
- if (distModuleEntry.files.cjs) {
229
- entry.require = `${distPath}.cjs`;
230
- }
231
- exportsObj[exportPath] = entry;
232
- originalPathBySpecifier[exportPath] = originalExportPath;
233
- }
234
- let sortedKeys = Object.keys(exportsObj).sort((pathA, pathB) => compareTuples(getSortTuple(pathA, pathTransform), getSortTuple(pathB, pathTransform)));
235
- const sortedExports = {};
236
- for (const exportKey of sortedKeys) {
237
- sortedExports[exportKey] = exportsObj[exportKey];
238
- }
239
- const cssExports = await generateCssExports(fs, fileSystemService, distDir, cssConfig ?? { enabled: true });
240
- Object.assign(sortedExports, cssExports);
241
- for (const [specifier, mappedPath] of Object.entries(customExports || {})) {
242
- if (specifier !== PACKAGE_JSON_EXPORT) {
243
- sortedExports[specifier] = mappedPath;
244
- }
245
- }
246
- for (const cssSpecifier of Object.keys(cssExports)) {
247
- if (!(cssSpecifier in originalPathBySpecifier)) {
248
- originalPathBySpecifier[cssSpecifier] = cssSpecifier;
249
- }
250
- }
251
- for (const customSpecifier of Object.keys(customExports || {})) {
252
- if (customSpecifier !== PACKAGE_JSON_EXPORT && !(customSpecifier in originalPathBySpecifier)) {
253
- originalPathBySpecifier[customSpecifier] = customSpecifier;
254
- }
255
- }
256
- sortedKeys = Object.keys(sortedExports)
257
- .filter((exportKey) => exportKey !== PACKAGE_JSON_EXPORT)
258
- .sort((pathA, pathB) => compareTuples(getSortTuple(pathA, pathTransform), getSortTuple(pathB, pathTransform)));
259
- const finalExports = {};
260
- for (const exportKey of sortedKeys) {
261
- finalExports[exportKey] = sortedExports[exportKey];
262
- }
263
- finalExports[PACKAGE_JSON_EXPORT] = PACKAGE_JSON_EXPORT;
264
- originalPathBySpecifier[PACKAGE_JSON_EXPORT] = PACKAGE_JSON_EXPORT;
265
- return {
266
- exports: finalExports,
267
- originalPathBySpecifier,
268
- jsCount: Object.keys(exportsObj).length,
269
- cssCount: Object.keys(cssExports).length,
270
- };
271
- }
@@ -1,6 +0,0 @@
1
- import type { CliFs } from "#lib/core/application/ports/cli-io.port";
2
- export interface FileSystemServicePort {
3
- listRelativeFilesRecursively(fs: CliFs, dirPath: string): Promise<string[]>;
4
- isDirectoryCssOnly(fs: CliFs, distDir: string, dirPath: string): Promise<boolean>;
5
- }
6
- //# sourceMappingURL=file-system-service.port.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-system-service.port.d.ts","sourceRoot":"","sources":["../../../../../src/lib/mirror/application/ports/file-system-service.port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yCAAyC,CAAC;AAErE,MAAM,WAAW,qBAAqB;IACpC,4BAA4B,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5E,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACnF"}
@@ -1,27 +0,0 @@
1
- import type { CliLogger } from "#lib/core/application/ports/cli-io.port";
2
- import type { GlobalStats, PackageStats, WorkspaceMultiDiscoverySource } from "#lib/mirror/domain/types";
3
- export type MirrorProcessingModeInput = {
4
- kind: "single";
5
- } | {
6
- kind: "multi";
7
- source: WorkspaceMultiDiscoverySource;
8
- };
9
- /**
10
- * CLI output for mirror sync — implemented in `presentation`, injected here so `application/sync` stays clean.
11
- */
12
- export type MirrorSyncReporterPort = {
13
- configureMirrorColors(noColor: boolean): void;
14
- mirrorBanner(logger: CliLogger): void;
15
- mirrorProcessingMode(logger: CliLogger, mode: MirrorProcessingModeInput): void;
16
- mirrorNoPackages(logger: CliLogger): void;
17
- logSkippedWorkspacePackage(logger: CliLogger, index: number, total: number, displayName: string, reason: string): void;
18
- logPackageSuccess(logger: CliLogger, index: number, total: number, pkgStats: PackageStats, generatedDistAssetCounts: {
19
- jsCount: number;
20
- cssCount: number;
21
- }, verbose: boolean): void;
22
- logPrunedStaleExport(logger: CliLogger, exportSpecifier: string): void;
23
- logPackageError(logger: CliLogger, index: number, total: number, displayName: string, errValue: unknown, verbose: boolean): void;
24
- mirrorSummarySeparator(logger: CliLogger): void;
25
- mirrorSummary(logger: CliLogger, stats: GlobalStats, elapsedSeconds: number): void;
26
- };
27
- //# sourceMappingURL=mirror-sync-reporter.port.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mirror-sync-reporter.port.d.ts","sourceRoot":"","sources":["../../../../../src/lib/mirror/application/ports/mirror-sync-reporter.port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,6BAA6B,EAC9B,MAAM,0BAA0B,CAAC;AAElC,MAAM,MAAM,yBAAyB,GACjC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,6BAA6B,CAAA;CAAE,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9C,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACtC,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC/E,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IAC1C,0BAA0B,CACxB,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,IAAI,CAAC;IACR,iBAAiB,CACf,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,YAAY,EACtB,wBAAwB,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAC/D,OAAO,EAAE,OAAO,GACf,IAAI,CAAC;IACR,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACvE,eAAe,CACb,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,OAAO,GACf,IAAI,CAAC;IACR,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IAChD,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CACpF,CAAC"}
@@ -1,16 +0,0 @@
1
- import type { CliFs } from "#lib/core/application/ports/cli-io.port";
2
- import type { ExportMapData, ExportOriginalPathBySpecifier, PackageJsonShape } from "#lib/mirror/domain/types";
3
- export interface PackageRepositoryPort {
4
- resolvePackageDisplayName(packageJson: {
5
- name?: unknown;
6
- }, folderBasename: string): string;
7
- writePackageJsonExportsAtomic(fs: CliFs, packageJsonPath: string, mergeInput: {
8
- generatedExports: ExportMapData;
9
- managedExportSpecifiers: string[];
10
- originalPathBySpecifier: ExportOriginalPathBySpecifier;
11
- }): Promise<{
12
- prunedKeys: string[];
13
- }>;
14
- parsePackageJsonShape(rawPackageJson: unknown): PackageJsonShape;
15
- }
16
- //# sourceMappingURL=package-repository.port.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-repository.port.d.ts","sourceRoot":"","sources":["../../../../../src/lib/mirror/application/ports/package-repository.port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yCAAyC,CAAC;AACrE,OAAO,KAAK,EACV,aAAa,EACb,6BAA6B,EAC7B,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,qBAAqB;IACpC,yBAAyB,CAAC,WAAW,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3F,6BAA6B,CAC3B,EAAE,EAAE,KAAK,EACT,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE;QACV,gBAAgB,EAAE,aAAa,CAAC;QAChC,uBAAuB,EAAE,MAAM,EAAE,CAAC;QAClC,uBAAuB,EAAE,6BAA6B,CAAC;KACxD,GACA,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACrC,qBAAqB,CAAC,cAAc,EAAE,OAAO,GAAG,gBAAgB,CAAC;CAClE"}
@@ -1,7 +0,0 @@
1
- import type { CliFs, CliLogger } from "#lib/core/application/ports/cli-io.port";
2
- import type { FindWorkspacePackagesResult } from "#lib/mirror/domain/types";
3
- export interface WorkspaceServicePort {
4
- resolvePackageFilterUnderRoot(rootDir: string, packageFilter: string): string;
5
- findWorkspacePackageRelPaths(rootDir: string, fs: CliFs, logger: CliLogger): Promise<FindWorkspacePackagesResult>;
6
- }
7
- //# sourceMappingURL=workspace-service.port.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace-service.port.d.ts","sourceRoot":"","sources":["../../../../../src/lib/mirror/application/ports/workspace-service.port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAE5E,MAAM,WAAW,oBAAoB;IACnC,6BAA6B,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9E,4BAA4B,CAC1B,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,2BAA2B,CAAC,CAAC;CACzC"}
@@ -1,10 +0,0 @@
1
- import { z } from "zod";
2
- export declare const MirrorSyncRunRequestSchema: z.ZodObject<{
3
- rootDir: z.ZodString;
4
- verbose: z.ZodOptional<z.ZodBoolean>;
5
- noColor: z.ZodOptional<z.ZodBoolean>;
6
- packageFilter: z.ZodOptional<z.ZodString>;
7
- config: z.ZodOptional<z.ZodUnknown>;
8
- }, z.core.$strip>;
9
- export type MirrorSyncRunRequest = z.infer<typeof MirrorSyncRunRequestSchema>;
10
- //# sourceMappingURL=mirror-sync.request.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mirror-sync.request.d.ts","sourceRoot":"","sources":["../../../../../src/lib/mirror/application/requests/mirror-sync.request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,0BAA0B;;;;;;iBAMrC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
@@ -1,8 +0,0 @@
1
- import { z } from "zod";
2
- export const MirrorSyncRunRequestSchema = z.object({
3
- rootDir: z.string().min(1),
4
- verbose: z.boolean().optional(),
5
- noColor: z.boolean().optional(),
6
- packageFilter: z.string().optional(),
7
- config: z.unknown().optional(),
8
- });
@@ -1,19 +0,0 @@
1
- import { type AppError } from "#lib/core/domain/errors";
2
- import { type Result } from "#lib/core/domain/result";
3
- import type { CliFs, CliLogger } from "#lib/core/application/ports/cli-io.port";
4
- import type { FileSystemServicePort } from "#lib/mirror/application/ports/file-system-service.port";
5
- import type { MirrorSyncReporterPort } from "#lib/mirror/application/ports/mirror-sync-reporter.port";
6
- import type { PackageRepositoryPort } from "#lib/mirror/application/ports/package-repository.port";
7
- import type { WorkspaceServicePort } from "#lib/mirror/application/ports/workspace-service.port";
8
- import type { MirrorSyncRunRequest } from "#lib/mirror/application/requests/mirror-sync.request";
9
- export type MirrorSyncRunDeps = {
10
- readonly fs: CliFs;
11
- readonly logger: CliLogger;
12
- readonly workspaceService: WorkspaceServicePort;
13
- readonly packageRepository: PackageRepositoryPort;
14
- readonly fileSystemService: FileSystemServicePort;
15
- readonly mirrorReporter: MirrorSyncReporterPort;
16
- };
17
- /** @returns Process exit code (0 or 1) on success, or a structured application error. */
18
- export declare function runMirrorSync(request: MirrorSyncRunRequest, deps: MirrorSyncRunDeps): Promise<Result<number, AppError>>;
19
- //# sourceMappingURL=sync.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../../src/lib/mirror/application/sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKhF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wDAAwD,CAAC;AACpG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yDAAyD,CAAC;AACtG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uDAAuD,CAAC;AACnG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sDAAsD,CAAC;AACjG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sDAAsD,CAAC;AAQjG,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,oBAAoB,CAAC;IAChD,QAAQ,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;IAClD,QAAQ,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;IAClD,QAAQ,CAAC,cAAc,EAAE,sBAAsB,CAAC;CACjD,CAAC;AA+LF,yFAAyF;AACzF,wBAAsB,aAAa,CACjC,OAAO,EAAE,oBAAoB,EAC7B,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CA0EnC"}
@@ -1,168 +0,0 @@
1
- import path from "node:path";
2
- import { appError } from "#lib/core/domain/errors";
3
- import { err, ok } from "#lib/core/domain/result";
4
- import { messageFromCaughtUnknown } from "#lib/core/application/utils/caught-unknown-message";
5
- import { DIST_DIR, PACKAGE_JSON } from "#lib/mirror/domain/constants";
6
- import { createPathTransform, generateExports } from "#lib/mirror/application/engine";
7
- function resolvePackageScopedConfig(configMap, pkgMeta) {
8
- if (!configMap) {
9
- return undefined;
10
- }
11
- return configMap[pkgMeta.packageName];
12
- }
13
- function isPackageSkipped(skipPackagesArray, pkgMeta) {
14
- if (!skipPackagesArray) {
15
- return false;
16
- }
17
- return skipPackagesArray.includes(pkgMeta.packageName);
18
- }
19
- async function syncExportsForWorkspacePackage(fs, packageRepository, fileSystemService, logger, mirrorReporter, rootDir, packagePathStr, index, total, config, verbose, stats) {
20
- const packageDir = path.resolve(rootDir, packagePathStr);
21
- const distDir = path.join(packageDir, DIST_DIR);
22
- const packageJsonPath = path.join(packageDir, PACKAGE_JSON);
23
- const folderBasename = path.basename(packageDir);
24
- const pkgStats = {
25
- name: folderBasename,
26
- path: packageDir,
27
- jsModules: 0,
28
- cssExports: 0,
29
- customExports: 0,
30
- totalExports: 0,
31
- hasTransform: false,
32
- cssConfigStatus: "",
33
- skipped: false,
34
- skipReason: "",
35
- error: null,
36
- };
37
- if (!fs.existsSync(packageJsonPath)) {
38
- pkgStats.skipped = true;
39
- pkgStats.skipReason = "package.json not found";
40
- stats.packagesSkipped++;
41
- mirrorReporter.logSkippedWorkspacePackage(logger, index, total, folderBasename, pkgStats.skipReason);
42
- return pkgStats;
43
- }
44
- let packageJsonParseError;
45
- try {
46
- const pkgContent = await fs.readFile(packageJsonPath, "utf8");
47
- const raw = JSON.parse(pkgContent);
48
- const parsedPackageJson = packageRepository.parsePackageJsonShape(raw);
49
- pkgStats.name = packageRepository.resolvePackageDisplayName(parsedPackageJson, folderBasename);
50
- }
51
- catch (caughtError) {
52
- pkgStats.name = folderBasename;
53
- packageJsonParseError = caughtError;
54
- }
55
- const pkgMeta = { packageName: pkgStats.name };
56
- if (isPackageSkipped(config.skipPackages, pkgMeta)) {
57
- pkgStats.skipped = true;
58
- pkgStats.skipReason = "configured to skip";
59
- stats.packagesSkipped++;
60
- mirrorReporter.logSkippedWorkspacePackage(logger, index, total, pkgStats.name, pkgStats.skipReason);
61
- return pkgStats;
62
- }
63
- if (packageJsonParseError !== undefined) {
64
- if (!fs.existsSync(distDir)) {
65
- pkgStats.skipped = true;
66
- pkgStats.skipReason = "dist/ not found";
67
- stats.packagesSkipped++;
68
- mirrorReporter.logSkippedWorkspacePackage(logger, index, total, pkgStats.name, pkgStats.skipReason);
69
- return pkgStats;
70
- }
71
- pkgStats.error = messageFromCaughtUnknown(packageJsonParseError);
72
- stats.packagesErrored++;
73
- mirrorReporter.logPackageError(logger, index, total, pkgStats.name, packageJsonParseError, verbose);
74
- return pkgStats;
75
- }
76
- if (!fs.existsSync(distDir)) {
77
- pkgStats.skipped = true;
78
- pkgStats.skipReason = "dist/ not found";
79
- stats.packagesSkipped++;
80
- mirrorReporter.logSkippedWorkspacePackage(logger, index, total, pkgStats.name, pkgStats.skipReason);
81
- return pkgStats;
82
- }
83
- try {
84
- const pathTransform = createPathTransform(config, pkgMeta);
85
- pkgStats.hasTransform = !!pathTransform;
86
- const cssConfig = resolvePackageScopedConfig(config.cssExports, pkgMeta);
87
- if (cssConfig === false) {
88
- pkgStats.cssConfigStatus = "disabled";
89
- }
90
- else if (cssConfig !== undefined) {
91
- pkgStats.cssConfigStatus = "configured";
92
- }
93
- const customExports = resolvePackageScopedConfig(config.customExports, pkgMeta) || {};
94
- const generatedExports = await generateExports(fs, fileSystemService, distDir, pathTransform, cssConfig, customExports);
95
- const { prunedKeys } = await packageRepository.writePackageJsonExportsAtomic(fs, packageJsonPath, {
96
- generatedExports: generatedExports.exports,
97
- managedExportSpecifiers: Object.keys(generatedExports.exports),
98
- originalPathBySpecifier: generatedExports.originalPathBySpecifier,
99
- });
100
- for (const exportSpecifier of prunedKeys) {
101
- mirrorReporter.logPrunedStaleExport(logger, exportSpecifier);
102
- }
103
- pkgStats.jsModules = generatedExports.jsCount;
104
- pkgStats.cssExports = generatedExports.cssCount;
105
- pkgStats.customExports = Object.keys(customExports).length;
106
- pkgStats.totalExports = Object.keys(generatedExports.exports).length;
107
- stats.packagesProcessed++;
108
- stats.totalExports += pkgStats.totalExports;
109
- stats.totalJsModules += pkgStats.jsModules;
110
- stats.totalCssExports += pkgStats.cssExports;
111
- mirrorReporter.logPackageSuccess(logger, index, total, pkgStats, generatedExports, verbose);
112
- }
113
- catch (caughtError) {
114
- pkgStats.error = messageFromCaughtUnknown(caughtError);
115
- stats.packagesErrored++;
116
- mirrorReporter.logPackageError(logger, index, total, pkgStats.name, caughtError, verbose);
117
- }
118
- return pkgStats;
119
- }
120
- /** @returns Process exit code (0 or 1) on success, or a structured application error. */
121
- export async function runMirrorSync(request, deps) {
122
- const { fs, logger, workspaceService, packageRepository, fileSystemService, mirrorReporter } = deps;
123
- const config = (request.config ?? {});
124
- mirrorReporter.configureMirrorColors(!!request.noColor);
125
- mirrorReporter.mirrorBanner(logger);
126
- const startTime = performance.now();
127
- const verbose = !!request.verbose;
128
- try {
129
- const stats = {
130
- packagesFound: 0,
131
- packagesProcessed: 0,
132
- packagesSkipped: 0,
133
- packagesErrored: 0,
134
- totalExports: 0,
135
- totalJsModules: 0,
136
- totalCssExports: 0,
137
- packageDetails: [],
138
- };
139
- let targetPackages = [];
140
- if (request.packageFilter) {
141
- const safe = workspaceService.resolvePackageFilterUnderRoot(request.rootDir, request.packageFilter);
142
- targetPackages = [safe];
143
- mirrorReporter.mirrorProcessingMode(logger, { kind: "single" });
144
- }
145
- else {
146
- const { relPaths, multiSource } = await workspaceService.findWorkspacePackageRelPaths(request.rootDir, fs, logger);
147
- targetPackages = relPaths;
148
- mirrorReporter.mirrorProcessingMode(logger, { kind: "multi", source: multiSource });
149
- }
150
- stats.packagesFound = targetPackages.length;
151
- if (targetPackages.length === 0) {
152
- mirrorReporter.mirrorNoPackages(logger);
153
- return ok(0);
154
- }
155
- let nextPackageOrdinal = 1;
156
- for (const pkgPath of targetPackages) {
157
- const pkgStats = await syncExportsForWorkspacePackage(fs, packageRepository, fileSystemService, logger, mirrorReporter, request.rootDir, pkgPath, nextPackageOrdinal++, targetPackages.length, config, verbose, stats);
158
- stats.packageDetails.push(pkgStats);
159
- }
160
- const elapsed = (performance.now() - startTime) / 1000;
161
- mirrorReporter.mirrorSummarySeparator(logger);
162
- mirrorReporter.mirrorSummary(logger, stats, elapsed);
163
- return ok(stats.packagesErrored > 0 ? 1 : 0);
164
- }
165
- catch (caughtError) {
166
- return err(appError("INFRA_FAILURE", messageFromCaughtUnknown(caughtError), caughtError));
167
- }
168
- }
@@ -1,6 +0,0 @@
1
- export declare const DIST_DIR = "dist";
2
- export declare const PACKAGE_JSON = "package.json";
3
- export declare const VALID_JS_EXTENSIONS: Set<string>;
4
- export declare const DTS_EXTENSION = ".d.ts";
5
- export declare const PACKAGE_JSON_EXPORT = "./package.json";
6
- //# sourceMappingURL=constants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/lib/mirror/domain/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,SAAS,CAAC;AAC/B,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,eAAO,MAAM,mBAAmB,aAAmC,CAAC;AACpE,eAAO,MAAM,aAAa,UAAU,CAAC;AACrC,eAAO,MAAM,mBAAmB,mBAAmB,CAAC"}
@@ -1,5 +0,0 @@
1
- export const DIST_DIR = "dist";
2
- export const PACKAGE_JSON = "package.json";
3
- export const VALID_JS_EXTENSIONS = new Set([".js", ".mjs", ".cjs"]);
4
- export const DTS_EXTENSION = ".d.ts";
5
- export const PACKAGE_JSON_EXPORT = "./package.json";
@@ -1,10 +0,0 @@
1
- export declare const MirrorErrorCode: {
2
- readonly FATAL: "FATAL";
3
- readonly PACKAGE_WRITE: "PACKAGE_WRITE";
4
- };
5
- export type MirrorErrorCode = (typeof MirrorErrorCode)[keyof typeof MirrorErrorCode];
6
- export declare class MirrorError extends Error {
7
- readonly code: MirrorErrorCode;
8
- constructor(code: MirrorErrorCode, message: string, options?: ErrorOptions);
9
- }
10
- //# sourceMappingURL=errors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/lib/mirror/domain/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe;aAC1B,KAAK,EAAE,OAAO;aACd,aAAa,EAAE,eAAe;CACtB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAErF,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAE/B,YAAY,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAIzE;CACF"}
@@ -1,12 +0,0 @@
1
- export const MirrorErrorCode = {
2
- FATAL: "FATAL",
3
- PACKAGE_WRITE: "PACKAGE_WRITE",
4
- };
5
- export class MirrorError extends Error {
6
- code;
7
- constructor(code, message, options) {
8
- super(message, options);
9
- this.name = "MirrorError";
10
- this.code = code;
11
- }
12
- }