@bleedingdev/modern-js-create 3.5.0-ultramodern.3 → 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 (461) hide show
  1. package/README.md +21 -17
  2. package/dist/cjs/cli/flags.cjs +326 -0
  3. package/dist/cjs/cli/help.cjs +106 -0
  4. package/dist/cjs/cli/package-source.cjs +186 -0
  5. package/dist/cjs/cli/project-setup.cjs +138 -0
  6. package/dist/cjs/cli/prompts.cjs +118 -0
  7. package/dist/cjs/index.cjs +24 -581
  8. package/dist/cjs/ultramodern-tooling/commands/cloudflare-output-verify.cjs +132 -0
  9. package/dist/cjs/ultramodern-tooling/commands/context.cjs +131 -0
  10. package/dist/cjs/ultramodern-tooling/commands/mf-types.cjs +55 -0
  11. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.cjs +158 -0
  12. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.cjs +49 -0
  13. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.cjs +87 -0
  14. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.cjs +58 -0
  15. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.cjs +62 -0
  16. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.cjs +60 -0
  17. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.cjs +132 -0
  18. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.cjs +67 -0
  19. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.cjs +93 -0
  20. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.cjs +60 -0
  21. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.cjs +67 -0
  22. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.cjs +67 -0
  23. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/help.cjs +54 -0
  24. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/install.cjs +52 -0
  25. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/io.cjs +133 -0
  26. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.cjs +219 -0
  27. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-source.cjs +76 -0
  28. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.cjs +131 -0
  29. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.cjs +161 -0
  30. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.cjs +88 -0
  31. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect.cjs +149 -0
  32. package/dist/cjs/ultramodern-tooling/commands/options.cjs +59 -0
  33. package/dist/cjs/ultramodern-tooling/commands/routes-generate.cjs +122 -0
  34. package/dist/cjs/ultramodern-tooling/commands/skills.cjs +49 -0
  35. package/dist/cjs/ultramodern-tooling/commands/sync-delivery-unit.cjs +40 -0
  36. package/dist/cjs/ultramodern-tooling/commands/validate.cjs +49 -0
  37. package/dist/cjs/ultramodern-tooling/commands.cjs +27 -478
  38. package/dist/cjs/ultramodern-tooling/config/constants.cjs +48 -0
  39. package/dist/cjs/ultramodern-tooling/config/index.cjs +104 -0
  40. package/dist/cjs/ultramodern-tooling/config/json.cjs +61 -0
  41. package/dist/cjs/ultramodern-tooling/config/load.cjs +62 -0
  42. package/dist/cjs/ultramodern-tooling/config/metadata.cjs +92 -0
  43. package/dist/cjs/ultramodern-tooling/config/normalize.cjs +160 -0
  44. package/dist/cjs/ultramodern-tooling/config/synthesize.cjs +157 -0
  45. package/dist/cjs/ultramodern-tooling/config/types.cjs +18 -0
  46. package/dist/cjs/ultramodern-tooling/config.cjs +23 -133
  47. package/dist/cjs/ultramodern-workspace/add-vertical/constants.cjs +52 -0
  48. package/dist/cjs/ultramodern-workspace/add-vertical/execute.cjs +156 -0
  49. package/dist/cjs/ultramodern-workspace/add-vertical/plan.cjs +246 -0
  50. package/dist/cjs/ultramodern-workspace/add-vertical/preflight.cjs +198 -0
  51. package/dist/cjs/ultramodern-workspace/add-vertical/shell-files.cjs +116 -0
  52. package/dist/cjs/ultramodern-workspace/add-vertical/topology.cjs +133 -0
  53. package/dist/cjs/ultramodern-workspace/add-vertical/workspace-state.cjs +107 -0
  54. package/dist/cjs/ultramodern-workspace/add-vertical.cjs +22 -571
  55. package/dist/cjs/ultramodern-workspace/api/checkout-cart.cjs +145 -0
  56. package/dist/cjs/ultramodern-workspace/api/client.cjs +218 -0
  57. package/dist/cjs/ultramodern-workspace/api/contracts.cjs +222 -0
  58. package/dist/cjs/ultramodern-workspace/api/names.cjs +98 -0
  59. package/dist/cjs/ultramodern-workspace/api/service.cjs +220 -0
  60. package/dist/cjs/ultramodern-workspace/api/shared.cjs +252 -0
  61. package/dist/cjs/ultramodern-workspace/api.cjs +29 -1004
  62. package/dist/cjs/ultramodern-workspace/app-files.cjs +11 -29
  63. package/dist/cjs/ultramodern-workspace/backend-federation.cjs +296 -0
  64. package/dist/cjs/ultramodern-workspace/bridge-config/cli.cjs +71 -0
  65. package/dist/cjs/ultramodern-workspace/bridge-config/defaults.cjs +43 -0
  66. package/dist/cjs/ultramodern-workspace/bridge-config/gates.cjs +93 -0
  67. package/dist/cjs/ultramodern-workspace/bridge-config/index.cjs +60 -0
  68. package/dist/cjs/ultramodern-workspace/bridge-config/normalize.cjs +68 -0
  69. package/dist/cjs/ultramodern-workspace/bridge-config/schema.cjs +78 -0
  70. package/dist/cjs/ultramodern-workspace/bridge-config/shared.cjs +110 -0
  71. package/dist/cjs/ultramodern-workspace/bridge-config/validation.cjs +68 -0
  72. package/dist/cjs/ultramodern-workspace/bridge-config/workspace-packages.cjs +108 -0
  73. package/dist/cjs/ultramodern-workspace/bridge-config.cjs +32 -297
  74. package/dist/cjs/ultramodern-workspace/contracts.cjs +24 -8
  75. package/dist/cjs/ultramodern-workspace/delivery-unit-sync.cjs +159 -0
  76. package/dist/cjs/ultramodern-workspace/delivery-unit.cjs +75 -0
  77. package/dist/cjs/ultramodern-workspace/demo-components.cjs +47 -189
  78. package/dist/cjs/ultramodern-workspace/descriptors.cjs +36 -1
  79. package/dist/cjs/ultramodern-workspace/effect-diagnostics.cjs +114 -0
  80. package/dist/cjs/ultramodern-workspace/fs-io.cjs +24 -2
  81. package/dist/cjs/ultramodern-workspace/index.cjs +4 -0
  82. package/dist/cjs/ultramodern-workspace/mf-validation/constants.cjs +69 -0
  83. package/dist/cjs/ultramodern-workspace/mf-validation/discovery.cjs +77 -0
  84. package/dist/cjs/ultramodern-workspace/mf-validation/inspect.cjs +92 -0
  85. package/dist/cjs/ultramodern-workspace/mf-validation/object-literal.cjs +203 -0
  86. package/dist/cjs/ultramodern-workspace/mf-validation/path-utils.cjs +171 -0
  87. package/dist/cjs/ultramodern-workspace/mf-validation/syntax.cjs +228 -0
  88. package/dist/cjs/ultramodern-workspace/mf-validation/types.cjs +18 -0
  89. package/dist/cjs/ultramodern-workspace/mf-validation/validate.cjs +112 -0
  90. package/dist/cjs/ultramodern-workspace/mf-validation.cjs +6 -529
  91. package/dist/cjs/ultramodern-workspace/module-federation/config.cjs +251 -0
  92. package/dist/cjs/ultramodern-workspace/module-federation/index.cjs +73 -0
  93. package/dist/cjs/ultramodern-workspace/module-federation/reexport-module.cjs +73 -0
  94. package/dist/cjs/ultramodern-workspace/module-federation/remote-refs.cjs +105 -0
  95. package/dist/cjs/ultramodern-workspace/module-federation/shared-config.cjs +53 -0
  96. package/dist/cjs/ultramodern-workspace/module-federation.cjs +18 -477
  97. package/dist/cjs/ultramodern-workspace/package-json.cjs +25 -258
  98. package/dist/cjs/ultramodern-workspace/pnpm-workspace-policy-plan.cjs +166 -0
  99. package/dist/cjs/ultramodern-workspace/routes.cjs +8 -142
  100. package/dist/cjs/ultramodern-workspace/shared-patches.cjs +44 -0
  101. package/dist/cjs/ultramodern-workspace/tooling-command-catalog.cjs +153 -0
  102. package/dist/cjs/ultramodern-workspace/tsconfigs.cjs +199 -0
  103. package/dist/cjs/ultramodern-workspace/versions.cjs +8 -3
  104. package/dist/cjs/ultramodern-workspace/workspace-script-plan.cjs +175 -0
  105. package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +104 -63
  106. package/dist/cjs/ultramodern-workspace/workspace-validation-contract.cjs +97 -0
  107. package/dist/cjs/ultramodern-workspace/write-app.cjs +128 -0
  108. package/dist/cjs/ultramodern-workspace/write-workspace.cjs +10 -59
  109. package/dist/cjs/ultramodern-workspace/zerops.cjs +103 -0
  110. package/dist/esm/cli/flags.js +228 -0
  111. package/dist/esm/cli/help.js +65 -0
  112. package/dist/esm/cli/package-source.js +119 -0
  113. package/dist/esm/cli/project-setup.js +81 -0
  114. package/dist/esm/cli/prompts.js +63 -0
  115. package/dist/esm/index.js +6 -559
  116. package/dist/esm/ultramodern-tooling/commands/cloudflare-output-verify.js +84 -0
  117. package/dist/esm/ultramodern-tooling/commands/context.js +66 -0
  118. package/dist/esm/ultramodern-tooling/commands/mf-types.js +17 -0
  119. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +106 -0
  120. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +11 -0
  121. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.js +38 -0
  122. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.js +10 -0
  123. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +14 -0
  124. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +12 -0
  125. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.js +83 -0
  126. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.js +16 -0
  127. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +44 -0
  128. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.js +12 -0
  129. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.js +7 -0
  130. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.js +15 -0
  131. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/help.js +16 -0
  132. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/install.js +14 -0
  133. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/io.js +69 -0
  134. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +175 -0
  135. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-source.js +38 -0
  136. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +76 -0
  137. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +105 -0
  138. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +16 -0
  139. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect.js +100 -0
  140. package/dist/esm/ultramodern-tooling/commands/options.js +18 -0
  141. package/dist/esm/ultramodern-tooling/commands/routes-generate.js +74 -0
  142. package/dist/esm/ultramodern-tooling/commands/skills.js +11 -0
  143. package/dist/esm/ultramodern-tooling/commands/sync-delivery-unit.js +1 -0
  144. package/dist/esm/ultramodern-tooling/commands/validate.js +11 -0
  145. package/dist/esm/ultramodern-tooling/commands.js +22 -468
  146. package/dist/esm/ultramodern-tooling/config/constants.js +4 -0
  147. package/dist/esm/ultramodern-tooling/config/index.js +7 -0
  148. package/dist/esm/ultramodern-tooling/config/json.js +10 -0
  149. package/dist/esm/ultramodern-tooling/config/load.js +13 -0
  150. package/dist/esm/ultramodern-tooling/config/metadata.js +37 -0
  151. package/dist/esm/ultramodern-tooling/config/normalize.js +106 -0
  152. package/dist/esm/ultramodern-tooling/config/synthesize.js +108 -0
  153. package/dist/esm/ultramodern-tooling/config/types.js +0 -0
  154. package/dist/esm/ultramodern-tooling/config.js +1 -120
  155. package/dist/esm/ultramodern-workspace/add-vertical/constants.js +5 -0
  156. package/dist/esm/ultramodern-workspace/add-vertical/execute.js +108 -0
  157. package/dist/esm/ultramodern-workspace/add-vertical/plan.js +184 -0
  158. package/dist/esm/ultramodern-workspace/add-vertical/preflight.js +122 -0
  159. package/dist/esm/ultramodern-workspace/add-vertical/shell-files.js +59 -0
  160. package/dist/esm/ultramodern-workspace/add-vertical/topology.js +89 -0
  161. package/dist/esm/ultramodern-workspace/add-vertical/workspace-state.js +43 -0
  162. package/dist/esm/ultramodern-workspace/add-vertical.js +6 -544
  163. package/dist/esm/ultramodern-workspace/api/checkout-cart.js +86 -0
  164. package/dist/esm/ultramodern-workspace/api/client.js +177 -0
  165. package/dist/esm/ultramodern-workspace/api/contracts.js +172 -0
  166. package/dist/esm/ultramodern-workspace/api/names.js +33 -0
  167. package/dist/esm/ultramodern-workspace/api/service.js +179 -0
  168. package/dist/esm/ultramodern-workspace/api/shared.js +208 -0
  169. package/dist/esm/ultramodern-workspace/api.js +5 -984
  170. package/dist/esm/ultramodern-workspace/app-files.js +11 -29
  171. package/dist/esm/ultramodern-workspace/backend-federation.js +231 -0
  172. package/dist/esm/ultramodern-workspace/bridge-config/cli.js +30 -0
  173. package/dist/esm/ultramodern-workspace/bridge-config/defaults.js +5 -0
  174. package/dist/esm/ultramodern-workspace/bridge-config/gates.js +52 -0
  175. package/dist/esm/ultramodern-workspace/bridge-config/index.js +3 -0
  176. package/dist/esm/ultramodern-workspace/bridge-config/normalize.js +30 -0
  177. package/dist/esm/ultramodern-workspace/bridge-config/schema.js +31 -0
  178. package/dist/esm/ultramodern-workspace/bridge-config/shared.js +51 -0
  179. package/dist/esm/ultramodern-workspace/bridge-config/validation.js +27 -0
  180. package/dist/esm/ultramodern-workspace/bridge-config/workspace-packages.js +67 -0
  181. package/dist/esm/ultramodern-workspace/bridge-config.js +1 -270
  182. package/dist/esm/ultramodern-workspace/contracts.js +24 -8
  183. package/dist/esm/ultramodern-workspace/delivery-unit-sync.js +110 -0
  184. package/dist/esm/ultramodern-workspace/delivery-unit.js +21 -0
  185. package/dist/esm/ultramodern-workspace/demo-components.js +47 -189
  186. package/dist/esm/ultramodern-workspace/descriptors.js +25 -2
  187. package/dist/esm/ultramodern-workspace/effect-diagnostics.js +76 -0
  188. package/dist/esm/ultramodern-workspace/fs-io.js +24 -2
  189. package/dist/esm/ultramodern-workspace/index.js +1 -0
  190. package/dist/esm/ultramodern-workspace/mf-validation/constants.js +19 -0
  191. package/dist/esm/ultramodern-workspace/mf-validation/discovery.js +28 -0
  192. package/dist/esm/ultramodern-workspace/mf-validation/inspect.js +45 -0
  193. package/dist/esm/ultramodern-workspace/mf-validation/object-literal.js +144 -0
  194. package/dist/esm/ultramodern-workspace/mf-validation/path-utils.js +89 -0
  195. package/dist/esm/ultramodern-workspace/mf-validation/syntax.js +154 -0
  196. package/dist/esm/ultramodern-workspace/mf-validation/types.js +0 -0
  197. package/dist/esm/ultramodern-workspace/mf-validation/validate.js +57 -0
  198. package/dist/esm/ultramodern-workspace/mf-validation.js +3 -516
  199. package/dist/esm/ultramodern-workspace/module-federation/config.js +204 -0
  200. package/dist/esm/ultramodern-workspace/module-federation/index.js +4 -0
  201. package/dist/esm/ultramodern-workspace/module-federation/reexport-module.js +29 -0
  202. package/dist/esm/ultramodern-workspace/module-federation/remote-refs.js +64 -0
  203. package/dist/esm/ultramodern-workspace/module-federation/shared-config.js +12 -0
  204. package/dist/esm/ultramodern-workspace/module-federation.js +2 -458
  205. package/dist/esm/ultramodern-workspace/package-json.js +18 -245
  206. package/dist/esm/ultramodern-workspace/pnpm-workspace-policy-plan.js +113 -0
  207. package/dist/esm/ultramodern-workspace/routes.js +8 -142
  208. package/dist/esm/ultramodern-workspace/shared-patches.js +6 -0
  209. package/dist/esm/ultramodern-workspace/tooling-command-catalog.js +100 -0
  210. package/dist/esm/ultramodern-workspace/tsconfigs.js +136 -0
  211. package/dist/esm/ultramodern-workspace/versions.js +6 -4
  212. package/dist/esm/ultramodern-workspace/workspace-script-plan.js +110 -0
  213. package/dist/esm/ultramodern-workspace/workspace-scripts.js +88 -65
  214. package/dist/esm/ultramodern-workspace/workspace-validation-contract.js +59 -0
  215. package/dist/esm/ultramodern-workspace/write-app.js +90 -0
  216. package/dist/esm/ultramodern-workspace/write-workspace.js +11 -60
  217. package/dist/esm/ultramodern-workspace/zerops.js +65 -0
  218. package/dist/esm-node/cli/flags.js +229 -0
  219. package/dist/esm-node/cli/help.js +66 -0
  220. package/dist/esm-node/cli/package-source.js +120 -0
  221. package/dist/esm-node/cli/project-setup.js +82 -0
  222. package/dist/esm-node/cli/prompts.js +64 -0
  223. package/dist/esm-node/index.js +6 -559
  224. package/dist/esm-node/ultramodern-tooling/commands/cloudflare-output-verify.js +85 -0
  225. package/dist/esm-node/ultramodern-tooling/commands/context.js +67 -0
  226. package/dist/esm-node/ultramodern-tooling/commands/mf-types.js +18 -0
  227. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +107 -0
  228. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +12 -0
  229. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.js +39 -0
  230. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.js +11 -0
  231. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +15 -0
  232. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +13 -0
  233. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.js +84 -0
  234. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.js +17 -0
  235. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +45 -0
  236. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.js +13 -0
  237. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.js +8 -0
  238. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.js +16 -0
  239. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/help.js +17 -0
  240. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/install.js +15 -0
  241. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/io.js +70 -0
  242. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +176 -0
  243. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-source.js +39 -0
  244. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +77 -0
  245. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +106 -0
  246. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +17 -0
  247. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect.js +101 -0
  248. package/dist/esm-node/ultramodern-tooling/commands/options.js +19 -0
  249. package/dist/esm-node/ultramodern-tooling/commands/routes-generate.js +75 -0
  250. package/dist/esm-node/ultramodern-tooling/commands/skills.js +12 -0
  251. package/dist/esm-node/ultramodern-tooling/commands/sync-delivery-unit.js +2 -0
  252. package/dist/esm-node/ultramodern-tooling/commands/validate.js +12 -0
  253. package/dist/esm-node/ultramodern-tooling/commands.js +22 -468
  254. package/dist/esm-node/ultramodern-tooling/config/constants.js +5 -0
  255. package/dist/esm-node/ultramodern-tooling/config/index.js +8 -0
  256. package/dist/esm-node/ultramodern-tooling/config/json.js +11 -0
  257. package/dist/esm-node/ultramodern-tooling/config/load.js +14 -0
  258. package/dist/esm-node/ultramodern-tooling/config/metadata.js +38 -0
  259. package/dist/esm-node/ultramodern-tooling/config/normalize.js +107 -0
  260. package/dist/esm-node/ultramodern-tooling/config/synthesize.js +109 -0
  261. package/dist/esm-node/ultramodern-tooling/config/types.js +1 -0
  262. package/dist/esm-node/ultramodern-tooling/config.js +1 -120
  263. package/dist/esm-node/ultramodern-workspace/add-vertical/constants.js +6 -0
  264. package/dist/esm-node/ultramodern-workspace/add-vertical/execute.js +109 -0
  265. package/dist/esm-node/ultramodern-workspace/add-vertical/plan.js +185 -0
  266. package/dist/esm-node/ultramodern-workspace/add-vertical/preflight.js +123 -0
  267. package/dist/esm-node/ultramodern-workspace/add-vertical/shell-files.js +60 -0
  268. package/dist/esm-node/ultramodern-workspace/add-vertical/topology.js +90 -0
  269. package/dist/esm-node/ultramodern-workspace/add-vertical/workspace-state.js +44 -0
  270. package/dist/esm-node/ultramodern-workspace/add-vertical.js +6 -544
  271. package/dist/esm-node/ultramodern-workspace/api/checkout-cart.js +87 -0
  272. package/dist/esm-node/ultramodern-workspace/api/client.js +178 -0
  273. package/dist/esm-node/ultramodern-workspace/api/contracts.js +173 -0
  274. package/dist/esm-node/ultramodern-workspace/api/names.js +34 -0
  275. package/dist/esm-node/ultramodern-workspace/api/service.js +180 -0
  276. package/dist/esm-node/ultramodern-workspace/api/shared.js +209 -0
  277. package/dist/esm-node/ultramodern-workspace/api.js +5 -984
  278. package/dist/esm-node/ultramodern-workspace/app-files.js +11 -29
  279. package/dist/esm-node/ultramodern-workspace/backend-federation.js +232 -0
  280. package/dist/esm-node/ultramodern-workspace/bridge-config/cli.js +31 -0
  281. package/dist/esm-node/ultramodern-workspace/bridge-config/defaults.js +6 -0
  282. package/dist/esm-node/ultramodern-workspace/bridge-config/gates.js +53 -0
  283. package/dist/esm-node/ultramodern-workspace/bridge-config/index.js +4 -0
  284. package/dist/esm-node/ultramodern-workspace/bridge-config/normalize.js +31 -0
  285. package/dist/esm-node/ultramodern-workspace/bridge-config/schema.js +32 -0
  286. package/dist/esm-node/ultramodern-workspace/bridge-config/shared.js +52 -0
  287. package/dist/esm-node/ultramodern-workspace/bridge-config/validation.js +28 -0
  288. package/dist/esm-node/ultramodern-workspace/bridge-config/workspace-packages.js +68 -0
  289. package/dist/esm-node/ultramodern-workspace/bridge-config.js +1 -270
  290. package/dist/esm-node/ultramodern-workspace/contracts.js +24 -8
  291. package/dist/esm-node/ultramodern-workspace/delivery-unit-sync.js +111 -0
  292. package/dist/esm-node/ultramodern-workspace/delivery-unit.js +22 -0
  293. package/dist/esm-node/ultramodern-workspace/demo-components.js +47 -189
  294. package/dist/esm-node/ultramodern-workspace/descriptors.js +25 -2
  295. package/dist/esm-node/ultramodern-workspace/effect-diagnostics.js +77 -0
  296. package/dist/esm-node/ultramodern-workspace/fs-io.js +24 -2
  297. package/dist/esm-node/ultramodern-workspace/index.js +1 -0
  298. package/dist/esm-node/ultramodern-workspace/mf-validation/constants.js +20 -0
  299. package/dist/esm-node/ultramodern-workspace/mf-validation/discovery.js +29 -0
  300. package/dist/esm-node/ultramodern-workspace/mf-validation/inspect.js +46 -0
  301. package/dist/esm-node/ultramodern-workspace/mf-validation/object-literal.js +145 -0
  302. package/dist/esm-node/ultramodern-workspace/mf-validation/path-utils.js +90 -0
  303. package/dist/esm-node/ultramodern-workspace/mf-validation/syntax.js +155 -0
  304. package/dist/esm-node/ultramodern-workspace/mf-validation/types.js +1 -0
  305. package/dist/esm-node/ultramodern-workspace/mf-validation/validate.js +58 -0
  306. package/dist/esm-node/ultramodern-workspace/mf-validation.js +3 -516
  307. package/dist/esm-node/ultramodern-workspace/module-federation/config.js +205 -0
  308. package/dist/esm-node/ultramodern-workspace/module-federation/index.js +5 -0
  309. package/dist/esm-node/ultramodern-workspace/module-federation/reexport-module.js +30 -0
  310. package/dist/esm-node/ultramodern-workspace/module-federation/remote-refs.js +65 -0
  311. package/dist/esm-node/ultramodern-workspace/module-federation/shared-config.js +13 -0
  312. package/dist/esm-node/ultramodern-workspace/module-federation.js +2 -458
  313. package/dist/esm-node/ultramodern-workspace/package-json.js +18 -245
  314. package/dist/esm-node/ultramodern-workspace/pnpm-workspace-policy-plan.js +114 -0
  315. package/dist/esm-node/ultramodern-workspace/routes.js +8 -142
  316. package/dist/esm-node/ultramodern-workspace/shared-patches.js +7 -0
  317. package/dist/esm-node/ultramodern-workspace/tooling-command-catalog.js +101 -0
  318. package/dist/esm-node/ultramodern-workspace/tsconfigs.js +137 -0
  319. package/dist/esm-node/ultramodern-workspace/versions.js +6 -4
  320. package/dist/esm-node/ultramodern-workspace/workspace-script-plan.js +111 -0
  321. package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +88 -65
  322. package/dist/esm-node/ultramodern-workspace/workspace-validation-contract.js +60 -0
  323. package/dist/esm-node/ultramodern-workspace/write-app.js +91 -0
  324. package/dist/esm-node/ultramodern-workspace/write-workspace.js +11 -60
  325. package/dist/esm-node/ultramodern-workspace/zerops.js +66 -0
  326. package/dist/types/cli/flags.d.ts +30 -0
  327. package/dist/types/cli/help.d.ts +2 -0
  328. package/dist/types/cli/package-source.d.ts +15 -0
  329. package/dist/types/cli/project-setup.d.ts +8 -0
  330. package/dist/types/cli/prompts.d.ts +6 -0
  331. package/dist/types/ultramodern-tooling/commands/cloudflare-output-verify.d.ts +2 -0
  332. package/dist/types/ultramodern-tooling/commands/context.d.ts +11 -0
  333. package/dist/types/ultramodern-tooling/commands/mf-types.d.ts +2 -0
  334. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.d.ts +4 -0
  335. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.d.ts +4 -0
  336. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.d.ts +1 -0
  337. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.d.ts +3 -0
  338. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.d.ts +3 -0
  339. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.d.ts +3 -0
  340. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.d.ts +2 -0
  341. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.d.ts +4 -0
  342. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.d.ts +3 -0
  343. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.d.ts +3 -0
  344. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.d.ts +7 -0
  345. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.d.ts +3 -0
  346. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/help.d.ts +1 -0
  347. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/install.d.ts +2 -0
  348. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/io.d.ts +14 -0
  349. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.d.ts +9 -0
  350. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/package-source.d.ts +3 -0
  351. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.d.ts +4 -0
  352. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.d.ts +25 -0
  353. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.d.ts +9 -0
  354. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect.d.ts +2 -0
  355. package/dist/types/ultramodern-tooling/commands/options.d.ts +2 -0
  356. package/dist/types/ultramodern-tooling/commands/routes-generate.d.ts +2 -0
  357. package/dist/types/ultramodern-tooling/commands/skills.d.ts +2 -0
  358. package/dist/types/ultramodern-tooling/commands/sync-delivery-unit.d.ts +1 -0
  359. package/dist/types/ultramodern-tooling/commands/validate.d.ts +2 -0
  360. package/dist/types/ultramodern-tooling/config/constants.d.ts +3 -0
  361. package/dist/types/ultramodern-tooling/config/index.d.ts +7 -0
  362. package/dist/types/ultramodern-tooling/config/json.d.ts +2 -0
  363. package/dist/types/ultramodern-tooling/config/load.d.ts +2 -0
  364. package/dist/types/ultramodern-tooling/config/metadata.d.ts +4 -0
  365. package/dist/types/ultramodern-tooling/config/normalize.d.ts +5 -0
  366. package/dist/types/ultramodern-tooling/config/synthesize.d.ts +5 -0
  367. package/dist/types/ultramodern-tooling/config/types.d.ts +41 -0
  368. package/dist/types/ultramodern-tooling/config.d.ts +1 -43
  369. package/dist/types/ultramodern-workspace/add-vertical/constants.d.ts +4 -0
  370. package/dist/types/ultramodern-workspace/add-vertical/execute.d.ts +2 -0
  371. package/dist/types/ultramodern-workspace/add-vertical/plan.d.ts +7 -0
  372. package/dist/types/ultramodern-workspace/add-vertical/preflight.d.ts +28 -0
  373. package/dist/types/ultramodern-workspace/add-vertical/shell-files.d.ts +6 -0
  374. package/dist/types/ultramodern-workspace/add-vertical/topology.d.ts +9 -0
  375. package/dist/types/ultramodern-workspace/add-vertical/workspace-state.d.ts +8 -0
  376. package/dist/types/ultramodern-workspace/add-vertical.d.ts +7 -39
  377. package/dist/types/ultramodern-workspace/api/checkout-cart.d.ts +33 -0
  378. package/dist/types/ultramodern-workspace/api/client.d.ts +6 -0
  379. package/dist/types/ultramodern-workspace/api/contracts.d.ts +15 -0
  380. package/dist/types/ultramodern-workspace/api/names.d.ts +41 -0
  381. package/dist/types/ultramodern-workspace/api/service.d.ts +6 -0
  382. package/dist/types/ultramodern-workspace/api/shared.d.ts +10 -0
  383. package/dist/types/ultramodern-workspace/api.d.ts +5 -73
  384. package/dist/types/ultramodern-workspace/backend-federation.d.ts +11 -0
  385. package/dist/types/ultramodern-workspace/bridge-config/cli.d.ts +3 -0
  386. package/dist/types/ultramodern-workspace/bridge-config/defaults.d.ts +1 -0
  387. package/dist/types/ultramodern-workspace/bridge-config/gates.d.ts +3 -0
  388. package/dist/types/ultramodern-workspace/bridge-config/index.d.ts +4 -0
  389. package/dist/types/ultramodern-workspace/bridge-config/normalize.d.ts +2 -0
  390. package/dist/types/ultramodern-workspace/bridge-config/schema.d.ts +61 -0
  391. package/dist/types/ultramodern-workspace/bridge-config/shared.d.ts +12 -0
  392. package/dist/types/ultramodern-workspace/bridge-config/validation.d.ts +3 -0
  393. package/dist/types/ultramodern-workspace/bridge-config/workspace-packages.d.ts +3 -0
  394. package/dist/types/ultramodern-workspace/bridge-config.d.ts +1 -64
  395. package/dist/types/ultramodern-workspace/contracts.d.ts +1 -1
  396. package/dist/types/ultramodern-workspace/delivery-unit-sync.d.ts +6 -0
  397. package/dist/types/ultramodern-workspace/delivery-unit.d.ts +8 -0
  398. package/dist/types/ultramodern-workspace/descriptors.d.ts +4 -0
  399. package/dist/types/ultramodern-workspace/effect-diagnostics.d.ts +1 -0
  400. package/dist/types/ultramodern-workspace/index.d.ts +1 -0
  401. package/dist/types/ultramodern-workspace/mf-validation/constants.d.ts +5 -0
  402. package/dist/types/ultramodern-workspace/mf-validation/discovery.d.ts +2 -0
  403. package/dist/types/ultramodern-workspace/mf-validation/inspect.d.ts +5 -0
  404. package/dist/types/ultramodern-workspace/mf-validation/object-literal.d.ts +9 -0
  405. package/dist/types/ultramodern-workspace/mf-validation/path-utils.d.ts +13 -0
  406. package/dist/types/ultramodern-workspace/mf-validation/syntax.d.ts +14 -0
  407. package/dist/types/ultramodern-workspace/mf-validation/types.d.ts +33 -0
  408. package/dist/types/ultramodern-workspace/mf-validation/validate.d.ts +4 -0
  409. package/dist/types/ultramodern-workspace/mf-validation.d.ts +4 -27
  410. package/dist/types/ultramodern-workspace/module-federation/config.d.ts +5 -0
  411. package/dist/types/ultramodern-workspace/module-federation/index.d.ts +4 -0
  412. package/dist/types/ultramodern-workspace/module-federation/reexport-module.d.ts +4 -0
  413. package/dist/types/ultramodern-workspace/module-federation/remote-refs.d.ts +3 -0
  414. package/dist/types/ultramodern-workspace/module-federation/shared-config.d.ts +2 -0
  415. package/dist/types/ultramodern-workspace/module-federation.d.ts +2 -17
  416. package/dist/types/ultramodern-workspace/package-json.d.ts +1 -14
  417. package/dist/types/ultramodern-workspace/pnpm-workspace-policy-plan.d.ts +39 -0
  418. package/dist/types/ultramodern-workspace/shared-patches.d.ts +2 -0
  419. package/dist/types/ultramodern-workspace/tooling-command-catalog.d.ts +18 -0
  420. package/dist/types/ultramodern-workspace/tsconfigs.d.ts +13 -0
  421. package/dist/types/ultramodern-workspace/versions.d.ts +5 -3
  422. package/dist/types/ultramodern-workspace/workspace-script-plan.d.ts +72 -0
  423. package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +13 -0
  424. package/dist/types/ultramodern-workspace/workspace-validation-contract.d.ts +42 -0
  425. package/dist/types/ultramodern-workspace/write-app.d.ts +3 -0
  426. package/dist/types/ultramodern-workspace/write-workspace.d.ts +2 -1
  427. package/dist/types/ultramodern-workspace/zerops.d.ts +2 -0
  428. package/package.json +4 -3
  429. package/template-workspace/.gitignore.handlebars +4 -0
  430. package/template-workspace/README.md.handlebars +18 -15
  431. package/template-workspace/patches/@module-federation__bridge-react@2.6.0.patch +140 -0
  432. package/template-workspace/patches/@module-federation__modern-js-v3@2.6.0.patch +57 -0
  433. package/template-workspace/patches/drizzle-orm-ts7-strict-declarations.patch +452 -0
  434. package/template-workspace/patches/effect-schema-error-type-id.patch +18 -0
  435. package/template-workspace/pnpm-workspace.yaml.handlebars +8 -0
  436. package/template-workspace/scripts/bootstrap-agent-skills.mjs +11 -3
  437. package/templates/workspace/apps/modern.config.shared-module-federation.ts.handlebars +37 -0
  438. package/templates/workspace/apps/modern.config.ts.handlebars +252 -0
  439. package/templates/workspace/apps/shared/src/routes/ultramodern-jsonld.ts.handlebars +119 -0
  440. package/templates/workspace/apps/shared/src/routes/ultramodern-route-metadata.ts.handlebars +21 -0
  441. package/templates/workspace/apps/shell-super-app/src/routes/[lang]/page.tsx.handlebars +49 -0
  442. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.helpers.tsx.handlebars +79 -0
  443. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.imports.tsx.handlebars +11 -0
  444. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.tsx.handlebars +46 -0
  445. package/templates/workspace/packages/shared-design-tokens/tokens.css.handlebars +7 -0
  446. package/templates/workspace/postcss.config.mjs.handlebars +5 -0
  447. package/templates/workspace/tailwind.config.ts.handlebars +3 -0
  448. package/templates/workspace/verticals/server/checkout-cart-handlers.ts.handlebars +49 -0
  449. package/templates/workspace/verticals/server/checkout-cart-state.ts.handlebars +23 -0
  450. package/templates/workspace/verticals/shared/api.checkout-cart-contract-fields.ts.handlebars +1 -0
  451. package/templates/workspace/verticals/shared/api.checkout-cart-endpoints.ts.handlebars +23 -0
  452. package/templates/workspace/verticals/shared/api.checkout-cart-operation-contexts.ts.handlebars +25 -0
  453. package/templates/workspace/verticals/shared/api.checkout-cart-schemas.ts.handlebars +48 -0
  454. package/templates/workspace/verticals/src/api/checkout-cart-client-exports.ts.handlebars +70 -0
  455. package/templates/workspace-scripts/check-ultramodern-api-boundaries.mts +40 -2
  456. package/templates/workspace-scripts/generate-node-backend-federation.mjs +299 -0
  457. package/templates/workspace-scripts/materialize-zerops-runtime.mjs +448 -0
  458. package/templates/workspace-scripts/proof-cloudflare-version.mjs +237 -9
  459. package/templates/workspace-scripts/proof-node-backend-federation.mjs +760 -0
  460. package/templates/workspace-scripts/ultramodern-cloudflare-proof.mjs +188 -2
  461. package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +476 -26
@@ -1,59 +1,33 @@
1
1
  import "node:module";
2
2
  import { appHasApi, remoteDependencyAlias, resolveApiStem, shellApp } from "./descriptors.js";
3
+ import { renderFileTemplate } from "./fs-io.js";
3
4
  import { createTw, packageName, tailwindPrefixForApp, toPascalCase } from "./naming.js";
4
5
  function createShellPage(remotes = []) {
5
6
  const tw = createTw(tailwindPrefixForApp(shellApp));
6
7
  const remoteCount = String(remotes.length);
7
- return `import { Link, useModernI18n } from '@modern-js/plugin-i18n/runtime';
8
- import ShellFrame from '../shell-frame';
9
- import { UltramodernRouteHead } from '../ultramodern-route-head';
10
- import { VerticalShowcase } from '../vertical-components';
11
- import { ultramodernUiMarker } from '../../ultramodern-build';
12
-
13
- export default function ShellHome() {
14
- const { t } = useModernI18n();
15
-
16
- return (
17
- <ShellFrame>
18
- <UltramodernRouteHead />
19
- <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')}">
20
- <div className="${tw('min-w-0')}">
21
- <p className="${tw('text-xs font-black uppercase tracking-[0.18em] text-emerald-800')}">{t('shell.hero.eyebrow')}</p>
22
- <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>
23
- <p className="${tw('mt-5 max-w-2xl text-lg leading-8 text-stone-600')}">{t('shell.hero.lede')}</p>
24
- <div className="${tw('mt-7 flex flex-wrap gap-3')}">
25
- <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="/">
26
- {t('shell.hero.primary')}
27
- </Link>
28
- <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')}">
29
- {t('shell.hero.secondary')}
30
- </span>
31
- </div>
32
- </div>
33
- <div className="${tw('rounded-3xl bg-white/90 p-6 shadow-2xl shadow-stone-900/15')}">
34
- <div className="${tw('grid gap-4 sm:grid-cols-2')}">
35
- <article className="${tw('rounded-2xl bg-emerald-50 p-5')}">
36
- <span className="${tw('text-sm font-black uppercase tracking-[0.16em] text-emerald-800')}">{t('shell.hero.cardOneKicker')}</span>
37
- <strong className="${tw('mt-3 block text-3xl font-black text-stone-950')}">${remoteCount}</strong>
38
- <p className="${tw('mt-2 text-sm font-semibold text-stone-600')}">{t('shell.hero.cardOne')}</p>
39
- </article>
40
- <article className="${tw('rounded-2xl bg-amber-50 p-5')}">
41
- <span className="${tw('text-sm font-black uppercase tracking-[0.16em] text-amber-800')}">{t('shell.hero.cardTwoKicker')}</span>
42
- <strong className="${tw('mt-3 block text-3xl font-black text-stone-950')}">SSR</strong>
43
- <p className="${tw('mt-2 text-sm font-semibold text-stone-600')}">{t('shell.hero.cardTwo')}</p>
44
- </article>
45
- </div>
46
- </div>
47
- </section>
48
- <VerticalShowcase />
49
- <p className="${tw('sr-only')}" data-testid="ultramodern-preset">presetUltramodern workspace</p>
50
- <p className="${tw('sr-only')}" data-build-marker={ultramodernUiMarker.build} data-testid="ultramodern-ui-marker">
51
- {ultramodernUiMarker.appId}:{ultramodernUiMarker.version}
52
- </p>
53
- </ShellFrame>
54
- );
55
- }
56
- `;
8
+ return renderFileTemplate('workspace/apps/shell-super-app/src/routes/[lang]/page.tsx', {
9
+ value0: tw('mx-auto grid max-w-7xl items-center gap-8 py-8 md:grid-cols-[0.9fr_1.1fr] lg:gap-14'),
10
+ value1: tw('min-w-0'),
11
+ value2: tw('text-xs font-black uppercase tracking-[0.18em] text-emerald-800'),
12
+ value3: tw('mt-3 max-w-3xl text-5xl font-black leading-none tracking-normal text-stone-950 md:text-7xl'),
13
+ value4: tw('mt-5 max-w-2xl text-lg leading-8 text-stone-600'),
14
+ value5: tw('mt-7 flex flex-wrap gap-3'),
15
+ 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'),
16
+ 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'),
17
+ value8: tw('rounded-3xl bg-white/90 p-6 shadow-2xl shadow-stone-900/15'),
18
+ value9: tw('grid gap-4 sm:grid-cols-2'),
19
+ value10: tw('rounded-2xl bg-emerald-50 p-5'),
20
+ value11: tw('text-sm font-black uppercase tracking-[0.16em] text-emerald-800'),
21
+ value12: tw('mt-3 block text-3xl font-black text-stone-950'),
22
+ value13: remoteCount,
23
+ value14: tw('mt-2 text-sm font-semibold text-stone-600'),
24
+ value15: tw('rounded-2xl bg-amber-50 p-5'),
25
+ value16: tw('text-sm font-black uppercase tracking-[0.16em] text-amber-800'),
26
+ value17: tw('mt-3 block text-3xl font-black text-stone-950'),
27
+ value18: tw('mt-2 text-sm font-semibold text-stone-600'),
28
+ value19: tw('sr-only'),
29
+ value20: tw('sr-only')
30
+ });
57
31
  }
58
32
  function createShellRemoteComponents(scope, remotes = []) {
59
33
  const tw = createTw(tailwindPrefixForApp(shellApp));
@@ -63,150 +37,34 @@ function createShellRemoteComponents(scope, remotes = []) {
63
37
  const componentName = `${toPascalCase(remote.id)}Widget`;
64
38
  return `const ${componentName} = createHydratedRemote(${componentName}Server, '${remoteDependencyAlias(remote)}/Widget');`;
65
39
  }).join('\n');
66
- const federationImports = widgetRemotes.length > 0 ? `import {
67
- classifyModuleFederationFallback,
68
- createModuleFederationFallbackTelemetry,
69
- emitModuleFederationFallbackTelemetry,
70
- toModuleFederationFallbackAttributes,
71
- } from '@modern-js/runtime/module-federation';
72
- import { createLazyComponent } from '@module-federation/bridge-react';
73
- import { getInstance, loadRemote } from '@module-federation/modern-js-v3/runtime';
74
- import { Suspense, useEffect, useMemo, useState } from 'react';
75
- import type { ComponentType } from 'react';
76
- ${serverImports}
77
- ` : '';
78
- const federationHelpers = widgetRemotes.length > 0 ? `interface RemoteComponentModule {
79
- default: ComponentType;
80
- }
81
-
82
- const loadRemoteComponent = (specifier: string) =>
83
- loadRemote<RemoteComponentModule>(specifier) as Promise<RemoteComponentModule>;
84
-
85
- const createRemoteFallback = (specifier: string) =>
86
- ({ error }: { error: Error }) => {
87
- const { t } = useModernI18n();
88
- const classification = classifyModuleFederationFallback(error);
89
- const telemetryEntry =
90
- typeof window === 'undefined' ? undefined : window.location.href;
91
- const telemetry = createModuleFederationFallbackTelemetry({
92
- appName: '${shellApp.id}',
93
- classification,
94
- ...(telemetryEntry === undefined ? {} : { entry: telemetryEntry }),
95
- error,
96
- eventName: 'mf.client.remote.fallback',
97
- exportName: 'default',
98
- phase: 'load',
99
- remote: specifier,
100
- status: 'degraded',
101
- });
102
-
103
- useEffect(() => {
104
- void emitModuleFederationFallbackTelemetry({
105
- appName: telemetry.appName,
106
- classification,
107
- ...(telemetry.entry === undefined ? {} : { entry: telemetry.entry }),
108
- error,
109
- eventName: telemetry.eventName,
110
- exportName: 'default',
111
- metadata: telemetry.metadata,
112
- phase: telemetry.phase,
113
- remote: specifier,
114
- status: 'degraded',
115
- });
116
- }, [classification, error, telemetry]);
117
-
118
- 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>;
119
- };
120
-
121
- const createHydratedRemote =
122
- (ServerComponent: ComponentType, specifier: string) =>
123
- function HydratedRemote() {
124
- const [hydrated, setHydrated] = useState(false);
125
-
126
- useEffect(() => {
127
- setHydrated(true);
128
- }, []);
129
-
130
- const FederatedComponent = useMemo(() => {
131
- if (!hydrated) {
132
- return null;
133
- }
134
- const instance = getInstance();
135
- if (instance === null || instance === undefined) {
136
- return null;
137
- }
138
- return createLazyComponent({
139
- export: 'default',
140
- fallback: createRemoteFallback(specifier),
141
- instance,
142
- loader: () => loadRemoteComponent(specifier),
143
- loading: <ServerComponent />,
144
- });
145
- }, [hydrated]);
146
-
147
- if (FederatedComponent === null) {
148
- return <ServerComponent />;
149
- }
150
-
151
- return (
152
- <Suspense fallback={<ServerComponent />}>
153
- <FederatedComponent />
154
- </Suspense>
155
- );
156
- };
157
- ` : '';
40
+ const federationImports = widgetRemotes.length > 0 ? renderFileTemplate('workspace/apps/shell-super-app/src/routes/vertical-components.imports.tsx', {
41
+ value0: serverImports
42
+ }) : '';
43
+ const federationHelpers = widgetRemotes.length > 0 ? renderFileTemplate('workspace/apps/shell-super-app/src/routes/vertical-components.helpers.tsx', {
44
+ value0: shellApp.id,
45
+ value1: tw('rounded-xl border border-red-900/20 bg-red-50 px-4 py-3 text-sm font-semibold text-red-900')
46
+ }) : '';
158
47
  const showcaseItems = widgetRemotes.map((remote)=>{
159
48
  const componentName = `${toPascalCase(remote.id)}Widget`;
160
49
  return ` <${componentName} key="${remote.id}" />`;
161
50
  }).join('\n');
162
51
  const remoteCount = String(widgetRemotes.length);
163
- return `${federationImports}import { Link, useModernI18n } from '@modern-js/plugin-i18n/runtime';
164
-
165
- const widgetCount = Number('${remoteCount}');
166
-
167
- ${federationHelpers}
168
- ${hydratedExports}
169
-
170
- export const Header = () => {
171
- const { t } = useModernI18n();
172
-
173
- return (
174
- <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">
175
- <Link className="${tw('whitespace-nowrap text-xl font-black tracking-normal text-stone-950 no-underline')}" to="/">{t('shell.title')}</Link>
176
- </header>
177
- );
178
- };
179
-
180
- export const StatusBadge = () => {
181
- const { t } = useModernI18n();
182
-
183
- return (
184
- <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')}">
185
- {widgetCount} {t('shell.hero.cardOneKicker')}
186
- </span>
187
- );
188
- };
189
-
190
- export const VerticalShowcase = () => {
191
- const { t } = useModernI18n();
192
-
193
- if (widgetCount === 0) {
194
- return (
195
- <section className="${tw('mx-auto mt-12 max-w-7xl rounded-2xl bg-white/90 p-6 shadow-xl shadow-stone-900/10')}">
196
- <p className="${tw('text-lg font-bold text-stone-700')}">{t('shell.hero.empty')}</p>
197
- </section>
198
- );
199
- }
200
-
201
- return (
202
- <section className="${tw('mx-auto mt-12 max-w-7xl')}" data-modern-boundary-id="${shellApp.mfName}">
203
- <div className="${tw('grid gap-4 md:grid-cols-2')}">
204
- ${showcaseItems}
205
- </div>
206
- </section>
207
- );
208
- };
209
- `;
52
+ return renderFileTemplate('workspace/apps/shell-super-app/src/routes/vertical-components.tsx', {
53
+ value0: federationImports,
54
+ value1: remoteCount,
55
+ value2: federationHelpers,
56
+ value3: hydratedExports,
57
+ value4: tw('flex min-w-0 flex-wrap items-center gap-x-8 gap-y-2 md:flex-1'),
58
+ value5: shellApp.mfName,
59
+ value6: tw('whitespace-nowrap text-xl font-black tracking-normal text-stone-950 no-underline'),
60
+ 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'),
61
+ value8: tw('mx-auto mt-12 max-w-7xl rounded-2xl bg-white/90 p-6 shadow-xl shadow-stone-900/10'),
62
+ value9: tw('text-lg font-bold text-stone-700'),
63
+ value10: tw('mx-auto mt-12 max-w-7xl'),
64
+ value11: shellApp.mfName,
65
+ value12: tw('grid gap-4 md:grid-cols-2'),
66
+ value13: showcaseItems
67
+ });
210
68
  }
211
69
  function createRemotePage(app) {
212
70
  const tw = createTw(tailwindPrefixForApp(app));
@@ -108,11 +108,34 @@ function zephyrRemoteDependency(scope, remote) {
108
108
  }
109
109
  function resolveRemoteRefs(app, remotes = []) {
110
110
  const verticalRefs = app.verticalRefs ?? [];
111
- return verticalRefs.map((remoteRef)=>remotes.find((remote)=>remote.id === remoteRef)).filter((remote)=>void 0 !== remote);
111
+ const remotesById = new Map(remotes.map((remote)=>[
112
+ remote.id,
113
+ remote
114
+ ]));
115
+ return verticalRefs.map((remoteRef)=>{
116
+ const remote = remotesById.get(remoteRef);
117
+ if (void 0 === remote) {
118
+ const availableRemotes = remotes.map((remote)=>remote.id).join(', ');
119
+ throw new Error(`Unknown remote vertical reference ${remoteRef} for ${app.id}. Available remotes: ${availableRemotes || 'none'}.`);
120
+ }
121
+ return remote;
122
+ });
112
123
  }
113
124
  function createRemoteManifestEnv(remote) {
114
125
  return `VERTICAL_${toEnvSegment(remote.domain ?? remote.id)}_MF_MANIFEST`;
115
126
  }
127
+ function createBackendFederationManifestEnv(remote) {
128
+ return `VERTICAL_${toEnvSegment(remote.domain ?? remote.id)}_BACKEND_MF_MANIFEST`;
129
+ }
130
+ function createBackendFederationName(app) {
131
+ return `${app.mfName}Backend`;
132
+ }
133
+ function createBackendFederationManifestUrl(app) {
134
+ return `http://localhost:${app.port}/backend-mf-manifest.json`;
135
+ }
136
+ function createBackendFederationContainerEntry(app) {
137
+ return `http://localhost:${app.port}/backendRemoteEntry.mjs`;
138
+ }
116
139
  function createModuleFederationRemoteContracts(app, remotes = []) {
117
140
  return resolveRemoteRefs(app, remotes).map((remote)=>({
118
141
  id: remote.id,
@@ -131,4 +154,4 @@ function createCloudflarePublicUrlEnv(app) {
131
154
  function appI18nNamespace(app) {
132
155
  return 'shell' === app.kind ? 'shell' : app.domain ?? app.id;
133
156
  }
134
- export { ULTRAMODERN_CONFIG_PATH, appHasApi, appI18nNamespace, createCloudflarePublicUrlEnv, createCloudflareWorkerName, createModuleFederationRemoteContracts, createNeutralOwnership, createRemoteManifestEnv, createShellHost, createVerticalDescriptor, remoteDependencyAlias, resolveApiPrefix, resolveApiStem, resolveRemoteRefs, sharedPackages, shellApp, verticalApiApps, zephyrRemoteDependency };
157
+ export { ULTRAMODERN_CONFIG_PATH, appHasApi, appI18nNamespace, createBackendFederationContainerEntry, createBackendFederationManifestEnv, createBackendFederationManifestUrl, createBackendFederationName, createCloudflarePublicUrlEnv, createCloudflareWorkerName, createModuleFederationRemoteContracts, createNeutralOwnership, createRemoteManifestEnv, createShellHost, createVerticalDescriptor, remoteDependencyAlias, resolveApiPrefix, resolveApiStem, resolveRemoteRefs, sharedPackages, shellApp, verticalApiApps, zephyrRemoteDependency };
@@ -0,0 +1,77 @@
1
+ import "node:module";
2
+ const effectDiagnostics = [
3
+ 'anyUnknownInErrorContext',
4
+ 'classSelfMismatch',
5
+ 'duplicatePackage',
6
+ 'effectFnImplicitAny',
7
+ 'floatingEffect',
8
+ 'genericEffectServices',
9
+ 'missingEffectContext',
10
+ 'missingEffectError',
11
+ 'missingLayerContext',
12
+ 'missingReturnYieldStar',
13
+ 'missingStarInYieldEffectGen',
14
+ 'nonObjectEffectServiceType',
15
+ 'outdatedApi',
16
+ 'overriddenSchemaConstructor',
17
+ 'catchUnfailableEffect',
18
+ 'effectFnIife',
19
+ 'effectGenUsesAdapter',
20
+ 'effectInFailure',
21
+ 'effectInVoidSuccess',
22
+ 'globalErrorInEffectCatch',
23
+ 'globalErrorInEffectFailure',
24
+ 'layerMergeAllWithDependencies',
25
+ 'lazyPromiseInEffectSync',
26
+ 'leakingRequirements',
27
+ 'multipleEffectProvide',
28
+ 'returnEffectInGen',
29
+ 'runEffectInsideEffect',
30
+ 'schemaSyncInEffect',
31
+ 'scopeInLayerEffect',
32
+ 'strictEffectProvide',
33
+ 'tryCatchInEffectGen',
34
+ 'unknownInEffectCatch',
35
+ 'asyncFunction',
36
+ 'cryptoRandomUUID',
37
+ 'cryptoRandomUUIDInEffect',
38
+ 'extendsNativeError',
39
+ 'globalConsole',
40
+ 'globalConsoleInEffect',
41
+ 'globalDate',
42
+ 'globalDateInEffect',
43
+ 'globalFetch',
44
+ 'globalFetchInEffect',
45
+ 'globalRandom',
46
+ 'globalRandomInEffect',
47
+ 'globalTimers',
48
+ 'globalTimersInEffect',
49
+ 'instanceOfSchema',
50
+ 'newPromise',
51
+ 'nodeBuiltinImport',
52
+ 'preferSchemaOverJson',
53
+ 'processEnv',
54
+ 'processEnvInEffect',
55
+ 'unsafeEffectTypeAssertion',
56
+ 'catchAllToMapError',
57
+ 'deterministicKeys',
58
+ 'effectDoNotation',
59
+ 'effectFnOpportunity',
60
+ 'effectMapFlatten',
61
+ 'effectMapVoid',
62
+ 'effectSucceedWithVoid',
63
+ 'missedPipeableOpportunity',
64
+ 'missingEffectServiceDependency',
65
+ 'nestedEffectGenYield',
66
+ 'redundantSchemaTagIdentifier',
67
+ 'schemaStructWithTag',
68
+ 'schemaUnionOfLiterals',
69
+ 'serviceNotAsClass',
70
+ 'strictBooleanExpressions',
71
+ 'unnecessaryArrowBlock',
72
+ 'unnecessaryEffectGen',
73
+ 'unnecessaryFailYieldableError',
74
+ 'unnecessaryPipe',
75
+ 'unnecessaryPipeChain'
76
+ ];
77
+ export { effectDiagnostics };
@@ -52,9 +52,31 @@ function renderFileTemplate(relativePath, data) {
52
52
  function assertSafeRelativePath(relativePath) {
53
53
  if (0 === relativePath.length || node_path.isAbsolute(relativePath) || relativePath.split(/[\\/]+/).includes('..')) throw new Error(`Unsafe workspace template path: ${relativePath}`);
54
54
  }
55
- function ensureInsideRoot(root, targetPath) {
55
+ function isPathInsideRoot(root, targetPath) {
56
56
  const relativePath = node_path.relative(root, targetPath);
57
- if (relativePath.startsWith('..') || node_path.isAbsolute(relativePath)) throw new Error(`Refusing to write outside workspace root: ${targetPath}`);
57
+ return '' === relativePath || !relativePath.startsWith('..') && !node_path.isAbsolute(relativePath);
58
+ }
59
+ function findExistingAncestor(targetPath) {
60
+ let currentPath = targetPath;
61
+ while(!node_fs.existsSync(currentPath)){
62
+ const parentPath = node_path.dirname(currentPath);
63
+ if (parentPath === currentPath) return;
64
+ currentPath = parentPath;
65
+ }
66
+ return currentPath;
67
+ }
68
+ function ensureInsideRoot(root, targetPath) {
69
+ const absoluteRoot = node_path.resolve(root);
70
+ const absoluteTargetPath = node_path.resolve(targetPath);
71
+ if (!isPathInsideRoot(absoluteRoot, absoluteTargetPath)) throw new Error(`Refusing to write outside workspace root: ${targetPath}`);
72
+ if (!node_fs.existsSync(absoluteRoot)) return;
73
+ const existingAncestor = findExistingAncestor(absoluteTargetPath);
74
+ if (!existingAncestor) return;
75
+ const rootRealPath = node_fs.realpathSync.native(absoluteRoot);
76
+ const ancestorRealPath = node_fs.realpathSync.native(existingAncestor);
77
+ const unresolvedRelativePath = node_path.relative(existingAncestor, absoluteTargetPath);
78
+ const resolvedTargetPath = node_path.resolve(ancestorRealPath, unresolvedRelativePath);
79
+ if (!isPathInsideRoot(rootRealPath, resolvedTargetPath)) throw new Error(`Refusing to write outside workspace root: ${targetPath}`);
58
80
  }
59
81
  function writeFile(targetDir, relativePath, content) {
60
82
  assertSafeRelativePath(relativePath);
@@ -1,5 +1,6 @@
1
1
  import "node:module";
2
2
  export { addUltramodernVertical, planUltramodernVertical } from "./add-vertical.js";
3
3
  export { normalizeUltramodernBridgeConfig } from "./bridge-config.js";
4
+ export { SHARED_ULTRAMODERN_WORKSPACE_PATCH_FILES } from "./shared-patches.js";
4
5
  export { ultramodernWorkspaceVersions } from "./versions.js";
5
6
  export { generateUltramodernWorkspace } from "./write-workspace.js";
@@ -0,0 +1,20 @@
1
+ import "node:module";
2
+ const moduleFederationConfigFile = 'module-federation.config.ts';
3
+ const mfTypesArchive = 'dist/@mf-types.zip';
4
+ const generatedMetadataPaths = [
5
+ '.modernjs/ultramodern.json'
6
+ ];
7
+ const defaultAppRootDirs = [
8
+ 'apps',
9
+ 'verticals'
10
+ ];
11
+ const skippedScanDirs = new Set([
12
+ '.git',
13
+ '.modernjs',
14
+ '.nx',
15
+ '.turbo',
16
+ 'coverage',
17
+ 'dist',
18
+ 'node_modules'
19
+ ]);
20
+ export { defaultAppRootDirs, generatedMetadataPaths, mfTypesArchive, moduleFederationConfigFile, skippedScanDirs };
@@ -0,0 +1,29 @@
1
+ import "node:module";
2
+ import node_fs from "node:fs";
3
+ import node_path from "node:path";
4
+ import { defaultAppRootDirs, moduleFederationConfigFile } from "./constants.js";
5
+ import { collectBridgeScanRoots, collectMetadataAppDirs, firstSegment, normalizeRelativePath, readGeneratedMetadata, scanForModuleFederationConfigs } from "./path-utils.js";
6
+ function discoverModuleFederationConfigs(options) {
7
+ const workspaceRoot = node_path.resolve(options.workspaceRoot);
8
+ const appDirs = new Set();
9
+ if (options.appDirs && options.appDirs.length > 0) for (const appDir of options.appDirs)appDirs.add(normalizeRelativePath(appDir));
10
+ else {
11
+ const metadata = readGeneratedMetadata(workspaceRoot);
12
+ const scanRoots = new Set(defaultAppRootDirs);
13
+ for (const metadataEntry of metadata){
14
+ collectMetadataAppDirs(metadataEntry, appDirs);
15
+ collectBridgeScanRoots(metadataEntry, scanRoots);
16
+ }
17
+ for (const appDir of appDirs){
18
+ const segment = firstSegment(appDir);
19
+ if (segment) scanRoots.add(segment);
20
+ }
21
+ if (node_fs.existsSync(node_path.join(workspaceRoot, moduleFederationConfigFile))) appDirs.add('.');
22
+ for (const scanRoot of scanRoots)scanForModuleFederationConfigs(workspaceRoot, scanRoot, appDirs);
23
+ }
24
+ return Array.from(appDirs).sort().map((appDir)=>({
25
+ appDir,
26
+ configPath: node_path.join(workspaceRoot, appDir, moduleFederationConfigFile)
27
+ }));
28
+ }
29
+ export { discoverModuleFederationConfigs };
@@ -0,0 +1,46 @@
1
+ import "node:module";
2
+ import { parseArrayLiteral, parseLiteralString, parseObjectLiteral } from "./object-literal.js";
3
+ import { findCreateModuleFederationConfigObject, findExportDefaultObject } from "./syntax.js";
4
+ function extractExposes(configPath, value) {
5
+ if (void 0 === value) return [];
6
+ const object = parseObjectLiteral(value);
7
+ if (object) {
8
+ if (object.hasSpread) throw new Error(`Cannot statically extract Module Federation exposes from ${configPath}; use a literal exposes object without spreads.`);
9
+ return Array.from(object.properties.keys()).sort();
10
+ }
11
+ const array = parseArrayLiteral(value);
12
+ if (array) return array.sort();
13
+ throw new Error(`Cannot statically extract Module Federation exposes from ${configPath}; use a literal exposes object or string array.`);
14
+ }
15
+ function extractDtsSettings(configPath, value) {
16
+ if (void 0 === value) return {};
17
+ const dts = parseObjectLiteral(value);
18
+ if (!dts || dts.hasSpread) throw new Error(`Cannot statically extract Module Federation DTS settings from ${configPath}; use a literal dts object.`);
19
+ const generateTypes = parseObjectLiteral(dts.properties.get('generateTypes'));
20
+ if (generateTypes?.hasSpread) throw new Error(`Cannot statically extract Module Federation generateTypes settings from ${configPath}; use a literal generateTypes object.`);
21
+ return {
22
+ compilerInstance: parseLiteralString(generateTypes?.properties.get('compilerInstance')),
23
+ tsConfigPath: parseLiteralString(dts.properties.get('tsConfigPath'))
24
+ };
25
+ }
26
+ function hasHostOnlyNoExposesDeclaration(source) {
27
+ return /@?ultramodern-mf\s*:?\s*(?:host-only|no-exposes)\b/iu.test(source);
28
+ }
29
+ function inspectModuleFederationConfigSource(source, appDir, configPath) {
30
+ const configObject = findCreateModuleFederationConfigObject(source) ?? findExportDefaultObject(source);
31
+ if (!configObject) throw new Error(`Cannot statically inspect Module Federation config ${configPath}; export or pass a literal config object.`);
32
+ const properties = parseObjectLiteral(configObject);
33
+ if (!properties) throw new Error(`Cannot statically inspect Module Federation config ${configPath}; expected a literal config object.`);
34
+ if (properties.hasSpread) throw new Error(`Cannot statically inspect Module Federation config ${configPath}; top-level config spreads are not supported.`);
35
+ const exposes = extractExposes(configPath, properties.properties.get('exposes'));
36
+ const hostOnlyNoExposes = hasHostOnlyNoExposesDeclaration(source);
37
+ if (hostOnlyNoExposes && exposes.length > 0) throw new Error(`Module Federation host-only/no-exposes declaration conflicts with actual exposes in ${configPath}.`);
38
+ return {
39
+ appDir,
40
+ configPath,
41
+ dts: extractDtsSettings(configPath, properties.properties.get('dts')),
42
+ exposes,
43
+ hostOnlyNoExposes
44
+ };
45
+ }
46
+ export { extractDtsSettings, extractExposes, hasHostOnlyNoExposesDeclaration, inspectModuleFederationConfigSource };