@bleedingdev/modern-js-federation-runtime 3.9.3-ultramodern.7 → 3.9.3-ultramodern.9

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 (25) hide show
  1. package/dist/cjs/module-federation/native-browser-dev-client.js +320 -0
  2. package/dist/cjs/module-federation/native-browser-dev-refresh.js +226 -0
  3. package/dist/cjs/module-federation/native-browser-dev-runtime-plugin.js +233 -0
  4. package/dist/cjs/module-federation/native-dev-refresh-runtime-plugin.js +267 -0
  5. package/dist/cjs/module-federation/renderer-runtime-plugin.js +5 -2
  6. package/dist/esm/module-federation/native-browser-dev-client.mjs +276 -0
  7. package/dist/esm/module-federation/native-browser-dev-refresh.mjs +182 -0
  8. package/dist/esm/module-federation/native-browser-dev-runtime-plugin.mjs +183 -0
  9. package/dist/esm/module-federation/native-dev-refresh-runtime-plugin.mjs +229 -0
  10. package/dist/esm/module-federation/renderer-runtime-plugin.mjs +5 -2
  11. package/dist/esm-node/module-federation/native-browser-dev-client.mjs +277 -0
  12. package/dist/esm-node/module-federation/native-browser-dev-refresh.mjs +183 -0
  13. package/dist/esm-node/module-federation/native-browser-dev-runtime-plugin.mjs +184 -0
  14. package/dist/esm-node/module-federation/native-dev-refresh-runtime-plugin.mjs +230 -0
  15. package/dist/esm-node/module-federation/renderer-runtime-plugin.mjs +5 -2
  16. package/dist/types/module-federation/native-browser-dev-client.d.ts +41 -0
  17. package/dist/types/module-federation/native-browser-dev-refresh.d.ts +86 -0
  18. package/dist/types/module-federation/native-browser-dev-runtime-plugin.d.ts +40 -0
  19. package/dist/types/module-federation/native-dev-refresh-runtime-plugin.d.ts +90 -0
  20. package/package.json +60 -13
  21. package/src/module-federation/native-browser-dev-client.ts +424 -0
  22. package/src/module-federation/native-browser-dev-refresh.ts +373 -0
  23. package/src/module-federation/native-browser-dev-runtime-plugin.ts +276 -0
  24. package/src/module-federation/native-dev-refresh-runtime-plugin.ts +445 -0
  25. package/src/module-federation/renderer-runtime-plugin.ts +7 -2
@@ -0,0 +1,86 @@
1
+ /** The normal MF instance surface used by a browser development replacement. */
2
+ export interface NativeBrowserDevHost {
3
+ readonly name: string;
4
+ readonly options: Readonly<Record<string, unknown>>;
5
+ readonly shareScopeMap: Record<string, Record<string, Record<string, Shared>>>;
6
+ readonly moduleCache: Map<string, unknown>;
7
+ readonly loaderHook?: {
8
+ readonly lifecycle: {
9
+ readonly fetch: {
10
+ emit(url: string, init: RequestInit, remote: unknown, context: {
11
+ readonly initiator: 'loadRemote';
12
+ readonly id: string;
13
+ readonly resourceType: 'manifest';
14
+ readonly url: string;
15
+ }): Promise<unknown>;
16
+ };
17
+ };
18
+ };
19
+ initShareScopeMap(name: string, scope: Record<string, Record<string, Shared>>, options: {
20
+ hostShareScopeMap: NativeBrowserDevHost['shareScopeMap'];
21
+ }): void;
22
+ loadRemote<T>(id: string, options: {
23
+ loadFactory: false;
24
+ }): Promise<T | null>;
25
+ }
26
+ interface Shared {
27
+ readonly loaded?: boolean;
28
+ readonly loading?: unknown;
29
+ readonly lib?: unknown;
30
+ readonly get?: unknown;
31
+ }
32
+ export interface NativeBrowserDevGraph {
33
+ /** Existing completed graph revision, also used in immutable asset URLs. */
34
+ readonly revision: string;
35
+ /** Native JSON manifest whose entry AND chunks belong to this revision. */
36
+ readonly remote: Readonly<{
37
+ name: string;
38
+ alias: string;
39
+ entry: string;
40
+ }>;
41
+ }
42
+ interface StagingHost {
43
+ readonly host: NativeBrowserDevHost;
44
+ /** Rearm cached, unexecuted runtime hot listeners without starting a socket. */
45
+ prepareFactory?(): void;
46
+ /** Retire only this attempt's transport/listeners; never shared providers. */
47
+ release(): void;
48
+ }
49
+ interface PublisherReplacement {
50
+ readonly commitStarted: boolean;
51
+ execute<T>(factory: () => T): T;
52
+ }
53
+ declare const COMMIT_ERROR: unique symbol;
54
+ /** Propagates an observed native mutation; it does not grant native authority. */
55
+ declare class NativeBrowserDevCommitError extends Error {
56
+ readonly [COMMIT_ERROR] = true;
57
+ readonly revision: string;
58
+ constructor(revision: string, cause: unknown);
59
+ }
60
+ /** A remote runtime can receive this error from a different host runtime copy. */
61
+ export declare function isNativeBrowserDevCommitError(error: unknown, revision: string): error is NativeBrowserDevCommitError;
62
+ /** Trusted coordinators use this only after observing an actual native commit. */
63
+ export declare function nativeBrowserDevCommitFailure(revision: string, cause: unknown): Error;
64
+ /**
65
+ * Load a new container without evicting the working host. MF admission and async
66
+ * chunk loading finish before Octane executes the synchronous exposed graph.
67
+ * Native execution owns declaration rollback and retirement of the old graph.
68
+ * It cannot undo arbitrary module side effects or the browser's ESM cache: a
69
+ * consumed, failed graph needs a newer completed revision for another attempt.
70
+ *
71
+ * The compiler supplies a public ModuleFederation constructor adapter and an
72
+ * attempt-owned transport release function. No global MF cache is deleted here.
73
+ */
74
+ export declare function createNativeBrowserDevRefresh<Boundary>(options: {
75
+ readonly host: NativeBrowserDevHost;
76
+ readonly id: string;
77
+ readonly boundary: Boundary;
78
+ readonly prepareReplacement: (boundary: Boundary) => PublisherReplacement;
79
+ readonly createHost: (options: Readonly<Record<string, unknown>>) => StagingHost;
80
+ }): {
81
+ replace<T>(graph: NativeBrowserDevGraph): Promise<T>;
82
+ /** The original host remains untouched, including sibling remote loaders. */
83
+ readonly activeHost: NativeBrowserDevHost;
84
+ dispose(): void;
85
+ };
86
+ export {};
@@ -0,0 +1,40 @@
1
+ import { createNativeBrowserDevRefresh, type NativeBrowserDevGraph, type NativeBrowserDevHost } from './native-browser-dev-refresh.js';
2
+ export declare const NATIVE_BROWSER_DEV_BOUNDARY: unique symbol;
3
+ interface Replacement {
4
+ readonly commitStarted: boolean;
5
+ execute<T>(factory: () => T): T;
6
+ }
7
+ interface Reference {
8
+ readonly host: NativeBrowserDevHost;
9
+ readonly remote: NativeBrowserDevGraph['remote'];
10
+ readonly boundary: object;
11
+ readonly prepare: (boundary: object) => Replacement;
12
+ }
13
+ /**
14
+ * This registry routes work to actual mounted boundary references; its names
15
+ * grant no native authority. Octane revalidates the exact compiled root, lease,
16
+ * physical document and every surviving owner inside the opaque capability.
17
+ */
18
+ export declare function createNativeBrowserDevRuntimePlugin(options: {
19
+ readonly remotes: readonly NativeBrowserDevGraph['remote'][];
20
+ readonly prepareReplacement: Reference['prepare'];
21
+ readonly createHost: Parameters<typeof createNativeBrowserDevRefresh>[0]['createHost'];
22
+ }): {
23
+ name: string;
24
+ beforeInit<T extends {
25
+ origin: NativeBrowserDevHost;
26
+ }>(args: T): T;
27
+ };
28
+ /** One synchronous exposed graph execution serves all of its mounted instances. */
29
+ export declare function replaceNativeBrowserDevRemote(graph: NativeBrowserDevGraph): Promise<number>;
30
+ export interface NativeBrowserDevPublication extends NativeBrowserDevGraph {
31
+ readonly buildId: string;
32
+ readonly runtimeHash: string;
33
+ }
34
+ /** Discover the latest completed graph through this mounted host's transport. */
35
+ export declare function readNativeBrowserDevPublication(remoteName: string, options: {
36
+ readonly signal: AbortSignal;
37
+ readonly revisionHeader: string;
38
+ }): Promise<NativeBrowserDevPublication>;
39
+ export declare function hasNativeBrowserDevPublisher(remoteName: string): boolean;
40
+ export {};
@@ -0,0 +1,90 @@
1
+ interface ManifestRemote {
2
+ readonly name: string;
3
+ readonly alias: string;
4
+ readonly entry: string;
5
+ }
6
+ interface RemoteInfo {
7
+ readonly name: string;
8
+ readonly entry: string;
9
+ }
10
+ interface NativeHost {
11
+ readonly options?: unknown;
12
+ readonly shareScopeMap?: Record<string, Record<string, Record<string, {
13
+ loaded?: boolean;
14
+ loading?: unknown;
15
+ lib?: unknown;
16
+ }>>>;
17
+ loadShare?(pkgName: string): Promise<unknown>;
18
+ loadRemote<T>(id: string, options?: unknown): Promise<T | null>;
19
+ registerRemotes(remotes: ManifestRemote[], options: {
20
+ force: true;
21
+ }): void;
22
+ readonly loaderHook: {
23
+ readonly lifecycle: {
24
+ readonly fetch: {
25
+ emit(url: string, init: RequestInit, remoteInfo: RemoteInfo, context: {
26
+ initiator: 'loadRemote';
27
+ id: string;
28
+ resourceType: 'remoteEntry';
29
+ url: string;
30
+ expose?: string;
31
+ }): Promise<Response | false | void>;
32
+ };
33
+ };
34
+ };
35
+ [LOAD_WITH_CAPTURE]?: <T, Captured>(id: string, capture: (module: T | null, resolution?: LoadResolution) => Captured) => Promise<{
36
+ module: T | null;
37
+ captured: Captured | undefined;
38
+ }>;
39
+ }
40
+ declare const LOAD_WITH_CAPTURE: unique symbol;
41
+ interface LoadResolution {
42
+ readonly remoteSnapshot: unknown;
43
+ readonly expose: string;
44
+ }
45
+ export interface NativeDevRefreshOptions {
46
+ readonly remotes: readonly ManifestRemote[];
47
+ readonly revisionHeader: string;
48
+ readonly requestTimeout: number;
49
+ /** Exact and prefix singleton keys owned by the selected native adapter. */
50
+ readonly shared?: readonly string[];
51
+ }
52
+ /**
53
+ * Retain the host and its shared factories while refreshing one completed
54
+ * development remote. Production remotes without a revision keep native MF's
55
+ * ordinary cache. The compiler registers this plugin only on Node dev hosts.
56
+ */
57
+ export default function nativeDevRefreshRuntimePlugin(options: NativeDevRefreshOptions): {
58
+ name: string;
59
+ beforeInit<T extends {
60
+ origin: NativeHost;
61
+ }>(args: T): T;
62
+ beforeRequest<T extends {
63
+ origin: NativeHost;
64
+ id: string;
65
+ }>(args: T): Promise<T>;
66
+ loadSnapshot<T extends {
67
+ options: unknown;
68
+ moduleInfo: {
69
+ name: string;
70
+ };
71
+ remoteSnapshot?: unknown;
72
+ }>(args: T): T;
73
+ afterLoadSnapshot<T extends {
74
+ host: NativeHost;
75
+ moduleInfo: {
76
+ name: string;
77
+ };
78
+ remoteSnapshot: unknown;
79
+ }>(args: T): T;
80
+ afterResolve<T extends {
81
+ origin: NativeHost;
82
+ remote: {
83
+ name: string;
84
+ };
85
+ remoteInfo: RemoteInfo;
86
+ remoteSnapshot: unknown;
87
+ expose: string;
88
+ }>(args: T): Promise<T>;
89
+ };
90
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bleedingdev/modern-js-federation-runtime",
3
- "version": "3.9.3-ultramodern.7",
3
+ "version": "3.9.3-ultramodern.9",
4
4
  "description": "Federated surface consumption, distributed SSR, and bounded manifest recovery.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -9,7 +9,7 @@
9
9
  "directory": "packages/runtime/federation-runtime"
10
10
  },
11
11
  "engines": {
12
- "node": ">=26.10.0"
12
+ "node": ">=26.12.0"
13
13
  },
14
14
  "types": "./dist/types/module-federation/index.d.ts",
15
15
  "main": "./dist/cjs/module-federation/index.js",
@@ -54,6 +54,37 @@
54
54
  "require": "./dist/cjs/module-federation/manifest-recovery-runtime-plugin.js"
55
55
  },
56
56
  "default": "./dist/esm/module-federation/manifest-recovery-runtime-plugin.mjs"
57
+ },
58
+ "./native-dev-refresh-runtime-plugin": {
59
+ "types": "./dist/types/module-federation/native-dev-refresh-runtime-plugin.d.ts",
60
+ "node": {
61
+ "import": "./dist/esm-node/module-federation/native-dev-refresh-runtime-plugin.mjs",
62
+ "require": "./dist/cjs/module-federation/native-dev-refresh-runtime-plugin.js"
63
+ }
64
+ },
65
+ "./native-browser-dev-refresh": {
66
+ "types": "./dist/types/module-federation/native-browser-dev-refresh.d.ts",
67
+ "node": {
68
+ "import": "./dist/esm-node/module-federation/native-browser-dev-refresh.mjs",
69
+ "require": "./dist/cjs/module-federation/native-browser-dev-refresh.js"
70
+ },
71
+ "default": "./dist/esm/module-federation/native-browser-dev-refresh.mjs"
72
+ },
73
+ "./native-browser-dev-runtime-plugin": {
74
+ "types": "./dist/types/module-federation/native-browser-dev-runtime-plugin.d.ts",
75
+ "node": {
76
+ "import": "./dist/esm-node/module-federation/native-browser-dev-runtime-plugin.mjs",
77
+ "require": "./dist/cjs/module-federation/native-browser-dev-runtime-plugin.js"
78
+ },
79
+ "default": "./dist/esm/module-federation/native-browser-dev-runtime-plugin.mjs"
80
+ },
81
+ "./native-browser-dev-client": {
82
+ "types": "./dist/types/module-federation/native-browser-dev-client.d.ts",
83
+ "node": {
84
+ "import": "./dist/esm-node/module-federation/native-browser-dev-client.mjs",
85
+ "require": "./dist/cjs/module-federation/native-browser-dev-client.js"
86
+ },
87
+ "default": "./dist/esm/module-federation/native-browser-dev-client.mjs"
57
88
  }
58
89
  },
59
90
  "typesVersions": {
@@ -77,6 +108,22 @@
77
108
  "manifest-recovery-runtime-plugin": [
78
109
  "./dist/types/module-federation/manifest-recovery-runtime-plugin.d.ts",
79
110
  "./src/module-federation/manifest-recovery-runtime-plugin.ts"
111
+ ],
112
+ "native-dev-refresh-runtime-plugin": [
113
+ "./dist/types/module-federation/native-dev-refresh-runtime-plugin.d.ts",
114
+ "./src/module-federation/native-dev-refresh-runtime-plugin.ts"
115
+ ],
116
+ "native-browser-dev-refresh": [
117
+ "./dist/types/module-federation/native-browser-dev-refresh.d.ts",
118
+ "./src/module-federation/native-browser-dev-refresh.ts"
119
+ ],
120
+ "native-browser-dev-runtime-plugin": [
121
+ "./dist/types/module-federation/native-browser-dev-runtime-plugin.d.ts",
122
+ "./src/module-federation/native-browser-dev-runtime-plugin.ts"
123
+ ],
124
+ "native-browser-dev-client": [
125
+ "./dist/types/module-federation/native-browser-dev-client.d.ts",
126
+ "./src/module-federation/native-browser-dev-client.ts"
80
127
  ]
81
128
  }
82
129
  },
@@ -86,13 +133,13 @@
86
133
  ],
87
134
  "sideEffects": false,
88
135
  "dependencies": {
89
- "@modern-js/backend-federation-contracts": "npm:@bleedingdev/modern-js-backend-federation-contracts@3.9.3-ultramodern.7",
90
- "@modern-js/surface-resolution": "npm:@bleedingdev/modern-js-surface-resolution@3.9.3-ultramodern.7",
91
- "@module-federation/sdk": "2.9.2"
136
+ "@modern-js/backend-federation-contracts": "npm:@bleedingdev/modern-js-backend-federation-contracts@3.9.3-ultramodern.9",
137
+ "@modern-js/surface-resolution": "npm:@bleedingdev/modern-js-surface-resolution@3.9.3-ultramodern.9",
138
+ "@module-federation/sdk": "npm:@bleedingdev/mf-sdk@2.9.2"
92
139
  },
93
140
  "peerDependencies": {
94
- "@modern-js/runtime": "3.9.3-ultramodern.7",
95
- "react": "^19.2.8"
141
+ "@modern-js/runtime": "3.9.3-ultramodern.9",
142
+ "react": "^19.3.1"
96
143
  },
97
144
  "peerDependenciesMeta": {
98
145
  "@modern-js/runtime": {
@@ -103,17 +150,17 @@
103
150
  }
104
151
  },
105
152
  "devDependencies": {
106
- "@modern-js/runtime": "npm:@bleedingdev/modern-js-runtime@3.9.3-ultramodern.7",
107
- "@modern-js/tsconfig": "npm:@bleedingdev/modern-js-tsconfig@3.9.3-ultramodern.7",
108
- "@rsbuild/core": "2.2.11",
153
+ "@modern-js/runtime": "npm:@bleedingdev/modern-js-runtime@3.9.3-ultramodern.9",
154
+ "@modern-js/tsconfig": "npm:@bleedingdev/modern-js-tsconfig@3.9.3-ultramodern.9",
155
+ "@rsbuild/core": "2.2.13",
109
156
  "@rslib/core": "1.0.3",
110
157
  "@scripts/rstest-config": "2.66.0",
111
- "@types/node": "^26.6.3",
158
+ "@types/node": "^26.6.5",
112
159
  "@types/react": "^19.3.0",
113
160
  "@types/react-dom": "^19.3.0",
114
161
  "esbuild": "^0.28.2",
115
- "react": "^19.3.0",
116
- "react-dom": "^19.3.0",
162
+ "react": "^19.3.1",
163
+ "react-dom": "^19.3.1",
117
164
  "typescript": "7.0.2"
118
165
  },
119
166
  "publishConfig": {