@bleedingdev/modern-js-ultramodern-create 3.9.0-ultramodern.2 → 3.9.0-ultramodern.21

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 (442) hide show
  1. package/README.md +43 -74
  2. package/dist/cjs/cli/package-source.cjs +2 -2
  3. package/dist/cjs/cli/project-setup.cjs +2 -22
  4. package/dist/cjs/index.cjs +9 -1
  5. package/dist/cjs/locale/en.cjs +2 -1
  6. package/dist/cjs/locale/zh.cjs +2 -1
  7. package/dist/cjs/ultramodern-package-source.cjs +13 -9
  8. package/dist/cjs/ultramodern-release-cohort.cjs +6 -21
  9. package/dist/cjs/ultramodern-tooling/commands/cloudflare-output-verify.cjs +49 -56
  10. package/dist/cjs/ultramodern-tooling/commands/context.cjs +11 -29
  11. package/dist/cjs/ultramodern-tooling/commands/routes-generate-app.cjs +67 -0
  12. package/dist/cjs/ultramodern-tooling/commands/routes-generate.cjs +24 -53
  13. package/dist/cjs/ultramodern-tooling/commands/validate.cjs +5 -11
  14. package/dist/cjs/ultramodern-tooling/commands.cjs +15 -8
  15. package/dist/cjs/ultramodern-tooling/config/index.cjs +10 -24
  16. package/dist/cjs/ultramodern-tooling/config/load.cjs +12 -10
  17. package/dist/cjs/ultramodern-tooling/config/metadata.cjs +34 -32
  18. package/dist/cjs/ultramodern-tooling/config/normalize.cjs +165 -164
  19. package/dist/cjs/ultramodern-workspace/add-shell.cjs +118 -118
  20. package/dist/cjs/ultramodern-workspace/add-vertical/execute.cjs +121 -25
  21. package/dist/cjs/ultramodern-workspace/add-vertical/plan.cjs +14 -160
  22. package/dist/cjs/ultramodern-workspace/add-vertical/preflight.cjs +16 -48
  23. package/dist/cjs/ultramodern-workspace/add-vertical/preview.cjs +78 -0
  24. package/dist/cjs/ultramodern-workspace/add-vertical/shell-files.cjs +87 -24
  25. package/dist/cjs/ultramodern-workspace/add-vertical/topology.cjs +4 -1
  26. package/dist/cjs/ultramodern-workspace/add-vertical/transaction.cjs +378 -45
  27. package/dist/cjs/ultramodern-workspace/add-vertical/workspace-state.cjs +21 -44
  28. package/dist/cjs/ultramodern-workspace/add-vertical.cjs +0 -9
  29. package/dist/cjs/ultramodern-workspace/api/client.cjs +5 -5
  30. package/dist/cjs/ultramodern-workspace/api/contracts.cjs +2 -2
  31. package/dist/cjs/ultramodern-workspace/api/rpc.cjs +20 -18
  32. package/dist/cjs/ultramodern-workspace/api/service.cjs +49 -24
  33. package/dist/cjs/ultramodern-workspace/api/shared.cjs +28 -18
  34. package/dist/cjs/ultramodern-workspace/app-files.cjs +3 -23
  35. package/dist/cjs/ultramodern-workspace/backend-federation.cjs +27 -27
  36. package/dist/cjs/ultramodern-workspace/contracts.cjs +14 -183
  37. package/dist/cjs/ultramodern-workspace/delivery-unit-schema/surfaces.cjs +85 -0
  38. package/dist/cjs/ultramodern-workspace/delivery-unit-schema/types.cjs +8 -85
  39. package/dist/cjs/ultramodern-workspace/delivery-unit-stamp.cjs +16 -4
  40. package/dist/cjs/ultramodern-workspace/delivery-unit-sync.cjs +27 -17
  41. package/dist/cjs/ultramodern-workspace/delivery-unit.cjs +16 -10
  42. package/dist/cjs/ultramodern-workspace/demo-components.cjs +66 -433
  43. package/dist/cjs/ultramodern-workspace/descriptors.cjs +0 -4
  44. package/dist/cjs/ultramodern-workspace/fs-io.cjs +37 -2
  45. package/dist/cjs/ultramodern-workspace/generation-result.cjs +4 -4
  46. package/dist/cjs/ultramodern-workspace/index.cjs +2 -5
  47. package/dist/cjs/ultramodern-workspace/mf-validation/constants.cjs +0 -6
  48. package/dist/cjs/ultramodern-workspace/mf-validation/discovery.cjs +6 -6
  49. package/dist/cjs/{ultramodern-tooling/commands/migrate-strict-effect/generated-patches.cjs → ultramodern-workspace/mf-validation/exposes.cjs} +13 -17
  50. package/dist/cjs/ultramodern-workspace/mf-validation/inspect.cjs +26 -7
  51. package/dist/cjs/ultramodern-workspace/mf-validation/object-literal.cjs +21 -122
  52. package/dist/cjs/ultramodern-workspace/mf-validation/path-utils.cjs +37 -38
  53. package/dist/cjs/ultramodern-workspace/mf-validation/syntax.cjs +93 -153
  54. package/dist/cjs/ultramodern-workspace/mf-validation.cjs +4 -0
  55. package/dist/cjs/ultramodern-workspace/module-federation/config.cjs +24 -29
  56. package/dist/cjs/ultramodern-workspace/module-federation/reexport-module.cjs +39 -58
  57. package/dist/cjs/ultramodern-workspace/module-federation/remote-refs.cjs +1 -43
  58. package/dist/cjs/ultramodern-workspace/package-json.cjs +63 -37
  59. package/dist/cjs/ultramodern-workspace/patch-inventory.cjs +104 -0
  60. package/dist/cjs/ultramodern-workspace/policy.cjs +3 -577
  61. package/dist/cjs/ultramodern-workspace/public-surface.cjs +3 -3
  62. package/dist/cjs/ultramodern-workspace/routes.cjs +2 -11
  63. package/dist/cjs/ultramodern-workspace/shared-patches.cjs +12 -2
  64. package/dist/cjs/ultramodern-workspace/shells.cjs +0 -70
  65. package/dist/cjs/ultramodern-workspace/tooling-command-catalog.cjs +27 -41
  66. package/dist/cjs/ultramodern-workspace/tsconfigs.cjs +8 -2
  67. package/dist/cjs/ultramodern-workspace/validation/architecture.cjs +397 -0
  68. package/dist/cjs/ultramodern-workspace/validation/assertions.cjs +140 -0
  69. package/dist/cjs/ultramodern-workspace/validation/types.cjs +18 -0
  70. package/dist/cjs/ultramodern-workspace/validation/workspace.cjs +344 -0
  71. package/dist/cjs/ultramodern-workspace/versions.cjs +81 -45
  72. package/dist/cjs/ultramodern-workspace/workspace-artifact-ownership.cjs +183 -0
  73. package/dist/cjs/ultramodern-workspace/workspace-script-plan.cjs +36 -25
  74. package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +11 -200
  75. package/dist/cjs/ultramodern-workspace/workspace-validation-contract.cjs +62 -373
  76. package/dist/cjs/ultramodern-workspace/write-app.cjs +19 -11
  77. package/dist/cjs/ultramodern-workspace/write-workspace.cjs +20 -50
  78. package/dist/cjs/ultramodern-workspace/zerops.cjs +2 -0
  79. package/dist/esm/cli/package-source.js +3 -3
  80. package/dist/esm/cli/project-setup.js +2 -22
  81. package/dist/esm/index.js +10 -2
  82. package/dist/esm/locale/en.js +2 -1
  83. package/dist/esm/locale/zh.js +2 -1
  84. package/dist/esm/ultramodern-package-source.js +14 -4
  85. package/dist/esm/ultramodern-release-cohort.js +5 -14
  86. package/dist/esm/ultramodern-tooling/commands/cloudflare-output-verify.js +49 -56
  87. package/dist/esm/ultramodern-tooling/commands/context.js +10 -26
  88. package/dist/esm/ultramodern-tooling/commands/routes-generate-app.js +35 -0
  89. package/dist/esm/ultramodern-tooling/commands/routes-generate.js +25 -54
  90. package/dist/esm/ultramodern-tooling/commands/validate.js +6 -12
  91. package/dist/esm/ultramodern-tooling/commands.js +15 -9
  92. package/dist/esm/ultramodern-tooling/config/index.js +0 -2
  93. package/dist/esm/ultramodern-tooling/config/load.js +9 -9
  94. package/dist/esm/ultramodern-tooling/config/metadata.js +33 -28
  95. package/dist/esm/ultramodern-tooling/config/normalize.js +159 -156
  96. package/dist/esm/ultramodern-workspace/add-shell.js +124 -123
  97. package/dist/esm/ultramodern-workspace/add-vertical/execute.js +119 -27
  98. package/dist/esm/ultramodern-workspace/add-vertical/plan.js +16 -150
  99. package/dist/esm/ultramodern-workspace/add-vertical/preflight.js +15 -47
  100. package/dist/esm/ultramodern-workspace/add-vertical/preview.js +40 -0
  101. package/dist/esm/ultramodern-workspace/add-vertical/shell-files.js +87 -25
  102. package/dist/esm/ultramodern-workspace/add-vertical/topology.js +4 -1
  103. package/dist/esm/ultramodern-workspace/add-vertical/transaction.js +373 -46
  104. package/dist/esm/ultramodern-workspace/add-vertical/workspace-state.js +17 -34
  105. package/dist/esm/ultramodern-workspace/add-vertical.js +1 -1
  106. package/dist/esm/ultramodern-workspace/api/client.js +5 -5
  107. package/dist/esm/ultramodern-workspace/api/contracts.js +2 -2
  108. package/dist/esm/ultramodern-workspace/api/rpc.js +20 -18
  109. package/dist/esm/ultramodern-workspace/api/service.js +49 -24
  110. package/dist/esm/ultramodern-workspace/api/shared.js +28 -18
  111. package/dist/esm/ultramodern-workspace/app-files.js +3 -23
  112. package/dist/esm/ultramodern-workspace/backend-federation.js +5 -5
  113. package/dist/esm/ultramodern-workspace/contracts.js +14 -180
  114. package/dist/esm/ultramodern-workspace/delivery-unit-schema/surfaces.js +41 -0
  115. package/dist/esm/ultramodern-workspace/delivery-unit-schema/types.js +1 -75
  116. package/dist/esm/ultramodern-workspace/delivery-unit-stamp.js +16 -4
  117. package/dist/esm/ultramodern-workspace/delivery-unit-sync.js +28 -18
  118. package/dist/esm/ultramodern-workspace/delivery-unit.js +12 -6
  119. package/dist/esm/ultramodern-workspace/demo-components.js +67 -428
  120. package/dist/esm/ultramodern-workspace/descriptors.js +1 -2
  121. package/dist/esm/ultramodern-workspace/fs-io.js +37 -2
  122. package/dist/esm/ultramodern-workspace/generation-result.js +3 -3
  123. package/dist/esm/ultramodern-workspace/index.js +1 -1
  124. package/dist/esm/ultramodern-workspace/mf-validation/constants.js +1 -4
  125. package/dist/esm/ultramodern-workspace/mf-validation/discovery.js +7 -7
  126. package/dist/esm/ultramodern-workspace/mf-validation/exposes.js +14 -0
  127. package/dist/esm/ultramodern-workspace/mf-validation/inspect.js +27 -8
  128. package/dist/esm/ultramodern-workspace/mf-validation/object-literal.js +22 -123
  129. package/dist/esm/ultramodern-workspace/mf-validation/path-utils.js +36 -34
  130. package/dist/esm/ultramodern-workspace/mf-validation/syntax.js +83 -143
  131. package/dist/esm/ultramodern-workspace/mf-validation.js +1 -0
  132. package/dist/esm/ultramodern-workspace/module-federation/config.js +25 -30
  133. package/dist/esm/ultramodern-workspace/module-federation/reexport-module.js +39 -58
  134. package/dist/esm/ultramodern-workspace/module-federation/remote-refs.js +1 -43
  135. package/dist/esm/ultramodern-workspace/package-json.js +58 -32
  136. package/dist/esm/ultramodern-workspace/patch-inventory.js +66 -0
  137. package/dist/esm/ultramodern-workspace/policy.js +2 -564
  138. package/dist/esm/ultramodern-workspace/public-surface.js +3 -3
  139. package/dist/esm/ultramodern-workspace/routes.js +2 -11
  140. package/dist/esm/ultramodern-workspace/shared-patches.js +2 -2
  141. package/dist/esm/ultramodern-workspace/shells.js +3 -67
  142. package/dist/esm/ultramodern-workspace/tooling-command-catalog.js +22 -37
  143. package/dist/esm/ultramodern-workspace/tsconfigs.js +9 -3
  144. package/dist/esm/ultramodern-workspace/validation/architecture.js +348 -0
  145. package/dist/esm/ultramodern-workspace/validation/assertions.js +65 -0
  146. package/dist/esm/ultramodern-workspace/validation/types.js +0 -0
  147. package/dist/esm/ultramodern-workspace/validation/workspace.js +286 -0
  148. package/dist/esm/ultramodern-workspace/versions.js +74 -29
  149. package/dist/esm/ultramodern-workspace/workspace-artifact-ownership.js +128 -0
  150. package/dist/esm/ultramodern-workspace/workspace-script-plan.js +35 -27
  151. package/dist/esm/ultramodern-workspace/workspace-scripts.js +10 -190
  152. package/dist/esm/ultramodern-workspace/workspace-validation-contract.js +65 -376
  153. package/dist/esm/ultramodern-workspace/write-app.js +18 -10
  154. package/dist/esm/ultramodern-workspace/write-workspace.js +25 -52
  155. package/dist/esm/ultramodern-workspace/zerops.js +2 -0
  156. package/dist/esm-node/cli/package-source.js +3 -3
  157. package/dist/esm-node/cli/project-setup.js +2 -22
  158. package/dist/esm-node/index.js +10 -2
  159. package/dist/esm-node/locale/en.js +2 -1
  160. package/dist/esm-node/locale/zh.js +2 -1
  161. package/dist/esm-node/ultramodern-package-source.js +14 -4
  162. package/dist/esm-node/ultramodern-release-cohort.js +5 -14
  163. package/dist/esm-node/ultramodern-tooling/commands/cloudflare-output-verify.js +49 -56
  164. package/dist/esm-node/ultramodern-tooling/commands/context.js +10 -26
  165. package/dist/esm-node/ultramodern-tooling/commands/routes-generate-app.js +36 -0
  166. package/dist/esm-node/ultramodern-tooling/commands/routes-generate.js +25 -54
  167. package/dist/esm-node/ultramodern-tooling/commands/validate.js +6 -12
  168. package/dist/esm-node/ultramodern-tooling/commands.js +15 -9
  169. package/dist/esm-node/ultramodern-tooling/config/index.js +0 -2
  170. package/dist/esm-node/ultramodern-tooling/config/load.js +9 -9
  171. package/dist/esm-node/ultramodern-tooling/config/metadata.js +33 -28
  172. package/dist/esm-node/ultramodern-tooling/config/normalize.js +159 -156
  173. package/dist/esm-node/ultramodern-workspace/add-shell.js +124 -123
  174. package/dist/esm-node/ultramodern-workspace/add-vertical/execute.js +119 -27
  175. package/dist/esm-node/ultramodern-workspace/add-vertical/plan.js +16 -150
  176. package/dist/esm-node/ultramodern-workspace/add-vertical/preflight.js +15 -47
  177. package/dist/esm-node/ultramodern-workspace/add-vertical/preview.js +41 -0
  178. package/dist/esm-node/ultramodern-workspace/add-vertical/shell-files.js +87 -25
  179. package/dist/esm-node/ultramodern-workspace/add-vertical/topology.js +4 -1
  180. package/dist/esm-node/ultramodern-workspace/add-vertical/transaction.js +373 -46
  181. package/dist/esm-node/ultramodern-workspace/add-vertical/workspace-state.js +17 -34
  182. package/dist/esm-node/ultramodern-workspace/add-vertical.js +1 -1
  183. package/dist/esm-node/ultramodern-workspace/api/client.js +5 -5
  184. package/dist/esm-node/ultramodern-workspace/api/contracts.js +2 -2
  185. package/dist/esm-node/ultramodern-workspace/api/rpc.js +20 -18
  186. package/dist/esm-node/ultramodern-workspace/api/service.js +49 -24
  187. package/dist/esm-node/ultramodern-workspace/api/shared.js +28 -18
  188. package/dist/esm-node/ultramodern-workspace/app-files.js +3 -23
  189. package/dist/esm-node/ultramodern-workspace/backend-federation.js +5 -5
  190. package/dist/esm-node/ultramodern-workspace/contracts.js +14 -180
  191. package/dist/esm-node/ultramodern-workspace/delivery-unit-schema/surfaces.js +42 -0
  192. package/dist/esm-node/ultramodern-workspace/delivery-unit-schema/types.js +1 -75
  193. package/dist/esm-node/ultramodern-workspace/delivery-unit-stamp.js +16 -4
  194. package/dist/esm-node/ultramodern-workspace/delivery-unit-sync.js +28 -18
  195. package/dist/esm-node/ultramodern-workspace/delivery-unit.js +12 -6
  196. package/dist/esm-node/ultramodern-workspace/demo-components.js +67 -428
  197. package/dist/esm-node/ultramodern-workspace/descriptors.js +1 -2
  198. package/dist/esm-node/ultramodern-workspace/fs-io.js +37 -2
  199. package/dist/esm-node/ultramodern-workspace/generation-result.js +3 -3
  200. package/dist/esm-node/ultramodern-workspace/index.js +1 -1
  201. package/dist/esm-node/ultramodern-workspace/mf-validation/constants.js +1 -4
  202. package/dist/esm-node/ultramodern-workspace/mf-validation/discovery.js +7 -7
  203. package/dist/esm-node/ultramodern-workspace/mf-validation/exposes.js +15 -0
  204. package/dist/esm-node/ultramodern-workspace/mf-validation/inspect.js +27 -8
  205. package/dist/esm-node/ultramodern-workspace/mf-validation/object-literal.js +22 -123
  206. package/dist/esm-node/ultramodern-workspace/mf-validation/path-utils.js +36 -34
  207. package/dist/esm-node/ultramodern-workspace/mf-validation/syntax.js +83 -143
  208. package/dist/esm-node/ultramodern-workspace/mf-validation.js +1 -0
  209. package/dist/esm-node/ultramodern-workspace/module-federation/config.js +25 -30
  210. package/dist/esm-node/ultramodern-workspace/module-federation/reexport-module.js +39 -58
  211. package/dist/esm-node/ultramodern-workspace/module-federation/remote-refs.js +1 -43
  212. package/dist/esm-node/ultramodern-workspace/package-json.js +58 -32
  213. package/dist/esm-node/ultramodern-workspace/patch-inventory.js +67 -0
  214. package/dist/esm-node/ultramodern-workspace/policy.js +2 -564
  215. package/dist/esm-node/ultramodern-workspace/public-surface.js +3 -3
  216. package/dist/esm-node/ultramodern-workspace/routes.js +2 -11
  217. package/dist/esm-node/ultramodern-workspace/shared-patches.js +2 -2
  218. package/dist/esm-node/ultramodern-workspace/shells.js +3 -67
  219. package/dist/esm-node/ultramodern-workspace/tooling-command-catalog.js +22 -37
  220. package/dist/esm-node/ultramodern-workspace/tsconfigs.js +9 -3
  221. package/dist/esm-node/ultramodern-workspace/validation/architecture.js +349 -0
  222. package/dist/esm-node/ultramodern-workspace/validation/assertions.js +66 -0
  223. package/dist/esm-node/ultramodern-workspace/validation/types.js +1 -0
  224. package/dist/esm-node/ultramodern-workspace/validation/workspace.js +287 -0
  225. package/dist/esm-node/ultramodern-workspace/versions.js +74 -29
  226. package/dist/esm-node/ultramodern-workspace/workspace-artifact-ownership.js +129 -0
  227. package/dist/esm-node/ultramodern-workspace/workspace-script-plan.js +35 -27
  228. package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +10 -190
  229. package/dist/esm-node/ultramodern-workspace/workspace-validation-contract.js +65 -376
  230. package/dist/esm-node/ultramodern-workspace/write-app.js +18 -10
  231. package/dist/esm-node/ultramodern-workspace/write-workspace.js +25 -52
  232. package/dist/esm-node/ultramodern-workspace/zerops.js +2 -0
  233. package/dist/types/cli/project-setup.d.ts +1 -1
  234. package/dist/types/locale/en.d.ts +1 -0
  235. package/dist/types/locale/index.d.ts +2 -0
  236. package/dist/types/locale/zh.d.ts +1 -0
  237. package/dist/types/ultramodern-package-source.d.ts +2 -4
  238. package/dist/types/ultramodern-release-cohort.d.ts +1 -3
  239. package/dist/types/ultramodern-tooling/commands/cloudflare-output-verify.d.ts +2 -2
  240. package/dist/types/ultramodern-tooling/commands/context.d.ts +4 -1
  241. package/dist/types/ultramodern-tooling/commands/routes-generate-app.d.ts +1 -0
  242. package/dist/types/ultramodern-tooling/commands/routes-generate.d.ts +1 -1
  243. package/dist/types/ultramodern-tooling/commands/validate.d.ts +1 -1
  244. package/dist/types/ultramodern-tooling/config/index.d.ts +0 -2
  245. package/dist/types/ultramodern-tooling/config/load.d.ts +10 -2
  246. package/dist/types/ultramodern-tooling/config/metadata.d.ts +2 -2
  247. package/dist/types/ultramodern-tooling/config/normalize.d.ts +19 -19
  248. package/dist/types/ultramodern-tooling/config/types.d.ts +2 -9
  249. package/dist/types/ultramodern-workspace/add-shell.d.ts +1 -1
  250. package/dist/types/ultramodern-workspace/add-vertical/execute.d.ts +1 -0
  251. package/dist/types/ultramodern-workspace/add-vertical/preflight.d.ts +4 -3
  252. package/dist/types/ultramodern-workspace/add-vertical/preview.d.ts +4 -0
  253. package/dist/types/ultramodern-workspace/add-vertical/shell-files.d.ts +7 -2
  254. package/dist/types/ultramodern-workspace/add-vertical/transaction.d.ts +32 -6
  255. package/dist/types/ultramodern-workspace/add-vertical/workspace-state.d.ts +10 -7
  256. package/dist/types/ultramodern-workspace/add-vertical.d.ts +1 -1
  257. package/dist/types/ultramodern-workspace/api/client.d.ts +3 -1
  258. package/dist/types/ultramodern-workspace/api/rpc.d.ts +1 -1
  259. package/dist/types/ultramodern-workspace/api/service.d.ts +3 -1
  260. package/dist/types/ultramodern-workspace/api/shared.d.ts +2 -0
  261. package/dist/types/ultramodern-workspace/backend-federation.d.ts +1 -1
  262. package/dist/types/ultramodern-workspace/contracts.d.ts +1 -3
  263. package/dist/types/ultramodern-workspace/delivery-unit-schema/surfaces.d.ts +17 -0
  264. package/dist/types/ultramodern-workspace/delivery-unit-schema/types.d.ts +3 -68
  265. package/dist/types/ultramodern-workspace/delivery-unit-stamp.d.ts +2 -2
  266. package/dist/types/ultramodern-workspace/delivery-unit.d.ts +3 -3
  267. package/dist/types/ultramodern-workspace/demo-components.d.ts +0 -3
  268. package/dist/types/ultramodern-workspace/descriptors.d.ts +0 -1
  269. package/dist/types/ultramodern-workspace/fs-io.d.ts +1 -1
  270. package/dist/types/ultramodern-workspace/index.d.ts +1 -1
  271. package/dist/types/ultramodern-workspace/mf-validation/constants.d.ts +0 -1
  272. package/dist/types/ultramodern-workspace/mf-validation/exposes.d.ts +11 -0
  273. package/dist/types/ultramodern-workspace/mf-validation/path-utils.d.ts +2 -3
  274. package/dist/types/ultramodern-workspace/mf-validation/syntax.d.ts +4 -3
  275. package/dist/types/ultramodern-workspace/mf-validation/types.d.ts +1 -0
  276. package/dist/types/ultramodern-workspace/mf-validation.d.ts +1 -0
  277. package/dist/types/ultramodern-workspace/module-federation/config.d.ts +1 -1
  278. package/dist/types/ultramodern-workspace/module-federation/reexport-module.d.ts +2 -2
  279. package/dist/types/ultramodern-workspace/package-json.d.ts +1 -1
  280. package/dist/types/ultramodern-workspace/patch-inventory.d.ts +10 -0
  281. package/dist/types/ultramodern-workspace/policy.d.ts +31 -209
  282. package/dist/types/ultramodern-workspace/routes.d.ts +6 -1
  283. package/dist/types/ultramodern-workspace/shells.d.ts +2 -15
  284. package/dist/types/ultramodern-workspace/tooling-command-catalog.d.ts +8 -7
  285. package/dist/types/ultramodern-workspace/types.d.ts +9 -9
  286. package/dist/types/ultramodern-workspace/validation/architecture.d.ts +2 -0
  287. package/dist/types/ultramodern-workspace/validation/assertions.d.ts +14 -0
  288. package/dist/types/ultramodern-workspace/validation/types.d.ts +9 -0
  289. package/dist/types/ultramodern-workspace/validation/workspace.d.ts +6 -0
  290. package/dist/types/ultramodern-workspace/versions.d.ts +73 -28
  291. package/dist/types/ultramodern-workspace/workspace-artifact-ownership.d.ts +18 -0
  292. package/dist/types/ultramodern-workspace/workspace-script-plan.d.ts +4 -5
  293. package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +8 -13
  294. package/dist/types/ultramodern-workspace/workspace-validation-contract.d.ts +22 -188
  295. package/dist/types/ultramodern-workspace/write-workspace.d.ts +1 -3
  296. package/package.json +18 -11
  297. package/{template-workspace/.modernjs/release-cohort.json → release-cohort.json} +88 -40
  298. package/template-workspace/.codex/skills/rspack-tracing/scripts/analyze_trace.js +1 -1
  299. package/template-workspace/README.md.handlebars +20 -35
  300. package/template-workspace/oxfmt.config.ts +3 -0
  301. package/template-workspace/pnpm-workspace.yaml.handlebars +0 -24
  302. package/template-workspace/scripts/bootstrap-agent-skills.mjs +4 -4
  303. package/templates/packages/shared-contracts-index.ts +4 -332
  304. package/templates/workspace/apps/modern.config.shared-module-federation.ts.handlebars +10 -0
  305. package/templates/workspace/apps/modern.config.ts.handlebars +13 -27
  306. package/templates/workspace/apps/shared/src/routes/ultramodern-route-metadata.ts.handlebars +21 -11
  307. package/templates/workspace/apps/shell-super-app/src/routes/[lang]/page.tsx.handlebars +20 -20
  308. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.helpers.tsx.handlebars +4 -6
  309. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.imports.tsx.handlebars +2 -2
  310. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.tsx.handlebars +11 -11
  311. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.worker.helpers.tsx.handlebars +1 -1
  312. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.worker.imports.tsx.handlebars +1 -1
  313. package/templates/workspace-scripts/generate-node-backend-federation.mjs +68 -77
  314. package/templates/workspace-scripts/generate-public-surface-assets.mjs +107 -207
  315. package/templates/workspace-scripts/materialize-zerops-runtime.mjs +12 -19
  316. package/templates/workspace-scripts/proof-cloudflare-version.mjs +53 -444
  317. package/templates/workspace-scripts/proof-node-backend-federation.mjs +212 -91
  318. package/templates/workspace-scripts/{proof-workerd-ssr.mts → proof-workerd-ssr.mjs} +434 -239
  319. package/templates/workspace-scripts/ultramodern-cloudflare-proof.mjs +25 -7
  320. package/templates/workspace-scripts/ultramodern-performance-readiness.mjs +45 -147
  321. package/templates/workspace-scripts/ultramodern-typecheck.mjs +1 -1
  322. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.cjs +0 -212
  323. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.cjs +0 -47
  324. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.cjs +0 -112
  325. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.cjs +0 -55
  326. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.cjs +0 -102
  327. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.cjs +0 -195
  328. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.cjs +0 -146
  329. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxlint.cjs +0 -110
  330. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.cjs +0 -67
  331. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.cjs +0 -307
  332. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.cjs +0 -58
  333. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.cjs +0 -71
  334. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.cjs +0 -151
  335. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/help.cjs +0 -67
  336. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/install.cjs +0 -52
  337. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/io.cjs +0 -447
  338. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.cjs +0 -323
  339. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-source.cjs +0 -87
  340. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.cjs +0 -612
  341. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.cjs +0 -376
  342. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.cjs +0 -73
  343. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/react-router-retirement.cjs +0 -215
  344. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.cjs +0 -135
  345. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect.cjs +0 -454
  346. package/dist/cjs/ultramodern-tooling/config/constants.cjs +0 -48
  347. package/dist/cjs/ultramodern-tooling/config/synthesize.cjs +0 -157
  348. package/dist/cjs/ultramodern-workspace/delivery-unit-schema/up-projection.cjs +0 -188
  349. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +0 -154
  350. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +0 -9
  351. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.js +0 -63
  352. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.js +0 -7
  353. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +0 -47
  354. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +0 -146
  355. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.js +0 -97
  356. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxlint.js +0 -61
  357. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.js +0 -16
  358. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +0 -258
  359. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.js +0 -10
  360. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.js +0 -8
  361. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.js +0 -15
  362. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.js +0 -100
  363. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/help.js +0 -29
  364. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/install.js +0 -14
  365. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/io.js +0 -385
  366. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +0 -276
  367. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-source.js +0 -49
  368. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +0 -559
  369. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +0 -329
  370. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +0 -19
  371. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/react-router-retirement.js +0 -148
  372. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.js +0 -80
  373. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect.js +0 -405
  374. package/dist/esm/ultramodern-tooling/config/constants.js +0 -4
  375. package/dist/esm/ultramodern-tooling/config/synthesize.js +0 -108
  376. package/dist/esm/ultramodern-workspace/delivery-unit-schema/up-projection.js +0 -129
  377. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +0 -155
  378. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +0 -10
  379. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.js +0 -64
  380. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.js +0 -8
  381. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +0 -48
  382. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +0 -147
  383. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.js +0 -98
  384. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxlint.js +0 -62
  385. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.js +0 -17
  386. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +0 -259
  387. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.js +0 -11
  388. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.js +0 -9
  389. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.js +0 -16
  390. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.js +0 -101
  391. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/help.js +0 -30
  392. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/install.js +0 -15
  393. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/io.js +0 -386
  394. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +0 -277
  395. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-source.js +0 -50
  396. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +0 -560
  397. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +0 -330
  398. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +0 -20
  399. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/react-router-retirement.js +0 -149
  400. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.js +0 -81
  401. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect.js +0 -406
  402. package/dist/esm-node/ultramodern-tooling/config/constants.js +0 -5
  403. package/dist/esm-node/ultramodern-tooling/config/synthesize.js +0 -109
  404. package/dist/esm-node/ultramodern-workspace/delivery-unit-schema/up-projection.js +0 -130
  405. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.d.ts +0 -12
  406. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.d.ts +0 -4
  407. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.d.ts +0 -1
  408. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.d.ts +0 -3
  409. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.d.ts +0 -5
  410. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.d.ts +0 -3
  411. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.d.ts +0 -2
  412. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxlint.d.ts +0 -2
  413. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.d.ts +0 -4
  414. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.d.ts +0 -3
  415. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.d.ts +0 -3
  416. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.d.ts +0 -8
  417. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.d.ts +0 -3
  418. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.d.ts +0 -3
  419. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/help.d.ts +0 -1
  420. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/install.d.ts +0 -2
  421. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/io.d.ts +0 -26
  422. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.d.ts +0 -25
  423. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/package-source.d.ts +0 -3
  424. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.d.ts +0 -26
  425. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.d.ts +0 -26
  426. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.d.ts +0 -6
  427. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/react-router-retirement.d.ts +0 -37
  428. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.d.ts +0 -4
  429. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect.d.ts +0 -2
  430. package/dist/types/ultramodern-tooling/config/constants.d.ts +0 -3
  431. package/dist/types/ultramodern-tooling/config/synthesize.d.ts +0 -5
  432. package/dist/types/ultramodern-workspace/delivery-unit-schema/up-projection.d.ts +0 -189
  433. package/template-workspace/patches/@module-federation__bridge-react@2.9.0.patch +0 -47
  434. package/template-workspace/patches/@module-federation__dts-plugin@2.9.0.patch +0 -26
  435. package/template-workspace/patches/@module-federation__modern-js-v3@2.9.0.patch +0 -268
  436. package/template-workspace/patches/@module-federation__runtime-core@2.9.0.patch +0 -13
  437. package/template-workspace/patches/drizzle-orm-ts7-strict-declarations.patch +0 -471
  438. package/template-workspace/patches/msgpackr@2.1.0.patch +0 -30
  439. package/template-workspace/patches/zod@4.5.4.patch +0 -56
  440. package/templates/workspace-scripts/check-ultramodern-api-boundaries.mts +0 -779
  441. package/templates/workspace-scripts/check-ultramodern-i18n-boundaries.mts +0 -9
  442. package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +0 -4109
@@ -1,27 +1,27 @@
1
1
  import node_fs from "node:fs";
2
- import { RELEASE_COHORT_PROJECTION_PATH, copyCreateReleaseCohort, isCreatePackageSourceCheckout, readCreateReleaseCohort } from "../ultramodern-release-cohort.js";
2
+ import { ULTRAMODERN_WORKSPACE_MODERN_PACKAGES, modernPackageSpecifier } from "../ultramodern-package-source.js";
3
+ import { hasCreateReleaseCohort, isCreatePackageSourceCheckout, readCreateReleaseCohort, releaseCohortSelectors } from "../ultramodern-release-cohort.js";
3
4
  import { runFreshWorkspaceTransaction } from "./add-vertical/transaction.js";
4
5
  import { createSharedDesignTokensCss } from "./app-files.js";
5
6
  import { normalizeUltramodernBridgeConfig } from "./bridge-config.js";
6
- import { createDevelopmentOverlay, createOwnership, createTopology, createUltramodernConfig } from "./contracts.js";
7
- import { ULTRAMODERN_CONFIG_PATH, createShellHost, sharedPackages, shellApp } from "./descriptors.js";
7
+ import { createDevelopmentOverlay, createOwnership, createTopology } from "./contracts.js";
8
+ import { createShellHost, sharedPackages, shellApp } from "./descriptors.js";
8
9
  import { copyRootTemplate, formatGeneratedWorkspaceFiles, writeFile, writeFileReplacing, writeJson } from "./fs-io.js";
9
10
  import { createFileSnapshot, createGenerationResult, diffFileSnapshots } from "./generation-result.js";
10
11
  import { assertUniqueTailwindPrefixes, toPackageScope } from "./naming.js";
11
12
  import { runCodeSmithOverlays } from "./overlays.js";
12
13
  import { createRootPackageJson, createRootTsConfig, createSharedContractsIndex, createSharedPackage, createSharedPackageTsConfig, createTsConfigBase } from "./package-json.js";
13
14
  import { resolvePackageSource, resolveWorkspacePackageLinkingPolicy } from "./package-source.js";
14
- import { renderMinimumReleaseAgeExclude } from "./policy.js";
15
- import { DRIZZLE_ORM_VERSION, EFFECT_VERSION, EFFECT_VITEST_VERSION, I18NEXT_VERSION, MODULE_FEDERATION_VERSION, MSGPACKR_VERSION, NODE_FETCH_VERSION, NODE_VERSION, PNPM_VERSION, TANSTACK_HISTORY_VERSION, TANSTACK_ROUTER_CORE_VERSION, TANSTACK_ROUTER_VERSION, TYPESCRIPT_VERSION, WRANGLER_VERSION, ZOD_VERSION } from "./versions.js";
15
+ import { EFFECT_VERSION, I18NEXT_VERSION, NODE_VERSION, PNPM_VERSION } from "./versions.js";
16
16
  import { writeGeneratedWorkspaceScripts } from "./workspace-scripts.js";
17
17
  import { writeApp } from "./write-app.js";
18
18
  import { createZeropsYaml } from "./zerops.js";
19
19
  function hasExplicitInstallRequest(options) {
20
20
  return void 0 !== options.packageSource && 'workspace' !== options.packageSource.strategy;
21
21
  }
22
- function writeSharedPackages(targetDir, scope) {
22
+ function writeSharedPackages(targetDir, scope, packageSource) {
23
23
  for (const sharedPackage of sharedPackages){
24
- writeJson(targetDir, `${sharedPackage.directory}/package.json`, createSharedPackage(scope, sharedPackage.id, sharedPackage.description));
24
+ writeJson(targetDir, `${sharedPackage.directory}/package.json`, createSharedPackage(scope, sharedPackage.id, sharedPackage.description, packageSource));
25
25
  writeJson(targetDir, `${sharedPackage.directory}/tsconfig.json`, createSharedPackageTsConfig(sharedPackage.directory));
26
26
  }
27
27
  writeFile(targetDir, 'packages/shared-contracts/src/index.ts', createSharedContractsIndex());
@@ -35,30 +35,25 @@ function writeSharedPackages(targetDir, scope) {
35
35
  `);
36
36
  writeFile(targetDir, 'packages/shared-design-tokens/src/tokens.css', createSharedDesignTokensCss());
37
37
  }
38
- function createCompactRootPackageJson(scope, packageSource, remotes, bridge) {
39
- const rootPackage = createRootPackageJson(scope, packageSource, remotes, bridge);
40
- if (rootPackage.modernjs?.packageSource && 'object' == typeof rootPackage.modernjs.packageSource) rootPackage.modernjs.packageSource.config = `./${ULTRAMODERN_CONFIG_PATH}`;
41
- return rootPackage;
38
+ function renderCatalogPolicy(packageSource) {
39
+ if ('install' !== packageSource.strategy) return '';
40
+ const catalog = ULTRAMODERN_WORKSPACE_MODERN_PACKAGES.map((name)=>` ${JSON.stringify(name)}: ${JSON.stringify(modernPackageSpecifier(name, packageSource))}`).join('\n');
41
+ const cohort = hasCreateReleaseCohort() ? readCreateReleaseCohort() : void 0;
42
+ const pinsShippedCohort = cohort?.packages.every((item)=>modernPackageSpecifier(item.sourceName, packageSource) === `npm:${item.targetName}@${item.version}`);
43
+ const exclude = cohort && pinsShippedCohort ? `minimumReleaseAgeExclude:\n${releaseCohortSelectors(cohort).map((selector)=>` - ${JSON.stringify(selector)}`).join('\n')}\n\n` : '';
44
+ return `catalogs:\n ultramodern:\n${catalog}\n\n${exclude}`;
42
45
  }
43
- function createCompactUltramodernConfig(scope, modernVersion, packageSource, apps = [
44
- createShellHost()
45
- ], enableTailwind = true, bridge, additionalShells = [], primaryShell) {
46
- const config = createUltramodernConfig(scope, modernVersion, packageSource, apps, enableTailwind, bridge, additionalShells, primaryShell);
47
- if (config.packageSource && 'object' == typeof config.packageSource && !Array.isArray(config.packageSource)) delete config.packageSource.metadata;
48
- return config;
49
- }
50
- function writePnpmWorkspacePackages(targetDir, bridge) {
51
- if (!bridge) return;
46
+ function writePnpmWorkspacePackages(targetDir, bridge, packageSource) {
52
47
  const pnpmWorkspacePath = `${targetDir}/pnpm-workspace.yaml`;
53
48
  const pnpmWorkspace = node_fs.readFileSync(pnpmWorkspacePath, 'utf-8');
54
49
  const packages = [
55
50
  'apps/*',
56
51
  'verticals/*',
57
52
  'packages/*',
58
- ...bridge.workspacePackages.map((entry)=>entry.pattern)
53
+ ...bridge?.workspacePackages.map((entry)=>entry.pattern) ?? []
59
54
  ];
60
55
  const renderedPackages = packages.map((pattern)=>` - ${pattern}`).join('\n');
61
- writeFileReplacing(targetDir, 'pnpm-workspace.yaml', pnpmWorkspace.replace(/^packages:\r?\n(?: {2}- .+\r?\n)+/u, `packages:\n${renderedPackages}\n`));
56
+ writeFileReplacing(targetDir, 'pnpm-workspace.yaml', `${renderCatalogPolicy(packageSource)}${pnpmWorkspace.replace(/^packages:\r?\n(?: {2}- .+\r?\n)+/u, `packages:\n${renderedPackages}\n`)}`);
62
57
  }
63
58
  function generateUltramodernWorkspace(options) {
64
59
  const result = runFreshWorkspaceTransaction(options.targetDir, (stagingRoot)=>generateUltramodernWorkspaceInPlace({
@@ -71,19 +66,15 @@ function generateUltramodernWorkspaceInPlace(options, logicalWorkspaceRoot = opt
71
66
  const beforeFiles = createFileSnapshot(options.targetDir);
72
67
  const scope = toPackageScope(options.packageName);
73
68
  let packageSource;
74
- let releaseCohort;
75
69
  if (isCreatePackageSourceCheckout()) {
76
- if (hasExplicitInstallRequest(options)) throw new Error('A local @modern-js/ultramodern-create source checkout cannot satisfy an explicit install package source. Use workspace mode locally or run the packed published package with its authenticated release cohort projection.');
70
+ if (hasExplicitInstallRequest(options)) throw new Error('A local @modern-js/ultramodern-create source checkout cannot satisfy an explicit install package source. Use workspace mode locally or run the packed published package.');
77
71
  packageSource = resolvePackageSource({
78
72
  ...options,
79
73
  packageSource: {
80
74
  strategy: 'workspace'
81
75
  }
82
76
  });
83
- } else {
84
- packageSource = resolvePackageSource(options);
85
- if ('install' === packageSource.strategy) releaseCohort = readCreateReleaseCohort();
86
- }
77
+ } else packageSource = resolvePackageSource(options);
87
78
  const bridge = normalizeUltramodernBridgeConfig(options.bridge);
88
79
  const enableTailwind = false !== options.enableTailwind;
89
80
  const initialVerticals = [];
@@ -98,13 +89,9 @@ function generateUltramodernWorkspaceInPlace(options, logicalWorkspaceRoot = opt
98
89
  node_fs.mkdirSync(options.targetDir, {
99
90
  recursive: true
100
91
  });
101
- const minimumReleaseAgeExclude = renderMinimumReleaseAgeExclude({
102
- packageSource,
103
- releaseCohort
104
- });
105
92
  const workspacePackageLinkingPolicy = resolveWorkspacePackageLinkingPolicy(packageSource);
106
93
  const excludedRootTemplates = new Set([
107
- RELEASE_COHORT_PROJECTION_PATH
94
+ "scripts/setup-agent-reference-repos.mjs"
108
95
  ]);
109
96
  if (false === options.generateAgentFiles) {
110
97
  excludedRootTemplates.add('AGENTS.md.handlebars');
@@ -115,37 +102,23 @@ function generateUltramodernWorkspaceInPlace(options, logicalWorkspaceRoot = opt
115
102
  packageScope: scope,
116
103
  nodeVersion: NODE_VERSION,
117
104
  pnpmVersion: PNPM_VERSION,
118
- nodeFetchVersion: NODE_FETCH_VERSION,
119
- drizzleOrmVersion: DRIZZLE_ORM_VERSION,
120
105
  effectVersion: EFFECT_VERSION,
121
- effectVitestVersion: EFFECT_VITEST_VERSION,
122
106
  i18nextVersion: I18NEXT_VERSION,
123
- moduleFederationVersion: MODULE_FEDERATION_VERSION,
124
- msgpackrVersion: MSGPACKR_VERSION,
125
- zodVersion: ZOD_VERSION,
126
- tanstackHistoryVersion: TANSTACK_HISTORY_VERSION,
127
- tanstackRouterCoreVersion: TANSTACK_ROUTER_CORE_VERSION,
128
- tanstackRouterVersion: TANSTACK_ROUTER_VERSION,
129
- typescriptVersion: TYPESCRIPT_VERSION,
130
- wranglerVersion: WRANGLER_VERSION,
131
- minimumReleaseAgeExcludeYaml: 0 === minimumReleaseAgeExclude.length ? ' []' : `\n${minimumReleaseAgeExclude.map((selector)=>` - '${selector}'`).join('\n')}`,
132
107
  workspacePackageLinkingYaml: Object.entries(workspacePackageLinkingPolicy).map(([key, value])=>`${key}: ${String(value)}\n`).join(''),
133
108
  tailwindEnabled: String(enableTailwind)
134
109
  }, excludedRootTemplates);
135
- if (releaseCohort) copyCreateReleaseCohort(options.targetDir);
136
- writePnpmWorkspacePackages(options.targetDir, bridge);
137
- writeJson(options.targetDir, 'package.json', createCompactRootPackageJson(scope, packageSource, initialVerticals, bridge));
110
+ writePnpmWorkspacePackages(options.targetDir, bridge, packageSource);
111
+ writeJson(options.targetDir, 'package.json', createRootPackageJson(scope, packageSource, initialVerticals, bridge));
138
112
  if (initialVerticals.length > 0) writeFile(options.targetDir, 'zerops.yaml', `${createZeropsYaml(scope, createdApps)}\n`);
139
113
  writeJson(options.targetDir, 'tsconfig.base.json', createTsConfigBase());
140
114
  writeJson(options.targetDir, 'tsconfig.json', createRootTsConfig(createdApps));
141
115
  writeJson(options.targetDir, 'topology/reference-topology.json', createTopology(scope, initialVerticals));
142
116
  writeJson(options.targetDir, 'topology/ownership.json', createOwnership(scope, initialVerticals));
143
117
  writeJson(options.targetDir, 'topology/local-overlays/development.json', createDevelopmentOverlay(scope, initialVerticals));
144
- writeJson(options.targetDir, ULTRAMODERN_CONFIG_PATH, createCompactUltramodernConfig(scope, options.modernVersion, packageSource, createdApps, enableTailwind, bridge));
145
118
  writeApp(options.targetDir, scope, shellApp, packageSource, enableTailwind, initialVerticals, bridge);
146
119
  for (const remote of initialVerticals)writeApp(options.targetDir, scope, remote, packageSource, enableTailwind, initialVerticals, bridge);
147
- writeSharedPackages(options.targetDir, scope);
148
- writeGeneratedWorkspaceScripts(options.targetDir, scope, enableTailwind, initialVerticals, releaseCohort);
120
+ writeSharedPackages(options.targetDir, scope, packageSource);
121
+ writeGeneratedWorkspaceScripts(options.targetDir);
149
122
  const preliminaryAfterFiles = createFileSnapshot(options.targetDir);
150
123
  const preliminaryDiff = diffFileSnapshots(beforeFiles, preliminaryAfterFiles);
151
124
  const preliminaryResult = createGenerationResult({
@@ -175,4 +148,4 @@ function generateUltramodernWorkspaceInPlace(options, logicalWorkspaceRoot = opt
175
148
  rewrittenPaths
176
149
  });
177
150
  }
178
- export { createCompactUltramodernConfig, generateUltramodernWorkspace, writeApp };
151
+ export { generateUltramodernWorkspace, writeApp };
@@ -31,6 +31,8 @@ function createZeropsService(scope, app) {
31
31
  ` - setup: ${quoteYamlString(app.id)}`,
32
32
  ' build:',
33
33
  ` base: ${quoteYamlString(zeropsNodeRuntime)}`,
34
+ ' envVariables:',
35
+ ` ZE_FAIL_BUILD: ${quoteYamlString('true')}`,
34
36
  ' buildCommands:',
35
37
  ' - |',
36
38
  ...commands.map((command)=>` ${command}`),
@@ -3,7 +3,7 @@ import node_fs from "node:fs";
3
3
  import node_path from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import { resolveCreatePackageRoot } from "../create-package-root.js";
6
- import { BLEEDINGDEV_CREATE_PACKAGE, BLEEDINGDEV_FRAMEWORK_VERSION_ENV, BLEEDINGDEV_PACKAGE_NAME_PREFIX, BLEEDINGDEV_PACKAGE_SCOPE, LEGACY_BLEEDINGDEV_CREATE_PACKAGE, ULTRAMODERN_FRAMEWORK_VERSION_ENV, WORKSPACE_PACKAGE_VERSION } from "../ultramodern-package-source.js";
6
+ import { BLEEDINGDEV_CREATE_PACKAGE, BLEEDINGDEV_PACKAGE_NAME_PREFIX, BLEEDINGDEV_PACKAGE_SCOPE, ULTRAMODERN_FRAMEWORK_VERSION_ENV, WORKSPACE_PACKAGE_VERSION } from "../ultramodern-package-source.js";
7
7
  import { isCreatePackageSourceCheckout } from "../ultramodern-release-cohort.js";
8
8
  import { WORKSPACE_PROTOCOL_FLAG, getOptionValue } from "./flags.js";
9
9
  import { runSetupCommand } from "./project-setup.js";
@@ -16,7 +16,7 @@ function readCreatePackageJson() {
16
16
  return JSON.parse(node_fs.readFileSync(createPackageJson, 'utf-8'));
17
17
  }
18
18
  function isBleedingDevCreatePackage(createPackage) {
19
- return createPackage.name === BLEEDINGDEV_CREATE_PACKAGE || createPackage.name === LEGACY_BLEEDINGDEV_CREATE_PACKAGE;
19
+ return createPackage.name === BLEEDINGDEV_CREATE_PACKAGE;
20
20
  }
21
21
  function getBleedingDevFrameworkVersion(createPackage, fallbackVersion) {
22
22
  const frameworkVersion = createPackage.ultramodern?.frameworkVersion;
@@ -57,7 +57,7 @@ function hasExplicitUltramodernPackageSource(args, value) {
57
57
  return value ? configuredValue === value : void 0 !== configuredValue;
58
58
  }
59
59
  function readBleedingDevFrameworkVersionFromRegistry(fallbackVersion) {
60
- const envVersion = (process.env[ULTRAMODERN_FRAMEWORK_VERSION_ENV] ?? process.env[BLEEDINGDEV_FRAMEWORK_VERSION_ENV])?.trim();
60
+ const envVersion = process.env[ULTRAMODERN_FRAMEWORK_VERSION_ENV]?.trim();
61
61
  if (envVersion) {
62
62
  if (!semverPattern.test(envVersion)) {
63
63
  console.error(`${ULTRAMODERN_FRAMEWORK_VERSION_ENV} must be a valid semver version`);
@@ -43,7 +43,7 @@ function isInsideGitWorkTree(targetDir) {
43
43
  }
44
44
  function initializeGeneratedGitRepository(targetDir) {
45
45
  assertGitAvailableForGeneratedProject();
46
- if (isInsideGitWorkTree(targetDir)) return;
46
+ if (isInsideGitWorkTree(targetDir)) return false;
47
47
  try {
48
48
  runSetupCommand('git', [
49
49
  'init',
@@ -69,27 +69,7 @@ function initializeGeneratedGitRepository(targetDir) {
69
69
  stdio: 'inherit'
70
70
  });
71
71
  }
72
- runSetupCommand('git', [
73
- 'add',
74
- '-A'
75
- ], {
76
- cwd: targetDir,
77
- stdio: 'inherit'
78
- });
79
- runSetupCommand('git', [
80
- '-c',
81
- 'user.name=UltraModern',
82
- '-c',
83
- 'user.email=ultramodern@bleedingdev.dev',
84
- '-c',
85
- 'commit.gpgsign=false',
86
- 'commit',
87
- '-m',
88
- 'chore: initial UltraModern scaffold'
89
- ], {
90
- cwd: targetDir,
91
- stdio: 'inherit'
92
- });
72
+ return true;
93
73
  }
94
74
  function isDirectoryEmpty(dirPath) {
95
75
  if (!node_fs.existsSync(dirPath)) return false;
@@ -3,7 +3,7 @@ import node_fs from "node:fs";
3
3
  import node_path from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import { runAgentsMd } from "./agents-md.js";
6
- import { DRY_RUN_FLAG, VERTICAL_FLAG, detectApiProtocolFlag, detectBffRuntime, detectCodeSmithOverlays, detectDryRunFlag, detectExplicitTailwindFlag, detectHorizontalRemoteFlag, detectLanguage, detectPresetFlag, detectTailwindFlag, readBridgeCliOptions, resolveVerticalCliInput } from "./cli/flags.js";
6
+ import { DRY_RUN_FLAG, VERTICAL_FLAG, collectPositionalArgs, detectApiProtocolFlag, detectBffRuntime, detectCodeSmithOverlays, detectDryRunFlag, detectExplicitTailwindFlag, detectHorizontalRemoteFlag, detectLanguage, detectPresetFlag, detectTailwindFlag, readBridgeCliOptions, resolveVerticalCliInput } from "./cli/flags.js";
7
7
  import { showHelp, showVersion } from "./cli/help.js";
8
8
  import { detectUltramodernPackageSource, getBleedingDevFrameworkVersion, isBleedingDevCreatePackage, readCreatePackageJson, resolveWorkspacePackageSource } from "./cli/package-source.js";
9
9
  import { initializeGeneratedGitRepository } from "./cli/project-setup.js";
@@ -11,6 +11,7 @@ import { getProjectName } from "./cli/prompts.js";
11
11
  import { i18n, localeKeys } from "./locale/index.js";
12
12
  import { runUltramodernToolingCli } from "./ultramodern-tooling/commands.js";
13
13
  import { addUltramodernVertical, generateUltramodernWorkspace, planUltramodernVertical } from "./ultramodern-workspace/index.js";
14
+ import { recoverFreshWorkspaceTransactions } from "./ultramodern-workspace/add-vertical/transaction.js";
14
15
  import { hasUltramodernBridgeCliOptions } from "./ultramodern-workspace/bridge-config.js";
15
16
  const src_dirname = node_path.dirname(fileURLToPath(import.meta.url));
16
17
  const templateDir = [
@@ -91,9 +92,11 @@ async function main() {
91
92
  console.log(`${dim} pnpm check${reset}\n`);
92
93
  return;
93
94
  }
95
+ if (0 === collectPositionalArgs(args).length) recoverFreshWorkspaceTransactions(process.cwd());
94
96
  const { name: projectName, useCurrentDir } = await getProjectName();
95
97
  const targetDir = useCurrentDir ? process.cwd() : node_path.isAbsolute(projectName) ? projectName : node_path.resolve(process.cwd(), projectName);
96
98
  const generatedPackageName = useCurrentDir || node_path.isAbsolute(projectName) ? node_path.basename(targetDir) : projectName;
99
+ recoverFreshWorkspaceTransactions(targetDir);
97
100
  if (node_fs.existsSync(targetDir)) {
98
101
  const files = node_fs.readdirSync(targetDir);
99
102
  if (files.length > 0) {
@@ -115,7 +118,7 @@ async function main() {
115
118
  packageSource,
116
119
  generateAgentFiles
117
120
  });
118
- initializeGeneratedGitRepository(targetDir);
121
+ const initializedGitRepository = initializeGeneratedGitRepository(targetDir);
119
122
  const dim = '\x1b[2m\x1b[3m';
120
123
  const reset = '\x1b[0m';
121
124
  console.log(`${i18n.t(localeKeys.message.success)}\n`);
@@ -126,6 +129,11 @@ async function main() {
126
129
  })}${reset}`);
127
130
  console.log(`${dim} ${i18n.t(localeKeys.message.step2)}${reset}`);
128
131
  console.log(`${dim} pnpm check${reset}`);
132
+ if (initializedGitRepository) {
133
+ console.log(i18n.t(localeKeys.message.initialCommit));
134
+ console.log(`${dim} git add .${reset}`);
135
+ console.log(`${dim} git commit -m "chore: initial UltraModern scaffold"${reset}`);
136
+ }
129
137
  console.log(`${dim} ${i18n.t(localeKeys.message.step3)}${reset}\n`);
130
138
  }
131
139
  main().catch((error)=>{
@@ -18,7 +18,8 @@ const EN_LOCALE = {
18
18
  nextSteps: '📋 Next steps:',
19
19
  step1: 'cd {projectName}',
20
20
  step2: 'pnpm install',
21
- step3: 'pnpm dev'
21
+ step3: 'pnpm dev',
22
+ initialCommit: 'Commit the checked scaffold before starting development or CI builds. Git uses your configured identity and hooks.'
22
23
  },
23
24
  agentsCmd: {
24
25
  created: '✔ Created {file}',
@@ -18,7 +18,8 @@ const ZH_LOCALE = {
18
18
  nextSteps: '📋 下一步:',
19
19
  step1: 'cd {projectName}',
20
20
  step2: 'pnpm install',
21
- step3: 'pnpm dev'
21
+ step3: 'pnpm dev',
22
+ initialCommit: '启动开发或 CI 构建前,请提交已检查的项目。Git 将使用你配置的身份和钩子。'
22
23
  },
23
24
  agentsCmd: {
24
25
  created: '✔ 已创建 {file}',
@@ -2,11 +2,9 @@ import "node:module";
2
2
  const WORKSPACE_PACKAGE_VERSION = 'workspace:*';
3
3
  const ULTRAMODERN_CREATE_PACKAGE = '@modern-js/ultramodern-create';
4
4
  const BLEEDINGDEV_CREATE_PACKAGE = '@bleedingdev/modern-js-ultramodern-create';
5
- const LEGACY_BLEEDINGDEV_CREATE_PACKAGE = '@bleedingdev/modern-js-create';
6
5
  const BLEEDINGDEV_PACKAGE_SCOPE = 'bleedingdev';
7
6
  const BLEEDINGDEV_PACKAGE_NAME_PREFIX = 'modern-js-';
8
7
  const ULTRAMODERN_FRAMEWORK_VERSION_ENV = 'ULTRAMODERN_CREATE_FRAMEWORK_VERSION';
9
- const BLEEDINGDEV_FRAMEWORK_VERSION_ENV = 'MODERN_CREATE_ULTRAMODERN_FRAMEWORK_VERSION';
10
8
  const ULTRAMODERN_SINGLE_APP_MODERN_PACKAGES = [
11
9
  ULTRAMODERN_CREATE_PACKAGE,
12
10
  '@modern-js/code-tools',
@@ -16,16 +14,28 @@ const ULTRAMODERN_SINGLE_APP_MODERN_PACKAGES = [
16
14
  '@modern-js/plugin-i18n',
17
15
  '@modern-js/plugin-tanstack',
18
16
  '@modern-js/plugin-bff',
17
+ '@modern-js/plugin-bff-build-extensions',
18
+ '@modern-js/plugin-bff-extensions',
19
19
  '@modern-js/adapter-rstest'
20
20
  ];
21
21
  const ULTRAMODERN_WORKSPACE_MODERN_PACKAGES = [
22
+ '@modern-js/bff-effect',
23
+ '@modern-js/boundary-debugger',
22
24
  ULTRAMODERN_CREATE_PACKAGE,
23
25
  '@modern-js/code-tools',
24
26
  '@modern-js/app-tools',
25
27
  '@modern-js/plugin-bff',
28
+ '@modern-js/plugin-bff-build-extensions',
29
+ '@modern-js/plugin-bff-extensions',
26
30
  '@modern-js/plugin-i18n',
31
+ '@modern-js/i18n-integration',
27
32
  '@modern-js/plugin-tanstack',
28
- '@modern-js/runtime'
33
+ '@modern-js/runtime',
34
+ '@modern-js/runtime-extensions',
35
+ '@modern-js/runtime-renderer-extensions',
36
+ '@modern-js/federation-runtime',
37
+ '@modern-js/app-tools-extensions',
38
+ '@modern-js/ultramodern-app-tools'
29
39
  ];
30
40
  function modernPackageVersion(packageSource) {
31
41
  return 'install' === packageSource.strategy ? packageSource.modernPackageVersion : WORKSPACE_PACKAGE_VERSION;
@@ -41,4 +51,4 @@ function modernPackageSpecifier(packageName, packageSource) {
41
51
  if (!packageSource.aliasScope) return packageSource.modernPackageVersion;
42
52
  return `npm:${modernAliasPackageName(packageName, packageSource)}@${packageSource.modernPackageVersion}`;
43
53
  }
44
- export { BLEEDINGDEV_CREATE_PACKAGE, BLEEDINGDEV_FRAMEWORK_VERSION_ENV, BLEEDINGDEV_PACKAGE_NAME_PREFIX, BLEEDINGDEV_PACKAGE_SCOPE, LEGACY_BLEEDINGDEV_CREATE_PACKAGE, ULTRAMODERN_CREATE_PACKAGE, ULTRAMODERN_FRAMEWORK_VERSION_ENV, ULTRAMODERN_SINGLE_APP_MODERN_PACKAGES, ULTRAMODERN_WORKSPACE_MODERN_PACKAGES, WORKSPACE_PACKAGE_VERSION, modernPackageSpecifier, modernPackageVersion };
54
+ export { BLEEDINGDEV_CREATE_PACKAGE, BLEEDINGDEV_PACKAGE_NAME_PREFIX, BLEEDINGDEV_PACKAGE_SCOPE, ULTRAMODERN_CREATE_PACKAGE, ULTRAMODERN_FRAMEWORK_VERSION_ENV, ULTRAMODERN_SINGLE_APP_MODERN_PACKAGES, ULTRAMODERN_WORKSPACE_MODERN_PACKAGES, WORKSPACE_PACKAGE_VERSION, modernPackageSpecifier, modernPackageVersion };
@@ -1,8 +1,8 @@
1
1
  import "node:module";
2
2
  import node_fs from "node:fs";
3
3
  import node_path from "node:path";
4
- import { createPackageRoot, writeFile } from "./ultramodern-workspace/fs-io.js";
5
- const RELEASE_COHORT_PROJECTION_PATH = '.modernjs/release-cohort.json';
4
+ import { createPackageRoot } from "./ultramodern-workspace/fs-io.js";
5
+ const RELEASE_COHORT_PATH = 'release-cohort.json';
6
6
  const RELEASE_COHORT_PROJECTION_SCHEMA = 'bleedingdev.ultramodern.release-cohort';
7
7
  const RELEASE_COHORT_PROJECTION_SCHEMA_VERSION = 1;
8
8
  function assert(condition, message) {
@@ -99,23 +99,14 @@ function readCohortFile(filePath) {
99
99
  return parseUltramodernReleaseCohort(value);
100
100
  }
101
101
  function readCreateReleaseCohort() {
102
- return readCohortFile(node_path.join(createPackageRoot, 'template-workspace', RELEASE_COHORT_PROJECTION_PATH));
102
+ return readCohortFile(node_path.join(createPackageRoot, RELEASE_COHORT_PATH));
103
103
  }
104
104
  function hasCreateReleaseCohort() {
105
- return node_fs.existsSync(node_path.join(createPackageRoot, 'template-workspace', RELEASE_COHORT_PROJECTION_PATH));
105
+ return node_fs.existsSync(node_path.join(createPackageRoot, RELEASE_COHORT_PATH));
106
106
  }
107
107
  function isCreatePackageSourceCheckout() {
108
108
  return node_fs.existsSync(node_path.join(createPackageRoot, 'src'));
109
109
  }
110
- function readWorkspaceReleaseCohort(workspaceRoot) {
111
- return readCohortFile(node_path.join(workspaceRoot, RELEASE_COHORT_PROJECTION_PATH));
112
- }
113
- function copyCreateReleaseCohort(workspaceRoot) {
114
- const sourcePath = node_path.join(createPackageRoot, 'template-workspace', RELEASE_COHORT_PROJECTION_PATH);
115
- const cohort = readCohortFile(sourcePath);
116
- writeFile(workspaceRoot, RELEASE_COHORT_PROJECTION_PATH, node_fs.readFileSync(sourcePath, 'utf8'));
117
- return cohort;
118
- }
119
110
  function assertReleaseCohortPackageSource(cohort, packageSource) {
120
111
  if ('install' !== packageSource.strategy) return;
121
112
  assert(packageSource.modernPackageVersion === cohort.release.version, `Package source release ${packageSource.modernPackageVersion} does not match authenticated release cohort ${cohort.release.version}.`);
@@ -131,4 +122,4 @@ function assertReleaseCohortPackageSource(cohort, packageSource) {
131
122
  function releaseCohortSelectors(cohort) {
132
123
  return cohort.packages.map((item)=>`${item.targetName}@${item.version}`).sort();
133
124
  }
134
- export { RELEASE_COHORT_PROJECTION_PATH, assertReleaseCohortPackageSource, copyCreateReleaseCohort, hasCreateReleaseCohort, isCreatePackageSourceCheckout, parseUltramodernReleaseCohort, readCreateReleaseCohort, readWorkspaceReleaseCohort, releaseCohortSelectors };
125
+ export { RELEASE_COHORT_PATH, assertReleaseCohortPackageSource, hasCreateReleaseCohort, isCreatePackageSourceCheckout, parseUltramodernReleaseCohort, readCreateReleaseCohort, releaseCohortSelectors };
@@ -1,8 +1,19 @@
1
1
  import "node:module";
2
+ import { createRequire } from "node:module";
2
3
  import node_path from "node:path";
4
+ import { createCloudflarePublicUrlEnv } from "../../ultramodern-workspace/descriptors.js";
3
5
  import { readUltramodernConfig, workspaceAppsFromToolingConfig } from "../config.js";
4
- import { runRenderedModule } from "./context.js";
5
6
  import { readOption } from "./options.js";
7
+ const REQUIRE_PUBLIC_URLS_FLAG = '--require-public-urls';
8
+ const missingPublicUrl = ({ label, publicUrlEnv })=>{
9
+ if (!publicUrlEnv) return `${REQUIRE_PUBLIC_URLS_FLAG} needs --app, not --output (${label}).`;
10
+ const names = [
11
+ publicUrlEnv,
12
+ 'MODERN_PUBLIC_SITE_URL',
13
+ 'ULTRAMODERN_CLOUDFLARE_WORKERS_DEV_SUBDOMAIN'
14
+ ];
15
+ return names.some((name)=>process.env[name]?.trim()) ? void 0 : `Cloudflare deploy for ${label} needs ${names.join(', ')}.`;
16
+ };
6
17
  const resolveCloudflareOutputVerifyTargets = (args, context)=>{
7
18
  const outputDirectory = readOption(args, '--output');
8
19
  const appId = readOption(args, '--app');
@@ -12,74 +23,56 @@ const resolveCloudflareOutputVerifyTargets = (args, context)=>{
12
23
  label: outputDirectory,
13
24
  outputDirectory: node_path.resolve(context.invocationCwd, outputDirectory)
14
25
  }
15
- ] : workspaceAppsFromToolingConfig(readUltramodernConfig(context.workspaceRoot)).filter((app)=>!appId || app.id === appId).map((app)=>({
26
+ ] : workspaceAppsFromToolingConfig(readUltramodernConfig(context.workspaceRoot), context.workspaceRoot).filter((app)=>!appId || app.id === appId).map((app)=>({
16
27
  label: app.id,
17
- outputDirectory: node_path.join(context.workspaceRoot, app.directory, '.output')
28
+ outputDirectory: node_path.join(context.workspaceRoot, app.directory, '.output'),
29
+ publicUrlEnv: createCloudflarePublicUrlEnv(app)
18
30
  }));
19
31
  if (0 === targets.length) throw new Error(`No generated UltraModern app matched ${appId}.`);
20
32
  return targets;
21
33
  };
22
- const renderCloudflareOutputVerifyModule = ({ workspaceRoot, targets, excludePaths })=>`
23
- import { createRequire } from 'node:module';
24
- import path from 'node:path';
25
-
26
- const workspaceRoot = ${JSON.stringify(workspaceRoot)};
27
- const targets = ${JSON.stringify(targets, null, 2)};
28
- const scanRoots = [workspaceRoot];
29
- const excludePaths = ${JSON.stringify(excludePaths)};
30
- const verifierRequire = createRequire(path.join(workspaceRoot, 'package.json'));
31
- const {
32
- verifyCloudflareOutput,
33
- verifyCloudflareOutputMutationPolicy,
34
- } = verifierRequire('@modern-js/app-tools/cloudflare-output-verifier');
35
-
36
- let failed = false;
37
- for (const target of targets) {
38
- const result = await verifyCloudflareOutput({
39
- outputDirectory: target.outputDirectory,
40
- importWorker: true,
41
- });
42
- if (result.ok) {
43
- console.log(\`[ultramodern] Cloudflare output verified: \${target.label}\`);
44
- } else {
45
- failed = true;
46
- console.error(\`[ultramodern] Cloudflare output failed: \${target.label}\`);
47
- for (const issue of result.issues) {
48
- console.error(\`- \${issue.code}: \${issue.message}\${issue.path ? \` (\${issue.path})\` : ''}\`);
49
- }
50
- }
51
- }
52
-
53
- if (scanRoots.length > 0) {
54
- const policyResult = await verifyCloudflareOutputMutationPolicy({ scanRoots, excludePaths });
55
- if (!policyResult.ok) {
56
- failed = true;
57
- console.error('[ultramodern] generated-output mutation policy failed');
58
- for (const issue of policyResult.issues) {
59
- console.error(\`- \${issue.code}: \${issue.message}\${issue.path ? \` (\${issue.path})\` : ''}\`);
60
- }
61
- }
62
- }
63
-
64
- process.exit(failed ? 1 : 0);
65
- `;
66
- function runCloudflareOutputVerify(args, context) {
34
+ async function runCloudflareOutputVerify(args, context) {
67
35
  if (args.includes('--help') || args.includes('-h')) {
68
36
  process.stdout.write(`Usage:
69
- ultramodern-create ultramodern cloudflare-output-verify [--app <id> | --output <dir>]
37
+ ultramodern-create ultramodern cloudflare-output-verify [--app <id> | --output <dir>] [--require-public-urls]
70
38
 
71
39
  Verifies generated Cloudflare output against the UltraModern worker contract.
72
40
  Without --app or --output, every generated workspace app is verified.
41
+ --require-public-urls also fails an app that has no public URL to deploy to.
73
42
  `);
74
43
  return 0;
75
44
  }
76
- const source = renderCloudflareOutputVerifyModule({
77
- workspaceRoot: context.workspaceRoot,
78
- targets: resolveCloudflareOutputVerifyTargets(args, context),
79
- excludePaths: [
80
- node_path.join(context.workspaceRoot, "scripts", 'validate-ultramodern-workspace.mts')
81
- ]
45
+ const targets = resolveCloudflareOutputVerifyTargets(args, context);
46
+ if (args.includes(REQUIRE_PUBLIC_URLS_FLAG)) {
47
+ const missing = targets.map(missingPublicUrl).filter((message)=>Boolean(message));
48
+ if (missing.length > 0) throw new Error(missing.join('\n'));
49
+ }
50
+ const verifierRequire = createRequire(node_path.join(context.workspaceRoot, 'package.json'));
51
+ const { verifyCloudflareOutput, verifyCloudflareOutputMutationPolicy } = verifierRequire('@modern-js/app-tools-extensions/cloudflare-output-verifier');
52
+ let failed = false;
53
+ for (const target of targets){
54
+ const result = await verifyCloudflareOutput({
55
+ outputDirectory: target.outputDirectory,
56
+ importWorker: true
57
+ });
58
+ if (result.ok) console.log(`[ultramodern] Cloudflare output verified: ${target.label}`);
59
+ else {
60
+ failed = true;
61
+ console.error(`[ultramodern] Cloudflare output failed: ${target.label}`);
62
+ for (const issue of result.issues)console.error(`- ${issue.code}: ${issue.message}${issue.path ? ` (${issue.path})` : ''}`);
63
+ }
64
+ }
65
+ const policyResult = await verifyCloudflareOutputMutationPolicy({
66
+ scanRoots: [
67
+ context.workspaceRoot
68
+ ],
69
+ excludePaths: []
82
70
  });
83
- return runRenderedModule(source, context);
71
+ if (!policyResult.ok) {
72
+ failed = true;
73
+ console.error('[ultramodern] generated-output mutation policy failed');
74
+ for (const issue of policyResult.issues)console.error(`- ${issue.code}: ${issue.message}${issue.path ? ` (${issue.path})` : ''}`);
75
+ }
76
+ return failed ? 1 : 0;
84
77
  }
85
78
  export { runCloudflareOutputVerify };
@@ -1,18 +1,22 @@
1
1
  import "node:module";
2
2
  import { spawnSync } from "node:child_process";
3
- import node_fs from "node:fs";
4
- import node_os from "node:os";
3
+ import { constants } from "node:os";
5
4
  import node_path from "node:path";
6
5
  import { fileURLToPath } from "node:url";
7
6
  import { resolveCreatePackageRoot } from "../../create-package-root.js";
8
7
  import { generatedToolingCommandList, generatedToolingCommands } from "../../ultramodern-workspace/tooling-command-catalog.js";
9
8
  const context_dirname = node_path.dirname(fileURLToPath(import.meta.url));
10
9
  const createPackageRoot = resolveCreatePackageRoot(context_dirname);
10
+ const AD_HOC_TOOLING_COMMANDS = {
11
+ syncDeliveryUnit: 'sync-delivery-unit',
12
+ skills: 'skills'
13
+ };
11
14
  function printHelp() {
12
15
  const commands = [
13
16
  ...generatedToolingCommandList().map((command)=>` ${command}`),
14
- ' skills install',
15
- ' skills check'
17
+ ` ${AD_HOC_TOOLING_COMMANDS.syncDeliveryUnit}`,
18
+ ` ${AD_HOC_TOOLING_COMMANDS.skills} install`,
19
+ ` ${AD_HOC_TOOLING_COMMANDS.skills} check`
16
20
  ].join('\n');
17
21
  process.stdout.write(`Usage:
18
22
  ultramodern-create ultramodern <command> [args]
@@ -35,7 +39,7 @@ function spawnNodeScript(relativeScriptPath, args, context, options = {}) {
35
39
  stdio: 'inherit'
36
40
  });
37
41
  if (result.error) throw result.error;
38
- return result.status ?? 1;
42
+ return result.status ?? (result.signal ? 128 + constants.signals[result.signal] : 1);
39
43
  }
40
44
  function runTemplateBackedToolingCommand(command, args, context) {
41
45
  const toolingCommand = generatedToolingCommands.find((candidate)=>candidate.command === command);
@@ -44,24 +48,4 @@ function runTemplateBackedToolingCommand(command, args, context) {
44
48
  cwd: 'invocation' === toolingCommand.cwd ? context.invocationCwd : context.workspaceRoot
45
49
  });
46
50
  }
47
- function runRenderedModule(source, context) {
48
- const tempDir = node_fs.mkdtempSync(node_path.join(node_os.tmpdir(), 'ultramodern-tool-'));
49
- const tempFile = node_path.join(tempDir, 'command.mjs');
50
- try {
51
- node_fs.writeFileSync(tempFile, source, 'utf-8');
52
- const result = spawnSync(process.execPath, [
53
- tempFile
54
- ], {
55
- cwd: context.workspaceRoot,
56
- stdio: 'inherit'
57
- });
58
- if (result.error) throw result.error;
59
- return result.status ?? 1;
60
- } finally{
61
- node_fs.rmSync(tempDir, {
62
- force: true,
63
- recursive: true
64
- });
65
- }
66
- }
67
- export { createPackageRoot, printHelp, runRenderedModule, runTemplateBackedToolingCommand, spawnNodeScript };
51
+ export { AD_HOC_TOOLING_COMMANDS, createPackageRoot, printHelp, runTemplateBackedToolingCommand, spawnNodeScript };
@@ -0,0 +1,36 @@
1
+ import "node:module";
2
+ import { createRequire } from "node:module";
3
+ import node_path from "node:path";
4
+ import { pathToFileURL } from "node:url";
5
+ async function main() {
6
+ const [appDirectory, label, mode] = process.argv.slice(2);
7
+ try {
8
+ if (!appDirectory || !label) throw new Error('Route generation requires an app directory and label.');
9
+ const appRequire = createRequire(node_path.join(appDirectory, 'package.json'));
10
+ const pluginUrl = pathToFileURL(appRequire.resolve('@modern-js/plugin-tanstack')).href;
11
+ const plugin = await import(pluginUrl);
12
+ if ('manifest' === mode) {
13
+ await plugin.writeRouteMetadataManifest({
14
+ appDirectory
15
+ });
16
+ console.log(`[ultramodern] Route metadata manifest generated: ${label}`);
17
+ } else {
18
+ await plugin.generateTanstackRouteArtifacts({
19
+ appDirectory
20
+ });
21
+ console.log(`[ultramodern] TanStack route artifacts generated: ${label}`);
22
+ }
23
+ } catch (error) {
24
+ process.exitCode = 1;
25
+ console.error(`[ultramodern] TanStack route generation failed: ${label}`);
26
+ let current = error;
27
+ let depth = 0;
28
+ while(current){
29
+ const detail = current instanceof Error ? current.stack ?? `${current.name}: ${current.message}` : String(current);
30
+ console.error(`${0 === depth ? '-' : ' caused by:'} ${detail}`);
31
+ current = current instanceof Error ? current.cause : void 0;
32
+ depth += 1;
33
+ }
34
+ }
35
+ }
36
+ main();