-
-
Notifications
You must be signed in to change notification settings - Fork 391
Expand file tree
/
Copy pathindex.ts
More file actions
121 lines (108 loc) · 3.93 KB
/
index.ts
File metadata and controls
121 lines (108 loc) · 3.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import {
ModuleFederation,
type UserOptions,
getGlobalFederationConstructor,
setGlobalFederationInstance,
assert,
setGlobalFederationConstructor,
} from '@module-federation/runtime-core';
import { runtimeDescMap, RUNTIME_009 } from '@module-federation/error-codes';
import { getGlobalFederationInstance } from './utils';
export {
loadScript,
loadScriptNode,
Module,
getRemoteEntry,
getRemoteInfo,
registerGlobalPlugins,
type ModuleFederationRuntimePlugin,
type Federation,
} from '@module-federation/runtime-core';
export { ModuleFederation };
export function createInstance(options: UserOptions) {
// Retrieve debug constructor
const ModuleFederationConstructor =
getGlobalFederationConstructor() || ModuleFederation;
const instance = new ModuleFederationConstructor(options);
setGlobalFederationInstance(instance);
return instance;
}
let FederationInstance: ModuleFederation | null = null;
/**
* @deprecated Use createInstance or getInstance instead
*/
export function init(options: UserOptions): ModuleFederation {
// Retrieve the same instance with the same name
const instance = getGlobalFederationInstance(options.name, options.version);
if (!instance) {
FederationInstance = createInstance(options);
return FederationInstance;
} else {
// Merge options
instance.initOptions(options);
if (!FederationInstance) {
FederationInstance = instance;
}
return instance;
}
}
export function loadRemote<T>(
...args: Parameters<ModuleFederation['loadRemote']>
): Promise<T | null> {
assert(FederationInstance, RUNTIME_009, runtimeDescMap);
const loadRemote: typeof FederationInstance.loadRemote<T> =
FederationInstance.loadRemote;
// eslint-disable-next-line prefer-spread
return loadRemote.apply(FederationInstance, args);
}
export function loadShare<T>(
...args: Parameters<ModuleFederation['loadShare']>
): Promise<false | (() => T | undefined)> {
assert(FederationInstance, RUNTIME_009, runtimeDescMap);
// eslint-disable-next-line prefer-spread
const loadShare: typeof FederationInstance.loadShare<T> =
FederationInstance.loadShare;
return loadShare.apply(FederationInstance, args);
}
export function loadShareSync<T>(
...args: Parameters<ModuleFederation['loadShareSync']>
): () => T | never {
assert(FederationInstance, RUNTIME_009, runtimeDescMap);
const loadShareSync: typeof FederationInstance.loadShareSync<T> =
FederationInstance.loadShareSync;
// eslint-disable-next-line prefer-spread
return loadShareSync.apply(FederationInstance, args);
}
export function preloadRemote(
...args: Parameters<ModuleFederation['preloadRemote']>
): ReturnType<ModuleFederation['preloadRemote']> {
assert(FederationInstance, RUNTIME_009, runtimeDescMap);
// eslint-disable-next-line prefer-spread
return FederationInstance.preloadRemote.apply(FederationInstance, args);
}
export function registerRemotes(
...args: Parameters<ModuleFederation['registerRemotes']>
): ReturnType<ModuleFederation['registerRemotes']> {
assert(FederationInstance, RUNTIME_009, runtimeDescMap);
// eslint-disable-next-line prefer-spread
return FederationInstance.registerRemotes.apply(FederationInstance, args);
}
export function registerPlugins(
...args: Parameters<ModuleFederation['registerPlugins']>
): ReturnType<ModuleFederation['registerRemotes']> {
assert(FederationInstance, RUNTIME_009, runtimeDescMap);
// eslint-disable-next-line prefer-spread
return FederationInstance.registerPlugins.apply(FederationInstance, args);
}
export function getInstance() {
return FederationInstance;
}
export function registerShared(
...args: Parameters<ModuleFederation['registerShared']>
): ReturnType<ModuleFederation['registerShared']> {
assert(FederationInstance, RUNTIME_009, runtimeDescMap);
// eslint-disable-next-line prefer-spread
return FederationInstance.registerShared.apply(FederationInstance, args);
}
// Inject for debug
setGlobalFederationConstructor(ModuleFederation);