@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,53 +1,27 @@
1
1
  import "node:module";
2
- import node_fs from "node:fs";
3
- import node_os from "node:os";
4
- import node_path from "node:path";
5
2
  import { WORKSPACE_PACKAGE_VERSION } from "../../ultramodern-package-source.js";
6
- import { rpcPath } from "../api/rpc.js";
7
- import { createServerExecutionOverlay } from "../backend-federation.js";
8
- import { ULTRAMODERN_CONFIG_PATH, appEmitsBrowserUi, appHasApi, remoteDependencyAlias, resolveApiPrefix, resolveApiProtocol, shellApp, zephyrRemoteDependency } from "../descriptors.js";
3
+ import { appEmitsBrowserUi, appHasApi, remoteDependencyAlias, resolveApiPrefix, zephyrRemoteDependency } from "../descriptors.js";
9
4
  import { packageName } from "../naming.js";
10
- import { DEVELOPMENT_OVERLAY_PATH, OWNERSHIP_PATH, TOPOLOGY_PATH } from "./constants.js";
11
- import { addUltramodernVertical } from "./execute.js";
5
+ import { executeAddUltramodernVertical } from "./execute.js";
12
6
  import { prepareAddUltramodernVertical } from "./preflight.js";
13
- import { ownershipEntry, verticalTopologyEntry } from "./topology.js";
7
+ import { describeJsonChanges } from "./preview.js";
8
+ import { runWorkspaceTransaction } from "./transaction.js";
14
9
  function planUltramodernVertical(options) {
15
10
  const preflight = prepareAddUltramodernVertical(options);
16
- const tempRoot = node_fs.mkdtempSync(node_path.join(node_os.tmpdir(), 'um-vertical-plan-'));
17
- const copiedWorkspaceRoot = node_path.join(tempRoot, 'workspace');
18
- try {
19
- copyWorkspaceForPlan(options.workspaceRoot, copiedWorkspaceRoot);
20
- const plannedResult = addUltramodernVertical({
11
+ let jsonMutations = [];
12
+ const result = runWorkspaceTransaction(options.workspaceRoot, (stagingRoot)=>executeAddUltramodernVertical({
21
13
  ...options,
22
- workspaceRoot: copiedWorkspaceRoot,
14
+ workspaceRoot: stagingRoot,
23
15
  overlays: void 0
24
- });
25
- return createVerticalPlan(preflight, {
26
- ...plannedResult,
27
- workspaceRoot: options.workspaceRoot
28
- });
29
- } finally{
30
- node_fs.rmSync(tempRoot, {
31
- recursive: true,
32
- force: true
33
- });
34
- }
35
- }
36
- function copyWorkspaceForPlan(workspaceRoot, copiedWorkspaceRoot) {
37
- const skippedDirectories = new Set([
38
- '.git',
39
- '.nx',
40
- '.output',
41
- 'coverage',
42
- 'dist',
43
- 'node_modules'
44
- ]);
45
- node_fs.cpSync(workspaceRoot, copiedWorkspaceRoot, {
46
- recursive: true,
47
- filter: (sourcePath)=>!skippedDirectories.has(node_path.basename(sourcePath))
16
+ }, options.workspaceRoot), {
17
+ mode: 'preview',
18
+ inspectChanges: (changes)=>{
19
+ jsonMutations = describeJsonChanges(changes);
20
+ }
48
21
  });
22
+ return createVerticalPlan(preflight, result, jsonMutations);
49
23
  }
50
- function createVerticalPlan(preflight, result) {
24
+ function createVerticalPlan(preflight, result, jsonMutations) {
51
25
  const { scope, vertical, targetShell, targetVerticals } = preflight;
52
26
  const manifestUrl = `http://localhost:${vertical.port}/mf-manifest.json`;
53
27
  return {
@@ -62,11 +36,11 @@ function createVerticalPlan(preflight, result) {
62
36
  ...vertical.api ? {
63
37
  apiPrefix: resolveApiPrefix(vertical)
64
38
  } : {},
65
- jsonMutations: createDryRunJsonMutations(preflight, manifestUrl),
39
+ jsonMutations,
66
40
  shellDependencyChanges: createShellDependencyChanges(scope, vertical, targetShell),
67
41
  generatedContractChanges: [
68
42
  {
69
- path: ULTRAMODERN_CONFIG_PATH,
43
+ path: 'topology/reference-topology.json',
70
44
  addedAppIds: [
71
45
  vertical.id
72
46
  ],
@@ -75,114 +49,6 @@ function createVerticalPlan(preflight, result) {
75
49
  ]
76
50
  };
77
51
  }
78
- function createDryRunJsonMutations(preflight, manifestUrl) {
79
- const { scope, vertical, targetShell, additionalShells } = preflight;
80
- const additionalShellIndex = additionalShells.findIndex((shell)=>shell.id === targetShell.id);
81
- const apiMutation = appHasApi(vertical) ? [
82
- {
83
- path: DEVELOPMENT_OVERLAY_PATH,
84
- pointer: `/apis/${vertical.id}`,
85
- description: `Add local API URL for ${vertical.id}`,
86
- value: `http://localhost:${vertical.port}${'rpc' === resolveApiProtocol(vertical) ? rpcPath(vertical) : resolveApiPrefix(vertical)}`
87
- },
88
- {
89
- path: DEVELOPMENT_OVERLAY_PATH,
90
- pointer: `/serverExecution/${vertical.id}`,
91
- description: `Add local MicroVertical server execution metadata for ${vertical.id}`,
92
- value: createServerExecutionOverlay(scope, vertical)
93
- }
94
- ] : [];
95
- const shellMutations = targetShell.id === shellApp.id ? [
96
- {
97
- path: TOPOLOGY_PATH,
98
- pointer: '/shell/verticalRefs/-',
99
- description: `Add ${vertical.id} to the ${targetShell.id} vertical references`,
100
- value: vertical.id
101
- },
102
- {
103
- path: TOPOLOGY_PATH,
104
- pointer: '/shell/moduleFederation/remotes/-',
105
- description: `Register ${vertical.id} as a Module Federation remote`,
106
- value: {
107
- id: vertical.id,
108
- name: vertical.mfName,
109
- manifestUrl
110
- }
111
- }
112
- ] : [
113
- {
114
- path: ULTRAMODERN_CONFIG_PATH,
115
- pointer: `/shells/${additionalShellIndex}/verticalRefs/-`,
116
- description: `Add ${vertical.id} to the ${targetShell.id} vertical references`,
117
- value: vertical.id
118
- },
119
- {
120
- path: ULTRAMODERN_CONFIG_PATH,
121
- pointer: `/shells/${additionalShellIndex}/moduleFederation/remotes`,
122
- description: `Regenerate ${targetShell.id} Module Federation remotes for ${vertical.id}`
123
- }
124
- ];
125
- return [
126
- ...appEmitsBrowserUi(vertical) ? shellMutations : [],
127
- {
128
- path: TOPOLOGY_PATH,
129
- pointer: '/verticals/-',
130
- description: `Add topology entry for ${vertical.id}`,
131
- value: verticalTopologyEntry(scope, vertical)
132
- },
133
- {
134
- path: OWNERSHIP_PATH,
135
- pointer: '/owners/-',
136
- description: `Add ownership entry for ${vertical.id}`,
137
- value: ownershipEntry(scope, vertical)
138
- },
139
- {
140
- path: DEVELOPMENT_OVERLAY_PATH,
141
- pointer: `/ports/${vertical.id}`,
142
- description: `Reserve development port ${vertical.port}`,
143
- value: vertical.port
144
- },
145
- ...appEmitsBrowserUi(vertical) ? [
146
- {
147
- path: DEVELOPMENT_OVERLAY_PATH,
148
- pointer: `/manifests/${vertical.id}`,
149
- description: `Add local Module Federation manifest URL for ${vertical.id}`,
150
- value: manifestUrl
151
- }
152
- ] : [],
153
- ...apiMutation,
154
- {
155
- path: 'package.json',
156
- pointer: "/scripts",
157
- description: "Regenerate workspace scripts for the new vertical set"
158
- },
159
- {
160
- path: `${targetShell.directory}/package.json`,
161
- pointer: '/dependencies',
162
- description: `Wire shell dependencies for ${vertical.id}`
163
- },
164
- {
165
- path: 'tsconfig.json',
166
- pointer: '/references',
167
- description: `Add ${vertical.id} to the root TS-Go build graph`
168
- },
169
- {
170
- path: `${targetShell.directory}/tsconfig.json`,
171
- pointer: '/references',
172
- description: `Add ${vertical.id} to the shell TS-Go project references`
173
- },
174
- {
175
- path: `${targetShell.directory}/tsconfig.mf-types.json`,
176
- pointer: '/include',
177
- description: 'Keep shell Module Federation DTS compilation scoped'
178
- },
179
- {
180
- path: ULTRAMODERN_CONFIG_PATH,
181
- pointer: '/topology/apps',
182
- description: `Regenerate compact config with ${vertical.id}`
183
- }
184
- ];
185
- }
186
52
  function createShellDependencyChanges(scope, vertical, shell) {
187
53
  return [
188
54
  ...appEmitsBrowserUi(vertical) ? [
@@ -1,15 +1,13 @@
1
1
  import "node:module";
2
2
  import node_fs from "node:fs";
3
3
  import node_path from "node:path";
4
- import { normalizeCompactConfig } from "../../ultramodern-tooling/config.js";
5
- import { ULTRAMODERN_CONFIG_PATH, createRemoteManifestEnv, createVerticalDescriptor, shellApp } from "../descriptors.js";
4
+ import { normalizeWorkspaceInputs } from "../../ultramodern-tooling/config.js";
5
+ import { createRemoteManifestEnv, createVerticalDescriptor } from "../descriptors.js";
6
6
  import { readJsonFile } from "../fs-io.js";
7
7
  import { assertUniqueTailwindPrefixes, normalizePath, toPackageScope } from "../naming.js";
8
- import { resolveConfiguredAdditionalShells } from "../shells.js";
9
8
  import { isRecord } from "../types.js";
10
9
  import { DEVELOPMENT_OVERLAY_PATH, OWNERSHIP_PATH, TOPOLOGY_PATH } from "./constants.js";
11
- import { verticalsFromTopology } from "./topology.js";
12
- import { assertCanCreate, assertGlobalPortUniqueness, assertValidVerticalName, existingBridgeConfig, existingPackageSource, existingTailwindEnabled, nextAvailablePort } from "./workspace-state.js";
10
+ import { assertCanCreate, assertGlobalPortUniqueness, assertValidVerticalName, nextAvailablePort, workspaceOperationSettings } from "./workspace-state.js";
13
11
  class UnknownUltramodernShellError extends Error {
14
12
  constructor(sourcePath, requestedShellId, available){
15
13
  const issue = {
@@ -32,30 +30,26 @@ function prepareAddUltramodernVertical(options) {
32
30
  const topology = readRequiredJsonObject(topologyPath);
33
31
  const ownership = readRequiredJsonObject(ownershipPath);
34
32
  const overlay = readRequiredJsonObject(overlayPath);
35
- const config = readRequiredWorkspaceConfig(options.workspaceRoot);
36
33
  assertOptionalJsonObject(topology.shell, 'topology.shell', topologyPath);
37
34
  assertOptionalJsonArray(topology.verticals, 'topology.verticals', topologyPath);
38
35
  assertOptionalJsonArray(ownership.owners, 'ownership.owners', ownershipPath);
39
36
  assertOptionalJsonObject(overlay.ports, 'overlay.ports', overlayPath);
40
37
  assertOptionalJsonObject(overlay.manifests, 'overlay.manifests', overlayPath);
41
38
  assertOptionalJsonObject(overlay.apis, 'overlay.apis', overlayPath);
39
+ const workspace = normalizeWorkspaceInputs(options.workspaceRoot, {
40
+ topology,
41
+ overlay
42
+ });
43
+ const { packageSource, enableTailwind, bridge } = workspaceOperationSettings(options, workspace.config);
42
44
  overlay.ports ??= {};
43
45
  const scope = toPackageScope(String(rootPackage.name ?? node_path.basename(options.workspaceRoot)));
44
- const packageSource = existingPackageSource(options.workspaceRoot, options.modernVersion, options.packageSource);
45
- const enableTailwind = options.enableTailwind ?? existingTailwindEnabled(options.workspaceRoot);
46
- const bridge = existingBridgeConfig(options.workspaceRoot);
47
- const existingVerticals = verticalsFromTopology(topology, overlay.ports);
48
- const additionalShells = resolveConfiguredAdditionalShells(config);
49
- const primaryShell = createPrimaryShellDescriptor(topology, config);
50
- const primaryShellPort = 'number' == typeof overlay.ports[primaryShell.id] ? overlay.ports[primaryShell.id] : primaryShell.port;
51
- const resolvedPrimaryShell = {
52
- ...primaryShell,
53
- port: primaryShellPort
54
- };
55
- const targetShell = resolveTargetShell(options.shell, resolvedPrimaryShell, additionalShells, node_path.join(options.workspaceRoot, ULTRAMODERN_CONFIG_PATH));
46
+ const existingVerticals = workspace.verticals;
47
+ const additionalShells = workspace.additionalShells;
48
+ const resolvedPrimaryShell = workspace.primaryShell;
49
+ const targetShell = resolveTargetShell(options.shell, resolvedPrimaryShell, additionalShells, topologyPath);
56
50
  const portsWithPrimary = {
57
51
  ...overlay.ports,
58
- [primaryShell.id]: primaryShellPort
52
+ [resolvedPrimaryShell.id]: resolvedPrimaryShell.port
59
53
  };
60
54
  assertGlobalPortUniqueness(portsWithPrimary, additionalShells);
61
55
  const port = nextAvailablePort(portsWithPrimary, additionalShells);
@@ -88,7 +82,7 @@ function prepareAddUltramodernVertical(options) {
88
82
  ownershipPath,
89
83
  overlayPath,
90
84
  rootPackage,
91
- config,
85
+ config: workspace.config,
92
86
  topology,
93
87
  ownership,
94
88
  overlay,
@@ -109,32 +103,6 @@ function readRequiredJsonObject(filePath) {
109
103
  if (!isRecord(value)) throw new Error(`UltraModern workspace file must contain a JSON object: ${filePath}`);
110
104
  return value;
111
105
  }
112
- function readRequiredWorkspaceConfig(workspaceRoot) {
113
- const compactPath = node_path.join(workspaceRoot, ULTRAMODERN_CONFIG_PATH);
114
- const config = readRequiredJsonObject(compactPath);
115
- normalizeCompactConfig(workspaceRoot, compactPath, config);
116
- return config;
117
- }
118
- function createPrimaryShellDescriptor(topology, config) {
119
- const compactShell = config.topology?.apps?.find((app)=>app?.id === shellApp.id);
120
- const verticalRefs = Array.isArray(topology.shell?.verticalRefs) ? topology.shell.verticalRefs.filter((id)=>'string' == typeof id) : Array.isArray(compactShell?.moduleFederation?.verticalRefs) ? compactShell.moduleFederation.verticalRefs.filter((id)=>'string' == typeof id) : [];
121
- return {
122
- ...shellApp,
123
- verticalRefs,
124
- ...'string' == typeof compactShell?.path ? {
125
- directory: compactShell.path
126
- } : {},
127
- ...'number' == typeof compactShell?.port ? {
128
- port: compactShell.port
129
- } : {},
130
- ...'string' == typeof compactShell?.portEnv ? {
131
- portEnv: compactShell.portEnv
132
- } : {},
133
- ...'string' == typeof compactShell?.moduleFederation?.name ? {
134
- mfName: compactShell.moduleFederation.name
135
- } : {}
136
- };
137
- }
138
106
  function resolveTargetShell(requestedShellId, primaryShell, additionalShells, sourcePath) {
139
107
  if (void 0 === requestedShellId || requestedShellId === primaryShell.id) return primaryShell;
140
108
  const targetShell = additionalShells.find((shell)=>shell.id === requestedShellId);
@@ -196,4 +164,4 @@ function assertNonEmptyString(value, label) {
196
164
  function assertSafeOutputPath(relativePath, appId) {
197
165
  if (node_path.isAbsolute(relativePath) || relativePath.split(/[\\/]+/u).includes('..')) throw new Error(`Unsafe output path for ${appId}: ${relativePath}`);
198
166
  }
199
- export { UnknownUltramodernShellError, assertNonEmptyString, createPrimaryShellDescriptor, prepareAddUltramodernVertical };
167
+ export { UnknownUltramodernShellError, assertNonEmptyString, prepareAddUltramodernVertical, readRequiredJsonObject };
@@ -0,0 +1,41 @@
1
+ import "node:module";
2
+ import { isDeepStrictEqual } from "node:util";
3
+ function describeJsonChanges(changes) {
4
+ const mutations = [];
5
+ for (const change of changes){
6
+ if (!change.relativePath.endsWith('.json') || change.before?.symlink || change.after?.symlink) continue;
7
+ let before;
8
+ let after;
9
+ try {
10
+ before = change.before && JSON.parse(change.before.content.toString());
11
+ after = change.after && JSON.parse(change.after.content.toString());
12
+ } catch {
13
+ continue;
14
+ }
15
+ const visit = (previous, next, pointer)=>{
16
+ if (isDeepStrictEqual(previous, next)) return;
17
+ if (Array.isArray(previous) && Array.isArray(next) && previous.every((value, index)=>isDeepStrictEqual(value, next[index])) && next.length >= previous.length) {
18
+ for (const value of next.slice(previous.length))visit(void 0, value, `${pointer}/-`);
19
+ return;
20
+ }
21
+ if (previous && next && 'object' == typeof previous && 'object' == typeof next && !Array.isArray(previous) && !Array.isArray(next)) {
22
+ for (const key of new Set([
23
+ ...Object.keys(previous),
24
+ ...Object.keys(next)
25
+ ]))visit(previous[key], next[key], `${pointer}/${key.replaceAll('~', '~0').replaceAll('/', '~1')}`);
26
+ return;
27
+ }
28
+ mutations.push({
29
+ path: change.relativePath,
30
+ pointer,
31
+ description: `${void 0 === next ? 'Remove' : void 0 === previous ? 'Add' : 'Update'} ${pointer || 'document'}`,
32
+ ...void 0 === next ? {} : {
33
+ value: next
34
+ }
35
+ });
36
+ };
37
+ visit(before, after, '');
38
+ }
39
+ return mutations;
40
+ }
41
+ export { describeJsonChanges };
@@ -1,22 +1,31 @@
1
1
  import "node:module";
2
+ import node_fs from "node:fs";
2
3
  import node_path from "node:path";
3
4
  import { createShellApiClient } from "../api.js";
4
5
  import { createAppEnvDts, createAppRuntimeConfig, createShellFrameComponent } from "../app-files.js";
5
6
  import { createShellPage, createShellRemoteComponents, createShellWorkerRemoteComponents } from "../demo-components.js";
6
7
  import { appEmitsBrowserUi, appI18nNamespace, resolveRemoteRefs, shellApp } from "../descriptors.js";
7
- import { readJsonFile, writeFileReplacing, writeJsonFile } from "../fs-io.js";
8
+ import { readJsonFile, writeJsonFile } from "../fs-io.js";
8
9
  import { createAppPublicLocaleMessages } from "../locales.js";
9
10
  import { createAppModernConfig, createShellModuleFederationConfig } from "../module-federation.js";
10
11
  import { createAppMfTypesTsConfig, createAppPackage, createAppTsConfig, createRootPackageJson } from "../package-json.js";
11
12
  import { createPublicWebAppArtifacts, rewriteWorkspaceAssetsForApp } from "../public-surface.js";
12
- function updateRootWorkspaceScripts(workspaceRoot, scope, packageSource, remotes, bridge, additionalShells = []) {
13
+ import { preserveConsumerWorkspaceArtifacts } from "../workspace-artifact-ownership.js";
14
+ function updateRootWorkspaceScripts(workspaceRoot, scope, packageSource, remotes, bridge, additionalShells = [], previousRemotes = remotes, _primaryShell = shellApp, previousAdditionalShells = additionalShells) {
13
15
  const packagePath = node_path.join(workspaceRoot, 'package.json');
14
16
  const rootPackage = readJsonFile(packagePath);
15
17
  const generatedRootPackage = createRootPackageJson(scope, packageSource, remotes, bridge, additionalShells);
16
- rootPackage.scripts = generatedRootPackage.scripts;
18
+ const previousRootPackage = createRootPackageJson(scope, packageSource, previousRemotes, bridge, previousAdditionalShells);
19
+ const existingScripts = rootPackage.scripts ?? {};
20
+ rootPackage.scripts = {
21
+ ...generatedRootPackage.scripts,
22
+ ...existingScripts
23
+ };
24
+ if (existingScripts.dev === previousRootPackage.scripts.dev) rootPackage.scripts.dev = generatedRootPackage.scripts.dev;
25
+ for (const [name, command] of Object.entries(generatedRootPackage.scripts))if (void 0 === existingScripts[name] || existingScripts[name] === previousRootPackage.scripts[name]) rootPackage.scripts[name] = command;
17
26
  writeJsonFile(packagePath, rootPackage);
18
27
  }
19
- function rewriteShellAppFiles(workspaceRoot, scope, packageSource, enableTailwind, remotes, bridge, shell = shellApp, devPorts) {
28
+ function shellAppArtifacts(scope, packageSource, enableTailwind, remotes, bridge, shell, devPorts) {
20
29
  const shellHost = {
21
30
  ...shell,
22
31
  verticalRefs: shell.verticalRefs ?? remotes.filter(appEmitsBrowserUi).map((remote)=>remote.id)
@@ -24,26 +33,79 @@ function rewriteShellAppFiles(workspaceRoot, scope, packageSource, enableTailwin
24
33
  const shellRemotes = resolveRemoteRefs(shellHost, remotes);
25
34
  const uiRemotes = shellRemotes.filter(appEmitsBrowserUi);
26
35
  const publicWeb = createPublicWebAppArtifacts(shellHost);
27
- writeJsonFile(node_path.join(workspaceRoot, `${shellHost.directory}/package.json`), createAppPackage(scope, shellHost, packageSource, enableTailwind, remotes, bridge));
28
- writeJsonFile(node_path.join(workspaceRoot, `${shellHost.directory}/tsconfig.json`), createAppTsConfig(shellHost, shellRemotes));
29
- writeJsonFile(node_path.join(workspaceRoot, `${shellHost.directory}/tsconfig.mf-types.json`), createAppMfTypesTsConfig(shellHost));
30
- writeFileReplacing(workspaceRoot, `${shellHost.directory}/src/modern-app-env.d.ts`, createAppEnvDts(shellHost, shellRemotes, scope));
31
- writeFileReplacing(workspaceRoot, `${shellHost.directory}/modern.config.ts`, createAppModernConfig(scope, shellHost, shellRemotes, enableTailwind, devPorts));
32
- writeFileReplacing(workspaceRoot, publicWeb.jsonLdHelperFile.path, publicWeb.jsonLdHelperFile.content);
33
- writeFileReplacing(workspaceRoot, publicWeb.routeMetadataFile.path, publicWeb.routeMetadataFile.content);
34
- writeFileReplacing(workspaceRoot, publicWeb.routeHeadFile.path, publicWeb.routeHeadFile.content);
35
- for (const generatedFile of publicWeb.routeMetaFiles)writeFileReplacing(workspaceRoot, generatedFile.path, generatedFile.content);
36
- rewriteWorkspaceAssetsForApp(workspaceRoot, shellHost);
37
- writeFileReplacing(workspaceRoot, `${shellHost.directory}/src/modern.runtime.ts`, createAppRuntimeConfig(shellHost, scope, shellRemotes));
38
- writeJsonFile(node_path.join(workspaceRoot, `${shellHost.directory}/locales/en/translation.json`), createAppPublicLocaleMessages(shellHost, 'en', shellRemotes));
39
- writeJsonFile(node_path.join(workspaceRoot, `${shellHost.directory}/locales/en/${appI18nNamespace(shellHost)}.json`), createAppPublicLocaleMessages(shellHost, 'en', shellRemotes));
40
- writeJsonFile(node_path.join(workspaceRoot, `${shellHost.directory}/locales/cs/translation.json`), createAppPublicLocaleMessages(shellHost, 'cs', shellRemotes));
41
- writeJsonFile(node_path.join(workspaceRoot, `${shellHost.directory}/locales/cs/${appI18nNamespace(shellHost)}.json`), createAppPublicLocaleMessages(shellHost, 'cs', shellRemotes));
42
- writeFileReplacing(workspaceRoot, `${shellHost.directory}/module-federation.config.ts`, createShellModuleFederationConfig(scope, shellHost, shellRemotes));
43
- writeFileReplacing(workspaceRoot, `${shellHost.directory}/src/routes/[lang]/page.tsx`, createShellPage(shellHost, uiRemotes));
44
- writeFileReplacing(workspaceRoot, `${shellHost.directory}/src/routes/vertical-components.tsx`, createShellRemoteComponents(shellHost, uiRemotes));
45
- writeFileReplacing(workspaceRoot, `${shellHost.directory}/src/routes/vertical-components.worker.tsx`, createShellWorkerRemoteComponents(shellHost, uiRemotes));
46
- writeFileReplacing(workspaceRoot, `${shellHost.directory}/src/routes/shell-frame.tsx`, createShellFrameComponent(shellHost));
47
- writeFileReplacing(workspaceRoot, `${shellHost.directory}/src/api/vertical-clients.ts`, createShellApiClient(scope, remotes));
36
+ const json = (value)=>`${JSON.stringify(value, null, 2)}\n`;
37
+ const files = {
38
+ [`${shellHost.directory}/tsconfig.json`]: json(createAppTsConfig(shellHost, shellRemotes)),
39
+ [`${shellHost.directory}/tsconfig.mf-types.json`]: json(createAppMfTypesTsConfig(shellHost)),
40
+ [`${shellHost.directory}/src/modern-app-env.d.ts`]: createAppEnvDts(shellHost, shellRemotes, scope),
41
+ [`${shellHost.directory}/modern.config.ts`]: createAppModernConfig(scope, shellHost, shellRemotes, enableTailwind, devPorts),
42
+ [publicWeb.jsonLdHelperFile.path]: publicWeb.jsonLdHelperFile.content,
43
+ [publicWeb.routeMetadataFile.path]: publicWeb.routeMetadataFile.content,
44
+ [publicWeb.routeHeadFile.path]: publicWeb.routeHeadFile.content,
45
+ ...Object.fromEntries(publicWeb.routeMetaFiles.map((file)=>[
46
+ file.path,
47
+ file.content
48
+ ])),
49
+ [`${shellHost.directory}/src/modern.runtime.ts`]: createAppRuntimeConfig(shellHost, scope, shellRemotes),
50
+ ...Object.fromEntries([
51
+ 'en',
52
+ 'cs'
53
+ ].flatMap((language)=>[
54
+ 'translation',
55
+ appI18nNamespace(shellHost)
56
+ ].map((namespace)=>[
57
+ `${shellHost.directory}/locales/${language}/${namespace}.json`,
58
+ json(createAppPublicLocaleMessages(shellHost, language, shellRemotes))
59
+ ]))),
60
+ [`${shellHost.directory}/module-federation.config.ts`]: createShellModuleFederationConfig(scope, shellHost, shellRemotes),
61
+ [`${shellHost.directory}/src/routes/[lang]/page.tsx`]: createShellPage(shellHost, uiRemotes),
62
+ [`${shellHost.directory}/src/routes/vertical-components.tsx`]: createShellRemoteComponents(shellHost, uiRemotes),
63
+ [`${shellHost.directory}/src/routes/vertical-components.worker.tsx`]: createShellWorkerRemoteComponents(shellHost, uiRemotes),
64
+ [`${shellHost.directory}/src/routes/shell-frame.tsx`]: createShellFrameComponent(shellHost),
65
+ [`${shellHost.directory}/src/api/vertical-clients.ts`]: createShellApiClient(scope, remotes)
66
+ };
67
+ return {
68
+ shellHost,
69
+ packageJson: createAppPackage(scope, shellHost, packageSource, enableTailwind, remotes, bridge),
70
+ artifacts: Object.entries(files).map(([relativePath, content])=>({
71
+ relativePath,
72
+ content
73
+ }))
74
+ };
75
+ }
76
+ function rewriteShellAppFiles(workspaceRoot, scope, packageSource, enableTailwind, remotes, bridge, shell = shellApp, devPorts, previous = {
77
+ shell,
78
+ remotes,
79
+ devPorts
80
+ }) {
81
+ const before = shellAppArtifacts(scope, packageSource, previous.enableTailwind ?? enableTailwind, previous.remotes, bridge, previous.shell, previous.devPorts);
82
+ const next = shellAppArtifacts(scope, packageSource, enableTailwind, remotes, bridge, shell, devPorts);
83
+ const { io } = preserveConsumerWorkspaceArtifacts(workspaceRoot, before.artifacts);
84
+ for (const artifact of next.artifacts)io.write(node_path.join(workspaceRoot, artifact.relativePath), artifact.content);
85
+ const packagePath = node_path.join(workspaceRoot, shell.directory, 'package.json');
86
+ const existing = node_fs.existsSync(packagePath) ? readJsonFile(packagePath) : {};
87
+ const packageJson = {
88
+ ...next.packageJson,
89
+ ...existing,
90
+ 'zephyr:dependencies': {
91
+ ...next.packageJson['zephyr:dependencies'],
92
+ ...Object.fromEntries(Object.entries(existing['zephyr:dependencies'] ?? {}).filter(([key, value])=>before.packageJson['zephyr:dependencies']?.[key] !== value))
93
+ },
94
+ dependencies: {
95
+ ...next.packageJson.dependencies,
96
+ ...existing.dependencies
97
+ },
98
+ devDependencies: {
99
+ ...next.packageJson.devDependencies,
100
+ ...existing.devDependencies
101
+ },
102
+ scripts: {
103
+ ...next.packageJson.scripts,
104
+ ...existing.scripts
105
+ }
106
+ };
107
+ for (const [name, command] of Object.entries(next.packageJson.scripts))if (existing.scripts?.[name] === void 0 || existing.scripts[name] === before.packageJson.scripts?.[name]) packageJson.scripts[name] = command;
108
+ writeJsonFile(packagePath, packageJson);
109
+ rewriteWorkspaceAssetsForApp(workspaceRoot, next.shellHost);
48
110
  }
49
111
  export { rewriteShellAppFiles, updateRootWorkspaceScripts };
@@ -82,6 +82,9 @@ function verticalsFromTopology(topology, ports) {
82
82
  portEnv: `VERTICAL_${toEnvSegment(domain)}_PORT`,
83
83
  port: 'number' == typeof ports[vertical.id] ? ports[vertical.id] : 0,
84
84
  mfName: vertical.moduleFederation?.name ?? `vertical${toPascalCase(domain)}`,
85
+ ...vertical.deliveryUnit ? {
86
+ deliveryUnit: vertical.deliveryUnit
87
+ } : {},
85
88
  ...void 0 === surfaceProfile ? {} : {
86
89
  surfaceProfile
87
90
  },
@@ -91,7 +94,7 @@ function verticalsFromTopology(topology, ports) {
91
94
  ...Array.isArray(vertical.moduleFederation?.exposes) ? {
92
95
  exposes: Object.fromEntries(vertical.moduleFederation.exposes.map((expose)=>[
93
96
  expose,
94
- './Route' === expose ? './src/federation-entry.tsx' : './Widget' === expose ? `./src/components/${domain}-widget.tsx` : ''
97
+ vertical.moduleFederation?.exposePaths?.[expose] ?? ('./Route' === expose ? './src/federation-entry.tsx' : './Widget' === expose ? `./src/components/${domain}-widget.tsx` : '')
95
98
  ]))
96
99
  } : {},
97
100
  ...Array.isArray(vertical.moduleFederation?.verticalRefs) ? {