@fulgurjs/federation 4.3.0 → 5.0.0
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/CHANGELOG.md +29 -0
- package/DESIGN.md +1 -0
- package/README.md +35 -42
- package/dist/cli.js +59 -468
- package/dist/context.cjs +5 -5
- package/dist/context.js +16 -8
- package/dist/index.cjs +97 -110
- package/dist/index.d.cts +87 -2
- package/dist/index.d.ts +87 -2
- package/dist/index.js +99 -113
- package/dist/runtime.js +22 -10
- package/dist/vue-adapter.cjs +2 -2
- package/dist/vue-adapter.js +135 -4
- package/docs//350/277/201/347/247/273/346/214/207/345/215/227.md +14 -2
- package/package.json +2 -15
- package/dist/chunk-AD2XIMBJ.js +0 -141
- package/dist/chunk-FMV5BXGS.js +0 -6
- package/dist/chunk-WBCXLR2N.js +0 -46
- package/dist/config.cjs +0 -174
- package/dist/config.d.cts +0 -106
- package/dist/config.d.ts +0 -106
- package/dist/config.js +0 -136
- package/dist/options-CRGpSmVj.d.cts +0 -100
- package/dist/options-CRGpSmVj.d.ts +0 -100
- package/dist/vue.cjs +0 -1293
- package/dist/vue.d.cts +0 -10
- package/dist/vue.d.ts +0 -10
package/dist/index.js
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
RUNTIME_VERSION
|
|
3
|
-
} from "./chunk-FMV5BXGS.js";
|
|
4
|
-
|
|
5
1
|
// src/index.ts
|
|
6
2
|
import path6 from "path";
|
|
7
3
|
import { createRequire as createRequire2 } from "module";
|
|
@@ -11,6 +7,9 @@ import { createRequire } from "module";
|
|
|
11
7
|
import fs from "fs";
|
|
12
8
|
import path from "path";
|
|
13
9
|
|
|
10
|
+
// src/version.ts
|
|
11
|
+
var RUNTIME_VERSION = "5.0.0";
|
|
12
|
+
|
|
14
13
|
// src/dev-cors.ts
|
|
15
14
|
function normalizeDevCorsOrigins(input) {
|
|
16
15
|
if (input === void 0 || input === "*") return { ok: true, value: input };
|
|
@@ -64,7 +63,7 @@ function joinUrl(base, file) {
|
|
|
64
63
|
function normalizeRemoteValue(key, value, filename, warnings) {
|
|
65
64
|
if (typeof value === "function") {
|
|
66
65
|
warnings.push(
|
|
67
|
-
|
|
66
|
+
`\u8FDC\u7A0B\u5E94\u7528 "${key}" \u4F7F\u7528\u52A8\u6001 Promise \u914D\u7F6E\uFF0C\u65E0\u6CD5\u76F4\u63A5\u5199\u5165\u6784\u5EFA\u4EA7\u7269\u3002\u8BF7\u5728\u8FD0\u884C\u65F6\u8C03\u7528 registerRemote() \u6CE8\u518C\uFF1B\u914D\u7F6E\u4E2D\u7684\u952E\u4ECD\u7528\u4E8E\u6539\u5199 import \u8BED\u6CD5\u3002`
|
|
68
67
|
);
|
|
69
68
|
return {
|
|
70
69
|
key,
|
|
@@ -84,7 +83,7 @@ function normalizeRemoteValue(key, value, filename, warnings) {
|
|
|
84
83
|
selfName = raw.slice(0, at);
|
|
85
84
|
raw = raw.slice(at + 1);
|
|
86
85
|
} else if (at === 0 || at === raw.length - 1) {
|
|
87
|
-
throw new Error(
|
|
86
|
+
throw new Error(`\u8FDC\u7A0B\u5E94\u7528 "${key}" \u7684\u5730\u5740 "${raw}" \u65E0\u6548\uFF1A@ \u4F4D\u7F6E\u9519\u8BEF\u3002\u8BF7\u4F7F\u7528 name@url\uFF0C\u6216\u76F4\u63A5\u586B\u5199\u8FDC\u7A0B\u5730\u5740\u3002`);
|
|
88
87
|
}
|
|
89
88
|
}
|
|
90
89
|
const resolveEntry = (rawUrl, mode) => {
|
|
@@ -147,10 +146,10 @@ function normalizeShared(shared, shareScopeDefault, pkgDependencies, root, warni
|
|
|
147
146
|
for (const [configKey, hint] of entries) {
|
|
148
147
|
if (hint.eager && hint.import === false) {
|
|
149
148
|
configError(
|
|
150
|
-
`CFG-008
|
|
149
|
+
`CFG-008\uFF1Ashared["${configKey}"] \u4E0D\u80FD\u540C\u65F6\u914D\u7F6E eager \u548C import:false`,
|
|
151
150
|
hint,
|
|
152
|
-
"eager
|
|
153
|
-
`shared: { '${configKey}': { eager: true } } //
|
|
151
|
+
"eager \u9700\u8981\u5C06\u672C\u5730\u526F\u672C\u6253\u8FDB\u521D\u59CB chunk\uFF0C\u800C import:false \u8868\u793A\u6CA1\u6709\u672C\u5730\u526F\u672C",
|
|
152
|
+
`shared: { '${configKey}': { eager: true } } // \u6216\u53D6\u6D88 eager\uFF1A{ '${configKey}': { import: false } }`
|
|
154
153
|
);
|
|
155
154
|
}
|
|
156
155
|
const canonical = configKey.endsWith("/") ? configKey.slice(0, -1) : configKey;
|
|
@@ -161,10 +160,10 @@ function normalizeShared(shared, shareScopeDefault, pkgDependencies, root, warni
|
|
|
161
160
|
const dup = out.find((s) => s.shareKey === shareKeyOfHint && s.shareScope === shareScopeOfHint);
|
|
162
161
|
if (dup) {
|
|
163
162
|
configError(
|
|
164
|
-
`CFG-008
|
|
163
|
+
`CFG-008\uFF1A\u5171\u4EAB\u952E "${shareKeyOfHint}" \u5728\u4F5C\u7528\u57DF "${shareScopeOfHint}" \u4E2D\u91CD\u590D\u58F0\u660E\uFF08\u914D\u7F6E\u952E "${dup.configKey}" \u4E0E "${configKey}"\uFF09`,
|
|
165
164
|
configKey,
|
|
166
|
-
"
|
|
167
|
-
|
|
165
|
+
"\u6BCF\u4E2A\u5171\u4EAB\u4F5C\u7528\u57DF\u5185\uFF0C\u540C\u4E00 shareKey \u53EA\u80FD\u58F0\u660E\u4E00\u6B21",
|
|
166
|
+
`\u5408\u5E76\u914D\u7F6E\uFF1A{ '${shareKeyOfHint}': { singleton: true } } // \u6216\u4F7F\u7528\u4E0D\u540C\u7684 shareKey`
|
|
168
167
|
);
|
|
169
168
|
}
|
|
170
169
|
let requiredVersion;
|
|
@@ -179,7 +178,7 @@ function normalizeShared(shared, shareScopeDefault, pkgDependencies, root, warni
|
|
|
179
178
|
} else {
|
|
180
179
|
requiredVersion = false;
|
|
181
180
|
warnings.push(
|
|
182
|
-
|
|
181
|
+
`\u5171\u4EAB\u4F9D\u8D56 "${configKey}" \u65E0\u6CD5\u4ECE package.json \u63A8\u65AD requiredVersion\uFF0C\u6682\u63A5\u53D7\u4EFB\u610F\u7248\u672C\u3002\u5EFA\u8BAE\u663E\u5F0F\u586B\u5199\u7248\u672C\u7EA6\u675F\u3002`
|
|
183
182
|
);
|
|
184
183
|
}
|
|
185
184
|
}
|
|
@@ -193,7 +192,7 @@ function normalizeShared(shared, shareScopeDefault, pkgDependencies, root, warni
|
|
|
193
192
|
} else {
|
|
194
193
|
version = "0.0.0";
|
|
195
194
|
warnings.push(
|
|
196
|
-
|
|
195
|
+
`\u5171\u4EAB\u4F9D\u8D56 "${configKey}" \u672A\u627E\u5230\u5DF2\u5B89\u88C5\u7248\u672C\uFF0C\u6682\u6309 0.0.0 \u6CE8\u518C\uFF1B\u4ECD\u53EF\u4F7F\u7528\uFF0C\u4F46\u7248\u672C\u9009\u62E9\u4F18\u5148\u7EA7\u6700\u4F4E\u3002\u8BF7\u68C0\u67E5\u4F9D\u8D56\u662F\u5426\u5B89\u88C5\u6216\u663E\u5F0F\u586B\u5199 shared.version\u3002`
|
|
197
196
|
);
|
|
198
197
|
}
|
|
199
198
|
}
|
|
@@ -224,61 +223,64 @@ function configError(what, got, expect, example) {
|
|
|
224
223
|
const gotText = typeof got === "string" ? `"${got}"` : JSON.stringify(got);
|
|
225
224
|
throw new Error(
|
|
226
225
|
[
|
|
227
|
-
`[fulgurjs]
|
|
228
|
-
`
|
|
229
|
-
`
|
|
230
|
-
`
|
|
226
|
+
`[fulgurjs] federation() \u914D\u7F6E\u65E0\u6548\uFF1A${what}`,
|
|
227
|
+
` \u5F53\u524D\u503C\uFF1A${gotText}`,
|
|
228
|
+
` \u9884\u671F\u503C\uFF1A${expect}`,
|
|
229
|
+
` \u4FEE\u6CD5\u793A\u4F8B\uFF1A${example}`
|
|
231
230
|
].join("\n")
|
|
232
231
|
);
|
|
233
232
|
}
|
|
233
|
+
var REMOVED_OPTIONS = {
|
|
234
|
+
remoteType: `// \u5220\u9664 remoteType\uFF08fulgurjs \u53EA\u4EA7\u51FA ESM module remote\uFF0C\u65E0 script/var \u4E92\u64CD\u4F5C\uFF09`,
|
|
235
|
+
library: `// \u5220\u9664 library\uFF08remoteEntry \u6052\u4E3A ESM\uFF0C\u65E0 UMD/var \u8F93\u51FA\u5F62\u6001\uFF09`,
|
|
236
|
+
automaticAsyncBoundary: `// \u5220\u9664 automaticAsyncBoundary\uFF08TLA \u81EA\u52A8\u5F02\u6B65\u8FB9\u754C\u59CB\u7EC8\u5F00\u542F\uFF0C\u65E0\u624B\u5DE5 bootstrap \u6A21\u5F0F\uFF09`,
|
|
237
|
+
dataPrefetch: `// \u5220\u9664 dataPrefetch\uFF08preloadRemote() \u80FD\u529B\u59CB\u7EC8\u53EF\u7528\uFF0C\u65E0\u9700\u5F00\u5173\uFF09`,
|
|
238
|
+
usedExports: `// \u5220\u9664 usedExports\uFF08Rollup/Rolldown \u539F\u751F tree-shaking \u5DF2\u8986\u76D6\uFF09`,
|
|
239
|
+
ignoreUnusedSharedExports: `// \u5220\u9664 ignoreUnusedSharedExports\uFF08Rollup/Rolldown \u539F\u751F tree-shaking \u5DF2\u8986\u76D6\uFF09`
|
|
240
|
+
};
|
|
241
|
+
var REMOVED_OPTION_CAUSES = {
|
|
242
|
+
remoteType: '\u8BE5\u5B57\u6BB5\u53EA\u63A5\u53D7\u552F\u4E00\u503C "module"\uFF0C\u4ECE\u672A\u4EA7\u751F\u5176\u4ED6\u884C\u4E3A',
|
|
243
|
+
library: "\u8BE5\u5B57\u6BB5\u4ECE\u672A\u53C2\u4E0E\u8F93\u51FA\u2014\u2014remoteEntry \u6052\u4E3A ESM",
|
|
244
|
+
automaticAsyncBoundary: "\u8BE5\u5B57\u6BB5\u63A5\u53D7\u4EFB\u610F\u503C\u4E14\u6052\u4E3A true\uFF08TLA \u5929\u7136\u5F02\u6B65\u8FB9\u754C\uFF09",
|
|
245
|
+
dataPrefetch: "\u8BE5\u5B57\u6BB5\u63A5\u53D7\u4EFB\u610F\u503C\u4E14\u6052\u4E3A true\uFF08\u9884\u8F7D\u80FD\u529B\u4E0D\u7531\u6B64\u5F00\u5173\u63A7\u5236\uFF09",
|
|
246
|
+
usedExports: "\u8BE5\u5B57\u6BB5\u662F no-op\uFF08\u6253\u5305\u5668\u539F\u751F tree-shaking \u5DF2\u8986\u76D6\uFF09",
|
|
247
|
+
ignoreUnusedSharedExports: "\u8BE5\u5B57\u6BB5\u662F no-op\uFF08\u6253\u5305\u5668\u539F\u751F tree-shaking \u5DF2\u8986\u76D6\uFF09"
|
|
248
|
+
};
|
|
234
249
|
function validateOptions(options) {
|
|
235
250
|
if (options.name === void 0 || options.name === null || options.name === "") {
|
|
236
251
|
configError(
|
|
237
|
-
"
|
|
252
|
+
"\u7F3A\u5C11\u5FC5\u586B\u7684 name\uFF08\u5BB9\u5668\u540D\u79F0\uFF0C\u4E5F\u662F\u9875\u9762\u5185\u7684\u552F\u4E00\u6807\u8BC6\uFF09",
|
|
238
253
|
options.name,
|
|
239
|
-
"
|
|
254
|
+
"\u540C\u4E00\u9875\u9762\u7684\u5BBF\u4E3B\u4E0E\u8FDC\u7A0B\u4E4B\u95F4\u552F\u4E00\u7684\u975E\u7A7A\u5B57\u7B26\u4E32",
|
|
240
255
|
`federation({ name: 'my-app', ... })`
|
|
241
256
|
);
|
|
242
257
|
}
|
|
243
258
|
if (typeof options.name !== "string" || !/^[a-zA-Z][\w.-]*$/.test(options.name)) {
|
|
244
259
|
configError(
|
|
245
|
-
"
|
|
260
|
+
"name \u683C\u5F0F\u4E0D\u6B63\u786E\uFF1A\u5FC5\u987B\u4EE5\u82F1\u6587\u5B57\u6BCD\u5F00\u5934\uFF0C\u4E0D\u80FD\u5305\u542B\u7A7A\u683C\u6216\u659C\u6760",
|
|
246
261
|
options.name,
|
|
247
|
-
'
|
|
262
|
+
'\u4F8B\u5982 "my-app" \u6216 "host-app"',
|
|
248
263
|
`federation({ name: 'my-app', ... })`
|
|
249
264
|
);
|
|
250
265
|
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
'CFG-011: library.type other than "module"/"esm" is not supported',
|
|
262
|
-
options.library.type,
|
|
263
|
-
'"module" \u6216 "esm"\uFF08\u7F3A\u7701\u5373\u53EF\uFF09\u2014\u2014webpack UMD/var \u8F93\u51FA\u4E92\u64CD\u4F5C\u672A\u5B9E\u73B0',
|
|
264
|
-
`// \u5220\u9664 library \u914D\u7F6E\uFF08fulgurjs remoteEntry \u6052\u4E3A ESM\uFF09`
|
|
265
|
-
);
|
|
266
|
-
}
|
|
267
|
-
if (options.automaticAsyncBoundary === false) {
|
|
268
|
-
configError(
|
|
269
|
-
"CFG-011: automaticAsyncBoundary=false cannot be honored",
|
|
270
|
-
options.automaticAsyncBoundary,
|
|
271
|
-
"\u7F3A\u7701\u6216 true\u2014\u2014fulgurjs \u4F7F\u7528 TLA \u81EA\u52A8\u5F02\u6B65\u8FB9\u754C\uFF0C\u4E0D\u5B58\u5728\u624B\u5DE5 bootstrap \u6A21\u5F0F",
|
|
272
|
-
`// \u5220\u9664 automaticAsyncBoundary \u914D\u7F6E\uFF08\u5BB9\u5668\u534F\u8BAE\u5929\u7136\u5F02\u6B65\uFF09`
|
|
273
|
-
);
|
|
266
|
+
for (const [field, fix] of Object.entries(REMOVED_OPTIONS)) {
|
|
267
|
+
const value = options[field];
|
|
268
|
+
if (value !== void 0) {
|
|
269
|
+
configError(
|
|
270
|
+
`CFG-011\uFF1A\u9009\u9879 "${field}" \u5DF2\u5728 5.0.0 \u5220\u9664`,
|
|
271
|
+
value,
|
|
272
|
+
REMOVED_OPTION_CAUSES[field],
|
|
273
|
+
fix
|
|
274
|
+
);
|
|
275
|
+
}
|
|
274
276
|
}
|
|
275
277
|
for (const key of Object.keys(options.exposes ?? {})) {
|
|
276
278
|
const norm = key.startsWith("./") ? key : `./${key}`;
|
|
277
279
|
if (norm === SETUP_EXPOSE_KEY) {
|
|
278
280
|
configError(
|
|
279
|
-
`CFG-012
|
|
281
|
+
`CFG-012\uFF1Aexposes \u952E "${norm}" \u5DF2\u7531\u8054\u90A6 setup \u5165\u53E3\u4FDD\u7559`,
|
|
280
282
|
key,
|
|
281
|
-
|
|
283
|
+
`\u4F7F\u7528\u5176\u4ED6\u516C\u5F00 expose \u540D\u79F0\uFF1B\u5185\u90E8\u4FDD\u7559\u952E "${SETUP_EXPOSE_KEY}" \u7531 setup \u9009\u9879\u81EA\u52A8\u751F\u6210`,
|
|
282
284
|
`// \u628A\u8BE5 expose \u6539\u540D\uFF0C\u6216\u5220\u9664\u5B83\u5E76\u628A\u539F\u6587\u4EF6\u8DEF\u5F84\u914D\u7F6E\u5230 federation({ setup })`
|
|
283
285
|
);
|
|
284
286
|
}
|
|
@@ -286,29 +288,29 @@ function validateOptions(options) {
|
|
|
286
288
|
if (options.setup !== void 0) {
|
|
287
289
|
if (typeof options.setup !== "string" || options.setup.trim() === "") {
|
|
288
290
|
configError(
|
|
289
|
-
"CFG-012
|
|
291
|
+
"CFG-012\uFF1Asetup \u5FC5\u987B\u662F\u76F8\u5BF9\u5E94\u7528\u6839\u76EE\u5F55\u7684\u975E\u7A7A\u6A21\u5757\u8DEF\u5F84",
|
|
290
292
|
options.setup,
|
|
291
|
-
'
|
|
293
|
+
'\u4F8B\u5982 "./src/fulgurjs/setup.ts"\uFF08\u9ED8\u8BA4\u5BFC\u51FA setup(context)\uFF0C\u53EF\u9009\u5177\u540D\u5BFC\u51FA onSession(context)\uFF09',
|
|
292
294
|
`federation({ name: 'my-app', setup: './src/fulgurjs/setup.ts', ... })`
|
|
293
295
|
);
|
|
294
296
|
}
|
|
295
297
|
}
|
|
296
298
|
if (options.exposes !== void 0 && typeof options.exposes !== "object") {
|
|
297
|
-
configError("
|
|
299
|
+
configError("exposes \u5FC5\u987B\u662F\u5BF9\u8C61", options.exposes, '\u5F62\u5982 { "./Module": "./src/path" } \u7684\u5BF9\u8C61', `exposes: { './Button': './src/Button.vue' }`);
|
|
298
300
|
}
|
|
299
301
|
if (options.remotes !== void 0 && typeof options.remotes !== "object") {
|
|
300
|
-
configError("
|
|
302
|
+
configError("remotes \u5FC5\u987B\u662F\u5BF9\u8C61", options.remotes, "\u5F62\u5982 { \u540D\u79F0: \u5730\u5740 | { dev, prod } | \u52A8\u6001\u52A0\u8F7D\u51FD\u6570 } \u7684\u5BF9\u8C61", `remotes: { 'remote-a': 'http://localhost:5101' }`);
|
|
301
303
|
}
|
|
302
304
|
if (options.shared !== void 0 && typeof options.shared !== "object") {
|
|
303
|
-
configError("
|
|
305
|
+
configError("shared \u5FC5\u987B\u662F\u6570\u7EC4\u6216\u5BF9\u8C61", options.shared, '["vue"] \u6216 { vue: { singleton: true } }', `shared: { vue: { singleton: true } }`);
|
|
304
306
|
}
|
|
305
307
|
for (const [key, val] of Object.entries(options.exposes ?? {})) {
|
|
306
308
|
const importPath = typeof val === "string" ? val : val?.import;
|
|
307
309
|
if (!importPath || typeof importPath !== "string") {
|
|
308
310
|
configError(
|
|
309
|
-
`exposes["${key}"].import
|
|
311
|
+
`exposes["${key}"].import \u7F3A\u5931`,
|
|
310
312
|
val,
|
|
311
|
-
'
|
|
313
|
+
'\u6E90\u7801\u8DEF\u5F84\u5B57\u7B26\u4E32\uFF0C\u6216 { import: "./src/path" }',
|
|
312
314
|
`exposes: { '${key.startsWith("./") ? key : "./" + key}': './src/views/Home.vue' }`
|
|
313
315
|
);
|
|
314
316
|
}
|
|
@@ -316,32 +318,32 @@ function validateOptions(options) {
|
|
|
316
318
|
for (const [key, val] of Object.entries(options.remotes ?? {})) {
|
|
317
319
|
if (/[/@\s]/.test(key)) {
|
|
318
320
|
configError(
|
|
319
|
-
`remotes
|
|
321
|
+
`remotes \u952E "${key}" \u5305\u542B\u975E\u6CD5\u5B57\u7B26\uFF08@\u3001/ \u6216\u7A7A\u767D\u5B57\u7B26\uFF09`,
|
|
320
322
|
key,
|
|
321
|
-
'
|
|
323
|
+
'\u4F5C\u4E3A import \u524D\u7F00\u4F7F\u7528\u7684\u7EAF\u6A21\u5757\u540D\uFF0C\u4F8B\u5982 "remote-a"',
|
|
322
324
|
`remotes: { 'remote-a': '...' } // then: import X from 'remote-a/Button'`
|
|
323
325
|
);
|
|
324
326
|
}
|
|
325
327
|
if (typeof val === "function") continue;
|
|
326
328
|
const cfg = typeof val === "string" ? { external: val } : val;
|
|
327
329
|
if (typeof val === "string" && val.trim() === "") {
|
|
328
|
-
configError(`remotes["${key}"]
|
|
330
|
+
configError(`remotes["${key}"] \u662F\u7A7A\u5B57\u7B26\u4E32`, val, "\u8FDC\u7A0B\u57FA\u7840\u5730\u5740\u6216\u5B8C\u6574\u5165\u53E3\u5730\u5740", `remotes: { '${key}': 'http://localhost:5101' }`);
|
|
329
331
|
}
|
|
330
332
|
if (typeof val !== "string" && typeof cfg !== "object") {
|
|
331
|
-
configError(`remotes["${key}"]
|
|
333
|
+
configError(`remotes["${key}"] \u7684\u503C\u7C7B\u578B\u4E0D\u53D7\u652F\u6301`, val, "\u5B57\u7B26\u4E32\u3001{ dev?, prod?, external? } \u5BF9\u8C61\u6216\u52A8\u6001\u52A0\u8F7D\u51FD\u6570", `remotes: { '${key}': { dev: 'http://localhost:5101', prod: '/remote-a' } }`);
|
|
332
334
|
}
|
|
333
335
|
if (!cfg?.external && !cfg?.dev && !cfg?.prod) {
|
|
334
336
|
configError(
|
|
335
|
-
`remotes["${key}"]
|
|
337
|
+
`remotes["${key}"] \u6CA1\u6709\u5730\u5740\uFF08external\u3001dev\u3001prod \u81F3\u5C11\u586B\u5199\u4E00\u4E2A\uFF09`,
|
|
336
338
|
val,
|
|
337
|
-
"
|
|
339
|
+
"\u81F3\u5C11\u4E00\u4E2A\u5730\u5740\uFF1B\u53EA\u586B\u4E00\u4E2A\u5730\u5740\u65F6\u5F00\u53D1\u4E0E\u751F\u4EA7\u5171\u7528",
|
|
338
340
|
`remotes: { '${key}': 'http://localhost:5101' }
|
|
339
|
-
//
|
|
341
|
+
// \u6216\u5206\u522B\u586B\u5199\uFF1A{ '${key}': { dev: 'http://localhost:5101', prod: '/${key}' } }`
|
|
340
342
|
);
|
|
341
343
|
}
|
|
342
344
|
if (cfg.timeout !== void 0 && (typeof cfg.timeout !== "number" || !Number.isFinite(cfg.timeout) || cfg.timeout <= 0)) {
|
|
343
345
|
configError(
|
|
344
|
-
`CFG-009
|
|
346
|
+
`CFG-009\uFF1Aremotes["${key}"].timeout \u5FC5\u987B\u662F\u5927\u4E8E 0 \u7684\u6709\u9650\u6BEB\u79D2\u6570`,
|
|
345
347
|
cfg.timeout,
|
|
346
348
|
"e.g. 15000\uFF08\u7701\u7565\u7528\u9ED8\u8BA4 15s\uFF09",
|
|
347
349
|
`remotes: { '${key}': { external: '\u2026', timeout: 15000 } }`
|
|
@@ -349,7 +351,7 @@ function validateOptions(options) {
|
|
|
349
351
|
}
|
|
350
352
|
if (cfg.retries !== void 0 && (typeof cfg.retries !== "number" || !Number.isInteger(cfg.retries) || cfg.retries < 0 || cfg.retries > 10)) {
|
|
351
353
|
configError(
|
|
352
|
-
`CFG-009
|
|
354
|
+
`CFG-009\uFF1Aremotes["${key}"].retries \u5FC5\u987B\u662F 0 \u5230 10 \u7684\u6574\u6570`,
|
|
353
355
|
cfg.retries,
|
|
354
356
|
"e.g. 2\uFF08\u7701\u7565\u7528\u9ED8\u8BA4 2\uFF1B\u4E0A\u9650 10 \u9632\u9000\u907F\u98CE\u66B4\uFF09",
|
|
355
357
|
`remotes: { '${key}': { external: '\u2026', retries: 2 } }`
|
|
@@ -359,7 +361,7 @@ function validateOptions(options) {
|
|
|
359
361
|
if (brk) {
|
|
360
362
|
if (brk.threshold !== void 0 && (typeof brk.threshold !== "number" || !Number.isFinite(brk.threshold) || brk.threshold <= 0)) {
|
|
361
363
|
configError(
|
|
362
|
-
`CFG-009
|
|
364
|
+
`CFG-009\uFF1Aremotes["${key}"].breaker.threshold \u5FC5\u987B\u662F\u5927\u4E8E 0 \u7684\u6709\u9650\u6570\u5B57`,
|
|
363
365
|
brk.threshold,
|
|
364
366
|
"e.g. 5\uFF08\u8FDE\u7EED\u5931\u8D25 5 \u6B21\u540E\u7194\u65AD\uFF09",
|
|
365
367
|
`remotes: { '${key}': { external: '\u2026', breaker: { threshold: 5, resetMs: 30000 } } }`
|
|
@@ -367,7 +369,7 @@ function validateOptions(options) {
|
|
|
367
369
|
}
|
|
368
370
|
if (brk.resetMs !== void 0 && (typeof brk.resetMs !== "number" || !Number.isFinite(brk.resetMs) || brk.resetMs <= 0)) {
|
|
369
371
|
configError(
|
|
370
|
-
`CFG-009
|
|
372
|
+
`CFG-009\uFF1Aremotes["${key}"].breaker.resetMs \u5FC5\u987B\u662F\u5927\u4E8E 0 \u7684\u6709\u9650\u6BEB\u79D2\u6570`,
|
|
371
373
|
brk.resetMs,
|
|
372
374
|
"e.g. 30000\uFF08\u7194\u65AD 30s \u540E\u534A\u5F00\uFF09",
|
|
373
375
|
`remotes: { '${key}': { external: '\u2026', breaker: { threshold: 5, resetMs: 30000 } } }`
|
|
@@ -377,15 +379,15 @@ function validateOptions(options) {
|
|
|
377
379
|
for (const slot of ["dev", "prod", "external"]) {
|
|
378
380
|
const v = cfg[slot];
|
|
379
381
|
if (v !== void 0 && typeof v !== "string") {
|
|
380
|
-
configError(`remotes["${key}"].${slot}
|
|
382
|
+
configError(`remotes["${key}"].${slot} \u5FC5\u987B\u662F\u5B57\u7B26\u4E32`, v, "URL \u5B57\u7B26\u4E32", `remotes: { '${key}': { ${slot}: 'http://localhost:5101' } }`);
|
|
381
383
|
}
|
|
382
384
|
if (slot !== "external") {
|
|
383
385
|
const slotUrl = cfg[slot];
|
|
384
386
|
if (typeof slotUrl === "string" && /^[A-Za-z][\w.-]*@/.test(slotUrl)) {
|
|
385
387
|
configError(
|
|
386
|
-
`CFG-007
|
|
388
|
+
`CFG-007\uFF1Aremotes["${key}"].${slot} \u4F7F\u7528\u4E86 name@url \u524D\u7F00\uFF1B\u5BF9\u8C61\u5199\u6CD5\u4E0D\u652F\u6301\u8BE5\u524D\u7F00\uFF0C\u5426\u5219\u4F1A\u62FC\u51FA\u9519\u8BEF\u5730\u5740`,
|
|
387
389
|
slotUrl,
|
|
388
|
-
"
|
|
390
|
+
"\u4E0D\u5E26\u524D\u7F00\u7684 URL\uFF08\u8FDC\u7A0B\u540D\u79F0\u9ED8\u8BA4\u4F7F\u7528\u952E\u540D\uFF09\uFF1B\u9700\u8981\u6539\u540D\u65F6\u6539\u7528\u5B57\u7B26\u4E32\u5199\u6CD5",
|
|
389
391
|
`remotes: { '${key}': 'http://localhost:5101' } // or: remotes: { '${key}': { dev: 'http://localhost:5101', prod: '/${key}' } }`
|
|
390
392
|
);
|
|
391
393
|
}
|
|
@@ -403,7 +405,7 @@ function validateOptions(options) {
|
|
|
403
405
|
}
|
|
404
406
|
if (options.devFsRoot !== void 0 && typeof options.devFsRoot !== "boolean") {
|
|
405
407
|
configError(
|
|
406
|
-
"
|
|
408
|
+
"devFsRoot \u5FC5\u987B\u662F\u5E03\u5C14\u503C",
|
|
407
409
|
options.devFsRoot,
|
|
408
410
|
"true\uFF08dev manifest \u643A\u5E26 fsRoot\uFF0C\u73B0\u72B6\u9ED8\u8BA4\uFF09\u6216 false\uFF08\u4E0D\u66B4\u9732\u672C\u673A\u8DEF\u5F84\uFF09",
|
|
409
411
|
`devFsRoot: false`
|
|
@@ -413,11 +415,11 @@ function validateOptions(options) {
|
|
|
413
415
|
function normalizeOptions(options, root, command) {
|
|
414
416
|
const warnings = [];
|
|
415
417
|
validateOptions(options);
|
|
416
|
-
if (!options.name) throw new Error(
|
|
418
|
+
if (!options.name) throw new Error('[fulgurjs] \u7F3A\u5C11\u5FC5\u586B\u914D\u7F6E name\u3002\u8BF7\u5728 federation({ name: "\u5E94\u7528\u540D" }) \u4E2D\u58F0\u660E\u552F\u4E00\u7684\u5E94\u7528\u540D\u3002');
|
|
417
419
|
const exposes = [];
|
|
418
420
|
for (const [rawName, val] of Object.entries(options.exposes ?? {})) {
|
|
419
421
|
const name = rawName.startsWith("./") ? rawName : `./${rawName}`;
|
|
420
|
-
if (rawName !== name) warnings.push(
|
|
422
|
+
if (rawName !== name) warnings.push(`\u66B4\u9732\u6A21\u5757\u952E "${rawName}" \u5DF2\u89C4\u8303\u5316\u4E3A "${name}"\u3002\u5EFA\u8BAE\u5728 exposes \u4E2D\u76F4\u63A5\u4F7F\u7528\u5E26 ./ \u524D\u7F00\u7684\u952E\u3002`);
|
|
421
423
|
const hint = typeof val === "string" ? { import: val } : val;
|
|
422
424
|
exposes.push({ name, import: hint.import, chunkName: hint.name });
|
|
423
425
|
}
|
|
@@ -437,18 +439,18 @@ function normalizeOptions(options, root, command) {
|
|
|
437
439
|
const seenNames = /* @__PURE__ */ new Map();
|
|
438
440
|
for (const r of remotes) {
|
|
439
441
|
if (seenNames.has(r.name) && seenNames.get(r.name) !== r.key) {
|
|
440
|
-
warnings.push(
|
|
442
|
+
warnings.push(`\u8FDC\u7A0B\u540D\u79F0 "${r.name}" \u88AB\u591A\u4E2A remotes \u952E\u91CD\u590D\u58F0\u660E\uFF1B\u8BF7\u4E3A\u6BCF\u4E2A\u8FDC\u7A0B\u4F7F\u7528\u552F\u4E00\u540D\u79F0\u3002`);
|
|
441
443
|
}
|
|
442
444
|
seenNames.set(r.name, r.key);
|
|
443
445
|
}
|
|
444
446
|
if ((options.exposes === void 0 || Object.keys(options.exposes).length === 0) && (options.remotes === void 0 || Object.keys(options.remotes).length === 0)) {
|
|
445
447
|
warnings.push(
|
|
446
|
-
|
|
448
|
+
"federation() \u672A\u914D\u7F6E exposes \u6216 remotes\uFF0C\u76EE\u524D\u53EA\u4F1A\u6CE8\u518C\u5171\u4EAB\u4F9D\u8D56\u3002\u82E5\u8981\u63D0\u4F9B\u8FDC\u7A0B\u6A21\u5757\uFF0C\u8BF7\u914D\u7F6E exposes\uFF1B\u82E5\u8981\u6D88\u8D39\u8FDC\u7A0B\u5E94\u7528\uFF0C\u8BF7\u914D\u7F6E remotes\u3002"
|
|
447
449
|
);
|
|
448
450
|
}
|
|
449
451
|
if (Object.keys(options.exposes ?? {}).length === 0 && Object.keys(options.remotes ?? {}).length > 0) {
|
|
450
452
|
warnings.push(
|
|
451
|
-
|
|
453
|
+
`\u5E94\u7528 "${options.name}" \u914D\u7F6E\u4E86 remotes\uFF0C\u4F46\u6CA1\u6709 exposes\uFF0C\u56E0\u6B64\u662F\u7EAF\u5BBF\u4E3B\uFF1B\u5176\u4ED6\u5E94\u7528\u65E0\u6CD5\u4ECE\u5B83\u52A0\u8F7D\u6A21\u5757\u3002\u82E5\u5E0C\u671B\u5BF9\u5916\u63D0\u4F9B\u6A21\u5757\uFF0C\u8BF7\u6DFB\u52A0 exposes\u3002`
|
|
452
454
|
);
|
|
453
455
|
}
|
|
454
456
|
return {
|
|
@@ -460,7 +462,6 @@ function normalizeOptions(options, root, command) {
|
|
|
460
462
|
remotes,
|
|
461
463
|
shared,
|
|
462
464
|
shareScope: shareScopeDefault,
|
|
463
|
-
remoteType: "module",
|
|
464
465
|
runtime: options.runtime,
|
|
465
466
|
runtimeChunk: options.runtimeChunk,
|
|
466
467
|
manifest: options.manifest === void 0 ? true : !!options.manifest,
|
|
@@ -1311,7 +1312,7 @@ export { ${nsAs[1]} };`);
|
|
|
1311
1312
|
const inner = clauseRaw.slice(clauseRaw.indexOf("{") + 1, clauseRaw.lastIndexOf("}"));
|
|
1312
1313
|
if (/export\s+\*/.test(clauseRaw) && !clauseRaw.includes("{")) {
|
|
1313
1314
|
throw new Error(
|
|
1314
|
-
`[fulgurjs] "export * from '${spec2}'"
|
|
1315
|
+
`[fulgurjs] \u5171\u4EAB\u6A21\u5757\u4E0D\u652F\u6301 "export * from '${spec2}'"\uFF1AESM \u65E0\u6CD5\u4E3A\u52A8\u6001\u534F\u5546\u7684\u6A21\u5757\u521B\u5EFA\u901A\u914D\u7B26\u5BFC\u51FA\u7ED1\u5B9A\u3002\u8BF7\u6539\u4E3A\u660E\u786E\u5217\u51FA\u540D\u79F0\uFF1A"export { a, b } from '${spec2}'"\u3002`
|
|
1315
1316
|
);
|
|
1316
1317
|
}
|
|
1317
1318
|
const bindings = parseBindings(inner).map((b) => b.imported === "default" ? "default" : b.imported);
|
|
@@ -1378,13 +1379,13 @@ async function fetchManifest(devEntry, attempts = 30, delayMs = 2e3) {
|
|
|
1378
1379
|
const parsed = parseManifest(await res.json());
|
|
1379
1380
|
if (parsed.unsupportedVersion) {
|
|
1380
1381
|
console.warn(
|
|
1381
|
-
`[fulgurjs]
|
|
1382
|
+
`[fulgurjs] \u7C7B\u578B\u751F\u6210\uFF1A\u8FDC\u7A0B manifest \u7684\u534F\u8BAE\u7248\u672C\u4E3A ${parsed.unsupportedVersion}\uFF0C\u5F53\u524D\u4EC5\u652F\u6301\u7248\u672C 1\uFF1B\u5DF2\u8DF3\u8FC7\u7C7B\u578B\u6620\u5C04\u3002\u8BF7\u5BF9\u9F50\u5BBF\u4E3B\u4E0E\u8FDC\u7A0B\u7684 @fulgurjs/federation \u7248\u672C\u3002`
|
|
1382
1383
|
);
|
|
1383
1384
|
return null;
|
|
1384
1385
|
}
|
|
1385
1386
|
if (parsed.issues.length > 0) {
|
|
1386
1387
|
console.warn(
|
|
1387
|
-
`[fulgurjs]
|
|
1388
|
+
`[fulgurjs] \u7C7B\u578B\u751F\u6210\uFF1A\u8FDC\u7A0B manifest \u5951\u7EA6\u6821\u9A8C\u5931\u8D25\uFF08${manifestUrl.href}\uFF09\uFF1A` + parsed.issues.map((x) => `${x.field}: ${x.message}`).join("\uFF1B") + `\u3002\u7C7B\u578B\u6620\u5C04\u8DF3\u8FC7\u3002`
|
|
1388
1389
|
);
|
|
1389
1390
|
return null;
|
|
1390
1391
|
}
|
|
@@ -1476,13 +1477,13 @@ async function generateDevTypes(options, _server) {
|
|
|
1476
1477
|
if (!remote.devEntry || remote.promise) continue;
|
|
1477
1478
|
const manifest = await fetchManifest(remote.devEntry);
|
|
1478
1479
|
if (!manifest || !manifest.exposes) {
|
|
1479
|
-
console.warn(`[fulgurjs]
|
|
1480
|
+
console.warn(`[fulgurjs] \u7C7B\u578B\u751F\u6210\uFF1A\u8FDC\u7A0B\u5E94\u7528 "${remote.key}" \u7684\u5F00\u53D1 manifest \u4E0D\u53EF\u7528\uFF0C\u5DF2\u8DF3\u8FC7\u7C7B\u578B\u6620\u5C04\u3002\u8BF7\u68C0\u67E5\u8FDC\u7A0B\u5F00\u53D1\u670D\u52A1\u548C manifest \u5730\u5740\u3002`);
|
|
1480
1481
|
continue;
|
|
1481
1482
|
}
|
|
1482
1483
|
const remoteRoot = manifest.fsRoot;
|
|
1483
1484
|
if (!remoteRoot) {
|
|
1484
1485
|
console.warn(
|
|
1485
|
-
`[fulgurjs]
|
|
1486
|
+
`[fulgurjs] \u7C7B\u578B\u751F\u6210\uFF1A\u8FDC\u7A0B\u5E94\u7528 "${remote.key}" \u7684 manifest \u672A\u643A\u5E26 fsRoot\uFF08\u53EF\u80FD\u5173\u95ED\u4E86 devFsRoot\uFF0C\u6216\u8FDC\u7A0B\u63D2\u4EF6\u7248\u672C\u8FC7\u65E7\uFF09\uFF1B\u7C7B\u578B\u6620\u5C04\u5C06\u964D\u7EA7\u4E3A any\u3002\u540C\u673A\u8054\u8C03\u8BF7\u5728\u8FDC\u7A0B\u542F\u7528 devFsRoot: true\uFF08\u9ED8\u8BA4\u503C\uFF09\u5E76\u91CD\u542F\u5F00\u53D1\u670D\u52A1\u3002`
|
|
1486
1487
|
);
|
|
1487
1488
|
continue;
|
|
1488
1489
|
}
|
|
@@ -1491,7 +1492,7 @@ async function generateDevTypes(options, _server) {
|
|
|
1491
1492
|
realRoot = fs2.realpathSync(remoteRoot);
|
|
1492
1493
|
} catch {
|
|
1493
1494
|
console.warn(
|
|
1494
|
-
`[fulgurjs]
|
|
1495
|
+
`[fulgurjs] \u7C7B\u578B\u751F\u6210\uFF1A\u8FDC\u7A0B\u5E94\u7528 "${remote.key}" \u7684 fsRoot \u5728\u672C\u673A\u4E0D\u53EF\u8BBF\u95EE\uFF0C\u5DF2\u8DF3\u8FC7\u7C7B\u578B\u6620\u5C04\uFF0C\u6A21\u5757\u7C7B\u578B\u5C06\u964D\u7EA7\u4E3A any\u3002\u8BF7\u68C0\u67E5\u9879\u76EE\u4F4D\u7F6E\u6216\u5173\u95ED\u672C\u673A\u7C7B\u578B\u76F4\u8FDE\u3002`
|
|
1495
1496
|
);
|
|
1496
1497
|
continue;
|
|
1497
1498
|
}
|
|
@@ -1502,18 +1503,18 @@ async function generateDevTypes(options, _server) {
|
|
|
1502
1503
|
let accepted = 0;
|
|
1503
1504
|
for (const expose of manifest.exposes ?? []) {
|
|
1504
1505
|
if (manifest.setup && expose.name === manifest.setup) continue;
|
|
1505
|
-
const skipped = (reason) => console.warn(`[fulgurjs]
|
|
1506
|
+
const skipped = (reason) => console.warn(`[fulgurjs] \u7C7B\u578B\u751F\u6210\uFF1A\u8FDC\u7A0B\u5E94\u7528 "${remote.key}" \u7684\u66B4\u9732\u6A21\u5757 ${JSON.stringify(expose.name)} \u5DF2\u8DF3\u8FC7\u3002\u539F\u56E0\uFF1A${reason}\u3002\u8BF7\u68C0\u67E5\u8BE5\u6A21\u5757\u5728\u8FDC\u7A0B manifest \u4E2D\u7684\u6E90\u6587\u4EF6\u8DEF\u5F84\u3002`);
|
|
1506
1507
|
const src = expose.src;
|
|
1507
1508
|
if (!src || typeof src !== "string") {
|
|
1508
1509
|
skipped("src \u7F3A\u5931");
|
|
1509
1510
|
continue;
|
|
1510
1511
|
}
|
|
1511
1512
|
if (src.startsWith("/") || /^[a-z]+:/i.test(src)) {
|
|
1512
|
-
skipped(`src \u5FC5\u987B\u662F\u76F8\u5BF9\u8DEF\u5F84\
|
|
1513
|
+
skipped(`src \u5FC5\u987B\u662F\u76F8\u5BF9\u8DEF\u5F84\uFF0C\u5F53\u524D\u503C\u4E3A ${JSON.stringify(src)}`);
|
|
1513
1514
|
continue;
|
|
1514
1515
|
}
|
|
1515
1516
|
if (src.split("/").includes("..")) {
|
|
1516
|
-
skipped(`src \u4E0D\u5F97\u5305\u542B ..\
|
|
1517
|
+
skipped(`src \u4E0D\u5F97\u5305\u542B ..\uFF0C\u5F53\u524D\u503C\u4E3A ${JSON.stringify(src)}`);
|
|
1517
1518
|
continue;
|
|
1518
1519
|
}
|
|
1519
1520
|
const abs = path3.join(realRoot, src);
|
|
@@ -1565,7 +1566,7 @@ async function generateDevTypes(options, _server) {
|
|
|
1565
1566
|
`);
|
|
1566
1567
|
}
|
|
1567
1568
|
console.log(
|
|
1568
|
-
`[fulgurjs]
|
|
1569
|
+
`[fulgurjs] \u7C7B\u578B\u751F\u6210\uFF1A\u5DF2\u751F\u6210 ${dir}/${remote.key}.d.ts\uFF08\u5DF2\u6536\u5F55 ${accepted}/${manifest.exposes?.length ?? 0} \u4E2A\u66B4\u9732\u6A21\u5757\uFF0C\u6A21\u5F0F ${mode}\uFF09\u3002\u8BF7\u786E\u4FDD tsconfig \u7684 include \u5305\u542B "${dir}"\uFF0C\u4EE5\u83B7\u5F97\u7C7B\u578B\u8865\u5168\u3002`
|
|
1569
1570
|
);
|
|
1570
1571
|
}
|
|
1571
1572
|
}
|
|
@@ -1653,7 +1654,7 @@ async function probeRemotesAndBuildSchema(options) {
|
|
|
1653
1654
|
console.warn(
|
|
1654
1655
|
formatFulgurjsDiagnostic({
|
|
1655
1656
|
code: "DEV-002",
|
|
1656
|
-
symptom:
|
|
1657
|
+
symptom: `\u8FDC\u7A0B\u5E94\u7528 "${remote.key}" \u7684 manifest \u534F\u8BAE\u7248\u672C\u4E3A ${parsed.unsupportedVersion}\uFF0C\u5F53\u524D\u4EC5\u652F\u6301\u7248\u672C 1`,
|
|
1657
1658
|
cause: "\u5BBF\u4E3B\u4E0E\u8FDC\u7A0B\u7684 @fulgurjs/federation \u5927\u7248\u672C\u4E0D\u4E00\u81F4",
|
|
1658
1659
|
fix: "\u5BF9\u9F50\u5BBF\u4E3B\u4E0E\u8FDC\u7A0B\u7684 @fulgurjs/federation \u7248\u672C\u540E\u91CD\u542F dev server",
|
|
1659
1660
|
details: { remote: remote.key, url: u.href }
|
|
@@ -1666,7 +1667,7 @@ async function probeRemotesAndBuildSchema(options) {
|
|
|
1666
1667
|
console.warn(
|
|
1667
1668
|
formatFulgurjsDiagnostic({
|
|
1668
1669
|
code: "DEV-002",
|
|
1669
|
-
symptom:
|
|
1670
|
+
symptom: `\u8FDC\u7A0B\u5E94\u7528 "${remote.key}" \u7684\u5F00\u53D1 manifest \u5951\u7EA6\u6821\u9A8C\u5931\u8D25\uFF08${u.href}\uFF09`,
|
|
1670
1671
|
cause: parsed.issues.map((x) => `${x.field}: ${x.message}`).join("\uFF1B"),
|
|
1671
1672
|
fix: "\u6838\u5BF9 remote \u7684 federation \u914D\u7F6E exposes\uFF0C\u5E76\u786E\u8BA4 @fulgurjs/federation \u7248\u672C\u4E0E\u5BBF\u4E3B\u4E00\u81F4",
|
|
1672
1673
|
details: { remote: remote.key, url: u.href, issues: parsed.issues.slice(0, 5) }
|
|
@@ -1681,7 +1682,7 @@ async function probeRemotesAndBuildSchema(options) {
|
|
|
1681
1682
|
console.warn(
|
|
1682
1683
|
formatFulgurjsDiagnostic({
|
|
1683
1684
|
code: "DEV-002",
|
|
1684
|
-
symptom:
|
|
1685
|
+
symptom: `\u8FDC\u7A0B\u5E94\u7528 "${remote.key}" \u7684\u5F00\u53D1 manifest \u53EF\u8FBE\uFF0C\u4F46 exposes \u4E3A\u7A7A\uFF08${u.href}\uFF09`,
|
|
1685
1686
|
cause: "remote \u4FA7 federation({ exposes }) \u4E3A\u7A7A\uFF0C\u6216\u5176\u63D2\u4EF6\u7248\u672C\u8FC7\u65E7\u5BFC\u81F4 manifest \u7F3A\u5B57\u6BB5",
|
|
1686
1687
|
fix: "\u6838\u5BF9 remote \u7684 federation \u914D\u7F6E exposes\uFF0C\u5E76\u786E\u8BA4 @fulgurjs/federation \u7248\u672C\u4E0E\u5BBF\u4E3B\u4E00\u81F4",
|
|
1687
1688
|
details: { remote: remote.key, url: u.href, pluginVersion: manifest.version }
|
|
@@ -1693,8 +1694,8 @@ async function probeRemotesAndBuildSchema(options) {
|
|
|
1693
1694
|
console.warn(
|
|
1694
1695
|
formatFulgurjsDiagnostic({
|
|
1695
1696
|
code: "DEV-006",
|
|
1696
|
-
symptom: `\u5BBF\u4E3B\u4E0E
|
|
1697
|
-
cause: `\u5BBF\u4E3B ${options.pluginVersion}
|
|
1697
|
+
symptom: `\u5BBF\u4E3B\u4E0E\u8FDC\u7A0B\u5E94\u7528 "${remote.key}" \u7684 @fulgurjs/federation \u7248\u672C\u4E0D\u4E00\u81F4`,
|
|
1698
|
+
cause: `\u5BBF\u4E3B\u4E3A ${options.pluginVersion}\uFF0C\u8FDC\u7A0B\u4E3A ${remoteVersion}\uFF08\u5E38\u89C1\u4E8E pnpm \u5B89\u88C5\u6E90\u65AD\u94FE\u6216\u6F0F\u5347\u7EA7\uFF09`,
|
|
1698
1699
|
fix: "\u7EDF\u4E00\u5347\u7EA7\u5404\u5E94\u7528\u4F9D\u8D56\u5230\u540C\u4E00\u7248\u672C\uFF1Apnpm add -D @fulgurjs/federation@<version> \u5E76\u91CD\u542F dev server",
|
|
1699
1700
|
details: { host: options.pluginVersion, remote: remoteVersion }
|
|
1700
1701
|
})
|
|
@@ -1707,7 +1708,7 @@ async function probeRemotesAndBuildSchema(options) {
|
|
|
1707
1708
|
console.warn(
|
|
1708
1709
|
formatFulgurjsDiagnostic({
|
|
1709
1710
|
code: "DEV-001",
|
|
1710
|
-
symptom:
|
|
1711
|
+
symptom: `\u8FDC\u7A0B\u5E94\u7528 "${remote.key}" \u7684\u5F00\u53D1 manifest \u4E0D\u53EF\u8FBE\uFF08${u.href}\uFF09\u2014\u2014\u5C06\u8DF3\u8FC7\u8BE5\u8FDC\u7A0B\u7684\u8DEF\u7531\u5B58\u5728\u6027\u6821\u9A8C`,
|
|
1711
1712
|
cause: portOpen ? "\u7AEF\u53E3\u6709\u8FDB\u7A0B\u76D1\u542C\u4F46 manifest \u7AEF\u70B9\u5F02\u5E38\uFF1Aremote dev server \u53EF\u80FD\u4EE5\u975E\u8054\u90A6\u914D\u7F6E\u542F\u52A8\uFF0C\u6216 base/\u8DEF\u5F84\u4E0E remotes[].dev \u4E0D\u4E00\u81F4" : "\u7AEF\u53E3\u65E0\u8FDB\u7A0B\u76D1\u542C\uFF1Aremote dev server \u672A\u542F\u52A8\uFF0C\u6216 remotes[].dev \u7AEF\u53E3\u5199\u9519\uFF08server.origin \u9519\u4F4D\u540C\u6B3E\uFF09",
|
|
1712
1713
|
fix: "\u542F\u52A8\u5BF9\u5E94 remote \u7684 dev server\uFF1B\u6838\u5BF9\u5BBF\u4E3B federation({ remotes }) \u7684 dev URL \u4E0E remote \u5B9E\u9645 VITE_PORT/base",
|
|
1713
1714
|
details: { remote: remote.key, url: u.href, port, portOpen, error: String(err?.message ?? err) }
|
|
@@ -1750,7 +1751,7 @@ function syncViteCacheMarker(root, pluginVersion, log) {
|
|
|
1750
1751
|
}
|
|
1751
1752
|
|
|
1752
1753
|
// src/runtime-code.gen.ts
|
|
1753
|
-
var runtime_code_gen_default = 'var pe=/^v?(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:-((?:[0-9A-Za-z-]+)(?:\\.[0-9A-Za-z-]+)*))?(?:\\+[0-9A-Za-z.-]+)?$/;function L(s){let c=pe.exec(String(s).trim());return c?{major:Number(c[1]),minor:Number(c[2]??0),patch:Number(c[3]??0),pre:c[4]?c[4].split("."):[]}:null}function de(s,c){if(s.length===0&&c.length===0)return 0;if(s.length===0)return 1;if(c.length===0)return-1;let l=Math.max(s.length,c.length);for(let n=0;n<l;n++){let g=s[n],y=c[n];if(g===void 0)return-1;if(y===void 0)return 1;let w=/^\\d+$/.test(g),b=/^\\d+$/.test(y);if(w&&b){let T=Number(g)-Number(y);if(T!==0)return T}else{if(w!==b)return w?-1:1;if(g!==y)return g<y?-1:1}}return 0}function x(s,c){let l=L(s),n=L(c);return!l||!n?s<c?-1:s>c?1:0:l.major!==n.major?l.major-n.major:l.minor!==n.minor?l.minor-n.minor:l.patch!==n.patch?l.patch-n.patch:de(l.pre,n.pre)}var ge=/^[a-z]+[+:-]/i;function k(s,c){if(c===!1||c==null||c==="")return!0;let l=String(c).trim();return!l||l==="*"||l==="latest"||ge.test(l)?!0:l.split("||").some(n=>he(s,n.trim()))}function he(s,c){if(!c||c==="*")return!L(s)?.pre.length;let l=c.split(/\\s+-\\s+/);if(l.length===2){let y=l[0].trim(),w=l[1].trim();return!(!k(s,`>=${y}`)||!k(s,`<=${w}`))}let n=L(s);if(!n)return!1;let g=ye(c);if(g===null)return!0;for(let y of g)if(!be(n,s,y))return!1;return!(n.pre.length>0&&!g.some(y=>y.ver.pre.length>0)&&!g.some(w=>w.ver.major===n.major&&w.ver.minor===n.minor&&w.ver.patch===n.patch))}function ye(s){let c=[],l=s.trim().split(/\\s+/).filter(Boolean);if(l.length===0)return null;for(let n of l){let g=/^(>=|<=|>|<|=|\\^|~)?(.*)$/.exec(n);if(!g)return null;let y=g[1],w=g[2],b=Se(y,w);if(b===null)return null;c.push(...b)}return c}function Se(s,c){let l=Ee(c);if(!l)return null;let{ver:n,partial:g}=l;switch(s){case"^":{let y=Re(n);return y?[{op:">=",ver:n},{op:"<",ver:y}]:null}case"~":{let y=g>=2?{major:n.major,minor:n.minor+1,patch:0,pre:[]}:{major:n.major+1,minor:0,patch:0,pre:[]};return[{op:">=",ver:n},{op:"<",ver:y}]}case">=":return[{op:">=",ver:n}];case">":return g===1?[{op:">=",ver:{major:n.major+1,minor:0,patch:0,pre:[]}}]:g===2?[{op:">=",ver:{major:n.major,minor:n.minor+1,patch:0,pre:[]}}]:[{op:">",ver:n}];case"<":return g===1?[{op:"<",ver:{major:n.major,minor:0,patch:0,pre:[]}}]:g===2?[{op:"<",ver:{major:n.major,minor:n.minor,patch:0,pre:[]}}]:[{op:"<",ver:n}];case"<=":return[{op:"<=",ver:n}];case"=":case void 0:return g===1?[{op:">=",ver:n},{op:"<",ver:{major:n.major+1,minor:0,patch:0,pre:[]}}]:g===2?[{op:">=",ver:n},{op:"<",ver:{major:n.major,minor:n.minor+1,patch:0,pre:[]}}]:[{op:"=",ver:n}];default:return null}}function Re(s){return s.major>0?{major:s.major+1,minor:0,patch:0,pre:[]}:s.minor>0?{major:0,minor:s.minor+1,patch:0,pre:[]}:{major:0,minor:0,patch:s.patch+1,pre:[]}}function Ee(s){let c=s.replace(/^v/,"").trim();if(!c||c==="*"||c==="x"||c==="X")return{ver:{major:0,minor:0,patch:0,pre:[]},partial:0};let l=c.split("."),n=[],g=0;for(let b of l.slice(0,3))if(/^\\d+$/.test(b))n.push(Number(b)),g++;else{if(b==="x"||b==="X"||b==="*")break;break}let y=c.split("-"),w=y.length>1?y.slice(1).join("-").split("+")[0].split("."):[];return g===0&&w.length===0?{ver:{major:0,minor:0,patch:0,pre:[]},partial:0}:{ver:{major:n[0]??0,minor:n[1]??0,patch:n[2]??0,pre:w},partial:g}}function we(s,c){switch(c){case">=":return s>=0;case">":return s>0;case"<":return s<0;case"<=":return s<=0;case"=":return s===0}}function be(s,c,l){let n=`${s.major}.${s.minor}.${s.patch}`+(s.pre.length?`-${s.pre.join(".")}`:"");if(l.upper)return!(!(x(n,`${l.ver.major}.${l.ver.minor}.${l.ver.patch}`+(l.ver.pre.length?`-${l.ver.pre.join(".")}`:""))>=0)||!(x(n,`${l.upper.major}.${l.upper.minor}.${l.upper.patch}`)<0));let g=x(n,`${l.ver.major}.${l.ver.minor}.${l.ver.patch}`+(l.ver.pre.length?`-${l.ver.pre.join(".")}`:"")),y=we(g,l.op);return l.ver.pre.length>0&&s.pre.length===0&&(l.op===">"||l.op==="<")?!1:y}var S=class extends Error{code;details;constructor(c,l,n){super(`[fulgurjs:${c}] ${l}`),this.name="FgError",this.code=c,this.details=n}},R={REMOTE_LOAD_FAILED:"MFU-001",REMOTE_NAME_MISMATCH:"MFU-002",SHARE_STRICT_VERSION:"MFU-003",SHARE_NOT_AVAILABLE:"MFU-004",CONTAINER_REINIT_CONFLICT:"MFU-005",MODULE_NOT_EXPOSED:"MFU-006",PRELOAD_FAILED:"MFU-007",REMOTE_UNKNOWN:"MFU-008",EMPTY_EXPORTS:"MFU-009",SINGLETON_SKEW:"MFU-010",SETUP_INVALID_EXPORT:"MFU-011",SETUP_RUN_FAILED:"MFU-012",SETUP_SESSION_KEY_MISSING:"MFU-013",SETUP_RECURSION:"MFU-014"};var J="4.3.0";var Pe="__fulgurjsSetup",_e="__FULGURJS_APP_CONFIG__",D=15e3,B=2,ve=5,Me=3e4,$e=4e3,xe=.2;function Ie(){let s=Object.create(null),c=new Map,l=[],n=new Map,g=new Map,y=new WeakMap,w=new WeakMap,b={},T=()=>{for(let e of l)try{e.init?.(b)}catch(r){console.warn("[fulgurjs] runtimePlugin init failed:",e.name,r)}},U=new Map,j,Y=e=>{let r=U.get(e);return r||U.set(e,r={}),r},V=()=>globalThis[_e]??{};async function K(e,r,t,o){let a=u=>u instanceof S?u:new S(R.SETUP_RUN_FAILED,`${o} of "${e}" threw: ${String(u?.message??u)}\n \\u4FEE\\u6CD5: \\u4FEE\\u590D\\u8BE5 ${o} \\u7684\\u521D\\u59CB\\u5316\\u903B\\u8F91\\u540E\\u91CD\\u65B0\\u52A0\\u8F7D\\uFF08\\u5931\\u8D25\\u7684\\u521D\\u59CB\\u5316\\u7F13\\u5B58\\u5DF2\\u6E05\\u9664\\uFF0C\\u53EF\\u76F4\\u63A5\\u91CD\\u8BD5\\uFF09`,{remote:e,phase:o});j=e;let i;try{i=r(t)}catch(u){throw a(u)}finally{j=void 0}try{await i}catch(u){throw a(u)}}async function Z(e,r,t,o){e.debug.setup="pending";try{if(e.manifestUrl)try{await F(`${e.name}/${t}`)}catch{}let a=await r.get(t),i=a?.default;if(typeof i!="function")throw new S(R.SETUP_INVALID_EXPORT,`setup module "${t}" of "${e.name}": default export is ${a==null?String(a):typeof i}, expected a function\n expected: export default async function setup(context: RemoteSetupContext) { ... }\n \\u4FEE\\u6CD5: \\u5728 federation({ setup }) \\u6307\\u5411\\u7684\\u6587\\u4EF6\\u8865\\u9ED8\\u8BA4\\u5BFC\\u51FA\\u51FD\\u6570\\uFF08\\u5177\\u540D onSession \\u53EF\\u9009\\uFF1B\\u5176\\u4ED6\\u5BFC\\u51FA\\u4E0D\\u4F5C\\u4E3A\\u751F\\u547D\\u5468\\u671F\\u5165\\u53E3\\uFF09`,{remote:e.name,module:t});if(a.onSession!==void 0&&typeof a.onSession!="function")throw new S(R.SETUP_INVALID_EXPORT,`setup module "${t}" of "${e.name}": export "onSession" is ${typeof a.onSession}, expected a function\n \\u4FEE\\u6CD5: \\u5C06 onSession \\u4FEE\\u6B63\\u4E3A\\u51FD\\u6570\\u5BFC\\u51FA\\uFF0C\\u6216\\u5220\\u9664\\u8BE5\\u5177\\u540D\\u5BFC\\u51FA\\uFF08\\u5176\\u4ED6\\u5BFC\\u51FA\\u540D\\u4E0D\\u4F5C\\u4E3A\\u751F\\u547D\\u5468\\u671F\\u5165\\u53E3\\uFF09`,{remote:e.name,module:t});o.setupExports=a,await K(e.name,i,{appContext:V(),signal:(o.controller??=new AbortController).signal},"setup"),e.debug.setup="ready"}catch(a){throw e.debug.setup="failed",o.setupExports=void 0,a}}async function Q(e,r,t){let o=V(),a=o?.sessionKey;if(typeof a!="string"||a==="")throw new S(R.SETUP_SESSION_KEY_MISSING,`remote "${e.name}" declares onSession but AppContext.sessionKey is ${a===void 0?"missing":JSON.stringify(a)}\n expected: \\u5BBF\\u4E3B\\u767B\\u5F55\\u540E provideAppContext({ ..., sessionKey: \'<\\u975E\\u654F\\u611F\\u767B\\u5F55\\u4EE3\\u6B21 ID>\' })\n \\u4FEE\\u6CD5: \\u5BBF\\u4E3B\\u767B\\u5F55\\u6D41\\u7A0B\\u6BCF\\u6B21\\u6210\\u529F\\u767B\\u5F55/\\u91CD\\u767B\\u751F\\u6210\\u65B0\\u4EE3\\u6B21 ID\\uFF08\\u7981\\u6B62\\u7528 token \\u5145\\u5F53\\uFF09\\uFF0C\\u5E76\\u5728 loadRemote \\u524D\\u63D0\\u4F9B`,{remote:e.name});if(r.sessionPromise&&r.sessionKey===a)return r.sessionPromise;r.controller?.abort();let i=new AbortController;r.controller=i,r.sessionKey=a;let u=r.sessionPromise?r.sessionPromise.catch(()=>{}):Promise.resolve(),p=(async()=>{await u,!i.signal.aborted&&await K(e.name,t,{appContext:o,sessionKey:a,signal:i.signal},"onSession")})();return r.sessionPromise=p,p.catch(()=>{r.sessionKey===a&&(r.sessionKey=void 0,r.sessionPromise=void 0)}),p}async function ee(e,r){let t=r?.[Pe];if(typeof t!="string"||t==="")return;let o=Y(e.name);o.setupPromise||(o.setupPromise=Z(e,r,t,o).catch(i=>{throw o.setupPromise=void 0,i})),await o.setupPromise;let a=o.setupExports?.onSession;typeof a=="function"&&await Q(e,o,a)}function re(){for(let e of U.values()){try{e.controller?.abort()}catch{}e.sessionKey=void 0,e.sessionPromise=void 0}}let A=e=>s[e]??=Object.create(null);function _(e){try{b.onRemoteError?.(e)}catch{}typeof window<"u"&&window.dispatchEvent(new CustomEvent("fulgurjs:error",{detail:e}))}function te(e="default"){return A(e),s}function ne(e,r,t,o,a={}){let i=A(e||"default"),u=Object.hasOwn(i,r)?i[r]:void 0,p=u&&typeof u=="object"?u:void 0;p||(p=Object.create(null),i[r]=p),!(Object.hasOwn(p,t)&&p[t])&&(p[t]={version:t,get:o,from:a.from??"unknown",eager:!!a.eager,loaded:!!a.loaded})}function oe(e){let r=(t,o,a)=>{if(t===void 0)return;if(!(typeof t=="number"&&(a?Number.isInteger(t)&&t>=0&&t<=10:Number.isFinite(t)&&t>0)))throw new Error(`[fulgurjs] registerRemote("${e.name}"): ${o} must be a ${a?"integer 0..10":"finite positive number"}, got ${String(t)}`)};r(e.timeout,"timeout"),r(e.retries,"retries",!0),e.breaker&&(r(e.breaker.threshold,"breaker.threshold"),r(e.breaker.resetMs,"breaker.resetMs"))}function H(e){for(let r of e){oe(r);let t=c.get(r.name);c.set(r.name,{timeout:D,retries:B,...t,...r,breakerThreshold:r.breaker?.threshold??t?.breakerThreshold??ve,breakerResetMs:r.breaker?.resetMs??t?.breakerResetMs??Me,state:t?.state??"idle",breakerState:t?.breakerState??{fails:0,openUntil:0},entryInflight:t?.entryInflight??new Map,debug:t?.debug??{entry:r.entry,status:"idle",setup:"none"}})}}function ie(e){H([e])}function se(e){l.push(...e),T()}async function ae(e,r={}){let t=r.shareScope||"default",o=r.shareKey||e,i=A(t)[o]||{},u=Object.keys(i),p=r.requiredVersion,h=u.filter(f=>p===void 0||p===!1||k(f,p)),d;if(r.singleton&&u.length>0){let f=u.filter(m=>i[m].loaded);if(d=[...f.length?f:u].sort(x).pop(),u.length>1||!h.includes(d)){let m=i[d],$=`singleton skew "${o}": req "${p??"any"}" use ${d} from ${m.from}`;if(r.strictVersion){let v=new S(R.SHARE_STRICT_VERSION,$,{shareKey:o,requiredVersion:p});throw _({remote:m.from,error:v}),v}console.warn(`[fulgurjs:MFU-010] ${$}`)}}else if(d=[...h].sort(x).pop(),!d){if(r.strictVersion){let m=new S(R.SHARE_STRICT_VERSION,`no satisfying version for "${o}" (required "${p}") in share scope "${t}"`);throw _({remote:o,error:m}),m}if(r.fallback)return r.fallback();let f=new S(R.SHARE_NOT_AVAILABLE,`shared "${o}" (${p??"any"}) unavailable in scope "${t}" (no local fallback)`,{shareKey:o,requiredVersion:p});throw _({remote:o,error:f}),f}let E=i[d];if(b.resolveShare){let f=await b.resolveShare({shareKey:o,shareScope:t,requiredVersion:p,picked:E,available:Object.values(i)});f&&(E=f)}return E.loaded=!0,E.get()}function ce(e){try{let r=new URL(e,typeof location<"u"?location.href:"http://f.invalid");return r.protocol+"//"+r.host+r.pathname}catch{return String(e).replace(/[?#].*$/,"")}}function q(e,r,t){return new Promise((o,a)=>{let i=setTimeout(()=>a(new Error(`timeout after ${r}ms: ${t}`)),r);e.then(u=>{clearTimeout(i),o(u)},u=>{clearTimeout(i),a(u)})})}let le=e=>new Promise(r=>setTimeout(r,e));function N(e,r){if(!e||typeof e.get!="function")throw new Error(`remoteEntry of "${r.name}" does not export a container interface (get/init)`);if(e.name&&r.name&&e.name!==r.name){let t=`remoteEntry self-reported name "${e.name}" mismatches configured name "${r.name}"`;if(r.promise)console.warn(`[fulgurjs] ${t} (promise-based remote, continuing)`);else throw Object.assign(new Error(t),{code:R.REMOTE_NAME_MISMATCH})}}async function G(e,r){let t=r.entryInflight.get(e),o=t??import(e);return t||(r.entryInflight.set(e,o),o.catch(()=>r.entryInflight.delete(e))),q(o,r.timeout??D,`load remoteEntry ${e}`)}async function X(e,r){let t=e.shareScope||"default";if(e.container){let i=w.get(e.container);if(i&&i!==t)throw new S(R.CONTAINER_REINIT_CONFLICT,`container "${e.name}" already initialized with share scope "${i}", cannot re-init with "${t}"`);return e.container}if(e.containerPromise)return e.containerPromise;let o=e.breakerState;if(o.openUntil>Date.now()){let i=new S(R.REMOTE_LOAD_FAILED,`circuit breaker open for remote "${e.name}" until ${new Date(o.openUntil).toISOString()}`,{remote:e.name});throw _({remote:e.name,error:i}),i}e.state="loading",e.debug.status="loading";let a=(async()=>{let i=[];if(e.promise)i.push(async()=>{let f=await q(e.promise(),e.timeout??D,`resolve promise remote "${e.name}"`),m=typeof f=="string"?await G(f,e):f;return N(m,e),m});else for(let f of[e.entry,...e.fallback??[]])i.push(async()=>{let m=await G(f,e);return N(m,e),m});let u,p,h=!1,d=r?.retries??e.retries??B;for(let f of i){for(let m=0;m<=d;m++){let $=performance.now();try{u=await f(),e.lastLoadMs=Math.round(performance.now()-$),e.debug.lastLoadMs=e.lastLoadMs,h=!0;break}catch(v){if(p=v,v?.code)throw v;m<d&&await le(Math.min($e,200*2**m)*(1-xe*(1-2*Math.random())))}}if(h)break}if(!h||!u){let f=ce(e.entry),m=[];throw/^https?:\\/\\//.test(e.entry)&&typeof location<"u"?(m.push(`1. is the remote dev server running? open ${f} in a browser \\u2014 it must return JS, not HTML`),m.push("2. is the URL correct in federation({ remotes })? dev/prod entries can differ"),m.push("3. CORS: the remote dev server must allow cross-origin requests (check its server.cors)")):(m.push(`1. is the remote deployed? open ${f} in a browser \\u2014 it must return JS`),m.push("2. NGINX/CDN routing: the entry path must serve the remoteEntry JS (check try_files)")),new S(R.REMOTE_LOAD_FAILED,`failed to load remote "${e.name}" from ${f}: ${String(p?.message??p)}\n`+m.join(`\n`),{remote:e.name})}N(u,e);let E=w.get(u);if(E&&E!==t)throw new S(R.CONTAINER_REINIT_CONFLICT,`container "${e.name}" already initialized with share scope "${E}", cannot re-init with "${t}"`);return typeof u.init=="function"&&await u.init(s),w.set(u,t),e.container=u,e.state="loaded",e.debug.status="loaded",o.fails=0,u})();e.containerPromise=a;try{return await a}catch(i){if(e.containerPromise=void 0,e.state="failed",e.debug.status="failed",e.debug.error=String(i?.message??i),o.fails+=1,o.fails>=e.breakerThreshold&&(o.openUntil=Date.now()+e.breakerResetMs,o.fails=0),i instanceof S)throw _({remote:e.name,error:i}),i;if(i?.code)throw _({remote:e.name,error:i}),i;let u=new S(R.REMOTE_LOAD_FAILED,String(i?.message??i),{remote:e.name});throw _({remote:e.name,error:u}),u}}function C(e){let r=e.indexOf("/");return r===-1?{remote:e,module:""}:{remote:e.slice(0,r),module:z(e.slice(r+1))}}function z(e){return e?e.startsWith(".")?e:`./${e}`:""}async function ue(e,r){let{remote:t,module:o}=C(e);if(o&&j===t)throw new S(R.SETUP_RECURSION,`loadRemote("${e}") re-entered from setup/onSession of "${t}" \\u2014 the initialization promise would await itself (deadlock)\n \\u4FEE\\u6CD5: setup/onSession \\u5185\\u4E0D loadRemote \\u540C\\u4E00\\u8FDC\\u7A0B\\u7684\\u6A21\\u5757\\uFF1B\\u9700\\u8981\\u7684\\u4E1A\\u52A1\\u6A21\\u5757\\u6539\\u4E3A\\u5728\\u9875\\u9762\\u7EC4\\u4EF6\\u5185\\u52A0\\u8F7D\\uFF0C\\u6216\\u7ECF context \\u901A\\u9053\\u89E3\\u8026`,{remote:t});try{b.beforeLoadRemote?.({remote:t,module:o})}catch(h){console.warn("[fulgurjs] beforeLoadRemote hook error (ignored):",h)}let a=c.get(t);if(!a)throw new S(R.REMOTE_UNKNOWN,`unknown remote "${t}". Register it via federation({ remotes }) or registerRemote().`,{remote:t});let i;try{let h=o&&a.manifestUrl?F(e):Promise.resolve();[i]=await Promise.all([X(a,{retries:r?.retries}),h])}catch(h){if(r?.fallbackModule)return console.error(`[fulgurjs] loadRemote("${e}") failed; returning fallbackModule (\\u663E\\u5F0F\\u964D\\u7EA7\\uFF0C\\u9519\\u8BEF\\u5DF2\\u900F\\u51FA)`,h),_({remote:t,error:h}),await r.fallbackModule();throw h}if(!o)return i;await ee(a,i);let u=`${t}@${a.shareScope||"default"}#${o}`;n.has(u)||n.set(u,i.get(o).catch(h=>{throw n.delete(u),h instanceof S||h?.code?h:new S(R.REMOTE_LOAD_FAILED,`failed to load module "${o}" from remote "${t}": ${String(h?.message??h)}`,{remote:t,module:o})}));let p;try{p=await n.get(u)}catch(h){if(r?.fallbackModule)return console.error(`[fulgurjs] loadRemote("${e}") failed; returning fallbackModule (\\u663E\\u5F0F\\u964D\\u7EA7\\uFF0C\\u9519\\u8BEF\\u5DF2\\u900F\\u51FA)`,h),_({remote:t,error:h}),await r.fallbackModule();throw h}try{b.afterLoadRemote?.({remote:t,module:o,module_ns:p})}catch(h){console.warn("[fulgurjs] afterLoadRemote hook error (ignored):",h)}if(p&&typeof p=="object"&&Object.keys(p).length===0){let h=new S(R.EMPTY_EXPORTS,`no exports: ${o} @ ${t}`,{remote:t,module:o});_({remote:t,error:h}),console.error(`[fulgurjs:MFU-009] ${h.message}`)}return p}function fe(e){let r=c.get(e);if(!r)throw new S(R.REMOTE_UNKNOWN,`unknown remote "${e}"`,{remote:e});return X(r)}async function F(e,r={}){let{remote:t,module:o}=C(e),a=c.get(t);if(!a)throw new S(R.REMOTE_UNKNOWN,`unknown remote "${t}"`,{remote:t});let i=r.mode??"preload",u=(d,E)=>{if(d.sheet)return Promise.resolve();let f=y.get(d);if(f)return f;let m=new Promise($=>{let v=()=>{d.removeEventListener("load",v),d.removeEventListener("error",I),$()},I=()=>{_({remote:t,error:new S(R.PRELOAD_FAILED,`failed to load remote stylesheet ${E}`,{remote:t})}),v()};d.addEventListener("load",v,{once:!0}),d.addEventListener("error",I,{once:!0}),d.sheet&&v()});return y.set(d,m),m},p=(d,E)=>{if(typeof document>"u")return Promise.resolve();let f=document.querySelector(`link[href="${d}"]`);if(f)return E==="style"&&i==="preload"?y.get(f)??Promise.resolve():Promise.resolve();let m=document.createElement("link");m.rel=E==="style"?"stylesheet":"modulepreload",m.href=d,i==="prefetch"&&(m.fetchPriority="low");let $=E==="style"?u(m,d):Promise.resolve();return document.head.appendChild(m),E==="style"&&i==="preload"?$:Promise.resolve()},h=d=>{let E=typeof document<"u"?document.baseURI:void 0,f=new URL(a.entry,E||"http://fulgurjs.invalid/");return!f.pathname.endsWith("/")&&!f.pathname.split("/").pop().includes(".")&&(f.pathname+="/"),new URL(d,f).href};try{if(a.manifestUrl){let d=g.get(a.manifestUrl);d||(d=fetch(a.manifestUrl,{cache:"no-cache",signal:AbortSignal.timeout(8e3)}).then(f=>f.ok?f.json():void 0),g.set(a.manifestUrl,d),d.then(f=>{f||g.delete(a.manifestUrl)},()=>g.delete(a.manifestUrl)));let E=await d;if(E){let f=E.schemaVersion;if(typeof f=="number"&&(!Number.isInteger(f)||f>1)){_({remote:t,error:new S(R.PRELOAD_FAILED,`unsupported manifest schemaVersion ${String(f)} (expected 1)`,{remote:t})}),await p(a.entry,"modulepreload");return}await p(a.entry,"modulepreload");let m=E.exposes,$=Array.isArray(m)?m.filter(M=>M&&typeof M=="object").map(M=>[String(M.name??""),M]):m&&typeof m=="object"?Object.entries(m):[],v=o?$.filter(([M,O])=>z(String(O?.name??M))===o):$,I=[];for(let[,M]of v)if(typeof M?.file=="string"&&await p(h(M.file),"modulepreload"),Array.isArray(M?.css))for(let O of M.css){if(typeof O!="string")continue;let me=p(h(O),"style");i==="preload"&&I.push(me)}await Promise.all(I);return}}await p(a.entry,"modulepreload")}catch(d){_({remote:t,error:new S(R.PRELOAD_FAILED,String(d?.message??d),{remote:t})})}}return typeof window>"u"||(window.__FULGURJS_SCOPE__=s,window.__FULGURJS_INFO__={get remotes(){let e={};for(let[r,t]of c)e[r]={...t.debug,entry:t.entry};return e},errors:[]}),{shareScopeMap:s,initSharing:te,registerShare:ne,registerRemotes:H,registerRemote:ie,registerPlugins:se,loadShare:ae,loadRemote:ue,getContainer:fe,preloadRemote:F,parseSpec:C,clearSessionState:re}}var W=globalThis,P=W.__FULGURJS_RUNTIME__??Ie();W.__FULGURJS_RUNTIME__=P;try{Object.freeze(P)}catch{}var Ne=J;function Ce(){return P}var Fe=P.initSharing,De=P.registerShare,Ve=P.registerRemotes,Ke=P.registerRemote,He=P.registerPlugins,qe=P.loadShare,Ge=P.loadRemote,Xe=P.getContainer,ze=P.preloadRemote,Je=P.parseSpec,Be=P.clearSessionState,We=P.shareScopeMap;function Ye(s){if(s&&typeof s=="object"&&"default"in s){let c=s.default;return c!==void 0?c:s}return s}var Ze=P;export{Be as clearSessionState,Ze as default,Xe as getContainer,Ce as getRuntime,Fe as initSharing,Ge as loadRemote,qe as loadShare,Je as parseSpec,ze as preloadRemote,He as registerPlugins,Ke as registerRemote,Ve as registerRemotes,De as registerShare,P as runtime,We as shareScopeMap,Ye as unwrapDefault,Ne as version};\n';
|
|
1754
|
+
var runtime_code_gen_default = 'var de=/^v?(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:-((?:[0-9A-Za-z-]+)(?:\\.[0-9A-Za-z-]+)*))?(?:\\+[0-9A-Za-z.-]+)?$/;function L(i){let c=de.exec(String(i).trim());return c?{major:Number(c[1]),minor:Number(c[2]??0),patch:Number(c[3]??0),pre:c[4]?c[4].split("."):[]}:null}function ge(i,c){if(i.length===0&&c.length===0)return 0;if(i.length===0)return 1;if(c.length===0)return-1;let l=Math.max(i.length,c.length);for(let o=0;o<l;o++){let g=i[o],y=c[o];if(g===void 0)return-1;if(y===void 0)return 1;let w=/^\\d+$/.test(g),b=/^\\d+$/.test(y);if(w&&b){let I=Number(g)-Number(y);if(I!==0)return I}else{if(w!==b)return w?-1:1;if(g!==y)return g<y?-1:1}}return 0}function O(i,c){let l=L(i),o=L(c);return!l||!o?i<c?-1:i>c?1:0:l.major!==o.major?l.major-o.major:l.minor!==o.minor?l.minor-o.minor:l.patch!==o.patch?l.patch-o.patch:ge(l.pre,o.pre)}var he=/^[a-z]+[+:-]/i;function j(i,c){if(c===!1||c==null||c==="")return!0;let l=String(c).trim();return!l||l==="*"||l==="latest"||he.test(l)?!0:l.split("||").some(o=>ye(i,o.trim()))}function ye(i,c){if(!c||c==="*")return!L(i)?.pre.length;let l=c.split(/\\s+-\\s+/);if(l.length===2){let y=l[0].trim(),w=l[1].trim();return!(!j(i,`>=${y}`)||!j(i,`<=${w}`))}let o=L(i);if(!o)return!1;let g=Se(c);if(g===null)return!0;for(let y of g)if(!Pe(o,i,y))return!1;return!(o.pre.length>0&&!g.some(y=>y.ver.pre.length>0)&&!g.some(w=>w.ver.major===o.major&&w.ver.minor===o.minor&&w.ver.patch===o.patch))}function Se(i){let c=[],l=i.trim().split(/\\s+/).filter(Boolean);if(l.length===0)return null;for(let o of l){let g=/^(>=|<=|>|<|=|\\^|~)?(.*)$/.exec(o);if(!g)return null;let y=g[1],w=g[2],b=Ee(y,w);if(b===null)return null;c.push(...b)}return c}function Ee(i,c){let l=we(c);if(!l)return null;let{ver:o,partial:g}=l;switch(i){case"^":{let y=Re(o);return y?[{op:">=",ver:o},{op:"<",ver:y}]:null}case"~":{let y=g>=2?{major:o.major,minor:o.minor+1,patch:0,pre:[]}:{major:o.major+1,minor:0,patch:0,pre:[]};return[{op:">=",ver:o},{op:"<",ver:y}]}case">=":return[{op:">=",ver:o}];case">":return g===1?[{op:">=",ver:{major:o.major+1,minor:0,patch:0,pre:[]}}]:g===2?[{op:">=",ver:{major:o.major,minor:o.minor+1,patch:0,pre:[]}}]:[{op:">",ver:o}];case"<":return g===1?[{op:"<",ver:{major:o.major,minor:0,patch:0,pre:[]}}]:g===2?[{op:"<",ver:{major:o.major,minor:o.minor,patch:0,pre:[]}}]:[{op:"<",ver:o}];case"<=":return[{op:"<=",ver:o}];case"=":case void 0:return g===1?[{op:">=",ver:o},{op:"<",ver:{major:o.major+1,minor:0,patch:0,pre:[]}}]:g===2?[{op:">=",ver:o},{op:"<",ver:{major:o.major,minor:o.minor+1,patch:0,pre:[]}}]:[{op:"=",ver:o}];default:return null}}function Re(i){return i.major>0?{major:i.major+1,minor:0,patch:0,pre:[]}:i.minor>0?{major:0,minor:i.minor+1,patch:0,pre:[]}:{major:0,minor:0,patch:i.patch+1,pre:[]}}function we(i){let c=i.replace(/^v/,"").trim();if(!c||c==="*"||c==="x"||c==="X")return{ver:{major:0,minor:0,patch:0,pre:[]},partial:0};let l=c.split("."),o=[],g=0;for(let b of l.slice(0,3))if(/^\\d+$/.test(b))o.push(Number(b)),g++;else{if(b==="x"||b==="X"||b==="*")break;break}let y=c.split("-"),w=y.length>1?y.slice(1).join("-").split("+")[0].split("."):[];return g===0&&w.length===0?{ver:{major:0,minor:0,patch:0,pre:[]},partial:0}:{ver:{major:o[0]??0,minor:o[1]??0,patch:o[2]??0,pre:w},partial:g}}function be(i,c){switch(c){case">=":return i>=0;case">":return i>0;case"<":return i<0;case"<=":return i<=0;case"=":return i===0}}function Pe(i,c,l){let o=`${i.major}.${i.minor}.${i.patch}`+(i.pre.length?`-${i.pre.join(".")}`:"");if(l.upper)return!(!(O(o,`${l.ver.major}.${l.ver.minor}.${l.ver.patch}`+(l.ver.pre.length?`-${l.ver.pre.join(".")}`:""))>=0)||!(O(o,`${l.upper.major}.${l.upper.minor}.${l.upper.patch}`)<0));let g=O(o,`${l.ver.major}.${l.ver.minor}.${l.ver.patch}`+(l.ver.pre.length?`-${l.ver.pre.join(".")}`:"")),y=be(g,l.op);return l.ver.pre.length>0&&i.pre.length===0&&(l.op===">"||l.op==="<")?!1:y}var S=class extends Error{code;details;constructor(c,l,o){super(`[fulgurjs:${c}] ${l}`),this.name="FgError",this.code=c,this.details=o}},E={REMOTE_LOAD_FAILED:"MFU-001",REMOTE_NAME_MISMATCH:"MFU-002",SHARE_STRICT_VERSION:"MFU-003",SHARE_NOT_AVAILABLE:"MFU-004",CONTAINER_REINIT_CONFLICT:"MFU-005",MODULE_NOT_EXPOSED:"MFU-006",PRELOAD_FAILED:"MFU-007",REMOTE_UNKNOWN:"MFU-008",EMPTY_EXPORTS:"MFU-009",SINGLETON_SKEW:"MFU-010",SETUP_INVALID_EXPORT:"MFU-011",SETUP_RUN_FAILED:"MFU-012",SETUP_SESSION_KEY_MISSING:"MFU-013",SETUP_RECURSION:"MFU-014"};var W="5.0.0";var _e="__fulgurjsSetup",$e="__FULGURJS_APP_CONFIG__",D=15e3,z=2,Me=5,ve=3e4,Ie=4e3,Te=.2;function Oe(){let i=Object.create(null),c=new Map,l=[],o=new Set,g=new Map,y=new Map,w=new WeakMap,b=new WeakMap,I={},Z=()=>{for(let e of l)try{e.init?.(I)}catch(r){console.warn("[fulgurjs] \\u8FD0\\u884C\\u65F6\\u6269\\u5C55\\u521D\\u59CB\\u5316\\u5931\\u8D25\\uFF0C\\u8BE5\\u6269\\u5C55\\u5C06\\u4E0D\\u53EF\\u7528\\uFF1A",e.name,r)}},k=new Map,A,Q=e=>{let r=k.get(e);return r||k.set(e,r={}),r},V=()=>globalThis[$e]??{};async function K(e,r,t,n){let a=u=>u instanceof S?u:new S(E.SETUP_RUN_FAILED,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e}" \\u7684 ${n} \\u521D\\u59CB\\u5316\\u5931\\u8D25\\u3002\n\\u539F\\u56E0\\uFF1A${String(u?.message??u)}\n\\u4FEE\\u6CD5\\uFF1A\\u68C0\\u67E5\\u5E76\\u4FEE\\u590D\\u8BE5 ${n} \\u51FD\\u6570\\u540E\\u91CD\\u65B0\\u52A0\\u8F7D\\uFF1B\\u5931\\u8D25\\u7F13\\u5B58\\u5DF2\\u6E05\\u9664\\uFF0C\\u53EF\\u4EE5\\u76F4\\u63A5\\u91CD\\u8BD5\\u3002`,{remote:e,phase:n});A=e;let s;try{s=r(t)}catch(u){throw a(u)}finally{A=void 0}try{await s}catch(u){throw a(u)}}async function ee(e,r,t,n){e.debug.setup="pending";try{if(e.manifestUrl)try{await F(`${e.name}/${t}`)}catch{}let a=await r.get(t),s=a?.default;if(typeof s!="function")throw new S(E.SETUP_INVALID_EXPORT,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u7684 setup \\u6A21\\u5757 "${t}" \\u65E0\\u6CD5\\u521D\\u59CB\\u5316\\u3002\n\\u539F\\u56E0\\uFF1A\\u9ED8\\u8BA4\\u5BFC\\u51FA\\u7C7B\\u578B\\u4E3A ${a==null?String(a):typeof s}\\uFF0C\\u5E94\\u4E3A\\u51FD\\u6570\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5728 setup \\u6307\\u5411\\u7684\\u6587\\u4EF6\\u4E2D\\u9ED8\\u8BA4\\u5BFC\\u51FA\\u51FD\\u6570\\uFF0C\\u4F8B\\u5982 export default async function setup(context) { ... }\\uFF1B\\u5177\\u540D onSession \\u53EF\\u9009\\u3002`,{remote:e.name,module:t});if(a.onSession!==void 0&&typeof a.onSession!="function")throw new S(E.SETUP_INVALID_EXPORT,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u7684 setup \\u6A21\\u5757 "${t}" \\u65E0\\u6CD5\\u521D\\u59CB\\u5316\\u3002\n\\u539F\\u56E0\\uFF1AonSession \\u5BFC\\u51FA\\u7C7B\\u578B\\u4E3A ${typeof a.onSession}\\uFF0C\\u5E94\\u4E3A\\u51FD\\u6570\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5C06 onSession \\u6539\\u4E3A\\u5177\\u540D\\u5BFC\\u51FA\\u7684\\u51FD\\u6570\\uFF0C\\u6216\\u5220\\u9664\\u8BE5\\u5BFC\\u51FA\\u3002`,{remote:e.name,module:t});n.setupExports=a,await K(e.name,s,{appContext:V(),signal:(n.controller??=new AbortController).signal},"setup"),e.debug.setup="ready"}catch(a){throw e.debug.setup="failed",n.setupExports=void 0,a}}async function re(e,r,t){let n=V(),a=n?.sessionKey;if(typeof a!="string"||a==="")throw new S(E.SETUP_SESSION_KEY_MISSING,`\\u73B0\\u8C61\\uFF1A\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u58F0\\u660E\\u4E86 onSession\\uFF0C\\u4F46\\u5BBF\\u4E3B\\u5C1A\\u672A\\u63D0\\u4F9B\\u6709\\u6548\\u7684 AppContext.sessionKey\\u3002\n\\u539F\\u56E0\\uFF1A\\u5F53\\u524D\\u503C\\u4E3A ${a===void 0?"\\u7F3A\\u5931":JSON.stringify(a)}\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5BBF\\u4E3B\\u6BCF\\u6B21\\u767B\\u5F55\\u6216\\u91CD\\u767B\\u65F6\\u751F\\u6210\\u65B0\\u7684\\u975E\\u654F\\u611F\\u767B\\u5F55\\u4EE3\\u6B21 ID\\uFF0C\\u5E76\\u5728\\u52A0\\u8F7D\\u8FDC\\u7A0B\\u9875\\u9762\\u524D\\u8C03\\u7528 provideAppContext({ ..., sessionKey: \'\\u767B\\u5F55\\u4EE3\\u6B21 ID\' })\\uFF1B\\u4E0D\\u8981\\u4F7F\\u7528 token \\u539F\\u6587\\u3002`,{remote:e.name});if(r.sessionPromise&&r.sessionKey===a)return r.sessionPromise;r.controller?.abort();let s=new AbortController;r.controller=s,r.sessionKey=a;let u=r.sessionPromise?r.sessionPromise.catch(()=>{}):Promise.resolve(),p=(async()=>{await u,!s.signal.aborted&&await K(e.name,t,{appContext:n,sessionKey:a,signal:s.signal},"onSession")})();return r.sessionPromise=p,p.catch(()=>{r.sessionKey===a&&(r.sessionKey=void 0,r.sessionPromise=void 0)}),p}async function te(e,r){let t=r?.[_e];if(typeof t!="string"||t==="")return;let n=Q(e.name);n.setupPromise||(n.setupPromise=ee(e,r,t,n).catch(s=>{throw n.setupPromise=void 0,s})),await n.setupPromise;let a=n.setupExports?.onSession;typeof a=="function"&&await re(e,n,a)}function ne(){for(let e of k.values()){try{e.controller?.abort()}catch{}e.sessionKey=void 0,e.sessionPromise=void 0}}let U=e=>i[e]??=Object.create(null);function _(e){try{I.onRemoteError?.(e)}catch{}typeof window<"u"&&window.dispatchEvent(new CustomEvent("fulgurjs:error",{detail:e}))}function oe(e="default"){return U(e),i}function se(e,r,t,n,a={}){let s=U(e||"default"),u=Object.hasOwn(s,r)?s[r]:void 0,p=u&&typeof u=="object"?u:void 0;p||(p=Object.create(null),s[r]=p),!(Object.hasOwn(p,t)&&p[t])&&(p[t]={version:t,get:n,from:a.from??"unknown",eager:!!a.eager,loaded:!!a.loaded})}function ie(e){let r=(t,n,a)=>{if(t===void 0)return;if(!(typeof t=="number"&&(a?Number.isInteger(t)&&t>=0&&t<=10:Number.isFinite(t)&&t>0)))throw new Error(`[fulgurjs] \\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u7684 ${n} \\u914D\\u7F6E\\u65E0\\u6548\\uFF1A\\u5F53\\u524D\\u4E3A ${String(t)}\\uFF0C\\u5E94\\u4E3A${a?" 0 \\u5230 10 \\u7684\\u6574\\u6570":"\\u5927\\u4E8E 0 \\u7684\\u6709\\u9650\\u6570\\u5B57"}\\u3002\\u8BF7\\u4FEE\\u6B63 registerRemote \\u914D\\u7F6E\\u3002`)};r(e.timeout,"timeout"),r(e.retries,"retries",!0),e.breaker&&(r(e.breaker.threshold,"breaker.threshold"),r(e.breaker.resetMs,"breaker.resetMs"))}function H(e){for(let r of e){ie(r);let t=c.get(r.name);c.set(r.name,{timeout:D,retries:z,...t,...r,breakerThreshold:r.breaker?.threshold??t?.breakerThreshold??Me,breakerResetMs:r.breaker?.resetMs??t?.breakerResetMs??ve,state:t?.state??"idle",breakerState:t?.breakerState??{fails:0,openUntil:0},entryInflight:t?.entryInflight??new Map,debug:t?.debug??{entry:r.entry,status:"idle",setup:"none"}})}}function ae(e){H([e])}function ce(e){l.push(...e),Z()}async function le(e,r={}){let t=r.shareScope||"default",n=r.shareKey||e,s=U(t)[n]||{},u=Object.keys(s),p=r.requiredVersion,h=u.filter(f=>p===void 0||p===!1||j(f,p)),d;if(r.singleton&&u.length>0){let f=u.filter(m=>s[m].loaded);if(d=[...f.length?f:u].sort(O).pop(),!h.includes(d)){let m=s[d],v=`\\u73B0\\u8C61\\uFF1A\\u5171\\u4EAB\\u5355\\u4F8B "${n}" \\u7684\\u5B9E\\u9645\\u7248\\u672C\\u4E0D\\u6EE1\\u8DB3\\u5F53\\u524D\\u5E94\\u7528\\u8981\\u6C42\\u3002\n\\u539F\\u56E0\\uFF1A\\u5E94\\u7528\\u8981\\u6C42 ${p??"\\u4EFB\\u610F\\u7248\\u672C"}\\uFF0C\\u4F5C\\u7528\\u57DF\\u4E2D\\u6709 ${u.join("\\u3001")}\\uFF1B\\u4E3A\\u4FDD\\u8BC1\\u5168\\u9875\\u53EA\\u4F7F\\u7528\\u4E00\\u4E2A\\u5B9E\\u4F8B\\uFF0C\\u6700\\u7EC8\\u590D\\u7528 ${m.from} \\u63D0\\u4F9B\\u7684 ${d}\\u3002\n\\u5F71\\u54CD\\uFF1A\\u53EF\\u80FD\\u51FA\\u73B0\\u72B6\\u6001\\u4E0D\\u4E00\\u81F4\\u6216\\u8FD0\\u884C\\u9519\\u8BEF\\uFF0C\\u5177\\u4F53\\u53D6\\u51B3\\u4E8E\\u4E24\\u7AEF API \\u662F\\u5426\\u517C\\u5BB9\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u7EDF\\u4E00\\u5BBF\\u4E3B\\u4E0E\\u8FDC\\u7A0B\\u7684\\u4F9D\\u8D56\\u7248\\u672C\\uFF0C\\u6216\\u6838\\u5BF9\\u540E\\u8C03\\u6574 shared.requiredVersion\\uFF1B\\u82E5\\u5FC5\\u987B\\u62D2\\u7EDD\\u4E0D\\u517C\\u5BB9\\u7248\\u672C\\uFF0C\\u8BF7\\u542F\\u7528 strictVersion\\u3002`;if(r.strictVersion){let T=new S(E.SHARE_STRICT_VERSION,v,{shareKey:n,requiredVersion:p});throw _({remote:m.from,error:T}),T}let $=`${t}|${n}|${p??"*"}|${d}|${u.join(",")}`;o.has($)||(o.add($),console.warn(`[fulgurjs:MFU-010] ${v}`))}}else if(d=[...h].sort(O).pop(),!d){if(r.strictVersion){let m=new S(E.SHARE_STRICT_VERSION,`\\u73B0\\u8C61\\uFF1A\\u5171\\u4EAB\\u4F5C\\u7528\\u57DF "${t}" \\u4E2D\\u627E\\u4E0D\\u5230\\u7B26\\u5408\\u8981\\u6C42\\u7684 "${n}"\\u3002\n\\u539F\\u56E0\\uFF1A\\u8981\\u6C42\\u7248\\u672C ${p}\\uFF0C\\u5F53\\u524D\\u53EF\\u7528\\u7248\\u672C\\u4E3A ${u.join("\\u3001")||"\\u65E0"}\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u7EDF\\u4E00\\u5BBF\\u4E3B\\u4E0E\\u8FDC\\u7A0B\\u7684\\u4F9D\\u8D56\\u7248\\u672C\\uFF0C\\u6216\\u4FEE\\u6B63 shared.requiredVersion\\u3002`);throw _({remote:n,error:m}),m}if(r.fallback)return r.fallback();let f=new S(E.SHARE_NOT_AVAILABLE,`\\u73B0\\u8C61\\uFF1A\\u65E0\\u6CD5\\u52A0\\u8F7D\\u5171\\u4EAB\\u4F9D\\u8D56 "${n}"\\u3002\n\\u539F\\u56E0\\uFF1A\\u4F5C\\u7528\\u57DF "${t}" \\u4E2D\\u6CA1\\u6709\\u7B26\\u5408 ${p??"\\u4EFB\\u610F\\u7248\\u672C"} \\u8981\\u6C42\\u7684\\u7248\\u672C\\uFF0C\\u4E14\\u672A\\u914D\\u7F6E\\u672C\\u5730\\u526F\\u672C\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u5728\\u5BBF\\u4E3B\\u6216\\u8FDC\\u7A0B\\u6CE8\\u518C\\u8BE5\\u4F9D\\u8D56\\uFF0C\\u6216\\u4E3A shared \\u914D\\u7F6E\\u53EF\\u7528\\u7684\\u672C\\u5730\\u526F\\u672C\\u3002`,{shareKey:n,requiredVersion:p});throw _({remote:n,error:f}),f}let R=s[d];if(I.resolveShare){let f=await I.resolveShare({shareKey:n,shareScope:t,requiredVersion:p,picked:R,available:Object.values(s)});f&&(R=f)}return R.loaded=!0,R.get()}function q(e){try{let r=new URL(e,typeof location<"u"?location.href:"http://f.invalid");return r.protocol+"//"+r.host+r.pathname}catch{return String(e).replace(/[?#].*$/,"")}}function G(e,r,t){return new Promise((n,a)=>{let s=setTimeout(()=>a(new Error(`\\u7B49\\u5F85\\u8D85\\u8FC7 ${r} \\u6BEB\\u79D2\\uFF1A${t}`)),r);e.then(u=>{clearTimeout(s),n(u)},u=>{clearTimeout(s),a(u)})})}let ue=e=>new Promise(r=>setTimeout(r,e));function N(e,r){if(!e||typeof e.get!="function")throw new Error(`\\u8FDC\\u7A0B\\u5E94\\u7528 "${r.name}" \\u7684 remoteEntry \\u672A\\u5BFC\\u51FA\\u5BB9\\u5668\\u63A5\\u53E3\\u3002\\u8BF7\\u786E\\u8BA4\\u5165\\u53E3\\u5BFC\\u51FA\\u4E86 get()\\uFF0C\\u5E76\\u68C0\\u67E5\\u8BE5\\u5730\\u5740\\u662F\\u5426\\u8FD4\\u56DE\\u6B63\\u786E\\u7684\\u8054\\u90A6\\u5165\\u53E3 JS\\u3002`);if(e.name&&r.name&&e.name!==r.name){let t=`\\u8FDC\\u7A0B\\u5165\\u53E3\\u81EA\\u62A5\\u540D\\u79F0 "${e.name}" \\u4E0E\\u5BBF\\u4E3B\\u914D\\u7F6E\\u540D\\u79F0 "${r.name}" \\u4E0D\\u4E00\\u81F4\\u3002\\u8BF7\\u7EDF\\u4E00\\u4E24\\u4FA7 federation({ name }) \\u4E0E remotes \\u7684\\u540D\\u79F0\\u3002`;if(r.promise)console.warn(`[fulgurjs] ${t} \\u5F53\\u524D\\u662F\\u52A8\\u6001 Promise \\u8FDC\\u7A0B\\uFF0C\\u7EE7\\u7EED\\u52A0\\u8F7D\\u3002`);else throw Object.assign(new Error(t),{code:E.REMOTE_NAME_MISMATCH})}}async function J(e,r){let t=r.entryInflight.get(e),n=t??import(e);return t||(r.entryInflight.set(e,n),n.catch(()=>r.entryInflight.delete(e))),G(n,r.timeout??D,`\\u52A0\\u8F7D\\u8FDC\\u7A0B\\u5165\\u53E3 ${q(e)}`)}async function X(e,r){let t=e.shareScope||"default";if(e.container){let s=b.get(e.container);if(s&&s!==t)throw new S(E.CONTAINER_REINIT_CONFLICT,`\\u8FDC\\u7A0B\\u5BB9\\u5668 "${e.name}" \\u5DF2\\u4F7F\\u7528\\u5171\\u4EAB\\u4F5C\\u7528\\u57DF "${s}" \\u521D\\u59CB\\u5316\\uFF0C\\u4E0D\\u80FD\\u518D\\u4EE5 "${t}" \\u521D\\u59CB\\u5316\\u3002\\u8BF7\\u7EDF\\u4E00 shareScope \\u914D\\u7F6E\\u3002`);return e.container}if(e.containerPromise)return e.containerPromise;let n=e.breakerState;if(n.openUntil>Date.now()){let s=new S(E.REMOTE_LOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u8FDE\\u7EED\\u52A0\\u8F7D\\u5931\\u8D25\\uFF0C\\u7194\\u65AD\\u5668\\u5DF2\\u5F00\\u542F\\uFF1B\\u5C06\\u5728 ${new Date(n.openUntil).toISOString()} \\u540E\\u5141\\u8BB8\\u91CD\\u8BD5\\u3002\\u8BF7\\u5148\\u68C0\\u67E5\\u8FDC\\u7A0B\\u5165\\u53E3\\u670D\\u52A1\\u548C\\u7F51\\u7EDC\\u3002`,{remote:e.name});throw _({remote:e.name,error:s}),s}e.state="loading",e.debug.status="loading";let a=(async()=>{let s=[];if(e.promise)s.push(async()=>{let f=await G(e.promise(),e.timeout??D,`\\u89E3\\u6790\\u52A8\\u6001\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}"`),m=typeof f=="string"?await J(f,e):f;return N(m,e),m});else for(let f of[e.entry,...e.fallback??[]])s.push(async()=>{let m=await J(f,e);return N(m,e),m});let u,p,h=!1,d=r?.retries??e.retries??z;for(let f of s){for(let m=0;m<=d;m++){let v=performance.now();try{u=await f(),e.lastLoadMs=Math.round(performance.now()-v),e.debug.lastLoadMs=e.lastLoadMs,h=!0;break}catch($){if(p=$,$?.code)throw $;m<d&&await ue(Math.min(Ie,200*2**m)*(1-Te*(1-2*Math.random())))}}if(h)break}if(!h||!u){let f=q(e.entry),m=[];throw/^https?:\\/\\//.test(e.entry)&&typeof location<"u"?(m.push(`1. \\u5728\\u6D4F\\u89C8\\u5668\\u6253\\u5F00 ${f}\\uFF0C\\u786E\\u8BA4\\u8FDC\\u7A0B\\u5F00\\u53D1\\u670D\\u52A1\\u5DF2\\u542F\\u52A8\\uFF0C\\u5E76\\u8FD4\\u56DE JS \\u800C\\u975E HTML\\u3002`),m.push("2. \\u6838\\u5BF9 federation({ remotes }) \\u4E2D\\u7684\\u5730\\u5740\\uFF1B\\u5F00\\u53D1\\u548C\\u751F\\u4EA7\\u5730\\u5740\\u53EF\\u4EE5\\u4E0D\\u540C\\u3002"),m.push("3. \\u82E5\\u8DE8\\u57DF\\uFF0C\\u68C0\\u67E5\\u8FDC\\u7A0B\\u5F00\\u53D1\\u670D\\u52A1\\u7684 server.cors \\u914D\\u7F6E\\u3002")):(m.push(`1. \\u5728\\u6D4F\\u89C8\\u5668\\u6253\\u5F00 ${f}\\uFF0C\\u786E\\u8BA4\\u8FDC\\u7A0B\\u5E94\\u7528\\u5DF2\\u90E8\\u7F72\\uFF0C\\u4E14\\u5165\\u53E3\\u8FD4\\u56DE JS\\u3002`),m.push("2. \\u68C0\\u67E5 Nginx/CDN \\u7684\\u5165\\u53E3\\u8DEF\\u5F84\\u6620\\u5C04\\uFF1B\\u8BE5\\u5730\\u5740\\u4E0D\\u80FD\\u56DE\\u9000\\u5230 index.html\\u3002")),new S(E.REMOTE_LOAD_FAILED,`\\u73B0\\u8C61\\uFF1A\\u65E0\\u6CD5\\u4ECE ${f} \\u52A0\\u8F7D\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}"\\u3002\n\\u539F\\u56E0\\uFF1A${String(p?.message??p)}\n\\u4FEE\\u6CD5\\uFF1A\n${m.join(`\n`)}`,{remote:e.name})}N(u,e);let R=b.get(u);if(R&&R!==t)throw new S(E.CONTAINER_REINIT_CONFLICT,`\\u8FDC\\u7A0B\\u5BB9\\u5668 "${e.name}" \\u5DF2\\u4F7F\\u7528\\u5171\\u4EAB\\u4F5C\\u7528\\u57DF "${R}" \\u521D\\u59CB\\u5316\\uFF0C\\u4E0D\\u80FD\\u518D\\u4EE5 "${t}" \\u521D\\u59CB\\u5316\\u3002\\u8BF7\\u7EDF\\u4E00 shareScope \\u914D\\u7F6E\\u3002`);return typeof u.init=="function"&&await u.init(i),b.set(u,t),e.container=u,e.state="loaded",e.debug.status="loaded",n.fails=0,u})();e.containerPromise=a;try{return await a}catch(s){if(e.containerPromise=void 0,e.state="failed",e.debug.status="failed",e.debug.error=String(s?.message??s),n.fails+=1,n.fails>=e.breakerThreshold&&(n.openUntil=Date.now()+e.breakerResetMs,n.fails=0),s instanceof S)throw _({remote:e.name,error:s}),s;if(s?.code)throw _({remote:e.name,error:s}),s;let u=new S(E.REMOTE_LOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${e.name}" \\u52A0\\u8F7D\\u5931\\u8D25\\u3002\\u5E95\\u5C42\\u539F\\u56E0\\uFF1A${String(s?.message??s)}\\u3002\\u8BF7\\u68C0\\u67E5\\u8FDC\\u7A0B\\u5165\\u53E3\\u3001\\u7F51\\u7EDC\\u53CA\\u5171\\u4EAB\\u4F9D\\u8D56\\u3002`,{remote:e.name});throw _({remote:e.name,error:u}),u}}function C(e){let r=e.indexOf("/");return r===-1?{remote:e,module:""}:{remote:e.slice(0,r),module:B(e.slice(r+1))}}function B(e){return e?e.startsWith(".")?e:`./${e}`:""}async function fe(e,r){let{remote:t,module:n}=C(e);if(n&&A===t)throw new S(E.SETUP_RECURSION,`\\u73B0\\u8C61\\uFF1A\\u52A0\\u8F7D "${e}" \\u65F6\\uFF0C\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}" \\u7684 setup/onSession \\u53C8\\u540C\\u6B65\\u52A0\\u8F7D\\u4E86\\u81EA\\u8EAB\\u6A21\\u5757\\uFF0C\\u5F62\\u6210\\u5FAA\\u73AF\\u7B49\\u5F85\\u3002\n\\u539F\\u56E0\\uFF1A\\u521D\\u59CB\\u5316\\u5C1A\\u672A\\u5B8C\\u6210\\uFF0C\\u4E0D\\u80FD\\u7B49\\u5F85\\u81EA\\u8EAB\\u7684\\u521D\\u59CB\\u5316\\u7ED3\\u679C\\u3002\n\\u4FEE\\u6CD5\\uFF1A\\u4E0D\\u8981\\u5728 setup/onSession \\u4E2D\\u52A0\\u8F7D\\u540C\\u4E00\\u8FDC\\u7A0B\\u7684\\u6A21\\u5757\\uFF1B\\u8BF7\\u5728\\u9875\\u9762\\u7EC4\\u4EF6\\u4E2D\\u52A0\\u8F7D\\uFF0C\\u6216\\u901A\\u8FC7 context \\u89E3\\u8026\\u3002`,{remote:t});try{I.beforeLoadRemote?.({remote:t,module:n})}catch(h){console.warn("[fulgurjs] beforeLoadRemote \\u89C2\\u6D4B\\u94A9\\u5B50\\u6267\\u884C\\u5931\\u8D25\\uFF1B\\u6A21\\u5757\\u52A0\\u8F7D\\u5C06\\u7EE7\\u7EED\\u3002\\u8BF7\\u68C0\\u67E5\\u8BE5\\u94A9\\u5B50\\uFF1A",h)}let a=c.get(t);if(!a)throw new S(E.REMOTE_UNKNOWN,`\\u672A\\u77E5\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}"\\u3002\\u8BF7\\u5728 federation({ remotes }) \\u4E2D\\u914D\\u7F6E\\uFF0C\\u6216\\u5728\\u52A0\\u8F7D\\u524D\\u8C03\\u7528 registerRemote()\\u3002`,{remote:t});let s;try{let h=n&&a.manifestUrl?F(e):Promise.resolve();[s]=await Promise.all([X(a,{retries:r?.retries}),h])}catch(h){if(r?.fallbackModule)return console.error(`[fulgurjs] \\u8FDC\\u7A0B\\u6A21\\u5757 "${e}" \\u52A0\\u8F7D\\u5931\\u8D25\\uFF0C\\u6B63\\u5728\\u4F7F\\u7528\\u663E\\u5F0F\\u914D\\u7F6E\\u7684 fallbackModule\\uFF1B\\u539F\\u59CB\\u9519\\u8BEF\\uFF1A`,h),_({remote:t,error:h}),await r.fallbackModule();throw h}if(!n)return s;await te(a,s);let u=`${t}@${a.shareScope||"default"}#${n}`;g.has(u)||g.set(u,s.get(n).catch(h=>{throw g.delete(u),h instanceof S||h?.code?h:new S(E.REMOTE_LOAD_FAILED,`\\u65E0\\u6CD5\\u4ECE\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}" \\u52A0\\u8F7D\\u6A21\\u5757 "${n}"\\u3002\\u5E95\\u5C42\\u539F\\u56E0\\uFF1A${String(h?.message??h)}\\u3002\\u8BF7\\u6838\\u5BF9 exposes \\u952E\\u548C\\u8FDC\\u7A0B\\u6784\\u5EFA\\u4EA7\\u7269\\u3002`,{remote:t,module:n})}));let p;try{p=await g.get(u)}catch(h){if(r?.fallbackModule)return console.error(`[fulgurjs] \\u8FDC\\u7A0B\\u6A21\\u5757 "${e}" \\u52A0\\u8F7D\\u5931\\u8D25\\uFF0C\\u6B63\\u5728\\u4F7F\\u7528\\u663E\\u5F0F\\u914D\\u7F6E\\u7684 fallbackModule\\uFF1B\\u539F\\u59CB\\u9519\\u8BEF\\uFF1A`,h),_({remote:t,error:h}),await r.fallbackModule();throw h}try{I.afterLoadRemote?.({remote:t,module:n,module_ns:p})}catch(h){console.warn("[fulgurjs] afterLoadRemote \\u89C2\\u6D4B\\u94A9\\u5B50\\u6267\\u884C\\u5931\\u8D25\\uFF1B\\u5DF2\\u52A0\\u8F7D\\u6A21\\u5757\\u4ECD\\u53EF\\u4F7F\\u7528\\u3002\\u8BF7\\u68C0\\u67E5\\u8BE5\\u94A9\\u5B50\\uFF1A",h)}if(p&&typeof p=="object"&&Object.keys(p).length===0){let h=new S(E.EMPTY_EXPORTS,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}" \\u7684\\u6A21\\u5757 "${n}" \\u6CA1\\u6709\\u4EFB\\u4F55\\u5BFC\\u51FA\\u3002\\u8BF7\\u68C0\\u67E5 exposes \\u6307\\u5411\\u7684\\u6587\\u4EF6\\u53CA\\u5176 export \\u58F0\\u660E\\u3002`,{remote:t,module:n});_({remote:t,error:h}),console.error(h.message)}return p}function me(e){let r=c.get(e);if(!r)throw new S(E.REMOTE_UNKNOWN,`\\u672A\\u77E5\\u8FDC\\u7A0B\\u5E94\\u7528 "${e}"\\u3002\\u8BF7\\u5148\\u6CE8\\u518C\\u8BE5\\u8FDC\\u7A0B\\u5E94\\u7528\\u3002`,{remote:e});return X(r)}async function F(e,r={}){let{remote:t,module:n}=C(e),a=c.get(t);if(!a)throw new S(E.REMOTE_UNKNOWN,`\\u672A\\u77E5\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}"\\u3002\\u8BF7\\u5148\\u6CE8\\u518C\\u8BE5\\u8FDC\\u7A0B\\u5E94\\u7528\\u3002`,{remote:t});let s=r.mode??"preload",u=(d,R)=>{if(d.sheet)return Promise.resolve();let f=w.get(d);if(f)return f;let m=new Promise(v=>{let $=()=>{d.removeEventListener("load",$),d.removeEventListener("error",T),v()},T=()=>{_({remote:t,error:new S(E.PRELOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}" \\u7684\\u6837\\u5F0F\\u8D44\\u6E90\\u52A0\\u8F7D\\u5931\\u8D25\\uFF1A${R}\\u3002\\u8BF7\\u68C0\\u67E5\\u6587\\u4EF6\\u662F\\u5426\\u5B58\\u5728\\u4EE5\\u53CA\\u8DE8\\u57DF\\u548C\\u7F13\\u5B58\\u914D\\u7F6E\\u3002`,{remote:t})}),$()};d.addEventListener("load",$,{once:!0}),d.addEventListener("error",T,{once:!0}),d.sheet&&$()});return w.set(d,m),m},p=(d,R)=>{if(typeof document>"u")return Promise.resolve();let f=document.querySelector(`link[href="${d}"]`);if(f)return R==="style"&&s==="preload"?w.get(f)??Promise.resolve():Promise.resolve();let m=document.createElement("link");m.rel=R==="style"?"stylesheet":"modulepreload",m.href=d,s==="prefetch"&&(m.fetchPriority="low");let v=R==="style"?u(m,d):Promise.resolve();return document.head.appendChild(m),R==="style"&&s==="preload"?v:Promise.resolve()},h=d=>{let R=typeof document<"u"?document.baseURI:void 0,f=new URL(a.entry,R||"http://fulgurjs.invalid/");return!f.pathname.endsWith("/")&&!f.pathname.split("/").pop().includes(".")&&(f.pathname+="/"),new URL(d,f).href};try{if(a.manifestUrl){let d=y.get(a.manifestUrl);d||(d=fetch(a.manifestUrl,{cache:"no-cache",signal:AbortSignal.timeout(8e3)}).then(f=>f.ok?f.json():void 0),y.set(a.manifestUrl,d),d.then(f=>{f||y.delete(a.manifestUrl)},()=>y.delete(a.manifestUrl)));let R=await d;if(R){let f=R.schemaVersion;if(typeof f=="number"&&(!Number.isInteger(f)||f>1)){_({remote:t,error:new S(E.PRELOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}" \\u7684 manifest \\u534F\\u8BAE\\u7248\\u672C\\u4E3A ${String(f)}\\uFF0C\\u5F53\\u524D\\u4EC5\\u652F\\u6301\\u7248\\u672C 1\\u3002\\u8BF7\\u7EDF\\u4E00\\u5BBF\\u4E3B\\u548C\\u8FDC\\u7A0B\\u7684\\u63D2\\u4EF6\\u7248\\u672C\\u3002`,{remote:t})}),await p(a.entry,"modulepreload");return}await p(a.entry,"modulepreload");let m=R.exposes,v=Array.isArray(m)?m.filter(M=>M&&typeof M=="object").map(M=>[String(M.name??""),M]):m&&typeof m=="object"?Object.entries(m):[],$=n?v.filter(([M,x])=>B(String(x?.name??M))===n):v,T=[];for(let[,M]of $)if(typeof M?.file=="string"&&await p(h(M.file),"modulepreload"),Array.isArray(M?.css))for(let x of M.css){if(typeof x!="string")continue;let pe=p(h(x),"style");s==="preload"&&T.push(pe)}await Promise.all(T);return}}await p(a.entry,"modulepreload")}catch(d){_({remote:t,error:new S(E.PRELOAD_FAILED,`\\u8FDC\\u7A0B\\u5E94\\u7528 "${t}" \\u9884\\u52A0\\u8F7D\\u5931\\u8D25\\u3002\\u5E95\\u5C42\\u539F\\u56E0\\uFF1A${String(d?.message??d)}\\u3002\\u8BF7\\u68C0\\u67E5 manifest \\u548C\\u8D44\\u6E90\\u5730\\u5740\\u3002`,{remote:t})})}}return typeof window>"u"||(window.__FULGURJS_SCOPE__=i,window.__FULGURJS_INFO__={get remotes(){let e={};for(let[r,t]of c)e[r]={...t.debug,entry:t.entry};return e},errors:[]}),{shareScopeMap:i,initSharing:oe,registerShare:se,registerRemotes:H,registerRemote:ae,registerPlugins:ce,loadShare:le,loadRemote:fe,getContainer:me,preloadRemote:F,parseSpec:C,clearSessionState:ne}}var Y=globalThis,P=Y.__FULGURJS_RUNTIME__??Oe();Y.__FULGURJS_RUNTIME__=P;try{Object.freeze(P)}catch{}var Ce=W;function Fe(){return P}var De=P.initSharing,Ve=P.registerShare,Ke=P.registerRemotes,He=P.registerRemote,qe=P.registerPlugins,Ge=P.loadShare,Je=P.loadRemote,Xe=P.getContainer,Be=P.preloadRemote,We=P.parseSpec,ze=P.clearSessionState,Ye=P.shareScopeMap;function Ze(i){if(i&&typeof i=="object"&&"default"in i){let c=i.default;return c!==void 0?c:i}return i}var Qe=P;export{ze as clearSessionState,Qe as default,Xe as getContainer,Fe as getRuntime,De as initSharing,Je as loadRemote,Ge as loadShare,We as parseSpec,Be as preloadRemote,qe as registerPlugins,He as registerRemote,Ke as registerRemotes,Ve as registerShare,P as runtime,Ye as shareScopeMap,Ze as unwrapDefault,Ce as version};\n';
|
|
1754
1755
|
|
|
1755
1756
|
// src/index.ts
|
|
1756
1757
|
function readRuntimeCode() {
|
|
@@ -1772,7 +1773,7 @@ function enumerateCjsExports(packageName, appRoot) {
|
|
|
1772
1773
|
names = Object.keys(mod);
|
|
1773
1774
|
} catch {
|
|
1774
1775
|
console.warn(
|
|
1775
|
-
`[fulgurjs]
|
|
1776
|
+
`[fulgurjs] \u65E0\u6CD5\u679A\u4E3E\u5171\u4EAB\u4F9D\u8D56 "${packageName}" \u7684 CJS \u5BFC\u51FA\uFF0C\u9884\u6784\u5EFA\u95E8\u9762\u53EA\u4F1A\u63D0\u4F9B\u9ED8\u8BA4\u5BFC\u51FA\u3002\u5982\u679C\u4E1A\u52A1\u4EE3\u7801\u9700\u8981\u5177\u540D\u5BFC\u51FA\uFF0C\u8BF7\u5C06\u8BE5\u4F9D\u8D56\u52A0\u5165 optimizeDeps.exclude\uFF0C\u4F7F\u5176\u7ECF\u8FC7\u8054\u90A6\u8F6C\u6362\u6D41\u7A0B\u3002`
|
|
1776
1777
|
);
|
|
1777
1778
|
}
|
|
1778
1779
|
nsExportCache.set(packageName, names);
|
|
@@ -1815,7 +1816,6 @@ function facadeChunkOf(id) {
|
|
|
1815
1816
|
return null;
|
|
1816
1817
|
}
|
|
1817
1818
|
function federation(options) {
|
|
1818
|
-
const warnedUnknownPrefixes = /* @__PURE__ */ new Set();
|
|
1819
1819
|
let remoteSchemaPromise = null;
|
|
1820
1820
|
const state = {
|
|
1821
1821
|
command: "serve",
|
|
@@ -1917,7 +1917,7 @@ export { default } from ${JSON.stringify(url)};
|
|
|
1917
1917
|
if (userTarget) {
|
|
1918
1918
|
if (/es20(0\d|1\d|20|21)/.test(String(userTarget))) {
|
|
1919
1919
|
normalized.warnings.push(
|
|
1920
|
-
`build.target="${String(userTarget)}"
|
|
1920
|
+
`build.target="${String(userTarget)}" \u4E0D\u652F\u6301\u9876\u5C42 await\uFF1Bfulgurjs \u9700\u8981 es2022 \u6216\u66F4\u9AD8\u7248\u672C\u3002\u8BF7\u8C03\u6574 build.target\u3002`
|
|
1921
1921
|
);
|
|
1922
1922
|
}
|
|
1923
1923
|
} else {
|
|
@@ -1937,7 +1937,7 @@ export { default } from ${JSON.stringify(url)};
|
|
|
1937
1937
|
console.warn(
|
|
1938
1938
|
formatFulgurjsDiagnostic({
|
|
1939
1939
|
code: "BLD-006",
|
|
1940
|
-
symptom: "build.rollupOptions.output
|
|
1940
|
+
symptom: "build.rollupOptions.output \u662F\u6570\u7EC4\uFF0Cfulgurjs \u65E0\u6CD5\u81EA\u52A8\u6CE8\u5165\u5171\u4EAB\u95E8\u9762 chunk \u9632\u62A4",
|
|
1941
1941
|
cause: "devSharedSelf \u95E8\u9762\u5316 + manualChunks \u5F3A\u5236\u5206\u7EC4\u53EF\u80FD\u5F62\u6210 chunk \u5FAA\u73AF\u4F9D\u8D56\uFF08\u8FD0\u884C\u65F6 TypeError\uFF1A\u534F\u5546\u51FD\u6570\u672A\u521D\u59CB\u5316\uFF09",
|
|
1942
1942
|
fix: `\u5728\u6BCF\u4E2A output \u9879\u7684 manualChunks \u6700\u524D\u9762\u52A0\u5206\u652F\uFF1Aif (id.startsWith('virtual:fulgurjs-')) return 'fulgurjs-shared-facades'`
|
|
1943
1943
|
})
|
|
@@ -1974,7 +1974,7 @@ export { default } from ${JSON.stringify(url)};
|
|
|
1974
1974
|
configResolved(resolved) {
|
|
1975
1975
|
state.base = normalizeBase(resolved.base);
|
|
1976
1976
|
if (resolved.build?.ssr) {
|
|
1977
|
-
console.warn("[fulgurjs] SSR
|
|
1977
|
+
console.warn("[fulgurjs] \u5F53\u524D\u7248\u672C\u4E0D\u652F\u6301 SSR \u6784\u5EFA\uFF1B\u8054\u90A6\u63D2\u4EF6\u94A9\u5B50\u5DF2\u505C\u7528\u3002\u8BF7\u4F7F\u7528\u5BA2\u6237\u7AEF\u6784\u5EFA\u3002");
|
|
1978
1978
|
}
|
|
1979
1979
|
const n0 = state.normalized;
|
|
1980
1980
|
const optimize = resolved.optimizeDeps;
|
|
@@ -2017,20 +2017,6 @@ export { default } from ${JSON.stringify(url)};
|
|
|
2017
2017
|
}
|
|
2018
2018
|
}
|
|
2019
2019
|
}
|
|
2020
|
-
const n = state.normalized;
|
|
2021
|
-
if (n && !bare.startsWith("\0") && !bareClean.startsWith(".") && !bareClean.startsWith("/") && !bareClean.startsWith("virtual:")) {
|
|
2022
|
-
const slash = bareClean.indexOf("/");
|
|
2023
|
-
if (slash > 0) {
|
|
2024
|
-
const prefix = bareClean.slice(0, slash);
|
|
2025
|
-
const known = bareClean === "@fulgurjs/federation/runtime" || n.remotes.some((r) => r.key === prefix) || n.shared.some((sh) => sh.aliases.includes(prefix) || sh.aliases.some((a) => a.endsWith("/") && prefix.startsWith(a)));
|
|
2026
|
-
if (!known && !warnedUnknownPrefixes.has(prefix)) {
|
|
2027
|
-
warnedUnknownPrefixes.add(prefix);
|
|
2028
|
-
console.warn(
|
|
2029
|
-
`[fulgurjs] "${source}" uses prefix "${prefix}/", which is not in federation({ remotes }) or shared. If "${prefix}" is a federated remote, add it: remotes: { '${prefix}': '<url>' }. (Ignore this if it is a plain npm package.)`
|
|
2030
|
-
);
|
|
2031
|
-
}
|
|
2032
|
-
}
|
|
2033
|
-
}
|
|
2034
2020
|
if (bareClean === RUNTIME_VIRTUAL_ID) return RESOLVED.runtime;
|
|
2035
2021
|
if (bareClean === RUNTIME_PROXY_VIRTUAL_ID) return RESOLVED.runtimeProxy;
|
|
2036
2022
|
if (bareClean === INIT_VIRTUAL_ID) return RESOLVED.init;
|
|
@@ -2188,12 +2174,12 @@ ${code}`, map: null };
|
|
|
2188
2174
|
state.manualChunkGroups.set(r.id.split("?")[0], group);
|
|
2189
2175
|
} else {
|
|
2190
2176
|
console.warn(
|
|
2191
|
-
`[fulgurjs] manualChunks
|
|
2177
|
+
`[fulgurjs] manualChunks \u5206\u7EC4 "${group}" \u4E2D\u7684\u6A21\u5757 "${specifier}" \u65E0\u6CD5\u89E3\u6790\uFF0C\u5DF2\u56DE\u9000\u4E3A\u81EA\u52A8\u5206\u5305\uFF1B\u5171\u4EAB\u534F\u5546\u95E8\u9762\u4ECD\u53D7\u4FDD\u62A4\u3002\u8BF7\u68C0\u67E5\u6A21\u5757\u8DEF\u5F84\u3002`
|
|
2192
2178
|
);
|
|
2193
2179
|
}
|
|
2194
2180
|
} catch {
|
|
2195
2181
|
console.warn(
|
|
2196
|
-
`[fulgurjs] manualChunks
|
|
2182
|
+
`[fulgurjs] manualChunks \u5206\u7EC4 "${group}" \u4E2D\u7684\u6A21\u5757 "${specifier}" \u89E3\u6790\u5931\u8D25\uFF0C\u5DF2\u56DE\u9000\u4E3A\u81EA\u52A8\u5206\u5305\u3002\u8BF7\u68C0\u67E5\u6A21\u5757\u8DEF\u5F84\u3002`
|
|
2197
2183
|
);
|
|
2198
2184
|
}
|
|
2199
2185
|
}
|