@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/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
- `remotes["${key}"] is a function (promise-based remote): it cannot be serialized into the bundle; register it at runtime via registerRemote() (same semantics as webpack "promise new Promise"). The key stays in config for import-syntax rewriting.`
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(`Invalid remote request "${raw}" for "${key}": misplaced "@".`);
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: shared["${configKey}"] combines eager with import:false`,
149
+ `CFG-008\uFF1Ashared["${configKey}"] \u4E0D\u80FD\u540C\u65F6\u914D\u7F6E eager \u548C import:false`,
151
150
  hint,
152
- "eager requires a local copy to bundle into the initial chunk",
153
- `shared: { '${configKey}': { eager: true } } // or drop eager: { '${configKey}': { import: false } }`
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: shared key "${shareKeyOfHint}" is declared twice in share scope "${shareScopeOfHint}" (keys "${dup.configKey}" and "${configKey}")`,
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
- "one declaration per shareKey per share scope",
167
- `merge hints: { '${shareKeyOfHint}': { singleton: true } } // or use distinct shareKey values`
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
- `shared["${configKey}"]: requiredVersion could not be inferred from package.json; accepting any version.`
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
- `shared["${configKey}"]: installed version not found; registering as 0.0.0 (it will still be consumable but ranked lowest).`
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] Invalid federation() config \u2014 ${what}`,
228
- ` got: ${gotText}`,
229
- ` expected: ${expect}`,
230
- ` example: ${example}`
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
- "`name` is required (container name, also used as uniqueName)",
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
- "a non-empty string unique among host/remotes in the same page",
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
- "`name` must match /^[a-zA-Z][\\w.-]*$/ (letters first, no spaces/slashes)",
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
- 'e.g. "my-app", "host-app"',
262
+ '\u4F8B\u5982 "my-app" \u6216 "host-app"',
248
263
  `federation({ name: 'my-app', ... })`
249
264
  );
250
265
  }
251
- if (options.remoteType !== void 0 && options.remoteType !== "module") {
252
- configError(
253
- 'CFG-011: remoteType other than "module" is not supported',
254
- options.remoteType,
255
- '"module"\uFF08\u7F3A\u7701\u5373\u53EF\uFF09\u2014\u2014webpack script/var remote \u4E92\u64CD\u4F5C\u672A\u5B9E\u73B0',
256
- `// \u5220\u9664 remoteType \u914D\u7F6E\uFF08fulgurjs \u53EA\u4EA7\u51FA ESM module remote\uFF09`
257
- );
258
- }
259
- if (options.library?.type !== void 0 && options.library.type !== "module" && options.library.type !== "esm") {
260
- configError(
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: exposes key "${norm}" is reserved for the federation setup entry`,
281
+ `CFG-012\uFF1Aexposes \u952E "${norm}" \u5DF2\u7531\u8054\u90A6 setup \u5165\u53E3\u4FDD\u7559`,
280
282
  key,
281
- `a public expose name\uFF08\u5185\u90E8\u4FDD\u7559\u952E "${SETUP_EXPOSE_KEY}" \u7531 setup \u9009\u9879\u81EA\u52A8\u751F\u6210\uFF09`,
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: setup must be a non-empty module path relative to the app root",
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
- 'e.g. "./src/fulgurjs/setup.ts"\uFF08\u9ED8\u8BA4\u5BFC\u51FA setup(context)\uFF0C\u53EF\u9009\u5177\u540D\u5BFC\u51FA onSession(context)\uFF09',
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("`exposes` must be an object", options.exposes, 'an object of { "./Module": "./src/path" }', `exposes: { './Button': './src/Button.vue' }`);
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("`remotes` must be an object", options.remotes, "an object of { name: url | { dev, prod } | () => Promise<container> }", `remotes: { 'remote-a': 'http://localhost:5101' }`);
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("`shared` must be an array or an object", options.shared, '["vue"] or { vue: { singleton: true } }', `shared: { vue: { singleton: true } }`);
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 is missing`,
311
+ `exposes["${key}"].import \u7F3A\u5931`,
310
312
  val,
311
- 'a source path string, or { import: "./src/path" }',
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 key "${key}" contains invalid characters (@, / or whitespace)`,
321
+ `remotes \u952E "${key}" \u5305\u542B\u975E\u6CD5\u5B57\u7B26\uFF08@\u3001/ \u6216\u7A7A\u767D\u5B57\u7B26\uFF09`,
320
322
  key,
321
- 'a bare module-style name used as import prefix, e.g. "remote-a"',
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}"] is an empty string`, val, "a remote base URL or full entry URL", `remotes: { '${key}': 'http://localhost:5101' }`);
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}"] has unsupported type`, val, "string | { dev?, prod?, external? } | () => Promise<container>", `remotes: { '${key}': { dev: 'http://localhost:5101', prod: '/remote-a' } }`);
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}"] has no address (need one of external / dev / prod)`,
337
+ `remotes["${key}"] \u6CA1\u6709\u5730\u5740\uFF08external\u3001dev\u3001prod \u81F3\u5C11\u586B\u5199\u4E00\u4E2A\uFF09`,
336
338
  val,
337
- "at least one address; with only one URL it is used for both dev and prod",
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
- // or split: { '${key}': { dev: 'http://localhost:5101', prod: '/${key}' } }`
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: remotes["${key}"].timeout must be a finite positive number (ms)`,
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: remotes["${key}"].retries must be an integer in 0..10`,
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: remotes["${key}"].breaker.threshold must be a finite positive number`,
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: remotes["${key}"].breaker.resetMs must be a finite positive number (ms)`,
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} must be a string`, v, "a URL string", `remotes: { '${key}': { ${slot}: 'http://localhost:5101' } }`);
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: remotes["${key}"].${slot} uses the "name@url" prefix, which the object form does not support (it is concatenated verbatim into a broken URL)`,
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
- "a bare URL (the remote self-name defaults to the key), or the plain string form if renaming is needed",
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
- "`devFsRoot` must be a boolean",
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("[fulgurjs] option `name` is required.");
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(`exposes key "${rawName}" normalized to "${name}".`);
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(`remote name "${r.name}" is declared for multiple keys; names must be unique.`);
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
- 'federation() has neither `exposes` nor `remotes` \u2014 it only sets up shared modules. If you intended a remote, add `exposes: { "./Module": "./src/path" }`; if a host, add `remotes: { ... }`.'
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
- `federation({ name: "${options.name}" }) consumes remotes but exposes nothing \u2014 this app is a pure host. Files will not be available to other apps; add \`exposes\` if that is unintended.`
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}'" on a shared module is not supported (ESM cannot create dynamic export bindings). Use named re-exports: "export { a, b } 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] dts: remote manifest schemaVersion=${parsed.unsupportedVersion} \u4E0D\u88AB\u5F53\u524D\u63D2\u4EF6\u652F\u6301\uFF08\u672C\u673A\u652F\u6301 1\uFF09\uFF1B\u7C7B\u578B\u6620\u5C04\u8DF3\u8FC7\u3002\u8BF7\u5BF9\u9F50\u5BBF\u4E3B\u4E0E\u8FDC\u7A0B\u7684 @fulgurjs/federation \u7248\u672C\u3002`
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] dts: remote 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
+ `[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] dts: remote "${remote.key}" dev manifest unavailable; type mapping skipped.`);
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] dts: remote "${remote.key}" \u7684 manifest \u672A\u643A\u5E26 fsRoot\uFF08devFsRoot: false \u6216\u8FDC\u7A0B\u63D2\u4EF6\u7248\u672C\u8FC7\u65E7\uFF09\uFF1B\u7C7B\u578B\u6620\u5C04\u964D\u7EA7\u4E3A any \u6869\u3002\u540C\u673A\u8054\u8C03\u9700\u8FDC\u7A0B devFsRoot: true\uFF08\u9ED8\u8BA4\uFF09\u5E76\u91CD\u542F\u5176 dev server\u3002`
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] dts: remote "${remote.key}" is not on this machine (fsRoot unreachable); type mapping skipped (module types fall back to any).`
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] dts: remote "${remote.key}" expose ${JSON.stringify(expose.name)} \u8DF3\u8FC7\uFF1A${reason}`);
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\uFF0Cgot ${JSON.stringify(src)}`);
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 ..\uFF0Cgot ${JSON.stringify(src)}`);
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] dts: generated ${dir}/${remote.key}.d.ts (${accepted}/${manifest.exposes?.length ?? 0} exposes, mode=${mode}). \u786E\u4FDD tsconfig include \u5305\u542B "${dir}" \u4EE5\u83B7\u5F97\u7C7B\u578B\u8865\u5168\u3002`
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: `remote "${remote.key}" \u7684 manifest schemaVersion=${parsed.unsupportedVersion} \u4E0D\u53D7\u652F\u6301\uFF08\u672C\u673A\u652F\u6301 1\uFF09`,
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: `remote "${remote.key}" \u7684 dev manifest \u5951\u7EA6\u6821\u9A8C\u5931\u8D25\uFF08${u.href}\uFF09`,
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: `remote "${remote.key}" \u7684 dev manifest \u53EF\u8FBE\u4F46 exposes \u4E3A\u7A7A\uFF08${u.href}\uFF09`,
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 remote "${remote.key}" \u7684 @fulgurjs/federation \u7248\u672C\u4E0D\u4E00\u81F4`,
1697
- cause: `\u5BBF\u4E3B ${options.pluginVersion} vs \u8FDC\u7A0B ${remoteVersion}\uFF08pnpm tarball \u65AD\u94FE/\u6F0F\u5347\u7EA7\u5E38\u89C1\uFF09`,
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: `remote "${remote.key}" \u7684 dev manifest \u4E0D\u53EF\u8FBE\uFF08${u.href}\uFF09\u2014\u2014\u8BE5 remote \u7684\u8DEF\u7531\u5B58\u5728\u6027\u6821\u9A8C\u5C06\u8DF3\u8FC7`,
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] cannot enumerate CJS exports of shared package "${packageName}" for the optimize-deps facade; the facade will export default only. If consumers destructure named exports from it, add this package to optimizeDeps.exclude to serve it through the transform pipeline instead.`
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)}" does not support top-level await; fulgurjs requires es2022 or higher.`
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 is an array; fulgurjs cannot inject the shared-facade chunk guard automatically",
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 builds are not supported in this version; plugin hooks disabled.");
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: could not resolve "${specifier}" for group "${group}"; those modules will fall back to automatic chunking. (Their shared-negotiation facades are still guarded.)`
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: resolving "${specifier}" (group "${group}") failed; those modules will fall back to automatic chunking.`
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
  }