@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,8 +1,9 @@
1
1
  #!/usr/bin/env node
2
- import { spawnSync } from 'node:child_process';
3
2
  import fs from 'node:fs';
4
3
  import os from 'node:os';
5
4
  import path from 'node:path';
5
+ import execa from '@modern-js/utils/execa';
6
+ import { readWorkspacePackageSource } from '../../dist/esm-node/ultramodern-tooling/config/metadata.js';
6
7
 
7
8
  const workspaceRoot = path.resolve(
8
9
  process.env.ULTRAMODERN_WORKSPACE_ROOT ?? process.cwd(),
@@ -45,30 +46,27 @@ function readJson(filePath) {
45
46
  return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
46
47
  }
47
48
 
48
- function readOptionalJson(filePath) {
49
- return fs.existsSync(filePath) ? readJson(filePath) : undefined;
50
- }
51
-
52
49
  function writeJson(filePath, value) {
53
50
  fs.writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`, 'utf-8');
54
51
  }
55
52
 
56
53
  function run(command, commandArgs, options = {}) {
57
- const result = spawnSync(command, commandArgs, {
54
+ const result = execa.sync(command, commandArgs, {
58
55
  cwd: options.cwd ?? workspaceRoot,
59
56
  env: {
60
57
  ...process.env,
61
58
  MODERNJS_DEPLOY: 'node',
62
59
  },
63
60
  stdio: 'inherit',
61
+ reject: false,
64
62
  });
65
63
 
66
- if (result.error) {
67
- fail(result.error.message);
64
+ if (result.failed && result.exitCode === undefined) {
65
+ fail(result.shortMessage ?? result.message);
68
66
  }
69
67
 
70
- if (result.status !== 0) {
71
- process.exit(result.status ?? 1);
68
+ if (result.exitCode !== 0) {
69
+ process.exit(result.exitCode ?? 1);
72
70
  }
73
71
  }
74
72
 
@@ -162,7 +160,7 @@ assertInsideWorkspace('runtime directory', runtimeDir);
162
160
 
163
161
  const sourceSnapshot = snapshotWorkspaceSourceFiles();
164
162
  try {
165
- run(process.platform === 'win32' ? 'pnpm.cmd' : 'pnpm', [
163
+ run('pnpm', [
166
164
  '--filter',
167
165
  packageName,
168
166
  'run',
@@ -220,13 +218,8 @@ console.log(
220
218
  );
221
219
 
222
220
  function normalizeRuntimePackageDependencies(packageJson) {
223
- const compactConfig = readOptionalJson(
224
- path.join(workspaceRoot, '.modernjs/ultramodern.json'),
225
- );
226
- const packageSource = compactConfig?.packageSource;
227
- const modernPackageVersion = packageSource?.modernPackageVersion;
228
- const aliasScope = packageSource?.aliasScope;
229
- const aliasPackageNamePrefix = packageSource?.aliasPackageNamePrefix;
221
+ const { modernPackageVersion, aliasScope, aliasPackageNamePrefix } =
222
+ readWorkspacePackageSource(workspaceRoot);
230
223
 
231
224
  if (!modernPackageVersion || !aliasScope || !aliasPackageNamePrefix) {
232
225
  return;
@@ -271,7 +264,7 @@ function installRuntimeDependencies(runtimePackage) {
271
264
 
272
265
  writeJson(path.join(installDir, 'package.json'), installPackage);
273
266
  run(
274
- process.platform === 'win32' ? 'npm.cmd' : 'npm',
267
+ 'npm',
275
268
  [
276
269
  'install',
277
270
  '--omit=dev',
@@ -3,12 +3,16 @@ import fs from 'node:fs';
3
3
  import path from 'node:path';
4
4
  import { fileURLToPath } from 'node:url';
5
5
  import { validateApp } from './ultramodern-cloudflare-proof.mjs';
6
+ import {
7
+ readGeneratedContractView as readPublicSurfaceView,
8
+ resolvePublicSurface,
9
+ } from './generate-public-surface-assets.mjs';
6
10
 
7
11
  const workspaceRoot = path.resolve(
8
12
  process.env.ULTRAMODERN_WORKSPACE_ROOT ??
9
13
  path.join(path.dirname(fileURLToPath(import.meta.url)), '..'),
10
14
  );
11
- const compactConfigPath = path.join(workspaceRoot, '.modernjs/ultramodern.json');
15
+ const topologyPath = path.join(workspaceRoot, 'topology/reference-topology.json');
12
16
  const localOverlayPath = path.join(
13
17
  workspaceRoot,
14
18
  'topology/local-overlays/development.json',
@@ -22,10 +26,6 @@ function readJson(filePath) {
22
26
  return JSON.parse(fs.readFileSync(filePath, 'utf8'));
23
27
  }
24
28
 
25
- function readOptionalJson(filePath) {
26
- return fs.existsSync(filePath) ? readJson(filePath) : {};
27
- }
28
-
29
29
  function toKebabCase(value) {
30
30
  return String(value)
31
31
  .trim()
@@ -37,115 +37,14 @@ function toKebabCase(value) {
37
37
  .replace(/^-+|-+$/gu, '');
38
38
  }
39
39
 
40
- function toPascalCase(value) {
41
- return toKebabCase(value)
42
- .split('-')
43
- .filter(Boolean)
44
- .map(part => part.charAt(0).toUpperCase() + part.slice(1))
45
- .join('');
46
- }
47
-
48
40
  function toEnvSegment(value) {
49
41
  return toKebabCase(value).replace(/-/gu, '_').toUpperCase();
50
42
  }
51
43
 
52
- function normalizeRelativePath(value) {
53
- return String(value ?? '').replace(/\\/gu, '/').replace(/^\.\/+/u, '');
54
- }
55
-
56
44
  function appNamespace(app) {
57
45
  return app.kind === 'shell' ? 'shell' : (app.domain ?? app.id);
58
46
  }
59
47
 
60
- function normalizeCompactApp(rawApp, localOverlay = {}) {
61
- const id = String(rawApp.id);
62
- const kind = rawApp.kind === 'vertical' ? 'vertical' : 'shell';
63
- const appPath =
64
- typeof rawApp.path === 'string'
65
- ? normalizeRelativePath(rawApp.path)
66
- : kind === 'shell'
67
- ? 'apps/shell-super-app'
68
- : `verticals/${toKebabCase(id)}`;
69
- const packageSuffix =
70
- typeof rawApp.packageSuffix === 'string'
71
- ? rawApp.packageSuffix
72
- : appPath.split('/').at(-1) ?? id;
73
- const domain =
74
- typeof rawApp.domain === 'string'
75
- ? rawApp.domain
76
- : kind === 'vertical'
77
- ? packageSuffix
78
- : undefined;
79
- const moduleFederation =
80
- rawApp.moduleFederation && typeof rawApp.moduleFederation === 'object'
81
- ? rawApp.moduleFederation
82
- : {};
83
- const surfaceProfile =
84
- rawApp.surfaceProfile === 'api-only' || rawApp.surfaceProfile === 'ui-only'
85
- ? rawApp.surfaceProfile
86
- : 'full-stack';
87
- const api =
88
- rawApp.api && typeof rawApp.api === 'object'
89
- ? {
90
- stem:
91
- typeof rawApp.api.stem === 'string'
92
- ? rawApp.api.stem
93
- : domain ?? id,
94
- prefix:
95
- typeof rawApp.api.prefix === 'string'
96
- ? rawApp.api.prefix
97
- : `/${domain ?? id}-api`,
98
- protocol: rawApp.api.protocol === 'rpc' ? 'rpc' : 'rest',
99
- }
100
- : undefined;
101
- const cloudflare =
102
- rawApp.deploy?.cloudflare && typeof rawApp.deploy.cloudflare === 'object'
103
- ? rawApp.deploy.cloudflare
104
- : {};
105
- const jsonSmokeChecks = Array.isArray(cloudflare.jsonSmokeChecks)
106
- ? cloudflare.jsonSmokeChecks
107
- : undefined;
108
- const port =
109
- typeof rawApp.port === 'number'
110
- ? rawApp.port
111
- : typeof localOverlay.ports?.[id] === 'number'
112
- ? localOverlay.ports[id]
113
- : undefined;
114
-
115
- return {
116
- id,
117
- kind,
118
- path: appPath,
119
- packageSuffix,
120
- domain,
121
- port,
122
- surfaceProfile,
123
- emitsUi: kind === 'shell' || surfaceProfile !== 'api-only',
124
- mfName:
125
- typeof moduleFederation.name === 'string'
126
- ? moduleFederation.name
127
- : kind === 'shell'
128
- ? 'shellSuperApp'
129
- : `vertical${toPascalCase(domain ?? id)}`,
130
- api,
131
- cloudflare,
132
- deliveryUnit:
133
- rawApp.deliveryUnit && typeof rawApp.deliveryUnit === 'object'
134
- ? rawApp.deliveryUnit
135
- : undefined,
136
- backendFederation:
137
- rawApp.backendFederation && typeof rawApp.backendFederation === 'object'
138
- ? rawApp.backendFederation
139
- : undefined,
140
- serverExecution:
141
- localOverlay.serverExecution?.[id] &&
142
- typeof localOverlay.serverExecution[id] === 'object'
143
- ? localOverlay.serverExecution[id]
144
- : undefined,
145
- jsonSmokeChecks,
146
- };
147
- }
148
-
149
48
  function buildMarkerFor(app) {
150
49
  const buildMarker = app.deliveryUnit?.buildMarker;
151
50
  if (typeof buildMarker !== 'string' || buildMarker.length === 0) {
@@ -174,85 +73,6 @@ function createDeliveryUnit(app) {
174
73
  };
175
74
  }
176
75
 
177
- function createCloudflareSecurity() {
178
- return {
179
- enabled: true,
180
- headers: {
181
- referrerPolicy: 'strict-origin-when-cross-origin',
182
- contentTypeOptions: 'nosniff',
183
- permissionsPolicy:
184
- 'camera=(), geolocation=(), microphone=(), payment=(), usb=()',
185
- },
186
- contentSecurityPolicy: {
187
- mode: 'report-only',
188
- directives: {
189
- 'base-uri': [`'self'`],
190
- 'connect-src': [`'self'`, 'https:', 'http:', 'wss:', 'ws:'],
191
- 'default-src': [`'self'`],
192
- 'font-src': [`'self'`, 'data:', 'https:', 'http:'],
193
- 'form-action': [`'self'`],
194
- 'frame-ancestors': [`'self'`],
195
- 'img-src': [`'self'`, 'data:', 'blob:', 'https:', 'http:'],
196
- 'manifest-src': [`'self'`, 'https:', 'http:'],
197
- 'object-src': [`'none'`],
198
- 'script-src': [
199
- `'self'`,
200
- `'unsafe-inline'`,
201
- `'unsafe-eval'`,
202
- 'https:',
203
- 'http:',
204
- 'blob:',
205
- ],
206
- 'style-src': [`'self'`, `'unsafe-inline'`, 'https:', 'http:'],
207
- 'worker-src': [`'self'`, 'blob:'],
208
- },
209
- reason:
210
- 'Report-only by default so Cloudflare Module Federation SSR can prove remote script, style, and connect compatibility before enforcement.',
211
- },
212
- noindex: {
213
- workersDev: true,
214
- localhost: true,
215
- previewHostnames: [],
216
- },
217
- };
218
- }
219
-
220
- function createQualityGates() {
221
- return {
222
- publicRoutes: {
223
- requireSitemapWhenPresent: true,
224
- requireRobotsSitemapConsistency: true,
225
- requireWebManifestWhenPresent: true,
226
- },
227
- statusCodes: {
228
- notFoundRoute: '/__ultramodern-smoke-missing/nope',
229
- unknownRouteStatus: 404,
230
- },
231
- indexing: {
232
- previewNoindex: true,
233
- productionPublicRoutesIndexable: true,
234
- },
235
- assets: {
236
- cssPreloadRequired: true,
237
- cssResponseRequired: true,
238
- cacheControlRequiredForCss: true,
239
- sourcemapsPubliclyReferenced: false,
240
- },
241
- budgets: {
242
- ssrHtmlMaxBytes: 250_000,
243
- mfManifestMaxBytes: 500_000,
244
- localeJsonMaxBytes: 100_000,
245
- sitemapXmlMaxBytes: 500_000,
246
- cssAssetMaxBytes: 750_000,
247
- },
248
- csp: {
249
- finalMode: 'report-only-dogfood',
250
- decision:
251
- 'Report-only remains the generated final mode until public smoke proof records MF SSR script/style/connect compatibility for the deployed surface.',
252
- },
253
- };
254
- }
255
-
256
76
  function createPublicHead() {
257
77
  return {
258
78
  alternates: {
@@ -262,42 +82,6 @@ function createPublicHead() {
262
82
  };
263
83
  }
264
84
 
265
- function createPublicSurface() {
266
- return {
267
- publicRoutes: [],
268
- routeEntries: [],
269
- contentSources: [],
270
- concreteUrlPaths: [],
271
- };
272
- }
273
-
274
- function createCloudflareRoutes(app) {
275
- return {
276
- ...(app.emitsUi
277
- ? {
278
- ssr: '/en',
279
- mfManifest: '/mf-manifest.json',
280
- locale: `/locales/en/${appNamespace(app)}.json`,
281
- }
282
- : {}),
283
- ...(app.api
284
- ? app.api.protocol === 'rpc'
285
- ? { rpc: `${app.api.prefix}/rpc` }
286
- : { apiReadiness: `${app.api.prefix}/${app.api.stem}/readiness` }
287
- : {}),
288
- };
289
- }
290
-
291
- function createApiReadinessRoute(app) {
292
- return app.api?.protocol === 'rest'
293
- ? `${app.api.prefix}/${app.api.stem}/readiness`
294
- : undefined;
295
- }
296
-
297
- function createRpcRoute(app) {
298
- return app.api?.protocol === 'rpc' ? `${app.api.prefix}/rpc` : undefined;
299
- }
300
-
301
85
  function createRpcProbe(app) {
302
86
  const id = `${app.id}-cloudflare-proof`;
303
87
  return {
@@ -307,149 +91,10 @@ function createRpcProbe(app) {
307
91
  };
308
92
  }
309
93
 
310
- function createCloudflareWorkerName(packageScope, app) {
311
- return `${toKebabCase(packageScope)}-${app.packageSuffix}`.slice(0, 63);
312
- }
313
-
314
94
  function createWorkerBindingName(app) {
315
95
  return `VERTICAL_${toEnvSegment(app.domain ?? app.id)}_WORKER`;
316
96
  }
317
97
 
318
- function createWorkerBindingEnv(app) {
319
- return `VERTICAL_${toEnvSegment(app.domain ?? app.id)}_WORKER_BINDING`;
320
- }
321
-
322
- function createDispatchNamespaceEnv(app) {
323
- return `VERTICAL_${toEnvSegment(app.domain ?? app.id)}_DISPATCH_NAMESPACE`;
324
- }
325
-
326
- function createDispatchWorkerNameEnv(app) {
327
- return `VERTICAL_${toEnvSegment(app.domain ?? app.id)}_WORKER_NAME`;
328
- }
329
-
330
- function createBackendRemoteName(app) {
331
- return `${app.mfName ?? `vertical${toPascalCase(app.id)}`}Backend`;
332
- }
333
-
334
- function createCloudflareExecutionSurface(packageScope, app) {
335
- const workerRuntime = {
336
- workerEntry: '.output/server/index.mjs',
337
- workerManifest: '.output/server/modern-worker-manifest.json',
338
- effectBffBundle: '.output/worker/__modern_bff_effect.js',
339
- };
340
- return {
341
- kind: 'cloudflare-worker-snapshot',
342
- workerName: createCloudflareWorkerName(packageScope, app),
343
- publicUrlEnv: `ULTRAMODERN_PUBLIC_URL_${toEnvSegment(app.id)}`,
344
- ...(app.emitsUi
345
- ? {
346
- ssr: {
347
- ...workerRuntime,
348
- routeManifest: '.output/server/route.json',
349
- ssrBundle: '.output/worker/index.js',
350
- assetsBinding: 'ASSETS',
351
- },
352
- }
353
- : { api: workerRuntime }),
354
- zephyr: {
355
- runtime: app.emitsUi ? 'ssr-worker' : 'api-worker',
356
- integration: 'managed-cloudflare',
357
- snapshotIdEnv: `ZEPHYR_${toEnvSegment(app.domain ?? app.id)}_SNAPSHOT_ID`,
358
- versionIdEnv: `ZEPHYR_${toEnvSegment(app.domain ?? app.id)}_VERSION_ID`,
359
- applicationUidEnv: `ZEPHYR_${toEnvSegment(app.domain ?? app.id)}_APPLICATION_UID`,
360
- },
361
- workerDispatch: {
362
- preferred: 'service-binding',
363
- serviceBinding: createWorkerBindingName(app),
364
- serviceBindingEnv: createWorkerBindingEnv(app),
365
- dispatchNamespaceEnv: createDispatchNamespaceEnv(app),
366
- dispatchWorkerNameEnv: createDispatchWorkerNameEnv(app),
367
- requestInterface: 'fetch',
368
- },
369
- };
370
- }
371
-
372
- function createNodeExecutionSurface(app) {
373
- return {
374
- kind: 'node-mf-runtime',
375
- adapterVersion: 'backend-mf-effect-v1',
376
- remoteName: createBackendRemoteName(app),
377
- manifestUrl: `http://localhost:${app.port}/backend-mf-manifest.json`,
378
- containerEntry: `http://localhost:${app.port}/backendRemoteEntry.cjs`,
379
- remoteType: 'commonjs-module',
380
- expose: './effect-api',
381
- runtimePackage: '@modern-js/plugin-bff/effect',
382
- };
383
- }
384
-
385
- function createServerExecutionProof(packageScope, app) {
386
- if (!app.api) {
387
- return undefined;
388
- }
389
- const rpc = createRpcRoute(app);
390
- const readiness = createApiReadinessRoute(app);
391
- return {
392
- apiBaseUrl: `http://localhost:${app.port}${rpc ?? app.api.prefix}`,
393
- versionBoundary: 'web-and-api-same-build',
394
- cloudflare: {
395
- ...createCloudflareExecutionSurface(packageScope, app),
396
- ...(rpc ? { rpcPath: rpc, rpcSerialization: 'json' } : {}),
397
- ...(readiness ? { apiReadiness: readiness } : {}),
398
- },
399
- node: createNodeExecutionSurface(app),
400
- };
401
- }
402
-
403
- function createBackendFederationProof(packageScope, app) {
404
- if (!app.api) {
405
- return undefined;
406
- }
407
- const apiReadiness = createApiReadinessRoute(app);
408
- const rpc = createRpcRoute(app);
409
- const marker = buildMarkerFor(app);
410
- const remoteName = createBackendRemoteName(app);
411
- return {
412
- role: 'microvertical-server',
413
- name: remoteName,
414
- runtimeFramework: 'effect',
415
- strictEffectApproach: true,
416
- exposes: {
417
- './effect-api': {
418
- runtime: `${app.path}/api/index.ts`,
419
- ...(rpc
420
- ? {
421
- contract: `${app.path}/shared/rpc.ts`,
422
- rpc,
423
- serialization: 'json',
424
- }
425
- : { readiness: apiReadiness }),
426
- },
427
- },
428
- versionBoundary: {
429
- invariant: 'web-and-api-same-build',
430
- ...(app.emitsUi
431
- ? {
432
- ui: {
433
- manifestUrl: `http://localhost:${app.port}/mf-manifest.json`,
434
- marker,
435
- },
436
- }
437
- : {}),
438
- api: {
439
- ...(rpc ? { rpc, serialization: 'json' } : { readiness: apiReadiness }),
440
- marker,
441
- },
442
- },
443
- executionSurfaces: {
444
- cloudflare: createCloudflareExecutionSurface(packageScope, app),
445
- node: createNodeExecutionSurface(app),
446
- },
447
- compatibility: {
448
- contractVersion: 'microvertical-server-effect-v1',
449
- },
450
- };
451
- }
452
-
453
98
  function createProofTarget(app) {
454
99
  const cloudflare = app.deploy?.cloudflare;
455
100
  return {
@@ -462,6 +107,7 @@ function createProofTarget(app) {
462
107
  serviceBindings: cloudflare?.serviceBindings,
463
108
  jsonSmokeChecks: cloudflare?.jsonSmokeChecks,
464
109
  },
110
+ publicSurface: app.routes?.publicSurface,
465
111
  ...(app.backendFederation
466
112
  ? { backendFederation: app.backendFederation }
467
113
  : {}),
@@ -470,7 +116,7 @@ function createProofTarget(app) {
470
116
  };
471
117
  }
472
118
 
473
- function createShellServiceBindingProof(packageScope, app, apps) {
119
+ function createShellServiceBindingProof(app, apps) {
474
120
  if (app.kind !== 'shell') {
475
121
  return undefined;
476
122
  }
@@ -478,12 +124,12 @@ function createShellServiceBindingProof(packageScope, app, apps) {
478
124
  const bindings = apps
479
125
  .filter(candidate => candidate.kind !== 'shell' && candidate.api)
480
126
  .map(candidate => {
481
- const rpc = createRpcRoute(candidate);
127
+ const rpc = candidate.cloudflare.routes?.rpc;
482
128
  return {
483
129
  appId: candidate.id,
484
130
  binding: createWorkerBindingName(candidate),
485
- route: rpc ?? `${candidate.api.prefix}/${candidate.api.stem}/readiness`,
486
- service: createCloudflareWorkerName(packageScope, candidate),
131
+ route: rpc ?? candidate.cloudflare.routes?.apiReadiness,
132
+ service: candidate.cloudflare.workerName,
487
133
  interface: 'fetch',
488
134
  ...(rpc
489
135
  ? createRpcProbe(candidate)
@@ -494,87 +140,50 @@ function createShellServiceBindingProof(packageScope, app, apps) {
494
140
  return bindings.length > 0 ? bindings : undefined;
495
141
  }
496
142
 
497
- function createContractApp(config, app, apps) {
498
- const packageScope =
499
- typeof config.workspace?.packageScope === 'string'
500
- ? config.workspace.packageScope
501
- : path.basename(workspaceRoot);
502
- const compatibilityDate =
503
- typeof config.deploy?.worker?.compatibilityDate === 'string'
504
- ? config.deploy.worker.compatibilityDate
505
- : '2026-06-02';
506
- const workerName = createCloudflareWorkerName(packageScope, app);
507
- const backendFederation = createBackendFederationProof(packageScope, app);
508
- const serverExecution = createServerExecutionProof(packageScope, app);
509
- const deliveryUnit = createDeliveryUnit(app);
510
- const serviceBindings = createShellServiceBindingProof(
511
- packageScope,
512
- app,
513
- apps,
514
- );
515
-
516
- return {
517
- id: app.id,
518
- deploy: {
519
- cloudflare: {
520
- ...app.cloudflare,
521
- workerName,
522
- publicUrlEnv: `ULTRAMODERN_PUBLIC_URL_${toEnvSegment(app.id)}`,
523
- compatibilityDate,
524
- compatibilityFlags: ['nodejs_compat', 'global_fetch_strictly_public'],
525
- routes: app.cloudflare.routes ?? createCloudflareRoutes(app),
526
- ...(serviceBindings ? { serviceBindings } : {}),
527
- ...(app.jsonSmokeChecks ? { jsonSmokeChecks: app.jsonSmokeChecks } : {}),
528
- security: app.cloudflare.security ?? createCloudflareSecurity(),
529
- qualityGates: app.cloudflare.qualityGates ?? createQualityGates(),
530
- },
531
- },
532
- i18n: {
533
- namespace: appNamespace(app),
534
- },
535
- marker: {
536
- appId: app.id,
537
- build: buildMarkerFor(app),
538
- },
539
- ...(deliveryUnit ? { deliveryUnit } : {}),
540
- ...(backendFederation ? { backendFederation } : {}),
541
- ...(serverExecution ? { serverExecution } : {}),
542
- routes: {
543
- publicHead: createPublicHead(),
544
- publicSurface: createPublicSurface(),
545
- },
546
- styling: {
547
- federation: {
548
- rootSelector: `[data-app-id="${app.id}"]`,
549
- },
550
- },
551
- };
552
- }
553
-
554
- function synthesizeContractFromCompactConfig(config) {
555
- const localOverlay = readOptionalJson(localOverlayPath);
556
- const apps = Array.isArray(config.topology?.apps)
557
- ? config.topology.apps.map(app => normalizeCompactApp(app, localOverlay))
558
- : [];
559
-
143
+ async function readGeneratedContractView() {
144
+ const topology = readJson(topologyPath);
145
+ const localOverlay = readJson(localOverlayPath);
146
+ if (topology.schemaVersion !== 1 || !topology.shell || !Array.isArray(topology.verticals)) {
147
+ throw new Error('Invalid topology/reference-topology.json');
148
+ }
149
+ const apps = [topology.shell, ...topology.verticals, ...(topology.shells ?? [])];
150
+ const publicApps = new Map((await readPublicSurfaceView()).apps.map(app => [app.id, app]));
560
151
  return {
561
- sourcePath: compactConfigPath,
562
- apps: apps.map(app => createContractApp(config, app, apps)),
152
+ sourcePath: topologyPath,
153
+ apps: await Promise.all(apps.map(async app => {
154
+ if (typeof app.path !== 'string' || !app.path || !app.cloudflare) {
155
+ throw new Error(`${app.id} is missing its topology path or Cloudflare contract`);
156
+ }
157
+ const buildMarker = buildMarkerFor(app);
158
+ const serviceBindings = createShellServiceBindingProof(app, apps);
159
+ return {
160
+ id: app.id,
161
+ deploy: {
162
+ cloudflare: {
163
+ ...app.cloudflare,
164
+ ...(serviceBindings ? { serviceBindings } : {}),
165
+ },
166
+ },
167
+ i18n: { namespace: appNamespace(app) },
168
+ marker: { appId: app.id, build: buildMarker },
169
+ deliveryUnit: createDeliveryUnit({
170
+ ...app,
171
+ emitsUi: app.kind === 'shell' || app.surfaceProfile !== 'api-only',
172
+ }),
173
+ ...(app.backendFederation ? { backendFederation: app.backendFederation } : {}),
174
+ ...(localOverlay.serverExecution?.[app.id]
175
+ ? { serverExecution: localOverlay.serverExecution[app.id] }
176
+ : {}),
177
+ routes: {
178
+ publicHead: createPublicHead(),
179
+ publicSurface: await resolvePublicSurface(publicApps.get(app.id)),
180
+ },
181
+ styling: { federation: { rootSelector: `[data-app-id="${app.id}"]` } },
182
+ };
183
+ })),
563
184
  };
564
185
  }
565
186
 
566
- function readGeneratedContractView() {
567
- if (fs.existsSync(compactConfigPath)) {
568
- return synthesizeContractFromCompactConfig(readJson(compactConfigPath));
569
- }
570
- throw new Error(
571
- `Missing UltraModern config. Expected ${path.relative(
572
- workspaceRoot,
573
- compactConfigPath,
574
- )}.`,
575
- );
576
- }
577
-
578
187
  function parseArgs(argv) {
579
188
  const parsed = {
580
189
  appId: undefined,
@@ -606,7 +215,7 @@ function parseArgs(argv) {
606
215
 
607
216
  function printHelp() {
608
217
  process.stdout.write(`Usage:
609
- node scripts/proof-cloudflare-version.mts [--app workspace] [--out evidence.json] [--require-public-urls]
218
+ ultramodern-create ultramodern cloudflare-proof [--app workspace] [--out evidence.json] [--require-public-urls]
610
219
 
611
220
  Set each app's public URL using the contract env key, for example:
612
221
  ULTRAMODERN_PUBLIC_URL_WORKSPACE=https://workspace.example.workers.dev
@@ -626,7 +235,7 @@ async function main(argv = process.argv.slice(2)) {
626
235
  return 0;
627
236
  }
628
237
 
629
- const contract = readGeneratedContractView();
238
+ const contract = await readGeneratedContractView();
630
239
  const apps = args.appId
631
240
  ? contract.apps.filter(app => app.id === args.appId)
632
241
  : contract.apps;
@@ -657,7 +266,7 @@ async function main(argv = process.argv.slice(2)) {
657
266
  schemaVersion: 1,
658
267
  generatedAt: new Date().toISOString(),
659
268
  status: results.length > 0 ? 'pass' : 'skipped',
660
- contractPath: contract.sourcePath ?? compactConfigPath,
269
+ contractPath: contract.sourcePath,
661
270
  proofTargets: apps.map(createProofTarget),
662
271
  results,
663
272
  skipped,