@bleedingdev/modern-js-create 3.5.0-ultramodern.9 → 3.5.0-ultramodern.90

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 (566) hide show
  1. package/README.md +25 -25
  2. package/bin/run.js +0 -0
  3. package/dist/cjs/cli/flags.cjs +357 -0
  4. package/dist/cjs/cli/help.cjs +108 -0
  5. package/dist/cjs/cli/package-source.cjs +188 -0
  6. package/dist/cjs/cli/project-setup.cjs +162 -0
  7. package/dist/cjs/cli/prompts.cjs +100 -0
  8. package/dist/cjs/index.cjs +35 -585
  9. package/dist/cjs/locale/en.cjs +5 -6
  10. package/dist/cjs/locale/zh.cjs +5 -6
  11. package/dist/cjs/ultramodern-package-source.cjs +0 -32
  12. package/dist/cjs/ultramodern-release-cohort.cjs +206 -0
  13. package/dist/cjs/ultramodern-tooling/commands/cloudflare-output-verify.cjs +136 -0
  14. package/dist/cjs/ultramodern-tooling/commands/context.cjs +131 -0
  15. package/dist/cjs/ultramodern-tooling/commands/mf-types.cjs +55 -0
  16. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.cjs +212 -0
  17. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.cjs +50 -0
  18. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.cjs +87 -0
  19. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.cjs +58 -0
  20. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.cjs +100 -0
  21. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.cjs +100 -0
  22. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.cjs +132 -0
  23. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.cjs +67 -0
  24. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.cjs +206 -0
  25. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.cjs +60 -0
  26. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.cjs +67 -0
  27. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.cjs +67 -0
  28. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.cjs +148 -0
  29. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/help.cjs +54 -0
  30. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/install.cjs +52 -0
  31. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/io.cjs +350 -0
  32. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.cjs +200 -0
  33. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-source.cjs +89 -0
  34. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.cjs +476 -0
  35. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.cjs +376 -0
  36. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.cjs +99 -0
  37. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.cjs +135 -0
  38. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect.cjs +425 -0
  39. package/dist/cjs/ultramodern-tooling/commands/options.cjs +59 -0
  40. package/dist/cjs/ultramodern-tooling/commands/routes-generate.cjs +122 -0
  41. package/dist/cjs/ultramodern-tooling/commands/skills.cjs +49 -0
  42. package/dist/cjs/ultramodern-tooling/commands/sync-delivery-unit.cjs +40 -0
  43. package/dist/cjs/ultramodern-tooling/commands/validate.cjs +53 -0
  44. package/dist/cjs/ultramodern-tooling/commands.cjs +27 -491
  45. package/dist/cjs/ultramodern-tooling/config/constants.cjs +48 -0
  46. package/dist/cjs/ultramodern-tooling/config/index.cjs +104 -0
  47. package/dist/cjs/ultramodern-tooling/config/json.cjs +61 -0
  48. package/dist/cjs/ultramodern-tooling/config/load.cjs +62 -0
  49. package/dist/cjs/ultramodern-tooling/config/metadata.cjs +92 -0
  50. package/dist/cjs/ultramodern-tooling/config/normalize.cjs +236 -0
  51. package/dist/cjs/ultramodern-tooling/config/synthesize.cjs +157 -0
  52. package/dist/cjs/ultramodern-tooling/config/types.cjs +18 -0
  53. package/dist/cjs/ultramodern-tooling/config.cjs +23 -133
  54. package/dist/cjs/ultramodern-workspace/add-shell.cjs +274 -0
  55. package/dist/cjs/ultramodern-workspace/add-vertical/constants.cjs +52 -0
  56. package/dist/cjs/ultramodern-workspace/add-vertical/execute.cjs +183 -0
  57. package/dist/cjs/ultramodern-workspace/add-vertical/plan.cjs +255 -0
  58. package/dist/cjs/ultramodern-workspace/add-vertical/preflight.cjs +256 -0
  59. package/dist/cjs/ultramodern-workspace/add-vertical/shell-files.cjs +122 -0
  60. package/dist/cjs/ultramodern-workspace/add-vertical/topology.cjs +152 -0
  61. package/dist/cjs/ultramodern-workspace/add-vertical/transaction.cjs +327 -0
  62. package/dist/cjs/ultramodern-workspace/add-vertical/workspace-state.cjs +137 -0
  63. package/dist/cjs/ultramodern-workspace/add-vertical.cjs +22 -571
  64. package/dist/cjs/ultramodern-workspace/api/checkout-cart.cjs +145 -0
  65. package/dist/cjs/ultramodern-workspace/api/client.cjs +224 -0
  66. package/dist/cjs/ultramodern-workspace/api/contracts.cjs +251 -0
  67. package/dist/cjs/ultramodern-workspace/api/names.cjs +98 -0
  68. package/dist/cjs/ultramodern-workspace/api/rpc.cjs +264 -0
  69. package/dist/cjs/ultramodern-workspace/api/service.cjs +252 -0
  70. package/dist/cjs/ultramodern-workspace/api/shared.cjs +270 -0
  71. package/dist/cjs/ultramodern-workspace/api.cjs +49 -1005
  72. package/dist/cjs/ultramodern-workspace/app-files.cjs +51 -69
  73. package/dist/cjs/ultramodern-workspace/backend-federation.cjs +346 -0
  74. package/dist/cjs/ultramodern-workspace/bridge-config/cli.cjs +71 -0
  75. package/dist/cjs/ultramodern-workspace/bridge-config/defaults.cjs +43 -0
  76. package/dist/cjs/ultramodern-workspace/bridge-config/gates.cjs +93 -0
  77. package/dist/cjs/ultramodern-workspace/bridge-config/index.cjs +60 -0
  78. package/dist/cjs/ultramodern-workspace/bridge-config/normalize.cjs +68 -0
  79. package/dist/cjs/ultramodern-workspace/bridge-config/schema.cjs +78 -0
  80. package/dist/cjs/ultramodern-workspace/bridge-config/shared.cjs +110 -0
  81. package/dist/cjs/ultramodern-workspace/bridge-config/validation.cjs +68 -0
  82. package/dist/cjs/ultramodern-workspace/bridge-config/workspace-packages.cjs +108 -0
  83. package/dist/cjs/ultramodern-workspace/bridge-config.cjs +32 -297
  84. package/dist/cjs/ultramodern-workspace/codesmith.cjs +10 -1
  85. package/dist/cjs/ultramodern-workspace/contracts.cjs +80 -26
  86. package/dist/cjs/ultramodern-workspace/delivery-unit-schema/types.cjs +291 -0
  87. package/dist/cjs/ultramodern-workspace/delivery-unit-schema/up-projection.cjs +188 -0
  88. package/dist/cjs/ultramodern-workspace/delivery-unit-stamp.cjs +56 -0
  89. package/dist/cjs/ultramodern-workspace/delivery-unit-sync.cjs +153 -0
  90. package/dist/cjs/ultramodern-workspace/delivery-unit.cjs +75 -0
  91. package/dist/cjs/ultramodern-workspace/demo-components.cjs +474 -205
  92. package/dist/cjs/ultramodern-workspace/descriptors.cjs +101 -16
  93. package/dist/cjs/ultramodern-workspace/effect-diagnostics.cjs +114 -0
  94. package/dist/cjs/ultramodern-workspace/fs-io.cjs +26 -36
  95. package/dist/cjs/ultramodern-workspace/generation-result.cjs +36 -3
  96. package/dist/cjs/ultramodern-workspace/index.cjs +28 -0
  97. package/dist/cjs/ultramodern-workspace/locales.cjs +3 -17
  98. package/dist/cjs/ultramodern-workspace/mf-validation/constants.cjs +69 -0
  99. package/dist/cjs/ultramodern-workspace/mf-validation/discovery.cjs +77 -0
  100. package/dist/cjs/ultramodern-workspace/mf-validation/inspect.cjs +84 -0
  101. package/dist/cjs/ultramodern-workspace/mf-validation/object-literal.cjs +188 -0
  102. package/dist/cjs/ultramodern-workspace/mf-validation/path-utils.cjs +165 -0
  103. package/dist/cjs/ultramodern-workspace/mf-validation/syntax.cjs +201 -0
  104. package/dist/cjs/ultramodern-workspace/mf-validation/types.cjs +18 -0
  105. package/dist/cjs/ultramodern-workspace/mf-validation/validate.cjs +112 -0
  106. package/dist/cjs/ultramodern-workspace/mf-validation.cjs +6 -529
  107. package/dist/cjs/ultramodern-workspace/module-federation/config.cjs +336 -0
  108. package/dist/cjs/ultramodern-workspace/module-federation/index.cjs +73 -0
  109. package/dist/cjs/ultramodern-workspace/module-federation/reexport-module.cjs +111 -0
  110. package/dist/cjs/ultramodern-workspace/module-federation/remote-refs.cjs +106 -0
  111. package/dist/cjs/ultramodern-workspace/module-federation/shared-config.cjs +53 -0
  112. package/dist/cjs/ultramodern-workspace/module-federation.cjs +18 -477
  113. package/dist/cjs/ultramodern-workspace/naming.cjs +1 -7
  114. package/dist/cjs/ultramodern-workspace/overlay-baseline-guard.cjs +408 -0
  115. package/dist/cjs/ultramodern-workspace/overlays.cjs +39 -5
  116. package/dist/cjs/ultramodern-workspace/package-json.cjs +54 -301
  117. package/dist/cjs/ultramodern-workspace/package-source.cjs +11 -2
  118. package/dist/cjs/ultramodern-workspace/policy.cjs +801 -24
  119. package/dist/cjs/ultramodern-workspace/public-surface.cjs +1 -22
  120. package/dist/cjs/ultramodern-workspace/routes.cjs +8 -157
  121. package/dist/cjs/ultramodern-workspace/shared-patches.cjs +41 -0
  122. package/dist/cjs/ultramodern-workspace/shells.cjs +151 -0
  123. package/dist/cjs/ultramodern-workspace/tooling-command-catalog.cjs +147 -0
  124. package/dist/cjs/ultramodern-workspace/tsconfigs.cjs +200 -0
  125. package/dist/cjs/ultramodern-workspace/types.cjs +27 -0
  126. package/dist/cjs/ultramodern-workspace/versions.cjs +52 -37
  127. package/dist/cjs/ultramodern-workspace/workspace-script-plan.cjs +174 -0
  128. package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +118 -88
  129. package/dist/cjs/ultramodern-workspace/workspace-validation-contract.cjs +642 -0
  130. package/dist/cjs/ultramodern-workspace/write-app.cjs +148 -0
  131. package/dist/cjs/ultramodern-workspace/write-workspace.cjs +45 -67
  132. package/dist/cjs/ultramodern-workspace/zerops.cjs +108 -0
  133. package/dist/esm/cli/flags.js +262 -0
  134. package/dist/esm/cli/help.js +67 -0
  135. package/dist/esm/cli/package-source.js +124 -0
  136. package/dist/esm/cli/project-setup.js +105 -0
  137. package/dist/esm/cli/prompts.js +51 -0
  138. package/dist/esm/index.js +19 -565
  139. package/dist/esm/locale/en.js +5 -6
  140. package/dist/esm/locale/zh.js +5 -6
  141. package/dist/esm/ultramodern-package-source.js +1 -24
  142. package/dist/esm/ultramodern-release-cohort.js +133 -0
  143. package/dist/esm/ultramodern-tooling/commands/cloudflare-output-verify.js +88 -0
  144. package/dist/esm/ultramodern-tooling/commands/context.js +66 -0
  145. package/dist/esm/ultramodern-tooling/commands/mf-types.js +17 -0
  146. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +154 -0
  147. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +12 -0
  148. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.js +38 -0
  149. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.js +10 -0
  150. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +45 -0
  151. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +51 -0
  152. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.js +83 -0
  153. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.js +16 -0
  154. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +157 -0
  155. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.js +12 -0
  156. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.js +7 -0
  157. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.js +15 -0
  158. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.js +97 -0
  159. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/help.js +16 -0
  160. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/install.js +14 -0
  161. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/io.js +285 -0
  162. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +156 -0
  163. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-source.js +51 -0
  164. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +417 -0
  165. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +329 -0
  166. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +24 -0
  167. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.js +80 -0
  168. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect.js +376 -0
  169. package/dist/esm/ultramodern-tooling/commands/options.js +18 -0
  170. package/dist/esm/ultramodern-tooling/commands/routes-generate.js +74 -0
  171. package/dist/esm/ultramodern-tooling/commands/skills.js +11 -0
  172. package/dist/esm/ultramodern-tooling/commands/sync-delivery-unit.js +1 -0
  173. package/dist/esm/ultramodern-tooling/commands/validate.js +15 -0
  174. package/dist/esm/ultramodern-tooling/commands.js +23 -482
  175. package/dist/esm/ultramodern-tooling/config/constants.js +4 -0
  176. package/dist/esm/ultramodern-tooling/config/index.js +7 -0
  177. package/dist/esm/ultramodern-tooling/config/json.js +10 -0
  178. package/dist/esm/ultramodern-tooling/config/load.js +13 -0
  179. package/dist/esm/ultramodern-tooling/config/metadata.js +37 -0
  180. package/dist/esm/ultramodern-tooling/config/normalize.js +173 -0
  181. package/dist/esm/ultramodern-tooling/config/synthesize.js +108 -0
  182. package/dist/esm/ultramodern-tooling/config/types.js +0 -0
  183. package/dist/esm/ultramodern-tooling/config.js +1 -120
  184. package/dist/esm/ultramodern-workspace/add-shell.js +221 -0
  185. package/dist/esm/ultramodern-workspace/add-vertical/constants.js +5 -0
  186. package/dist/esm/ultramodern-workspace/add-vertical/execute.js +135 -0
  187. package/dist/esm/ultramodern-workspace/add-vertical/plan.js +205 -0
  188. package/dist/esm/ultramodern-workspace/add-vertical/preflight.js +198 -0
  189. package/dist/esm/ultramodern-workspace/add-vertical/shell-files.js +65 -0
  190. package/dist/esm/ultramodern-workspace/add-vertical/topology.js +108 -0
  191. package/dist/esm/ultramodern-workspace/add-vertical/transaction.js +254 -0
  192. package/dist/esm/ultramodern-workspace/add-vertical/workspace-state.js +67 -0
  193. package/dist/esm/ultramodern-workspace/add-vertical.js +6 -544
  194. package/dist/esm/ultramodern-workspace/api/checkout-cart.js +86 -0
  195. package/dist/esm/ultramodern-workspace/api/client.js +183 -0
  196. package/dist/esm/ultramodern-workspace/api/contracts.js +201 -0
  197. package/dist/esm/ultramodern-workspace/api/names.js +33 -0
  198. package/dist/esm/ultramodern-workspace/api/rpc.js +205 -0
  199. package/dist/esm/ultramodern-workspace/api/service.js +211 -0
  200. package/dist/esm/ultramodern-workspace/api/shared.js +226 -0
  201. package/dist/esm/ultramodern-workspace/api.js +6 -984
  202. package/dist/esm/ultramodern-workspace/app-files.js +51 -51
  203. package/dist/esm/ultramodern-workspace/backend-federation.js +281 -0
  204. package/dist/esm/ultramodern-workspace/bridge-config/cli.js +30 -0
  205. package/dist/esm/ultramodern-workspace/bridge-config/defaults.js +5 -0
  206. package/dist/esm/ultramodern-workspace/bridge-config/gates.js +52 -0
  207. package/dist/esm/ultramodern-workspace/bridge-config/index.js +3 -0
  208. package/dist/esm/ultramodern-workspace/bridge-config/normalize.js +30 -0
  209. package/dist/esm/ultramodern-workspace/bridge-config/schema.js +31 -0
  210. package/dist/esm/ultramodern-workspace/bridge-config/shared.js +51 -0
  211. package/dist/esm/ultramodern-workspace/bridge-config/validation.js +27 -0
  212. package/dist/esm/ultramodern-workspace/bridge-config/workspace-packages.js +67 -0
  213. package/dist/esm/ultramodern-workspace/bridge-config.js +1 -270
  214. package/dist/esm/ultramodern-workspace/codesmith.js +10 -1
  215. package/dist/esm/ultramodern-workspace/contracts.js +81 -27
  216. package/dist/esm/ultramodern-workspace/delivery-unit-schema/types.js +235 -0
  217. package/dist/esm/ultramodern-workspace/delivery-unit-schema/up-projection.js +129 -0
  218. package/dist/esm/ultramodern-workspace/delivery-unit-stamp.js +18 -0
  219. package/dist/esm/ultramodern-workspace/delivery-unit-sync.js +104 -0
  220. package/dist/esm/ultramodern-workspace/delivery-unit.js +21 -0
  221. package/dist/esm/ultramodern-workspace/demo-components.js +461 -204
  222. package/dist/esm/ultramodern-workspace/descriptors.js +75 -17
  223. package/dist/esm/ultramodern-workspace/effect-diagnostics.js +76 -0
  224. package/dist/esm/ultramodern-workspace/fs-io.js +27 -18
  225. package/dist/esm/ultramodern-workspace/generation-result.js +33 -3
  226. package/dist/esm/ultramodern-workspace/index.js +4 -0
  227. package/dist/esm/ultramodern-workspace/locales.js +3 -4
  228. package/dist/esm/ultramodern-workspace/mf-validation/constants.js +19 -0
  229. package/dist/esm/ultramodern-workspace/mf-validation/discovery.js +28 -0
  230. package/dist/esm/ultramodern-workspace/mf-validation/inspect.js +46 -0
  231. package/dist/esm/ultramodern-workspace/mf-validation/object-literal.js +144 -0
  232. package/dist/esm/ultramodern-workspace/mf-validation/path-utils.js +89 -0
  233. package/dist/esm/ultramodern-workspace/mf-validation/syntax.js +154 -0
  234. package/dist/esm/ultramodern-workspace/mf-validation/types.js +0 -0
  235. package/dist/esm/ultramodern-workspace/mf-validation/validate.js +57 -0
  236. package/dist/esm/ultramodern-workspace/mf-validation.js +3 -516
  237. package/dist/esm/ultramodern-workspace/module-federation/config.js +289 -0
  238. package/dist/esm/ultramodern-workspace/module-federation/index.js +4 -0
  239. package/dist/esm/ultramodern-workspace/module-federation/reexport-module.js +67 -0
  240. package/dist/esm/ultramodern-workspace/module-federation/remote-refs.js +65 -0
  241. package/dist/esm/ultramodern-workspace/module-federation/shared-config.js +12 -0
  242. package/dist/esm/ultramodern-workspace/module-federation.js +2 -458
  243. package/dist/esm/ultramodern-workspace/naming.js +2 -2
  244. package/dist/esm/ultramodern-workspace/overlay-baseline-guard.js +350 -0
  245. package/dist/esm/ultramodern-workspace/overlays.js +28 -5
  246. package/dist/esm/ultramodern-workspace/package-json.js +48 -283
  247. package/dist/esm/ultramodern-workspace/package-source.js +7 -1
  248. package/dist/esm/ultramodern-workspace/policy.js +784 -10
  249. package/dist/esm/ultramodern-workspace/public-surface.js +2 -2
  250. package/dist/esm/ultramodern-workspace/routes.js +9 -143
  251. package/dist/esm/ultramodern-workspace/shared-patches.js +3 -0
  252. package/dist/esm/ultramodern-workspace/shells.js +92 -0
  253. package/dist/esm/ultramodern-workspace/tooling-command-catalog.js +100 -0
  254. package/dist/esm/ultramodern-workspace/tsconfigs.js +137 -0
  255. package/dist/esm/ultramodern-workspace/types.js +16 -1
  256. package/dist/esm/ultramodern-workspace/versions.js +35 -26
  257. package/dist/esm/ultramodern-workspace/workspace-script-plan.js +124 -0
  258. package/dist/esm/ultramodern-workspace/workspace-scripts.js +115 -85
  259. package/dist/esm/ultramodern-workspace/workspace-validation-contract.js +604 -0
  260. package/dist/esm/ultramodern-workspace/write-app.js +105 -0
  261. package/dist/esm/ultramodern-workspace/write-workspace.js +47 -66
  262. package/dist/esm/ultramodern-workspace/zerops.js +70 -0
  263. package/dist/esm-node/cli/flags.js +263 -0
  264. package/dist/esm-node/cli/help.js +68 -0
  265. package/dist/esm-node/cli/package-source.js +125 -0
  266. package/dist/esm-node/cli/project-setup.js +106 -0
  267. package/dist/esm-node/cli/prompts.js +52 -0
  268. package/dist/esm-node/index.js +19 -565
  269. package/dist/esm-node/locale/en.js +5 -6
  270. package/dist/esm-node/locale/zh.js +5 -6
  271. package/dist/esm-node/ultramodern-package-source.js +1 -24
  272. package/dist/esm-node/ultramodern-release-cohort.js +134 -0
  273. package/dist/esm-node/ultramodern-tooling/commands/cloudflare-output-verify.js +89 -0
  274. package/dist/esm-node/ultramodern-tooling/commands/context.js +67 -0
  275. package/dist/esm-node/ultramodern-tooling/commands/mf-types.js +18 -0
  276. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +155 -0
  277. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +13 -0
  278. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.js +39 -0
  279. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.js +11 -0
  280. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +46 -0
  281. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +52 -0
  282. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.js +84 -0
  283. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.js +17 -0
  284. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +158 -0
  285. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.js +13 -0
  286. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.js +8 -0
  287. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.js +16 -0
  288. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.js +98 -0
  289. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/help.js +17 -0
  290. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/install.js +15 -0
  291. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/io.js +286 -0
  292. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +157 -0
  293. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-source.js +52 -0
  294. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +418 -0
  295. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +330 -0
  296. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +25 -0
  297. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.js +81 -0
  298. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect.js +377 -0
  299. package/dist/esm-node/ultramodern-tooling/commands/options.js +19 -0
  300. package/dist/esm-node/ultramodern-tooling/commands/routes-generate.js +75 -0
  301. package/dist/esm-node/ultramodern-tooling/commands/skills.js +12 -0
  302. package/dist/esm-node/ultramodern-tooling/commands/sync-delivery-unit.js +2 -0
  303. package/dist/esm-node/ultramodern-tooling/commands/validate.js +16 -0
  304. package/dist/esm-node/ultramodern-tooling/commands.js +23 -482
  305. package/dist/esm-node/ultramodern-tooling/config/constants.js +5 -0
  306. package/dist/esm-node/ultramodern-tooling/config/index.js +8 -0
  307. package/dist/esm-node/ultramodern-tooling/config/json.js +11 -0
  308. package/dist/esm-node/ultramodern-tooling/config/load.js +14 -0
  309. package/dist/esm-node/ultramodern-tooling/config/metadata.js +38 -0
  310. package/dist/esm-node/ultramodern-tooling/config/normalize.js +174 -0
  311. package/dist/esm-node/ultramodern-tooling/config/synthesize.js +109 -0
  312. package/dist/esm-node/ultramodern-tooling/config/types.js +1 -0
  313. package/dist/esm-node/ultramodern-tooling/config.js +1 -120
  314. package/dist/esm-node/ultramodern-workspace/add-shell.js +222 -0
  315. package/dist/esm-node/ultramodern-workspace/add-vertical/constants.js +6 -0
  316. package/dist/esm-node/ultramodern-workspace/add-vertical/execute.js +136 -0
  317. package/dist/esm-node/ultramodern-workspace/add-vertical/plan.js +206 -0
  318. package/dist/esm-node/ultramodern-workspace/add-vertical/preflight.js +199 -0
  319. package/dist/esm-node/ultramodern-workspace/add-vertical/shell-files.js +66 -0
  320. package/dist/esm-node/ultramodern-workspace/add-vertical/topology.js +109 -0
  321. package/dist/esm-node/ultramodern-workspace/add-vertical/transaction.js +255 -0
  322. package/dist/esm-node/ultramodern-workspace/add-vertical/workspace-state.js +68 -0
  323. package/dist/esm-node/ultramodern-workspace/add-vertical.js +6 -544
  324. package/dist/esm-node/ultramodern-workspace/api/checkout-cart.js +87 -0
  325. package/dist/esm-node/ultramodern-workspace/api/client.js +184 -0
  326. package/dist/esm-node/ultramodern-workspace/api/contracts.js +202 -0
  327. package/dist/esm-node/ultramodern-workspace/api/names.js +34 -0
  328. package/dist/esm-node/ultramodern-workspace/api/rpc.js +206 -0
  329. package/dist/esm-node/ultramodern-workspace/api/service.js +212 -0
  330. package/dist/esm-node/ultramodern-workspace/api/shared.js +227 -0
  331. package/dist/esm-node/ultramodern-workspace/api.js +6 -984
  332. package/dist/esm-node/ultramodern-workspace/app-files.js +51 -51
  333. package/dist/esm-node/ultramodern-workspace/backend-federation.js +282 -0
  334. package/dist/esm-node/ultramodern-workspace/bridge-config/cli.js +31 -0
  335. package/dist/esm-node/ultramodern-workspace/bridge-config/defaults.js +6 -0
  336. package/dist/esm-node/ultramodern-workspace/bridge-config/gates.js +53 -0
  337. package/dist/esm-node/ultramodern-workspace/bridge-config/index.js +4 -0
  338. package/dist/esm-node/ultramodern-workspace/bridge-config/normalize.js +31 -0
  339. package/dist/esm-node/ultramodern-workspace/bridge-config/schema.js +32 -0
  340. package/dist/esm-node/ultramodern-workspace/bridge-config/shared.js +52 -0
  341. package/dist/esm-node/ultramodern-workspace/bridge-config/validation.js +28 -0
  342. package/dist/esm-node/ultramodern-workspace/bridge-config/workspace-packages.js +68 -0
  343. package/dist/esm-node/ultramodern-workspace/bridge-config.js +1 -270
  344. package/dist/esm-node/ultramodern-workspace/codesmith.js +10 -1
  345. package/dist/esm-node/ultramodern-workspace/contracts.js +81 -27
  346. package/dist/esm-node/ultramodern-workspace/delivery-unit-schema/types.js +236 -0
  347. package/dist/esm-node/ultramodern-workspace/delivery-unit-schema/up-projection.js +130 -0
  348. package/dist/esm-node/ultramodern-workspace/delivery-unit-stamp.js +19 -0
  349. package/dist/esm-node/ultramodern-workspace/delivery-unit-sync.js +105 -0
  350. package/dist/esm-node/ultramodern-workspace/delivery-unit.js +22 -0
  351. package/dist/esm-node/ultramodern-workspace/demo-components.js +461 -204
  352. package/dist/esm-node/ultramodern-workspace/descriptors.js +75 -17
  353. package/dist/esm-node/ultramodern-workspace/effect-diagnostics.js +77 -0
  354. package/dist/esm-node/ultramodern-workspace/fs-io.js +27 -18
  355. package/dist/esm-node/ultramodern-workspace/generation-result.js +33 -3
  356. package/dist/esm-node/ultramodern-workspace/index.js +4 -0
  357. package/dist/esm-node/ultramodern-workspace/locales.js +3 -4
  358. package/dist/esm-node/ultramodern-workspace/mf-validation/constants.js +20 -0
  359. package/dist/esm-node/ultramodern-workspace/mf-validation/discovery.js +29 -0
  360. package/dist/esm-node/ultramodern-workspace/mf-validation/inspect.js +47 -0
  361. package/dist/esm-node/ultramodern-workspace/mf-validation/object-literal.js +145 -0
  362. package/dist/esm-node/ultramodern-workspace/mf-validation/path-utils.js +90 -0
  363. package/dist/esm-node/ultramodern-workspace/mf-validation/syntax.js +155 -0
  364. package/dist/esm-node/ultramodern-workspace/mf-validation/types.js +1 -0
  365. package/dist/esm-node/ultramodern-workspace/mf-validation/validate.js +58 -0
  366. package/dist/esm-node/ultramodern-workspace/mf-validation.js +3 -516
  367. package/dist/esm-node/ultramodern-workspace/module-federation/config.js +290 -0
  368. package/dist/esm-node/ultramodern-workspace/module-federation/index.js +5 -0
  369. package/dist/esm-node/ultramodern-workspace/module-federation/reexport-module.js +68 -0
  370. package/dist/esm-node/ultramodern-workspace/module-federation/remote-refs.js +66 -0
  371. package/dist/esm-node/ultramodern-workspace/module-federation/shared-config.js +13 -0
  372. package/dist/esm-node/ultramodern-workspace/module-federation.js +2 -458
  373. package/dist/esm-node/ultramodern-workspace/naming.js +2 -2
  374. package/dist/esm-node/ultramodern-workspace/overlay-baseline-guard.js +351 -0
  375. package/dist/esm-node/ultramodern-workspace/overlays.js +28 -5
  376. package/dist/esm-node/ultramodern-workspace/package-json.js +48 -283
  377. package/dist/esm-node/ultramodern-workspace/package-source.js +7 -1
  378. package/dist/esm-node/ultramodern-workspace/policy.js +784 -10
  379. package/dist/esm-node/ultramodern-workspace/public-surface.js +2 -2
  380. package/dist/esm-node/ultramodern-workspace/routes.js +9 -143
  381. package/dist/esm-node/ultramodern-workspace/shared-patches.js +4 -0
  382. package/dist/esm-node/ultramodern-workspace/shells.js +93 -0
  383. package/dist/esm-node/ultramodern-workspace/tooling-command-catalog.js +101 -0
  384. package/dist/esm-node/ultramodern-workspace/tsconfigs.js +138 -0
  385. package/dist/esm-node/ultramodern-workspace/types.js +16 -1
  386. package/dist/esm-node/ultramodern-workspace/versions.js +35 -26
  387. package/dist/esm-node/ultramodern-workspace/workspace-script-plan.js +125 -0
  388. package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +115 -85
  389. package/dist/esm-node/ultramodern-workspace/workspace-validation-contract.js +605 -0
  390. package/dist/esm-node/ultramodern-workspace/write-app.js +106 -0
  391. package/dist/esm-node/ultramodern-workspace/write-workspace.js +47 -66
  392. package/dist/esm-node/ultramodern-workspace/zerops.js +71 -0
  393. package/dist/types/cli/flags.d.ts +35 -0
  394. package/dist/types/cli/help.d.ts +2 -0
  395. package/dist/types/cli/package-source.d.ts +15 -0
  396. package/dist/types/cli/project-setup.d.ts +8 -0
  397. package/dist/types/cli/prompts.d.ts +4 -0
  398. package/dist/types/locale/en.d.ts +3 -4
  399. package/dist/types/locale/index.d.ts +6 -8
  400. package/dist/types/locale/zh.d.ts +3 -4
  401. package/dist/types/ultramodern-package-source.d.ts +0 -11
  402. package/dist/types/ultramodern-release-cohort.d.ts +30 -0
  403. package/dist/types/ultramodern-tooling/commands/cloudflare-output-verify.d.ts +2 -0
  404. package/dist/types/ultramodern-tooling/commands/context.d.ts +11 -0
  405. package/dist/types/ultramodern-tooling/commands/mf-types.d.ts +2 -0
  406. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.d.ts +12 -0
  407. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.d.ts +4 -0
  408. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.d.ts +1 -0
  409. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.d.ts +3 -0
  410. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.d.ts +5 -0
  411. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.d.ts +3 -0
  412. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.d.ts +2 -0
  413. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.d.ts +4 -0
  414. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.d.ts +3 -0
  415. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.d.ts +3 -0
  416. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.d.ts +7 -0
  417. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.d.ts +3 -0
  418. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.d.ts +3 -0
  419. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/help.d.ts +1 -0
  420. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/install.d.ts +2 -0
  421. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/io.d.ts +20 -0
  422. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.d.ts +9 -0
  423. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/package-source.d.ts +3 -0
  424. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.d.ts +27 -0
  425. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.d.ts +26 -0
  426. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.d.ts +10 -0
  427. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.d.ts +4 -0
  428. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect.d.ts +2 -0
  429. package/dist/types/ultramodern-tooling/commands/options.d.ts +2 -0
  430. package/dist/types/ultramodern-tooling/commands/routes-generate.d.ts +2 -0
  431. package/dist/types/ultramodern-tooling/commands/skills.d.ts +2 -0
  432. package/dist/types/ultramodern-tooling/commands/sync-delivery-unit.d.ts +1 -0
  433. package/dist/types/ultramodern-tooling/commands/validate.d.ts +2 -0
  434. package/dist/types/ultramodern-tooling/commands.d.ts +1 -1
  435. package/dist/types/ultramodern-tooling/config/constants.d.ts +3 -0
  436. package/dist/types/ultramodern-tooling/config/index.d.ts +7 -0
  437. package/dist/types/ultramodern-tooling/config/json.d.ts +2 -0
  438. package/dist/types/ultramodern-tooling/config/load.d.ts +2 -0
  439. package/dist/types/ultramodern-tooling/config/metadata.d.ts +4 -0
  440. package/dist/types/ultramodern-tooling/config/normalize.d.ts +22 -0
  441. package/dist/types/ultramodern-tooling/config/synthesize.d.ts +5 -0
  442. package/dist/types/ultramodern-tooling/config/types.d.ts +45 -0
  443. package/dist/types/ultramodern-tooling/config.d.ts +1 -43
  444. package/dist/types/ultramodern-workspace/add-shell.d.ts +14 -0
  445. package/dist/types/ultramodern-workspace/add-vertical/constants.d.ts +4 -0
  446. package/dist/types/ultramodern-workspace/add-vertical/execute.d.ts +9 -0
  447. package/dist/types/ultramodern-workspace/add-vertical/plan.d.ts +2 -0
  448. package/dist/types/ultramodern-workspace/add-vertical/preflight.d.ts +42 -0
  449. package/dist/types/ultramodern-workspace/add-vertical/shell-files.d.ts +6 -0
  450. package/dist/types/ultramodern-workspace/add-vertical/topology.d.ts +9 -0
  451. package/dist/types/ultramodern-workspace/add-vertical/transaction.d.ts +80 -0
  452. package/dist/types/ultramodern-workspace/add-vertical/workspace-state.d.ts +15 -0
  453. package/dist/types/ultramodern-workspace/add-vertical.d.ts +7 -39
  454. package/dist/types/ultramodern-workspace/api/checkout-cart.d.ts +33 -0
  455. package/dist/types/ultramodern-workspace/api/client.d.ts +6 -0
  456. package/dist/types/ultramodern-workspace/api/contracts.d.ts +15 -0
  457. package/dist/types/ultramodern-workspace/api/names.d.ts +41 -0
  458. package/dist/types/ultramodern-workspace/api/rpc.d.ts +41 -0
  459. package/dist/types/ultramodern-workspace/api/service.d.ts +6 -0
  460. package/dist/types/ultramodern-workspace/api/shared.d.ts +10 -0
  461. package/dist/types/ultramodern-workspace/api.d.ts +6 -73
  462. package/dist/types/ultramodern-workspace/app-files.d.ts +4 -10
  463. package/dist/types/ultramodern-workspace/backend-federation.d.ts +11 -0
  464. package/dist/types/ultramodern-workspace/bridge-config/cli.d.ts +3 -0
  465. package/dist/types/ultramodern-workspace/bridge-config/defaults.d.ts +1 -0
  466. package/dist/types/ultramodern-workspace/bridge-config/gates.d.ts +3 -0
  467. package/dist/types/ultramodern-workspace/bridge-config/index.d.ts +4 -0
  468. package/dist/types/ultramodern-workspace/bridge-config/normalize.d.ts +2 -0
  469. package/dist/types/ultramodern-workspace/bridge-config/schema.d.ts +61 -0
  470. package/dist/types/ultramodern-workspace/bridge-config/shared.d.ts +12 -0
  471. package/dist/types/ultramodern-workspace/bridge-config/validation.d.ts +3 -0
  472. package/dist/types/ultramodern-workspace/bridge-config/workspace-packages.d.ts +3 -0
  473. package/dist/types/ultramodern-workspace/bridge-config.d.ts +1 -64
  474. package/dist/types/ultramodern-workspace/codesmith.d.ts +12 -6
  475. package/dist/types/ultramodern-workspace/contracts.d.ts +3 -3
  476. package/dist/types/ultramodern-workspace/delivery-unit-schema/types.d.ts +291 -0
  477. package/dist/types/ultramodern-workspace/delivery-unit-schema/up-projection.d.ts +189 -0
  478. package/dist/types/ultramodern-workspace/delivery-unit-stamp.d.ts +3 -0
  479. package/dist/types/ultramodern-workspace/delivery-unit-sync.d.ts +6 -0
  480. package/dist/types/ultramodern-workspace/delivery-unit.d.ts +8 -0
  481. package/dist/types/ultramodern-workspace/demo-components.d.ts +14 -3
  482. package/dist/types/ultramodern-workspace/descriptors.d.ts +27 -3
  483. package/dist/types/ultramodern-workspace/effect-diagnostics.d.ts +1 -0
  484. package/dist/types/ultramodern-workspace/fs-io.d.ts +2 -8
  485. package/dist/types/ultramodern-workspace/generation-result.d.ts +3 -1
  486. package/dist/types/ultramodern-workspace/index.d.ts +6 -1
  487. package/dist/types/ultramodern-workspace/locales.d.ts +1 -133
  488. package/dist/types/ultramodern-workspace/mf-validation/constants.d.ts +5 -0
  489. package/dist/types/ultramodern-workspace/mf-validation/discovery.d.ts +2 -0
  490. package/dist/types/ultramodern-workspace/mf-validation/inspect.d.ts +2 -0
  491. package/dist/types/ultramodern-workspace/mf-validation/object-literal.d.ts +4 -0
  492. package/dist/types/ultramodern-workspace/mf-validation/path-utils.d.ts +11 -0
  493. package/dist/types/ultramodern-workspace/mf-validation/syntax.d.ts +5 -0
  494. package/dist/types/ultramodern-workspace/mf-validation/types.d.ts +33 -0
  495. package/dist/types/ultramodern-workspace/mf-validation/validate.d.ts +4 -0
  496. package/dist/types/ultramodern-workspace/mf-validation.d.ts +4 -27
  497. package/dist/types/ultramodern-workspace/module-federation/config.d.ts +5 -0
  498. package/dist/types/ultramodern-workspace/module-federation/index.d.ts +4 -0
  499. package/dist/types/ultramodern-workspace/module-federation/reexport-module.d.ts +4 -0
  500. package/dist/types/ultramodern-workspace/module-federation/remote-refs.d.ts +3 -0
  501. package/dist/types/ultramodern-workspace/module-federation/shared-config.d.ts +2 -0
  502. package/dist/types/ultramodern-workspace/module-federation.d.ts +2 -17
  503. package/dist/types/ultramodern-workspace/naming.d.ts +0 -2
  504. package/dist/types/ultramodern-workspace/overlay-baseline-guard.d.ts +57 -0
  505. package/dist/types/ultramodern-workspace/package-json.d.ts +2 -17
  506. package/dist/types/ultramodern-workspace/package-source.d.ts +1 -0
  507. package/dist/types/ultramodern-workspace/policy.d.ts +254 -47
  508. package/dist/types/ultramodern-workspace/public-api.d.ts +1 -1
  509. package/dist/types/ultramodern-workspace/public-surface.d.ts +5 -15
  510. package/dist/types/ultramodern-workspace/routes.d.ts +0 -9
  511. package/dist/types/ultramodern-workspace/shared-patches.d.ts +1 -0
  512. package/dist/types/ultramodern-workspace/shells.d.ts +51 -0
  513. package/dist/types/ultramodern-workspace/tooling-command-catalog.d.ts +18 -0
  514. package/dist/types/ultramodern-workspace/tsconfigs.d.ts +13 -0
  515. package/dist/types/ultramodern-workspace/types.d.ts +134 -3
  516. package/dist/types/ultramodern-workspace/versions.d.ts +35 -26
  517. package/dist/types/ultramodern-workspace/workspace-script-plan.d.ts +63 -0
  518. package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +15 -5
  519. package/dist/types/ultramodern-workspace/workspace-validation-contract.d.ts +243 -0
  520. package/dist/types/ultramodern-workspace/write-app.d.ts +4 -0
  521. package/dist/types/ultramodern-workspace/write-workspace.d.ts +3 -3
  522. package/dist/types/ultramodern-workspace/zerops.d.ts +2 -0
  523. package/package.json +15 -13
  524. package/template-workspace/.gitignore.handlebars +8 -0
  525. package/template-workspace/.modernjs/release-cohort.json +208 -0
  526. package/template-workspace/AGENTS.md.handlebars +16 -89
  527. package/template-workspace/README.md.handlebars +17 -16
  528. package/template-workspace/patches/@module-federation__bridge-react@2.8.0.patch +185 -0
  529. package/template-workspace/patches/@module-federation__modern-js-v3@2.8.0.patch +259 -0
  530. package/template-workspace/patches/@tanstack__router-core@1.171.14.patch +123 -0
  531. package/template-workspace/patches/drizzle-orm-ts7-strict-declarations.patch +452 -0
  532. package/template-workspace/patches/effect-schema-error-type-id.patch +18 -0
  533. package/template-workspace/pnpm-workspace.yaml.handlebars +8 -25
  534. package/template-workspace/scripts/bootstrap-agent-skills.mjs +11 -3
  535. package/templates/app/shell-frame.tsx +5 -4
  536. package/templates/workspace/apps/modern.config.shared-module-federation.ts.handlebars +37 -0
  537. package/templates/workspace/apps/modern.config.ts.handlebars +191 -0
  538. package/templates/workspace/apps/shared/src/routes/ultramodern-jsonld.ts.handlebars +119 -0
  539. package/templates/workspace/apps/shared/src/routes/ultramodern-route-metadata.ts.handlebars +21 -0
  540. package/templates/workspace/apps/shell-super-app/src/routes/[lang]/page.tsx.handlebars +49 -0
  541. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.helpers.tsx.handlebars +27 -0
  542. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.imports.tsx.handlebars +4 -0
  543. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.tsx.handlebars +44 -0
  544. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.worker.helpers.tsx.handlebars +17 -0
  545. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.worker.imports.tsx.handlebars +1 -0
  546. package/templates/workspace/packages/shared-design-tokens/tokens.css.handlebars +7 -0
  547. package/templates/workspace/tailwind.config.ts.handlebars +3 -0
  548. package/templates/workspace/verticals/server/checkout-cart-handlers.ts.handlebars +49 -0
  549. package/templates/workspace/verticals/server/checkout-cart-state.ts.handlebars +23 -0
  550. package/templates/workspace/verticals/shared/api.checkout-cart-contract-fields.ts.handlebars +1 -0
  551. package/templates/workspace/verticals/shared/api.checkout-cart-endpoints.ts.handlebars +23 -0
  552. package/templates/workspace/verticals/shared/api.checkout-cart-operation-contexts.ts.handlebars +29 -0
  553. package/templates/workspace/verticals/shared/api.checkout-cart-schemas.ts.handlebars +48 -0
  554. package/templates/workspace/verticals/src/api/checkout-cart-client-exports.ts.handlebars +70 -0
  555. package/templates/workspace-scripts/assert-mf-types.mjs.handlebars +4 -4
  556. package/templates/workspace-scripts/check-ultramodern-api-boundaries.mts +40 -2
  557. package/templates/workspace-scripts/generate-node-backend-federation.mjs +379 -0
  558. package/templates/workspace-scripts/generate-public-surface-assets.mjs +5 -5
  559. package/templates/workspace-scripts/materialize-zerops-runtime.mjs +447 -0
  560. package/templates/workspace-scripts/proof-cloudflare-version.mjs +237 -9
  561. package/templates/workspace-scripts/proof-node-backend-federation.mjs +1223 -0
  562. package/templates/workspace-scripts/proof-workerd-ssr.mts +815 -0
  563. package/templates/workspace-scripts/ultramodern-cloudflare-proof.mjs +188 -2
  564. package/templates/workspace-scripts/ultramodern-typecheck.mjs +6 -46
  565. package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +2436 -258
  566. package/template-workspace/patches/@tanstack__router-core@1.171.13.patch +0 -51
@@ -1,216 +1,197 @@
1
- import { appHasApi, remoteDependencyAlias, resolveApiStem, shellApp } from "./descriptors.js";
1
+ import { appHasApi, appI18nNamespace, distributedSsrExposes, remoteDependencyAlias, resolveApiProtocol, resolveApiStem, resolveRemoteRefs } from "./descriptors.js";
2
+ import { renderFileTemplate } from "./fs-io.js";
2
3
  import { createTw, packageName, tailwindPrefixForApp, toPascalCase } from "./naming.js";
3
- function createShellPage(remotes = []) {
4
- const tw = createTw(tailwindPrefixForApp(shellApp));
5
- 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();
4
+ function createFederatedI18nSetup(app, localeRoot) {
5
+ const namespace = appI18nNamespace(app);
6
+ return `import { FederatedI18nBoundary, useModernI18n } from '@modern-js/plugin-i18n/runtime';
7
+ import csResource from '${localeRoot}/cs/${namespace}.json';
8
+ import enResource from '${localeRoot}/en/${namespace}.json';
14
9
 
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
- );
10
+ const federatedI18nLanguages = ['en', 'cs'];
11
+ const federatedI18nResources = {
12
+ cs: { ${JSON.stringify(namespace)}: csResource },
13
+ en: { ${JSON.stringify(namespace)}: enResource },
14
+ };`;
54
15
  }
55
- `;
16
+ function createFederatedI18nBoundary(namespace, content) {
17
+ return `<FederatedI18nBoundary
18
+ defaultNamespace="${namespace}"
19
+ fallbackLanguage="en"
20
+ resources={federatedI18nResources}
21
+ supportedLanguages={federatedI18nLanguages}
22
+ >
23
+ ${content}
24
+ </FederatedI18nBoundary>`;
56
25
  }
57
- function createShellRemoteComponents(scope, remotes = []) {
58
- const tw = createTw(tailwindPrefixForApp(shellApp));
26
+ function createShellPage(shell, remotes = []) {
27
+ const tw = createTw(tailwindPrefixForApp(shell));
28
+ const remoteCount = String(remotes.length);
29
+ return renderFileTemplate('workspace/apps/shell-super-app/src/routes/[lang]/page.tsx', {
30
+ value0: tw('mx-auto grid max-w-7xl items-center gap-8 py-8 md:grid-cols-[0.9fr_1.1fr] lg:gap-14'),
31
+ value1: tw('min-w-0'),
32
+ value2: tw('text-xs font-black uppercase tracking-[0.18em] text-emerald-800'),
33
+ value3: tw('mt-3 max-w-3xl text-5xl font-black leading-none tracking-normal text-stone-950 md:text-7xl'),
34
+ value4: tw('mt-5 max-w-2xl text-lg leading-8 text-stone-600'),
35
+ value5: tw('mt-7 flex flex-wrap gap-3'),
36
+ 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'),
37
+ 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'),
38
+ value8: tw('rounded-3xl bg-white/90 p-6 shadow-2xl shadow-stone-900/15'),
39
+ value9: tw('grid gap-4 sm:grid-cols-2'),
40
+ value10: tw('rounded-2xl bg-emerald-50 p-5'),
41
+ value11: tw('text-sm font-black uppercase tracking-[0.16em] text-emerald-800'),
42
+ value12: tw('mt-3 block text-3xl font-black text-stone-950'),
43
+ value13: remoteCount,
44
+ value14: tw('mt-2 text-sm font-semibold text-stone-600'),
45
+ value15: tw('rounded-2xl bg-amber-50 p-5'),
46
+ value16: tw('text-sm font-black uppercase tracking-[0.16em] text-amber-800'),
47
+ value17: tw('mt-3 block text-3xl font-black text-stone-950'),
48
+ value18: tw('mt-2 text-sm font-semibold text-stone-600'),
49
+ value19: tw('sr-only'),
50
+ value20: tw('sr-only')
51
+ });
52
+ }
53
+ function createShellRemoteComponentsSource(shell, remotes = [], worker = false) {
54
+ const tw = createTw(tailwindPrefixForApp(shell));
59
55
  const widgetRemotes = remotes.filter((remote)=>Object.hasOwn(remote.exposes ?? {}, './Widget'));
60
- const serverImports = widgetRemotes.map((remote)=>`import ${toPascalCase(remote.id)}WidgetServer from '${packageName(scope, remote.packageSuffix)}/Widget';`).join('\n');
61
- const hydratedExports = widgetRemotes.map((remote)=>{
56
+ const remoteComponentExports = widgetRemotes.map((remote)=>{
62
57
  const componentName = `${toPascalCase(remote.id)}Widget`;
63
- return `const ${componentName} = createHydratedRemote(${componentName}Server, '${remoteDependencyAlias(remote)}/Widget');`;
58
+ return worker ? `const ${componentName} = createRemoteComponent(
59
+ '${remote.id}',
60
+ './Widget',
61
+ );` : `const ${componentName} = createRemoteComponent(
62
+ '${remote.id}',
63
+ './Widget',
64
+ () => import('${remoteDependencyAlias(remote)}/Widget'),
65
+ );`;
64
66
  }).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
- ` : '';
67
+ const federationImports = widgetRemotes.length > 0 ? renderFileTemplate(worker ? 'workspace/apps/shell-super-app/src/routes/vertical-components.worker.imports.tsx' : 'workspace/apps/shell-super-app/src/routes/vertical-components.imports.tsx', {}) : '';
68
+ const federationHelpers = widgetRemotes.length > 0 ? renderFileTemplate(worker ? 'workspace/apps/shell-super-app/src/routes/vertical-components.worker.helpers.tsx' : 'workspace/apps/shell-super-app/src/routes/vertical-components.helpers.tsx', {
69
+ value0: shell.id,
70
+ value1: tw('rounded-xl border border-red-900/20 bg-red-50 px-4 py-3 text-sm font-semibold text-red-900')
71
+ }) : '';
157
72
  const showcaseItems = widgetRemotes.map((remote)=>{
158
73
  const componentName = `${toPascalCase(remote.id)}Widget`;
159
74
  return ` <${componentName} key="${remote.id}" />`;
160
75
  }).join('\n');
76
+ const showcaseGridClassName = tw('grid gap-4 md:grid-cols-2');
77
+ const showcaseGrid = 0 === widgetRemotes.length ? `<div className="${showcaseGridClassName}" />` : `<div className="${showcaseGridClassName}">
78
+ ${showcaseItems}
79
+ </div>`;
161
80
  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
- }
81
+ return renderFileTemplate('workspace/apps/shell-super-app/src/routes/vertical-components.tsx', {
82
+ value0: federationImports,
83
+ value1: remoteCount,
84
+ value2: federationHelpers,
85
+ value3: remoteComponentExports,
86
+ value4: tw('flex min-w-0 flex-wrap items-center gap-x-8 gap-y-2 md:flex-1'),
87
+ value5: shell.mfName,
88
+ value6: tw('whitespace-nowrap text-xl font-black tracking-normal text-stone-950 no-underline'),
89
+ 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'),
90
+ value8: tw('mx-auto mt-12 max-w-7xl rounded-2xl bg-white/90 p-6 shadow-xl shadow-stone-900/10'),
91
+ value9: tw('text-lg font-bold text-stone-700'),
92
+ value10: tw('mx-auto mt-12 max-w-7xl'),
93
+ value11: shell.mfName,
94
+ value12: showcaseGrid
95
+ });
96
+ }
97
+ function createShellRemoteComponents(shell, remotes = []) {
98
+ return createShellRemoteComponentsSource(shell, remotes);
99
+ }
100
+ function createShellWorkerRemoteComponents(shell, remotes = []) {
101
+ return createShellRemoteComponentsSource(shell, remotes, true);
102
+ }
103
+ function federatedRegistryEntries(scope, host, remotes) {
104
+ const referencedRemotes = resolveRemoteRefs(host, remotes);
105
+ const entries = referencedRemotes.flatMap((remote)=>distributedSsrExposes(remote).map((expose)=>({
106
+ remote,
107
+ expose
108
+ })));
109
+ const exposeNameCounts = new Map();
110
+ for (const { expose } of entries){
111
+ const exposeName = toPascalCase(expose.replace(/^\.\//u, ''));
112
+ exposeNameCounts.set(exposeName, (exposeNameCounts.get(exposeName) ?? 0) + 1);
113
+ }
114
+ return entries.map(({ remote, expose })=>{
115
+ const exposeName = toPascalCase(expose.replace(/^\.\//u, ''));
116
+ const exportName = 1 === exposeNameCounts.get(exposeName) ? exposeName : `${toPascalCase(remote.id)}${exposeName}`;
117
+ const exposeSubpath = expose.replace(/^\.\//u, '');
118
+ return {
119
+ expose,
120
+ exportName,
121
+ packageSpecifier: `${packageName(scope, remote.packageSuffix)}/${exposeSubpath}`,
122
+ remoteAlias: `${remoteDependencyAlias(remote)}/${exposeSubpath}`,
123
+ remoteId: remote.id
124
+ };
125
+ }).toSorted((left, right)=>left.exportName.localeCompare(right.exportName));
126
+ }
127
+ function createFederatedComponentsRegistry(scope, host, remotes, worker = false) {
128
+ const entries = federatedRegistryEntries(scope, host, remotes);
129
+ const typeImports = entries.map((entry)=>`import type ${entry.exportName}Component from '${entry.packageSpecifier}';`).join('\n');
130
+ const propTypes = entries.map((entry)=>`type ${entry.exportName}Props = RemoteComponentProps<typeof ${entry.exportName}Component>;`).join('\n');
131
+ const componentEntries = entries.map((entry)=>worker ? ` ${entry.exportName}: (props: ${entry.exportName}Props) => (
132
+ <DistributedSsrBoundary
133
+ expose="${entry.expose}"
134
+ fallback={fallback}
135
+ fragmentProps={props}
136
+ remote="${entry.remoteId}"
137
+ >
138
+ {null}
139
+ </DistributedSsrBoundary>
140
+ ),` : ` ${entry.exportName}: createDistributedSsrComponent<${entry.exportName}Props>({
141
+ createComponent: () =>
142
+ createLazyComponent<
143
+ RemoteComponentModule<${entry.exportName}Props>,
144
+ 'default'
145
+ >({
146
+ export: 'default',
147
+ fallback,
148
+ instance: getInstance(),
149
+ loader: () =>
150
+ import('${entry.remoteAlias}') as Promise<
151
+ RemoteComponentModule<${entry.exportName}Props>
152
+ >,
153
+ loading: null,
154
+ }),
155
+ expose: '${entry.expose}',
156
+ fallback,
157
+ remote: '${entry.remoteId}',
158
+ }),`).join('\n');
159
+ const runtimeImports = worker ? "import { DistributedSsrBoundary } from '@modern-js/runtime/module-federation';\nimport type { ComponentType, ReactNode } from 'react';" : "import { createLazyComponent } from '@module-federation/modern-js-v3/react';\nimport { getInstance } from '@module-federation/modern-js-v3/runtime';\nimport { createDistributedSsrComponent } from '@modern-js/runtime/module-federation';\nimport type { ComponentType, FunctionComponent, ReactNode } from 'react';";
160
+ const moduleType = `
161
+ ${worker ? '' : `interface RemoteComponentModule<Props extends object> {
162
+ default: FunctionComponent<Props>;
163
+ }
164
+ `}type RemoteComponentProps<Component> =
165
+ Component extends ComponentType<infer Props>
166
+ ? Props extends object
167
+ ? Props
168
+ : Record<string, never>
169
+ : Record<string, never>;
170
+ `;
171
+ return `${runtimeImports}
172
+ ${typeImports}
199
173
 
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
- };
174
+ ${propTypes}
175
+ ${moduleType}
176
+ export const createFederatedComponents = (fallback: ReactNode) => ({
177
+ ${componentEntries}
178
+ });
208
179
  `;
209
180
  }
210
181
  function createRemotePage(app) {
211
182
  const tw = createTw(tailwindPrefixForApp(app));
212
183
  const listApiItems = `list${toPascalCase(resolveApiStem(app))}`;
213
- const apiImport = appHasApi(app) ? `import { useModernI18n } from '@modern-js/plugin-i18n/runtime';
184
+ const rpcApi = 'rpc' === resolveApiProtocol(app);
185
+ const apiImport = appHasApi(app) ? rpcApi ? `import { useModernI18n } from '@modern-js/plugin-i18n/runtime';
186
+ import { Link } from '@modern-js/plugin-tanstack/runtime';
187
+ import { useEffect, useState } from 'react';
188
+ import {
189
+ Effect,
190
+ ${listApiItems}Rpc,
191
+ } from '../../api/${resolveApiStem(app)}-rpc-client';
192
+ import { UltramodernRouteHead } from '../ultramodern-route-head';
193
+ import { ultramodernUiMarker } from '../../ultramodern-build';
194
+ ` : `import { useModernI18n } from '@modern-js/plugin-i18n/runtime';
214
195
  import { Link } from '@modern-js/plugin-tanstack/runtime';
215
196
  import { useEffect, useState } from 'react';
216
197
  import {
@@ -225,8 +206,8 @@ import { ultramodernUiMarker } from '../../ultramodern-build';
225
206
 
226
207
  useEffect(() => {
227
208
  let cancelled = false;
228
- void runEffectRequest(
229
- ${listApiItems}({ limit: 1 }).pipe(
209
+ void ${rpcApi ? 'Effect.runPromise' : 'runEffectRequest'}(
210
+ ${rpcApi ? `${listApiItems}Rpc(1)` : `${listApiItems}({ limit: 1 })`}.pipe(
230
211
  Effect.match({
231
212
  onFailure: () => {
232
213
  if (cancelled) {
@@ -297,9 +278,11 @@ export default function Layout() {
297
278
  function createRemoteEntry(app) {
298
279
  const tw = createTw(tailwindPrefixForApp(app));
299
280
  const domain = app.domain ?? app.id;
300
- return `import { useModernI18n } from '@modern-js/plugin-i18n/runtime';
281
+ const namespace = appI18nNamespace(app);
282
+ const componentName = `${toPascalCase(domain)}Route`;
283
+ return `${createFederatedI18nSetup(app, '../locales')}
301
284
 
302
- export default function ${toPascalCase(domain)}Route() {
285
+ const ${componentName}Content = () => {
303
286
  const { t } = useModernI18n();
304
287
 
305
288
  return (
@@ -308,6 +291,12 @@ export default function ${toPascalCase(domain)}Route() {
308
291
  <p className="${tw('mt-2 text-stone-600')}">{t('${domain}.routeSurface')}</p>
309
292
  </section>
310
293
  );
294
+ };
295
+
296
+ export default function ${componentName}() {
297
+ return (
298
+ ${createFederatedI18nBoundary(namespace, `<${componentName}Content />`)}
299
+ );
311
300
  }
312
301
  `;
313
302
  }
@@ -315,9 +304,10 @@ function createRemoteWidget(app) {
315
304
  const tw = createTw(tailwindPrefixForApp(app));
316
305
  const domain = app.domain ?? app.id;
317
306
  const componentName = `${toPascalCase(domain)}Widget`;
318
- return `import { useModernI18n } from '@modern-js/plugin-i18n/runtime';
307
+ const namespace = appI18nNamespace(app);
308
+ return `${createFederatedI18nSetup(app, '../../locales')}
319
309
 
320
- export default function ${componentName}() {
310
+ const ${componentName}Content = () => {
321
311
  const { t } = useModernI18n();
322
312
 
323
313
  return (
@@ -326,6 +316,41 @@ export default function ${componentName}() {
326
316
  <p className="${tw('mt-2 text-stone-600')}">{t('${domain}.widgetBody')}</p>
327
317
  </section>
328
318
  );
319
+ };
320
+
321
+ export default function ${componentName}() {
322
+ return (
323
+ ${createFederatedI18nBoundary(namespace, `<${componentName}Content />`)}
324
+ );
325
+ }
326
+ `;
327
+ }
328
+ function createRemoteWidgetFragmentPage(app) {
329
+ return createRemoteExposeFragmentPage(app, './Widget');
330
+ }
331
+ function createRemoteExposeFragmentPage(app, expose) {
332
+ const componentPath = app.exposes?.[expose];
333
+ if (!componentPath?.startsWith('./src/')) throw new Error(`Cannot generate an SSR fragment route for ${app.id} ${expose}: invalid expose path`);
334
+ const importPath = `../../../../../${componentPath.replace(/^\.\/src\//u, '').replace(/\.[cm]?[jt]sx?$/u, '')}`;
335
+ const componentName = toPascalCase(expose.replace(/^\.\//u, ''));
336
+ const pageName = `${componentName}FragmentPage`;
337
+ return `import type { ComponentProps } from 'react';
338
+ import { useDistributedSsrFragmentProps } from '@modern-js/runtime/module-federation/distributed-ssr';
339
+ import ${componentName} from '${importPath}';
340
+
341
+ export default function ${pageName}() {
342
+ const props = useDistributedSsrFragmentProps<ComponentProps<typeof ${componentName}>>({
343
+ boundaryId: '${app.mfName}',
344
+ expose: '${expose}',
345
+ });
346
+
347
+ return (
348
+ <>
349
+ <template data-modern-boundary-id="${app.mfName}" data-modern-distributed-ssr-marker="start" data-modern-mf-expose="${expose}" />
350
+ <${componentName} {...props} />
351
+ <template data-modern-boundary-id="${app.mfName}" data-modern-distributed-ssr-marker="end" data-modern-mf-expose="${expose}" />
352
+ </>
353
+ );
329
354
  }
330
355
  `;
331
356
  }
@@ -334,9 +359,10 @@ function createRemoteExposeComponent(app, expose) {
334
359
  if ('./Widget' === expose) return createRemoteWidget(app);
335
360
  const componentName = `${toPascalCase(app.domain ?? app.id)}${toPascalCase(expose.replace(/^\.\//u, ''))}`;
336
361
  const domain = app.domain ?? app.id;
337
- return `import { useModernI18n } from '@modern-js/plugin-i18n/runtime';
362
+ const namespace = appI18nNamespace(app);
363
+ return `${createFederatedI18nSetup(app, '../../locales')}
338
364
 
339
- export default function ${componentName}() {
365
+ const ${componentName}Content = () => {
340
366
  const { t } = useModernI18n();
341
367
 
342
368
  return (
@@ -345,6 +371,12 @@ export default function ${componentName}() {
345
371
  <p className="${tw('mt-2 text-stone-600')}">{t('${domain}.federatedSurface')}</p>
346
372
  </section>
347
373
  );
374
+ };
375
+
376
+ export default function ${componentName}() {
377
+ return (
378
+ ${createFederatedI18nBoundary(namespace, `<${componentName}Content />`)}
379
+ );
348
380
  }
349
381
  `;
350
382
  }
@@ -353,4 +385,229 @@ function remoteComponentOutputPath(app, expose) {
353
385
  if (!exposePath?.startsWith('./src/components/')) return;
354
386
  return `${app.directory}/${exposePath.replace(/^\.\//u, '')}`;
355
387
  }
356
- export { createLayout, createRemoteEntry, createRemoteExposeComponent, createRemotePage, createRemoteWidget, createShellPage, createShellRemoteComponents, remoteComponentOutputPath };
388
+ const tanstackRuntimeModule = '@modern-js/plugin-tanstack/runtime';
389
+ function ensureNamedImport(source, moduleName, names) {
390
+ const importEndMarker = `from '${moduleName}';`;
391
+ const importEnd = source.indexOf(importEndMarker);
392
+ if (importEnd >= 0) {
393
+ const importStart = source.lastIndexOf('import ', importEnd);
394
+ const openBrace = source.indexOf('{', importStart);
395
+ const closeBrace = source.indexOf('}', openBrace);
396
+ if (openBrace >= 0 && closeBrace >= 0 && closeBrace < importEnd) {
397
+ const existingNames = source.slice(openBrace + 1, closeBrace).split(',').map((name)=>name.trim()).filter(Boolean);
398
+ const missingNames = names.filter((name)=>!existingNames.includes(name));
399
+ if (0 === missingNames.length) return source;
400
+ const importedNames = [
401
+ ...existingNames,
402
+ ...missingNames
403
+ ].toSorted((left, right)=>left.localeCompare(right));
404
+ return `${source.slice(0, openBrace + 1)} ${importedNames.join(', ')} ${source.slice(closeBrace)}`;
405
+ }
406
+ }
407
+ const firstImportEnd = source.indexOf('\n');
408
+ const importLine = `import { ${names.join(', ')} } from '${moduleName}';\n`;
409
+ return firstImportEnd < 0 ? `${importLine}${source}` : `${source.slice(0, firstImportEnd + 1)}${importLine}${source.slice(firstImportEnd + 1)}`;
410
+ }
411
+ function ensureNavigateHook(source) {
412
+ if (source.includes('const navigate = useNavigate();')) return source;
413
+ const functionStart = source.indexOf('export default function ');
414
+ const parametersEnd = source.indexOf(')', functionStart);
415
+ const bodyStart = source.indexOf('{', parametersEnd);
416
+ if (functionStart < 0 || parametersEnd < 0 || bodyStart < 0) return source;
417
+ return `${source.slice(0, bodyStart + 1)}\n const navigate = useNavigate();${source.slice(bodyStart + 1)}`;
418
+ }
419
+ function closingParenthesis(source, openingParenthesis) {
420
+ let depth = 0;
421
+ let quote = '';
422
+ let escaped = false;
423
+ for(let index = openingParenthesis; index < source.length; index += 1){
424
+ const character = source[index] ?? '';
425
+ if ('' !== quote) {
426
+ if (escaped) escaped = false;
427
+ else if ('\\' === character) escaped = true;
428
+ else if (character === quote) quote = '';
429
+ continue;
430
+ }
431
+ if ("'" === character || '"' === character || '`' === character) quote = character;
432
+ else if ('(' === character) depth += 1;
433
+ else if (')' === character) {
434
+ depth -= 1;
435
+ if (0 === depth) return index;
436
+ }
437
+ }
438
+ return -1;
439
+ }
440
+ function removeLegacyLocationSuffixHelper(source) {
441
+ return source.replace(/(^|\n)const locationSuffix = \(location: \{ hash\?: unknown; search\?: unknown; searchStr\?: unknown \}\) => \{[\s\S]*?\n\};\n/u, '$1').replace('\n const suffix = locationSuffix(location);', '');
442
+ }
443
+ function rewriteRouterLocationSuffix(source) {
444
+ let changed = false;
445
+ const next = source.replace(/^(\s*)to: `\$\{([^`\n]+)\}\$\{suffix\}`,/gmu, (_match, indentation, destination)=>{
446
+ changed = true;
447
+ return `${indentation}hash: true,\n${indentation}search: true,\n${indentation}to: ${destination},`;
448
+ });
449
+ return {
450
+ changed,
451
+ source: changed ? removeLegacyLocationSuffixHelper(next) : next
452
+ };
453
+ }
454
+ function rewriteWindowLocationAssignments(source) {
455
+ const callMarker = 'window.location.assign';
456
+ let next = source;
457
+ let searchFrom = 0;
458
+ let changed = false;
459
+ let preservesCurrentLocationState = false;
460
+ while(true){
461
+ const callStart = next.indexOf(callMarker, searchFrom);
462
+ if (callStart < 0) break;
463
+ const openingParenthesis = next.indexOf('(', callStart + callMarker.length);
464
+ if (openingParenthesis < 0) break;
465
+ const callEnd = closingParenthesis(next, openingParenthesis);
466
+ if (callEnd < 0) break;
467
+ let destination = next.slice(openingParenthesis + 1, callEnd).trim();
468
+ if (destination.endsWith(',')) destination = destination.slice(0, -1).trimEnd();
469
+ const preservesSuffix = destination.includes("${suffix}") && next.includes('const suffix = locationSuffix(location);');
470
+ if (preservesSuffix) {
471
+ destination = destination.replace("${suffix}", '');
472
+ if (destination.startsWith('`${') && destination.endsWith('}`')) destination = destination.slice(3, -2);
473
+ preservesCurrentLocationState = true;
474
+ }
475
+ const lineStart = next.lastIndexOf('\n', callStart) + 1;
476
+ const indentation = next.slice(lineStart, callStart);
477
+ const options = preservesSuffix ? `hash: true,\n${indentation} search: true,\n${indentation} to: ${destination},` : `to: ${destination},`;
478
+ const replacement = `void navigate({\n${indentation} ${options}\n${indentation}})`;
479
+ next = `${next.slice(0, callStart)}${replacement}${next.slice(callEnd + 1)}`;
480
+ searchFrom = callStart + replacement.length;
481
+ changed = true;
482
+ }
483
+ if (preservesCurrentLocationState) next = removeLegacyLocationSuffixHelper(next);
484
+ return {
485
+ changed,
486
+ source: next
487
+ };
488
+ }
489
+ function closingJsxTag(source, openingTagStart) {
490
+ let braces = 0;
491
+ let quote = '';
492
+ let escaped = false;
493
+ for(let index = openingTagStart; index < source.length; index += 1){
494
+ const character = source[index] ?? '';
495
+ if ('' !== quote) {
496
+ if (escaped) escaped = false;
497
+ else if ('\\' === character) escaped = true;
498
+ else if (character === quote) quote = '';
499
+ continue;
500
+ }
501
+ if ("'" === character || '"' === character || '`' === character) quote = character;
502
+ else if ('{' === character) braces += 1;
503
+ else if ('}' === character) braces -= 1;
504
+ else if ('>' === character && 0 === braces) return index;
505
+ }
506
+ return -1;
507
+ }
508
+ function isInternalHref(openingTag) {
509
+ return openingTag.includes('href="/') || openingTag.includes("href='/") || openingTag.includes('href={`/');
510
+ }
511
+ function removeSyntheticClickHandler(openingTag) {
512
+ const onClickStart = openingTag.indexOf(' onClick=');
513
+ if (onClickStart < 0) return openingTag;
514
+ const valueStart = openingTag.indexOf('{', onClickStart);
515
+ if (valueStart < 0) return openingTag;
516
+ let depth = 0;
517
+ for(let index = valueStart; index < openingTag.length; index += 1){
518
+ const character = openingTag[index] ?? '';
519
+ if ('{' === character) depth += 1;
520
+ else if ('}' === character) {
521
+ depth -= 1;
522
+ if (0 === depth) {
523
+ const handler = openingTag.slice(valueStart, index + 1);
524
+ return handler.includes('preventDefault') ? `${openingTag.slice(0, onClickStart)}${openingTag.slice(index + 1)}` : openingTag;
525
+ }
526
+ }
527
+ }
528
+ return openingTag;
529
+ }
530
+ function rewriteInternalAnchors(source) {
531
+ let next = source;
532
+ let searchFrom = 0;
533
+ let changed = false;
534
+ while(true){
535
+ const openingTagStart = next.indexOf('<a', searchFrom);
536
+ if (openingTagStart < 0) break;
537
+ const boundary = next[openingTagStart + 2];
538
+ if (' ' !== boundary && '\n' !== boundary && '\t' !== boundary) {
539
+ searchFrom = openingTagStart + 2;
540
+ continue;
541
+ }
542
+ const openingTagEnd = closingJsxTag(next, openingTagStart);
543
+ if (openingTagEnd < 0) break;
544
+ const openingTag = next.slice(openingTagStart, openingTagEnd + 1);
545
+ if (!isInternalHref(openingTag)) {
546
+ searchFrom = openingTagEnd + 1;
547
+ continue;
548
+ }
549
+ const closingTagStart = next.indexOf('</a>', openingTagEnd + 1);
550
+ if (closingTagStart < 0) break;
551
+ const nativeOpeningTag = removeSyntheticClickHandler(openingTag).replace('<a', '<Link').replace('href=', 'to=');
552
+ next = `${next.slice(0, openingTagStart)}${nativeOpeningTag}${next.slice(openingTagEnd + 1, closingTagStart)}</Link>${next.slice(closingTagStart + 4)}`;
553
+ searchFrom = openingTagStart + nativeOpeningTag.length;
554
+ changed = true;
555
+ }
556
+ return {
557
+ changed,
558
+ source: next
559
+ };
560
+ }
561
+ function rewriteJsxElementName(source, elementName, componentName) {
562
+ const openingMarker = `<${elementName}`;
563
+ const closingMarker = `</${elementName}>`;
564
+ let next = source;
565
+ let searchFrom = 0;
566
+ let changed = false;
567
+ while(true){
568
+ const openingTagStart = next.indexOf(openingMarker, searchFrom);
569
+ if (openingTagStart < 0) break;
570
+ const boundary = next[openingTagStart + openingMarker.length];
571
+ if (' ' !== boundary && '\n' !== boundary && '\t' !== boundary) {
572
+ searchFrom = openingTagStart + openingMarker.length;
573
+ continue;
574
+ }
575
+ const openingTagEnd = closingJsxTag(next, openingTagStart);
576
+ const closingTagStart = next.indexOf(closingMarker, openingTagEnd + 1);
577
+ if (openingTagEnd < 0 || closingTagStart < 0) break;
578
+ next = `${next.slice(0, openingTagStart)}<${componentName}${next.slice(openingTagStart + openingMarker.length, closingTagStart)}</${componentName}>${next.slice(closingTagStart + closingMarker.length)}`;
579
+ searchFrom = openingTagStart + componentName.length + 1;
580
+ changed = true;
581
+ }
582
+ return {
583
+ changed,
584
+ source: next
585
+ };
586
+ }
587
+ function regenerateGeneratedNavigationSurface(source, kind) {
588
+ const routerLocationSuffix = rewriteRouterLocationSuffix(source);
589
+ const anchors = rewriteInternalAnchors(routerLocationSuffix.source);
590
+ const locationAssignments = rewriteWindowLocationAssignments(anchors.source);
591
+ const forms = 'demo-component' === kind ? rewriteJsxElementName(locationAssignments.source, 'form', 'Form') : {
592
+ changed: false,
593
+ source: locationAssignments.source
594
+ };
595
+ let next = forms.source;
596
+ if (anchors.changed || locationAssignments.changed || forms.changed) {
597
+ const imports = [
598
+ ...forms.changed ? [
599
+ 'Form'
600
+ ] : [],
601
+ ...anchors.changed ? [
602
+ 'Link'
603
+ ] : [],
604
+ ...locationAssignments.changed ? [
605
+ 'useNavigate'
606
+ ] : []
607
+ ];
608
+ next = ensureNamedImport(next, tanstackRuntimeModule, imports);
609
+ }
610
+ if (locationAssignments.changed) next = ensureNavigateHook(next);
611
+ return next;
612
+ }
613
+ export { createFederatedComponentsRegistry, createLayout, createRemoteEntry, createRemoteExposeComponent, createRemoteExposeFragmentPage, createRemotePage, createRemoteWidgetFragmentPage, createShellPage, createShellRemoteComponents, createShellWorkerRemoteComponents, regenerateGeneratedNavigationSurface, remoteComponentOutputPath };