@bleedingdev/modern-js-create 3.5.0-ultramodern.30 → 3.5.0-ultramodern.31

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 (421) hide show
  1. package/dist/cjs/cli/flags.cjs +326 -0
  2. package/dist/cjs/cli/help.cjs +106 -0
  3. package/dist/cjs/cli/package-source.cjs +186 -0
  4. package/dist/cjs/cli/project-setup.cjs +138 -0
  5. package/dist/cjs/cli/prompts.cjs +118 -0
  6. package/dist/cjs/index.cjs +24 -581
  7. package/dist/cjs/ultramodern-tooling/commands/cloudflare-output-verify.cjs +132 -0
  8. package/dist/cjs/ultramodern-tooling/commands/context.cjs +131 -0
  9. package/dist/cjs/ultramodern-tooling/commands/mf-types.cjs +55 -0
  10. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.cjs +158 -0
  11. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.cjs +49 -0
  12. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.cjs +87 -0
  13. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.cjs +58 -0
  14. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.cjs +62 -0
  15. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.cjs +60 -0
  16. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.cjs +132 -0
  17. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.cjs +67 -0
  18. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.cjs +93 -0
  19. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.cjs +60 -0
  20. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.cjs +67 -0
  21. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.cjs +67 -0
  22. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/help.cjs +54 -0
  23. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/install.cjs +52 -0
  24. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/io.cjs +133 -0
  25. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.cjs +219 -0
  26. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-source.cjs +76 -0
  27. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.cjs +131 -0
  28. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.cjs +161 -0
  29. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.cjs +88 -0
  30. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect.cjs +149 -0
  31. package/dist/cjs/ultramodern-tooling/commands/options.cjs +59 -0
  32. package/dist/cjs/ultramodern-tooling/commands/routes-generate.cjs +122 -0
  33. package/dist/cjs/ultramodern-tooling/commands/skills.cjs +49 -0
  34. package/dist/cjs/ultramodern-tooling/commands/sync-delivery-unit.cjs +40 -0
  35. package/dist/cjs/ultramodern-tooling/commands/validate.cjs +49 -0
  36. package/dist/cjs/ultramodern-tooling/commands.cjs +17 -1165
  37. package/dist/cjs/ultramodern-tooling/config/constants.cjs +48 -0
  38. package/dist/cjs/ultramodern-tooling/config/index.cjs +104 -0
  39. package/dist/cjs/ultramodern-tooling/config/json.cjs +61 -0
  40. package/dist/cjs/ultramodern-tooling/config/load.cjs +62 -0
  41. package/dist/cjs/ultramodern-tooling/config/metadata.cjs +92 -0
  42. package/dist/cjs/ultramodern-tooling/config/normalize.cjs +160 -0
  43. package/dist/cjs/ultramodern-tooling/config/synthesize.cjs +157 -0
  44. package/dist/cjs/ultramodern-tooling/config/types.cjs +18 -0
  45. package/dist/cjs/ultramodern-tooling/config.cjs +23 -274
  46. package/dist/cjs/ultramodern-workspace/add-vertical/constants.cjs +52 -0
  47. package/dist/cjs/ultramodern-workspace/add-vertical/execute.cjs +156 -0
  48. package/dist/cjs/ultramodern-workspace/add-vertical/plan.cjs +246 -0
  49. package/dist/cjs/ultramodern-workspace/add-vertical/preflight.cjs +198 -0
  50. package/dist/cjs/ultramodern-workspace/add-vertical/shell-files.cjs +116 -0
  51. package/dist/cjs/ultramodern-workspace/add-vertical/topology.cjs +133 -0
  52. package/dist/cjs/ultramodern-workspace/add-vertical/workspace-state.cjs +107 -0
  53. package/dist/cjs/ultramodern-workspace/add-vertical.cjs +22 -596
  54. package/dist/cjs/ultramodern-workspace/api/checkout-cart.cjs +145 -0
  55. package/dist/cjs/ultramodern-workspace/api/client.cjs +218 -0
  56. package/dist/cjs/ultramodern-workspace/api/contracts.cjs +222 -0
  57. package/dist/cjs/ultramodern-workspace/api/names.cjs +98 -0
  58. package/dist/cjs/ultramodern-workspace/api/service.cjs +220 -0
  59. package/dist/cjs/ultramodern-workspace/api/shared.cjs +252 -0
  60. package/dist/cjs/ultramodern-workspace/api.cjs +27 -1046
  61. package/dist/cjs/ultramodern-workspace/app-files.cjs +3 -18
  62. package/dist/cjs/ultramodern-workspace/backend-federation.cjs +38 -24
  63. package/dist/cjs/ultramodern-workspace/bridge-config/cli.cjs +71 -0
  64. package/dist/cjs/ultramodern-workspace/bridge-config/defaults.cjs +43 -0
  65. package/dist/cjs/ultramodern-workspace/bridge-config/gates.cjs +93 -0
  66. package/dist/cjs/ultramodern-workspace/bridge-config/index.cjs +60 -0
  67. package/dist/cjs/ultramodern-workspace/bridge-config/normalize.cjs +68 -0
  68. package/dist/cjs/ultramodern-workspace/bridge-config/schema.cjs +78 -0
  69. package/dist/cjs/ultramodern-workspace/bridge-config/shared.cjs +110 -0
  70. package/dist/cjs/ultramodern-workspace/bridge-config/validation.cjs +68 -0
  71. package/dist/cjs/ultramodern-workspace/bridge-config/workspace-packages.cjs +108 -0
  72. package/dist/cjs/ultramodern-workspace/bridge-config.cjs +32 -297
  73. package/dist/cjs/ultramodern-workspace/delivery-unit-sync.cjs +22 -20
  74. package/dist/cjs/ultramodern-workspace/delivery-unit.cjs +7 -20
  75. package/dist/cjs/ultramodern-workspace/demo-components.cjs +47 -189
  76. package/dist/cjs/ultramodern-workspace/descriptors.cjs +12 -1
  77. package/dist/cjs/ultramodern-workspace/effect-diagnostics.cjs +114 -0
  78. package/dist/cjs/ultramodern-workspace/fs-io.cjs +24 -2
  79. package/dist/cjs/ultramodern-workspace/index.cjs +4 -0
  80. package/dist/cjs/ultramodern-workspace/mf-validation/constants.cjs +69 -0
  81. package/dist/cjs/ultramodern-workspace/mf-validation/discovery.cjs +77 -0
  82. package/dist/cjs/ultramodern-workspace/mf-validation/inspect.cjs +92 -0
  83. package/dist/cjs/ultramodern-workspace/mf-validation/object-literal.cjs +203 -0
  84. package/dist/cjs/ultramodern-workspace/mf-validation/path-utils.cjs +171 -0
  85. package/dist/cjs/ultramodern-workspace/mf-validation/syntax.cjs +228 -0
  86. package/dist/cjs/ultramodern-workspace/mf-validation/types.cjs +18 -0
  87. package/dist/cjs/ultramodern-workspace/mf-validation/validate.cjs +112 -0
  88. package/dist/cjs/ultramodern-workspace/mf-validation.cjs +6 -529
  89. package/dist/cjs/ultramodern-workspace/module-federation/config.cjs +251 -0
  90. package/dist/cjs/ultramodern-workspace/module-federation/index.cjs +73 -0
  91. package/dist/cjs/ultramodern-workspace/module-federation/reexport-module.cjs +73 -0
  92. package/dist/cjs/ultramodern-workspace/module-federation/remote-refs.cjs +105 -0
  93. package/dist/cjs/ultramodern-workspace/module-federation/shared-config.cjs +53 -0
  94. package/dist/cjs/ultramodern-workspace/module-federation.cjs +14 -584
  95. package/dist/cjs/ultramodern-workspace/package-json.cjs +13 -229
  96. package/dist/cjs/ultramodern-workspace/routes.cjs +8 -142
  97. package/dist/cjs/ultramodern-workspace/shared-patches.cjs +44 -0
  98. package/dist/cjs/ultramodern-workspace/tsconfigs.cjs +199 -0
  99. package/dist/cjs/ultramodern-workspace/workspace-script-plan.cjs +2 -2
  100. package/dist/cjs/ultramodern-workspace/write-app.cjs +128 -0
  101. package/dist/cjs/ultramodern-workspace/write-workspace.cjs +4 -61
  102. package/dist/cjs/ultramodern-workspace/zerops.cjs +13 -10
  103. package/dist/esm/cli/flags.js +228 -0
  104. package/dist/esm/cli/help.js +65 -0
  105. package/dist/esm/cli/package-source.js +119 -0
  106. package/dist/esm/cli/project-setup.js +81 -0
  107. package/dist/esm/cli/prompts.js +63 -0
  108. package/dist/esm/index.js +6 -559
  109. package/dist/esm/ultramodern-tooling/commands/cloudflare-output-verify.js +84 -0
  110. package/dist/esm/ultramodern-tooling/commands/context.js +66 -0
  111. package/dist/esm/ultramodern-tooling/commands/mf-types.js +17 -0
  112. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +106 -0
  113. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +11 -0
  114. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.js +38 -0
  115. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.js +10 -0
  116. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +14 -0
  117. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +12 -0
  118. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.js +83 -0
  119. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.js +16 -0
  120. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +44 -0
  121. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.js +12 -0
  122. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.js +7 -0
  123. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.js +15 -0
  124. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/help.js +16 -0
  125. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/install.js +14 -0
  126. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/io.js +69 -0
  127. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +175 -0
  128. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-source.js +38 -0
  129. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +76 -0
  130. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +105 -0
  131. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +16 -0
  132. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect.js +100 -0
  133. package/dist/esm/ultramodern-tooling/commands/options.js +18 -0
  134. package/dist/esm/ultramodern-tooling/commands/routes-generate.js +74 -0
  135. package/dist/esm/ultramodern-tooling/commands/skills.js +11 -0
  136. package/dist/esm/ultramodern-tooling/commands/sync-delivery-unit.js +1 -0
  137. package/dist/esm/ultramodern-tooling/commands/validate.js +11 -0
  138. package/dist/esm/ultramodern-tooling/commands.js +9 -1152
  139. package/dist/esm/ultramodern-tooling/config/constants.js +4 -0
  140. package/dist/esm/ultramodern-tooling/config/index.js +7 -0
  141. package/dist/esm/ultramodern-tooling/config/json.js +10 -0
  142. package/dist/esm/ultramodern-tooling/config/load.js +13 -0
  143. package/dist/esm/ultramodern-tooling/config/metadata.js +37 -0
  144. package/dist/esm/ultramodern-tooling/config/normalize.js +106 -0
  145. package/dist/esm/ultramodern-tooling/config/synthesize.js +108 -0
  146. package/dist/esm/ultramodern-tooling/config/types.js +0 -0
  147. package/dist/esm/ultramodern-tooling/config.js +1 -255
  148. package/dist/esm/ultramodern-workspace/add-vertical/constants.js +5 -0
  149. package/dist/esm/ultramodern-workspace/add-vertical/execute.js +108 -0
  150. package/dist/esm/ultramodern-workspace/add-vertical/plan.js +184 -0
  151. package/dist/esm/ultramodern-workspace/add-vertical/preflight.js +122 -0
  152. package/dist/esm/ultramodern-workspace/add-vertical/shell-files.js +59 -0
  153. package/dist/esm/ultramodern-workspace/add-vertical/topology.js +89 -0
  154. package/dist/esm/ultramodern-workspace/add-vertical/workspace-state.js +43 -0
  155. package/dist/esm/ultramodern-workspace/add-vertical.js +6 -569
  156. package/dist/esm/ultramodern-workspace/api/checkout-cart.js +86 -0
  157. package/dist/esm/ultramodern-workspace/api/client.js +177 -0
  158. package/dist/esm/ultramodern-workspace/api/contracts.js +172 -0
  159. package/dist/esm/ultramodern-workspace/api/names.js +33 -0
  160. package/dist/esm/ultramodern-workspace/api/service.js +179 -0
  161. package/dist/esm/ultramodern-workspace/api/shared.js +208 -0
  162. package/dist/esm/ultramodern-workspace/api.js +5 -1025
  163. package/dist/esm/ultramodern-workspace/app-files.js +3 -18
  164. package/dist/esm/ultramodern-workspace/backend-federation.js +27 -13
  165. package/dist/esm/ultramodern-workspace/bridge-config/cli.js +30 -0
  166. package/dist/esm/ultramodern-workspace/bridge-config/defaults.js +5 -0
  167. package/dist/esm/ultramodern-workspace/bridge-config/gates.js +52 -0
  168. package/dist/esm/ultramodern-workspace/bridge-config/index.js +3 -0
  169. package/dist/esm/ultramodern-workspace/bridge-config/normalize.js +30 -0
  170. package/dist/esm/ultramodern-workspace/bridge-config/schema.js +31 -0
  171. package/dist/esm/ultramodern-workspace/bridge-config/shared.js +51 -0
  172. package/dist/esm/ultramodern-workspace/bridge-config/validation.js +27 -0
  173. package/dist/esm/ultramodern-workspace/bridge-config/workspace-packages.js +67 -0
  174. package/dist/esm/ultramodern-workspace/bridge-config.js +1 -270
  175. package/dist/esm/ultramodern-workspace/delivery-unit-sync.js +23 -21
  176. package/dist/esm/ultramodern-workspace/delivery-unit.js +6 -16
  177. package/dist/esm/ultramodern-workspace/demo-components.js +47 -189
  178. package/dist/esm/ultramodern-workspace/descriptors.js +12 -1
  179. package/dist/esm/ultramodern-workspace/effect-diagnostics.js +76 -0
  180. package/dist/esm/ultramodern-workspace/fs-io.js +24 -2
  181. package/dist/esm/ultramodern-workspace/index.js +1 -0
  182. package/dist/esm/ultramodern-workspace/mf-validation/constants.js +19 -0
  183. package/dist/esm/ultramodern-workspace/mf-validation/discovery.js +28 -0
  184. package/dist/esm/ultramodern-workspace/mf-validation/inspect.js +45 -0
  185. package/dist/esm/ultramodern-workspace/mf-validation/object-literal.js +144 -0
  186. package/dist/esm/ultramodern-workspace/mf-validation/path-utils.js +89 -0
  187. package/dist/esm/ultramodern-workspace/mf-validation/syntax.js +154 -0
  188. package/dist/esm/ultramodern-workspace/mf-validation/types.js +0 -0
  189. package/dist/esm/ultramodern-workspace/mf-validation/validate.js +57 -0
  190. package/dist/esm/ultramodern-workspace/mf-validation.js +3 -516
  191. package/dist/esm/ultramodern-workspace/module-federation/config.js +204 -0
  192. package/dist/esm/ultramodern-workspace/module-federation/index.js +4 -0
  193. package/dist/esm/ultramodern-workspace/module-federation/reexport-module.js +29 -0
  194. package/dist/esm/ultramodern-workspace/module-federation/remote-refs.js +64 -0
  195. package/dist/esm/ultramodern-workspace/module-federation/shared-config.js +12 -0
  196. package/dist/esm/ultramodern-workspace/module-federation.js +2 -576
  197. package/dist/esm/ultramodern-workspace/package-json.js +7 -210
  198. package/dist/esm/ultramodern-workspace/routes.js +8 -142
  199. package/dist/esm/ultramodern-workspace/shared-patches.js +6 -0
  200. package/dist/esm/ultramodern-workspace/tsconfigs.js +136 -0
  201. package/dist/esm/ultramodern-workspace/workspace-script-plan.js +2 -2
  202. package/dist/esm/ultramodern-workspace/write-app.js +90 -0
  203. package/dist/esm/ultramodern-workspace/write-workspace.js +4 -61
  204. package/dist/esm/ultramodern-workspace/zerops.js +13 -10
  205. package/dist/esm-node/cli/flags.js +229 -0
  206. package/dist/esm-node/cli/help.js +66 -0
  207. package/dist/esm-node/cli/package-source.js +120 -0
  208. package/dist/esm-node/cli/project-setup.js +82 -0
  209. package/dist/esm-node/cli/prompts.js +64 -0
  210. package/dist/esm-node/index.js +6 -559
  211. package/dist/esm-node/ultramodern-tooling/commands/cloudflare-output-verify.js +85 -0
  212. package/dist/esm-node/ultramodern-tooling/commands/context.js +67 -0
  213. package/dist/esm-node/ultramodern-tooling/commands/mf-types.js +18 -0
  214. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +107 -0
  215. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +12 -0
  216. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.js +39 -0
  217. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.js +11 -0
  218. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +15 -0
  219. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +13 -0
  220. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.js +84 -0
  221. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.js +17 -0
  222. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +45 -0
  223. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.js +13 -0
  224. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.js +8 -0
  225. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.js +16 -0
  226. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/help.js +17 -0
  227. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/install.js +15 -0
  228. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/io.js +70 -0
  229. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +176 -0
  230. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-source.js +39 -0
  231. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +77 -0
  232. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +106 -0
  233. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +17 -0
  234. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect.js +101 -0
  235. package/dist/esm-node/ultramodern-tooling/commands/options.js +19 -0
  236. package/dist/esm-node/ultramodern-tooling/commands/routes-generate.js +75 -0
  237. package/dist/esm-node/ultramodern-tooling/commands/skills.js +12 -0
  238. package/dist/esm-node/ultramodern-tooling/commands/sync-delivery-unit.js +2 -0
  239. package/dist/esm-node/ultramodern-tooling/commands/validate.js +12 -0
  240. package/dist/esm-node/ultramodern-tooling/commands.js +9 -1152
  241. package/dist/esm-node/ultramodern-tooling/config/constants.js +5 -0
  242. package/dist/esm-node/ultramodern-tooling/config/index.js +8 -0
  243. package/dist/esm-node/ultramodern-tooling/config/json.js +11 -0
  244. package/dist/esm-node/ultramodern-tooling/config/load.js +14 -0
  245. package/dist/esm-node/ultramodern-tooling/config/metadata.js +38 -0
  246. package/dist/esm-node/ultramodern-tooling/config/normalize.js +107 -0
  247. package/dist/esm-node/ultramodern-tooling/config/synthesize.js +109 -0
  248. package/dist/esm-node/ultramodern-tooling/config/types.js +1 -0
  249. package/dist/esm-node/ultramodern-tooling/config.js +1 -255
  250. package/dist/esm-node/ultramodern-workspace/add-vertical/constants.js +6 -0
  251. package/dist/esm-node/ultramodern-workspace/add-vertical/execute.js +109 -0
  252. package/dist/esm-node/ultramodern-workspace/add-vertical/plan.js +185 -0
  253. package/dist/esm-node/ultramodern-workspace/add-vertical/preflight.js +123 -0
  254. package/dist/esm-node/ultramodern-workspace/add-vertical/shell-files.js +60 -0
  255. package/dist/esm-node/ultramodern-workspace/add-vertical/topology.js +90 -0
  256. package/dist/esm-node/ultramodern-workspace/add-vertical/workspace-state.js +44 -0
  257. package/dist/esm-node/ultramodern-workspace/add-vertical.js +6 -569
  258. package/dist/esm-node/ultramodern-workspace/api/checkout-cart.js +87 -0
  259. package/dist/esm-node/ultramodern-workspace/api/client.js +178 -0
  260. package/dist/esm-node/ultramodern-workspace/api/contracts.js +173 -0
  261. package/dist/esm-node/ultramodern-workspace/api/names.js +34 -0
  262. package/dist/esm-node/ultramodern-workspace/api/service.js +180 -0
  263. package/dist/esm-node/ultramodern-workspace/api/shared.js +209 -0
  264. package/dist/esm-node/ultramodern-workspace/api.js +5 -1025
  265. package/dist/esm-node/ultramodern-workspace/app-files.js +3 -18
  266. package/dist/esm-node/ultramodern-workspace/backend-federation.js +27 -13
  267. package/dist/esm-node/ultramodern-workspace/bridge-config/cli.js +31 -0
  268. package/dist/esm-node/ultramodern-workspace/bridge-config/defaults.js +6 -0
  269. package/dist/esm-node/ultramodern-workspace/bridge-config/gates.js +53 -0
  270. package/dist/esm-node/ultramodern-workspace/bridge-config/index.js +4 -0
  271. package/dist/esm-node/ultramodern-workspace/bridge-config/normalize.js +31 -0
  272. package/dist/esm-node/ultramodern-workspace/bridge-config/schema.js +32 -0
  273. package/dist/esm-node/ultramodern-workspace/bridge-config/shared.js +52 -0
  274. package/dist/esm-node/ultramodern-workspace/bridge-config/validation.js +28 -0
  275. package/dist/esm-node/ultramodern-workspace/bridge-config/workspace-packages.js +68 -0
  276. package/dist/esm-node/ultramodern-workspace/bridge-config.js +1 -270
  277. package/dist/esm-node/ultramodern-workspace/delivery-unit-sync.js +23 -21
  278. package/dist/esm-node/ultramodern-workspace/delivery-unit.js +6 -16
  279. package/dist/esm-node/ultramodern-workspace/demo-components.js +47 -189
  280. package/dist/esm-node/ultramodern-workspace/descriptors.js +12 -1
  281. package/dist/esm-node/ultramodern-workspace/effect-diagnostics.js +77 -0
  282. package/dist/esm-node/ultramodern-workspace/fs-io.js +24 -2
  283. package/dist/esm-node/ultramodern-workspace/index.js +1 -0
  284. package/dist/esm-node/ultramodern-workspace/mf-validation/constants.js +20 -0
  285. package/dist/esm-node/ultramodern-workspace/mf-validation/discovery.js +29 -0
  286. package/dist/esm-node/ultramodern-workspace/mf-validation/inspect.js +46 -0
  287. package/dist/esm-node/ultramodern-workspace/mf-validation/object-literal.js +145 -0
  288. package/dist/esm-node/ultramodern-workspace/mf-validation/path-utils.js +90 -0
  289. package/dist/esm-node/ultramodern-workspace/mf-validation/syntax.js +155 -0
  290. package/dist/esm-node/ultramodern-workspace/mf-validation/types.js +1 -0
  291. package/dist/esm-node/ultramodern-workspace/mf-validation/validate.js +58 -0
  292. package/dist/esm-node/ultramodern-workspace/mf-validation.js +3 -516
  293. package/dist/esm-node/ultramodern-workspace/module-federation/config.js +205 -0
  294. package/dist/esm-node/ultramodern-workspace/module-federation/index.js +5 -0
  295. package/dist/esm-node/ultramodern-workspace/module-federation/reexport-module.js +30 -0
  296. package/dist/esm-node/ultramodern-workspace/module-federation/remote-refs.js +65 -0
  297. package/dist/esm-node/ultramodern-workspace/module-federation/shared-config.js +13 -0
  298. package/dist/esm-node/ultramodern-workspace/module-federation.js +2 -576
  299. package/dist/esm-node/ultramodern-workspace/package-json.js +7 -210
  300. package/dist/esm-node/ultramodern-workspace/routes.js +8 -142
  301. package/dist/esm-node/ultramodern-workspace/shared-patches.js +7 -0
  302. package/dist/esm-node/ultramodern-workspace/tsconfigs.js +137 -0
  303. package/dist/esm-node/ultramodern-workspace/workspace-script-plan.js +2 -2
  304. package/dist/esm-node/ultramodern-workspace/write-app.js +91 -0
  305. package/dist/esm-node/ultramodern-workspace/write-workspace.js +4 -61
  306. package/dist/esm-node/ultramodern-workspace/zerops.js +13 -10
  307. package/dist/types/cli/flags.d.ts +30 -0
  308. package/dist/types/cli/help.d.ts +2 -0
  309. package/dist/types/cli/package-source.d.ts +15 -0
  310. package/dist/types/cli/project-setup.d.ts +8 -0
  311. package/dist/types/cli/prompts.d.ts +6 -0
  312. package/dist/types/ultramodern-tooling/commands/cloudflare-output-verify.d.ts +2 -0
  313. package/dist/types/ultramodern-tooling/commands/context.d.ts +11 -0
  314. package/dist/types/ultramodern-tooling/commands/mf-types.d.ts +2 -0
  315. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.d.ts +4 -0
  316. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.d.ts +4 -0
  317. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.d.ts +1 -0
  318. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.d.ts +3 -0
  319. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.d.ts +3 -0
  320. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.d.ts +3 -0
  321. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.d.ts +2 -0
  322. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.d.ts +4 -0
  323. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.d.ts +3 -0
  324. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.d.ts +3 -0
  325. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.d.ts +7 -0
  326. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.d.ts +3 -0
  327. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/help.d.ts +1 -0
  328. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/install.d.ts +2 -0
  329. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/io.d.ts +14 -0
  330. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.d.ts +9 -0
  331. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/package-source.d.ts +3 -0
  332. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.d.ts +4 -0
  333. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.d.ts +25 -0
  334. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.d.ts +9 -0
  335. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect.d.ts +2 -0
  336. package/dist/types/ultramodern-tooling/commands/options.d.ts +2 -0
  337. package/dist/types/ultramodern-tooling/commands/routes-generate.d.ts +2 -0
  338. package/dist/types/ultramodern-tooling/commands/skills.d.ts +2 -0
  339. package/dist/types/ultramodern-tooling/commands/sync-delivery-unit.d.ts +1 -0
  340. package/dist/types/ultramodern-tooling/commands/validate.d.ts +2 -0
  341. package/dist/types/ultramodern-tooling/config/constants.d.ts +3 -0
  342. package/dist/types/ultramodern-tooling/config/index.d.ts +7 -0
  343. package/dist/types/ultramodern-tooling/config/json.d.ts +2 -0
  344. package/dist/types/ultramodern-tooling/config/load.d.ts +2 -0
  345. package/dist/types/ultramodern-tooling/config/metadata.d.ts +4 -0
  346. package/dist/types/ultramodern-tooling/config/normalize.d.ts +5 -0
  347. package/dist/types/ultramodern-tooling/config/synthesize.d.ts +5 -0
  348. package/dist/types/ultramodern-tooling/config/types.d.ts +41 -0
  349. package/dist/types/ultramodern-tooling/config.d.ts +1 -49
  350. package/dist/types/ultramodern-workspace/add-vertical/constants.d.ts +4 -0
  351. package/dist/types/ultramodern-workspace/add-vertical/execute.d.ts +2 -0
  352. package/dist/types/ultramodern-workspace/add-vertical/plan.d.ts +7 -0
  353. package/dist/types/ultramodern-workspace/add-vertical/preflight.d.ts +28 -0
  354. package/dist/types/ultramodern-workspace/add-vertical/shell-files.d.ts +6 -0
  355. package/dist/types/ultramodern-workspace/add-vertical/topology.d.ts +9 -0
  356. package/dist/types/ultramodern-workspace/add-vertical/workspace-state.d.ts +8 -0
  357. package/dist/types/ultramodern-workspace/add-vertical.d.ts +7 -39
  358. package/dist/types/ultramodern-workspace/api/checkout-cart.d.ts +33 -0
  359. package/dist/types/ultramodern-workspace/api/client.d.ts +6 -0
  360. package/dist/types/ultramodern-workspace/api/contracts.d.ts +15 -0
  361. package/dist/types/ultramodern-workspace/api/names.d.ts +41 -0
  362. package/dist/types/ultramodern-workspace/api/service.d.ts +6 -0
  363. package/dist/types/ultramodern-workspace/api/shared.d.ts +10 -0
  364. package/dist/types/ultramodern-workspace/api.d.ts +5 -74
  365. package/dist/types/ultramodern-workspace/backend-federation.d.ts +2 -2
  366. package/dist/types/ultramodern-workspace/bridge-config/cli.d.ts +3 -0
  367. package/dist/types/ultramodern-workspace/bridge-config/defaults.d.ts +1 -0
  368. package/dist/types/ultramodern-workspace/bridge-config/gates.d.ts +3 -0
  369. package/dist/types/ultramodern-workspace/bridge-config/index.d.ts +4 -0
  370. package/dist/types/ultramodern-workspace/bridge-config/normalize.d.ts +2 -0
  371. package/dist/types/ultramodern-workspace/bridge-config/schema.d.ts +61 -0
  372. package/dist/types/ultramodern-workspace/bridge-config/shared.d.ts +12 -0
  373. package/dist/types/ultramodern-workspace/bridge-config/validation.d.ts +3 -0
  374. package/dist/types/ultramodern-workspace/bridge-config/workspace-packages.d.ts +3 -0
  375. package/dist/types/ultramodern-workspace/bridge-config.d.ts +1 -64
  376. package/dist/types/ultramodern-workspace/delivery-unit.d.ts +2 -21
  377. package/dist/types/ultramodern-workspace/effect-diagnostics.d.ts +1 -0
  378. package/dist/types/ultramodern-workspace/index.d.ts +1 -0
  379. package/dist/types/ultramodern-workspace/mf-validation/constants.d.ts +5 -0
  380. package/dist/types/ultramodern-workspace/mf-validation/discovery.d.ts +2 -0
  381. package/dist/types/ultramodern-workspace/mf-validation/inspect.d.ts +5 -0
  382. package/dist/types/ultramodern-workspace/mf-validation/object-literal.d.ts +9 -0
  383. package/dist/types/ultramodern-workspace/mf-validation/path-utils.d.ts +13 -0
  384. package/dist/types/ultramodern-workspace/mf-validation/syntax.d.ts +14 -0
  385. package/dist/types/ultramodern-workspace/mf-validation/types.d.ts +33 -0
  386. package/dist/types/ultramodern-workspace/mf-validation/validate.d.ts +4 -0
  387. package/dist/types/ultramodern-workspace/mf-validation.d.ts +4 -27
  388. package/dist/types/ultramodern-workspace/module-federation/config.d.ts +5 -0
  389. package/dist/types/ultramodern-workspace/module-federation/index.d.ts +4 -0
  390. package/dist/types/ultramodern-workspace/module-federation/reexport-module.d.ts +4 -0
  391. package/dist/types/ultramodern-workspace/module-federation/remote-refs.d.ts +3 -0
  392. package/dist/types/ultramodern-workspace/module-federation/shared-config.d.ts +2 -0
  393. package/dist/types/ultramodern-workspace/module-federation.d.ts +1 -11
  394. package/dist/types/ultramodern-workspace/package-json.d.ts +1 -13
  395. package/dist/types/ultramodern-workspace/shared-patches.d.ts +2 -0
  396. package/dist/types/ultramodern-workspace/tsconfigs.d.ts +13 -0
  397. package/dist/types/ultramodern-workspace/workspace-validation-contract.d.ts +1 -1
  398. package/dist/types/ultramodern-workspace/write-app.d.ts +3 -0
  399. package/dist/types/ultramodern-workspace/write-workspace.d.ts +2 -1
  400. package/package.json +4 -3
  401. package/templates/workspace/apps/modern.config.shared-module-federation.ts.handlebars +37 -0
  402. package/templates/workspace/apps/modern.config.ts.handlebars +252 -0
  403. package/templates/workspace/apps/shared/src/routes/ultramodern-jsonld.ts.handlebars +119 -0
  404. package/templates/workspace/apps/shared/src/routes/ultramodern-route-metadata.ts.handlebars +21 -0
  405. package/templates/workspace/apps/shell-super-app/src/routes/[lang]/page.tsx.handlebars +49 -0
  406. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.helpers.tsx.handlebars +79 -0
  407. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.imports.tsx.handlebars +11 -0
  408. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.tsx.handlebars +46 -0
  409. package/templates/workspace/packages/shared-design-tokens/tokens.css.handlebars +7 -0
  410. package/templates/workspace/postcss.config.mjs.handlebars +5 -0
  411. package/templates/workspace/tailwind.config.ts.handlebars +3 -0
  412. package/templates/workspace/verticals/server/checkout-cart-handlers.ts.handlebars +49 -0
  413. package/templates/workspace/verticals/server/checkout-cart-state.ts.handlebars +23 -0
  414. package/templates/workspace/verticals/shared/api.checkout-cart-contract-fields.ts.handlebars +1 -0
  415. package/templates/workspace/verticals/shared/api.checkout-cart-endpoints.ts.handlebars +23 -0
  416. package/templates/workspace/verticals/shared/api.checkout-cart-operation-contexts.ts.handlebars +25 -0
  417. package/templates/workspace/verticals/shared/api.checkout-cart-schemas.ts.handlebars +48 -0
  418. package/templates/workspace/verticals/src/api/checkout-cart-client-exports.ts.handlebars +70 -0
  419. package/templates/workspace-scripts/generate-node-backend-federation.mjs +29 -0
  420. package/templates/workspace-scripts/proof-node-backend-federation.mjs +31 -0
  421. package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +74 -40
@@ -1,270 +1 @@
1
- const ultramodernBridgeCliFlags = {
2
- enabled: '--bridge',
3
- parentRoot: '--bridge-parent-root',
4
- workspacePackage: '--bridge-workspace-package',
5
- workspacePackageName: '--bridge-workspace-package-name',
6
- testAlias: '--bridge-test-alias',
7
- dependency: '--bridge-dependency',
8
- lockfilePolicy: '--bridge-lockfile-policy',
9
- gate: '--bridge-gate',
10
- gateCwd: '--bridge-gate-cwd',
11
- reactSingleton: '--bridge-react-singleton'
12
- };
13
- const ultramodernBridgeCliValueFlags = [
14
- ultramodernBridgeCliFlags.parentRoot,
15
- ultramodernBridgeCliFlags.workspacePackage,
16
- ultramodernBridgeCliFlags.workspacePackageName,
17
- ultramodernBridgeCliFlags.testAlias,
18
- ultramodernBridgeCliFlags.dependency,
19
- ultramodernBridgeCliFlags.lockfilePolicy,
20
- ultramodernBridgeCliFlags.gate,
21
- ultramodernBridgeCliFlags.gateCwd,
22
- ultramodernBridgeCliFlags.reactSingleton
23
- ];
24
- const ultramodernBridgeCliBooleanFlags = [
25
- ultramodernBridgeCliFlags.enabled
26
- ];
27
- const ultramodernBridgeLockfilePolicies = [
28
- 'nested',
29
- 'parent'
30
- ];
31
- const defaultReactSingletons = [
32
- 'react',
33
- 'react-dom'
34
- ];
35
- function hasUltramodernBridgeCliOptions(args) {
36
- return args.some((arg)=>[
37
- ...ultramodernBridgeCliBooleanFlags,
38
- ...ultramodernBridgeCliValueFlags
39
- ].some((flag)=>arg === flag || arg.startsWith(`${flag}=`)));
40
- }
41
- function parseUltramodernBridgeCliOptions(args) {
42
- rejectBooleanFlagValues(args);
43
- if (!hasUltramodernBridgeCliOptions(args)) return;
44
- const parentRoot = readSingleValue(args, ultramodernBridgeCliFlags.parentRoot);
45
- const lockfilePolicy = readSingleValue(args, ultramodernBridgeCliFlags.lockfilePolicy) ?? 'nested';
46
- const workspacePackages = readWorkspacePackages(args);
47
- const gates = readBridgeGates(args);
48
- const reactSingletons = readCsvOptionValues(args, ultramodernBridgeCliFlags.reactSingleton);
49
- return normalizeUltramodernBridgeConfig({
50
- enabled: true,
51
- parentRoot: requireNonEmptyValue(parentRoot, ultramodernBridgeCliFlags.parentRoot),
52
- workspacePackages,
53
- dependencies: readCsvOptionValues(args, ultramodernBridgeCliFlags.dependency),
54
- lockfilePolicy: parseLockfilePolicy(lockfilePolicy),
55
- gates,
56
- reactSingletons: reactSingletons.length > 0 ? reactSingletons : void 0
57
- });
58
- }
59
- function normalizeUltramodernBridgeConfig(bridge) {
60
- if (!bridge || false === bridge.enabled) return;
61
- const parentRoot = requireNonEmptyValue(bridge.parentRoot, 'bridge.parentRoot');
62
- const workspacePackages = normalizeWorkspacePackages(bridge.workspacePackages);
63
- const dependencies = uniqueNonEmptyValues(bridge.dependencies, 'bridge.dependencies');
64
- const gates = normalizeBridgeGates(bridge.gates);
65
- const reactSingletons = bridge.reactSingletons && bridge.reactSingletons.length > 0 ? uniqueNonEmptyValues(bridge.reactSingletons, 'bridge.reactSingletons') : [
66
- ...defaultReactSingletons
67
- ];
68
- if (0 === workspacePackages.length) throw new Error('Bridge mode requires at least one bridge.workspacePackages entry.');
69
- if (0 === dependencies.length) throw new Error('Bridge mode requires at least one explicit bridge.dependencies package name.');
70
- if (0 === gates.length) throw new Error('Bridge mode requires at least one bridge.gates delegated parent command.');
71
- validateParentPackageCoverage(workspacePackages, dependencies);
72
- validateReactSingletons(reactSingletons);
73
- return {
74
- enabled: true,
75
- parentRoot,
76
- workspacePackages,
77
- dependencies,
78
- lockfilePolicy: parseLockfilePolicy(bridge.lockfilePolicy ?? 'nested'),
79
- gates,
80
- reactSingletons
81
- };
82
- }
83
- function rejectBooleanFlagValues(args) {
84
- for (const flag of ultramodernBridgeCliBooleanFlags)if (args.some((arg)=>arg.startsWith(`${flag}=`))) throw new Error(`${flag} does not accept a value.`);
85
- }
86
- function readRepeatedOptionValues(args, flag) {
87
- const values = [];
88
- for(let index = 0; index < args.length; index++){
89
- const arg = args[index];
90
- if (arg === flag) {
91
- const value = args[index + 1];
92
- if (!value || value.startsWith('-')) throw new Error(`${flag} requires a value.`);
93
- values.push(value);
94
- index += 1;
95
- continue;
96
- }
97
- if (arg.startsWith(`${flag}=`)) values.push(arg.slice(flag.length + 1));
98
- }
99
- return values;
100
- }
101
- function readSingleValue(args, flag) {
102
- const values = readRepeatedOptionValues(args, flag);
103
- if (values.length > 1) throw new Error(`${flag} can be provided only once.`);
104
- return values[0];
105
- }
106
- function readCsvOptionValues(args, flag) {
107
- return readRepeatedOptionValues(args, flag).flatMap((value)=>value.split(',').map((entry)=>entry.trim()).filter(Boolean));
108
- }
109
- function requireNonEmptyValue(value, label) {
110
- if ('string' != typeof value || 0 === value.trim().length) throw new Error(`${label} must be a non-empty string.`);
111
- return value.trim();
112
- }
113
- function parseLockfilePolicy(value) {
114
- if (!ultramodernBridgeLockfilePolicies.includes(value)) throw new Error(`${ultramodernBridgeCliFlags.lockfilePolicy} must be "nested" or "parent".`);
115
- return value;
116
- }
117
- function readWorkspacePackages(args) {
118
- const drafts = new Map();
119
- const getDraft = (pattern)=>{
120
- const normalizedPattern = requireNonEmptyValue(pattern, ultramodernBridgeCliFlags.workspacePackage);
121
- const existing = drafts.get(normalizedPattern);
122
- if (existing) return existing;
123
- const draft = {
124
- pattern: normalizedPattern,
125
- packageNames: [],
126
- testAliases: []
127
- };
128
- drafts.set(normalizedPattern, draft);
129
- return draft;
130
- };
131
- for (const pattern of readRepeatedOptionValues(args, ultramodernBridgeCliFlags.workspacePackage))getDraft(pattern);
132
- for (const value of readRepeatedOptionValues(args, ultramodernBridgeCliFlags.workspacePackageName)){
133
- const { left: pattern, right: packageNames } = splitAssignment(value, ultramodernBridgeCliFlags.workspacePackageName, '<pattern>=<package-name>[,<package-name>]');
134
- getDraft(pattern).packageNames.push(...packageNames.split(',').map((packageName)=>packageName.trim()).filter(Boolean));
135
- }
136
- for (const value of readRepeatedOptionValues(args, ultramodernBridgeCliFlags.testAlias)){
137
- const separator = value.indexOf(':');
138
- if (-1 === separator) throw new Error(`${ultramodernBridgeCliFlags.testAlias} must use <pattern>:<alias>=<target>.`);
139
- const pattern = value.slice(0, separator);
140
- const aliasDefinition = value.slice(separator + 1);
141
- const { left: alias, right: target } = splitAssignment(aliasDefinition, ultramodernBridgeCliFlags.testAlias, '<pattern>:<alias>=<target>');
142
- getDraft(pattern).testAliases.push({
143
- alias: requireNonEmptyValue(alias, `${ultramodernBridgeCliFlags.testAlias} alias`),
144
- target: requireNonEmptyValue(target, `${ultramodernBridgeCliFlags.testAlias} target`)
145
- });
146
- }
147
- return normalizeWorkspacePackages([
148
- ...drafts.values()
149
- ]);
150
- }
151
- function readBridgeGates(args) {
152
- const gates = new Map();
153
- const getGate = (name)=>{
154
- const normalizedName = requireNonEmptyValue(name, `${ultramodernBridgeCliFlags.gate} name`);
155
- const existing = gates.get(normalizedName);
156
- if (existing) return existing;
157
- const draft = {
158
- name: normalizedName
159
- };
160
- gates.set(normalizedName, draft);
161
- return draft;
162
- };
163
- for (const value of readRepeatedOptionValues(args, ultramodernBridgeCliFlags.gate)){
164
- const { left: name, right: command } = splitAssignment(value, ultramodernBridgeCliFlags.gate, '<name>=<command>');
165
- getGate(name).command = requireNonEmptyValue(command, `${ultramodernBridgeCliFlags.gate} command`);
166
- }
167
- for (const value of readRepeatedOptionValues(args, ultramodernBridgeCliFlags.gateCwd)){
168
- const { left: name, right: cwd } = splitAssignment(value, ultramodernBridgeCliFlags.gateCwd, '<name>=<cwd>');
169
- getGate(name).cwd = requireNonEmptyValue(cwd, `${ultramodernBridgeCliFlags.gateCwd} cwd`);
170
- }
171
- const missingCommand = [
172
- ...gates.values()
173
- ].find((gate)=>!gate.command);
174
- if (missingCommand) throw new Error(`${ultramodernBridgeCliFlags.gateCwd} references "${missingCommand.name}" without a matching ${ultramodernBridgeCliFlags.gate}.`);
175
- return normalizeBridgeGates([
176
- ...gates.values()
177
- ].map((gate)=>({
178
- name: gate.name,
179
- command: gate.command,
180
- cwd: gate.cwd
181
- })));
182
- }
183
- function splitAssignment(value, flag, usage) {
184
- const separator = value.indexOf('=');
185
- if (-1 === separator) throw new Error(`${flag} must use ${usage}.`);
186
- return {
187
- left: value.slice(0, separator),
188
- right: value.slice(separator + 1)
189
- };
190
- }
191
- function normalizeWorkspacePackages(workspacePackages) {
192
- return workspacePackages.map((entry, index)=>{
193
- const label = `bridge.workspacePackages[${index}]`;
194
- const packageNames = entry.packageNames && entry.packageNames.length > 0 ? uniqueNonEmptyValues(entry.packageNames, `${label}.packageNames`) : void 0;
195
- const testAliases = entry.testAliases && entry.testAliases.length > 0 ? normalizeTestAliases(entry.testAliases, label) : void 0;
196
- return {
197
- pattern: requireNonEmptyValue(entry.pattern, `${label}.pattern`),
198
- ...packageNames ? {
199
- packageNames
200
- } : {},
201
- ...testAliases ? {
202
- testAliases
203
- } : {}
204
- };
205
- });
206
- }
207
- function validateParentPackageCoverage(workspacePackages, dependencies) {
208
- const declaredPackages = new Set();
209
- for (const [index, entry] of workspacePackages.entries()){
210
- const label = `bridge.workspacePackages[${index}]`;
211
- const packageNames = entry.packageNames ?? [];
212
- if (0 === packageNames.length && (entry.testAliases ?? []).length > 0) throw new Error(`${label}.packageNames must declare the parent package names covered by "${entry.pattern}" before testAliases can be checked.`);
213
- for (const packageName of packageNames)declaredPackages.add(packageName);
214
- for (const alias of entry.testAliases ?? []){
215
- if (!packageNames.some((packageName)=>aliasMatchesPackage(alias.alias, packageName))) throw new Error(`${label}.testAliases entry "${alias.alias}" must match one of ${label}.packageNames.`);
216
- if (pointsAtBuildOutput(alias.target)) throw new Error(`${label}.testAliases target "${alias.target}" must point at source files, not dist output.`);
217
- }
218
- }
219
- const missingDependencies = dependencies.filter((dependency)=>!declaredPackages.has(dependency));
220
- if (declaredPackages.size > 0 && missingDependencies.length > 0) throw new Error(`Bridge mode dependencies must be declared by bridge.workspacePackages[].packageNames: ${missingDependencies.join(', ')}.`);
221
- }
222
- function aliasMatchesPackage(alias, packageName) {
223
- return alias === packageName || alias.startsWith(`${packageName}/`);
224
- }
225
- function pointsAtBuildOutput(target) {
226
- return target.split(/[\\/]/u).includes('dist');
227
- }
228
- function validateReactSingletons(reactSingletons) {
229
- const missing = defaultReactSingletons.filter((packageName)=>!reactSingletons.includes(packageName));
230
- if (missing.length > 0) throw new Error(`Bridge mode React singleton/dedupe declarations must include ${defaultReactSingletons.join(' and ')}. Missing: ${missing.join(', ')}.`);
231
- }
232
- function normalizeTestAliases(testAliases, parentLabel) {
233
- const aliases = new Map();
234
- for (const [index, alias] of testAliases.entries()){
235
- const label = `${parentLabel}.testAliases[${index}]`;
236
- const normalizedAlias = requireNonEmptyValue(alias.alias, `${label}.alias`);
237
- aliases.set(normalizedAlias, {
238
- alias: normalizedAlias,
239
- target: requireNonEmptyValue(alias.target, `${label}.target`)
240
- });
241
- }
242
- return [
243
- ...aliases.values()
244
- ];
245
- }
246
- function normalizeBridgeGates(gates) {
247
- const normalized = new Map();
248
- for (const [index, gate] of gates.entries()){
249
- const label = `bridge.gates[${index}]`;
250
- const name = requireNonEmptyValue(gate.name, `${label}.name`);
251
- normalized.set(name, {
252
- name,
253
- command: requireNonEmptyValue(gate.command, `${label}.command`),
254
- ...gate.cwd ? {
255
- cwd: requireNonEmptyValue(gate.cwd, `${label}.cwd`)
256
- } : {}
257
- });
258
- }
259
- return [
260
- ...normalized.values()
261
- ];
262
- }
263
- function uniqueNonEmptyValues(values, label) {
264
- const unique = new Set();
265
- for (const [index, value] of values.entries())unique.add(requireNonEmptyValue(value, `${label}[${index}]`));
266
- return [
267
- ...unique
268
- ];
269
- }
270
- export { hasUltramodernBridgeCliOptions, normalizeUltramodernBridgeConfig, parseUltramodernBridgeCliOptions, ultramodernBridgeCliBooleanFlags, ultramodernBridgeCliFlags, ultramodernBridgeCliValueFlags, ultramodernBridgeLockfilePolicies };
1
+ export * from "./bridge-config/index.js";
@@ -1,25 +1,12 @@
1
1
  import node_fs from "node:fs";
2
2
  import node_path from "node:path";
3
+ import { parseArgs } from "node:util";
3
4
  import { readUltramodernConfig, workspaceAppsFromToolingConfig } from "../ultramodern-tooling/config.js";
4
5
  import { createBackendFederationContract } from "./backend-federation.js";
5
6
  import { createDeliveryUnitRecord, deliveryUnitContractBlock } from "./delivery-unit.js";
6
7
  import { ULTRAMODERN_CONFIG_PATH } from "./descriptors.js";
7
- import { createUltramodernBuildModule } from "./module-federation.js";
8
+ import { createUltramodernBuildArtifactJson, createUltramodernBuildModule } from "./module-federation.js";
8
9
  const REFERENCE_TOPOLOGY_PATH = 'topology/reference-topology.json';
9
- function readOption(args, name) {
10
- const prefix = `${name}=`;
11
- const inline = args.find((arg)=>arg.startsWith(prefix));
12
- if (inline) {
13
- const value = inline.slice(prefix.length);
14
- if (!value) throw new Error(`${name} needs a value.`);
15
- return value;
16
- }
17
- const index = args.indexOf(name);
18
- if (-1 === index) return;
19
- const value = args[index + 1];
20
- if (!value || value.startsWith('--')) throw new Error(`${name} needs a value.`);
21
- return value;
22
- }
23
10
  function isPlainObject(value) {
24
11
  return 'object' == typeof value && null !== value && !Array.isArray(value);
25
12
  }
@@ -44,7 +31,21 @@ function stampDeliveryUnitIdentity(entry, scope, app) {
44
31
  } else entry.backendFederation = createBackendFederationContract(scope, app);
45
32
  }
46
33
  function runSyncDeliveryUnit(args, context) {
47
- if (args.includes('--help') || args.includes('-h')) {
34
+ const parsed = parseArgs({
35
+ args,
36
+ options: {
37
+ help: {
38
+ type: 'boolean',
39
+ short: 'h'
40
+ },
41
+ workspace: {
42
+ type: 'string'
43
+ }
44
+ },
45
+ strict: true,
46
+ allowPositionals: false
47
+ });
48
+ if (parsed.values.help) {
48
49
  process.stdout.write(`Usage:
49
50
  modern-js-create ultramodern sync-delivery-unit [--workspace <dir>]
50
51
 
@@ -54,12 +55,12 @@ through framework tooling only. For each full-stack vertical it writes the
54
55
  delivery-unit block into .modernjs/ultramodern.json topology.apps[] and
55
56
  topology/reference-topology.json verticals[] (plus backendFederation.deliveryUnit
56
57
  and backendFederation.versionBoundary.identityRoot) and regenerates
57
- verticals/<id>/shared/ultramodern-build.ts. Idempotent: a second run writes
58
+ verticals/<id>/shared/ultramodern-build.{json,ts}. Idempotent: a second run writes
58
59
  nothing.
59
60
  `);
60
61
  return 0;
61
62
  }
62
- const workspaceOverride = readOption(args, '--workspace');
63
+ const workspaceOverride = parsed.values.workspace;
63
64
  const workspaceRoot = workspaceOverride ? node_path.resolve(context.invocationCwd, workspaceOverride) : context.workspaceRoot;
64
65
  const compactPath = node_path.join(workspaceRoot, ULTRAMODERN_CONFIG_PATH);
65
66
  if (!node_fs.existsSync(compactPath)) throw new Error(`Missing ${ULTRAMODERN_CONFIG_PATH}. sync-delivery-unit needs the compact UltraModern config; run \`modern-js-create ultramodern migrate-strict-effect\` first.`);
@@ -93,9 +94,10 @@ nothing.
93
94
  track(REFERENCE_TOPOLOGY_PATH, writeJsonIfChanged(topologyPath, topology));
94
95
  }
95
96
  for (const app of apiApps){
96
- const relativePath = node_path.join(app.directory, 'shared/ultramodern-build.ts');
97
- const changed = writeTextIfChanged(node_path.join(workspaceRoot, relativePath), createUltramodernBuildModule(scope, app));
98
- track(relativePath, changed);
97
+ const buildModulePath = node_path.join(app.directory, 'shared/ultramodern-build.ts');
98
+ const buildArtifactPath = node_path.join(app.directory, 'shared/ultramodern-build.json');
99
+ track(buildModulePath, writeTextIfChanged(node_path.join(workspaceRoot, buildModulePath), createUltramodernBuildModule()));
100
+ track(buildArtifactPath, writeTextIfChanged(node_path.join(workspaceRoot, buildArtifactPath), createUltramodernBuildArtifactJson(scope, app)));
99
101
  }
100
102
  if (0 === written.length) process.stdout.write('[ultramodern] sync-delivery-unit: already in sync; no files written.\n');
101
103
  else {
@@ -1,31 +1,21 @@
1
1
  import node_crypto from "node:crypto";
2
+ import { DELIVERY_UNIT_DEPLOY_PROFILE, DELIVERY_UNIT_KIND, DELIVERY_UNIT_SCHEMA_VERSION, deliveryUnitContractBlock } from "@modern-js/utils/universal";
2
3
  import { packageName } from "./naming.js";
3
- const DELIVERY_UNIT_SCHEMA_VERSION = 1;
4
+ const deliveryUnitGenerationSeed = `${Date.now()}:${node_crypto.randomUUID()}`;
4
5
  function createBuildMarker(scope, app) {
5
- return node_crypto.createHash('sha256').update(`${scope}:${app.packageSuffix}:${app.id}:0.1.0`).digest('hex').slice(0, 16);
6
- }
7
- function deliveryUnitContractBlock(record) {
8
- return {
9
- schemaVersion: record.schemaVersion,
10
- kind: record.kind,
11
- unitId: record.unitId,
12
- packageName: record.packageName,
13
- version: record.version,
14
- buildMarker: record.buildMarker,
15
- sourceRevision: record.sourceRevision
16
- };
6
+ return node_crypto.createHash('sha256').update(`${deliveryUnitGenerationSeed}:${scope}:${app.packageSuffix}:${app.id}:0.1.0`).digest('hex').slice(0, 16);
17
7
  }
18
8
  function createDeliveryUnitRecord(scope, app) {
19
9
  return {
20
10
  schemaVersion: DELIVERY_UNIT_SCHEMA_VERSION,
21
- kind: 'microvertical-delivery-unit',
11
+ kind: DELIVERY_UNIT_KIND,
22
12
  unitId: `${scope}/${app.domain ?? app.id}`,
23
13
  appId: app.id,
24
14
  packageName: packageName(scope, app.packageSuffix),
25
15
  version: '0.1.0',
26
16
  sourceRevision: 'workspace',
27
17
  buildMarker: createBuildMarker(scope, app),
28
- deployProfile: 'cloudflare-ssr-mf-effect-v1'
18
+ deployProfile: DELIVERY_UNIT_DEPLOY_PROFILE
29
19
  };
30
20
  }
31
- export { DELIVERY_UNIT_SCHEMA_VERSION, createBuildMarker, createDeliveryUnitRecord, deliveryUnitContractBlock };
21
+ export { createBuildMarker, createDeliveryUnitRecord, deliveryUnitContractBlock };
@@ -1,58 +1,32 @@
1
1
  import { appHasApi, remoteDependencyAlias, resolveApiStem, shellApp } from "./descriptors.js";
2
+ import { renderFileTemplate } from "./fs-io.js";
2
3
  import { createTw, packageName, tailwindPrefixForApp, toPascalCase } from "./naming.js";
3
4
  function createShellPage(remotes = []) {
4
5
  const tw = createTw(tailwindPrefixForApp(shellApp));
5
6
  const remoteCount = String(remotes.length);
6
- return `import { Link, useModernI18n } from '@modern-js/plugin-i18n/runtime';
7
- import ShellFrame from '../shell-frame';
8
- import { UltramodernRouteHead } from '../ultramodern-route-head';
9
- import { VerticalShowcase } from '../vertical-components';
10
- import { ultramodernUiMarker } from '../../ultramodern-build';
11
-
12
- export default function ShellHome() {
13
- const { t } = useModernI18n();
14
-
15
- return (
16
- <ShellFrame>
17
- <UltramodernRouteHead />
18
- <section className="${tw('mx-auto grid max-w-7xl items-center gap-8 py-8 md:grid-cols-[0.9fr_1.1fr] lg:gap-14')}">
19
- <div className="${tw('min-w-0')}">
20
- <p className="${tw('text-xs font-black uppercase tracking-[0.18em] text-emerald-800')}">{t('shell.hero.eyebrow')}</p>
21
- <h1 className="${tw('mt-3 max-w-3xl text-5xl font-black leading-none tracking-normal text-stone-950 md:text-7xl')}">{t('shell.title')}</h1>
22
- <p className="${tw('mt-5 max-w-2xl text-lg leading-8 text-stone-600')}">{t('shell.hero.lede')}</p>
23
- <div className="${tw('mt-7 flex flex-wrap gap-3')}">
24
- <Link className="${tw('inline-flex min-h-11 items-center justify-center rounded-full bg-emerald-800 px-5 font-bold text-white shadow-lg shadow-stone-900/10')}" to="/">
25
- {t('shell.hero.primary')}
26
- </Link>
27
- <span className="${tw('inline-flex min-h-11 items-center justify-center rounded-full border border-stone-900/15 bg-white/90 px-5 font-bold text-stone-950 shadow-lg shadow-stone-900/10')}">
28
- {t('shell.hero.secondary')}
29
- </span>
30
- </div>
31
- </div>
32
- <div className="${tw('rounded-3xl bg-white/90 p-6 shadow-2xl shadow-stone-900/15')}">
33
- <div className="${tw('grid gap-4 sm:grid-cols-2')}">
34
- <article className="${tw('rounded-2xl bg-emerald-50 p-5')}">
35
- <span className="${tw('text-sm font-black uppercase tracking-[0.16em] text-emerald-800')}">{t('shell.hero.cardOneKicker')}</span>
36
- <strong className="${tw('mt-3 block text-3xl font-black text-stone-950')}">${remoteCount}</strong>
37
- <p className="${tw('mt-2 text-sm font-semibold text-stone-600')}">{t('shell.hero.cardOne')}</p>
38
- </article>
39
- <article className="${tw('rounded-2xl bg-amber-50 p-5')}">
40
- <span className="${tw('text-sm font-black uppercase tracking-[0.16em] text-amber-800')}">{t('shell.hero.cardTwoKicker')}</span>
41
- <strong className="${tw('mt-3 block text-3xl font-black text-stone-950')}">SSR</strong>
42
- <p className="${tw('mt-2 text-sm font-semibold text-stone-600')}">{t('shell.hero.cardTwo')}</p>
43
- </article>
44
- </div>
45
- </div>
46
- </section>
47
- <VerticalShowcase />
48
- <p className="${tw('sr-only')}" data-testid="ultramodern-preset">presetUltramodern workspace</p>
49
- <p className="${tw('sr-only')}" data-build-marker={ultramodernUiMarker.build} data-testid="ultramodern-ui-marker">
50
- {ultramodernUiMarker.appId}:{ultramodernUiMarker.version}
51
- </p>
52
- </ShellFrame>
53
- );
54
- }
55
- `;
7
+ return renderFileTemplate('workspace/apps/shell-super-app/src/routes/[lang]/page.tsx', {
8
+ value0: tw('mx-auto grid max-w-7xl items-center gap-8 py-8 md:grid-cols-[0.9fr_1.1fr] lg:gap-14'),
9
+ value1: tw('min-w-0'),
10
+ value2: tw('text-xs font-black uppercase tracking-[0.18em] text-emerald-800'),
11
+ value3: tw('mt-3 max-w-3xl text-5xl font-black leading-none tracking-normal text-stone-950 md:text-7xl'),
12
+ value4: tw('mt-5 max-w-2xl text-lg leading-8 text-stone-600'),
13
+ value5: tw('mt-7 flex flex-wrap gap-3'),
14
+ value6: tw('inline-flex min-h-11 items-center justify-center rounded-full bg-emerald-800 px-5 font-bold text-white shadow-lg shadow-stone-900/10'),
15
+ value7: tw('inline-flex min-h-11 items-center justify-center rounded-full border border-stone-900/15 bg-white/90 px-5 font-bold text-stone-950 shadow-lg shadow-stone-900/10'),
16
+ value8: tw('rounded-3xl bg-white/90 p-6 shadow-2xl shadow-stone-900/15'),
17
+ value9: tw('grid gap-4 sm:grid-cols-2'),
18
+ value10: tw('rounded-2xl bg-emerald-50 p-5'),
19
+ value11: tw('text-sm font-black uppercase tracking-[0.16em] text-emerald-800'),
20
+ value12: tw('mt-3 block text-3xl font-black text-stone-950'),
21
+ value13: remoteCount,
22
+ value14: tw('mt-2 text-sm font-semibold text-stone-600'),
23
+ value15: tw('rounded-2xl bg-amber-50 p-5'),
24
+ value16: tw('text-sm font-black uppercase tracking-[0.16em] text-amber-800'),
25
+ value17: tw('mt-3 block text-3xl font-black text-stone-950'),
26
+ value18: tw('mt-2 text-sm font-semibold text-stone-600'),
27
+ value19: tw('sr-only'),
28
+ value20: tw('sr-only')
29
+ });
56
30
  }
57
31
  function createShellRemoteComponents(scope, remotes = []) {
58
32
  const tw = createTw(tailwindPrefixForApp(shellApp));
@@ -62,150 +36,34 @@ function createShellRemoteComponents(scope, remotes = []) {
62
36
  const componentName = `${toPascalCase(remote.id)}Widget`;
63
37
  return `const ${componentName} = createHydratedRemote(${componentName}Server, '${remoteDependencyAlias(remote)}/Widget');`;
64
38
  }).join('\n');
65
- const federationImports = widgetRemotes.length > 0 ? `import {
66
- classifyModuleFederationFallback,
67
- createModuleFederationFallbackTelemetry,
68
- emitModuleFederationFallbackTelemetry,
69
- toModuleFederationFallbackAttributes,
70
- } from '@modern-js/runtime/module-federation';
71
- import { createLazyComponent } from '@module-federation/bridge-react';
72
- import { getInstance, loadRemote } from '@module-federation/modern-js-v3/runtime';
73
- import { Suspense, useEffect, useMemo, useState } from 'react';
74
- import type { ComponentType } from 'react';
75
- ${serverImports}
76
- ` : '';
77
- const federationHelpers = widgetRemotes.length > 0 ? `interface RemoteComponentModule {
78
- default: ComponentType;
79
- }
80
-
81
- const loadRemoteComponent = (specifier: string) =>
82
- loadRemote<RemoteComponentModule>(specifier) as Promise<RemoteComponentModule>;
83
-
84
- const createRemoteFallback = (specifier: string) =>
85
- ({ error }: { error: Error }) => {
86
- const { t } = useModernI18n();
87
- const classification = classifyModuleFederationFallback(error);
88
- const telemetryEntry =
89
- typeof window === 'undefined' ? undefined : window.location.href;
90
- const telemetry = createModuleFederationFallbackTelemetry({
91
- appName: '${shellApp.id}',
92
- classification,
93
- ...(telemetryEntry === undefined ? {} : { entry: telemetryEntry }),
94
- error,
95
- eventName: 'mf.client.remote.fallback',
96
- exportName: 'default',
97
- phase: 'load',
98
- remote: specifier,
99
- status: 'degraded',
100
- });
101
-
102
- useEffect(() => {
103
- void emitModuleFederationFallbackTelemetry({
104
- appName: telemetry.appName,
105
- classification,
106
- ...(telemetry.entry === undefined ? {} : { entry: telemetry.entry }),
107
- error,
108
- eventName: telemetry.eventName,
109
- exportName: 'default',
110
- metadata: telemetry.metadata,
111
- phase: telemetry.phase,
112
- remote: specifier,
113
- status: 'degraded',
114
- });
115
- }, [classification, error, telemetry]);
116
-
117
- return <div className="${tw('rounded-xl border border-red-900/20 bg-red-50 px-4 py-3 text-sm font-semibold text-red-900')}" data-remote-error={error.name} {...toModuleFederationFallbackAttributes(telemetry)}>{t('shell.remoteUnavailable')}</div>;
118
- };
119
-
120
- const createHydratedRemote =
121
- (ServerComponent: ComponentType, specifier: string) =>
122
- function HydratedRemote() {
123
- const [hydrated, setHydrated] = useState(false);
124
-
125
- useEffect(() => {
126
- setHydrated(true);
127
- }, []);
128
-
129
- const FederatedComponent = useMemo(() => {
130
- if (!hydrated) {
131
- return null;
132
- }
133
- const instance = getInstance();
134
- if (instance === null || instance === undefined) {
135
- return null;
136
- }
137
- return createLazyComponent({
138
- export: 'default',
139
- fallback: createRemoteFallback(specifier),
140
- instance,
141
- loader: () => loadRemoteComponent(specifier),
142
- loading: <ServerComponent />,
143
- });
144
- }, [hydrated]);
145
-
146
- if (FederatedComponent === null) {
147
- return <ServerComponent />;
148
- }
149
-
150
- return (
151
- <Suspense fallback={<ServerComponent />}>
152
- <FederatedComponent />
153
- </Suspense>
154
- );
155
- };
156
- ` : '';
39
+ const federationImports = widgetRemotes.length > 0 ? renderFileTemplate('workspace/apps/shell-super-app/src/routes/vertical-components.imports.tsx', {
40
+ value0: serverImports
41
+ }) : '';
42
+ const federationHelpers = widgetRemotes.length > 0 ? renderFileTemplate('workspace/apps/shell-super-app/src/routes/vertical-components.helpers.tsx', {
43
+ value0: shellApp.id,
44
+ value1: tw('rounded-xl border border-red-900/20 bg-red-50 px-4 py-3 text-sm font-semibold text-red-900')
45
+ }) : '';
157
46
  const showcaseItems = widgetRemotes.map((remote)=>{
158
47
  const componentName = `${toPascalCase(remote.id)}Widget`;
159
48
  return ` <${componentName} key="${remote.id}" />`;
160
49
  }).join('\n');
161
50
  const remoteCount = String(widgetRemotes.length);
162
- return `${federationImports}import { Link, useModernI18n } from '@modern-js/plugin-i18n/runtime';
163
-
164
- const widgetCount = Number('${remoteCount}');
165
-
166
- ${federationHelpers}
167
- ${hydratedExports}
168
-
169
- export const Header = () => {
170
- const { t } = useModernI18n();
171
-
172
- return (
173
- <header className="${tw('flex min-w-0 flex-wrap items-center gap-x-8 gap-y-2 md:flex-1')}" data-modern-boundary-id="${shellApp.mfName}" data-modern-mf-expose="shell/Header">
174
- <Link className="${tw('whitespace-nowrap text-xl font-black tracking-normal text-stone-950 no-underline')}" to="/">{t('shell.title')}</Link>
175
- </header>
176
- );
177
- };
178
-
179
- export const StatusBadge = () => {
180
- const { t } = useModernI18n();
181
-
182
- return (
183
- <span className="${tw('inline-flex h-10 shrink-0 items-center justify-center rounded-full border border-stone-900/15 bg-white px-4 text-sm font-extrabold text-stone-950 shadow-lg shadow-stone-900/5')}">
184
- {widgetCount} {t('shell.hero.cardOneKicker')}
185
- </span>
186
- );
187
- };
188
-
189
- export const VerticalShowcase = () => {
190
- const { t } = useModernI18n();
191
-
192
- if (widgetCount === 0) {
193
- return (
194
- <section className="${tw('mx-auto mt-12 max-w-7xl rounded-2xl bg-white/90 p-6 shadow-xl shadow-stone-900/10')}">
195
- <p className="${tw('text-lg font-bold text-stone-700')}">{t('shell.hero.empty')}</p>
196
- </section>
197
- );
198
- }
199
-
200
- return (
201
- <section className="${tw('mx-auto mt-12 max-w-7xl')}" data-modern-boundary-id="${shellApp.mfName}">
202
- <div className="${tw('grid gap-4 md:grid-cols-2')}">
203
- ${showcaseItems}
204
- </div>
205
- </section>
206
- );
207
- };
208
- `;
51
+ return renderFileTemplate('workspace/apps/shell-super-app/src/routes/vertical-components.tsx', {
52
+ value0: federationImports,
53
+ value1: remoteCount,
54
+ value2: federationHelpers,
55
+ value3: hydratedExports,
56
+ value4: tw('flex min-w-0 flex-wrap items-center gap-x-8 gap-y-2 md:flex-1'),
57
+ value5: shellApp.mfName,
58
+ value6: tw('whitespace-nowrap text-xl font-black tracking-normal text-stone-950 no-underline'),
59
+ value7: tw('inline-flex h-10 shrink-0 items-center justify-center rounded-full border border-stone-900/15 bg-white px-4 text-sm font-extrabold text-stone-950 shadow-lg shadow-stone-900/5'),
60
+ value8: tw('mx-auto mt-12 max-w-7xl rounded-2xl bg-white/90 p-6 shadow-xl shadow-stone-900/10'),
61
+ value9: tw('text-lg font-bold text-stone-700'),
62
+ value10: tw('mx-auto mt-12 max-w-7xl'),
63
+ value11: shellApp.mfName,
64
+ value12: tw('grid gap-4 md:grid-cols-2'),
65
+ value13: showcaseItems
66
+ });
209
67
  }
210
68
  function createRemotePage(app) {
211
69
  const tw = createTw(tailwindPrefixForApp(app));