@bleedingdev/modern-js-ultramodern-create 3.9.0-ultramodern.2 → 3.9.0-ultramodern.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (442) hide show
  1. package/README.md +43 -74
  2. package/dist/cjs/cli/package-source.cjs +2 -2
  3. package/dist/cjs/cli/project-setup.cjs +2 -22
  4. package/dist/cjs/index.cjs +9 -1
  5. package/dist/cjs/locale/en.cjs +2 -1
  6. package/dist/cjs/locale/zh.cjs +2 -1
  7. package/dist/cjs/ultramodern-package-source.cjs +13 -9
  8. package/dist/cjs/ultramodern-release-cohort.cjs +6 -21
  9. package/dist/cjs/ultramodern-tooling/commands/cloudflare-output-verify.cjs +49 -56
  10. package/dist/cjs/ultramodern-tooling/commands/context.cjs +11 -29
  11. package/dist/cjs/ultramodern-tooling/commands/routes-generate-app.cjs +67 -0
  12. package/dist/cjs/ultramodern-tooling/commands/routes-generate.cjs +24 -53
  13. package/dist/cjs/ultramodern-tooling/commands/validate.cjs +5 -11
  14. package/dist/cjs/ultramodern-tooling/commands.cjs +15 -8
  15. package/dist/cjs/ultramodern-tooling/config/index.cjs +10 -24
  16. package/dist/cjs/ultramodern-tooling/config/load.cjs +12 -10
  17. package/dist/cjs/ultramodern-tooling/config/metadata.cjs +34 -32
  18. package/dist/cjs/ultramodern-tooling/config/normalize.cjs +165 -164
  19. package/dist/cjs/ultramodern-workspace/add-shell.cjs +118 -118
  20. package/dist/cjs/ultramodern-workspace/add-vertical/execute.cjs +121 -25
  21. package/dist/cjs/ultramodern-workspace/add-vertical/plan.cjs +14 -160
  22. package/dist/cjs/ultramodern-workspace/add-vertical/preflight.cjs +16 -48
  23. package/dist/cjs/ultramodern-workspace/add-vertical/preview.cjs +78 -0
  24. package/dist/cjs/ultramodern-workspace/add-vertical/shell-files.cjs +87 -24
  25. package/dist/cjs/ultramodern-workspace/add-vertical/topology.cjs +4 -1
  26. package/dist/cjs/ultramodern-workspace/add-vertical/transaction.cjs +378 -45
  27. package/dist/cjs/ultramodern-workspace/add-vertical/workspace-state.cjs +21 -44
  28. package/dist/cjs/ultramodern-workspace/add-vertical.cjs +0 -9
  29. package/dist/cjs/ultramodern-workspace/api/client.cjs +5 -5
  30. package/dist/cjs/ultramodern-workspace/api/contracts.cjs +2 -2
  31. package/dist/cjs/ultramodern-workspace/api/rpc.cjs +20 -18
  32. package/dist/cjs/ultramodern-workspace/api/service.cjs +49 -24
  33. package/dist/cjs/ultramodern-workspace/api/shared.cjs +28 -18
  34. package/dist/cjs/ultramodern-workspace/app-files.cjs +3 -23
  35. package/dist/cjs/ultramodern-workspace/backend-federation.cjs +27 -27
  36. package/dist/cjs/ultramodern-workspace/contracts.cjs +14 -183
  37. package/dist/cjs/ultramodern-workspace/delivery-unit-schema/surfaces.cjs +85 -0
  38. package/dist/cjs/ultramodern-workspace/delivery-unit-schema/types.cjs +8 -85
  39. package/dist/cjs/ultramodern-workspace/delivery-unit-stamp.cjs +16 -4
  40. package/dist/cjs/ultramodern-workspace/delivery-unit-sync.cjs +27 -17
  41. package/dist/cjs/ultramodern-workspace/delivery-unit.cjs +16 -10
  42. package/dist/cjs/ultramodern-workspace/demo-components.cjs +66 -433
  43. package/dist/cjs/ultramodern-workspace/descriptors.cjs +0 -4
  44. package/dist/cjs/ultramodern-workspace/fs-io.cjs +37 -2
  45. package/dist/cjs/ultramodern-workspace/generation-result.cjs +4 -4
  46. package/dist/cjs/ultramodern-workspace/index.cjs +2 -5
  47. package/dist/cjs/ultramodern-workspace/mf-validation/constants.cjs +0 -6
  48. package/dist/cjs/ultramodern-workspace/mf-validation/discovery.cjs +6 -6
  49. package/dist/cjs/{ultramodern-tooling/commands/migrate-strict-effect/generated-patches.cjs → ultramodern-workspace/mf-validation/exposes.cjs} +13 -17
  50. package/dist/cjs/ultramodern-workspace/mf-validation/inspect.cjs +26 -7
  51. package/dist/cjs/ultramodern-workspace/mf-validation/object-literal.cjs +21 -122
  52. package/dist/cjs/ultramodern-workspace/mf-validation/path-utils.cjs +37 -38
  53. package/dist/cjs/ultramodern-workspace/mf-validation/syntax.cjs +93 -153
  54. package/dist/cjs/ultramodern-workspace/mf-validation.cjs +4 -0
  55. package/dist/cjs/ultramodern-workspace/module-federation/config.cjs +24 -29
  56. package/dist/cjs/ultramodern-workspace/module-federation/reexport-module.cjs +39 -58
  57. package/dist/cjs/ultramodern-workspace/module-federation/remote-refs.cjs +1 -43
  58. package/dist/cjs/ultramodern-workspace/package-json.cjs +63 -37
  59. package/dist/cjs/ultramodern-workspace/patch-inventory.cjs +104 -0
  60. package/dist/cjs/ultramodern-workspace/policy.cjs +3 -577
  61. package/dist/cjs/ultramodern-workspace/public-surface.cjs +3 -3
  62. package/dist/cjs/ultramodern-workspace/routes.cjs +2 -11
  63. package/dist/cjs/ultramodern-workspace/shared-patches.cjs +12 -2
  64. package/dist/cjs/ultramodern-workspace/shells.cjs +0 -70
  65. package/dist/cjs/ultramodern-workspace/tooling-command-catalog.cjs +27 -41
  66. package/dist/cjs/ultramodern-workspace/tsconfigs.cjs +8 -2
  67. package/dist/cjs/ultramodern-workspace/validation/architecture.cjs +397 -0
  68. package/dist/cjs/ultramodern-workspace/validation/assertions.cjs +140 -0
  69. package/dist/cjs/ultramodern-workspace/validation/types.cjs +18 -0
  70. package/dist/cjs/ultramodern-workspace/validation/workspace.cjs +344 -0
  71. package/dist/cjs/ultramodern-workspace/versions.cjs +81 -45
  72. package/dist/cjs/ultramodern-workspace/workspace-artifact-ownership.cjs +183 -0
  73. package/dist/cjs/ultramodern-workspace/workspace-script-plan.cjs +36 -25
  74. package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +11 -200
  75. package/dist/cjs/ultramodern-workspace/workspace-validation-contract.cjs +62 -373
  76. package/dist/cjs/ultramodern-workspace/write-app.cjs +19 -11
  77. package/dist/cjs/ultramodern-workspace/write-workspace.cjs +20 -50
  78. package/dist/cjs/ultramodern-workspace/zerops.cjs +2 -0
  79. package/dist/esm/cli/package-source.js +3 -3
  80. package/dist/esm/cli/project-setup.js +2 -22
  81. package/dist/esm/index.js +10 -2
  82. package/dist/esm/locale/en.js +2 -1
  83. package/dist/esm/locale/zh.js +2 -1
  84. package/dist/esm/ultramodern-package-source.js +14 -4
  85. package/dist/esm/ultramodern-release-cohort.js +5 -14
  86. package/dist/esm/ultramodern-tooling/commands/cloudflare-output-verify.js +49 -56
  87. package/dist/esm/ultramodern-tooling/commands/context.js +10 -26
  88. package/dist/esm/ultramodern-tooling/commands/routes-generate-app.js +35 -0
  89. package/dist/esm/ultramodern-tooling/commands/routes-generate.js +25 -54
  90. package/dist/esm/ultramodern-tooling/commands/validate.js +6 -12
  91. package/dist/esm/ultramodern-tooling/commands.js +15 -9
  92. package/dist/esm/ultramodern-tooling/config/index.js +0 -2
  93. package/dist/esm/ultramodern-tooling/config/load.js +9 -9
  94. package/dist/esm/ultramodern-tooling/config/metadata.js +33 -28
  95. package/dist/esm/ultramodern-tooling/config/normalize.js +159 -156
  96. package/dist/esm/ultramodern-workspace/add-shell.js +124 -123
  97. package/dist/esm/ultramodern-workspace/add-vertical/execute.js +119 -27
  98. package/dist/esm/ultramodern-workspace/add-vertical/plan.js +16 -150
  99. package/dist/esm/ultramodern-workspace/add-vertical/preflight.js +15 -47
  100. package/dist/esm/ultramodern-workspace/add-vertical/preview.js +40 -0
  101. package/dist/esm/ultramodern-workspace/add-vertical/shell-files.js +87 -25
  102. package/dist/esm/ultramodern-workspace/add-vertical/topology.js +4 -1
  103. package/dist/esm/ultramodern-workspace/add-vertical/transaction.js +373 -46
  104. package/dist/esm/ultramodern-workspace/add-vertical/workspace-state.js +17 -34
  105. package/dist/esm/ultramodern-workspace/add-vertical.js +1 -1
  106. package/dist/esm/ultramodern-workspace/api/client.js +5 -5
  107. package/dist/esm/ultramodern-workspace/api/contracts.js +2 -2
  108. package/dist/esm/ultramodern-workspace/api/rpc.js +20 -18
  109. package/dist/esm/ultramodern-workspace/api/service.js +49 -24
  110. package/dist/esm/ultramodern-workspace/api/shared.js +28 -18
  111. package/dist/esm/ultramodern-workspace/app-files.js +3 -23
  112. package/dist/esm/ultramodern-workspace/backend-federation.js +5 -5
  113. package/dist/esm/ultramodern-workspace/contracts.js +14 -180
  114. package/dist/esm/ultramodern-workspace/delivery-unit-schema/surfaces.js +41 -0
  115. package/dist/esm/ultramodern-workspace/delivery-unit-schema/types.js +1 -75
  116. package/dist/esm/ultramodern-workspace/delivery-unit-stamp.js +16 -4
  117. package/dist/esm/ultramodern-workspace/delivery-unit-sync.js +28 -18
  118. package/dist/esm/ultramodern-workspace/delivery-unit.js +12 -6
  119. package/dist/esm/ultramodern-workspace/demo-components.js +67 -428
  120. package/dist/esm/ultramodern-workspace/descriptors.js +1 -2
  121. package/dist/esm/ultramodern-workspace/fs-io.js +37 -2
  122. package/dist/esm/ultramodern-workspace/generation-result.js +3 -3
  123. package/dist/esm/ultramodern-workspace/index.js +1 -1
  124. package/dist/esm/ultramodern-workspace/mf-validation/constants.js +1 -4
  125. package/dist/esm/ultramodern-workspace/mf-validation/discovery.js +7 -7
  126. package/dist/esm/ultramodern-workspace/mf-validation/exposes.js +14 -0
  127. package/dist/esm/ultramodern-workspace/mf-validation/inspect.js +27 -8
  128. package/dist/esm/ultramodern-workspace/mf-validation/object-literal.js +22 -123
  129. package/dist/esm/ultramodern-workspace/mf-validation/path-utils.js +36 -34
  130. package/dist/esm/ultramodern-workspace/mf-validation/syntax.js +83 -143
  131. package/dist/esm/ultramodern-workspace/mf-validation.js +1 -0
  132. package/dist/esm/ultramodern-workspace/module-federation/config.js +25 -30
  133. package/dist/esm/ultramodern-workspace/module-federation/reexport-module.js +39 -58
  134. package/dist/esm/ultramodern-workspace/module-federation/remote-refs.js +1 -43
  135. package/dist/esm/ultramodern-workspace/package-json.js +58 -32
  136. package/dist/esm/ultramodern-workspace/patch-inventory.js +66 -0
  137. package/dist/esm/ultramodern-workspace/policy.js +2 -564
  138. package/dist/esm/ultramodern-workspace/public-surface.js +3 -3
  139. package/dist/esm/ultramodern-workspace/routes.js +2 -11
  140. package/dist/esm/ultramodern-workspace/shared-patches.js +2 -2
  141. package/dist/esm/ultramodern-workspace/shells.js +3 -67
  142. package/dist/esm/ultramodern-workspace/tooling-command-catalog.js +22 -37
  143. package/dist/esm/ultramodern-workspace/tsconfigs.js +9 -3
  144. package/dist/esm/ultramodern-workspace/validation/architecture.js +348 -0
  145. package/dist/esm/ultramodern-workspace/validation/assertions.js +65 -0
  146. package/dist/esm/ultramodern-workspace/validation/types.js +0 -0
  147. package/dist/esm/ultramodern-workspace/validation/workspace.js +286 -0
  148. package/dist/esm/ultramodern-workspace/versions.js +74 -29
  149. package/dist/esm/ultramodern-workspace/workspace-artifact-ownership.js +128 -0
  150. package/dist/esm/ultramodern-workspace/workspace-script-plan.js +35 -27
  151. package/dist/esm/ultramodern-workspace/workspace-scripts.js +10 -190
  152. package/dist/esm/ultramodern-workspace/workspace-validation-contract.js +65 -376
  153. package/dist/esm/ultramodern-workspace/write-app.js +18 -10
  154. package/dist/esm/ultramodern-workspace/write-workspace.js +25 -52
  155. package/dist/esm/ultramodern-workspace/zerops.js +2 -0
  156. package/dist/esm-node/cli/package-source.js +3 -3
  157. package/dist/esm-node/cli/project-setup.js +2 -22
  158. package/dist/esm-node/index.js +10 -2
  159. package/dist/esm-node/locale/en.js +2 -1
  160. package/dist/esm-node/locale/zh.js +2 -1
  161. package/dist/esm-node/ultramodern-package-source.js +14 -4
  162. package/dist/esm-node/ultramodern-release-cohort.js +5 -14
  163. package/dist/esm-node/ultramodern-tooling/commands/cloudflare-output-verify.js +49 -56
  164. package/dist/esm-node/ultramodern-tooling/commands/context.js +10 -26
  165. package/dist/esm-node/ultramodern-tooling/commands/routes-generate-app.js +36 -0
  166. package/dist/esm-node/ultramodern-tooling/commands/routes-generate.js +25 -54
  167. package/dist/esm-node/ultramodern-tooling/commands/validate.js +6 -12
  168. package/dist/esm-node/ultramodern-tooling/commands.js +15 -9
  169. package/dist/esm-node/ultramodern-tooling/config/index.js +0 -2
  170. package/dist/esm-node/ultramodern-tooling/config/load.js +9 -9
  171. package/dist/esm-node/ultramodern-tooling/config/metadata.js +33 -28
  172. package/dist/esm-node/ultramodern-tooling/config/normalize.js +159 -156
  173. package/dist/esm-node/ultramodern-workspace/add-shell.js +124 -123
  174. package/dist/esm-node/ultramodern-workspace/add-vertical/execute.js +119 -27
  175. package/dist/esm-node/ultramodern-workspace/add-vertical/plan.js +16 -150
  176. package/dist/esm-node/ultramodern-workspace/add-vertical/preflight.js +15 -47
  177. package/dist/esm-node/ultramodern-workspace/add-vertical/preview.js +41 -0
  178. package/dist/esm-node/ultramodern-workspace/add-vertical/shell-files.js +87 -25
  179. package/dist/esm-node/ultramodern-workspace/add-vertical/topology.js +4 -1
  180. package/dist/esm-node/ultramodern-workspace/add-vertical/transaction.js +373 -46
  181. package/dist/esm-node/ultramodern-workspace/add-vertical/workspace-state.js +17 -34
  182. package/dist/esm-node/ultramodern-workspace/add-vertical.js +1 -1
  183. package/dist/esm-node/ultramodern-workspace/api/client.js +5 -5
  184. package/dist/esm-node/ultramodern-workspace/api/contracts.js +2 -2
  185. package/dist/esm-node/ultramodern-workspace/api/rpc.js +20 -18
  186. package/dist/esm-node/ultramodern-workspace/api/service.js +49 -24
  187. package/dist/esm-node/ultramodern-workspace/api/shared.js +28 -18
  188. package/dist/esm-node/ultramodern-workspace/app-files.js +3 -23
  189. package/dist/esm-node/ultramodern-workspace/backend-federation.js +5 -5
  190. package/dist/esm-node/ultramodern-workspace/contracts.js +14 -180
  191. package/dist/esm-node/ultramodern-workspace/delivery-unit-schema/surfaces.js +42 -0
  192. package/dist/esm-node/ultramodern-workspace/delivery-unit-schema/types.js +1 -75
  193. package/dist/esm-node/ultramodern-workspace/delivery-unit-stamp.js +16 -4
  194. package/dist/esm-node/ultramodern-workspace/delivery-unit-sync.js +28 -18
  195. package/dist/esm-node/ultramodern-workspace/delivery-unit.js +12 -6
  196. package/dist/esm-node/ultramodern-workspace/demo-components.js +67 -428
  197. package/dist/esm-node/ultramodern-workspace/descriptors.js +1 -2
  198. package/dist/esm-node/ultramodern-workspace/fs-io.js +37 -2
  199. package/dist/esm-node/ultramodern-workspace/generation-result.js +3 -3
  200. package/dist/esm-node/ultramodern-workspace/index.js +1 -1
  201. package/dist/esm-node/ultramodern-workspace/mf-validation/constants.js +1 -4
  202. package/dist/esm-node/ultramodern-workspace/mf-validation/discovery.js +7 -7
  203. package/dist/esm-node/ultramodern-workspace/mf-validation/exposes.js +15 -0
  204. package/dist/esm-node/ultramodern-workspace/mf-validation/inspect.js +27 -8
  205. package/dist/esm-node/ultramodern-workspace/mf-validation/object-literal.js +22 -123
  206. package/dist/esm-node/ultramodern-workspace/mf-validation/path-utils.js +36 -34
  207. package/dist/esm-node/ultramodern-workspace/mf-validation/syntax.js +83 -143
  208. package/dist/esm-node/ultramodern-workspace/mf-validation.js +1 -0
  209. package/dist/esm-node/ultramodern-workspace/module-federation/config.js +25 -30
  210. package/dist/esm-node/ultramodern-workspace/module-federation/reexport-module.js +39 -58
  211. package/dist/esm-node/ultramodern-workspace/module-federation/remote-refs.js +1 -43
  212. package/dist/esm-node/ultramodern-workspace/package-json.js +58 -32
  213. package/dist/esm-node/ultramodern-workspace/patch-inventory.js +67 -0
  214. package/dist/esm-node/ultramodern-workspace/policy.js +2 -564
  215. package/dist/esm-node/ultramodern-workspace/public-surface.js +3 -3
  216. package/dist/esm-node/ultramodern-workspace/routes.js +2 -11
  217. package/dist/esm-node/ultramodern-workspace/shared-patches.js +2 -2
  218. package/dist/esm-node/ultramodern-workspace/shells.js +3 -67
  219. package/dist/esm-node/ultramodern-workspace/tooling-command-catalog.js +22 -37
  220. package/dist/esm-node/ultramodern-workspace/tsconfigs.js +9 -3
  221. package/dist/esm-node/ultramodern-workspace/validation/architecture.js +349 -0
  222. package/dist/esm-node/ultramodern-workspace/validation/assertions.js +66 -0
  223. package/dist/esm-node/ultramodern-workspace/validation/types.js +1 -0
  224. package/dist/esm-node/ultramodern-workspace/validation/workspace.js +287 -0
  225. package/dist/esm-node/ultramodern-workspace/versions.js +74 -29
  226. package/dist/esm-node/ultramodern-workspace/workspace-artifact-ownership.js +129 -0
  227. package/dist/esm-node/ultramodern-workspace/workspace-script-plan.js +35 -27
  228. package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +10 -190
  229. package/dist/esm-node/ultramodern-workspace/workspace-validation-contract.js +65 -376
  230. package/dist/esm-node/ultramodern-workspace/write-app.js +18 -10
  231. package/dist/esm-node/ultramodern-workspace/write-workspace.js +25 -52
  232. package/dist/esm-node/ultramodern-workspace/zerops.js +2 -0
  233. package/dist/types/cli/project-setup.d.ts +1 -1
  234. package/dist/types/locale/en.d.ts +1 -0
  235. package/dist/types/locale/index.d.ts +2 -0
  236. package/dist/types/locale/zh.d.ts +1 -0
  237. package/dist/types/ultramodern-package-source.d.ts +2 -4
  238. package/dist/types/ultramodern-release-cohort.d.ts +1 -3
  239. package/dist/types/ultramodern-tooling/commands/cloudflare-output-verify.d.ts +2 -2
  240. package/dist/types/ultramodern-tooling/commands/context.d.ts +4 -1
  241. package/dist/types/ultramodern-tooling/commands/routes-generate-app.d.ts +1 -0
  242. package/dist/types/ultramodern-tooling/commands/routes-generate.d.ts +1 -1
  243. package/dist/types/ultramodern-tooling/commands/validate.d.ts +1 -1
  244. package/dist/types/ultramodern-tooling/config/index.d.ts +0 -2
  245. package/dist/types/ultramodern-tooling/config/load.d.ts +10 -2
  246. package/dist/types/ultramodern-tooling/config/metadata.d.ts +2 -2
  247. package/dist/types/ultramodern-tooling/config/normalize.d.ts +19 -19
  248. package/dist/types/ultramodern-tooling/config/types.d.ts +2 -9
  249. package/dist/types/ultramodern-workspace/add-shell.d.ts +1 -1
  250. package/dist/types/ultramodern-workspace/add-vertical/execute.d.ts +1 -0
  251. package/dist/types/ultramodern-workspace/add-vertical/preflight.d.ts +4 -3
  252. package/dist/types/ultramodern-workspace/add-vertical/preview.d.ts +4 -0
  253. package/dist/types/ultramodern-workspace/add-vertical/shell-files.d.ts +7 -2
  254. package/dist/types/ultramodern-workspace/add-vertical/transaction.d.ts +32 -6
  255. package/dist/types/ultramodern-workspace/add-vertical/workspace-state.d.ts +10 -7
  256. package/dist/types/ultramodern-workspace/add-vertical.d.ts +1 -1
  257. package/dist/types/ultramodern-workspace/api/client.d.ts +3 -1
  258. package/dist/types/ultramodern-workspace/api/rpc.d.ts +1 -1
  259. package/dist/types/ultramodern-workspace/api/service.d.ts +3 -1
  260. package/dist/types/ultramodern-workspace/api/shared.d.ts +2 -0
  261. package/dist/types/ultramodern-workspace/backend-federation.d.ts +1 -1
  262. package/dist/types/ultramodern-workspace/contracts.d.ts +1 -3
  263. package/dist/types/ultramodern-workspace/delivery-unit-schema/surfaces.d.ts +17 -0
  264. package/dist/types/ultramodern-workspace/delivery-unit-schema/types.d.ts +3 -68
  265. package/dist/types/ultramodern-workspace/delivery-unit-stamp.d.ts +2 -2
  266. package/dist/types/ultramodern-workspace/delivery-unit.d.ts +3 -3
  267. package/dist/types/ultramodern-workspace/demo-components.d.ts +0 -3
  268. package/dist/types/ultramodern-workspace/descriptors.d.ts +0 -1
  269. package/dist/types/ultramodern-workspace/fs-io.d.ts +1 -1
  270. package/dist/types/ultramodern-workspace/index.d.ts +1 -1
  271. package/dist/types/ultramodern-workspace/mf-validation/constants.d.ts +0 -1
  272. package/dist/types/ultramodern-workspace/mf-validation/exposes.d.ts +11 -0
  273. package/dist/types/ultramodern-workspace/mf-validation/path-utils.d.ts +2 -3
  274. package/dist/types/ultramodern-workspace/mf-validation/syntax.d.ts +4 -3
  275. package/dist/types/ultramodern-workspace/mf-validation/types.d.ts +1 -0
  276. package/dist/types/ultramodern-workspace/mf-validation.d.ts +1 -0
  277. package/dist/types/ultramodern-workspace/module-federation/config.d.ts +1 -1
  278. package/dist/types/ultramodern-workspace/module-federation/reexport-module.d.ts +2 -2
  279. package/dist/types/ultramodern-workspace/package-json.d.ts +1 -1
  280. package/dist/types/ultramodern-workspace/patch-inventory.d.ts +10 -0
  281. package/dist/types/ultramodern-workspace/policy.d.ts +31 -209
  282. package/dist/types/ultramodern-workspace/routes.d.ts +6 -1
  283. package/dist/types/ultramodern-workspace/shells.d.ts +2 -15
  284. package/dist/types/ultramodern-workspace/tooling-command-catalog.d.ts +8 -7
  285. package/dist/types/ultramodern-workspace/types.d.ts +9 -9
  286. package/dist/types/ultramodern-workspace/validation/architecture.d.ts +2 -0
  287. package/dist/types/ultramodern-workspace/validation/assertions.d.ts +14 -0
  288. package/dist/types/ultramodern-workspace/validation/types.d.ts +9 -0
  289. package/dist/types/ultramodern-workspace/validation/workspace.d.ts +6 -0
  290. package/dist/types/ultramodern-workspace/versions.d.ts +73 -28
  291. package/dist/types/ultramodern-workspace/workspace-artifact-ownership.d.ts +18 -0
  292. package/dist/types/ultramodern-workspace/workspace-script-plan.d.ts +4 -5
  293. package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +8 -13
  294. package/dist/types/ultramodern-workspace/workspace-validation-contract.d.ts +22 -188
  295. package/dist/types/ultramodern-workspace/write-workspace.d.ts +1 -3
  296. package/package.json +18 -11
  297. package/{template-workspace/.modernjs/release-cohort.json → release-cohort.json} +88 -40
  298. package/template-workspace/.codex/skills/rspack-tracing/scripts/analyze_trace.js +1 -1
  299. package/template-workspace/README.md.handlebars +20 -35
  300. package/template-workspace/oxfmt.config.ts +3 -0
  301. package/template-workspace/pnpm-workspace.yaml.handlebars +0 -24
  302. package/template-workspace/scripts/bootstrap-agent-skills.mjs +4 -4
  303. package/templates/packages/shared-contracts-index.ts +4 -332
  304. package/templates/workspace/apps/modern.config.shared-module-federation.ts.handlebars +10 -0
  305. package/templates/workspace/apps/modern.config.ts.handlebars +13 -27
  306. package/templates/workspace/apps/shared/src/routes/ultramodern-route-metadata.ts.handlebars +21 -11
  307. package/templates/workspace/apps/shell-super-app/src/routes/[lang]/page.tsx.handlebars +20 -20
  308. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.helpers.tsx.handlebars +4 -6
  309. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.imports.tsx.handlebars +2 -2
  310. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.tsx.handlebars +11 -11
  311. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.worker.helpers.tsx.handlebars +1 -1
  312. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.worker.imports.tsx.handlebars +1 -1
  313. package/templates/workspace-scripts/generate-node-backend-federation.mjs +68 -77
  314. package/templates/workspace-scripts/generate-public-surface-assets.mjs +107 -207
  315. package/templates/workspace-scripts/materialize-zerops-runtime.mjs +12 -19
  316. package/templates/workspace-scripts/proof-cloudflare-version.mjs +53 -444
  317. package/templates/workspace-scripts/proof-node-backend-federation.mjs +212 -91
  318. package/templates/workspace-scripts/{proof-workerd-ssr.mts → proof-workerd-ssr.mjs} +434 -239
  319. package/templates/workspace-scripts/ultramodern-cloudflare-proof.mjs +25 -7
  320. package/templates/workspace-scripts/ultramodern-performance-readiness.mjs +45 -147
  321. package/templates/workspace-scripts/ultramodern-typecheck.mjs +1 -1
  322. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.cjs +0 -212
  323. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.cjs +0 -47
  324. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.cjs +0 -112
  325. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.cjs +0 -55
  326. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.cjs +0 -102
  327. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.cjs +0 -195
  328. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.cjs +0 -146
  329. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxlint.cjs +0 -110
  330. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.cjs +0 -67
  331. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.cjs +0 -307
  332. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.cjs +0 -58
  333. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.cjs +0 -71
  334. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.cjs +0 -151
  335. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/help.cjs +0 -67
  336. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/install.cjs +0 -52
  337. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/io.cjs +0 -447
  338. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.cjs +0 -323
  339. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-source.cjs +0 -87
  340. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.cjs +0 -612
  341. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.cjs +0 -376
  342. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.cjs +0 -73
  343. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/react-router-retirement.cjs +0 -215
  344. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.cjs +0 -135
  345. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect.cjs +0 -454
  346. package/dist/cjs/ultramodern-tooling/config/constants.cjs +0 -48
  347. package/dist/cjs/ultramodern-tooling/config/synthesize.cjs +0 -157
  348. package/dist/cjs/ultramodern-workspace/delivery-unit-schema/up-projection.cjs +0 -188
  349. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +0 -154
  350. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +0 -9
  351. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.js +0 -63
  352. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.js +0 -7
  353. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +0 -47
  354. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +0 -146
  355. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.js +0 -97
  356. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxlint.js +0 -61
  357. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.js +0 -16
  358. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +0 -258
  359. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.js +0 -10
  360. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.js +0 -8
  361. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.js +0 -15
  362. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.js +0 -100
  363. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/help.js +0 -29
  364. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/install.js +0 -14
  365. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/io.js +0 -385
  366. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +0 -276
  367. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-source.js +0 -49
  368. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +0 -559
  369. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +0 -329
  370. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +0 -19
  371. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/react-router-retirement.js +0 -148
  372. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.js +0 -80
  373. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect.js +0 -405
  374. package/dist/esm/ultramodern-tooling/config/constants.js +0 -4
  375. package/dist/esm/ultramodern-tooling/config/synthesize.js +0 -108
  376. package/dist/esm/ultramodern-workspace/delivery-unit-schema/up-projection.js +0 -129
  377. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +0 -155
  378. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +0 -10
  379. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.js +0 -64
  380. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.js +0 -8
  381. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +0 -48
  382. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +0 -147
  383. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.js +0 -98
  384. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxlint.js +0 -62
  385. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.js +0 -17
  386. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +0 -259
  387. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.js +0 -11
  388. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.js +0 -9
  389. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.js +0 -16
  390. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.js +0 -101
  391. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/help.js +0 -30
  392. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/install.js +0 -15
  393. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/io.js +0 -386
  394. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +0 -277
  395. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-source.js +0 -50
  396. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +0 -560
  397. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +0 -330
  398. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +0 -20
  399. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/react-router-retirement.js +0 -149
  400. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.js +0 -81
  401. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect.js +0 -406
  402. package/dist/esm-node/ultramodern-tooling/config/constants.js +0 -5
  403. package/dist/esm-node/ultramodern-tooling/config/synthesize.js +0 -109
  404. package/dist/esm-node/ultramodern-workspace/delivery-unit-schema/up-projection.js +0 -130
  405. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.d.ts +0 -12
  406. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.d.ts +0 -4
  407. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.d.ts +0 -1
  408. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.d.ts +0 -3
  409. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.d.ts +0 -5
  410. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.d.ts +0 -3
  411. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.d.ts +0 -2
  412. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxlint.d.ts +0 -2
  413. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.d.ts +0 -4
  414. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.d.ts +0 -3
  415. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.d.ts +0 -3
  416. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.d.ts +0 -8
  417. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.d.ts +0 -3
  418. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.d.ts +0 -3
  419. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/help.d.ts +0 -1
  420. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/install.d.ts +0 -2
  421. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/io.d.ts +0 -26
  422. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.d.ts +0 -25
  423. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/package-source.d.ts +0 -3
  424. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.d.ts +0 -26
  425. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.d.ts +0 -26
  426. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.d.ts +0 -6
  427. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/react-router-retirement.d.ts +0 -37
  428. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.d.ts +0 -4
  429. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect.d.ts +0 -2
  430. package/dist/types/ultramodern-tooling/config/constants.d.ts +0 -3
  431. package/dist/types/ultramodern-tooling/config/synthesize.d.ts +0 -5
  432. package/dist/types/ultramodern-workspace/delivery-unit-schema/up-projection.d.ts +0 -189
  433. package/template-workspace/patches/@module-federation__bridge-react@2.9.0.patch +0 -47
  434. package/template-workspace/patches/@module-federation__dts-plugin@2.9.0.patch +0 -26
  435. package/template-workspace/patches/@module-federation__modern-js-v3@2.9.0.patch +0 -268
  436. package/template-workspace/patches/@module-federation__runtime-core@2.9.0.patch +0 -13
  437. package/template-workspace/patches/drizzle-orm-ts7-strict-declarations.patch +0 -471
  438. package/template-workspace/patches/msgpackr@2.1.0.patch +0 -30
  439. package/template-workspace/patches/zod@4.5.4.patch +0 -56
  440. package/templates/workspace-scripts/check-ultramodern-api-boundaries.mts +0 -779
  441. package/templates/workspace-scripts/check-ultramodern-i18n-boundaries.mts +0 -9
  442. package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +0 -4109
@@ -1,54 +1,28 @@
1
1
  import { appHasApi, appI18nNamespace, distributedSsrExposes, remoteDependencyAlias, resolveApiProtocol, resolveApiStem, resolveRemoteRefs } from "./descriptors.js";
2
2
  import { renderFileTemplate } from "./fs-io.js";
3
3
  import { createTw, packageName, tailwindPrefixForApp, toPascalCase } from "./naming.js";
4
- function createFederatedI18nSetup(app, localeRoot) {
5
- const namespace = appI18nNamespace(app);
6
- return `import type { JSX } from 'react';
7
- import { FederatedI18nBoundary, useModernI18n } from '@modern-js/plugin-i18n/runtime/consumer';
8
- import csResource from '${localeRoot}/cs/${namespace}.json';
9
- import enResource from '${localeRoot}/en/${namespace}.json';
10
-
11
- const federatedI18nLanguages = ['en', 'cs'];
12
- const federatedI18nResources = {
13
- cs: { ${JSON.stringify(namespace)}: csResource },
14
- en: { ${JSON.stringify(namespace)}: enResource },
15
- };`;
16
- }
17
- function createFederatedI18nBoundary(namespace, content) {
18
- return `<FederatedI18nBoundary
19
- defaultNamespace="${namespace}"
20
- fallbackLanguage="en"
21
- resources={federatedI18nResources}
22
- supportedLanguages={federatedI18nLanguages}
23
- >
24
- ${content}
25
- </FederatedI18nBoundary>`;
26
- }
27
4
  function createShellPage(shell, remotes = []) {
28
5
  const tw = createTw(tailwindPrefixForApp(shell));
29
6
  const remoteCount = String(remotes.length);
30
7
  return renderFileTemplate('workspace/apps/shell-super-app/src/routes/[lang]/page.tsx', {
31
- value0: tw('mx-auto grid max-w-7xl items-center gap-8 py-8 md:grid-cols-[0.9fr_1.1fr] lg:gap-14'),
32
- value1: tw('min-w-0'),
33
- value2: tw('text-xs font-black uppercase tracking-[0.18em] text-emerald-800'),
34
- value3: tw('mt-3 max-w-3xl text-5xl font-black leading-none tracking-normal text-stone-950 md:text-7xl'),
35
- value4: tw('mt-5 max-w-2xl text-lg leading-8 text-stone-600'),
36
- value5: tw('mt-7 flex flex-wrap gap-3'),
37
- 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'),
38
- 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'),
39
- value8: tw('rounded-3xl bg-white/90 p-6 shadow-2xl shadow-stone-900/15'),
40
- value9: tw('grid gap-4 sm:grid-cols-2'),
41
- value10: tw('rounded-2xl bg-emerald-50 p-5'),
42
- value11: tw('text-sm font-black uppercase tracking-[0.16em] text-emerald-800'),
43
- value12: tw('mt-3 block text-3xl font-black text-stone-950'),
44
- value13: remoteCount,
45
- value14: tw('mt-2 text-sm font-semibold text-stone-600'),
46
- value15: tw('rounded-2xl bg-amber-50 p-5'),
47
- value16: tw('text-sm font-black uppercase tracking-[0.16em] text-amber-800'),
48
- value17: tw('mt-3 block text-3xl font-black text-stone-950'),
49
- value18: tw('mt-2 text-sm font-semibold text-stone-600'),
50
- value19: tw('sr-only'),
51
- value20: tw('sr-only')
8
+ heroClassName: tw('mx-auto grid max-w-7xl items-center gap-8 py-8 md:grid-cols-[0.9fr_1.1fr] lg:gap-14'),
9
+ heroContentClassName: tw('min-w-0'),
10
+ eyebrowClassName: tw('text-xs font-black uppercase tracking-[0.18em] text-emerald-800'),
11
+ titleClassName: tw('mt-3 max-w-3xl text-5xl font-black leading-none tracking-normal text-stone-950 md:text-7xl'),
12
+ ledeClassName: tw('mt-5 max-w-2xl text-lg leading-8 text-stone-600'),
13
+ actionsClassName: tw('mt-7 flex flex-wrap gap-3'),
14
+ primaryActionClassName: tw('inline-flex min-h-11 items-center justify-center rounded-full bg-emerald-800 px-5 font-bold text-white shadow-lg shadow-stone-900/10'),
15
+ secondaryActionClassName: tw('inline-flex min-h-11 items-center justify-center rounded-full border border-stone-900/15 bg-white/90 px-5 font-bold text-stone-950 shadow-lg shadow-stone-900/10'),
16
+ cardsClassName: tw('rounded-3xl bg-white/90 p-6 shadow-2xl shadow-stone-900/15'),
17
+ cardsGridClassName: tw('grid gap-4 sm:grid-cols-2'),
18
+ remoteCardClassName: tw('rounded-2xl bg-emerald-50 p-5'),
19
+ remoteCardKickerClassName: tw('text-sm font-black uppercase tracking-[0.16em] text-emerald-800'),
20
+ cardValueClassName: tw('mt-3 block text-3xl font-black text-stone-950'),
21
+ remoteCount,
22
+ cardBodyClassName: tw('mt-2 text-sm font-semibold text-stone-600'),
23
+ ssrCardClassName: tw('rounded-2xl bg-amber-50 p-5'),
24
+ ssrCardKickerClassName: tw('text-sm font-black uppercase tracking-[0.16em] text-amber-800'),
25
+ hiddenClassName: tw('sr-only')
52
26
  });
53
27
  }
54
28
  function createShellRemoteComponentsSource(shell, remotes = [], worker = false) {
@@ -67,8 +41,7 @@ function createShellRemoteComponentsSource(shell, remotes = [], worker = false)
67
41
  }).join('\n');
68
42
  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', {}) : '';
69
43
  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', {
70
- value0: shell.id,
71
- value1: tw('rounded-xl border border-red-900/20 bg-red-50 px-4 py-3 text-sm font-semibold text-red-900')
44
+ unavailableClassName: tw('rounded-xl border border-red-900/20 bg-red-50 px-4 py-3 text-sm font-semibold text-red-900')
72
45
  }) : '';
73
46
  const showcaseItems = widgetRemotes.map((remote)=>{
74
47
  const componentName = `${toPascalCase(remote.id)}Widget`;
@@ -80,19 +53,18 @@ ${showcaseItems}
80
53
  </div>`;
81
54
  const remoteCount = String(widgetRemotes.length);
82
55
  return renderFileTemplate('workspace/apps/shell-super-app/src/routes/vertical-components.tsx', {
83
- value0: federationImports,
84
- value1: remoteCount,
85
- value2: federationHelpers,
86
- value3: remoteComponentExports,
87
- value4: tw('flex min-w-0 flex-wrap items-center gap-x-8 gap-y-2 md:flex-1'),
88
- value5: shell.mfName,
89
- value6: tw('whitespace-nowrap text-xl font-black tracking-normal text-stone-950 no-underline'),
90
- 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'),
91
- value8: tw('mx-auto mt-12 max-w-7xl rounded-2xl bg-white/90 p-6 shadow-xl shadow-stone-900/10'),
92
- value9: tw('text-lg font-bold text-stone-700'),
93
- value10: tw('mx-auto mt-12 max-w-7xl'),
94
- value11: shell.mfName,
95
- value12: showcaseGrid
56
+ federationImports,
57
+ widgetCount: remoteCount,
58
+ federationHelpers,
59
+ remoteComponentExports,
60
+ headerClassName: tw('flex min-w-0 flex-wrap items-center gap-x-8 gap-y-2 md:flex-1'),
61
+ boundaryId: shell.mfName,
62
+ titleClassName: tw('whitespace-nowrap text-xl font-black tracking-normal text-stone-950 no-underline'),
63
+ statusBadgeClassName: 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'),
64
+ emptyShowcaseClassName: tw('mx-auto mt-12 max-w-7xl rounded-2xl bg-white/90 p-6 shadow-xl shadow-stone-900/10'),
65
+ emptyMessageClassName: tw('text-lg font-bold text-stone-700'),
66
+ showcaseClassName: tw('mx-auto mt-12 max-w-7xl'),
67
+ showcaseGrid
96
68
  });
97
69
  }
98
70
  function createShellRemoteComponents(shell, remotes = []) {
@@ -139,25 +111,23 @@ function createFederatedComponentsRegistry(scope, host, remotes, worker = false)
139
111
  {null}
140
112
  </DistributedSsrBoundary>
141
113
  ),` : ` ${entry.exportName}: createDistributedSsrComponent<${entry.exportName}Props>({
142
- createComponent: () =>
114
+ createComponent: options =>
143
115
  createLazyComponent<
144
116
  RemoteComponentModule<${entry.exportName}Props>,
145
117
  'default'
146
118
  >({
147
- export: 'default',
148
- fallback,
119
+ ...options,
149
120
  instance: getInstance(),
150
121
  loader: () =>
151
122
  import('${entry.remoteAlias}') as Promise<
152
123
  RemoteComponentModule<${entry.exportName}Props>
153
124
  >,
154
- loading: null,
155
125
  }),
156
126
  expose: '${entry.expose}',
157
127
  fallback,
158
128
  remote: '${entry.remoteId}',
159
129
  }),`).join('\n');
160
- 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';";
130
+ const runtimeImports = worker ? "import { DistributedSsrBoundary } from '@modern-js/federation-runtime';\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/federation-runtime';\nimport type { ComponentType, FunctionComponent, ReactNode } from 'react';";
161
131
  const moduleType = `
162
132
  ${worker ? '' : `interface RemoteComponentModule<Props extends object> {
163
133
  default: FunctionComponent<Props>;
@@ -277,46 +247,35 @@ export default function Layout() {
277
247
  `;
278
248
  }
279
249
  function createRemoteEntry(app) {
250
+ return createRemoteSurface(app, {
251
+ expose: './Route',
252
+ localeRoot: '../locales',
253
+ bodyTranslationKey: 'routeSurface'
254
+ });
255
+ }
256
+ function createRemoteSurface(app, { expose, localeRoot, bodyTranslationKey }) {
280
257
  const tw = createTw(tailwindPrefixForApp(app));
281
258
  const domain = app.domain ?? app.id;
282
259
  const namespace = appI18nNamespace(app);
283
- const componentName = `${toPascalCase(domain)}Route`;
284
- return `${createFederatedI18nSetup(app, '../locales')}
285
-
286
- const ${componentName}Content = () => {
287
- const { t } = useModernI18n();
260
+ const componentName = `${toPascalCase(domain)}${toPascalCase(expose.replace(/^\.\//u, ''))}`;
261
+ return `import type { JSX } from 'react';
262
+ import { FederatedI18nBoundary, useModernI18n } from '@modern-js/plugin-i18n/runtime/consumer';
263
+ import csResource from '${localeRoot}/cs/${namespace}.json';
264
+ import enResource from '${localeRoot}/en/${namespace}.json';
288
265
 
289
- return (
290
- <section className="${tw('rounded-2xl bg-white/90 p-5 shadow-xl shadow-stone-900/10')}" data-modern-boundary-id="${app.mfName}" data-modern-mf-expose="./Route">
291
- <h2 className="${tw('text-2xl font-black')}">{t('${domain}.title')}</h2>
292
- <p className="${tw('mt-2 text-stone-600')}">{t('${domain}.routeSurface')}</p>
293
- </section>
294
- );
266
+ const federatedI18nLanguages = ['en', 'cs'];
267
+ const federatedI18nResources = {
268
+ cs: { ${JSON.stringify(namespace)}: csResource },
269
+ en: { ${JSON.stringify(namespace)}: enResource },
295
270
  };
296
271
 
297
- export default function ${componentName}(props: Record<string, never>): JSX.Element {
298
- void props;
299
-
300
- return (
301
- ${createFederatedI18nBoundary(namespace, `<${componentName}Content />`)}
302
- );
303
- }
304
- `;
305
- }
306
- function createRemoteWidget(app) {
307
- const tw = createTw(tailwindPrefixForApp(app));
308
- const domain = app.domain ?? app.id;
309
- const componentName = `${toPascalCase(domain)}Widget`;
310
- const namespace = appI18nNamespace(app);
311
- return `${createFederatedI18nSetup(app, '../../locales')}
312
-
313
272
  const ${componentName}Content = () => {
314
273
  const { t } = useModernI18n();
315
274
 
316
275
  return (
317
- <section className="${tw('rounded-2xl bg-white/90 p-5 shadow-xl shadow-stone-900/10')}" data-modern-boundary-id="${app.mfName}" data-modern-mf-expose="./Widget">
276
+ <section className="${tw('rounded-2xl bg-white/90 p-5 shadow-xl shadow-stone-900/10')}" data-modern-boundary-id="${app.mfName}" data-modern-mf-expose="${expose}">
318
277
  <h2 className="${tw('text-2xl font-black')}">{t('${domain}.title')}</h2>
319
- <p className="${tw('mt-2 text-stone-600')}">{t('${domain}.widgetBody')}</p>
278
+ <p className="${tw('mt-2 text-stone-600')}">{t('${domain}.${bodyTranslationKey}')}</p>
320
279
  </section>
321
280
  );
322
281
  };
@@ -325,7 +284,14 @@ export default function ${componentName}(props: Record<string, never>): JSX.Elem
325
284
  void props;
326
285
 
327
286
  return (
328
- ${createFederatedI18nBoundary(namespace, `<${componentName}Content />`)}
287
+ <FederatedI18nBoundary
288
+ defaultNamespace="${namespace}"
289
+ fallbackLanguage="en"
290
+ resources={federatedI18nResources}
291
+ supportedLanguages={federatedI18nLanguages}
292
+ >
293
+ <${componentName}Content />
294
+ </FederatedI18nBoundary>
329
295
  );
330
296
  }
331
297
  `;
@@ -337,7 +303,7 @@ function createRemoteExposeFragmentPage(app, expose) {
337
303
  const componentName = toPascalCase(expose.replace(/^\.\//u, ''));
338
304
  const pageName = `${componentName}FragmentPage`;
339
305
  return `import type { ComponentProps } from 'react';
340
- import { useDistributedSsrFragmentProps } from '@modern-js/runtime/module-federation/distributed-ssr';
306
+ import { useDistributedSsrFragmentProps } from '@modern-js/federation-runtime/distributed-ssr';
341
307
  import ${componentName} from '${importPath}';
342
308
 
343
309
  export default function ${pageName}() {
@@ -357,342 +323,15 @@ export default function ${pageName}() {
357
323
  `;
358
324
  }
359
325
  function createRemoteExposeComponent(app, expose) {
360
- const tw = createTw(tailwindPrefixForApp(app));
361
- if ('./Widget' === expose) return createRemoteWidget(app);
362
- const componentName = `${toPascalCase(app.domain ?? app.id)}${toPascalCase(expose.replace(/^\.\//u, ''))}`;
363
- const domain = app.domain ?? app.id;
364
- const namespace = appI18nNamespace(app);
365
- return `${createFederatedI18nSetup(app, '../../locales')}
366
-
367
- const ${componentName}Content = () => {
368
- const { t } = useModernI18n();
369
-
370
- return (
371
- <section className="${tw('rounded-2xl bg-white/90 p-5 shadow-xl shadow-stone-900/10')}" data-modern-boundary-id="${app.mfName}" data-modern-mf-expose="${expose}">
372
- <h2 className="${tw('text-2xl font-black')}">{t('${domain}.title')}</h2>
373
- <p className="${tw('mt-2 text-stone-600')}">{t('${domain}.federatedSurface')}</p>
374
- </section>
375
- );
376
- };
377
-
378
- export default function ${componentName}(props: Record<string, never>): JSX.Element {
379
- void props;
380
-
381
- return (
382
- ${createFederatedI18nBoundary(namespace, `<${componentName}Content />`)}
383
- );
384
- }
385
- `;
326
+ return createRemoteSurface(app, {
327
+ expose,
328
+ localeRoot: '../../locales',
329
+ bodyTranslationKey: './Widget' === expose ? 'widgetBody' : 'federatedSurface'
330
+ });
386
331
  }
387
332
  function remoteComponentOutputPath(app, expose) {
388
333
  const exposePath = app.exposes?.[expose];
389
334
  if (!exposePath?.startsWith('./src/components/')) return;
390
335
  return `${app.directory}/${exposePath.replace(/^\.\//u, '')}`;
391
336
  }
392
- const tanstackRuntimeModule = '@modern-js/plugin-tanstack/runtime';
393
- function ensureNamedImport(source, moduleName, names) {
394
- const importEndMarker = `from '${moduleName}';`;
395
- const importEnd = source.indexOf(importEndMarker);
396
- if (importEnd >= 0) {
397
- const importStart = source.lastIndexOf('import ', importEnd);
398
- const openBrace = source.indexOf('{', importStart);
399
- const closeBrace = source.indexOf('}', openBrace);
400
- if (openBrace >= 0 && closeBrace >= 0 && closeBrace < importEnd) {
401
- const existingNames = source.slice(openBrace + 1, closeBrace).split(',').map((name)=>name.trim()).filter(Boolean);
402
- const missingNames = names.filter((name)=>!existingNames.includes(name));
403
- if (0 === missingNames.length) return source;
404
- const importedNames = [
405
- ...existingNames,
406
- ...missingNames
407
- ].toSorted((left, right)=>left.localeCompare(right));
408
- return `${source.slice(0, openBrace + 1)} ${importedNames.join(', ')} ${source.slice(closeBrace)}`;
409
- }
410
- }
411
- const firstImportEnd = source.indexOf('\n');
412
- const importLine = `import { ${names.join(', ')} } from '${moduleName}';\n`;
413
- return firstImportEnd < 0 ? `${importLine}${source}` : `${source.slice(0, firstImportEnd + 1)}${importLine}${source.slice(firstImportEnd + 1)}`;
414
- }
415
- function removeNamedImport(source, moduleName, name) {
416
- const importEndMarker = `from '${moduleName}';`;
417
- const importEnd = source.indexOf(importEndMarker);
418
- if (importEnd < 0) return source;
419
- const importStart = source.lastIndexOf('import ', importEnd);
420
- const openBrace = source.indexOf('{', importStart);
421
- const closeBrace = source.indexOf('}', openBrace);
422
- if (openBrace < 0 || closeBrace < 0 || closeBrace > importEnd) return source;
423
- const names = source.slice(openBrace + 1, closeBrace).split(',').map((importName)=>importName.trim()).filter((importName)=>'' !== importName && importName !== name);
424
- if (0 === names.length) {
425
- const lineEnd = source.indexOf('\n', importEnd + importEndMarker.length);
426
- return `${source.slice(0, importStart)}${source.slice(lineEnd < 0 ? source.length : lineEnd + 1)}`;
427
- }
428
- return `${source.slice(0, openBrace + 1)} ${names.join(', ')} ${source.slice(closeBrace)}`;
429
- }
430
- function ensureNavigateHook(source) {
431
- if (source.includes('const navigate = useNavigate();')) return source;
432
- const functionStart = source.indexOf('export default function ');
433
- const parametersEnd = source.indexOf(')', functionStart);
434
- const bodyStart = source.indexOf('{', parametersEnd);
435
- if (functionStart < 0 || parametersEnd < 0 || bodyStart < 0) return source;
436
- return `${source.slice(0, bodyStart + 1)}\n const navigate = useNavigate();${source.slice(bodyStart + 1)}`;
437
- }
438
- function closingParenthesis(source, openingParenthesis) {
439
- let depth = 0;
440
- let quote = '';
441
- let escaped = false;
442
- for(let index = openingParenthesis; index < source.length; index += 1){
443
- const character = source[index] ?? '';
444
- if ('' !== quote) {
445
- if (escaped) escaped = false;
446
- else if ('\\' === character) escaped = true;
447
- else if (character === quote) quote = '';
448
- continue;
449
- }
450
- if ("'" === character || '"' === character || '`' === character) quote = character;
451
- else if ('(' === character) depth += 1;
452
- else if (')' === character) {
453
- depth -= 1;
454
- if (0 === depth) return index;
455
- }
456
- }
457
- return -1;
458
- }
459
- function removeLegacyLocationSuffixHelper(source) {
460
- 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);', '');
461
- }
462
- function rewriteRouterLocationSuffix(source) {
463
- let changed = false;
464
- const next = source.replace(/^(\s*)to: `\$\{([^`\n]+)\}\$\{suffix\}`,/gmu, (_match, indentation, destination)=>{
465
- changed = true;
466
- return `${indentation}hash: true,\n${indentation}search: true,\n${indentation}to: ${destination},`;
467
- });
468
- return {
469
- changed,
470
- source: changed ? removeLegacyLocationSuffixHelper(next) : next
471
- };
472
- }
473
- function rewriteWindowLocationAssignments(source) {
474
- const callMarker = 'window.location.assign';
475
- let next = source;
476
- let searchFrom = 0;
477
- let changed = false;
478
- let preservesCurrentLocationState = false;
479
- while(true){
480
- const callStart = next.indexOf(callMarker, searchFrom);
481
- if (callStart < 0) break;
482
- const openingParenthesis = next.indexOf('(', callStart + callMarker.length);
483
- if (openingParenthesis < 0) break;
484
- const callEnd = closingParenthesis(next, openingParenthesis);
485
- if (callEnd < 0) break;
486
- let destination = next.slice(openingParenthesis + 1, callEnd).trim();
487
- if (destination.endsWith(',')) destination = destination.slice(0, -1).trimEnd();
488
- const preservesSuffix = destination.includes("${suffix}") && next.includes('const suffix = locationSuffix(location);');
489
- if (preservesSuffix) {
490
- destination = destination.replace("${suffix}", '');
491
- if (destination.startsWith('`${') && destination.endsWith('}`')) destination = destination.slice(3, -2);
492
- preservesCurrentLocationState = true;
493
- }
494
- const lineStart = next.lastIndexOf('\n', callStart) + 1;
495
- const indentation = next.slice(lineStart, callStart);
496
- const options = preservesSuffix ? `hash: true,\n${indentation} search: true,\n${indentation} to: ${destination},` : `to: ${destination},`;
497
- const replacement = `void navigate({\n${indentation} ${options}\n${indentation}})`;
498
- next = `${next.slice(0, callStart)}${replacement}${next.slice(callEnd + 1)}`;
499
- searchFrom = callStart + replacement.length;
500
- changed = true;
501
- }
502
- if (preservesCurrentLocationState) next = removeLegacyLocationSuffixHelper(next);
503
- return {
504
- changed,
505
- source: next
506
- };
507
- }
508
- function closingJsxTag(source, openingTagStart) {
509
- let braces = 0;
510
- let quote = '';
511
- let escaped = false;
512
- for(let index = openingTagStart; index < source.length; index += 1){
513
- const character = source[index] ?? '';
514
- if ('' !== quote) {
515
- if (escaped) escaped = false;
516
- else if ('\\' === character) escaped = true;
517
- else if (character === quote) quote = '';
518
- continue;
519
- }
520
- if ("'" === character || '"' === character || '`' === character) quote = character;
521
- else if ('{' === character) braces += 1;
522
- else if ('}' === character) braces -= 1;
523
- else if ('>' === character && 0 === braces) return index;
524
- }
525
- return -1;
526
- }
527
- function isInternalHref(openingTag) {
528
- return openingTag.includes('href="/') || openingTag.includes("href='/") || openingTag.includes('href={`/');
529
- }
530
- function removeSyntheticClickHandler(openingTag) {
531
- const onClickStart = openingTag.indexOf(' onClick=');
532
- if (onClickStart < 0) return openingTag;
533
- const valueStart = openingTag.indexOf('{', onClickStart);
534
- if (valueStart < 0) return openingTag;
535
- let depth = 0;
536
- for(let index = valueStart; index < openingTag.length; index += 1){
537
- const character = openingTag[index] ?? '';
538
- if ('{' === character) depth += 1;
539
- else if ('}' === character) {
540
- depth -= 1;
541
- if (0 === depth) {
542
- const handler = openingTag.slice(valueStart, index + 1);
543
- return handler.includes('preventDefault') ? `${openingTag.slice(0, onClickStart)}${openingTag.slice(index + 1)}` : openingTag;
544
- }
545
- }
546
- }
547
- return openingTag;
548
- }
549
- function rewriteCheckoutCartLink(source) {
550
- let changed = false;
551
- const next = source.replace(/^(\s*)to=\{`\/\$\{language\}\/cart\?sku=\$\{sku\}`\},?$/gmu, (_match, indentation)=>{
552
- changed = true;
553
- return `${indentation}params={{ lang: language }}\n${indentation}search={{ sku }}\n${indentation}to="/$lang/cart"`;
554
- });
555
- return {
556
- changed,
557
- source: next
558
- };
559
- }
560
- function rewriteCrossRemoteTractorsLink(source) {
561
- let next = source;
562
- let searchFrom = 0;
563
- let changed = false;
564
- while(true){
565
- const openingTagStart = next.indexOf('<Link', searchFrom);
566
- if (openingTagStart < 0) break;
567
- const openingTagEnd = closingJsxTag(next, openingTagStart);
568
- if (openingTagEnd < 0) break;
569
- const openingTag = next.slice(openingTagStart, openingTagEnd + 1);
570
- if (!openingTag.includes("to={`/${language}/tractors`}")) {
571
- searchFrom = openingTagEnd + 1;
572
- continue;
573
- }
574
- const closingTagStart = next.indexOf('</Link>', openingTagEnd + 1);
575
- if (closingTagStart < 0) break;
576
- const nativeOpeningTag = openingTag.replace('<Link', '<a').replace('to=', 'href=');
577
- next = `${next.slice(0, openingTagStart)}${nativeOpeningTag}${next.slice(openingTagEnd + 1, closingTagStart)}</a>${next.slice(closingTagStart + 7)}`;
578
- searchFrom = openingTagStart + nativeOpeningTag.length;
579
- changed = true;
580
- }
581
- return {
582
- changed,
583
- source: next
584
- };
585
- }
586
- function rewriteInternalAnchors(source) {
587
- let next = source;
588
- let searchFrom = 0;
589
- let changed = false;
590
- while(true){
591
- const openingTagStart = next.indexOf('<a', searchFrom);
592
- if (openingTagStart < 0) break;
593
- const boundary = next[openingTagStart + 2];
594
- if (' ' !== boundary && '\n' !== boundary && '\t' !== boundary) {
595
- searchFrom = openingTagStart + 2;
596
- continue;
597
- }
598
- const openingTagEnd = closingJsxTag(next, openingTagStart);
599
- if (openingTagEnd < 0) break;
600
- const openingTag = next.slice(openingTagStart, openingTagEnd + 1);
601
- if (!isInternalHref(openingTag)) {
602
- searchFrom = openingTagEnd + 1;
603
- continue;
604
- }
605
- const closingTagStart = next.indexOf('</a>', openingTagEnd + 1);
606
- if (closingTagStart < 0) break;
607
- const nativeOpeningTag = removeSyntheticClickHandler(openingTag).replace('<a', '<Link').replace('href=', 'to=');
608
- next = `${next.slice(0, openingTagStart)}${nativeOpeningTag}${next.slice(openingTagEnd + 1, closingTagStart)}</Link>${next.slice(closingTagStart + 4)}`;
609
- searchFrom = openingTagStart + nativeOpeningTag.length;
610
- changed = true;
611
- }
612
- return {
613
- changed,
614
- source: next
615
- };
616
- }
617
- function rewriteJsxElementName(source, elementName, componentName) {
618
- const openingMarker = `<${elementName}`;
619
- const closingMarker = `</${elementName}>`;
620
- let next = source;
621
- let searchFrom = 0;
622
- let changed = false;
623
- while(true){
624
- const openingTagStart = next.indexOf(openingMarker, searchFrom);
625
- if (openingTagStart < 0) break;
626
- const boundary = next[openingTagStart + openingMarker.length];
627
- if (' ' !== boundary && '\n' !== boundary && '\t' !== boundary) {
628
- searchFrom = openingTagStart + openingMarker.length;
629
- continue;
630
- }
631
- const openingTagEnd = closingJsxTag(next, openingTagStart);
632
- const closingTagStart = next.indexOf(closingMarker, openingTagEnd + 1);
633
- if (openingTagEnd < 0 || closingTagStart < 0) break;
634
- next = `${next.slice(0, openingTagStart)}<${componentName}${next.slice(openingTagStart + openingMarker.length, closingTagStart)}</${componentName}>${next.slice(closingTagStart + closingMarker.length)}`;
635
- searchFrom = openingTagStart + componentName.length + 1;
636
- changed = true;
637
- }
638
- return {
639
- changed,
640
- source: next
641
- };
642
- }
643
- function ensureNoPropsComponentContract(source) {
644
- let changed = false;
645
- let next = source.replace(/export default function ([A-Za-z_$][\w$]*)\(\) \{/u, (_match, componentName)=>{
646
- changed = true;
647
- return `export default function ${componentName}(\n props: Record<string, never>\n): JSX.Element {\n void props;`;
648
- });
649
- if (changed) next = ensureNamedImport(next, 'react', [
650
- 'JSX'
651
- ]);
652
- return {
653
- changed,
654
- source: next
655
- };
656
- }
657
- function regenerateGeneratedProductRouteAdapter(source) {
658
- let next = source.replaceAll('search.sku', "search['sku']");
659
- next = next.replace(/<(DecideProductPage|ProductPage) sku=\{sku\} slug=\{slug\} \/>/u, `<$1\n {...(sku === undefined ? {} : { sku })}\n {...(slug === undefined ? {} : { slug })}\n />`);
660
- return next;
661
- }
662
- function regenerateGeneratedNavigationSurface(source, kind) {
663
- const routerLocationSuffix = rewriteRouterLocationSuffix(source);
664
- const anchors = 'checkout-page' === kind ? rewriteCrossRemoteTractorsLink(routerLocationSuffix.source) : rewriteInternalAnchors(routerLocationSuffix.source);
665
- const cartLink = 'checkout-add-to-cart' === kind ? rewriteCheckoutCartLink(anchors.source) : {
666
- changed: false,
667
- source: anchors.source
668
- };
669
- const locationAssignments = rewriteWindowLocationAssignments(cartLink.source);
670
- const forms = 'demo-component' === kind || 'checkout-page' === kind ? rewriteJsxElementName(locationAssignments.source, 'form', 'Form') : {
671
- changed: false,
672
- source: locationAssignments.source
673
- };
674
- const noProps = 'checkout-page' === kind ? ensureNoPropsComponentContract(forms.source) : {
675
- changed: false,
676
- source: forms.source
677
- };
678
- let next = noProps.source;
679
- const usesLink = next.includes('<Link');
680
- if (forms.changed || anchors.changed && usesLink || locationAssignments.changed) {
681
- const imports = [
682
- ...forms.changed ? [
683
- 'Form'
684
- ] : [],
685
- ...anchors.changed && usesLink ? [
686
- 'Link'
687
- ] : [],
688
- ...locationAssignments.changed ? [
689
- 'useNavigate'
690
- ] : []
691
- ];
692
- next = ensureNamedImport(next, tanstackRuntimeModule, imports);
693
- }
694
- if (!usesLink) next = removeNamedImport(next, tanstackRuntimeModule, 'Link');
695
- if (locationAssignments.changed) next = ensureNavigateHook(next);
696
- return next;
697
- }
698
- export { createFederatedComponentsRegistry, createLayout, createRemoteEntry, createRemoteExposeComponent, createRemoteExposeFragmentPage, createRemotePage, createShellPage, createShellRemoteComponents, createShellWorkerRemoteComponents, regenerateGeneratedNavigationSurface, regenerateGeneratedProductRouteAdapter, remoteComponentOutputPath };
337
+ export { createFederatedComponentsRegistry, createLayout, createRemoteEntry, createRemoteExposeComponent, createRemoteExposeFragmentPage, createRemotePage, createShellPage, createShellRemoteComponents, createShellWorkerRemoteComponents, remoteComponentOutputPath };
@@ -1,5 +1,4 @@
1
1
  import { packageName, toCamelCase, toEnvSegment, toKebabCase, toPascalCase } from "./naming.js";
2
- const ULTRAMODERN_CONFIG_PATH = '.modernjs/ultramodern.json';
3
2
  function distributedSsrExposes(app) {
4
3
  return Object.keys(app.exposes ?? {}).filter((expose)=>'./Route' !== expose).toSorted();
5
4
  }
@@ -188,4 +187,4 @@ function createCloudflarePublicUrlEnv(app) {
188
187
  function appI18nNamespace(app) {
189
188
  return 'shell' === app.kind ? 'shell' : app.domain ?? app.id;
190
189
  }
191
- export { ULTRAMODERN_CONFIG_PATH, appEmitsBrowserUi, appHasApi, appI18nNamespace, createBackendFederationContainerEntry, createBackendFederationManifestEnv, createBackendFederationManifestUrl, createBackendFederationName, createCloudflarePublicUrlEnv, createCloudflareWorkerName, createModuleFederationRemoteContracts, createNeutralOwnership, createRemoteManifestEnv, createShellHost, createVerticalDescriptor, distributedSsrExposes, distributedSsrFragmentRoute, distributedSsrFragmentSlug, remoteDependencyAlias, resolveApiPrefix, resolveApiProtocol, resolveApiStem, resolveRemoteRefs, sharedPackages, shellApp, verticalApiApps, zephyrRemoteDependency };
190
+ export { appEmitsBrowserUi, appHasApi, appI18nNamespace, createBackendFederationContainerEntry, createBackendFederationManifestEnv, createBackendFederationManifestUrl, createBackendFederationName, createCloudflarePublicUrlEnv, createCloudflareWorkerName, createModuleFederationRemoteContracts, createNeutralOwnership, createRemoteManifestEnv, createShellHost, createVerticalDescriptor, distributedSsrExposes, distributedSsrFragmentRoute, distributedSsrFragmentSlug, remoteDependencyAlias, resolveApiPrefix, resolveApiProtocol, resolveApiStem, resolveRemoteRefs, sharedPackages, shellApp, verticalApiApps, zephyrRemoteDependency };
@@ -24,7 +24,8 @@ const workspaceOxfmtIgnorePatterns = [
24
24
  '.modern',
25
25
  '.modernjs',
26
26
  '**/modern-tanstack/**',
27
- '**/routeTree.gen.*'
27
+ '**/routeTree.gen.*',
28
+ '**/src/routes/ultramodern-route-metadata.ts'
28
29
  ];
29
30
  const formattableExtensions = new Set([
30
31
  '.cjs',
@@ -99,7 +100,39 @@ function writeFileReplacing(targetDir, relativePath, content) {
99
100
  function writeJson(targetDir, relativePath, value) {
100
101
  writeFile(targetDir, relativePath, `${JSON.stringify(value, null, 2)}\n`);
101
102
  }
102
- function formatGeneratedSourceCandidates(sources) {
103
+ function formatGeneratedSourceCandidates(sources, formattingWorkspaceRoot) {
104
+ if (formattingWorkspaceRoot) {
105
+ const oxfmtBin = resolveOxfmtBin();
106
+ return sources.map(([relativePath, source])=>{
107
+ assertSafeRelativePath(relativePath);
108
+ if (!formattableExtensions.has(node_path.extname(relativePath))) return source;
109
+ const result = spawnSync(process.execPath, [
110
+ oxfmtBin,
111
+ '--stdin-filepath',
112
+ node_path.resolve(formattingWorkspaceRoot, relativePath)
113
+ ], {
114
+ cwd: formattingWorkspaceRoot,
115
+ input: source,
116
+ encoding: 'utf-8',
117
+ env: {
118
+ ...process.env,
119
+ FORCE_COLOR: '0'
120
+ }
121
+ });
122
+ if (0 !== result.status) {
123
+ const detail = [
124
+ result.error?.message,
125
+ result.stderr?.trim(),
126
+ result.stdout?.trim()
127
+ ].filter(Boolean).join('\n');
128
+ throw new Error([
129
+ 'Failed to format generated UltraModern workspace output.',
130
+ detail
131
+ ].filter(Boolean).join('\n'));
132
+ }
133
+ return result.stdout;
134
+ });
135
+ }
103
136
  const temporaryRoot = node_fs.mkdtempSync(node_path.join(node_os.tmpdir(), 'ultramodern-format-'));
104
137
  try {
105
138
  sources.forEach(([relativePath, source])=>writeFileReplacing(temporaryRoot, relativePath, source));
@@ -166,7 +199,9 @@ function writePreformatConfig(targetDir) {
166
199
  ' ignorePatterns: [',
167
200
  ...workspaceOxfmtIgnorePatterns.map((pattern)=>` ${JSON.stringify(pattern)},`),
168
201
  ' ],',
202
+ ' printWidth: 120,',
169
203
  ' singleQuote: true,',
204
+ " trailingComma: 'all',",
170
205
  '});',
171
206
  ''
172
207
  ].join('\n'), 'utf-8');