@bleedingdev/modern-js-app-tools-extensions 3.9.0-ultramodern.9 → 3.9.3-ultramodern.10

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 (275) hide show
  1. package/README.md +23 -0
  2. package/dist/cjs/backend-federation-build/codegen.js +29 -18
  3. package/dist/cjs/backend-federation-build/config.js +84 -45
  4. package/dist/cjs/backend-federation-build/emit.js +63 -22
  5. package/dist/cjs/build-config/build-environment.js +30 -165
  6. package/dist/cjs/build-config/internal-effect-discovery.js +231 -0
  7. package/dist/cjs/build-config/public.js +2 -5
  8. package/dist/cjs/build-config/remote-address.js +58 -0
  9. package/dist/cjs/cloudflare/artifacts.js +8 -19
  10. package/dist/cjs/cloudflare/delivery-unit.js +125 -43
  11. package/dist/cjs/cloudflare/index.js +14 -4
  12. package/dist/cjs/cloudflare/native-renderer.js +100 -0
  13. package/dist/cjs/cloudflare/renderer-identity.js +106 -0
  14. package/dist/cjs/cloudflare/worker-manifest.js +54 -13
  15. package/dist/cjs/cloudflare/worker-options.js +48 -0
  16. package/dist/cjs/cloudflare/wrangler-config.js +210 -13
  17. package/dist/cjs/cloudflare-builder.js +307 -89
  18. package/dist/cjs/cloudflare-output-contract.js +36 -4
  19. package/dist/cjs/cloudflare-output-verifier/identity.js +112 -23
  20. package/dist/cjs/cloudflare-output-verifier/index.js +10 -0
  21. package/dist/cjs/cloudflare-output-verifier/manifest.js +46 -0
  22. package/dist/cjs/cloudflare-output-verifier/mutation-policy.js +7 -1
  23. package/dist/cjs/cloudflare-output-verifier/worker-bundles.js +10 -5
  24. package/dist/cjs/config.js +10 -5
  25. package/dist/cjs/deploy-output/npmAliases.js +92 -6
  26. package/dist/cjs/deploy-output/plugin.js +27 -6
  27. package/dist/cjs/deploy-output/public-assets.js +146 -0
  28. package/dist/cjs/deploy-output/target.js +57 -1
  29. package/dist/cjs/deploy-output/trace-files.js +99 -0
  30. package/dist/cjs/module-federation-config/exposes.js +70 -0
  31. package/dist/cjs/module-federation-config/index.js +73 -0
  32. package/dist/cjs/module-federation-config/inspect.js +103 -0
  33. package/dist/cjs/module-federation-config/object-literal.js +87 -0
  34. package/dist/cjs/module-federation-config/syntax.js +151 -0
  35. package/dist/cjs/module-federation-config/types.js +18 -0
  36. package/dist/cjs/native-type-checker.js +180 -17
  37. package/dist/cjs/policy-defaults.js +38 -29
  38. package/dist/cjs/release-envelope/canonical.js +2 -9
  39. package/dist/cjs/release-envelope/contract.js +68 -0
  40. package/dist/cjs/release-envelope/framework-output.js +296 -105
  41. package/dist/cjs/release-envelope/index.js +150 -36
  42. package/dist/cjs/release-envelope/plugin.js +24 -15
  43. package/dist/cjs/release-envelope/renderer-output-stamp.js +170 -0
  44. package/dist/cjs/release-envelope/types.js +10 -8
  45. package/dist/cjs/release-identity.js +9 -6
  46. package/dist/cjs/renderer-build-identity.js +144 -0
  47. package/dist/cjs/templates/cloudflare-entry.001-bootstrap-security.mjs +14 -6
  48. package/dist/cjs/templates/cloudflare-entry.002-assets-routes.mjs +10 -2
  49. package/dist/cjs/templates/cloudflare-entry.004-rendering-css.mjs +403 -96
  50. package/dist/cjs/templates/cloudflare-entry.005-worker-dispatch.mjs +547 -103
  51. package/dist/cjs/templates/cloudflare-entry.006-fetch-handler.mjs +26 -7
  52. package/dist/cjs/templates/cloudflare-worker-route-data.mjs +1069 -0
  53. package/dist/cjs/workspace-topology.js +84 -0
  54. package/dist/esm/backend-federation-build/codegen.mjs +29 -18
  55. package/dist/esm/backend-federation-build/config.mjs +74 -38
  56. package/dist/esm/backend-federation-build/emit.mjs +64 -23
  57. package/dist/esm/build-config/build-environment.mjs +31 -163
  58. package/dist/esm/build-config/internal-effect-discovery.mjs +187 -0
  59. package/dist/esm/build-config/public.mjs +1 -1
  60. package/dist/esm/build-config/remote-address.mjs +20 -0
  61. package/dist/esm/cloudflare/artifacts.mjs +8 -19
  62. package/dist/esm/cloudflare/delivery-unit.mjs +124 -45
  63. package/dist/esm/cloudflare/index.mjs +15 -5
  64. package/dist/esm/cloudflare/native-renderer.mjs +48 -0
  65. package/dist/esm/cloudflare/renderer-identity.mjs +57 -0
  66. package/dist/esm/cloudflare/worker-manifest.mjs +55 -14
  67. package/dist/esm/cloudflare/worker-options.mjs +10 -0
  68. package/dist/esm/cloudflare/wrangler-config.mjs +203 -12
  69. package/dist/esm/cloudflare-builder.mjs +301 -89
  70. package/dist/esm/cloudflare-output-contract.mjs +29 -3
  71. package/dist/esm/cloudflare-output-verifier/identity.mjs +113 -24
  72. package/dist/esm/cloudflare-output-verifier/index.mjs +10 -0
  73. package/dist/esm/cloudflare-output-verifier/manifest.mjs +46 -0
  74. package/dist/esm/cloudflare-output-verifier/mutation-policy.mjs +7 -1
  75. package/dist/esm/cloudflare-output-verifier/worker-bundles.mjs +11 -6
  76. package/dist/esm/config.mjs +3 -1
  77. package/dist/esm/deploy-output/npmAliases.mjs +92 -6
  78. package/dist/esm/deploy-output/plugin.mjs +24 -6
  79. package/dist/esm/deploy-output/public-assets.mjs +82 -0
  80. package/dist/esm/deploy-output/target.mjs +50 -3
  81. package/dist/esm/deploy-output/trace-files.mjs +47 -0
  82. package/dist/esm/module-federation-config/exposes.mjs +18 -0
  83. package/dist/esm/module-federation-config/index.mjs +4 -0
  84. package/dist/esm/module-federation-config/inspect.mjs +65 -0
  85. package/dist/esm/module-federation-config/object-literal.mjs +43 -0
  86. package/dist/esm/module-federation-config/syntax.mjs +101 -0
  87. package/dist/esm/module-federation-config/types.mjs +0 -0
  88. package/dist/esm/native-type-checker.mjs +175 -18
  89. package/dist/esm/policy-defaults.mjs +36 -30
  90. package/dist/esm/release-envelope/canonical.mjs +2 -9
  91. package/dist/esm/release-envelope/contract.mjs +21 -0
  92. package/dist/esm/release-envelope/framework-output.mjs +297 -106
  93. package/dist/esm/release-envelope/index.mjs +149 -38
  94. package/dist/esm/release-envelope/plugin.mjs +24 -15
  95. package/dist/esm/release-envelope/renderer-output-stamp.mjs +112 -0
  96. package/dist/esm/release-envelope/types.mjs +2 -3
  97. package/dist/esm/release-identity.mjs +9 -6
  98. package/dist/esm/renderer-build-identity.mjs +92 -0
  99. package/dist/esm/templates/cloudflare-entry.001-bootstrap-security.mjs +14 -6
  100. package/dist/esm/templates/cloudflare-entry.002-assets-routes.mjs +10 -2
  101. package/dist/esm/templates/cloudflare-entry.004-rendering-css.mjs +403 -96
  102. package/dist/esm/templates/cloudflare-entry.005-worker-dispatch.mjs +547 -103
  103. package/dist/esm/templates/cloudflare-entry.006-fetch-handler.mjs +26 -7
  104. package/dist/esm/templates/cloudflare-worker-route-data.mjs +1069 -0
  105. package/dist/esm/workspace-topology.mjs +21 -0
  106. package/dist/esm-node/backend-federation-build/codegen.mjs +29 -18
  107. package/dist/esm-node/backend-federation-build/config.mjs +74 -38
  108. package/dist/esm-node/backend-federation-build/emit.mjs +64 -23
  109. package/dist/esm-node/build-config/build-environment.mjs +31 -163
  110. package/dist/esm-node/build-config/internal-effect-discovery.mjs +188 -0
  111. package/dist/esm-node/build-config/public.mjs +1 -1
  112. package/dist/esm-node/build-config/remote-address.mjs +21 -0
  113. package/dist/esm-node/cloudflare/artifacts.mjs +8 -19
  114. package/dist/esm-node/cloudflare/delivery-unit.mjs +124 -45
  115. package/dist/esm-node/cloudflare/index.mjs +15 -5
  116. package/dist/esm-node/cloudflare/native-renderer.mjs +49 -0
  117. package/dist/esm-node/cloudflare/renderer-identity.mjs +58 -0
  118. package/dist/esm-node/cloudflare/worker-manifest.mjs +55 -14
  119. package/dist/esm-node/cloudflare/worker-options.mjs +11 -0
  120. package/dist/esm-node/cloudflare/wrangler-config.mjs +203 -12
  121. package/dist/esm-node/cloudflare-builder.mjs +301 -89
  122. package/dist/esm-node/cloudflare-output-contract.mjs +29 -3
  123. package/dist/esm-node/cloudflare-output-verifier/identity.mjs +113 -24
  124. package/dist/esm-node/cloudflare-output-verifier/index.mjs +10 -0
  125. package/dist/esm-node/cloudflare-output-verifier/manifest.mjs +46 -0
  126. package/dist/esm-node/cloudflare-output-verifier/mutation-policy.mjs +7 -1
  127. package/dist/esm-node/cloudflare-output-verifier/worker-bundles.mjs +11 -6
  128. package/dist/esm-node/config.mjs +3 -1
  129. package/dist/esm-node/deploy-output/npmAliases.mjs +92 -6
  130. package/dist/esm-node/deploy-output/plugin.mjs +24 -6
  131. package/dist/esm-node/deploy-output/public-assets.mjs +83 -0
  132. package/dist/esm-node/deploy-output/target.mjs +50 -3
  133. package/dist/esm-node/deploy-output/trace-files.mjs +48 -0
  134. package/dist/esm-node/module-federation-config/exposes.mjs +19 -0
  135. package/dist/esm-node/module-federation-config/index.mjs +5 -0
  136. package/dist/esm-node/module-federation-config/inspect.mjs +66 -0
  137. package/dist/esm-node/module-federation-config/object-literal.mjs +44 -0
  138. package/dist/esm-node/module-federation-config/syntax.mjs +102 -0
  139. package/dist/esm-node/module-federation-config/types.mjs +1 -0
  140. package/dist/esm-node/native-type-checker.mjs +175 -18
  141. package/dist/esm-node/policy-defaults.mjs +36 -30
  142. package/dist/esm-node/release-envelope/canonical.mjs +2 -9
  143. package/dist/esm-node/release-envelope/contract.mjs +22 -0
  144. package/dist/esm-node/release-envelope/framework-output.mjs +297 -106
  145. package/dist/esm-node/release-envelope/index.mjs +149 -38
  146. package/dist/esm-node/release-envelope/plugin.mjs +24 -15
  147. package/dist/esm-node/release-envelope/renderer-output-stamp.mjs +113 -0
  148. package/dist/esm-node/release-envelope/types.mjs +2 -3
  149. package/dist/esm-node/release-identity.mjs +9 -6
  150. package/dist/esm-node/renderer-build-identity.mjs +93 -0
  151. package/dist/esm-node/templates/cloudflare-entry.001-bootstrap-security.mjs +14 -6
  152. package/dist/esm-node/templates/cloudflare-entry.002-assets-routes.mjs +10 -2
  153. package/dist/esm-node/templates/cloudflare-entry.004-rendering-css.mjs +403 -96
  154. package/dist/esm-node/templates/cloudflare-entry.005-worker-dispatch.mjs +547 -103
  155. package/dist/esm-node/templates/cloudflare-entry.006-fetch-handler.mjs +26 -7
  156. package/dist/esm-node/templates/cloudflare-worker-route-data.mjs +1069 -0
  157. package/dist/esm-node/workspace-topology.mjs +22 -0
  158. package/dist/types/backend-federation-build/codegen.d.ts +30 -0
  159. package/dist/types/backend-federation-build/config.d.ts +10 -57
  160. package/dist/types/backend-federation-build/emit.d.ts +12 -2
  161. package/dist/types/backend-federation-build/index.d.ts +1 -1
  162. package/dist/types/build-config/build-environment.d.ts +4 -10
  163. package/dist/types/build-config/internal-effect-discovery.d.ts +6 -0
  164. package/dist/types/build-config/public.d.ts +1 -1
  165. package/dist/types/build-config/remote-address.d.ts +3 -0
  166. package/dist/types/cloudflare/artifacts.d.ts +7 -6
  167. package/dist/types/cloudflare/constants.d.ts +1 -1
  168. package/dist/types/cloudflare/delivery-unit.d.ts +38 -7
  169. package/dist/types/cloudflare/native-renderer.d.ts +30 -0
  170. package/dist/types/cloudflare/renderer-identity.d.ts +25 -0
  171. package/dist/types/cloudflare/worker-manifest.d.ts +20 -4
  172. package/dist/types/cloudflare/worker-options.d.ts +20 -0
  173. package/dist/types/cloudflare/wrangler-config.d.ts +55 -2
  174. package/dist/types/cloudflare-builder.d.ts +51 -8
  175. package/dist/types/cloudflare-output-contract.d.ts +5 -3
  176. package/dist/types/cloudflare-output-verifier/identity.d.ts +7 -3
  177. package/dist/types/cloudflare-output-verifier/worker-bundles.d.ts +2 -2
  178. package/dist/types/config.d.ts +102 -13
  179. package/dist/types/deploy-output/plugin.d.ts +29 -9
  180. package/dist/types/deploy-output/public-assets.d.ts +51 -0
  181. package/dist/types/deploy-output/target.d.ts +28 -5
  182. package/dist/types/deploy-output/trace-files.d.ts +17 -0
  183. package/dist/types/module-federation-config/exposes.d.ts +11 -0
  184. package/dist/types/module-federation-config/index.d.ts +5 -0
  185. package/dist/types/module-federation-config/inspect.d.ts +2 -0
  186. package/dist/types/module-federation-config/object-literal.d.ts +4 -0
  187. package/dist/types/module-federation-config/syntax.d.ts +7 -0
  188. package/dist/types/module-federation-config/types.d.ts +20 -0
  189. package/dist/types/native-type-checker.d.ts +28 -3
  190. package/dist/types/policy-defaults.d.ts +12 -2
  191. package/dist/types/release-envelope/canonical.d.ts +5 -5
  192. package/dist/types/release-envelope/contract.d.mts +8 -0
  193. package/dist/types/release-envelope/framework-output.d.ts +23 -13
  194. package/dist/types/release-envelope/index.d.ts +17 -5
  195. package/dist/types/release-envelope/plugin.d.ts +10 -6
  196. package/dist/types/release-envelope/renderer-output-stamp.d.ts +34 -0
  197. package/dist/types/release-envelope/types.d.ts +42 -4
  198. package/dist/types/release-identity.d.ts +13 -2
  199. package/dist/types/renderer-build-identity.d.ts +41 -0
  200. package/dist/types/templates/cloudflare-worker-route-data.d.mts +14 -0
  201. package/dist/types/workspace-topology.d.ts +91 -0
  202. package/package.json +87 -27
  203. package/src/backend-federation-build/codegen.ts +28 -19
  204. package/src/backend-federation-build/config.ts +189 -123
  205. package/src/backend-federation-build/emit.ts +119 -38
  206. package/src/backend-federation-build/index.ts +4 -1
  207. package/src/build-config/build-environment.ts +69 -293
  208. package/src/build-config/internal-effect-discovery.ts +458 -0
  209. package/src/build-config/public.ts +0 -1
  210. package/src/build-config/remote-address.ts +33 -0
  211. package/src/cloudflare/artifacts.ts +22 -43
  212. package/src/cloudflare/delivery-unit.ts +283 -60
  213. package/src/cloudflare/index.ts +35 -19
  214. package/src/cloudflare/native-renderer.ts +117 -0
  215. package/src/cloudflare/renderer-identity.ts +171 -0
  216. package/src/cloudflare/worker-manifest.ts +115 -13
  217. package/src/cloudflare/worker-options.ts +60 -0
  218. package/src/cloudflare/wrangler-config.ts +390 -14
  219. package/src/cloudflare-builder.ts +543 -170
  220. package/src/cloudflare-output-contract.ts +45 -2
  221. package/src/cloudflare-output-verifier/identity.ts +138 -7
  222. package/src/cloudflare-output-verifier/index.ts +20 -0
  223. package/src/cloudflare-output-verifier/manifest.ts +77 -0
  224. package/src/cloudflare-output-verifier/mutation-policy.ts +11 -1
  225. package/src/cloudflare-output-verifier/worker-bundles.ts +27 -11
  226. package/src/config.ts +105 -19
  227. package/src/deploy-output/npmAliases.ts +141 -4
  228. package/src/deploy-output/plugin.ts +55 -18
  229. package/src/deploy-output/public-assets.ts +224 -0
  230. package/src/deploy-output/target.ts +97 -14
  231. package/src/deploy-output/trace-files.ts +80 -0
  232. package/src/module-federation-config/exposes.ts +46 -0
  233. package/src/module-federation-config/index.ts +22 -0
  234. package/src/module-federation-config/inspect.ts +157 -0
  235. package/src/module-federation-config/object-literal.ts +76 -0
  236. package/src/module-federation-config/syntax.ts +212 -0
  237. package/src/module-federation-config/types.ts +22 -0
  238. package/src/native-type-checker.ts +284 -27
  239. package/src/policy-defaults.ts +47 -17
  240. package/src/release-envelope/canonical.ts +6 -18
  241. package/src/release-envelope/contract.mjs +28 -0
  242. package/src/release-envelope/framework-output.ts +681 -156
  243. package/src/release-envelope/index.ts +315 -60
  244. package/src/release-envelope/plugin.ts +54 -38
  245. package/src/release-envelope/renderer-output-stamp.ts +210 -0
  246. package/src/release-envelope/types.ts +75 -6
  247. package/src/release-identity.ts +30 -4
  248. package/src/renderer-build-identity.ts +208 -0
  249. package/src/templates/cloudflare-entry.001-bootstrap-security.mjs +14 -6
  250. package/src/templates/cloudflare-entry.002-assets-routes.mjs +10 -2
  251. package/src/templates/cloudflare-entry.004-rendering-css.mjs +403 -96
  252. package/src/templates/cloudflare-entry.005-worker-dispatch.mjs +547 -103
  253. package/src/templates/cloudflare-entry.006-fetch-handler.mjs +26 -7
  254. package/src/templates/cloudflare-worker-route-data.mjs +1069 -0
  255. package/src/workspace-topology.ts +125 -0
  256. package/dist/cjs/templates/cloudflare-worker-fs-promises.mjs +0 -11
  257. package/dist/cjs/templates/cloudflare-worker-loadable-server.mjs +0 -281
  258. package/dist/cjs/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +0 -14
  259. package/dist/cjs/templates/cloudflare-worker-path.mjs +0 -98
  260. package/dist/esm/templates/cloudflare-worker-fs-promises.mjs +0 -11
  261. package/dist/esm/templates/cloudflare-worker-loadable-server.mjs +0 -281
  262. package/dist/esm/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +0 -14
  263. package/dist/esm/templates/cloudflare-worker-path.mjs +0 -98
  264. package/dist/esm-node/templates/cloudflare-worker-fs-promises.mjs +0 -11
  265. package/dist/esm-node/templates/cloudflare-worker-loadable-server.mjs +0 -281
  266. package/dist/esm-node/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +0 -14
  267. package/dist/esm-node/templates/cloudflare-worker-path.mjs +0 -98
  268. package/dist/types/templates/cloudflare-worker-fs-promises.d.mts +0 -5
  269. package/dist/types/templates/cloudflare-worker-loadable-server.d.mts +0 -48
  270. package/dist/types/templates/cloudflare-worker-mf-ssr-runtime-plugin.d.mts +0 -13
  271. package/dist/types/templates/cloudflare-worker-path.d.mts +0 -21
  272. package/src/templates/cloudflare-worker-fs-promises.mjs +0 -11
  273. package/src/templates/cloudflare-worker-loadable-server.mjs +0 -281
  274. package/src/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +0 -14
  275. package/src/templates/cloudflare-worker-path.mjs +0 -98
@@ -0,0 +1,34 @@
1
+ import { type UltramodernBuildArtifact, type UltramodernBuildUiSurface } from '@modern-js/backend-federation-contracts';
2
+ export type RendererBuildOutputContext = {
3
+ appDirectory: string;
4
+ distDirectory: string;
5
+ entrypoints: readonly {
6
+ entryName: string;
7
+ isMainEntry?: boolean;
8
+ }[];
9
+ };
10
+ export type FinalizedRendererBuildOutput = {
11
+ buildMarker: string;
12
+ sourceRevision: string;
13
+ ui: Pick<UltramodernBuildUiSurface, 'rendererIdentity' | 'rendererProfile' | 'routerBindings'>;
14
+ };
15
+ export type RendererBuildOutputOptions = {
16
+ resolveRendererBuild: (context: RendererBuildOutputContext) => Promise<FinalizedRendererBuildOutput>;
17
+ /** Exact metadata producer selected by the owning renderer composition. */
18
+ rendererBuildPlugin: string;
19
+ };
20
+ export declare const validateFinalizedRendererBuild: (output: FinalizedRendererBuildOutput, context: RendererBuildOutputContext, appId: string) => void;
21
+ export declare const stampFinalizedRendererBuildArtifact: (artifact: UltramodernBuildArtifact, output: FinalizedRendererBuildOutput, context: RendererBuildOutputContext) => UltramodernBuildArtifact;
22
+ export declare function emitRendererBuildArtifact(context: RendererBuildOutputContext, options: RendererBuildOutputOptions): Promise<UltramodernBuildArtifact | undefined>;
23
+ /** Stamp generated UI carriers after their actual compiler manifest is committed. */
24
+ export declare function rendererBuildArtifactStampPlugin(options: RendererBuildOutputOptions): {
25
+ name: string;
26
+ pre: string[];
27
+ required: string[];
28
+ setup(api: {
29
+ getAppContext(): RendererBuildOutputContext & {
30
+ apiOnly?: boolean;
31
+ };
32
+ onAfterBuild(handler: () => Promise<void>): void;
33
+ }): void;
34
+ };
@@ -1,5 +1,7 @@
1
- export declare const MICROVERTICAL_RELEASE_ENVELOPE_SCHEMA_VERSION: 3;
2
- export declare const MICROVERTICAL_RELEASE_ENVELOPE_KIND: 'ultramodern-target-microvertical-release-envelope';
1
+ import type { RendererIdentity, RendererProfile, RendererRouterBindings } from '@modern-js/backend-federation-contracts';
2
+ import { MICROVERTICAL_RELEASE_ENVELOPE_KIND, MICROVERTICAL_RELEASE_ENVELOPE_SCHEMA_VERSION, SHELL_RELEASE_ENVELOPE_KIND } from './contract.mjs';
3
+ export { MICROVERTICAL_RELEASE_ENVELOPE_KIND, MICROVERTICAL_RELEASE_ENVELOPE_SCHEMA_VERSION, SHELL_RELEASE_ENVELOPE_KIND, };
4
+ export type ReleaseEnvelopeKind = typeof MICROVERTICAL_RELEASE_ENVELOPE_KIND | typeof SHELL_RELEASE_ENVELOPE_KIND;
3
5
  export declare const MICROVERTICAL_RELEASE_TARGETS: readonly ['node', 'cloudflare'];
4
6
  export type MicroVerticalReleaseTarget = (typeof MICROVERTICAL_RELEASE_TARGETS)[number];
5
7
  export type MicroVerticalReleaseIdentity = {
@@ -32,31 +34,67 @@ export type MicroVerticalReleaseSurfaces = {
32
34
  uiClient: string[];
33
35
  ssr: string[];
34
36
  apiBackend: string[];
35
- backendFederation: {
37
+ backendFederation?: {
36
38
  manifest: string;
37
39
  container: string;
38
40
  };
39
41
  };
42
+ export type MicroVerticalReleaseUi = {
43
+ rendererIdentity: RendererIdentity;
44
+ rendererProfile: RendererProfile;
45
+ routerBindings: RendererRouterBindings;
46
+ };
47
+ /** A Shell consumes remotes; it never publishes a backend federation pair. */
48
+ export type ShellReleaseSurfaces = {
49
+ uiClient: string[];
50
+ ssr: string[];
51
+ apiBackend: string[];
52
+ };
53
+ export type ReleaseSurfaces = MicroVerticalReleaseSurfaces | ShellReleaseSurfaces;
40
54
  export type MicroVerticalReleaseEnvelopePayload = {
41
55
  schemaVersion: typeof MICROVERTICAL_RELEASE_ENVELOPE_SCHEMA_VERSION;
42
56
  kind: typeof MICROVERTICAL_RELEASE_ENVELOPE_KIND;
43
57
  target: MicroVerticalReleaseTarget;
44
58
  identity: MicroVerticalReleaseIdentity;
59
+ ui?: MicroVerticalReleaseUi;
45
60
  artifacts: MicroVerticalReleaseArtifact[];
46
61
  surfaces: MicroVerticalReleaseSurfaces;
47
62
  };
48
63
  export type MicroVerticalReleaseEnvelope = MicroVerticalReleaseEnvelopePayload & {
49
64
  envelopeDigest: string;
50
65
  };
66
+ export type ShellReleaseEnvelopePayload = {
67
+ schemaVersion: typeof MICROVERTICAL_RELEASE_ENVELOPE_SCHEMA_VERSION;
68
+ kind: typeof SHELL_RELEASE_ENVELOPE_KIND;
69
+ target: MicroVerticalReleaseTarget;
70
+ identity: MicroVerticalReleaseIdentity;
71
+ ui?: MicroVerticalReleaseUi;
72
+ artifacts: MicroVerticalReleaseArtifact[];
73
+ surfaces: ShellReleaseSurfaces;
74
+ };
75
+ export type ShellReleaseEnvelope = ShellReleaseEnvelopePayload & {
76
+ envelopeDigest: string;
77
+ };
78
+ export type ReleaseEnvelopePayload = MicroVerticalReleaseEnvelopePayload | ShellReleaseEnvelopePayload;
79
+ export type ReleaseEnvelope = MicroVerticalReleaseEnvelope | ShellReleaseEnvelope;
51
80
  export type CreateMicroVerticalReleaseEnvelopeInput = {
52
81
  artifactRoot: string;
53
82
  target: MicroVerticalReleaseTarget;
54
83
  identity: MicroVerticalReleaseIdentity;
84
+ ui?: MicroVerticalReleaseUi;
55
85
  artifacts: MicroVerticalReleaseArtifactInput[];
86
+ } & ({
87
+ kind?: typeof MICROVERTICAL_RELEASE_ENVELOPE_KIND;
56
88
  surfaces: MicroVerticalReleaseSurfaces;
57
- };
89
+ } | {
90
+ kind: typeof SHELL_RELEASE_ENVELOPE_KIND;
91
+ surfaces: ShellReleaseSurfaces;
92
+ });
58
93
  export type VerifyMicroVerticalReleaseEnvelopeOptions = {
59
94
  artifactRoot: string;
60
95
  logicalPathForArtifact?: (artifact: MicroVerticalReleaseArtifact) => string;
61
96
  expectedTarget?: MicroVerticalReleaseTarget;
97
+ expectedKind?: ReleaseEnvelopeKind;
98
+ expectedRendererIdentity?: RendererIdentity;
99
+ expectedRendererProfile?: RendererProfile;
62
100
  };
@@ -7,10 +7,21 @@ export declare const createUltramodernReleaseBuildMarker: ({ generationBuildMark
7
7
  sourceRevision: string;
8
8
  unitId: string;
9
9
  }) => string;
10
- export declare const resolveUltramodernSourceRevision: (workspaceRoot?: string, configuredSourceRevision?: string) => string;
11
- export declare const resolveUltramodernReleaseIdentity: ({ generationBuildMarker, sourceRevision: configuredSourceRevision, unitId, workspaceRoot, }: {
10
+ export declare const resolveUltramodernSourceRevision: (workspaceRoot?: string, configuredSourceRevision?: string, environment?: Readonly<NodeJS.ProcessEnv>) => string;
11
+ /**
12
+ * The one release identity of a delivery unit, resolvable before its build.
13
+ *
14
+ * For a clean source revision the build marker is a 64-hex digest of the unit
15
+ * id, its generation marker and the revision. API bundles carry it, and a UI
16
+ * unit's renderer adopts it as its `buildId`, so contracts, release plans and
17
+ * Worker names derived from it before the build match the built
18
+ * `ultramodern-build.json`, `renderer-build.json`, chunk banners and envelope.
19
+ * A dirty or non-Git checkout yields the non-promotable `workspace` identity.
20
+ */
21
+ export declare const resolveUltramodernReleaseIdentity: ({ generationBuildMarker, sourceRevision: configuredSourceRevision, unitId, workspaceRoot, environment, }: {
12
22
  generationBuildMarker: string;
13
23
  sourceRevision?: string;
14
24
  unitId: string;
15
25
  workspaceRoot?: string;
26
+ environment?: Readonly<NodeJS.ProcessEnv>;
16
27
  }) => UltramodernReleaseIdentity;
@@ -0,0 +1,41 @@
1
+ import { type RendererIdentity, type RendererName, type RendererProfile, type RendererRouterBindings, type RouterFramework } from '@modern-js/backend-federation-contracts';
2
+ export type RendererProfileKeyInput = RendererProfile & {
3
+ readonly dependencies?: Readonly<Record<string, string>>;
4
+ };
5
+ export interface RendererBuildIdentityOptions {
6
+ projectRoot: string;
7
+ renderer: RendererName;
8
+ profile: RendererProfileKeyInput;
9
+ entryNames: readonly string[];
10
+ mode: 'development' | 'production';
11
+ /** Delivery-unit app id; defaults to the application package name. */
12
+ appId?: string;
13
+ /**
14
+ * The declared delivery unit's release identity, resolved before the build
15
+ * by `resolveUltramodernReleaseIdentity`. A promotable production build
16
+ * adopts its buildMarker as the buildId, so consumers that resolve the unit
17
+ * identity before compiling see the marker the built artifacts carry.
18
+ */
19
+ deliveryUnit?: {
20
+ readonly unitId: string;
21
+ readonly buildMarker: string;
22
+ readonly sourceRevision: string;
23
+ };
24
+ /** Externally authenticated source revision (CI) for an undeclared app. */
25
+ sourceRevision?: string;
26
+ /** Actual final entry ownership, supplied by the selected renderer composition. */
27
+ routerBindings: RendererRouterBindings;
28
+ /** Admitted router frameworks, supplied by the selected renderer owner. */
29
+ routerFrameworks?: readonly RouterFramework[];
30
+ }
31
+ export interface RendererBuildIdentities {
32
+ readonly identities: Readonly<Record<string, RendererIdentity>>;
33
+ readonly buildId: string;
34
+ readonly profileKey: string;
35
+ readonly sourceRevision: string;
36
+ readonly routerBindings: RendererRouterBindings;
37
+ }
38
+ /** Renderer, protocol and installed renderer/framework/compiler versions. */
39
+ export declare function rendererProfileKey(profile: RendererProfileKeyInput): string;
40
+ /** Resolve once per build before emitting entries; never rehashes sources. */
41
+ export declare function resolveRendererBuildIdentities(options: RendererBuildIdentityOptions): RendererBuildIdentities;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Create the worker route data request handler for an entry's route loaders
3
+ * (the `routes` export of its generated `route-server-loaders.js`).
4
+ *
5
+ * The handler takes the Node data handler's options and resolves to
6
+ * `undefined` for requests that are not route data requests of a known entry,
7
+ * so the caller renders the page instead.
8
+ */
9
+ export declare function createRouteDataRequestHandler(routes: any): ({ request, serverRoutes, context, onTiming }: {
10
+ context?: {} | undefined;
11
+ onTiming: any;
12
+ request: any;
13
+ serverRoutes: any;
14
+ }) => Promise<any>;
@@ -0,0 +1,91 @@
1
+ import type { CloudflareWorkerSecurityConfig } from './config.js';
2
+ export declare const REFERENCE_TOPOLOGY_PATH = "topology/reference-topology.json";
3
+ export declare const DEVELOPMENT_OVERLAY_PATH = "topology/local-overlays/development.json";
4
+ /** Fields consumed from the existing workspace topology by native plugins. */
5
+ export type TopologyApp = {
6
+ id?: unknown;
7
+ domain?: unknown;
8
+ kind?: unknown;
9
+ path?: unknown;
10
+ package?: unknown;
11
+ portEnv?: unknown;
12
+ surfaceProfile?: unknown;
13
+ verticalRefs?: unknown;
14
+ cloudflare?: {
15
+ workerName?: unknown;
16
+ publicUrlEnv?: unknown;
17
+ compatibilityDate?: unknown;
18
+ security?: CloudflareWorkerSecurityConfig;
19
+ };
20
+ api?: {
21
+ bff?: {
22
+ prefix?: unknown;
23
+ };
24
+ protocol?: unknown;
25
+ rpcPath?: unknown;
26
+ rpcSerialization?: unknown;
27
+ stem?: unknown;
28
+ };
29
+ moduleFederation?: {
30
+ name?: unknown;
31
+ manifestUrl?: unknown;
32
+ exposes?: unknown;
33
+ verticalRefs?: unknown;
34
+ remotes?: unknown;
35
+ };
36
+ backendFederation?: {
37
+ name?: unknown;
38
+ versionBoundary?: {
39
+ ui?: {
40
+ manifestUrl?: unknown;
41
+ };
42
+ };
43
+ executionSurfaces?: {
44
+ node?: {
45
+ remoteName?: unknown;
46
+ manifestUrl?: unknown;
47
+ containerEntry?: unknown;
48
+ remoteType?: unknown;
49
+ };
50
+ cloudflare?: {
51
+ workerName?: unknown;
52
+ workerDispatch?: {
53
+ serviceBinding?: unknown;
54
+ serviceBindingEnv?: unknown;
55
+ dispatchWorkerNameEnv?: unknown;
56
+ };
57
+ };
58
+ };
59
+ };
60
+ deliveryUnit?: {
61
+ unitId?: unknown;
62
+ buildMarker?: unknown;
63
+ sourceRevision?: unknown;
64
+ packageName?: unknown;
65
+ version?: unknown;
66
+ };
67
+ };
68
+ export type DevelopmentOverlay = {
69
+ schemaVersion?: unknown;
70
+ ports?: Record<string, unknown>;
71
+ manifests?: Record<string, unknown>;
72
+ serverExecution?: Record<string, {
73
+ node?: {
74
+ remoteName?: unknown;
75
+ manifestUrl?: unknown;
76
+ containerEntry?: unknown;
77
+ remoteType?: unknown;
78
+ };
79
+ }>;
80
+ };
81
+ export type ReferenceTopology = {
82
+ schemaVersion?: unknown;
83
+ shell?: TopologyApp;
84
+ shells?: TopologyApp[];
85
+ verticals?: TopologyApp[];
86
+ };
87
+ export declare const normalizeRelativePath: (value: string) => string;
88
+ /** Shared by the generated route and the native Worker service binding. */
89
+ export declare const distributedSsrFragmentSlug: (expose: string) => string;
90
+ export declare const distributedSsrFragmentRoute: (expose: string) => string;
91
+ export declare const findWorkspaceRoot: (appDirectory: string) => string | undefined;
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@bleedingdev/modern-js-app-tools-extensions",
3
3
  "description": "Fork-owned UltraModern.js app-tools extensions for Cloudflare delivery and release envelopes.",
4
- "homepage": "https://github.com/BleedingDev/ultramodern.js#readme",
4
+ "homepage": "https://github.com/ultramodernjs/ultramodern.js#readme",
5
5
  "bugs": {
6
- "url": "https://github.com/BleedingDev/ultramodern.js/issues"
6
+ "url": "https://github.com/ultramodernjs/ultramodern.js/issues"
7
7
  },
8
8
  "repository": {
9
9
  "type": "git",
10
- "url": "git+https://github.com/BleedingDev/ultramodern.js.git",
10
+ "url": "git+https://github.com/ultramodernjs/ultramodern.js.git",
11
11
  "directory": "packages/solutions/app-tools-extensions"
12
12
  },
13
13
  "license": "MIT",
14
- "version": "3.9.0-ultramodern.9",
14
+ "version": "3.9.3-ultramodern.10",
15
15
  "files": [
16
16
  "dist",
17
17
  "src"
@@ -62,6 +62,11 @@
62
62
  "import": "./dist/esm-node/cloudflare-output-verifier/*.mjs",
63
63
  "require": "./dist/cjs/cloudflare-output-verifier/*.js"
64
64
  },
65
+ "./internal-effect-discovery": {
66
+ "types": "./dist/types/build-config/internal-effect-discovery.d.ts",
67
+ "import": "./dist/cjs/build-config/internal-effect-discovery.js",
68
+ "require": "./dist/cjs/build-config/internal-effect-discovery.js"
69
+ },
65
70
  "./config": {
66
71
  "types": "./dist/types/config.d.ts",
67
72
  "import": "./dist/esm-node/config.mjs",
@@ -77,6 +82,16 @@
77
82
  "import": "./dist/esm-node/release-envelope/*.mjs",
78
83
  "require": "./dist/cjs/release-envelope/*.js"
79
84
  },
85
+ "./release-envelope/contract": {
86
+ "types": "./dist/types/release-envelope/contract.d.mts",
87
+ "import": "./dist/esm-node/release-envelope/contract.mjs",
88
+ "require": "./dist/cjs/release-envelope/contract.js"
89
+ },
90
+ "./renderer-build-identity": {
91
+ "types": "./dist/types/renderer-build-identity.d.ts",
92
+ "import": "./dist/esm-node/renderer-build-identity.mjs",
93
+ "require": "./dist/cjs/renderer-build-identity.js"
94
+ },
80
95
  "./release-identity": {
81
96
  "types": "./dist/types/release-identity.d.ts",
82
97
  "import": "./dist/esm-node/release-identity.mjs",
@@ -116,6 +131,21 @@
116
131
  "types": "./dist/types/deploy-output/target.d.ts",
117
132
  "import": "./dist/esm-node/deploy-output/target.mjs",
118
133
  "require": "./dist/cjs/deploy-output/target.js"
134
+ },
135
+ "./deploy-output/trace-files": {
136
+ "types": "./dist/types/deploy-output/trace-files.d.ts",
137
+ "import": "./dist/esm-node/deploy-output/trace-files.mjs",
138
+ "require": "./dist/cjs/deploy-output/trace-files.js"
139
+ },
140
+ "./workspace-topology": {
141
+ "types": "./dist/types/workspace-topology.d.ts",
142
+ "import": "./dist/esm-node/workspace-topology.mjs",
143
+ "require": "./dist/cjs/workspace-topology.js"
144
+ },
145
+ "./module-federation-config": {
146
+ "types": "./dist/types/module-federation-config/index.d.ts",
147
+ "import": "./dist/esm-node/module-federation-config/index.mjs",
148
+ "require": "./dist/cjs/module-federation-config/index.js"
119
149
  }
120
150
  },
121
151
  "typesVersions": {
@@ -135,45 +165,72 @@
135
165
  ],
136
166
  "deploy-output/target": [
137
167
  "./dist/types/deploy-output/target.d.ts"
168
+ ],
169
+ "deploy-output/trace-files": [
170
+ "./dist/types/deploy-output/trace-files.d.ts"
138
171
  ]
139
172
  }
140
173
  },
141
174
  "engines": {
142
- "node": ">=26.7.0"
175
+ "node": ">=26.12.0"
143
176
  },
144
177
  "dependencies": {
145
- "@babel/parser": "^8.0.4",
146
- "@babel/traverse": "^8.0.4",
147
- "@loadable/component": "5.16.7",
148
- "@modern-js/backend-federation-contracts": "npm:@bleedingdev/modern-js-backend-federation-contracts@3.9.0-ultramodern.9",
149
- "@modern-js/builder": "npm:@bleedingdev/modern-js-builder@3.9.0-ultramodern.9",
150
- "@modern-js/prod-server": "npm:@bleedingdev/modern-js-prod-server@3.9.0-ultramodern.9",
151
- "@modern-js/runtime-renderer-extensions": "npm:@bleedingdev/modern-js-runtime-renderer-extensions@3.9.0-ultramodern.9",
152
- "@modern-js/server-core": "npm:@bleedingdev/modern-js-server-core@3.9.0-ultramodern.9",
153
- "@modern-js/server-runtime-extensions": "npm:@bleedingdev/modern-js-server-runtime-extensions@3.9.0-ultramodern.9",
154
- "@modern-js/types": "npm:@bleedingdev/modern-js-types@3.9.0-ultramodern.9",
155
- "@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.9.0-ultramodern.9",
178
+ "@babel/parser": "^8.0.7",
179
+ "@babel/traverse": "^8.0.7",
180
+ "@modern-js/backend-federation-contracts": "npm:@bleedingdev/modern-js-backend-federation-contracts@3.9.3-ultramodern.10",
181
+ "@modern-js/builder": "npm:@bleedingdev/modern-js-builder@3.9.3-ultramodern.10",
182
+ "@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.9.3-ultramodern.10",
183
+ "@modern-js/prod-server": "npm:@bleedingdev/modern-js-prod-server@3.9.3-ultramodern.10",
184
+ "@modern-js/runtime-utils": "npm:@bleedingdev/modern-js-runtime-utils@3.9.3-ultramodern.10",
185
+ "@modern-js/server-core": "npm:@bleedingdev/modern-js-server-core@3.9.3-ultramodern.10",
186
+ "@modern-js/server-runtime-extensions": "npm:@bleedingdev/modern-js-server-runtime-extensions@3.9.3-ultramodern.10",
187
+ "@modern-js/surface-resolution": "npm:@bleedingdev/modern-js-surface-resolution@3.9.3-ultramodern.10",
188
+ "@modern-js/types": "npm:@bleedingdev/modern-js-types@3.9.3-ultramodern.10",
189
+ "@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.9.3-ultramodern.10",
156
190
  "@swc/helpers": "^0.5.23",
191
+ "@vercel/nft": "^1.11.0",
157
192
  "compression-webpack-plugin": "^12.0.0",
158
193
  "esbuild": "^0.28.2",
159
- "std-env": "4.2.0"
194
+ "jsonc-parser": "3.3.1",
195
+ "std-env": "4.3.0"
160
196
  },
161
197
  "peerDependencies": {
162
- "@rsbuild/core": "2.2.3"
198
+ "@loadable/component": "5.16.7",
199
+ "@modern-js/runtime-renderer-extensions": "3.9.3-ultramodern.10",
200
+ "@rsbuild/core": "2.2.13",
201
+ "react": "^19.3.1"
202
+ },
203
+ "peerDependenciesMeta": {
204
+ "@loadable/component": {
205
+ "optional": true
206
+ },
207
+ "@modern-js/runtime-renderer-extensions": {
208
+ "optional": true
209
+ },
210
+ "react": {
211
+ "optional": true
212
+ }
163
213
  },
164
214
  "devDependencies": {
165
- "@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.9.0-ultramodern.9",
166
- "@modern-js/plugin-bff-extensions": "npm:@bleedingdev/modern-js-plugin-bff-extensions@3.9.0-ultramodern.9",
167
- "@module-federation/runtime-tools": "2.9.0",
168
- "@rsbuild/core": "2.2.3",
169
- "@rslib/core": "1.0.0",
215
+ "@loadable/component": "5.16.7",
216
+ "@modern-js/bff-effect": "npm:@bleedingdev/modern-js-bff-effect@3.9.3-ultramodern.10",
217
+ "@modern-js/plugin-bff-extensions": "npm:@bleedingdev/modern-js-plugin-bff-extensions@3.9.3-ultramodern.10",
218
+ "@modern-js/plugin-data-loader": "npm:@bleedingdev/modern-js-plugin-data-loader@3.9.3-ultramodern.10",
219
+ "@modern-js/runtime-renderer-extensions": "npm:@bleedingdev/modern-js-runtime-renderer-extensions@3.9.3-ultramodern.10",
220
+ "@module-federation/modern-js-v3": "2.9.2",
221
+ "@module-federation/runtime-tools": "2.9.2",
222
+ "@rsbuild/core": "2.2.13",
223
+ "@rslib/core": "1.0.3",
170
224
  "@scripts/rstest-config": "2.66.0",
171
225
  "@types/babel__traverse": "7.28.0",
172
- "@types/node": "^26.4.1",
173
- "@typescript/native-preview": "7.0.0-dev.20260707.2",
226
+ "@types/node": "^26.6.5",
174
227
  "core-js": "^3.50.0",
175
- "effect": "4.0.0-rc.112",
176
- "ndepe": "^0.1.13"
228
+ "effect": "4.0.5",
229
+ "miniflare": "5.20261012.0-beta",
230
+ "ndepe": "^0.1.13",
231
+ "pg": "8.23.1",
232
+ "react": "^19.3.1",
233
+ "react-dom": "^19.3.1"
177
234
  },
178
235
  "sideEffects": false,
179
236
  "publishConfig": {
@@ -185,5 +242,8 @@
185
242
  "build": "rslib build && pnpm run verify:public-surface",
186
243
  "test": "rstest",
187
244
  "verify:public-surface": "node ./tests/build-config/verify-public-surface.mjs"
245
+ },
246
+ "ultramodern": {
247
+ "sourceName": "@modern-js/app-tools-extensions"
188
248
  }
189
249
  }
@@ -1,7 +1,6 @@
1
1
  import path from 'node:path';
2
2
  import {
3
3
  BACKEND_FEDERATION_EFFECT_EXPOSE as BACKEND_EXPOSE,
4
- BACKEND_FEDERATION_MANIFEST_FILE as BACKEND_MANIFEST_FILE,
5
4
  BACKEND_FEDERATION_REMOTE_ENTRY_FILE as BACKEND_REMOTE_ENTRY_FILE,
6
5
  BACKEND_FEDERATION_CONTRACT_VERSION as CONTRACT_VERSION,
7
6
  formatBackendFederationValidationErrors,
@@ -65,28 +64,34 @@ export const createBackendRemoteEntrySource = async (
65
64
  ...(app.sourceRevision ? { sourceRevision: app.sourceRevision } : {}),
66
65
  };
67
66
  const source = `// Generated by Modern.js backend federation build.
68
- import * as exposedNamespace from ${JSON.stringify(effectApiSpecifier)};
67
+ import { adoptEffectBffShareScope } from '@modern-js/bff-effect/effect-edge';
69
68
 
70
- const exposedModule = {
71
- ...exposedNamespace,
72
- backendFederationContract: {
73
- ...(exposedNamespace.backendFederationContract ?? {}),
74
- compatibility: {
75
- ...(exposedNamespace.backendFederationContract?.compatibility ?? {}),
76
- ...${JSON.stringify(compatibility)},
69
+ // The expose evaluates lazily so defineEffectBff registers its handler
70
+ // factories with the registry the host shares through init().
71
+ let exposedModule;
72
+ const loadExposedModule = () =>
73
+ (exposedModule ??= import(${JSON.stringify(effectApiSpecifier)}).then(exposedNamespace => ({
74
+ ...exposedNamespace,
75
+ backendFederationContract: {
76
+ ...(exposedNamespace.backendFederationContract ?? {}),
77
+ compatibility: {
78
+ ...(exposedNamespace.backendFederationContract?.compatibility ?? {}),
79
+ ...${JSON.stringify(compatibility)},
80
+ },
81
+ name: ${JSON.stringify(app.backendName)},
82
+ role: 'microvertical-server',
83
+ runtimeFramework: 'effect',
84
+ strictEffectApproach: true,
77
85
  },
78
- name: ${JSON.stringify(app.backendName)},
79
- role: 'microvertical-server',
80
- runtimeFramework: 'effect',
81
- strictEffectApproach: true,
82
- },
83
- };
86
+ })));
84
87
  const exposedModules = {
85
- ${JSON.stringify(BACKEND_EXPOSE)}: () => Promise.resolve(exposedModule),
88
+ ${JSON.stringify(BACKEND_EXPOSE)}: loadExposedModule,
86
89
  };
87
90
  const __modernjsBackendFederation = ${JSON.stringify(containerMetadata)};
88
91
 
89
- function init() {}
92
+ function init(shareScope) {
93
+ return adoptEffectBffShareScope(shareScope);
94
+ }
90
95
 
91
96
  function get(id) {
92
97
  const load = exposedModules[id];
@@ -204,8 +209,12 @@ export const createBackendManifest = (
204
209
  source: {
205
210
  module: sourceModule,
206
211
  },
207
- readinessPath: `${app.apiPrefix}/${app.apiStem}/readiness`,
208
- openapiPath: `${app.apiPrefix}/openapi.json`,
212
+ ...(app.apiProtocol === 'rpc'
213
+ ? { rpcPath: app.rpcPath, rpcSerialization: 'json' }
214
+ : {
215
+ readinessPath: `${app.apiPrefix}/${app.apiStem}/readiness`,
216
+ openapiPath: `${app.apiPrefix}/openapi.json`,
217
+ }),
209
218
  ...(app.deliveryUnit ? { deliveryUnit: app.deliveryUnit } : {}),
210
219
  versionBoundary: {
211
220
  invariant: 'web-and-api-same-build',