@module-federation/runtime 0.2.2 → 0.2.4

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.
package/dist/index.cjs.js CHANGED
@@ -120,6 +120,23 @@ async function loadEsmEntry({ entry, remoteEntryExports }) {
120
120
  }
121
121
  });
122
122
  }
123
+ async function loadSystemJsEntry({ entry, remoteEntryExports }) {
124
+ return new Promise((resolve, reject)=>{
125
+ try {
126
+ if (!remoteEntryExports) {
127
+ // eslint-disable-next-line no-eval
128
+ new Function('callbacks', `System.import("${entry}").then(callbacks[0]).catch(callbacks[1])`)([
129
+ resolve,
130
+ reject
131
+ ]);
132
+ } else {
133
+ resolve(remoteEntryExports);
134
+ }
135
+ } catch (e) {
136
+ reject(e);
137
+ }
138
+ });
139
+ }
123
140
  async function loadEntryScript({ name, globalName, entry, createScriptHook }) {
124
141
  const { entryExports: remoteEntryExports } = share.getRemoteEntryExports(name, globalName);
125
142
  if (remoteEntryExports) {
@@ -180,6 +197,11 @@ async function getRemoteEntry({ remoteEntryExports, remoteInfo, createScriptHook
180
197
  entry,
181
198
  remoteEntryExports
182
199
  });
200
+ } else if (type === 'system') {
201
+ share.globalLoading[uniqueKey] = loadSystemJsEntry({
202
+ entry,
203
+ remoteEntryExports
204
+ });
183
205
  } else {
184
206
  share.globalLoading[uniqueKey] = loadEntryScript({
185
207
  name,
@@ -223,9 +245,10 @@ let Module = class Module {
223
245
  const remoteEntryExports = await getRemoteEntry({
224
246
  remoteInfo: this.remoteInfo,
225
247
  remoteEntryExports: this.remoteEntryExports,
226
- createScriptHook: (url)=>{
248
+ createScriptHook: (url, attrs)=>{
227
249
  const res = this.host.loaderHook.lifecycle.createScript.emit({
228
- url
250
+ url,
251
+ attrs
229
252
  });
230
253
  if (!res) return;
231
254
  if (typeof document === 'undefined') {
@@ -1983,7 +2006,7 @@ class FederationHost {
1983
2006
  // maybe will change, temporarily for internal use only
1984
2007
  initContainer: new AsyncWaterfallHook('initContainer')
1985
2008
  });
1986
- this.version = "0.2.2";
2009
+ this.version = "0.2.4";
1987
2010
  this.moduleCache = new Map();
1988
2011
  this.loaderHook = new PluginSystem({
1989
2012
  // FIXME: may not be suitable , not open to the public yet
@@ -1991,7 +2014,7 @@ class FederationHost {
1991
2014
  createScript: new SyncHook(),
1992
2015
  createLink: new SyncHook(),
1993
2016
  // only work for manifest , so not open to the public yet
1994
- fetch: new AsyncHook('fetch')
2017
+ fetch: new AsyncHook()
1995
2018
  });
1996
2019
  // TODO: Validate the details of the options
1997
2020
  // Initialize options with default values
package/dist/index.esm.js CHANGED
@@ -118,6 +118,23 @@ async function loadEsmEntry({ entry, remoteEntryExports }) {
118
118
  }
119
119
  });
120
120
  }
121
+ async function loadSystemJsEntry({ entry, remoteEntryExports }) {
122
+ return new Promise((resolve, reject)=>{
123
+ try {
124
+ if (!remoteEntryExports) {
125
+ // eslint-disable-next-line no-eval
126
+ new Function('callbacks', `System.import("${entry}").then(callbacks[0]).catch(callbacks[1])`)([
127
+ resolve,
128
+ reject
129
+ ]);
130
+ } else {
131
+ resolve(remoteEntryExports);
132
+ }
133
+ } catch (e) {
134
+ reject(e);
135
+ }
136
+ });
137
+ }
121
138
  async function loadEntryScript({ name, globalName, entry, createScriptHook }) {
122
139
  const { entryExports: remoteEntryExports } = getRemoteEntryExports(name, globalName);
123
140
  if (remoteEntryExports) {
@@ -178,6 +195,11 @@ async function getRemoteEntry({ remoteEntryExports, remoteInfo, createScriptHook
178
195
  entry,
179
196
  remoteEntryExports
180
197
  });
198
+ } else if (type === 'system') {
199
+ globalLoading[uniqueKey] = loadSystemJsEntry({
200
+ entry,
201
+ remoteEntryExports
202
+ });
181
203
  } else {
182
204
  globalLoading[uniqueKey] = loadEntryScript({
183
205
  name,
@@ -221,9 +243,10 @@ let Module = class Module {
221
243
  const remoteEntryExports = await getRemoteEntry({
222
244
  remoteInfo: this.remoteInfo,
223
245
  remoteEntryExports: this.remoteEntryExports,
224
- createScriptHook: (url)=>{
246
+ createScriptHook: (url, attrs)=>{
225
247
  const res = this.host.loaderHook.lifecycle.createScript.emit({
226
- url
248
+ url,
249
+ attrs
227
250
  });
228
251
  if (!res) return;
229
252
  if (typeof document === 'undefined') {
@@ -1981,7 +2004,7 @@ class FederationHost {
1981
2004
  // maybe will change, temporarily for internal use only
1982
2005
  initContainer: new AsyncWaterfallHook('initContainer')
1983
2006
  });
1984
- this.version = "0.2.2";
2007
+ this.version = "0.2.4";
1985
2008
  this.moduleCache = new Map();
1986
2009
  this.loaderHook = new PluginSystem({
1987
2010
  // FIXME: may not be suitable , not open to the public yet
@@ -1989,7 +2012,7 @@ class FederationHost {
1989
2012
  createScript: new SyncHook(),
1990
2013
  createLink: new SyncHook(),
1991
2014
  // only work for manifest , so not open to the public yet
1992
- fetch: new AsyncHook('fetch')
2015
+ fetch: new AsyncHook()
1993
2016
  });
1994
2017
  // TODO: Validate the details of the options
1995
2018
  // Initialize options with default values
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@module-federation/runtime",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "author": "zhouxiao <codingzx@gmail.com>",
5
5
  "main": "./index.cjs.js",
6
6
  "module": "./index.esm.js",
package/dist/share.cjs.js CHANGED
@@ -190,7 +190,7 @@ function getGlobalFederationConstructor() {
190
190
  function setGlobalFederationConstructor(FederationConstructor, isDebug = isDebugMode()) {
191
191
  if (isDebug) {
192
192
  globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR__ = FederationConstructor;
193
- globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = "0.2.2";
193
+ globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = "0.2.4";
194
194
  }
195
195
  }
196
196
  // eslint-disable-next-line @typescript-eslint/ban-types
package/dist/share.esm.js CHANGED
@@ -188,7 +188,7 @@ function getGlobalFederationConstructor() {
188
188
  function setGlobalFederationConstructor(FederationConstructor, isDebug = isDebugMode()) {
189
189
  if (isDebug) {
190
190
  globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR__ = FederationConstructor;
191
- globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = "0.2.2";
191
+ globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = "0.2.4";
192
192
  }
193
193
  }
194
194
  // eslint-disable-next-line @typescript-eslint/ban-types
@@ -51,6 +51,7 @@ export declare class FederationHost {
51
51
  }>;
52
52
  createScript: SyncHook<[{
53
53
  url: string;
54
+ attrs?: Record<string, any>;
54
55
  }], CreateScriptHookReturn>;
55
56
  createLink: SyncHook<[{
56
57
  url: string;
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { FederationHost } from './core';
3
2
  import { RemoteEntryExports, GlobalShareScopeMap, Remote, Optional } from './type';
4
3
  import { GlobalModuleInfo, ModuleInfo } from '@module-federation/sdk';
@@ -29,8 +28,8 @@ export declare function getInfoWithoutType<T extends object>(target: T, key: key
29
28
  key: string;
30
29
  };
31
30
  export declare const getGlobalSnapshot: () => GlobalModuleInfo;
32
- export declare const getTargetSnapshotInfoByModuleInfo: (moduleInfo: Optional<Remote, 'alias'>, snapshot: GlobalModuleInfo) => GlobalModuleInfo[string] | undefined;
33
- export declare const getGlobalSnapshotInfoByModuleInfo: (moduleInfo: Optional<Remote, 'alias'>) => GlobalModuleInfo[string] | undefined;
31
+ export declare const getTargetSnapshotInfoByModuleInfo: (moduleInfo: Optional<Remote, "alias">, snapshot: GlobalModuleInfo) => GlobalModuleInfo[string] | undefined;
32
+ export declare const getGlobalSnapshotInfoByModuleInfo: (moduleInfo: Optional<Remote, "alias">) => GlobalModuleInfo[string] | undefined;
34
33
  export declare const setGlobalSnapshotInfoByModuleInfo: (remoteInfo: Remote, moduleDetailInfo: GlobalModuleInfo[string]) => GlobalModuleInfo;
35
34
  export declare const addGlobalSnapshot: (moduleInfos: GlobalModuleInfo) => (() => void);
36
35
  export declare const getRemoteEntryExports: (name: string, globalName: string | undefined) => {
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { resetFederationGlobalInfo, getGlobalFederationInstance, setGlobalFederationInstance, getGlobalFederationConstructor, setGlobalFederationConstructor, getInfoWithoutType, getGlobalSnapshot, getTargetSnapshotInfoByModuleInfo, getGlobalSnapshotInfoByModuleInfo, setGlobalSnapshotInfoByModuleInfo, addGlobalSnapshot, getRemoteEntryExports, registerGlobalPlugins, getGlobalHostPlugins, getPreloaded, setPreloaded, Global } from './global';
3
2
  import { getRegisteredShare, getGlobalShareScope } from './utils/share';
4
3
  interface IShareUtils {
@@ -22,10 +22,10 @@ export declare class SnapshotHandler {
22
22
  loadRemoteSnapshot: AsyncWaterfallHook<{
23
23
  options: Options;
24
24
  moduleInfo: Remote;
25
- manifestJson?: Manifest<import("@module-federation/sdk").BasicStatsMetaData, import("@module-federation/sdk").ManifestRemoteCommonInfo> | undefined;
26
- manifestUrl?: string | undefined;
25
+ manifestJson?: Manifest;
26
+ manifestUrl?: string;
27
27
  remoteSnapshot: ModuleInfo;
28
- from: 'global' | 'manifest';
28
+ from: "global" | "manifest";
29
29
  }>;
30
30
  }>;
31
31
  loaderHook: FederationHost['loaderHook'];
@@ -48,8 +48,8 @@ export declare class RemoteHandler {
48
48
  id: string;
49
49
  error: unknown;
50
50
  options?: any;
51
- from: 'build' | 'runtime';
52
- lifecycle: 'onLoad' | 'beforeRequest';
51
+ from: "build" | "runtime";
52
+ lifecycle: "onLoad" | "beforeRequest";
53
53
  origin: FederationHost;
54
54
  }], unknown>;
55
55
  beforePreloadRemote: AsyncHook<[{
@@ -10,8 +10,8 @@ export declare class SharedHandler {
10
10
  afterResolve: AsyncWaterfallHook<LoadRemoteMatch>;
11
11
  beforeLoadShare: AsyncWaterfallHook<{
12
12
  pkgName: string;
13
- shareInfo?: Shared | undefined;
14
- shared: Options['shared'];
13
+ shareInfo?: Shared;
14
+ shared: Options["shared"];
15
15
  origin: FederationHost;
16
16
  }>;
17
17
  loadShare: AsyncHook<[FederationHost, string, ShareInfos], false | void | Promise<false | void>>;
@@ -28,7 +28,7 @@ export declare class SharedHandler {
28
28
  options: Options;
29
29
  origin: FederationHost;
30
30
  scopeName: string;
31
- hostShareScopeMap?: ShareScopeMap | undefined;
31
+ hostShareScopeMap?: ShareScopeMap;
32
32
  }>;
33
33
  }>;
34
34
  constructor(host: FederationHost);
@@ -4,16 +4,20 @@ export declare function loadEsmEntry({ entry, remoteEntryExports, }: {
4
4
  entry: string;
5
5
  remoteEntryExports: RemoteEntryExports | undefined;
6
6
  }): Promise<RemoteEntryExports>;
7
+ export declare function loadSystemJsEntry({ entry, remoteEntryExports, }: {
8
+ entry: string;
9
+ remoteEntryExports: RemoteEntryExports | undefined;
10
+ }): Promise<RemoteEntryExports>;
7
11
  export declare function loadEntryScript({ name, globalName, entry, createScriptHook, }: {
8
12
  name: string;
9
13
  globalName: string;
10
14
  entry: string;
11
- createScriptHook?: (url: string) => CreateScriptHookReturn;
15
+ createScriptHook?: (url: string, attrs?: Record<string, any> | undefined) => CreateScriptHookReturn;
12
16
  }): Promise<RemoteEntryExports>;
13
17
  export declare function getRemoteEntryUniqueKey(remoteInfo: RemoteInfo): string;
14
18
  export declare function getRemoteEntry({ remoteEntryExports, remoteInfo, createScriptHook, }: {
15
19
  remoteInfo: RemoteInfo;
16
20
  remoteEntryExports?: RemoteEntryExports | undefined;
17
- createScriptHook?: (url: string) => CreateScriptHookReturn;
21
+ createScriptHook?: (url: string, attrs?: Record<string, any> | undefined) => CreateScriptHookReturn;
18
22
  }): Promise<RemoteEntryExports | void>;
19
23
  export declare function getRemoteInfo(remote: Remote): RemoteInfo;
@@ -9,7 +9,7 @@ export declare function formatShareConfigs(globalOptions: Options, userOptions:
9
9
  shareInfos: ShareInfos;
10
10
  };
11
11
  export declare function versionLt(a: string, b: string): boolean;
12
- export declare const findVersion: (shareVersionMap: ShareScopeMap[string][string], cb?: ((prev: string, cur: string) => boolean) | undefined) => string;
12
+ export declare const findVersion: (shareVersionMap: ShareScopeMap[string][string], cb?: (prev: string, cur: string) => boolean) => string;
13
13
  export declare const isLoaded: (shared: Shared) => boolean;
14
14
  export declare function getRegisteredShare(localShareScopeMap: ShareScopeMap, pkgName: string, shareInfo: Shared, resolveShare: SyncWaterfallHook<{
15
15
  shareScopeMap: ShareScopeMap;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@module-federation/runtime",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "author": "zhouxiao <codingzx@gmail.com>",
5
5
  "main": "./dist/index.cjs.js",
6
6
  "module": "./dist/index.esm.js",
@@ -45,6 +45,6 @@
45
45
  }
46
46
  },
47
47
  "dependencies": {
48
- "@module-federation/sdk": "0.2.2"
48
+ "@module-federation/sdk": "0.2.4"
49
49
  }
50
50
  }