@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
@@ -2,54 +2,28 @@ import "node:module";
2
2
  import { appHasApi, appI18nNamespace, distributedSsrExposes, remoteDependencyAlias, resolveApiProtocol, resolveApiStem, resolveRemoteRefs } from "./descriptors.js";
3
3
  import { renderFileTemplate } from "./fs-io.js";
4
4
  import { createTw, packageName, tailwindPrefixForApp, toPascalCase } from "./naming.js";
5
- function createFederatedI18nSetup(app, localeRoot) {
6
- const namespace = appI18nNamespace(app);
7
- return `import type { JSX } from 'react';
8
- import { FederatedI18nBoundary, useModernI18n } from '@modern-js/plugin-i18n/runtime/consumer';
9
- import csResource from '${localeRoot}/cs/${namespace}.json';
10
- import enResource from '${localeRoot}/en/${namespace}.json';
11
-
12
- const federatedI18nLanguages = ['en', 'cs'];
13
- const federatedI18nResources = {
14
- cs: { ${JSON.stringify(namespace)}: csResource },
15
- en: { ${JSON.stringify(namespace)}: enResource },
16
- };`;
17
- }
18
- function createFederatedI18nBoundary(namespace, content) {
19
- return `<FederatedI18nBoundary
20
- defaultNamespace="${namespace}"
21
- fallbackLanguage="en"
22
- resources={federatedI18nResources}
23
- supportedLanguages={federatedI18nLanguages}
24
- >
25
- ${content}
26
- </FederatedI18nBoundary>`;
27
- }
28
5
  function createShellPage(shell, remotes = []) {
29
6
  const tw = createTw(tailwindPrefixForApp(shell));
30
7
  const remoteCount = String(remotes.length);
31
8
  return renderFileTemplate('workspace/apps/shell-super-app/src/routes/[lang]/page.tsx', {
32
- value0: tw('mx-auto grid max-w-7xl items-center gap-8 py-8 md:grid-cols-[0.9fr_1.1fr] lg:gap-14'),
33
- value1: tw('min-w-0'),
34
- value2: tw('text-xs font-black uppercase tracking-[0.18em] text-emerald-800'),
35
- value3: tw('mt-3 max-w-3xl text-5xl font-black leading-none tracking-normal text-stone-950 md:text-7xl'),
36
- value4: tw('mt-5 max-w-2xl text-lg leading-8 text-stone-600'),
37
- value5: tw('mt-7 flex flex-wrap gap-3'),
38
- 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'),
39
- 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'),
40
- value8: tw('rounded-3xl bg-white/90 p-6 shadow-2xl shadow-stone-900/15'),
41
- value9: tw('grid gap-4 sm:grid-cols-2'),
42
- value10: tw('rounded-2xl bg-emerald-50 p-5'),
43
- value11: tw('text-sm font-black uppercase tracking-[0.16em] text-emerald-800'),
44
- value12: tw('mt-3 block text-3xl font-black text-stone-950'),
45
- value13: remoteCount,
46
- value14: tw('mt-2 text-sm font-semibold text-stone-600'),
47
- value15: tw('rounded-2xl bg-amber-50 p-5'),
48
- value16: tw('text-sm font-black uppercase tracking-[0.16em] text-amber-800'),
49
- value17: tw('mt-3 block text-3xl font-black text-stone-950'),
50
- value18: tw('mt-2 text-sm font-semibold text-stone-600'),
51
- value19: tw('sr-only'),
52
- value20: tw('sr-only')
9
+ heroClassName: tw('mx-auto grid max-w-7xl items-center gap-8 py-8 md:grid-cols-[0.9fr_1.1fr] lg:gap-14'),
10
+ heroContentClassName: tw('min-w-0'),
11
+ eyebrowClassName: tw('text-xs font-black uppercase tracking-[0.18em] text-emerald-800'),
12
+ titleClassName: tw('mt-3 max-w-3xl text-5xl font-black leading-none tracking-normal text-stone-950 md:text-7xl'),
13
+ ledeClassName: tw('mt-5 max-w-2xl text-lg leading-8 text-stone-600'),
14
+ actionsClassName: tw('mt-7 flex flex-wrap gap-3'),
15
+ 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'),
16
+ 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'),
17
+ cardsClassName: tw('rounded-3xl bg-white/90 p-6 shadow-2xl shadow-stone-900/15'),
18
+ cardsGridClassName: tw('grid gap-4 sm:grid-cols-2'),
19
+ remoteCardClassName: tw('rounded-2xl bg-emerald-50 p-5'),
20
+ remoteCardKickerClassName: tw('text-sm font-black uppercase tracking-[0.16em] text-emerald-800'),
21
+ cardValueClassName: tw('mt-3 block text-3xl font-black text-stone-950'),
22
+ remoteCount,
23
+ cardBodyClassName: tw('mt-2 text-sm font-semibold text-stone-600'),
24
+ ssrCardClassName: tw('rounded-2xl bg-amber-50 p-5'),
25
+ ssrCardKickerClassName: tw('text-sm font-black uppercase tracking-[0.16em] text-amber-800'),
26
+ hiddenClassName: tw('sr-only')
53
27
  });
54
28
  }
55
29
  function createShellRemoteComponentsSource(shell, remotes = [], worker = false) {
@@ -68,8 +42,7 @@ function createShellRemoteComponentsSource(shell, remotes = [], worker = false)
68
42
  }).join('\n');
69
43
  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', {}) : '';
70
44
  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', {
71
- value0: shell.id,
72
- value1: tw('rounded-xl border border-red-900/20 bg-red-50 px-4 py-3 text-sm font-semibold text-red-900')
45
+ unavailableClassName: tw('rounded-xl border border-red-900/20 bg-red-50 px-4 py-3 text-sm font-semibold text-red-900')
73
46
  }) : '';
74
47
  const showcaseItems = widgetRemotes.map((remote)=>{
75
48
  const componentName = `${toPascalCase(remote.id)}Widget`;
@@ -81,19 +54,18 @@ ${showcaseItems}
81
54
  </div>`;
82
55
  const remoteCount = String(widgetRemotes.length);
83
56
  return renderFileTemplate('workspace/apps/shell-super-app/src/routes/vertical-components.tsx', {
84
- value0: federationImports,
85
- value1: remoteCount,
86
- value2: federationHelpers,
87
- value3: remoteComponentExports,
88
- value4: tw('flex min-w-0 flex-wrap items-center gap-x-8 gap-y-2 md:flex-1'),
89
- value5: shell.mfName,
90
- value6: tw('whitespace-nowrap text-xl font-black tracking-normal text-stone-950 no-underline'),
91
- 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'),
92
- value8: tw('mx-auto mt-12 max-w-7xl rounded-2xl bg-white/90 p-6 shadow-xl shadow-stone-900/10'),
93
- value9: tw('text-lg font-bold text-stone-700'),
94
- value10: tw('mx-auto mt-12 max-w-7xl'),
95
- value11: shell.mfName,
96
- value12: showcaseGrid
57
+ federationImports,
58
+ widgetCount: remoteCount,
59
+ federationHelpers,
60
+ remoteComponentExports,
61
+ headerClassName: tw('flex min-w-0 flex-wrap items-center gap-x-8 gap-y-2 md:flex-1'),
62
+ boundaryId: shell.mfName,
63
+ titleClassName: tw('whitespace-nowrap text-xl font-black tracking-normal text-stone-950 no-underline'),
64
+ 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'),
65
+ emptyShowcaseClassName: tw('mx-auto mt-12 max-w-7xl rounded-2xl bg-white/90 p-6 shadow-xl shadow-stone-900/10'),
66
+ emptyMessageClassName: tw('text-lg font-bold text-stone-700'),
67
+ showcaseClassName: tw('mx-auto mt-12 max-w-7xl'),
68
+ showcaseGrid
97
69
  });
98
70
  }
99
71
  function createShellRemoteComponents(shell, remotes = []) {
@@ -140,25 +112,23 @@ function createFederatedComponentsRegistry(scope, host, remotes, worker = false)
140
112
  {null}
141
113
  </DistributedSsrBoundary>
142
114
  ),` : ` ${entry.exportName}: createDistributedSsrComponent<${entry.exportName}Props>({
143
- createComponent: () =>
115
+ createComponent: options =>
144
116
  createLazyComponent<
145
117
  RemoteComponentModule<${entry.exportName}Props>,
146
118
  'default'
147
119
  >({
148
- export: 'default',
149
- fallback,
120
+ ...options,
150
121
  instance: getInstance(),
151
122
  loader: () =>
152
123
  import('${entry.remoteAlias}') as Promise<
153
124
  RemoteComponentModule<${entry.exportName}Props>
154
125
  >,
155
- loading: null,
156
126
  }),
157
127
  expose: '${entry.expose}',
158
128
  fallback,
159
129
  remote: '${entry.remoteId}',
160
130
  }),`).join('\n');
161
- 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';";
131
+ 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';";
162
132
  const moduleType = `
163
133
  ${worker ? '' : `interface RemoteComponentModule<Props extends object> {
164
134
  default: FunctionComponent<Props>;
@@ -278,46 +248,35 @@ export default function Layout() {
278
248
  `;
279
249
  }
280
250
  function createRemoteEntry(app) {
251
+ return createRemoteSurface(app, {
252
+ expose: './Route',
253
+ localeRoot: '../locales',
254
+ bodyTranslationKey: 'routeSurface'
255
+ });
256
+ }
257
+ function createRemoteSurface(app, { expose, localeRoot, bodyTranslationKey }) {
281
258
  const tw = createTw(tailwindPrefixForApp(app));
282
259
  const domain = app.domain ?? app.id;
283
260
  const namespace = appI18nNamespace(app);
284
- const componentName = `${toPascalCase(domain)}Route`;
285
- return `${createFederatedI18nSetup(app, '../locales')}
286
-
287
- const ${componentName}Content = () => {
288
- const { t } = useModernI18n();
261
+ const componentName = `${toPascalCase(domain)}${toPascalCase(expose.replace(/^\.\//u, ''))}`;
262
+ return `import type { JSX } from 'react';
263
+ import { FederatedI18nBoundary, useModernI18n } from '@modern-js/plugin-i18n/runtime/consumer';
264
+ import csResource from '${localeRoot}/cs/${namespace}.json';
265
+ import enResource from '${localeRoot}/en/${namespace}.json';
289
266
 
290
- return (
291
- <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">
292
- <h2 className="${tw('text-2xl font-black')}">{t('${domain}.title')}</h2>
293
- <p className="${tw('mt-2 text-stone-600')}">{t('${domain}.routeSurface')}</p>
294
- </section>
295
- );
267
+ const federatedI18nLanguages = ['en', 'cs'];
268
+ const federatedI18nResources = {
269
+ cs: { ${JSON.stringify(namespace)}: csResource },
270
+ en: { ${JSON.stringify(namespace)}: enResource },
296
271
  };
297
272
 
298
- export default function ${componentName}(props: Record<string, never>): JSX.Element {
299
- void props;
300
-
301
- return (
302
- ${createFederatedI18nBoundary(namespace, `<${componentName}Content />`)}
303
- );
304
- }
305
- `;
306
- }
307
- function createRemoteWidget(app) {
308
- const tw = createTw(tailwindPrefixForApp(app));
309
- const domain = app.domain ?? app.id;
310
- const componentName = `${toPascalCase(domain)}Widget`;
311
- const namespace = appI18nNamespace(app);
312
- return `${createFederatedI18nSetup(app, '../../locales')}
313
-
314
273
  const ${componentName}Content = () => {
315
274
  const { t } = useModernI18n();
316
275
 
317
276
  return (
318
- <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">
277
+ <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}">
319
278
  <h2 className="${tw('text-2xl font-black')}">{t('${domain}.title')}</h2>
320
- <p className="${tw('mt-2 text-stone-600')}">{t('${domain}.widgetBody')}</p>
279
+ <p className="${tw('mt-2 text-stone-600')}">{t('${domain}.${bodyTranslationKey}')}</p>
321
280
  </section>
322
281
  );
323
282
  };
@@ -326,7 +285,14 @@ export default function ${componentName}(props: Record<string, never>): JSX.Elem
326
285
  void props;
327
286
 
328
287
  return (
329
- ${createFederatedI18nBoundary(namespace, `<${componentName}Content />`)}
288
+ <FederatedI18nBoundary
289
+ defaultNamespace="${namespace}"
290
+ fallbackLanguage="en"
291
+ resources={federatedI18nResources}
292
+ supportedLanguages={federatedI18nLanguages}
293
+ >
294
+ <${componentName}Content />
295
+ </FederatedI18nBoundary>
330
296
  );
331
297
  }
332
298
  `;
@@ -338,7 +304,7 @@ function createRemoteExposeFragmentPage(app, expose) {
338
304
  const componentName = toPascalCase(expose.replace(/^\.\//u, ''));
339
305
  const pageName = `${componentName}FragmentPage`;
340
306
  return `import type { ComponentProps } from 'react';
341
- import { useDistributedSsrFragmentProps } from '@modern-js/runtime/module-federation/distributed-ssr';
307
+ import { useDistributedSsrFragmentProps } from '@modern-js/federation-runtime/distributed-ssr';
342
308
  import ${componentName} from '${importPath}';
343
309
 
344
310
  export default function ${pageName}() {
@@ -358,342 +324,15 @@ export default function ${pageName}() {
358
324
  `;
359
325
  }
360
326
  function createRemoteExposeComponent(app, expose) {
361
- const tw = createTw(tailwindPrefixForApp(app));
362
- if ('./Widget' === expose) return createRemoteWidget(app);
363
- const componentName = `${toPascalCase(app.domain ?? app.id)}${toPascalCase(expose.replace(/^\.\//u, ''))}`;
364
- const domain = app.domain ?? app.id;
365
- const namespace = appI18nNamespace(app);
366
- return `${createFederatedI18nSetup(app, '../../locales')}
367
-
368
- const ${componentName}Content = () => {
369
- const { t } = useModernI18n();
370
-
371
- return (
372
- <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}">
373
- <h2 className="${tw('text-2xl font-black')}">{t('${domain}.title')}</h2>
374
- <p className="${tw('mt-2 text-stone-600')}">{t('${domain}.federatedSurface')}</p>
375
- </section>
376
- );
377
- };
378
-
379
- export default function ${componentName}(props: Record<string, never>): JSX.Element {
380
- void props;
381
-
382
- return (
383
- ${createFederatedI18nBoundary(namespace, `<${componentName}Content />`)}
384
- );
385
- }
386
- `;
327
+ return createRemoteSurface(app, {
328
+ expose,
329
+ localeRoot: '../../locales',
330
+ bodyTranslationKey: './Widget' === expose ? 'widgetBody' : 'federatedSurface'
331
+ });
387
332
  }
388
333
  function remoteComponentOutputPath(app, expose) {
389
334
  const exposePath = app.exposes?.[expose];
390
335
  if (!exposePath?.startsWith('./src/components/')) return;
391
336
  return `${app.directory}/${exposePath.replace(/^\.\//u, '')}`;
392
337
  }
393
- const tanstackRuntimeModule = '@modern-js/plugin-tanstack/runtime';
394
- function ensureNamedImport(source, moduleName, names) {
395
- const importEndMarker = `from '${moduleName}';`;
396
- const importEnd = source.indexOf(importEndMarker);
397
- if (importEnd >= 0) {
398
- const importStart = source.lastIndexOf('import ', importEnd);
399
- const openBrace = source.indexOf('{', importStart);
400
- const closeBrace = source.indexOf('}', openBrace);
401
- if (openBrace >= 0 && closeBrace >= 0 && closeBrace < importEnd) {
402
- const existingNames = source.slice(openBrace + 1, closeBrace).split(',').map((name)=>name.trim()).filter(Boolean);
403
- const missingNames = names.filter((name)=>!existingNames.includes(name));
404
- if (0 === missingNames.length) return source;
405
- const importedNames = [
406
- ...existingNames,
407
- ...missingNames
408
- ].toSorted((left, right)=>left.localeCompare(right));
409
- return `${source.slice(0, openBrace + 1)} ${importedNames.join(', ')} ${source.slice(closeBrace)}`;
410
- }
411
- }
412
- const firstImportEnd = source.indexOf('\n');
413
- const importLine = `import { ${names.join(', ')} } from '${moduleName}';\n`;
414
- return firstImportEnd < 0 ? `${importLine}${source}` : `${source.slice(0, firstImportEnd + 1)}${importLine}${source.slice(firstImportEnd + 1)}`;
415
- }
416
- function removeNamedImport(source, moduleName, name) {
417
- const importEndMarker = `from '${moduleName}';`;
418
- const importEnd = source.indexOf(importEndMarker);
419
- if (importEnd < 0) return source;
420
- const importStart = source.lastIndexOf('import ', importEnd);
421
- const openBrace = source.indexOf('{', importStart);
422
- const closeBrace = source.indexOf('}', openBrace);
423
- if (openBrace < 0 || closeBrace < 0 || closeBrace > importEnd) return source;
424
- const names = source.slice(openBrace + 1, closeBrace).split(',').map((importName)=>importName.trim()).filter((importName)=>'' !== importName && importName !== name);
425
- if (0 === names.length) {
426
- const lineEnd = source.indexOf('\n', importEnd + importEndMarker.length);
427
- return `${source.slice(0, importStart)}${source.slice(lineEnd < 0 ? source.length : lineEnd + 1)}`;
428
- }
429
- return `${source.slice(0, openBrace + 1)} ${names.join(', ')} ${source.slice(closeBrace)}`;
430
- }
431
- function ensureNavigateHook(source) {
432
- if (source.includes('const navigate = useNavigate();')) return source;
433
- const functionStart = source.indexOf('export default function ');
434
- const parametersEnd = source.indexOf(')', functionStart);
435
- const bodyStart = source.indexOf('{', parametersEnd);
436
- if (functionStart < 0 || parametersEnd < 0 || bodyStart < 0) return source;
437
- return `${source.slice(0, bodyStart + 1)}\n const navigate = useNavigate();${source.slice(bodyStart + 1)}`;
438
- }
439
- function closingParenthesis(source, openingParenthesis) {
440
- let depth = 0;
441
- let quote = '';
442
- let escaped = false;
443
- for(let index = openingParenthesis; index < source.length; index += 1){
444
- const character = source[index] ?? '';
445
- if ('' !== quote) {
446
- if (escaped) escaped = false;
447
- else if ('\\' === character) escaped = true;
448
- else if (character === quote) quote = '';
449
- continue;
450
- }
451
- if ("'" === character || '"' === character || '`' === character) quote = character;
452
- else if ('(' === character) depth += 1;
453
- else if (')' === character) {
454
- depth -= 1;
455
- if (0 === depth) return index;
456
- }
457
- }
458
- return -1;
459
- }
460
- function removeLegacyLocationSuffixHelper(source) {
461
- 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);', '');
462
- }
463
- function rewriteRouterLocationSuffix(source) {
464
- let changed = false;
465
- const next = source.replace(/^(\s*)to: `\$\{([^`\n]+)\}\$\{suffix\}`,/gmu, (_match, indentation, destination)=>{
466
- changed = true;
467
- return `${indentation}hash: true,\n${indentation}search: true,\n${indentation}to: ${destination},`;
468
- });
469
- return {
470
- changed,
471
- source: changed ? removeLegacyLocationSuffixHelper(next) : next
472
- };
473
- }
474
- function rewriteWindowLocationAssignments(source) {
475
- const callMarker = 'window.location.assign';
476
- let next = source;
477
- let searchFrom = 0;
478
- let changed = false;
479
- let preservesCurrentLocationState = false;
480
- while(true){
481
- const callStart = next.indexOf(callMarker, searchFrom);
482
- if (callStart < 0) break;
483
- const openingParenthesis = next.indexOf('(', callStart + callMarker.length);
484
- if (openingParenthesis < 0) break;
485
- const callEnd = closingParenthesis(next, openingParenthesis);
486
- if (callEnd < 0) break;
487
- let destination = next.slice(openingParenthesis + 1, callEnd).trim();
488
- if (destination.endsWith(',')) destination = destination.slice(0, -1).trimEnd();
489
- const preservesSuffix = destination.includes("${suffix}") && next.includes('const suffix = locationSuffix(location);');
490
- if (preservesSuffix) {
491
- destination = destination.replace("${suffix}", '');
492
- if (destination.startsWith('`${') && destination.endsWith('}`')) destination = destination.slice(3, -2);
493
- preservesCurrentLocationState = true;
494
- }
495
- const lineStart = next.lastIndexOf('\n', callStart) + 1;
496
- const indentation = next.slice(lineStart, callStart);
497
- const options = preservesSuffix ? `hash: true,\n${indentation} search: true,\n${indentation} to: ${destination},` : `to: ${destination},`;
498
- const replacement = `void navigate({\n${indentation} ${options}\n${indentation}})`;
499
- next = `${next.slice(0, callStart)}${replacement}${next.slice(callEnd + 1)}`;
500
- searchFrom = callStart + replacement.length;
501
- changed = true;
502
- }
503
- if (preservesCurrentLocationState) next = removeLegacyLocationSuffixHelper(next);
504
- return {
505
- changed,
506
- source: next
507
- };
508
- }
509
- function closingJsxTag(source, openingTagStart) {
510
- let braces = 0;
511
- let quote = '';
512
- let escaped = false;
513
- for(let index = openingTagStart; index < source.length; index += 1){
514
- const character = source[index] ?? '';
515
- if ('' !== quote) {
516
- if (escaped) escaped = false;
517
- else if ('\\' === character) escaped = true;
518
- else if (character === quote) quote = '';
519
- continue;
520
- }
521
- if ("'" === character || '"' === character || '`' === character) quote = character;
522
- else if ('{' === character) braces += 1;
523
- else if ('}' === character) braces -= 1;
524
- else if ('>' === character && 0 === braces) return index;
525
- }
526
- return -1;
527
- }
528
- function isInternalHref(openingTag) {
529
- return openingTag.includes('href="/') || openingTag.includes("href='/") || openingTag.includes('href={`/');
530
- }
531
- function removeSyntheticClickHandler(openingTag) {
532
- const onClickStart = openingTag.indexOf(' onClick=');
533
- if (onClickStart < 0) return openingTag;
534
- const valueStart = openingTag.indexOf('{', onClickStart);
535
- if (valueStart < 0) return openingTag;
536
- let depth = 0;
537
- for(let index = valueStart; index < openingTag.length; index += 1){
538
- const character = openingTag[index] ?? '';
539
- if ('{' === character) depth += 1;
540
- else if ('}' === character) {
541
- depth -= 1;
542
- if (0 === depth) {
543
- const handler = openingTag.slice(valueStart, index + 1);
544
- return handler.includes('preventDefault') ? `${openingTag.slice(0, onClickStart)}${openingTag.slice(index + 1)}` : openingTag;
545
- }
546
- }
547
- }
548
- return openingTag;
549
- }
550
- function rewriteCheckoutCartLink(source) {
551
- let changed = false;
552
- const next = source.replace(/^(\s*)to=\{`\/\$\{language\}\/cart\?sku=\$\{sku\}`\},?$/gmu, (_match, indentation)=>{
553
- changed = true;
554
- return `${indentation}params={{ lang: language }}\n${indentation}search={{ sku }}\n${indentation}to="/$lang/cart"`;
555
- });
556
- return {
557
- changed,
558
- source: next
559
- };
560
- }
561
- function rewriteCrossRemoteTractorsLink(source) {
562
- let next = source;
563
- let searchFrom = 0;
564
- let changed = false;
565
- while(true){
566
- const openingTagStart = next.indexOf('<Link', searchFrom);
567
- if (openingTagStart < 0) break;
568
- const openingTagEnd = closingJsxTag(next, openingTagStart);
569
- if (openingTagEnd < 0) break;
570
- const openingTag = next.slice(openingTagStart, openingTagEnd + 1);
571
- if (!openingTag.includes("to={`/${language}/tractors`}")) {
572
- searchFrom = openingTagEnd + 1;
573
- continue;
574
- }
575
- const closingTagStart = next.indexOf('</Link>', openingTagEnd + 1);
576
- if (closingTagStart < 0) break;
577
- const nativeOpeningTag = openingTag.replace('<Link', '<a').replace('to=', 'href=');
578
- next = `${next.slice(0, openingTagStart)}${nativeOpeningTag}${next.slice(openingTagEnd + 1, closingTagStart)}</a>${next.slice(closingTagStart + 7)}`;
579
- searchFrom = openingTagStart + nativeOpeningTag.length;
580
- changed = true;
581
- }
582
- return {
583
- changed,
584
- source: next
585
- };
586
- }
587
- function rewriteInternalAnchors(source) {
588
- let next = source;
589
- let searchFrom = 0;
590
- let changed = false;
591
- while(true){
592
- const openingTagStart = next.indexOf('<a', searchFrom);
593
- if (openingTagStart < 0) break;
594
- const boundary = next[openingTagStart + 2];
595
- if (' ' !== boundary && '\n' !== boundary && '\t' !== boundary) {
596
- searchFrom = openingTagStart + 2;
597
- continue;
598
- }
599
- const openingTagEnd = closingJsxTag(next, openingTagStart);
600
- if (openingTagEnd < 0) break;
601
- const openingTag = next.slice(openingTagStart, openingTagEnd + 1);
602
- if (!isInternalHref(openingTag)) {
603
- searchFrom = openingTagEnd + 1;
604
- continue;
605
- }
606
- const closingTagStart = next.indexOf('</a>', openingTagEnd + 1);
607
- if (closingTagStart < 0) break;
608
- const nativeOpeningTag = removeSyntheticClickHandler(openingTag).replace('<a', '<Link').replace('href=', 'to=');
609
- next = `${next.slice(0, openingTagStart)}${nativeOpeningTag}${next.slice(openingTagEnd + 1, closingTagStart)}</Link>${next.slice(closingTagStart + 4)}`;
610
- searchFrom = openingTagStart + nativeOpeningTag.length;
611
- changed = true;
612
- }
613
- return {
614
- changed,
615
- source: next
616
- };
617
- }
618
- function rewriteJsxElementName(source, elementName, componentName) {
619
- const openingMarker = `<${elementName}`;
620
- const closingMarker = `</${elementName}>`;
621
- let next = source;
622
- let searchFrom = 0;
623
- let changed = false;
624
- while(true){
625
- const openingTagStart = next.indexOf(openingMarker, searchFrom);
626
- if (openingTagStart < 0) break;
627
- const boundary = next[openingTagStart + openingMarker.length];
628
- if (' ' !== boundary && '\n' !== boundary && '\t' !== boundary) {
629
- searchFrom = openingTagStart + openingMarker.length;
630
- continue;
631
- }
632
- const openingTagEnd = closingJsxTag(next, openingTagStart);
633
- const closingTagStart = next.indexOf(closingMarker, openingTagEnd + 1);
634
- if (openingTagEnd < 0 || closingTagStart < 0) break;
635
- next = `${next.slice(0, openingTagStart)}<${componentName}${next.slice(openingTagStart + openingMarker.length, closingTagStart)}</${componentName}>${next.slice(closingTagStart + closingMarker.length)}`;
636
- searchFrom = openingTagStart + componentName.length + 1;
637
- changed = true;
638
- }
639
- return {
640
- changed,
641
- source: next
642
- };
643
- }
644
- function ensureNoPropsComponentContract(source) {
645
- let changed = false;
646
- let next = source.replace(/export default function ([A-Za-z_$][\w$]*)\(\) \{/u, (_match, componentName)=>{
647
- changed = true;
648
- return `export default function ${componentName}(\n props: Record<string, never>\n): JSX.Element {\n void props;`;
649
- });
650
- if (changed) next = ensureNamedImport(next, 'react', [
651
- 'JSX'
652
- ]);
653
- return {
654
- changed,
655
- source: next
656
- };
657
- }
658
- function regenerateGeneratedProductRouteAdapter(source) {
659
- let next = source.replaceAll('search.sku', "search['sku']");
660
- next = next.replace(/<(DecideProductPage|ProductPage) sku=\{sku\} slug=\{slug\} \/>/u, `<$1\n {...(sku === undefined ? {} : { sku })}\n {...(slug === undefined ? {} : { slug })}\n />`);
661
- return next;
662
- }
663
- function regenerateGeneratedNavigationSurface(source, kind) {
664
- const routerLocationSuffix = rewriteRouterLocationSuffix(source);
665
- const anchors = 'checkout-page' === kind ? rewriteCrossRemoteTractorsLink(routerLocationSuffix.source) : rewriteInternalAnchors(routerLocationSuffix.source);
666
- const cartLink = 'checkout-add-to-cart' === kind ? rewriteCheckoutCartLink(anchors.source) : {
667
- changed: false,
668
- source: anchors.source
669
- };
670
- const locationAssignments = rewriteWindowLocationAssignments(cartLink.source);
671
- const forms = 'demo-component' === kind || 'checkout-page' === kind ? rewriteJsxElementName(locationAssignments.source, 'form', 'Form') : {
672
- changed: false,
673
- source: locationAssignments.source
674
- };
675
- const noProps = 'checkout-page' === kind ? ensureNoPropsComponentContract(forms.source) : {
676
- changed: false,
677
- source: forms.source
678
- };
679
- let next = noProps.source;
680
- const usesLink = next.includes('<Link');
681
- if (forms.changed || anchors.changed && usesLink || locationAssignments.changed) {
682
- const imports = [
683
- ...forms.changed ? [
684
- 'Form'
685
- ] : [],
686
- ...anchors.changed && usesLink ? [
687
- 'Link'
688
- ] : [],
689
- ...locationAssignments.changed ? [
690
- 'useNavigate'
691
- ] : []
692
- ];
693
- next = ensureNamedImport(next, tanstackRuntimeModule, imports);
694
- }
695
- if (!usesLink) next = removeNamedImport(next, tanstackRuntimeModule, 'Link');
696
- if (locationAssignments.changed) next = ensureNavigateHook(next);
697
- return next;
698
- }
699
- export { createFederatedComponentsRegistry, createLayout, createRemoteEntry, createRemoteExposeComponent, createRemoteExposeFragmentPage, createRemotePage, createShellPage, createShellRemoteComponents, createShellWorkerRemoteComponents, regenerateGeneratedNavigationSurface, regenerateGeneratedProductRouteAdapter, remoteComponentOutputPath };
338
+ export { createFederatedComponentsRegistry, createLayout, createRemoteEntry, createRemoteExposeComponent, createRemoteExposeFragmentPage, createRemotePage, createShellPage, createShellRemoteComponents, createShellWorkerRemoteComponents, remoteComponentOutputPath };
@@ -1,6 +1,5 @@
1
1
  import "node:module";
2
2
  import { packageName, toCamelCase, toEnvSegment, toKebabCase, toPascalCase } from "./naming.js";
3
- const ULTRAMODERN_CONFIG_PATH = '.modernjs/ultramodern.json';
4
3
  function distributedSsrExposes(app) {
5
4
  return Object.keys(app.exposes ?? {}).filter((expose)=>'./Route' !== expose).toSorted();
6
5
  }
@@ -189,4 +188,4 @@ function createCloudflarePublicUrlEnv(app) {
189
188
  function appI18nNamespace(app) {
190
189
  return 'shell' === app.kind ? 'shell' : app.domain ?? app.id;
191
190
  }
192
- 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 };
191
+ 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 };
@@ -25,7 +25,8 @@ const workspaceOxfmtIgnorePatterns = [
25
25
  '.modern',
26
26
  '.modernjs',
27
27
  '**/modern-tanstack/**',
28
- '**/routeTree.gen.*'
28
+ '**/routeTree.gen.*',
29
+ '**/src/routes/ultramodern-route-metadata.ts'
29
30
  ];
30
31
  const formattableExtensions = new Set([
31
32
  '.cjs',
@@ -100,7 +101,39 @@ function writeFileReplacing(targetDir, relativePath, content) {
100
101
  function writeJson(targetDir, relativePath, value) {
101
102
  writeFile(targetDir, relativePath, `${JSON.stringify(value, null, 2)}\n`);
102
103
  }
103
- function formatGeneratedSourceCandidates(sources) {
104
+ function formatGeneratedSourceCandidates(sources, formattingWorkspaceRoot) {
105
+ if (formattingWorkspaceRoot) {
106
+ const oxfmtBin = resolveOxfmtBin();
107
+ return sources.map(([relativePath, source])=>{
108
+ assertSafeRelativePath(relativePath);
109
+ if (!formattableExtensions.has(node_path.extname(relativePath))) return source;
110
+ const result = spawnSync(process.execPath, [
111
+ oxfmtBin,
112
+ '--stdin-filepath',
113
+ node_path.resolve(formattingWorkspaceRoot, relativePath)
114
+ ], {
115
+ cwd: formattingWorkspaceRoot,
116
+ input: source,
117
+ encoding: 'utf-8',
118
+ env: {
119
+ ...process.env,
120
+ FORCE_COLOR: '0'
121
+ }
122
+ });
123
+ if (0 !== result.status) {
124
+ const detail = [
125
+ result.error?.message,
126
+ result.stderr?.trim(),
127
+ result.stdout?.trim()
128
+ ].filter(Boolean).join('\n');
129
+ throw new Error([
130
+ 'Failed to format generated UltraModern workspace output.',
131
+ detail
132
+ ].filter(Boolean).join('\n'));
133
+ }
134
+ return result.stdout;
135
+ });
136
+ }
104
137
  const temporaryRoot = node_fs.mkdtempSync(node_path.join(node_os.tmpdir(), 'ultramodern-format-'));
105
138
  try {
106
139
  sources.forEach(([relativePath, source])=>writeFileReplacing(temporaryRoot, relativePath, source));
@@ -167,7 +200,9 @@ function writePreformatConfig(targetDir) {
167
200
  ' ignorePatterns: [',
168
201
  ...workspaceOxfmtIgnorePatterns.map((pattern)=>` ${JSON.stringify(pattern)},`),
169
202
  ' ],',
203
+ ' printWidth: 120,',
170
204
  ' singleQuote: true,',
205
+ " trailingComma: 'all',",
171
206
  '});',
172
207
  ''
173
208
  ].join('\n'), 'utf-8');