@bleedingdev/modern-js-create 3.5.0-ultramodern.4 → 3.5.0-ultramodern.41

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