Skip to content

Commit 60cd259

Browse files
feat: adding support for systemjs remotes (#2676)
Co-authored-by: Zack Jackson <[email protected]>
1 parent f74e79a commit 60cd259

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

.changeset/big-cheetahs-warn.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@module-federation/runtime': minor
3+
---
4+
5+
adding support for loading systemjs based remotes

packages/runtime/src/utils/load.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,30 @@ export async function loadEsmEntry({
3333
});
3434
}
3535

36+
export async function loadSystemJsEntry({
37+
entry,
38+
remoteEntryExports,
39+
}: {
40+
entry: string;
41+
remoteEntryExports: RemoteEntryExports | undefined;
42+
}): Promise<RemoteEntryExports> {
43+
return new Promise<RemoteEntryExports>((resolve, reject) => {
44+
try {
45+
if (!remoteEntryExports) {
46+
// eslint-disable-next-line no-eval
47+
new Function(
48+
'callbacks',
49+
`System.import("${entry}").then(callbacks[0]).catch(callbacks[1])`,
50+
)([resolve, reject]);
51+
} else {
52+
resolve(remoteEntryExports);
53+
}
54+
} catch (e) {
55+
reject(e);
56+
}
57+
});
58+
}
59+
3660
export async function loadEntryScript({
3761
name,
3862
globalName,
@@ -137,6 +161,11 @@ export async function getRemoteEntry({
137161
entry,
138162
remoteEntryExports,
139163
});
164+
} else if (type === 'system') {
165+
globalLoading[uniqueKey] = loadSystemJsEntry({
166+
entry,
167+
remoteEntryExports,
168+
});
140169
} else {
141170
globalLoading[uniqueKey] = loadEntryScript({
142171
name,

0 commit comments

Comments
 (0)