@bleedingdev/modern-js-app-tools-extensions 3.9.0-ultramodern.12 → 3.9.0-ultramodern.14

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 (93) hide show
  1. package/dist/cjs/backend-federation-build/codegen.js +7 -2
  2. package/dist/cjs/backend-federation-build/config.js +86 -36
  3. package/dist/cjs/backend-federation-build/emit.js +17 -13
  4. package/dist/cjs/cloudflare/delivery-unit.js +16 -26
  5. package/dist/cjs/cloudflare/index.js +7 -1
  6. package/dist/cjs/cloudflare/worker-manifest.js +13 -4
  7. package/dist/cjs/cloudflare/wrangler-config.js +35 -7
  8. package/dist/cjs/cloudflare-builder.js +247 -16
  9. package/dist/cjs/cloudflare-output-contract.js +32 -2
  10. package/dist/cjs/cloudflare-output-verifier/identity.js +26 -24
  11. package/dist/cjs/cloudflare-output-verifier/index.js +10 -0
  12. package/dist/cjs/cloudflare-output-verifier/manifest.js +46 -0
  13. package/dist/cjs/cloudflare-output-verifier/mutation-policy.js +7 -1
  14. package/dist/cjs/cloudflare-output-verifier/worker-bundles.js +10 -5
  15. package/dist/cjs/deploy-output/npmAliases.js +28 -3
  16. package/dist/cjs/release-envelope/framework-output.js +62 -49
  17. package/dist/cjs/release-envelope/index.js +10 -4
  18. package/dist/cjs/templates/cloudflare-entry.004-rendering-css.mjs +4 -0
  19. package/dist/cjs/templates/cloudflare-entry.005-worker-dispatch.mjs +46 -0
  20. package/dist/cjs/templates/cloudflare-entry.006-fetch-handler.mjs +9 -2
  21. package/dist/cjs/templates/cloudflare-worker-route-data.mjs +1069 -0
  22. package/dist/esm/backend-federation-build/codegen.mjs +7 -2
  23. package/dist/esm/backend-federation-build/config.mjs +78 -31
  24. package/dist/esm/backend-federation-build/emit.mjs +18 -14
  25. package/dist/esm/cloudflare/delivery-unit.mjs +16 -26
  26. package/dist/esm/cloudflare/index.mjs +7 -1
  27. package/dist/esm/cloudflare/worker-manifest.mjs +13 -4
  28. package/dist/esm/cloudflare/wrangler-config.mjs +35 -7
  29. package/dist/esm/cloudflare-builder.mjs +241 -19
  30. package/dist/esm/cloudflare-output-contract.mjs +25 -1
  31. package/dist/esm/cloudflare-output-verifier/identity.mjs +26 -24
  32. package/dist/esm/cloudflare-output-verifier/index.mjs +10 -0
  33. package/dist/esm/cloudflare-output-verifier/manifest.mjs +46 -0
  34. package/dist/esm/cloudflare-output-verifier/mutation-policy.mjs +7 -1
  35. package/dist/esm/cloudflare-output-verifier/worker-bundles.mjs +11 -6
  36. package/dist/esm/deploy-output/npmAliases.mjs +28 -3
  37. package/dist/esm/release-envelope/framework-output.mjs +62 -49
  38. package/dist/esm/release-envelope/index.mjs +10 -4
  39. package/dist/esm/templates/cloudflare-entry.004-rendering-css.mjs +4 -0
  40. package/dist/esm/templates/cloudflare-entry.005-worker-dispatch.mjs +46 -0
  41. package/dist/esm/templates/cloudflare-entry.006-fetch-handler.mjs +9 -2
  42. package/dist/esm/templates/cloudflare-worker-route-data.mjs +1069 -0
  43. package/dist/esm-node/backend-federation-build/codegen.mjs +7 -2
  44. package/dist/esm-node/backend-federation-build/config.mjs +78 -31
  45. package/dist/esm-node/backend-federation-build/emit.mjs +18 -14
  46. package/dist/esm-node/cloudflare/delivery-unit.mjs +16 -26
  47. package/dist/esm-node/cloudflare/index.mjs +7 -1
  48. package/dist/esm-node/cloudflare/worker-manifest.mjs +13 -4
  49. package/dist/esm-node/cloudflare/wrangler-config.mjs +35 -7
  50. package/dist/esm-node/cloudflare-builder.mjs +241 -19
  51. package/dist/esm-node/cloudflare-output-contract.mjs +25 -1
  52. package/dist/esm-node/cloudflare-output-verifier/identity.mjs +26 -24
  53. package/dist/esm-node/cloudflare-output-verifier/index.mjs +10 -0
  54. package/dist/esm-node/cloudflare-output-verifier/manifest.mjs +46 -0
  55. package/dist/esm-node/cloudflare-output-verifier/mutation-policy.mjs +7 -1
  56. package/dist/esm-node/cloudflare-output-verifier/worker-bundles.mjs +11 -6
  57. package/dist/esm-node/deploy-output/npmAliases.mjs +28 -3
  58. package/dist/esm-node/release-envelope/framework-output.mjs +62 -49
  59. package/dist/esm-node/release-envelope/index.mjs +10 -4
  60. package/dist/esm-node/templates/cloudflare-entry.004-rendering-css.mjs +4 -0
  61. package/dist/esm-node/templates/cloudflare-entry.005-worker-dispatch.mjs +46 -0
  62. package/dist/esm-node/templates/cloudflare-entry.006-fetch-handler.mjs +9 -2
  63. package/dist/esm-node/templates/cloudflare-worker-route-data.mjs +1069 -0
  64. package/dist/types/backend-federation-build/codegen.d.ts +30 -0
  65. package/dist/types/backend-federation-build/config.d.ts +32 -13
  66. package/dist/types/cloudflare/delivery-unit.d.ts +1 -1
  67. package/dist/types/cloudflare/wrangler-config.d.ts +6 -0
  68. package/dist/types/cloudflare-builder.d.ts +45 -1
  69. package/dist/types/cloudflare-output-contract.d.ts +3 -1
  70. package/dist/types/cloudflare-output-verifier/worker-bundles.d.ts +2 -2
  71. package/dist/types/templates/cloudflare-worker-route-data.d.mts +14 -0
  72. package/package.json +25 -21
  73. package/src/backend-federation-build/codegen.ts +6 -2
  74. package/src/backend-federation-build/config.ts +207 -71
  75. package/src/backend-federation-build/emit.ts +33 -22
  76. package/src/cloudflare/delivery-unit.ts +39 -33
  77. package/src/cloudflare/index.ts +20 -6
  78. package/src/cloudflare/worker-manifest.ts +19 -3
  79. package/src/cloudflare/wrangler-config.ts +86 -10
  80. package/src/cloudflare-builder.ts +464 -15
  81. package/src/cloudflare-output-contract.ts +35 -2
  82. package/src/cloudflare-output-verifier/identity.ts +4 -0
  83. package/src/cloudflare-output-verifier/index.ts +20 -0
  84. package/src/cloudflare-output-verifier/manifest.ts +77 -0
  85. package/src/cloudflare-output-verifier/mutation-policy.ts +11 -1
  86. package/src/cloudflare-output-verifier/worker-bundles.ts +27 -11
  87. package/src/deploy-output/npmAliases.ts +52 -3
  88. package/src/release-envelope/framework-output.ts +163 -90
  89. package/src/release-envelope/index.ts +26 -5
  90. package/src/templates/cloudflare-entry.004-rendering-css.mjs +4 -0
  91. package/src/templates/cloudflare-entry.005-worker-dispatch.mjs +46 -0
  92. package/src/templates/cloudflare-entry.006-fetch-handler.mjs +9 -2
  93. package/src/templates/cloudflare-worker-route-data.mjs +1069 -0
@@ -53,6 +53,36 @@ export declare const createBackendManifest: (workspaceRoot: string, distDirector
53
53
  }[];
54
54
  shared: never[];
55
55
  backendFederation: {
56
+ role: string;
57
+ appId: string;
58
+ name: string;
59
+ runtimeFramework: string;
60
+ strictEffectApproach: boolean;
61
+ contractVersion: string;
62
+ nodeAdapterVersion: string;
63
+ remoteType: string;
64
+ expose: string;
65
+ manifestUrl: string;
66
+ containerEntry: string;
67
+ source: {
68
+ module: string;
69
+ };
70
+ rpcPath: string | undefined;
71
+ rpcSerialization: string;
72
+ deliveryUnit?: import("@modern-js/backend-federation-contracts").DeliveryUnitContractBlock | undefined;
73
+ versionBoundary: {
74
+ invariant: string;
75
+ packageName: string | undefined;
76
+ version: string | undefined;
77
+ buildVersion: string | undefined;
78
+ uiManifestUrl?: string | undefined;
79
+ deliveryUnit?: {
80
+ unitId: string;
81
+ buildMarker: string;
82
+ sourceRevision: string;
83
+ } | undefined;
84
+ };
85
+ } | {
56
86
  role: string;
57
87
  appId: string;
58
88
  name: string;
@@ -1,13 +1,23 @@
1
1
  import { type DeliveryUnitContractBlock, type UltramodernBuildArtifact } from '@modern-js/backend-federation-contracts';
2
- export declare const COMPACT_CONFIG_PATH = ".modernjs/ultramodern.json";
3
- export type CompactApp = {
2
+ export declare const REFERENCE_TOPOLOGY_PATH = "topology/reference-topology.json";
3
+ export declare const DEVELOPMENT_OVERLAY_PATH = "topology/local-overlays/development.json";
4
+ export type TopologyApp = {
4
5
  id?: unknown;
6
+ domain?: unknown;
5
7
  kind?: unknown;
6
8
  path?: unknown;
7
9
  package?: unknown;
8
- port?: unknown;
10
+ portEnv?: unknown;
11
+ cloudflare?: {
12
+ publicUrlEnv?: unknown;
13
+ };
9
14
  api?: {
10
- prefix?: unknown;
15
+ bff?: {
16
+ prefix?: unknown;
17
+ };
18
+ protocol?: unknown;
19
+ rpcPath?: unknown;
20
+ rpcSerialization?: unknown;
11
21
  stem?: unknown;
12
22
  };
13
23
  moduleFederation?: {
@@ -37,19 +47,23 @@ export type CompactApp = {
37
47
  packageName?: unknown;
38
48
  version?: unknown;
39
49
  };
40
- serverExecution?: {
50
+ };
51
+ export type DevelopmentOverlay = {
52
+ ports?: Record<string, unknown>;
53
+ manifests?: Record<string, unknown>;
54
+ serverExecution?: Record<string, {
41
55
  node?: {
42
56
  remoteName?: unknown;
43
57
  manifestUrl?: unknown;
44
58
  containerEntry?: unknown;
45
59
  remoteType?: unknown;
46
60
  };
47
- };
61
+ }>;
48
62
  };
49
- export type CompactConfig = {
50
- topology?: {
51
- apps?: CompactApp[];
52
- };
63
+ export type ReferenceTopology = {
64
+ shell?: TopologyApp;
65
+ shells?: TopologyApp[];
66
+ verticals?: TopologyApp[];
53
67
  };
54
68
  export type BackendFederationApp = {
55
69
  id: string;
@@ -62,13 +76,15 @@ export type BackendFederationApp = {
62
76
  deliveryUnit?: DeliveryUnitContractBlock;
63
77
  port: number;
64
78
  apiPrefix: string;
79
+ apiProtocol: 'rest' | 'rpc';
80
+ rpcPath?: string;
65
81
  apiStem: string;
66
82
  backendName: string;
67
83
  manifestUrl: string;
68
84
  containerEntry: string;
69
85
  remoteType: string;
70
86
  uiManifestUrl?: string;
71
- compactDeliveryUnit?: {
87
+ topologyDeliveryUnit?: {
72
88
  unitId?: string;
73
89
  buildMarker?: string;
74
90
  sourceRevision?: string;
@@ -98,5 +114,8 @@ export declare const createStampedDeliveryUnit: (input: {
98
114
  version?: string;
99
115
  sourceRevision: string;
100
116
  }) => DeliveryUnitContractBlock | undefined;
101
- export declare const createAppFromCompactMetadata: (workspaceRoot: string, appDirectory: string, compactApp: CompactApp) => BackendFederationApp | undefined;
102
- export declare const findBackendFederationApp: (workspaceRoot: string, appDirectory: string) => Promise<BackendFederationApp | undefined>;
117
+ export declare const createAppFromTopology: (workspaceRoot: string, appDirectory: string, topologyApp: TopologyApp, overlay: DevelopmentOverlay, packageManifest: {
118
+ name?: unknown;
119
+ version?: unknown;
120
+ }) => BackendFederationApp | undefined;
121
+ export declare const findBackendFederationApp: (workspaceRoot: string, appDirectory: string) => Promise<BackendFederationApp>;
@@ -11,7 +11,7 @@ export type DeliveryUnitStamp = DeliveryUnitIdentity & {
11
11
  };
12
12
  /**
13
13
  * Resolve the delivery-unit record declared for this app by the workspace
14
- * compact config (`.modernjs/ultramodern.json`). This is the topology source
14
+ * reference topology. This is the topology source
15
15
  * of truth the Cloudflare worker snapshot is verified against.
16
16
  */
17
17
  export declare const resolveTopologyDeliveryUnit: (appDirectory: string) => Promise<DeliveryUnitStamp | undefined>;
@@ -34,6 +34,12 @@ export declare const createWranglerConfig: (appDirectory: string, modernConfig:
34
34
  binding: string;
35
35
  run_worker_first: boolean;
36
36
  };
37
+ env?: {
38
+ [k: string]: {
39
+ compatibility_date?: string | undefined;
40
+ compatibility_flags?: JsonValue[] | undefined;
41
+ };
42
+ } | undefined;
37
43
  d1_databases?: {
38
44
  binding: string;
39
45
  database_name: string;
@@ -1,5 +1,5 @@
1
1
  import type { BffUserConfig } from '@modern-js/server-core';
2
- import type { EnvironmentConfig, ModifyBundlerChainFn } from '@rsbuild/core';
2
+ import type { EnvironmentConfig, ModifyBundlerChainFn, Rspack } from '@rsbuild/core';
3
3
  export interface CloudflareBuilderNormalizedConfig {
4
4
  bff?: BffUserConfig;
5
5
  deploy?: {
@@ -7,8 +7,13 @@ export interface CloudflareBuilderNormalizedConfig {
7
7
  };
8
8
  }
9
9
  export interface CloudflareBuilderAppContext {
10
+ apiOnly?: boolean;
10
11
  apiDirectory: string;
11
12
  appDirectory: string;
13
+ entrypoints?: ReadonlyArray<{
14
+ entryName: string;
15
+ }>;
16
+ internalDirectory?: string;
12
17
  }
13
18
  export interface CloudflareBuilderEnvironmentsOptions {
14
19
  appContext: CloudflareBuilderAppContext;
@@ -51,9 +56,48 @@ export interface CloudflareBuilderPlugin {
51
56
  name: string;
52
57
  setup(api: CloudflareBuilderPluginApi): void;
53
58
  }
59
+ type AliasField = string | readonly string[];
60
+ /**
61
+ * Leaves an absent optional dependency missing at runtime, exactly as Node
62
+ * does, instead of failing the worker build. It applies only when the
63
+ * importing package itself declares the request as an optional peer
64
+ * (`peerDependenciesMeta.<name>.optional`) or an `optionalDependencies`
65
+ * entry, the package is not found in any `resolve.modules` directory, and
66
+ * neither the app (`resolve.alias`, `resolve.fallback`, `externals`) nor the
67
+ * importing package (an enabled `resolve.aliasFields` entry such as
68
+ * `browser`) redirects the request. The import
69
+ * then rejects with "Cannot find module" so the library's own fallback
70
+ * handles it (for example `@redis/client` guards `import('@node-rs/xxhash')`).
71
+ */
72
+ export declare const createAbsentOptionalDependencyFilter: (isRedirected?: (request: string) => boolean, moduleDirectories?: readonly string[], aliasFields?: readonly AliasField[]) => (request: string, context: string) => boolean;
73
+ type AliasOption = Record<string, unknown> | {
74
+ name: string;
75
+ onlyModule?: boolean;
76
+ }[] | false | undefined;
77
+ /**
78
+ * Reads the final resolved `resolve.alias`, `resolve.fallback` and
79
+ * `externals` so an app's own
80
+ * replacement for an optional package still wins over the absent-module
81
+ * fallback (the fallback runs before resolution).
82
+ */
83
+ export declare const createRequestRedirectMatcher: (options: {
84
+ externals?: unknown;
85
+ resolve?: {
86
+ alias?: AliasOption;
87
+ fallback?: AliasOption;
88
+ };
89
+ }) => (request: string) => boolean;
90
+ type FunctionExternal = (data: Rspack.ExternalItemFunctionData, callback: (error?: Error | null, result?: unknown) => void) => unknown;
91
+ /**
92
+ * Reports whether any function external claims the request. A function that
93
+ * throws is treated as claiming it, so the request goes through ordinary
94
+ * external processing and surfaces that error instead of being ignored.
95
+ */
96
+ export declare const claimsByFunctionExternal: (externals: readonly FunctionExternal[], data: Rspack.ExternalItemFunctionData) => Promise<boolean>;
54
97
  export declare function getCloudflareWorkerRspackConfig(workerEntryNames: Iterable<string>): CloudflareWorkerRspackConfig;
55
98
  export declare function applyCloudflareWorkerRspackConfig(chain: Parameters<ModifyBundlerChainFn>[0], workerEntryNames: Iterable<string>): void;
56
99
  export declare function applyCloudflareWorkerMfRuntimeBoundary(chain: Parameters<ModifyBundlerChainFn>[0]): void;
57
100
  export declare function getCloudflareBuilderEnvironments({ appContext, environments, normalizedConfig, resolveDeployProvider, }: CloudflareBuilderEnvironmentsOptions): Record<string, EnvironmentConfig>;
58
101
  export declare function applyCloudflareBuilderEnvironments(options: CloudflareBuilderEnvironmentsOptions): CloudflareBuilderEnvironmentsResult;
59
102
  export declare const createCloudflareBuilderPlugin: (resolveDeployProvider?: ResolveCloudflareDeployProvider) => CloudflareBuilderPlugin;
103
+ export {};
@@ -10,6 +10,8 @@ export declare const CLOUDFLARE_RUNTIME_TYPE = "cloudflare-module-worker";
10
10
  export declare const CLOUDFLARE_OUTPUT_PACKAGE_TYPE = "module";
11
11
  export declare const CLOUDFLARE_WORKER_PACKAGE_TYPE = "commonjs";
12
12
  export declare const CLOUDFLARE_WORKER_BUNDLE_FORMAT = "commonjs";
13
- export declare const CLOUDFLARE_WORKER_NODE_BUILTINS: readonly ['assert', 'assert/strict', 'async_hooks', 'buffer', 'child_process', 'crypto', 'dgram', 'dns', 'domain', 'events', 'fs', 'fs/promises', 'http', 'http2', 'inspector', 'module', 'net', 'os', 'path', 'process', 'readline', 'readline/promises', 'repl', 'sqlite', 'stream', 'stream/consumers', 'stream/promises', 'stream/web', 'string_decoder', 'timers', 'timers/promises', 'tls', 'trace_events', 'tty', 'url', 'util', 'util/types', 'v8', 'vm', 'wasi', 'worker_threads', 'zlib'];
13
+ export declare const CLOUDFLARE_ROUTE_DATA_HANDLER_EXPORT = "handleRouteDataRequest";
14
+ export declare const getCloudflareWorkerRouteDataEntryName: (entryName: string) => string;
15
+ export declare const CLOUDFLARE_WORKER_NODE_BUILTINS: readonly ['_http_agent', '_http_client', '_http_common', '_http_incoming', '_http_outgoing', '_http_server', '_tls_common', '_tls_wrap', 'assert', 'assert/strict', 'async_hooks', 'buffer', 'child_process', 'cluster', 'console', 'constants', 'crypto', 'dgram', 'diagnostics_channel', 'dns', 'dns/promises', 'domain', 'events', 'fs', 'fs/promises', 'http', 'http2', 'https', 'inspector', 'inspector/promises', 'module', 'net', 'os', 'path', 'path/posix', 'path/win32', 'perf_hooks', 'process', 'punycode', 'querystring', 'readline', 'readline/promises', 'repl', 'sqlite', 'stream', 'stream/consumers', 'stream/promises', 'stream/web', 'string_decoder', 'sys', 'test', 'timers', 'timers/promises', 'tls', 'trace_events', 'tty', 'url', 'util', 'util/types', 'v8', 'vm', 'wasi', 'worker_threads', 'zlib'];
14
16
  export declare const CLOUDFLARE_WORKER_PLATFORM_MODULES: readonly ['cloudflare:sockets'];
15
17
  export declare const CLOUDFLARE_REQUIRED_COMPATIBILITY_FLAGS: readonly ['nodejs_compat', 'global_fetch_strictly_public'];
@@ -1,7 +1,7 @@
1
1
  import type { CloudflareOutputVerifierIssue, JsonObject } from './issues.js';
2
2
  interface WorkerBundleReference {
3
3
  dispatcherExport?: string;
4
- kind: 'effect-bff' | 'route';
4
+ kind: 'effect-bff' | 'route' | 'route-data';
5
5
  reference: string;
6
6
  }
7
7
  interface ResolvedWorkerBundleReference extends WorkerBundleReference {
@@ -10,7 +10,7 @@ interface ResolvedWorkerBundleReference extends WorkerBundleReference {
10
10
  export declare const getEffectBffWorker: (manifest: JsonObject) => any;
11
11
  export declare const getWorkerBundleReferences: (manifest: JsonObject) => WorkerBundleReference[];
12
12
  export declare const resolveWorkerBundleReference: (issues: CloudflareOutputVerifierIssue[], outputDirectory: string, reference: WorkerBundleReference, manifestPath: string) => ResolvedWorkerBundleReference | null;
13
- export declare const missingWorkerBundleMessage: (reference: WorkerBundleReference) => "Cloudflare Effect BFF manifest points to a missing worker bundle." | "Cloudflare route worker manifest points to a missing worker bundle.";
13
+ export declare const missingWorkerBundleMessage: (reference: WorkerBundleReference) => "Cloudflare Effect BFF manifest points to a missing worker bundle." | "Cloudflare route data worker manifest points to a missing worker bundle." | "Cloudflare route worker manifest points to a missing worker bundle.";
14
14
  interface WorkerBundleVerificationContract {
15
15
  providedPackages: ReadonlySet<string>;
16
16
  workerRoot: string;
@@ -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>;
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "directory": "packages/solutions/app-tools-extensions"
12
12
  },
13
13
  "license": "MIT",
14
- "version": "3.9.0-ultramodern.12",
14
+ "version": "3.9.0-ultramodern.14",
15
15
  "files": [
16
16
  "dist",
17
17
  "src"
@@ -142,39 +142,43 @@
142
142
  "node": ">=26.7.0"
143
143
  },
144
144
  "dependencies": {
145
- "@babel/parser": "^8.0.4",
146
- "@babel/traverse": "^8.0.4",
145
+ "@babel/parser": "^8.0.6",
146
+ "@babel/traverse": "^8.0.6",
147
147
  "@loadable/component": "5.16.7",
148
- "@modern-js/backend-federation-contracts": "npm:@bleedingdev/modern-js-backend-federation-contracts@3.9.0-ultramodern.12",
149
- "@modern-js/builder": "npm:@bleedingdev/modern-js-builder@3.9.0-ultramodern.12",
150
- "@modern-js/prod-server": "npm:@bleedingdev/modern-js-prod-server@3.9.0-ultramodern.12",
151
- "@modern-js/runtime-renderer-extensions": "npm:@bleedingdev/modern-js-runtime-renderer-extensions@3.9.0-ultramodern.12",
152
- "@modern-js/server-core": "npm:@bleedingdev/modern-js-server-core@3.9.0-ultramodern.12",
153
- "@modern-js/server-runtime-extensions": "npm:@bleedingdev/modern-js-server-runtime-extensions@3.9.0-ultramodern.12",
154
- "@modern-js/surface-resolution": "npm:@bleedingdev/modern-js-surface-resolution@3.9.0-ultramodern.12",
155
- "@modern-js/types": "npm:@bleedingdev/modern-js-types@3.9.0-ultramodern.12",
156
- "@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.9.0-ultramodern.12",
148
+ "@modern-js/backend-federation-contracts": "npm:@bleedingdev/modern-js-backend-federation-contracts@3.9.0-ultramodern.14",
149
+ "@modern-js/builder": "npm:@bleedingdev/modern-js-builder@3.9.0-ultramodern.14",
150
+ "@modern-js/prod-server": "npm:@bleedingdev/modern-js-prod-server@3.9.0-ultramodern.14",
151
+ "@modern-js/runtime-renderer-extensions": "npm:@bleedingdev/modern-js-runtime-renderer-extensions@3.9.0-ultramodern.14",
152
+ "@modern-js/runtime-utils": "npm:@bleedingdev/modern-js-runtime-utils@3.9.0-ultramodern.14",
153
+ "@modern-js/server-core": "npm:@bleedingdev/modern-js-server-core@3.9.0-ultramodern.14",
154
+ "@modern-js/server-runtime-extensions": "npm:@bleedingdev/modern-js-server-runtime-extensions@3.9.0-ultramodern.14",
155
+ "@modern-js/surface-resolution": "npm:@bleedingdev/modern-js-surface-resolution@3.9.0-ultramodern.14",
156
+ "@modern-js/types": "npm:@bleedingdev/modern-js-types@3.9.0-ultramodern.14",
157
+ "@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.9.0-ultramodern.14",
157
158
  "@swc/helpers": "^0.5.23",
158
159
  "compression-webpack-plugin": "^12.0.0",
159
160
  "esbuild": "^0.28.2",
160
161
  "std-env": "4.2.0"
161
162
  },
162
163
  "peerDependencies": {
163
- "@rsbuild/core": "2.2.3"
164
+ "@rsbuild/core": "2.2.9"
164
165
  },
165
166
  "devDependencies": {
166
- "@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.9.0-ultramodern.12",
167
- "@modern-js/plugin-bff-extensions": "npm:@bleedingdev/modern-js-plugin-bff-extensions@3.9.0-ultramodern.12",
168
- "@module-federation/runtime-tools": "2.9.0",
169
- "@rsbuild/core": "2.2.3",
170
- "@rslib/core": "1.0.0",
167
+ "@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.9.0-ultramodern.14",
168
+ "@modern-js/plugin-bff-extensions": "npm:@bleedingdev/modern-js-plugin-bff-extensions@3.9.0-ultramodern.14",
169
+ "@modern-js/plugin-data-loader": "npm:@bleedingdev/modern-js-plugin-data-loader@3.9.0-ultramodern.14",
170
+ "@module-federation/runtime-tools": "npm:@bleedingdev/mf-runtime-tools@2.9.1",
171
+ "@rsbuild/core": "2.2.9",
172
+ "@rslib/core": "1.0.2",
171
173
  "@scripts/rstest-config": "2.66.0",
172
174
  "@types/babel__traverse": "7.28.0",
173
- "@types/node": "^26.4.1",
175
+ "@types/node": "^26.6.2",
174
176
  "@typescript/native-preview": "7.0.0-dev.20260707.2",
175
177
  "core-js": "^3.50.0",
176
- "effect": "4.0.0-rc.112",
177
- "ndepe": "^0.1.13"
178
+ "effect": "npm:@bleedingdev/effect@4.0.0-rc.117",
179
+ "miniflare": "5.20260921.0-alpha",
180
+ "ndepe": "^0.1.13",
181
+ "pg": "8.23.0"
178
182
  },
179
183
  "sideEffects": false,
180
184
  "publishConfig": {
@@ -204,8 +204,12 @@ export const createBackendManifest = (
204
204
  source: {
205
205
  module: sourceModule,
206
206
  },
207
- readinessPath: `${app.apiPrefix}/${app.apiStem}/readiness`,
208
- openapiPath: `${app.apiPrefix}/openapi.json`,
207
+ ...(app.apiProtocol === 'rpc'
208
+ ? { rpcPath: app.rpcPath, rpcSerialization: 'json' }
209
+ : {
210
+ readinessPath: `${app.apiPrefix}/${app.apiStem}/readiness`,
211
+ openapiPath: `${app.apiPrefix}/openapi.json`,
212
+ }),
209
213
  ...(app.deliveryUnit ? { deliveryUnit: app.deliveryUnit } : {}),
210
214
  versionBoundary: {
211
215
  invariant: 'web-and-api-same-build',