@bleedingdev/modern-js-app-tools 3.5.0-ultramodern.10 → 3.5.0-ultramodern.101

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 (558) hide show
  1. package/bin/modern-bundle-docs.js +7 -0
  2. package/bin/modern.js +0 -0
  3. package/dist/cjs/builder/generator/createBuilderProviderConfig.js +5 -1
  4. package/dist/cjs/builder/generator/getBuilderEnvironments.js +20 -16
  5. package/dist/cjs/builder/shared/builderPlugins/adapterPrecompress.js +13 -4
  6. package/dist/cjs/builder/shared/builderPlugins/adapterSSR.js +14 -11
  7. package/dist/cjs/builder/shared/bundlerPlugins/CssExtractRuntimePlugin.js +72 -0
  8. package/dist/cjs/builder/shared/bundlerPlugins/RouterPlugin.js +28 -11
  9. package/dist/cjs/builder/shared/bundlerPlugins/index.js +13 -6
  10. package/dist/cjs/builder/shared/lazyCompilation.js +2 -10
  11. package/dist/cjs/bundleDocs.js +114 -0
  12. package/dist/cjs/commands/build.js +2 -1
  13. package/dist/cjs/commands/deploy.js +4 -2
  14. package/dist/cjs/commands/index.js +0 -8
  15. package/dist/cjs/config/build-environment.js +268 -0
  16. package/dist/cjs/config/default.js +2 -0
  17. package/dist/cjs/config/index.js +11 -4
  18. package/dist/cjs/config/public.js +46 -0
  19. package/dist/cjs/index.js +93 -75
  20. package/dist/cjs/plugins/analyze/getServerRoutes.js +19 -0
  21. package/dist/cjs/plugins/analyze/index.js +22 -14
  22. package/dist/cjs/plugins/analyze/utils.js +3 -2
  23. package/dist/cjs/plugins/backend-federation/codegen.js +255 -0
  24. package/dist/cjs/plugins/backend-federation/config.js +204 -0
  25. package/dist/cjs/plugins/backend-federation/emit.js +148 -0
  26. package/dist/cjs/plugins/backendFederationBuild.js +53 -0
  27. package/dist/cjs/plugins/deploy/index.js +4 -4
  28. package/dist/cjs/plugins/deploy/platforms/cloudflare/artifacts.js +127 -0
  29. package/dist/cjs/plugins/deploy/platforms/cloudflare/constants.js +141 -0
  30. package/dist/cjs/plugins/deploy/platforms/cloudflare/delivery-unit.js +139 -0
  31. package/dist/cjs/plugins/deploy/platforms/cloudflare/i18n-worker.js +135 -0
  32. package/dist/cjs/plugins/deploy/platforms/cloudflare/index.js +150 -0
  33. package/dist/cjs/plugins/deploy/platforms/cloudflare/security-policies.js +205 -0
  34. package/dist/cjs/plugins/deploy/platforms/cloudflare/types.js +18 -0
  35. package/dist/cjs/plugins/deploy/platforms/cloudflare/utils.js +66 -0
  36. package/dist/cjs/plugins/deploy/platforms/cloudflare/worker-manifest.js +208 -0
  37. package/dist/cjs/plugins/deploy/platforms/cloudflare/wrangler-config.js +204 -0
  38. package/dist/cjs/plugins/deploy/platforms/cloudflare-output-contract.js +108 -0
  39. package/dist/cjs/plugins/deploy/platforms/cloudflare-output-plan.js +93 -0
  40. package/dist/cjs/plugins/deploy/platforms/cloudflare-output-verifier/identity.js +83 -0
  41. package/dist/cjs/plugins/deploy/platforms/cloudflare-output-verifier/index.js +188 -0
  42. package/dist/cjs/{baseline.js → plugins/deploy/platforms/cloudflare-output-verifier/issues.js} +19 -10
  43. package/dist/cjs/plugins/deploy/platforms/cloudflare-output-verifier/manifest.js +89 -0
  44. package/dist/cjs/plugins/deploy/platforms/cloudflare-output-verifier/mutation-policy.js +151 -0
  45. package/dist/cjs/plugins/deploy/platforms/cloudflare-output-verifier/worker-bundles.js +302 -0
  46. package/dist/cjs/plugins/deploy/platforms/node.js +20 -2
  47. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.001-bootstrap-security.mjs +250 -0
  48. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.002-assets-routes.mjs +191 -0
  49. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.003-i18n-locales.mjs +514 -0
  50. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.004-rendering-css.mjs +1012 -0
  51. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.005-worker-dispatch.mjs +363 -0
  52. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.006-fetch-handler.mjs +93 -0
  53. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-worker-fs-promises.mjs +8 -4
  54. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-worker-loadable-server.mjs +251 -155
  55. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-worker-path.mjs +78 -39
  56. package/dist/cjs/plugins/deploy/platforms/templates/netlify-entry.cjs +62 -41
  57. package/dist/cjs/plugins/deploy/platforms/templates/netlify-entry.mjs +63 -41
  58. package/dist/cjs/plugins/deploy/platforms/templates/node-entry.cjs +52 -35
  59. package/dist/cjs/plugins/deploy/platforms/templates/node-entry.mjs +53 -35
  60. package/dist/cjs/plugins/deploy/platforms/templates/vercel-entry.cjs +61 -41
  61. package/dist/cjs/plugins/deploy/platforms/templates/vercel-entry.mjs +61 -40
  62. package/dist/cjs/plugins/deploy/utils/npmAliases.js +226 -0
  63. package/dist/cjs/plugins/initialize/index.js +4 -3
  64. package/dist/cjs/plugins/serverBuild.js +3 -2
  65. package/dist/cjs/plugins/ultramodernReleaseEnvelope.js +100 -0
  66. package/dist/cjs/presetUltramodern.js +33 -2
  67. package/dist/cjs/ultramodern-release-envelope/canonical.js +68 -0
  68. package/dist/cjs/ultramodern-release-envelope/framework-output.js +597 -0
  69. package/dist/cjs/ultramodern-release-envelope/index.js +399 -0
  70. package/dist/cjs/ultramodern-release-envelope/types.js +51 -0
  71. package/dist/cjs/ultramodern-release-identity.js +110 -0
  72. package/dist/esm/builder/generator/createBuilderProviderConfig.mjs +5 -1
  73. package/dist/esm/builder/generator/getBuilderEnvironments.mjs +19 -15
  74. package/dist/esm/builder/shared/builderPlugins/adapterPrecompress.mjs +13 -4
  75. package/dist/esm/builder/shared/builderPlugins/adapterSSR.mjs +15 -12
  76. package/dist/esm/builder/shared/bundlerPlugins/CssExtractRuntimePlugin.mjs +30 -0
  77. package/dist/esm/builder/shared/bundlerPlugins/RouterPlugin.mjs +24 -10
  78. package/dist/esm/builder/shared/bundlerPlugins/index.mjs +1 -0
  79. package/dist/esm/builder/shared/lazyCompilation.mjs +1 -3
  80. package/dist/esm/bundleDocs.mjs +62 -0
  81. package/dist/esm/commands/build.mjs +2 -1
  82. package/dist/esm/commands/deploy.mjs +4 -2
  83. package/dist/esm/commands/index.mjs +0 -5
  84. package/dist/esm/config/build-environment.mjs +224 -0
  85. package/dist/esm/config/default.mjs +2 -0
  86. package/dist/esm/config/index.mjs +1 -0
  87. package/dist/esm/config/public.mjs +1 -0
  88. package/dist/esm/index.mjs +20 -5
  89. package/dist/esm/plugins/analyze/getHtmlTemplate.mjs +2 -2
  90. package/dist/esm/plugins/analyze/getServerRoutes.mjs +17 -1
  91. package/dist/esm/plugins/analyze/index.mjs +22 -14
  92. package/dist/esm/plugins/analyze/isDefaultExportFunction.mjs +2 -2
  93. package/dist/esm/plugins/analyze/utils.mjs +3 -2
  94. package/dist/esm/plugins/backend-federation/codegen.mjs +204 -0
  95. package/dist/esm/plugins/backend-federation/config.mjs +128 -0
  96. package/dist/esm/plugins/backend-federation/emit.mjs +97 -0
  97. package/dist/esm/plugins/backendFederationBuild.mjs +1 -0
  98. package/dist/esm/plugins/deploy/index.mjs +1 -1
  99. package/dist/esm/plugins/deploy/platforms/cloudflare/artifacts.mjs +64 -0
  100. package/dist/esm/plugins/deploy/platforms/cloudflare/constants.mjs +34 -0
  101. package/dist/esm/plugins/deploy/platforms/cloudflare/delivery-unit.mjs +88 -0
  102. package/dist/esm/plugins/deploy/platforms/cloudflare/i18n-worker.mjs +97 -0
  103. package/dist/esm/plugins/deploy/platforms/cloudflare/index.mjs +102 -0
  104. package/dist/esm/plugins/deploy/platforms/cloudflare/security-policies.mjs +167 -0
  105. package/dist/esm/plugins/deploy/platforms/cloudflare/types.mjs +0 -0
  106. package/dist/esm/plugins/deploy/platforms/cloudflare/utils.mjs +12 -0
  107. package/dist/esm/plugins/deploy/platforms/cloudflare/worker-manifest.mjs +148 -0
  108. package/dist/esm/plugins/deploy/platforms/cloudflare/wrangler-config.mjs +150 -0
  109. package/dist/esm/plugins/deploy/platforms/cloudflare-output-contract.mjs +31 -0
  110. package/dist/esm/plugins/deploy/platforms/cloudflare-output-plan.mjs +45 -0
  111. package/dist/esm/plugins/deploy/platforms/cloudflare-output-verifier/identity.mjs +45 -0
  112. package/dist/esm/plugins/deploy/platforms/cloudflare-output-verifier/index.mjs +133 -0
  113. package/dist/esm/plugins/deploy/platforms/cloudflare-output-verifier/issues.mjs +10 -0
  114. package/dist/esm/plugins/deploy/platforms/cloudflare-output-verifier/manifest.mjs +51 -0
  115. package/dist/esm/plugins/deploy/platforms/cloudflare-output-verifier/mutation-policy.mjs +99 -0
  116. package/dist/esm/plugins/deploy/platforms/cloudflare-output-verifier/worker-bundles.mjs +238 -0
  117. package/dist/esm/plugins/deploy/platforms/node.mjs +20 -2
  118. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.001-bootstrap-security.mjs +250 -0
  119. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.002-assets-routes.mjs +191 -0
  120. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.003-i18n-locales.mjs +514 -0
  121. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.004-rendering-css.mjs +1012 -0
  122. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.005-worker-dispatch.mjs +363 -0
  123. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.006-fetch-handler.mjs +93 -0
  124. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-worker-fs-promises.mjs +8 -4
  125. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-worker-loadable-server.mjs +251 -155
  126. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-worker-path.mjs +78 -39
  127. package/dist/esm/plugins/deploy/platforms/templates/netlify-entry.cjs +62 -41
  128. package/dist/esm/plugins/deploy/platforms/templates/netlify-entry.mjs +63 -41
  129. package/dist/esm/plugins/deploy/platforms/templates/node-entry.cjs +52 -35
  130. package/dist/esm/plugins/deploy/platforms/templates/node-entry.mjs +53 -35
  131. package/dist/esm/plugins/deploy/platforms/templates/vercel-entry.cjs +61 -41
  132. package/dist/esm/plugins/deploy/platforms/templates/vercel-entry.mjs +61 -40
  133. package/dist/esm/plugins/deploy/utils/npmAliases.mjs +174 -0
  134. package/dist/esm/plugins/initialize/index.mjs +4 -3
  135. package/dist/esm/plugins/serverBuild.mjs +3 -2
  136. package/dist/esm/plugins/ultramodernReleaseEnvelope.mjs +52 -0
  137. package/dist/esm/presetUltramodern.mjs +33 -2
  138. package/dist/esm/ultramodern-release-envelope/canonical.mjs +21 -0
  139. package/dist/esm/ultramodern-release-envelope/framework-output.mjs +524 -0
  140. package/dist/esm/ultramodern-release-envelope/index.mjs +335 -0
  141. package/dist/esm/ultramodern-release-envelope/types.mjs +7 -0
  142. package/dist/esm/ultramodern-release-identity.mjs +66 -0
  143. package/dist/esm-node/builder/generator/createBuilderProviderConfig.mjs +5 -1
  144. package/dist/esm-node/builder/generator/getBuilderEnvironments.mjs +19 -15
  145. package/dist/esm-node/builder/shared/builderPlugins/adapterPrecompress.mjs +13 -4
  146. package/dist/esm-node/builder/shared/builderPlugins/adapterSSR.mjs +15 -12
  147. package/dist/esm-node/builder/shared/bundlerPlugins/CssExtractRuntimePlugin.mjs +31 -0
  148. package/dist/esm-node/builder/shared/bundlerPlugins/RouterPlugin.mjs +24 -10
  149. package/dist/esm-node/builder/shared/bundlerPlugins/index.mjs +1 -0
  150. package/dist/esm-node/builder/shared/lazyCompilation.mjs +1 -3
  151. package/dist/esm-node/bundleDocs.mjs +63 -0
  152. package/dist/esm-node/commands/build.mjs +2 -1
  153. package/dist/esm-node/commands/deploy.mjs +4 -2
  154. package/dist/esm-node/commands/index.mjs +0 -5
  155. package/dist/esm-node/config/build-environment.mjs +225 -0
  156. package/dist/esm-node/config/default.mjs +2 -0
  157. package/dist/esm-node/config/index.mjs +1 -0
  158. package/dist/esm-node/config/public.mjs +2 -0
  159. package/dist/esm-node/index.mjs +20 -5
  160. package/dist/esm-node/plugins/analyze/getHtmlTemplate.mjs +2 -2
  161. package/dist/esm-node/plugins/analyze/getServerRoutes.mjs +17 -1
  162. package/dist/esm-node/plugins/analyze/index.mjs +22 -14
  163. package/dist/esm-node/plugins/analyze/isDefaultExportFunction.mjs +2 -2
  164. package/dist/esm-node/plugins/analyze/utils.mjs +3 -2
  165. package/dist/esm-node/plugins/backend-federation/codegen.mjs +205 -0
  166. package/dist/esm-node/plugins/backend-federation/config.mjs +129 -0
  167. package/dist/esm-node/plugins/backend-federation/emit.mjs +98 -0
  168. package/dist/esm-node/plugins/backendFederationBuild.mjs +2 -0
  169. package/dist/esm-node/plugins/deploy/index.mjs +1 -1
  170. package/dist/esm-node/plugins/deploy/platforms/cloudflare/artifacts.mjs +65 -0
  171. package/dist/esm-node/plugins/deploy/platforms/cloudflare/constants.mjs +35 -0
  172. package/dist/esm-node/plugins/deploy/platforms/cloudflare/delivery-unit.mjs +89 -0
  173. package/dist/esm-node/plugins/deploy/platforms/cloudflare/i18n-worker.mjs +98 -0
  174. package/dist/esm-node/plugins/deploy/platforms/cloudflare/index.mjs +103 -0
  175. package/dist/esm-node/plugins/deploy/platforms/cloudflare/security-policies.mjs +168 -0
  176. package/dist/esm-node/plugins/deploy/platforms/cloudflare/types.mjs +1 -0
  177. package/dist/esm-node/plugins/deploy/platforms/cloudflare/utils.mjs +13 -0
  178. package/dist/esm-node/plugins/deploy/platforms/cloudflare/worker-manifest.mjs +149 -0
  179. package/dist/esm-node/plugins/deploy/platforms/cloudflare/wrangler-config.mjs +151 -0
  180. package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-contract.mjs +32 -0
  181. package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-plan.mjs +46 -0
  182. package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-verifier/identity.mjs +46 -0
  183. package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-verifier/index.mjs +134 -0
  184. package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-verifier/issues.mjs +11 -0
  185. package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-verifier/manifest.mjs +52 -0
  186. package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-verifier/mutation-policy.mjs +100 -0
  187. package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-verifier/worker-bundles.mjs +239 -0
  188. package/dist/esm-node/plugins/deploy/platforms/node.mjs +20 -2
  189. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.001-bootstrap-security.mjs +250 -0
  190. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.002-assets-routes.mjs +191 -0
  191. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.003-i18n-locales.mjs +514 -0
  192. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.004-rendering-css.mjs +1012 -0
  193. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.005-worker-dispatch.mjs +363 -0
  194. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.006-fetch-handler.mjs +93 -0
  195. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-worker-fs-promises.mjs +8 -4
  196. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-worker-loadable-server.mjs +251 -155
  197. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-worker-path.mjs +78 -39
  198. package/dist/esm-node/plugins/deploy/platforms/templates/netlify-entry.cjs +62 -41
  199. package/dist/esm-node/plugins/deploy/platforms/templates/netlify-entry.mjs +63 -41
  200. package/dist/esm-node/plugins/deploy/platforms/templates/node-entry.cjs +52 -35
  201. package/dist/esm-node/plugins/deploy/platforms/templates/node-entry.mjs +53 -35
  202. package/dist/esm-node/plugins/deploy/platforms/templates/vercel-entry.cjs +61 -41
  203. package/dist/esm-node/plugins/deploy/platforms/templates/vercel-entry.mjs +61 -40
  204. package/dist/esm-node/plugins/deploy/utils/npmAliases.mjs +175 -0
  205. package/dist/esm-node/plugins/initialize/index.mjs +4 -3
  206. package/dist/esm-node/plugins/serverBuild.mjs +3 -2
  207. package/dist/esm-node/plugins/ultramodernReleaseEnvelope.mjs +53 -0
  208. package/dist/esm-node/presetUltramodern.mjs +33 -2
  209. package/dist/esm-node/ultramodern-release-envelope/canonical.mjs +22 -0
  210. package/dist/esm-node/ultramodern-release-envelope/framework-output.mjs +525 -0
  211. package/dist/esm-node/ultramodern-release-envelope/index.mjs +336 -0
  212. package/dist/esm-node/ultramodern-release-envelope/types.mjs +8 -0
  213. package/dist/esm-node/ultramodern-release-identity.mjs +67 -0
  214. package/dist/types/builder/generator/createCopyPattern.d.ts +7 -5
  215. package/dist/types/builder/shared/bundlerPlugins/CssExtractRuntimePlugin.d.ts +6 -0
  216. package/dist/types/builder/shared/bundlerPlugins/RouterPlugin.d.ts +1 -0
  217. package/dist/types/builder/shared/bundlerPlugins/index.d.ts +1 -0
  218. package/dist/types/builder/shared/lazyCompilation.d.ts +2 -4
  219. package/dist/types/bundleDocs.d.ts +20 -0
  220. package/dist/types/commands/deploy.d.ts +2 -1
  221. package/dist/types/commands/index.d.ts +0 -1
  222. package/dist/types/config/build-environment.d.ts +22 -0
  223. package/dist/types/config/index.d.ts +1 -0
  224. package/dist/types/config/public.d.ts +2 -0
  225. package/dist/types/index.d.ts +4 -3
  226. package/dist/types/plugins/analyze/getServerRoutes.d.ts +1 -0
  227. package/dist/types/plugins/analyze/utils.d.ts +1 -1
  228. package/dist/types/plugins/backend-federation/codegen.d.ts +83 -0
  229. package/dist/types/plugins/backend-federation/config.d.ts +103 -0
  230. package/dist/types/plugins/backend-federation/emit.d.ts +13 -0
  231. package/dist/types/plugins/backendFederationBuild.d.ts +2 -0
  232. package/dist/types/plugins/deploy/platforms/cloudflare/artifacts.d.ts +15 -0
  233. package/dist/types/plugins/deploy/platforms/cloudflare/constants.d.ts +24 -0
  234. package/dist/types/plugins/deploy/platforms/cloudflare/delivery-unit.d.ts +23 -0
  235. package/dist/types/plugins/deploy/platforms/cloudflare/i18n-worker.d.ts +22 -0
  236. package/dist/types/plugins/deploy/platforms/{cloudflare.d.ts → cloudflare/index.d.ts} +1 -1
  237. package/dist/types/plugins/deploy/platforms/cloudflare/security-policies.d.ts +51 -0
  238. package/dist/types/plugins/deploy/platforms/cloudflare/types.d.ts +5 -0
  239. package/dist/types/plugins/deploy/platforms/cloudflare/utils.d.ts +6 -0
  240. package/dist/types/plugins/deploy/platforms/cloudflare/worker-manifest.d.ts +122 -0
  241. package/dist/types/plugins/deploy/platforms/cloudflare/wrangler-config.d.ts +46 -0
  242. package/dist/types/plugins/deploy/platforms/cloudflare-output-contract.d.ts +14 -0
  243. package/dist/types/plugins/deploy/platforms/cloudflare-output-plan.d.ts +34 -0
  244. package/dist/types/plugins/deploy/platforms/cloudflare-output-verifier/identity.d.ts +4 -0
  245. package/dist/types/plugins/deploy/platforms/cloudflare-output-verifier/index.d.ts +18 -0
  246. package/dist/types/plugins/deploy/platforms/cloudflare-output-verifier/issues.d.ts +14 -0
  247. package/dist/types/plugins/deploy/platforms/cloudflare-output-verifier/manifest.d.ts +2 -0
  248. package/dist/types/plugins/deploy/platforms/cloudflare-output-verifier/mutation-policy.d.ts +14 -0
  249. package/dist/types/plugins/deploy/platforms/cloudflare-output-verifier/worker-bundles.d.ts +20 -0
  250. package/dist/types/plugins/deploy/platforms/templates/cloudflare-entry.001-bootstrap-security.d.mts +1 -0
  251. package/dist/types/plugins/deploy/platforms/templates/cloudflare-entry.002-assets-routes.d.mts +1 -0
  252. package/dist/types/plugins/deploy/platforms/templates/cloudflare-entry.003-i18n-locales.d.mts +1 -0
  253. package/dist/types/plugins/deploy/platforms/templates/cloudflare-entry.004-rendering-css.d.mts +1 -0
  254. package/dist/types/plugins/deploy/platforms/templates/cloudflare-entry.005-worker-dispatch.d.mts +1 -0
  255. package/dist/types/plugins/deploy/utils/npmAliases.d.ts +14 -0
  256. package/dist/types/plugins/ultramodernReleaseEnvelope.d.ts +3 -0
  257. package/dist/types/presetUltramodern.d.ts +10 -0
  258. package/dist/types/run/index.d.ts +1 -1
  259. package/dist/types/types/config/cloudflareDeploy.d.ts +41 -0
  260. package/dist/types/types/config/deploy.d.ts +15 -2
  261. package/dist/types/types/config/dev.d.ts +6 -0
  262. package/dist/types/ultramodern-release-envelope/canonical.d.ts +5 -0
  263. package/dist/types/ultramodern-release-envelope/framework-output.d.ts +31 -0
  264. package/dist/types/ultramodern-release-envelope/index.d.ts +6 -0
  265. package/dist/types/ultramodern-release-envelope/types.d.ts +62 -0
  266. package/dist/types/ultramodern-release-identity.d.ts +16 -0
  267. package/docs/apis/app/commands.md +231 -0
  268. package/docs/apis/app/hooks/api/lambda.md +9 -0
  269. package/docs/apis/app/hooks/config/favicon.md +24 -0
  270. package/docs/apis/app/hooks/config/html.md +5 -0
  271. package/docs/apis/app/hooks/config/icon.md +24 -0
  272. package/docs/apis/app/hooks/config/mock.md +6 -0
  273. package/docs/apis/app/hooks/config/public.md +26 -0
  274. package/docs/apis/app/hooks/config/upload.md +50 -0
  275. package/docs/apis/app/hooks/modern-config.md +5 -0
  276. package/docs/apis/app/hooks/server/server.md +5 -0
  277. package/docs/apis/app/hooks/shared.md +3 -0
  278. package/docs/apis/app/hooks/src/app.md +30 -0
  279. package/docs/apis/app/hooks/src/entry.md +34 -0
  280. package/docs/apis/app/hooks/src/entry.server.md +51 -0
  281. package/docs/apis/app/hooks/src/modern.runtime.md +5 -0
  282. package/docs/apis/app/hooks/src/routes.md +86 -0
  283. package/docs/apis/app/hooks/src/server.md +3 -0
  284. package/docs/apis/app/runtime/bff/use-backend-context.md +27 -0
  285. package/docs/apis/app/runtime/core/create-root.md +19 -0
  286. package/docs/apis/app/runtime/core/render.md +39 -0
  287. package/docs/apis/app/runtime/core/runtime-context.md +156 -0
  288. package/docs/apis/app/runtime/router/router.md +283 -0
  289. package/docs/apis/app/runtime/ssr/no-ssr.md +35 -0
  290. package/docs/apis/app/runtime/ssr/renderStreaming.md +67 -0
  291. package/docs/apis/app/runtime/ssr/renderString.md +60 -0
  292. package/docs/apis/app/runtime/ssr/requestHandler.md +44 -0
  293. package/docs/apis/app/runtime/utility/css-in-js.md +40 -0
  294. package/docs/apis/app/runtime/utility/head.md +35 -0
  295. package/docs/apis/app/runtime/utility/loadable.md +82 -0
  296. package/docs/community/blog/2022-0708-updates.md +91 -0
  297. package/docs/community/blog/2022-0910-updates.md +76 -0
  298. package/docs/community/blog/overview.md +63 -0
  299. package/docs/community/blog/v2-release-note.md +238 -0
  300. package/docs/community/blog/v3-release-note.md +622 -0
  301. package/docs/community/contributing-guide.md +252 -0
  302. package/docs/community/releases.md +23 -0
  303. package/docs/community/showcase.md +24 -0
  304. package/docs/community/team.md +14 -0
  305. package/docs/configure/app/bff/cross-project.md +20 -0
  306. package/docs/configure/app/bff/effect.md +315 -0
  307. package/docs/configure/app/bff/prefix.md +29 -0
  308. package/docs/configure/app/bff/runtime-framework.md +26 -0
  309. package/docs/configure/app/builder-plugins.md +66 -0
  310. package/docs/configure/app/dev/asset-prefix.md +13 -0
  311. package/docs/configure/app/dev/before-start-url.md +17 -0
  312. package/docs/configure/app/dev/client.md +41 -0
  313. package/docs/configure/app/dev/hmr.md +10 -0
  314. package/docs/configure/app/dev/host.md +18 -0
  315. package/docs/configure/app/dev/https.md +77 -0
  316. package/docs/configure/app/dev/lazy-compilation.md +39 -0
  317. package/docs/configure/app/dev/live-reload.md +10 -0
  318. package/docs/configure/app/dev/mock-dir.md +31 -0
  319. package/docs/configure/app/dev/progress-bar.md +19 -0
  320. package/docs/configure/app/dev/server.md +124 -0
  321. package/docs/configure/app/dev/setup-middlewares.md +32 -0
  322. package/docs/configure/app/dev/start-url.md +48 -0
  323. package/docs/configure/app/dev/watch-files.md +27 -0
  324. package/docs/configure/app/dev/write-to-disk.md +10 -0
  325. package/docs/configure/app/experiments/source-build.md +31 -0
  326. package/docs/configure/app/html/app-icon.md +28 -0
  327. package/docs/configure/app/html/crossorigin.md +10 -0
  328. package/docs/configure/app/html/favicon.md +16 -0
  329. package/docs/configure/app/html/inject.md +10 -0
  330. package/docs/configure/app/html/meta.md +24 -0
  331. package/docs/configure/app/html/mount-id.md +10 -0
  332. package/docs/configure/app/html/output-structure.md +10 -0
  333. package/docs/configure/app/html/script-loading.md +10 -0
  334. package/docs/configure/app/html/tags.md +15 -0
  335. package/docs/configure/app/html/template-parameters.md +33 -0
  336. package/docs/configure/app/html/template.md +10 -0
  337. package/docs/configure/app/html/title.md +18 -0
  338. package/docs/configure/app/output/asset-prefix.md +11 -0
  339. package/docs/configure/app/output/assets-retry.md +77 -0
  340. package/docs/configure/app/output/charset.md +10 -0
  341. package/docs/configure/app/output/clean-dist-path.md +16 -0
  342. package/docs/configure/app/output/convert-to-rem.md +79 -0
  343. package/docs/configure/app/output/copy.md +10 -0
  344. package/docs/configure/app/output/css-modules.md +48 -0
  345. package/docs/configure/app/output/data-uri-limit.md +26 -0
  346. package/docs/configure/app/output/disable-css-module-extension.md +55 -0
  347. package/docs/configure/app/output/disable-inline-runtime-chunk.md +41 -0
  348. package/docs/configure/app/output/disable-svgr.md +18 -0
  349. package/docs/configure/app/output/disable-ts-checker.md +49 -0
  350. package/docs/configure/app/output/dist-path.md +43 -0
  351. package/docs/configure/app/output/enable-asset-manifest.md +36 -0
  352. package/docs/configure/app/output/enable-css-module-tsdeclaration.md +28 -0
  353. package/docs/configure/app/output/enable-inline-route-manifests.md +16 -0
  354. package/docs/configure/app/output/externals.md +20 -0
  355. package/docs/configure/app/output/filename-hash.md +10 -0
  356. package/docs/configure/app/output/filename.md +55 -0
  357. package/docs/configure/app/output/inject-styles.md +10 -0
  358. package/docs/configure/app/output/inline-scripts.md +29 -0
  359. package/docs/configure/app/output/inline-styles.md +29 -0
  360. package/docs/configure/app/output/legal-comments.md +18 -0
  361. package/docs/configure/app/output/minify.md +22 -0
  362. package/docs/configure/app/output/override-browserslist.md +22 -0
  363. package/docs/configure/app/output/polyfill.md +12 -0
  364. package/docs/configure/app/output/source-map.md +30 -0
  365. package/docs/configure/app/output/split-route-chunks.md +16 -0
  366. package/docs/configure/app/output/ssg.md +81 -0
  367. package/docs/configure/app/output/ssgByEntries.md +90 -0
  368. package/docs/configure/app/output/svg-default-export.md +30 -0
  369. package/docs/configure/app/output/temp-dir.md +20 -0
  370. package/docs/configure/app/performance/build-cache.md +44 -0
  371. package/docs/configure/app/performance/chunk-split.md +40 -0
  372. package/docs/configure/app/performance/dns-prefetch.md +15 -0
  373. package/docs/configure/app/performance/preconnect.md +16 -0
  374. package/docs/configure/app/performance/prefetch.md +21 -0
  375. package/docs/configure/app/performance/preload.md +23 -0
  376. package/docs/configure/app/performance/print-file-size.md +40 -0
  377. package/docs/configure/app/performance/profile.md +10 -0
  378. package/docs/configure/app/performance/remove-console.md +10 -0
  379. package/docs/configure/app/performance/remove-moment-locale.md +10 -0
  380. package/docs/configure/app/performance/rsdoctor.md +38 -0
  381. package/docs/configure/app/plugins.md +59 -0
  382. package/docs/configure/app/resolve/alias-strategy.md +10 -0
  383. package/docs/configure/app/resolve/alias.md +9 -0
  384. package/docs/configure/app/resolve/condition-names.md +13 -0
  385. package/docs/configure/app/resolve/dedupe.md +9 -0
  386. package/docs/configure/app/resolve/extensions.md +13 -0
  387. package/docs/configure/app/runtime/0-intro.md +58 -0
  388. package/docs/configure/app/runtime/plugins.md +58 -0
  389. package/docs/configure/app/runtime/router.md +35 -0
  390. package/docs/configure/app/security/check-syntax.md +69 -0
  391. package/docs/configure/app/security/nonce.md +15 -0
  392. package/docs/configure/app/security/sri.md +20 -0
  393. package/docs/configure/app/server/base-url.md +26 -0
  394. package/docs/configure/app/server/port.md +18 -0
  395. package/docs/configure/app/server/public-routes.md +22 -0
  396. package/docs/configure/app/server/routes.md +86 -0
  397. package/docs/configure/app/server/rsc.md +26 -0
  398. package/docs/configure/app/server/ssr-by-entries.md +25 -0
  399. package/docs/configure/app/server/ssr.md +80 -0
  400. package/docs/configure/app/server/tsconfig-path.md +59 -0
  401. package/docs/configure/app/source/alias-strategy.md +14 -0
  402. package/docs/configure/app/source/alias.md +23 -0
  403. package/docs/configure/app/source/config-dir.md +20 -0
  404. package/docs/configure/app/source/decorators.md +25 -0
  405. package/docs/configure/app/source/define.md +16 -0
  406. package/docs/configure/app/source/disable-default-entries.md +28 -0
  407. package/docs/configure/app/source/enable-async-entry.md +54 -0
  408. package/docs/configure/app/source/enable-async-pre-entry.md +26 -0
  409. package/docs/configure/app/source/entries-dir.md +35 -0
  410. package/docs/configure/app/source/entries.md +179 -0
  411. package/docs/configure/app/source/exclude.md +10 -0
  412. package/docs/configure/app/source/global-vars.md +106 -0
  413. package/docs/configure/app/source/include.md +36 -0
  414. package/docs/configure/app/source/main-entry-name.md +24 -0
  415. package/docs/configure/app/source/pre-entry.md +10 -0
  416. package/docs/configure/app/source/react-compiler.md +68 -0
  417. package/docs/configure/app/source/transform-import.md +27 -0
  418. package/docs/configure/app/split-chunks.md +17 -0
  419. package/docs/configure/app/tools/autoprefixer.md +44 -0
  420. package/docs/configure/app/tools/bundler-chain.md +26 -0
  421. package/docs/configure/app/tools/css-extract.md +33 -0
  422. package/docs/configure/app/tools/css-loader.md +17 -0
  423. package/docs/configure/app/tools/dev-server.md +113 -0
  424. package/docs/configure/app/tools/html-plugin.md +41 -0
  425. package/docs/configure/app/tools/less.md +81 -0
  426. package/docs/configure/app/tools/lightningcss-loader.md +35 -0
  427. package/docs/configure/app/tools/minify-css.md +53 -0
  428. package/docs/configure/app/tools/postcss.md +34 -0
  429. package/docs/configure/app/tools/rspack.md +10 -0
  430. package/docs/configure/app/tools/sass.md +78 -0
  431. package/docs/configure/app/tools/style-loader.md +10 -0
  432. package/docs/configure/app/tools/swc.md +65 -0
  433. package/docs/configure/app/tools/ts-checker.md +116 -0
  434. package/docs/configure/app/usage.md +276 -0
  435. package/docs/guides/advanced-features/bff/cross-project.md +109 -0
  436. package/docs/guides/advanced-features/bff/data-platform.md +116 -0
  437. package/docs/guides/advanced-features/bff/extend-server.md +120 -0
  438. package/docs/guides/advanced-features/bff/frameworks.md +243 -0
  439. package/docs/guides/advanced-features/bff/function.md +318 -0
  440. package/docs/guides/advanced-features/bff/operators.md +554 -0
  441. package/docs/guides/advanced-features/bff/sdk.md +116 -0
  442. package/docs/guides/advanced-features/bff/upload.md +101 -0
  443. package/docs/guides/advanced-features/bff.md +18 -0
  444. package/docs/guides/advanced-features/build-performance.md +130 -0
  445. package/docs/guides/advanced-features/compatibility.md +120 -0
  446. package/docs/guides/advanced-features/international/advanced.md +128 -0
  447. package/docs/guides/advanced-features/international/api.md +267 -0
  448. package/docs/guides/advanced-features/international/best-practices.md +286 -0
  449. package/docs/guides/advanced-features/international/configuration.md +228 -0
  450. package/docs/guides/advanced-features/international/locale-detection.md +126 -0
  451. package/docs/guides/advanced-features/international/quick-start.md +128 -0
  452. package/docs/guides/advanced-features/international/resource-loading.md +154 -0
  453. package/docs/guides/advanced-features/international/routing.md +173 -0
  454. package/docs/guides/advanced-features/international.md +27 -0
  455. package/docs/guides/advanced-features/low-level.md +46 -0
  456. package/docs/guides/advanced-features/page-performance/code-split.md +77 -0
  457. package/docs/guides/advanced-features/page-performance/inline-assets.md +159 -0
  458. package/docs/guides/advanced-features/page-performance/optimize-bundle.md +97 -0
  459. package/docs/guides/advanced-features/page-performance/react-compiler.md +51 -0
  460. package/docs/guides/advanced-features/server-monitor/logger.md +41 -0
  461. package/docs/guides/advanced-features/server-monitor/metrics.md +58 -0
  462. package/docs/guides/advanced-features/server-monitor/monitors.md +242 -0
  463. package/docs/guides/advanced-features/source-build.md +164 -0
  464. package/docs/guides/advanced-features/web-server.md +288 -0
  465. package/docs/guides/basic-features/alias.md +102 -0
  466. package/docs/guides/basic-features/css/css-in-js.md +72 -0
  467. package/docs/guides/basic-features/css/css-modules.md +212 -0
  468. package/docs/guides/basic-features/css/css.md +27 -0
  469. package/docs/guides/basic-features/css/tailwindcss.md +27 -0
  470. package/docs/guides/basic-features/data/data-cache.md +510 -0
  471. package/docs/guides/basic-features/data/data-fetch.md +415 -0
  472. package/docs/guides/basic-features/data/data-write.md +227 -0
  473. package/docs/guides/basic-features/debug/mock.md +109 -0
  474. package/docs/guides/basic-features/debug/proxy.md +21 -0
  475. package/docs/guides/basic-features/debug/rsdoctor.md +47 -0
  476. package/docs/guides/basic-features/debug/using-storybook.md +112 -0
  477. package/docs/guides/basic-features/deploy.md +458 -0
  478. package/docs/guides/basic-features/env-vars.md +177 -0
  479. package/docs/guides/basic-features/html.md +255 -0
  480. package/docs/guides/basic-features/output-files.md +141 -0
  481. package/docs/guides/basic-features/render/before-render.md +108 -0
  482. package/docs/guides/basic-features/render/overview.md +47 -0
  483. package/docs/guides/basic-features/render/rsc.md +525 -0
  484. package/docs/guides/basic-features/render/ssg.md +228 -0
  485. package/docs/guides/basic-features/render/ssr-cache.md +201 -0
  486. package/docs/guides/basic-features/render/ssr.md +321 -0
  487. package/docs/guides/basic-features/render/streaming-ssr.md +264 -0
  488. package/docs/guides/basic-features/routes/config-routes.md +426 -0
  489. package/docs/guides/basic-features/routes/routes.md +524 -0
  490. package/docs/guides/basic-features/static-assets/json-files.md +120 -0
  491. package/docs/guides/basic-features/static-assets/svg-assets.md +168 -0
  492. package/docs/guides/basic-features/static-assets/wasm-assets.md +62 -0
  493. package/docs/guides/basic-features/static-assets.md +160 -0
  494. package/docs/guides/basic-features/testing/playwright.md +120 -0
  495. package/docs/guides/basic-features/testing/rstest.md +251 -0
  496. package/docs/guides/concept/builder.md +37 -0
  497. package/docs/guides/concept/entries.md +319 -0
  498. package/docs/guides/concept/server.md +35 -0
  499. package/docs/guides/get-started/ai-coding-agents.md +58 -0
  500. package/docs/guides/get-started/glossary.md +63 -0
  501. package/docs/guides/get-started/introduction.md +40 -0
  502. package/docs/guides/get-started/quick-start.md +269 -0
  503. package/docs/guides/get-started/tech-stack.md +91 -0
  504. package/docs/guides/get-started/ultramodern.md +428 -0
  505. package/docs/guides/get-started/upgrade.md +123 -0
  506. package/docs/guides/topic-detail/module-federation/application.md +116 -0
  507. package/docs/guides/topic-detail/module-federation/deploy.md +104 -0
  508. package/docs/guides/topic-detail/module-federation/i18n.md +670 -0
  509. package/docs/guides/topic-detail/module-federation/introduce.md +35 -0
  510. package/docs/guides/topic-detail/module-federation/ssr.md +182 -0
  511. package/docs/guides/topic-detail/module-federation/usage.md +219 -0
  512. package/docs/guides/troubleshooting/builder.md +110 -0
  513. package/docs/guides/troubleshooting/cli.md +35 -0
  514. package/docs/guides/troubleshooting/dependencies.md +119 -0
  515. package/docs/guides/troubleshooting/hmr.md +144 -0
  516. package/docs/guides/upgrade/config.md +954 -0
  517. package/docs/guides/upgrade/entry.md +463 -0
  518. package/docs/guides/upgrade/other.md +183 -0
  519. package/docs/guides/upgrade/overview.md +33 -0
  520. package/docs/guides/upgrade/tailwindcss.md +91 -0
  521. package/docs/guides/upgrade/web-server.md +109 -0
  522. package/docs/index.md +33 -0
  523. package/docs/llms.txt +290 -0
  524. package/docs/plugin/cli-plugins/api.md +573 -0
  525. package/docs/plugin/cli-plugins/life-cycle.md +2 -0
  526. package/docs/plugin/introduction.md +152 -0
  527. package/docs/plugin/official/cli-plugins/plugin-bff.md +5 -0
  528. package/docs/plugin/official/cli-plugins/plugin-ssg.md +5 -0
  529. package/docs/plugin/official/cli-plugins/plugin-styled-components.md +5 -0
  530. package/docs/plugin/official/cli-plugins.md +4 -0
  531. package/docs/plugin/plugin-system.md +238 -0
  532. package/docs/plugin/runtime-plugins/api.md +194 -0
  533. package/docs/plugin/runtime-plugins/life-cycle.md +2 -0
  534. package/docs/plugin/server-plugins/api.md +209 -0
  535. package/docs/plugin/server-plugins/life-cycle.md +13 -0
  536. package/docs/tutorials/examples/csr-auth.md +9 -0
  537. package/docs/tutorials/foundations/introduction.md +16 -0
  538. package/lib/types.d.ts +2 -3
  539. package/package.json +88 -32
  540. package/rslib.config.mts +11 -12
  541. package/dist/cjs/commands/runtime.js +0 -196
  542. package/dist/cjs/plugins/deploy/platforms/cloudflare.js +0 -540
  543. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.mjs +0 -576
  544. package/dist/cjs/ultramodern/designSystem.js +0 -123
  545. package/dist/esm/baseline.mjs +0 -4
  546. package/dist/esm/commands/runtime.mjs +0 -146
  547. package/dist/esm/plugins/deploy/platforms/cloudflare.mjs +0 -492
  548. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.mjs +0 -576
  549. package/dist/esm/ultramodern/designSystem.mjs +0 -73
  550. package/dist/esm-node/baseline.mjs +0 -5
  551. package/dist/esm-node/commands/runtime.mjs +0 -147
  552. package/dist/esm-node/plugins/deploy/platforms/cloudflare.mjs +0 -493
  553. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.mjs +0 -576
  554. package/dist/esm-node/ultramodern/designSystem.mjs +0 -74
  555. package/dist/types/baseline.d.ts +0 -16
  556. package/dist/types/commands/runtime.d.ts +0 -12
  557. package/dist/types/ultramodern/designSystem.d.ts +0 -54
  558. /package/dist/types/plugins/deploy/platforms/templates/{cloudflare-entry.d.mts → cloudflare-entry.006-fetch-handler.d.mts} +0 -0
@@ -23,10 +23,10 @@ const analyze = ()=>({
23
23
  const resolvedConfig = api.getNormalizedConfig();
24
24
  const hooks = api.getHooks();
25
25
  try {
26
- if (checkIsBuildCommands()) fs.emptydirSync(appContext.internalDirectory);
26
+ if (checkIsBuildCommands(appContext.command)) fs.emptydirSync(appContext.internalDirectory);
27
27
  } catch {}
28
28
  const apiOnly = await isApiOnly(appContext.appDirectory, resolvedConfig.source?.entriesDir, appContext.apiDirectory);
29
- const [{ getProdServerRoutes }] = await Promise.all([
29
+ const [{ getProdEntrypoints, getProdServerRoutes }] = await Promise.all([
30
30
  import("./getServerRoutes.mjs")
31
31
  ]);
32
32
  if (apiOnly) {
@@ -45,6 +45,17 @@ const analyze = ()=>({
45
45
  });
46
46
  return;
47
47
  }
48
+ if (checkIsServeCommand()) {
49
+ const routes = getProdServerRoutes(appContext.distDirectory);
50
+ const entrypoints = getProdEntrypoints(appContext.distDirectory, routes, resolvedConfig.source.mainEntryName);
51
+ api.updateAppContext({
52
+ apiOnly,
53
+ checkedEntries: entrypoints.map((entrypoint)=>entrypoint.entryName),
54
+ entrypoints,
55
+ serverRoutes: routes
56
+ });
57
+ return;
58
+ }
48
59
  const [{ getBundleEntry }, { getServerRoutes }, { getHtmlTemplate }] = await Promise.all([
49
60
  import("./getBundleEntry.mjs"),
50
61
  import("./getServerRoutes.mjs"),
@@ -55,17 +66,14 @@ const analyze = ()=>({
55
66
  });
56
67
  debug("entrypoints: %o", entrypoints);
57
68
  const routes = [];
58
- if (checkIsServeCommand()) routes.push(...getProdServerRoutes(appContext.distDirectory));
59
- else {
60
- const initialRoutes = getServerRoutes(entrypoints, {
61
- appContext,
62
- config: resolvedConfig
63
- });
64
- const { routes: modifiedRoutes } = await hooks.modifyServerRoutes.call({
65
- routes: initialRoutes
66
- });
67
- routes.push(...modifiedRoutes);
68
- }
69
+ const initialRoutes = getServerRoutes(entrypoints, {
70
+ appContext,
71
+ config: resolvedConfig
72
+ });
73
+ const { routes: modifiedRoutes } = await hooks.modifyServerRoutes.call({
74
+ routes: initialRoutes
75
+ });
76
+ routes.push(...modifiedRoutes);
69
77
  debug("server routes: %o", routes);
70
78
  appContext = {
71
79
  ...api.getAppContext(),
@@ -117,7 +125,7 @@ const analyze = ()=>({
117
125
  htmlTemplates
118
126
  };
119
127
  api.updateAppContext(appContext);
120
- if (checkIsBuildCommands()) {
128
+ if (checkIsBuildCommands(appContext.command)) {
121
129
  await hooks.generateEntryCode.call({
122
130
  entrypoints
123
131
  });
@@ -1,8 +1,8 @@
1
1
  import { parse } from "@babel/parser";
2
2
  import traverse from "@babel/traverse";
3
3
  import fs from "fs";
4
- import * as __rspack_external__babel_types_69e65b52 from "@babel/types";
5
- const isFunction = (node)=>__rspack_external__babel_types_69e65b52.isFunctionDeclaration(node) || __rspack_external__babel_types_69e65b52.isFunctionExpression(node) || __rspack_external__babel_types_69e65b52.isArrowFunctionExpression(node);
4
+ import * as __rspack_external__babel_types_6e8337dd from "@babel/types";
5
+ const isFunction = (node)=>__rspack_external__babel_types_6e8337dd.isFunctionDeclaration(node) || __rspack_external__babel_types_6e8337dd.isFunctionExpression(node) || __rspack_external__babel_types_6e8337dd.isArrowFunctionExpression(node);
6
6
  const isDefaultExportFunction = (file)=>{
7
7
  if (!file || !fs.existsSync(file)) return false;
8
8
  const ast = parse(fs.readFileSync(file, 'utf8'), {
@@ -38,7 +38,7 @@ const parseModule = async ({ source, filename })=>{
38
38
  return await parse(content);
39
39
  };
40
40
  const getServerCombinedModuleFile = (internalDirectory, entryName)=>path.join(internalDirectory, entryName, 'server-loader-combined.js');
41
- const checkIsBuildCommands = ()=>{
41
+ const checkIsBuildCommands = (contextCommand)=>{
42
42
  const buildCommands = [
43
43
  'dev',
44
44
  'start',
@@ -48,7 +48,8 @@ const checkIsBuildCommands = ()=>{
48
48
  'dev-worker'
49
49
  ];
50
50
  const command = getCommand();
51
- return buildCommands.includes(command);
51
+ if (buildCommands.includes(command)) return true;
52
+ return 'dev' === contextCommand || 'start' === contextCommand || 'build' === contextCommand || 'deploy' === contextCommand;
52
53
  };
53
54
  const checkIsServeCommand = ()=>{
54
55
  const command = getCommand();
@@ -0,0 +1,204 @@
1
+ import node_path from "node:path";
2
+ import { BACKEND_FEDERATION_CONTRACT_VERSION, BACKEND_FEDERATION_EFFECT_EXPOSE, BACKEND_FEDERATION_NODE_ADAPTER_VERSION, BACKEND_FEDERATION_REMOTE_ENTRY_FILE, formatBackendFederationValidationErrors, validateBackendFederationManifest } from "@modern-js/utils/universal";
3
+ import { build } from "esbuild";
4
+ import { normalizeRelativePath } from "./config.mjs";
5
+ const createRelativeImportSpecifier = (fromDirectory, toFile)=>{
6
+ const relativePath = normalizeRelativePath(node_path.relative(fromDirectory, toFile));
7
+ return relativePath.startsWith('.') ? relativePath : `./${relativePath}`;
8
+ };
9
+ const createPublicPath = (containerEntry, fallbackPort)=>{
10
+ try {
11
+ return new URL('.', containerEntry).href;
12
+ } catch {
13
+ const slashIndex = containerEntry.lastIndexOf('/');
14
+ if (slashIndex >= 0) return containerEntry.slice(0, slashIndex + 1);
15
+ return `http://localhost:${fallbackPort}/`;
16
+ }
17
+ };
18
+ const createBackendRemoteEntrySource = async (workspaceRoot, app, effectApiPath, entryPath)=>{
19
+ const effectApiSpecifier = createRelativeImportSpecifier(node_path.dirname(effectApiPath), effectApiPath);
20
+ const containerMetadata = {
21
+ buildVersion: app.buildVersion,
22
+ expose: BACKEND_FEDERATION_EFFECT_EXPOSE,
23
+ name: app.backendName,
24
+ packageName: app.packageName,
25
+ remoteType: app.remoteType,
26
+ source: normalizeRelativePath(node_path.relative(workspaceRoot, effectApiPath)),
27
+ version: app.version,
28
+ ...app.unitId ? {
29
+ unitId: app.unitId
30
+ } : {},
31
+ ...app.sourceRevision ? {
32
+ sourceRevision: app.sourceRevision
33
+ } : {}
34
+ };
35
+ const compatibility = {
36
+ build: app.buildVersion,
37
+ contractVersion: BACKEND_FEDERATION_CONTRACT_VERSION,
38
+ nodeAdapterVersion: BACKEND_FEDERATION_NODE_ADAPTER_VERSION,
39
+ packageName: app.packageName,
40
+ ...app.unitId ? {
41
+ unitId: app.unitId
42
+ } : {},
43
+ ...app.sourceRevision ? {
44
+ sourceRevision: app.sourceRevision
45
+ } : {}
46
+ };
47
+ const source = `// Generated by Modern.js backend federation build.
48
+ import * as exposedNamespace from ${JSON.stringify(effectApiSpecifier)};
49
+
50
+ const exposedModule = {
51
+ ...exposedNamespace,
52
+ backendFederationContract: {
53
+ ...(exposedNamespace.backendFederationContract ?? {}),
54
+ compatibility: {
55
+ ...(exposedNamespace.backendFederationContract?.compatibility ?? {}),
56
+ ...${JSON.stringify(compatibility)},
57
+ },
58
+ name: ${JSON.stringify(app.backendName)},
59
+ role: 'microvertical-server',
60
+ runtimeFramework: 'effect',
61
+ strictEffectApproach: true,
62
+ },
63
+ };
64
+ const exposedModules = {
65
+ ${JSON.stringify(BACKEND_FEDERATION_EFFECT_EXPOSE)}: () => Promise.resolve(exposedModule),
66
+ };
67
+ const __modernjsBackendFederation = ${JSON.stringify(containerMetadata)};
68
+
69
+ function init() {}
70
+
71
+ function get(id) {
72
+ const load = exposedModules[id];
73
+ if (!load) {
74
+ throw new Error(\`Unexpected backend federation expose: \${id}\`);
75
+ }
76
+
77
+ return async () => load();
78
+ }
79
+
80
+ module.exports = { __modernjsBackendFederation, get, init };
81
+ `;
82
+ const result = await build({
83
+ absWorkingDir: node_path.dirname(effectApiPath),
84
+ bundle: true,
85
+ format: 'cjs',
86
+ logLevel: 'silent',
87
+ platform: 'node',
88
+ stdin: {
89
+ contents: source,
90
+ loader: 'ts',
91
+ resolveDir: node_path.dirname(effectApiPath),
92
+ sourcefile: node_path.basename(entryPath)
93
+ },
94
+ target: 'node20',
95
+ write: false
96
+ });
97
+ const output = result.outputFiles[0];
98
+ if (!output) throw new Error('[backend-federation-build] CommonJS backend federation container emitted no output.');
99
+ return output.text;
100
+ };
101
+ const createBackendManifest = (workspaceRoot, distDirectory, app)=>{
102
+ const sourceModule = `${app.directory}/api/effect-api.ts`;
103
+ const publicPath = createPublicPath(app.containerEntry, app.port);
104
+ const manifest = {
105
+ schemaVersion: 1,
106
+ id: app.backendName,
107
+ name: app.backendName,
108
+ version: app.version,
109
+ buildVersion: app.buildVersion,
110
+ metaData: {
111
+ name: app.backendName,
112
+ type: 'backend',
113
+ buildInfo: {
114
+ buildVersion: app.buildVersion,
115
+ buildName: app.packageName
116
+ },
117
+ remoteEntry: {
118
+ name: BACKEND_FEDERATION_REMOTE_ENTRY_FILE,
119
+ path: '',
120
+ type: app.remoteType
121
+ },
122
+ globalName: app.backendName,
123
+ publicPath,
124
+ ssrRemoteEntry: {
125
+ name: BACKEND_FEDERATION_REMOTE_ENTRY_FILE,
126
+ path: '',
127
+ type: app.remoteType
128
+ },
129
+ ssrPublicPath: publicPath
130
+ },
131
+ entry: {
132
+ file: BACKEND_FEDERATION_REMOTE_ENTRY_FILE,
133
+ path: normalizeRelativePath(node_path.relative(workspaceRoot, node_path.join(distDirectory, BACKEND_FEDERATION_REMOTE_ENTRY_FILE))),
134
+ type: app.remoteType,
135
+ url: app.containerEntry
136
+ },
137
+ exposes: [
138
+ {
139
+ id: `${app.backendName}:${BACKEND_FEDERATION_EFFECT_EXPOSE}`,
140
+ name: BACKEND_FEDERATION_EFFECT_EXPOSE,
141
+ path: '',
142
+ assets: {
143
+ js: {
144
+ async: [],
145
+ sync: [
146
+ BACKEND_FEDERATION_REMOTE_ENTRY_FILE
147
+ ]
148
+ },
149
+ css: {
150
+ async: [],
151
+ sync: []
152
+ }
153
+ }
154
+ }
155
+ ],
156
+ shared: [],
157
+ backendFederation: {
158
+ role: 'microvertical-server',
159
+ appId: app.id,
160
+ name: app.backendName,
161
+ runtimeFramework: 'effect',
162
+ strictEffectApproach: true,
163
+ contractVersion: BACKEND_FEDERATION_CONTRACT_VERSION,
164
+ nodeAdapterVersion: BACKEND_FEDERATION_NODE_ADAPTER_VERSION,
165
+ remoteType: app.remoteType,
166
+ expose: BACKEND_FEDERATION_EFFECT_EXPOSE,
167
+ manifestUrl: app.manifestUrl,
168
+ containerEntry: app.containerEntry,
169
+ source: {
170
+ module: sourceModule
171
+ },
172
+ readinessPath: `${app.apiPrefix}/${app.apiStem}/readiness`,
173
+ openapiPath: `${app.apiPrefix}/openapi.json`,
174
+ ...app.deliveryUnit ? {
175
+ deliveryUnit: app.deliveryUnit
176
+ } : {},
177
+ versionBoundary: {
178
+ invariant: 'web-and-api-same-build',
179
+ packageName: app.packageName,
180
+ version: app.version,
181
+ buildVersion: app.buildVersion,
182
+ ...app.uiManifestUrl ? {
183
+ uiManifestUrl: app.uiManifestUrl
184
+ } : {},
185
+ ...app.deliveryUnit ? {
186
+ deliveryUnit: {
187
+ unitId: app.deliveryUnit.unitId,
188
+ buildMarker: app.deliveryUnit.buildMarker,
189
+ sourceRevision: app.deliveryUnit.sourceRevision
190
+ }
191
+ } : {}
192
+ }
193
+ }
194
+ };
195
+ const validation = validateBackendFederationManifest(manifest, {
196
+ path: 'backendFederationManifest',
197
+ requireEffectExpose: true,
198
+ requireEffectRuntime: true,
199
+ requireVersionFields: true
200
+ });
201
+ if (!validation.ok) throw new Error(`[backend-federation-build] Invalid backend federation manifest: ${formatBackendFederationValidationErrors(validation.errors)}.`);
202
+ return manifest;
203
+ };
204
+ export { createBackendManifest, createBackendRemoteEntrySource };
@@ -0,0 +1,128 @@
1
+ import { existsSync } from "node:fs";
2
+ import promises from "node:fs/promises";
3
+ import node_path from "node:path";
4
+ import { BACKEND_FEDERATION_MANIFEST_FILE, BACKEND_FEDERATION_REMOTE_ENTRY_FILE, DELIVERY_UNIT_DEPLOY_PROFILE, DELIVERY_UNIT_KIND, DELIVERY_UNIT_SCHEMA_VERSION, ULTRAMODERN_BUILD_ARTIFACT_FILE, ULTRAMODERN_BUILD_ARTIFACT_PATH, ULTRAMODERN_BUILD_MODULE_PATH, deliveryUnitContractBlock, isUltramodernBuildArtifact, validateDeliveryUnitRecord, validateUltramodernBuildArtifact } from "@modern-js/utils/universal";
5
+ import { resolveUltramodernSourceRevision } from "../../ultramodern-release-identity.mjs";
6
+ const COMPACT_CONFIG_PATH = '.modernjs/ultramodern.json';
7
+ const normalizeRelativePath = (value)=>value.replace(/\\/gu, '/').replace(/^\.\/+/u, '');
8
+ const isRecord = (value)=>'object' == typeof value && null !== value;
9
+ const readJsonFile = async (filePath)=>JSON.parse(await promises.readFile(filePath, 'utf8'));
10
+ const buildArtifactPathFor = (appDirectory)=>node_path.join(appDirectory, ULTRAMODERN_BUILD_ARTIFACT_PATH);
11
+ const buildModulePathFor = (appDirectory)=>node_path.join(appDirectory, ULTRAMODERN_BUILD_MODULE_PATH);
12
+ const readBuildIdentity = async (appDirectory)=>{
13
+ const buildArtifactPath = buildArtifactPathFor(appDirectory);
14
+ if (existsSync(buildArtifactPath)) {
15
+ const artifact = await readJsonFile(buildArtifactPath);
16
+ const artifactValidation = validateUltramodernBuildArtifact(artifact, buildArtifactPath);
17
+ if (!artifactValidation.ok) throw new Error(`[backend-federation-build] Invalid delivery-unit build artifact at ${buildArtifactPath}.`);
18
+ if (!isUltramodernBuildArtifact(artifact)) throw new Error(`[backend-federation-build] Invalid delivery-unit build artifact at ${buildArtifactPath}.`);
19
+ const deliveryUnit = artifact.deliveryUnit;
20
+ return {
21
+ artifact,
22
+ appId: deliveryUnit.appId,
23
+ buildVersion: deliveryUnit.buildMarker,
24
+ packageName: deliveryUnit.packageName,
25
+ version: deliveryUnit.version,
26
+ unitId: deliveryUnit.unitId,
27
+ sourceRevision: deliveryUnit.sourceRevision
28
+ };
29
+ }
30
+ const buildModulePath = buildModulePathFor(appDirectory);
31
+ if (!existsSync(buildModulePath)) return {};
32
+ console.warn(`[backend-federation-build] ${buildArtifactPath} missing; falling back to legacy regex parsing of ${buildModulePath}. Regenerate the workspace to emit ${ULTRAMODERN_BUILD_ARTIFACT_FILE}.`);
33
+ const source = await promises.readFile(buildModulePath, 'utf8');
34
+ return {
35
+ appId: source.match(/\bappId:\s*['"]([^'"]+)['"]/u)?.[1],
36
+ buildVersion: source.match(/\bbuild:\s*['"]([^'"]+)['"]/u)?.[1],
37
+ packageName: source.match(/\bpackageName:\s*['"]([^'"]+)['"]/u)?.[1],
38
+ version: source.match(/\bversion:\s*['"]([^'"]+)['"]/u)?.[1],
39
+ unitId: source.match(/\bunitId:\s*['"]([^'"]+)['"]/u)?.[1],
40
+ sourceRevision: source.match(/\bsourceRevision:\s*['"]([^'"]+)['"]/u)?.[1]
41
+ };
42
+ };
43
+ const toPascalCase = (value)=>value.split(/[^a-zA-Z0-9]+/u).filter(Boolean).map((part)=>part.charAt(0).toUpperCase() + part.slice(1)).join('');
44
+ const stringValue = (value)=>'string' == typeof value && value.length > 0 ? value : void 0;
45
+ const createBackendName = (app, id)=>{
46
+ const configuredName = stringValue(app.backendFederation?.name) ?? stringValue(app.backendFederation?.executionSurfaces?.node?.remoteName) ?? stringValue(app.serverExecution?.node?.remoteName);
47
+ if (configuredName) return configuredName;
48
+ const mfName = stringValue(app.moduleFederation?.name);
49
+ return mfName ? `${mfName}Backend` : `vertical${toPascalCase(id)}Backend`;
50
+ };
51
+ const findWorkspaceRoot = (appDirectory)=>{
52
+ let current = appDirectory;
53
+ while(true){
54
+ if (existsSync(node_path.join(current, COMPACT_CONFIG_PATH))) return current;
55
+ const parent = node_path.dirname(current);
56
+ if (parent === current) return;
57
+ current = parent;
58
+ }
59
+ };
60
+ const resolveWorkspaceSourceRevision = async (workspaceRoot)=>resolveUltramodernSourceRevision(workspaceRoot);
61
+ const createStampedDeliveryUnit = (input)=>{
62
+ if (!input.unitId || !input.buildMarker || !input.packageName || !input.version) return;
63
+ const record = {
64
+ schemaVersion: DELIVERY_UNIT_SCHEMA_VERSION,
65
+ kind: DELIVERY_UNIT_KIND,
66
+ appId: input.appId,
67
+ unitId: input.unitId,
68
+ packageName: input.packageName,
69
+ version: input.version,
70
+ buildMarker: input.buildMarker,
71
+ sourceRevision: input.sourceRevision,
72
+ deployProfile: DELIVERY_UNIT_DEPLOY_PROFILE
73
+ };
74
+ const validation = validateDeliveryUnitRecord(record);
75
+ if (!validation.ok) return;
76
+ return deliveryUnitContractBlock(record);
77
+ };
78
+ const createAppFromCompactMetadata = (workspaceRoot, appDirectory, compactApp)=>{
79
+ const id = stringValue(compactApp.id);
80
+ const appPath = stringValue(compactApp.path);
81
+ if (!id || 'vertical' !== compactApp.kind || !isRecord(compactApp.api)) return;
82
+ const directory = appPath ? normalizeRelativePath(appPath) : `verticals/${id}`;
83
+ if (node_path.resolve(workspaceRoot, directory) !== node_path.resolve(appDirectory)) return;
84
+ const port = 'number' == typeof compactApp.port ? compactApp.port : void 0;
85
+ if (void 0 === port) return;
86
+ const apiPrefix = stringValue(compactApp.api.prefix) ?? `/${id}-api`;
87
+ const apiStem = stringValue(compactApp.api.stem) ?? id;
88
+ const backendName = createBackendName(compactApp, id);
89
+ const manifestUrl = stringValue(compactApp.backendFederation?.executionSurfaces?.node?.manifestUrl) ?? stringValue(compactApp.serverExecution?.node?.manifestUrl) ?? `http://localhost:${port}/${BACKEND_FEDERATION_MANIFEST_FILE}`;
90
+ const containerEntry = stringValue(compactApp.backendFederation?.executionSurfaces?.node?.containerEntry) ?? stringValue(compactApp.serverExecution?.node?.containerEntry) ?? `http://localhost:${port}/${BACKEND_FEDERATION_REMOTE_ENTRY_FILE}`;
91
+ const configuredRemoteType = stringValue(compactApp.backendFederation?.executionSurfaces?.node?.remoteType) ?? stringValue(compactApp.serverExecution?.node?.remoteType);
92
+ if (void 0 !== configuredRemoteType && 'commonjs-module' !== configuredRemoteType) throw new Error(`[backend-federation-build] Node backend federation remoteType must be "commonjs-module"; received "${configuredRemoteType}" for ${id}.`);
93
+ if (!new URL(containerEntry).pathname.endsWith(`/${BACKEND_FEDERATION_REMOTE_ENTRY_FILE}`)) throw new Error(`[backend-federation-build] Node backend federation containerEntry must end with "/${BACKEND_FEDERATION_REMOTE_ENTRY_FILE}"; received "${containerEntry}" for ${id}.`);
94
+ const remoteType = 'commonjs-module';
95
+ const packageName = stringValue(compactApp.package);
96
+ const uiManifestUrl = stringValue(compactApp.backendFederation?.versionBoundary?.ui?.manifestUrl) ?? stringValue(compactApp.moduleFederation?.manifestUrl);
97
+ const compactDeliveryUnit = isRecord(compactApp.deliveryUnit) ? {
98
+ unitId: stringValue(compactApp.deliveryUnit.unitId),
99
+ buildMarker: stringValue(compactApp.deliveryUnit.buildMarker),
100
+ sourceRevision: stringValue(compactApp.deliveryUnit.sourceRevision),
101
+ packageName: stringValue(compactApp.deliveryUnit.packageName),
102
+ version: stringValue(compactApp.deliveryUnit.version)
103
+ } : void 0;
104
+ return {
105
+ id,
106
+ directory,
107
+ packageName,
108
+ port,
109
+ apiPrefix,
110
+ apiStem,
111
+ backendName,
112
+ manifestUrl,
113
+ containerEntry,
114
+ remoteType,
115
+ uiManifestUrl,
116
+ compactDeliveryUnit
117
+ };
118
+ };
119
+ const findBackendFederationApp = async (workspaceRoot, appDirectory)=>{
120
+ const compactConfigPath = node_path.join(workspaceRoot, COMPACT_CONFIG_PATH);
121
+ const compactConfig = await readJsonFile(compactConfigPath);
122
+ const apps = Array.isArray(compactConfig.topology?.apps) ? compactConfig.topology.apps : [];
123
+ for (const app of apps){
124
+ const resolved = createAppFromCompactMetadata(workspaceRoot, appDirectory, app);
125
+ if (resolved) return resolved;
126
+ }
127
+ };
128
+ export { COMPACT_CONFIG_PATH, buildArtifactPathFor, buildModulePathFor, createAppFromCompactMetadata, createStampedDeliveryUnit, findBackendFederationApp, findWorkspaceRoot, normalizeRelativePath, readBuildIdentity, resolveWorkspaceSourceRevision };
@@ -0,0 +1,97 @@
1
+ import { existsSync } from "node:fs";
2
+ import promises from "node:fs/promises";
3
+ import node_path from "node:path";
4
+ import { BACKEND_FEDERATION_MANIFEST_FILE, BACKEND_FEDERATION_REMOTE_ENTRY_FILE, ULTRAMODERN_BUILD_ARTIFACT_FILE, stampUltramodernBuildArtifactIdentity } from "@modern-js/utils/universal";
5
+ import { resolveUltramodernReleaseIdentity } from "../../ultramodern-release-identity.mjs";
6
+ import { createBackendManifest, createBackendRemoteEntrySource } from "./codegen.mjs";
7
+ import { COMPACT_CONFIG_PATH, buildArtifactPathFor, buildModulePathFor, createStampedDeliveryUnit, findBackendFederationApp, findWorkspaceRoot, readBuildIdentity, resolveWorkspaceSourceRevision } from "./config.mjs";
8
+ const emitBackendFederationArtifacts = async (appDirectory, distDirectory)=>{
9
+ const workspaceRoot = findWorkspaceRoot(appDirectory);
10
+ if (!workspaceRoot) return;
11
+ const effectApiPath = node_path.join(appDirectory, 'api/effect-api.ts');
12
+ const backendFederationConfigPath = node_path.join(appDirectory, 'backend-federation.config.ts');
13
+ if (!existsSync(effectApiPath) || !existsSync(backendFederationConfigPath)) return;
14
+ const app = await findBackendFederationApp(workspaceRoot, appDirectory);
15
+ if (!app) return;
16
+ const buildIdentity = await readBuildIdentity(appDirectory);
17
+ const compactDeliveryUnit = app.compactDeliveryUnit;
18
+ const hasCompactDeliveryUnit = void 0 !== compactDeliveryUnit && (void 0 !== compactDeliveryUnit.unitId || void 0 !== compactDeliveryUnit.buildMarker || void 0 !== compactDeliveryUnit.packageName || void 0 !== compactDeliveryUnit.version);
19
+ const hasBuildIdentity = void 0 !== buildIdentity.unitId || void 0 !== buildIdentity.buildVersion || void 0 !== buildIdentity.packageName || void 0 !== buildIdentity.version;
20
+ if (hasBuildIdentity) {
21
+ const compactConfigPath = node_path.join(workspaceRoot, COMPACT_CONFIG_PATH);
22
+ const buildIdentityPath = existsSync(buildArtifactPathFor(appDirectory)) ? buildArtifactPathFor(appDirectory) : buildModulePathFor(appDirectory);
23
+ const mismatches = [];
24
+ const compare = (label, a, b, leftLabel = 'deliveryUnit')=>{
25
+ if (void 0 !== a && void 0 !== b && a !== b) mismatches.push(`${label}: ${leftLabel}=${a} vs ultramodern-build=${b}`);
26
+ };
27
+ compare('appId', app.id, buildIdentity.appId, 'topology');
28
+ if (hasCompactDeliveryUnit) {
29
+ compare('unitId', compactDeliveryUnit?.unitId, buildIdentity.unitId);
30
+ compare('buildMarker/build', compactDeliveryUnit?.buildMarker, buildIdentity.buildVersion);
31
+ compare('packageName', compactDeliveryUnit?.packageName, buildIdentity.packageName);
32
+ compare('version', compactDeliveryUnit?.version, buildIdentity.version);
33
+ }
34
+ if (mismatches.length > 0) throw new Error(`[backend-federation-build] Delivery-unit identity drift between ${compactConfigPath} (topology) and ${buildIdentityPath}: ${mismatches.join('; ')}`);
35
+ }
36
+ const unitId = compactDeliveryUnit?.unitId ?? buildIdentity.unitId;
37
+ const generationBuildMarker = compactDeliveryUnit?.buildMarker ?? buildIdentity.buildVersion;
38
+ const sourceRevision = await resolveWorkspaceSourceRevision(workspaceRoot);
39
+ const buildVersion = generationBuildMarker && unitId ? resolveUltramodernReleaseIdentity({
40
+ generationBuildMarker,
41
+ unitId,
42
+ workspaceRoot
43
+ }).buildMarker : void 0;
44
+ const packageName = compactDeliveryUnit?.packageName ?? buildIdentity.packageName ?? app.packageName;
45
+ const version = compactDeliveryUnit?.version ?? buildIdentity.version;
46
+ const deliveryUnit = createStampedDeliveryUnit({
47
+ appId: app.id,
48
+ unitId,
49
+ buildMarker: buildVersion,
50
+ packageName,
51
+ version,
52
+ sourceRevision
53
+ });
54
+ const stampedBuildArtifact = buildIdentity.artifact ? stampUltramodernBuildArtifactIdentity(buildIdentity.artifact, {
55
+ buildMarker: buildVersion ?? buildIdentity.artifact.deliveryUnit.buildMarker,
56
+ sourceRevision
57
+ }) : void 0;
58
+ const resolvedApp = {
59
+ ...app,
60
+ packageName,
61
+ version,
62
+ buildVersion,
63
+ unitId,
64
+ sourceRevision,
65
+ deliveryUnit
66
+ };
67
+ const manifestPath = node_path.join(distDirectory, BACKEND_FEDERATION_MANIFEST_FILE);
68
+ const entryPath = node_path.join(distDirectory, BACKEND_FEDERATION_REMOTE_ENTRY_FILE);
69
+ const deliveryUnitArtifactPath = stampedBuildArtifact ? node_path.join(distDirectory, ULTRAMODERN_BUILD_ARTIFACT_FILE) : void 0;
70
+ await promises.mkdir(distDirectory, {
71
+ recursive: true
72
+ });
73
+ await promises.writeFile(entryPath, await createBackendRemoteEntrySource(workspaceRoot, resolvedApp, effectApiPath, entryPath));
74
+ await promises.writeFile(manifestPath, `${JSON.stringify(createBackendManifest(workspaceRoot, distDirectory, resolvedApp), null, 2)}\n`);
75
+ if (stampedBuildArtifact && deliveryUnitArtifactPath) await promises.writeFile(deliveryUnitArtifactPath, `${JSON.stringify(stampedBuildArtifact, null, 2)}\n`);
76
+ return {
77
+ appId: resolvedApp.id,
78
+ manifestPath,
79
+ containerPath: entryPath,
80
+ ...deliveryUnitArtifactPath ? {
81
+ deliveryUnitArtifactPath
82
+ } : {},
83
+ remoteName: resolvedApp.backendName,
84
+ remoteType: resolvedApp.remoteType
85
+ };
86
+ };
87
+ const emit = ()=>({
88
+ name: '@modern-js/backend-federation-build',
89
+ setup (api) {
90
+ api.onAfterBuild(async ()=>{
91
+ const { appDirectory, distDirectory } = api.getAppContext();
92
+ await emitBackendFederationArtifacts(appDirectory, distDirectory);
93
+ });
94
+ }
95
+ });
96
+ export default emit;
97
+ export { emitBackendFederationArtifacts };
@@ -0,0 +1 @@
1
+ export { default, emitBackendFederationArtifacts } from "./backend-federation/emit.mjs";
@@ -1,5 +1,5 @@
1
1
  import { provider } from "std-env";
2
- import { createCloudflarePreset } from "./platforms/cloudflare.mjs";
2
+ import { createCloudflarePreset } from "./platforms/cloudflare/index.mjs";
3
3
  import { createGhPagesPreset } from "./platforms/gh-pages.mjs";
4
4
  import { createNetlifyPreset } from "./platforms/netlify.mjs";
5
5
  import { createNodePreset } from "./platforms/node.mjs";
@@ -0,0 +1,64 @@
1
+ import node_path from "node:path";
2
+ import { fs } from "@modern-js/utils";
3
+ import { RESERVED_ARTIFACT_DESTINATION_DIRECTORIES, RESERVED_ARTIFACT_DESTINATION_FILES, ROUTE_SPEC_OUTPUT } from "./constants.mjs";
4
+ import { normalizeRelativePath } from "./utils.mjs";
5
+ const normalizeCloudflareArtifact = (artifact, index)=>{
6
+ const from = normalizeRelativePath(artifact.from, `deploy.worker.artifacts[${index}].from`, 'app root');
7
+ const to = normalizeRelativePath(artifact.to, `deploy.worker.artifacts[${index}].to`, 'Cloudflare output');
8
+ const [topLevelDestination] = to.split('/');
9
+ const reservedDestination = RESERVED_ARTIFACT_DESTINATION_FILES.has(to) ? to : topLevelDestination;
10
+ if (RESERVED_ARTIFACT_DESTINATION_FILES.has(to) || RESERVED_ARTIFACT_DESTINATION_DIRECTORIES.has(topLevelDestination)) throw new Error(`deploy.worker.artifacts[${index}].to must not target generated Cloudflare output path ${JSON.stringify(reservedDestination)}.`);
11
+ return {
12
+ from,
13
+ to,
14
+ index
15
+ };
16
+ };
17
+ const getCloudflareArtifacts = (modernConfig)=>(modernConfig.deploy?.worker?.artifacts ?? []).map(normalizeCloudflareArtifact);
18
+ const normalizeCloudflarePublicAsset = (asset, index)=>{
19
+ const from = normalizeRelativePath(asset.from, `deploy.worker.publicAssets[${index}].from`, 'app root');
20
+ const to = normalizeRelativePath(asset.to, `deploy.worker.publicAssets[${index}].to`, 'Cloudflare public output', {
21
+ allowRoot: true
22
+ });
23
+ return {
24
+ from,
25
+ to,
26
+ index
27
+ };
28
+ };
29
+ const getCloudflarePublicAssets = (modernConfig)=>(modernConfig.deploy?.worker?.publicAssets ?? []).map(normalizeCloudflarePublicAsset);
30
+ const copyCloudflareArtifacts = async (appDirectory, outputDirectory, artifacts)=>{
31
+ for (const artifact of artifacts){
32
+ const sourcePath = node_path.join(appDirectory, artifact.from);
33
+ if (!await fs.pathExists(sourcePath)) throw new Error(`deploy.worker.artifacts[${artifact.index}].from does not exist: ${artifact.from}`);
34
+ await fs.copy(sourcePath, node_path.join(outputDirectory, artifact.to));
35
+ }
36
+ };
37
+ const copyCloudflarePublicAssets = async (appDirectory, publicDirectory, publicAssets)=>{
38
+ for (const asset of publicAssets){
39
+ const sourcePath = node_path.join(appDirectory, asset.from);
40
+ if (!await fs.pathExists(sourcePath)) throw new Error(`deploy.worker.publicAssets[${asset.index}].from does not exist: ${asset.from}`);
41
+ await fs.copy(sourcePath, node_path.join(publicDirectory, asset.to));
42
+ }
43
+ };
44
+ const copyCloudflareD1Migrations = async (appDirectory, outputDirectory, modernConfig)=>{
45
+ for (const [index, database] of (modernConfig.deploy?.worker?.d1Databases ?? []).entries()){
46
+ if (!database.migrationsDir) continue;
47
+ const migrationsDir = normalizeRelativePath(database.migrationsDir, `deploy.worker.d1Databases[${index}].migrationsDir`, 'app root');
48
+ const sourcePath = node_path.join(appDirectory, migrationsDir);
49
+ if (!await fs.pathExists(sourcePath)) throw new Error(`deploy.worker.d1Databases[${index}].migrationsDir does not exist: ${migrationsDir}`);
50
+ await fs.copy(sourcePath, node_path.join(outputDirectory, migrationsDir));
51
+ }
52
+ };
53
+ const readRouteSpec = async (outputDirectory)=>{
54
+ const routeSpecPath = node_path.join(outputDirectory, ROUTE_SPEC_OUTPUT);
55
+ if (!await fs.pathExists(routeSpecPath)) return {
56
+ routes: []
57
+ };
58
+ const routeSpec = await fs.readJSON(routeSpecPath);
59
+ return {
60
+ ...routeSpec,
61
+ routes: Array.isArray(routeSpec.routes) ? routeSpec.routes : []
62
+ };
63
+ };
64
+ export { copyCloudflareArtifacts, copyCloudflareD1Migrations, copyCloudflarePublicAssets, getCloudflareArtifacts, getCloudflarePublicAssets, readRouteSpec };
@@ -0,0 +1,34 @@
1
+ import { CLOUDFLARE_ASSETS_BINDING, CLOUDFLARE_OUTPUT_PACKAGE_FILE, CLOUDFLARE_PUBLIC_ASSETS_DIRECTORY, CLOUDFLARE_REQUIRED_COMPATIBILITY_FLAGS, CLOUDFLARE_RUNTIME_TYPE, CLOUDFLARE_WORKER_BUNDLE_DIRECTORY, CLOUDFLARE_WORKER_BUNDLE_FORMAT, CLOUDFLARE_WORKER_ENTRY, CLOUDFLARE_WORKER_MANIFEST, CLOUDFLARE_WRANGLER_CONFIG_FILE } from "../cloudflare-output-contract.mjs";
2
+ const WORKER_ENTRY = CLOUDFLARE_WORKER_ENTRY;
3
+ const WORKER_MANIFEST = CLOUDFLARE_WORKER_MANIFEST;
4
+ const WRANGLER_CONFIG_FILE = CLOUDFLARE_WRANGLER_CONFIG_FILE;
5
+ const OUTPUT_PACKAGE_FILE = CLOUDFLARE_OUTPUT_PACKAGE_FILE;
6
+ const ASSETS_BINDING = CLOUDFLARE_ASSETS_BINDING;
7
+ const ROUTE_SPEC_FILE = 'route.json';
8
+ const ROUTE_SPEC_OUTPUT = `server/${ROUTE_SPEC_FILE}`;
9
+ const LOADABLE_STATS_FILE = 'loadable-stats.json';
10
+ const ROUTE_MANIFEST_FILE = 'routes-manifest.json';
11
+ const PUBLIC_ASSETS_DIRECTORY = CLOUDFLARE_PUBLIC_ASSETS_DIRECTORY;
12
+ const WORKER_BUNDLE_DIRECTORY = CLOUDFLARE_WORKER_BUNDLE_DIRECTORY;
13
+ const SERVER_BUNDLE_DIRECTORY = 'bundles';
14
+ const SERVER_OUTPUT_DIRECTORY = 'server';
15
+ const DEFAULT_SERVER_ONLY_PUBLIC_ASSET_EXCLUDES = [
16
+ 'api',
17
+ 'shared'
18
+ ];
19
+ const BFF_EFFECT_WORKER_ENTRY = `${WORKER_BUNDLE_DIRECTORY}/__modern_bff_effect.js`;
20
+ const BFF_EFFECT_WORKER_DISPATCHER_EXPORT = '__modern_create_effect_bff_dispatcher';
21
+ const EFFECT_BFF_CLOUDFLARE_IMPORT_GUIDANCE = 'Ensure the Effect API entry exists at api/index.ts or bff.effect.entry, and import Cloudflare edge handlers from @modern-js/plugin-bff/effect-edge instead of lambda/Hono server helpers.';
22
+ const DEFAULT_COMPATIBILITY_DATE = '2026-06-02';
23
+ const COMPATIBILITY_DATE_PATTERN = /^\d{4}-\d{2}-\d{2}$/u;
24
+ const REQUIRED_COMPATIBILITY_FLAGS = CLOUDFLARE_REQUIRED_COMPATIBILITY_FLAGS;
25
+ const RESERVED_ARTIFACT_DESTINATION_FILES = new Set([
26
+ WRANGLER_CONFIG_FILE,
27
+ OUTPUT_PACKAGE_FILE
28
+ ]);
29
+ const RESERVED_ARTIFACT_DESTINATION_DIRECTORIES = new Set([
30
+ PUBLIC_ASSETS_DIRECTORY,
31
+ SERVER_OUTPUT_DIRECTORY,
32
+ WORKER_BUNDLE_DIRECTORY
33
+ ]);
34
+ export { ASSETS_BINDING, BFF_EFFECT_WORKER_DISPATCHER_EXPORT, BFF_EFFECT_WORKER_ENTRY, CLOUDFLARE_RUNTIME_TYPE, CLOUDFLARE_WORKER_BUNDLE_FORMAT, COMPATIBILITY_DATE_PATTERN, DEFAULT_COMPATIBILITY_DATE, DEFAULT_SERVER_ONLY_PUBLIC_ASSET_EXCLUDES, EFFECT_BFF_CLOUDFLARE_IMPORT_GUIDANCE, LOADABLE_STATS_FILE, OUTPUT_PACKAGE_FILE, PUBLIC_ASSETS_DIRECTORY, REQUIRED_COMPATIBILITY_FLAGS, RESERVED_ARTIFACT_DESTINATION_DIRECTORIES, RESERVED_ARTIFACT_DESTINATION_FILES, ROUTE_MANIFEST_FILE, ROUTE_SPEC_FILE, ROUTE_SPEC_OUTPUT, SERVER_BUNDLE_DIRECTORY, SERVER_OUTPUT_DIRECTORY, WORKER_BUNDLE_DIRECTORY, WORKER_ENTRY, WORKER_MANIFEST, WRANGLER_CONFIG_FILE };