@fulgurjs/federation 4.3.0 → 4.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -43,7 +43,7 @@ var import_node_fs = __toESM(require("fs"), 1);
43
43
  var import_node_path = __toESM(require("path"), 1);
44
44
 
45
45
  // src/version.ts
46
- var RUNTIME_VERSION = "4.3.0";
46
+ var RUNTIME_VERSION = "4.3.1";
47
47
 
48
48
  // src/dev-cors.ts
49
49
  function normalizeDevCorsOrigins(input) {
@@ -98,7 +98,7 @@ function joinUrl(base, file) {
98
98
  function normalizeRemoteValue(key, value, filename, warnings) {
99
99
  if (typeof value === "function") {
100
100
  warnings.push(
101
- `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.`
101
+ `\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`
102
102
  );
103
103
  return {
104
104
  key,
@@ -118,7 +118,7 @@ function normalizeRemoteValue(key, value, filename, warnings) {
118
118
  selfName = raw.slice(0, at);
119
119
  raw = raw.slice(at + 1);
120
120
  } else if (at === 0 || at === raw.length - 1) {
121
- throw new Error(`Invalid remote request "${raw}" for "${key}": misplaced "@".`);
121
+ 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`);
122
122
  }
123
123
  }
124
124
  const resolveEntry = (rawUrl, mode) => {
@@ -181,10 +181,10 @@ function normalizeShared(shared, shareScopeDefault, pkgDependencies, root, warni
181
181
  for (const [configKey, hint] of entries) {
182
182
  if (hint.eager && hint.import === false) {
183
183
  configError(
184
- `CFG-008: shared["${configKey}"] combines eager with import:false`,
184
+ `CFG-008\uFF1Ashared["${configKey}"] \u4E0D\u80FD\u540C\u65F6\u914D\u7F6E eager \u548C import:false`,
185
185
  hint,
186
- "eager requires a local copy to bundle into the initial chunk",
187
- `shared: { '${configKey}': { eager: true } } // or drop eager: { '${configKey}': { import: false } }`
186
+ "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",
187
+ `shared: { '${configKey}': { eager: true } } // \u6216\u53D6\u6D88 eager\uFF1A{ '${configKey}': { import: false } }`
188
188
  );
189
189
  }
190
190
  const canonical = configKey.endsWith("/") ? configKey.slice(0, -1) : configKey;
@@ -195,10 +195,10 @@ function normalizeShared(shared, shareScopeDefault, pkgDependencies, root, warni
195
195
  const dup = out.find((s) => s.shareKey === shareKeyOfHint && s.shareScope === shareScopeOfHint);
196
196
  if (dup) {
197
197
  configError(
198
- `CFG-008: shared key "${shareKeyOfHint}" is declared twice in share scope "${shareScopeOfHint}" (keys "${dup.configKey}" and "${configKey}")`,
198
+ `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`,
199
199
  configKey,
200
- "one declaration per shareKey per share scope",
201
- `merge hints: { '${shareKeyOfHint}': { singleton: true } } // or use distinct shareKey values`
200
+ "\u6BCF\u4E2A\u5171\u4EAB\u4F5C\u7528\u57DF\u5185\uFF0C\u540C\u4E00 shareKey \u53EA\u80FD\u58F0\u660E\u4E00\u6B21",
201
+ `\u5408\u5E76\u914D\u7F6E\uFF1A{ '${shareKeyOfHint}': { singleton: true } } // \u6216\u4F7F\u7528\u4E0D\u540C\u7684 shareKey`
202
202
  );
203
203
  }
204
204
  let requiredVersion;
@@ -213,7 +213,7 @@ function normalizeShared(shared, shareScopeDefault, pkgDependencies, root, warni
213
213
  } else {
214
214
  requiredVersion = false;
215
215
  warnings.push(
216
- `shared["${configKey}"]: requiredVersion could not be inferred from package.json; accepting any version.`
216
+ `\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`
217
217
  );
218
218
  }
219
219
  }
@@ -227,7 +227,7 @@ function normalizeShared(shared, shareScopeDefault, pkgDependencies, root, warni
227
227
  } else {
228
228
  version = "0.0.0";
229
229
  warnings.push(
230
- `shared["${configKey}"]: installed version not found; registering as 0.0.0 (it will still be consumable but ranked lowest).`
230
+ `\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`
231
231
  );
232
232
  }
233
233
  }
@@ -258,33 +258,33 @@ function configError(what, got, expect, example) {
258
258
  const gotText = typeof got === "string" ? `"${got}"` : JSON.stringify(got);
259
259
  throw new Error(
260
260
  [
261
- `[fulgurjs] Invalid federation() config \u2014 ${what}`,
262
- ` got: ${gotText}`,
263
- ` expected: ${expect}`,
264
- ` example: ${example}`
261
+ `[fulgurjs] federation() \u914D\u7F6E\u65E0\u6548\uFF1A${what}`,
262
+ ` \u5F53\u524D\u503C\uFF1A${gotText}`,
263
+ ` \u9884\u671F\u503C\uFF1A${expect}`,
264
+ ` \u4FEE\u6CD5\u793A\u4F8B\uFF1A${example}`
265
265
  ].join("\n")
266
266
  );
267
267
  }
268
268
  function validateOptions(options) {
269
269
  if (options.name === void 0 || options.name === null || options.name === "") {
270
270
  configError(
271
- "`name` is required (container name, also used as uniqueName)",
271
+ "\u7F3A\u5C11\u5FC5\u586B\u7684 name\uFF08\u5BB9\u5668\u540D\u79F0\uFF0C\u4E5F\u662F\u9875\u9762\u5185\u7684\u552F\u4E00\u6807\u8BC6\uFF09",
272
272
  options.name,
273
- "a non-empty string unique among host/remotes in the same page",
273
+ "\u540C\u4E00\u9875\u9762\u7684\u5BBF\u4E3B\u4E0E\u8FDC\u7A0B\u4E4B\u95F4\u552F\u4E00\u7684\u975E\u7A7A\u5B57\u7B26\u4E32",
274
274
  `federation({ name: 'my-app', ... })`
275
275
  );
276
276
  }
277
277
  if (typeof options.name !== "string" || !/^[a-zA-Z][\w.-]*$/.test(options.name)) {
278
278
  configError(
279
- "`name` must match /^[a-zA-Z][\\w.-]*$/ (letters first, no spaces/slashes)",
279
+ "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",
280
280
  options.name,
281
- 'e.g. "my-app", "host-app"',
281
+ '\u4F8B\u5982 "my-app" \u6216 "host-app"',
282
282
  `federation({ name: 'my-app', ... })`
283
283
  );
284
284
  }
285
285
  if (options.remoteType !== void 0 && options.remoteType !== "module") {
286
286
  configError(
287
- 'CFG-011: remoteType other than "module" is not supported',
287
+ 'CFG-011\uFF1AremoteType \u76EE\u524D\u4EC5\u652F\u6301 "module"',
288
288
  options.remoteType,
289
289
  '"module"\uFF08\u7F3A\u7701\u5373\u53EF\uFF09\u2014\u2014webpack script/var remote \u4E92\u64CD\u4F5C\u672A\u5B9E\u73B0',
290
290
  `// \u5220\u9664 remoteType \u914D\u7F6E\uFF08fulgurjs \u53EA\u4EA7\u51FA ESM module remote\uFF09`
@@ -292,7 +292,7 @@ function validateOptions(options) {
292
292
  }
293
293
  if (options.library?.type !== void 0 && options.library.type !== "module" && options.library.type !== "esm") {
294
294
  configError(
295
- 'CFG-011: library.type other than "module"/"esm" is not supported',
295
+ 'CFG-011\uFF1Alibrary.type \u76EE\u524D\u4EC5\u652F\u6301 "module" \u6216 "esm"',
296
296
  options.library.type,
297
297
  '"module" \u6216 "esm"\uFF08\u7F3A\u7701\u5373\u53EF\uFF09\u2014\u2014webpack UMD/var \u8F93\u51FA\u4E92\u64CD\u4F5C\u672A\u5B9E\u73B0',
298
298
  `// \u5220\u9664 library \u914D\u7F6E\uFF08fulgurjs remoteEntry \u6052\u4E3A ESM\uFF09`
@@ -300,7 +300,7 @@ function validateOptions(options) {
300
300
  }
301
301
  if (options.automaticAsyncBoundary === false) {
302
302
  configError(
303
- "CFG-011: automaticAsyncBoundary=false cannot be honored",
303
+ "CFG-011\uFF1A\u4E0D\u80FD\u5173\u95ED\u81EA\u52A8\u5F02\u6B65\u8FB9\u754C\uFF08automaticAsyncBoundary=false\uFF09",
304
304
  options.automaticAsyncBoundary,
305
305
  "\u7F3A\u7701\u6216 true\u2014\u2014fulgurjs \u4F7F\u7528 TLA \u81EA\u52A8\u5F02\u6B65\u8FB9\u754C\uFF0C\u4E0D\u5B58\u5728\u624B\u5DE5 bootstrap \u6A21\u5F0F",
306
306
  `// \u5220\u9664 automaticAsyncBoundary \u914D\u7F6E\uFF08\u5BB9\u5668\u534F\u8BAE\u5929\u7136\u5F02\u6B65\uFF09`
@@ -310,9 +310,9 @@ function validateOptions(options) {
310
310
  const norm = key.startsWith("./") ? key : `./${key}`;
311
311
  if (norm === SETUP_EXPOSE_KEY) {
312
312
  configError(
313
- `CFG-012: exposes key "${norm}" is reserved for the federation setup entry`,
313
+ `CFG-012\uFF1Aexposes \u952E "${norm}" \u5DF2\u7531\u8054\u90A6 setup \u5165\u53E3\u4FDD\u7559`,
314
314
  key,
315
- `a public expose name\uFF08\u5185\u90E8\u4FDD\u7559\u952E "${SETUP_EXPOSE_KEY}" \u7531 setup \u9009\u9879\u81EA\u52A8\u751F\u6210\uFF09`,
315
+ `\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`,
316
316
  `// \u628A\u8BE5 expose \u6539\u540D\uFF0C\u6216\u5220\u9664\u5B83\u5E76\u628A\u539F\u6587\u4EF6\u8DEF\u5F84\u914D\u7F6E\u5230 federation({ setup })`
317
317
  );
318
318
  }
@@ -320,29 +320,29 @@ function validateOptions(options) {
320
320
  if (options.setup !== void 0) {
321
321
  if (typeof options.setup !== "string" || options.setup.trim() === "") {
322
322
  configError(
323
- "CFG-012: setup must be a non-empty module path relative to the app root",
323
+ "CFG-012\uFF1Asetup \u5FC5\u987B\u662F\u76F8\u5BF9\u5E94\u7528\u6839\u76EE\u5F55\u7684\u975E\u7A7A\u6A21\u5757\u8DEF\u5F84",
324
324
  options.setup,
325
- 'e.g. "./src/fulgurjs/setup.ts"\uFF08\u9ED8\u8BA4\u5BFC\u51FA setup(context)\uFF0C\u53EF\u9009\u5177\u540D\u5BFC\u51FA onSession(context)\uFF09',
325
+ '\u4F8B\u5982 "./src/fulgurjs/setup.ts"\uFF08\u9ED8\u8BA4\u5BFC\u51FA setup(context)\uFF0C\u53EF\u9009\u5177\u540D\u5BFC\u51FA onSession(context)\uFF09',
326
326
  `federation({ name: 'my-app', setup: './src/fulgurjs/setup.ts', ... })`
327
327
  );
328
328
  }
329
329
  }
330
330
  if (options.exposes !== void 0 && typeof options.exposes !== "object") {
331
- configError("`exposes` must be an object", options.exposes, 'an object of { "./Module": "./src/path" }', `exposes: { './Button': './src/Button.vue' }`);
331
+ configError("exposes \u5FC5\u987B\u662F\u5BF9\u8C61", options.exposes, '\u5F62\u5982 { "./Module": "./src/path" } \u7684\u5BF9\u8C61', `exposes: { './Button': './src/Button.vue' }`);
332
332
  }
333
333
  if (options.remotes !== void 0 && typeof options.remotes !== "object") {
334
- configError("`remotes` must be an object", options.remotes, "an object of { name: url | { dev, prod } | () => Promise<container> }", `remotes: { 'remote-a': 'http://localhost:5101' }`);
334
+ 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' }`);
335
335
  }
336
336
  if (options.shared !== void 0 && typeof options.shared !== "object") {
337
- configError("`shared` must be an array or an object", options.shared, '["vue"] or { vue: { singleton: true } }', `shared: { vue: { singleton: true } }`);
337
+ configError("shared \u5FC5\u987B\u662F\u6570\u7EC4\u6216\u5BF9\u8C61", options.shared, '["vue"] \u6216 { vue: { singleton: true } }', `shared: { vue: { singleton: true } }`);
338
338
  }
339
339
  for (const [key, val] of Object.entries(options.exposes ?? {})) {
340
340
  const importPath = typeof val === "string" ? val : val?.import;
341
341
  if (!importPath || typeof importPath !== "string") {
342
342
  configError(
343
- `exposes["${key}"].import is missing`,
343
+ `exposes["${key}"].import \u7F3A\u5931`,
344
344
  val,
345
- 'a source path string, or { import: "./src/path" }',
345
+ '\u6E90\u7801\u8DEF\u5F84\u5B57\u7B26\u4E32\uFF0C\u6216 { import: "./src/path" }',
346
346
  `exposes: { '${key.startsWith("./") ? key : "./" + key}': './src/views/Home.vue' }`
347
347
  );
348
348
  }
@@ -350,32 +350,32 @@ function validateOptions(options) {
350
350
  for (const [key, val] of Object.entries(options.remotes ?? {})) {
351
351
  if (/[/@\s]/.test(key)) {
352
352
  configError(
353
- `remotes key "${key}" contains invalid characters (@, / or whitespace)`,
353
+ `remotes \u952E "${key}" \u5305\u542B\u975E\u6CD5\u5B57\u7B26\uFF08@\u3001/ \u6216\u7A7A\u767D\u5B57\u7B26\uFF09`,
354
354
  key,
355
- 'a bare module-style name used as import prefix, e.g. "remote-a"',
355
+ '\u4F5C\u4E3A import \u524D\u7F00\u4F7F\u7528\u7684\u7EAF\u6A21\u5757\u540D\uFF0C\u4F8B\u5982 "remote-a"',
356
356
  `remotes: { 'remote-a': '...' } // then: import X from 'remote-a/Button'`
357
357
  );
358
358
  }
359
359
  if (typeof val === "function") continue;
360
360
  const cfg = typeof val === "string" ? { external: val } : val;
361
361
  if (typeof val === "string" && val.trim() === "") {
362
- configError(`remotes["${key}"] is an empty string`, val, "a remote base URL or full entry URL", `remotes: { '${key}': 'http://localhost:5101' }`);
362
+ 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' }`);
363
363
  }
364
364
  if (typeof val !== "string" && typeof cfg !== "object") {
365
- configError(`remotes["${key}"] has unsupported type`, val, "string | { dev?, prod?, external? } | () => Promise<container>", `remotes: { '${key}': { dev: 'http://localhost:5101', prod: '/remote-a' } }`);
365
+ 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' } }`);
366
366
  }
367
367
  if (!cfg?.external && !cfg?.dev && !cfg?.prod) {
368
368
  configError(
369
- `remotes["${key}"] has no address (need one of external / dev / prod)`,
369
+ `remotes["${key}"] \u6CA1\u6709\u5730\u5740\uFF08external\u3001dev\u3001prod \u81F3\u5C11\u586B\u5199\u4E00\u4E2A\uFF09`,
370
370
  val,
371
- "at least one address; with only one URL it is used for both dev and prod",
371
+ "\u81F3\u5C11\u4E00\u4E2A\u5730\u5740\uFF1B\u53EA\u586B\u4E00\u4E2A\u5730\u5740\u65F6\u5F00\u53D1\u4E0E\u751F\u4EA7\u5171\u7528",
372
372
  `remotes: { '${key}': 'http://localhost:5101' }
373
- // or split: { '${key}': { dev: 'http://localhost:5101', prod: '/${key}' } }`
373
+ // \u6216\u5206\u522B\u586B\u5199\uFF1A{ '${key}': { dev: 'http://localhost:5101', prod: '/${key}' } }`
374
374
  );
375
375
  }
376
376
  if (cfg.timeout !== void 0 && (typeof cfg.timeout !== "number" || !Number.isFinite(cfg.timeout) || cfg.timeout <= 0)) {
377
377
  configError(
378
- `CFG-009: remotes["${key}"].timeout must be a finite positive number (ms)`,
378
+ `CFG-009\uFF1Aremotes["${key}"].timeout \u5FC5\u987B\u662F\u5927\u4E8E 0 \u7684\u6709\u9650\u6BEB\u79D2\u6570`,
379
379
  cfg.timeout,
380
380
  "e.g. 15000\uFF08\u7701\u7565\u7528\u9ED8\u8BA4 15s\uFF09",
381
381
  `remotes: { '${key}': { external: '\u2026', timeout: 15000 } }`
@@ -383,7 +383,7 @@ function validateOptions(options) {
383
383
  }
384
384
  if (cfg.retries !== void 0 && (typeof cfg.retries !== "number" || !Number.isInteger(cfg.retries) || cfg.retries < 0 || cfg.retries > 10)) {
385
385
  configError(
386
- `CFG-009: remotes["${key}"].retries must be an integer in 0..10`,
386
+ `CFG-009\uFF1Aremotes["${key}"].retries \u5FC5\u987B\u662F 0 \u5230 10 \u7684\u6574\u6570`,
387
387
  cfg.retries,
388
388
  "e.g. 2\uFF08\u7701\u7565\u7528\u9ED8\u8BA4 2\uFF1B\u4E0A\u9650 10 \u9632\u9000\u907F\u98CE\u66B4\uFF09",
389
389
  `remotes: { '${key}': { external: '\u2026', retries: 2 } }`
@@ -393,7 +393,7 @@ function validateOptions(options) {
393
393
  if (brk) {
394
394
  if (brk.threshold !== void 0 && (typeof brk.threshold !== "number" || !Number.isFinite(brk.threshold) || brk.threshold <= 0)) {
395
395
  configError(
396
- `CFG-009: remotes["${key}"].breaker.threshold must be a finite positive number`,
396
+ `CFG-009\uFF1Aremotes["${key}"].breaker.threshold \u5FC5\u987B\u662F\u5927\u4E8E 0 \u7684\u6709\u9650\u6570\u5B57`,
397
397
  brk.threshold,
398
398
  "e.g. 5\uFF08\u8FDE\u7EED\u5931\u8D25 5 \u6B21\u540E\u7194\u65AD\uFF09",
399
399
  `remotes: { '${key}': { external: '\u2026', breaker: { threshold: 5, resetMs: 30000 } } }`
@@ -401,7 +401,7 @@ function validateOptions(options) {
401
401
  }
402
402
  if (brk.resetMs !== void 0 && (typeof brk.resetMs !== "number" || !Number.isFinite(brk.resetMs) || brk.resetMs <= 0)) {
403
403
  configError(
404
- `CFG-009: remotes["${key}"].breaker.resetMs must be a finite positive number (ms)`,
404
+ `CFG-009\uFF1Aremotes["${key}"].breaker.resetMs \u5FC5\u987B\u662F\u5927\u4E8E 0 \u7684\u6709\u9650\u6BEB\u79D2\u6570`,
405
405
  brk.resetMs,
406
406
  "e.g. 30000\uFF08\u7194\u65AD 30s \u540E\u534A\u5F00\uFF09",
407
407
  `remotes: { '${key}': { external: '\u2026', breaker: { threshold: 5, resetMs: 30000 } } }`
@@ -411,15 +411,15 @@ function validateOptions(options) {
411
411
  for (const slot of ["dev", "prod", "external"]) {
412
412
  const v = cfg[slot];
413
413
  if (v !== void 0 && typeof v !== "string") {
414
- configError(`remotes["${key}"].${slot} must be a string`, v, "a URL string", `remotes: { '${key}': { ${slot}: 'http://localhost:5101' } }`);
414
+ configError(`remotes["${key}"].${slot} \u5FC5\u987B\u662F\u5B57\u7B26\u4E32`, v, "URL \u5B57\u7B26\u4E32", `remotes: { '${key}': { ${slot}: 'http://localhost:5101' } }`);
415
415
  }
416
416
  if (slot !== "external") {
417
417
  const slotUrl = cfg[slot];
418
418
  if (typeof slotUrl === "string" && /^[A-Za-z][\w.-]*@/.test(slotUrl)) {
419
419
  configError(
420
- `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)`,
420
+ `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`,
421
421
  slotUrl,
422
- "a bare URL (the remote self-name defaults to the key), or the plain string form if renaming is needed",
422
+ "\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",
423
423
  `remotes: { '${key}': 'http://localhost:5101' } // or: remotes: { '${key}': { dev: 'http://localhost:5101', prod: '/${key}' } }`
424
424
  );
425
425
  }
@@ -437,7 +437,7 @@ function validateOptions(options) {
437
437
  }
438
438
  if (options.devFsRoot !== void 0 && typeof options.devFsRoot !== "boolean") {
439
439
  configError(
440
- "`devFsRoot` must be a boolean",
440
+ "devFsRoot \u5FC5\u987B\u662F\u5E03\u5C14\u503C",
441
441
  options.devFsRoot,
442
442
  "true\uFF08dev manifest \u643A\u5E26 fsRoot\uFF0C\u73B0\u72B6\u9ED8\u8BA4\uFF09\u6216 false\uFF08\u4E0D\u66B4\u9732\u672C\u673A\u8DEF\u5F84\uFF09",
443
443
  `devFsRoot: false`
@@ -447,11 +447,11 @@ function validateOptions(options) {
447
447
  function normalizeOptions(options, root, command) {
448
448
  const warnings = [];
449
449
  validateOptions(options);
450
- if (!options.name) throw new Error("[fulgurjs] option `name` is required.");
450
+ 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');
451
451
  const exposes = [];
452
452
  for (const [rawName, val] of Object.entries(options.exposes ?? {})) {
453
453
  const name = rawName.startsWith("./") ? rawName : `./${rawName}`;
454
- if (rawName !== name) warnings.push(`exposes key "${rawName}" normalized to "${name}".`);
454
+ 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`);
455
455
  const hint = typeof val === "string" ? { import: val } : val;
456
456
  exposes.push({ name, import: hint.import, chunkName: hint.name });
457
457
  }
@@ -471,18 +471,18 @@ function normalizeOptions(options, root, command) {
471
471
  const seenNames = /* @__PURE__ */ new Map();
472
472
  for (const r of remotes) {
473
473
  if (seenNames.has(r.name) && seenNames.get(r.name) !== r.key) {
474
- warnings.push(`remote name "${r.name}" is declared for multiple keys; names must be unique.`);
474
+ 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`);
475
475
  }
476
476
  seenNames.set(r.name, r.key);
477
477
  }
478
478
  if ((options.exposes === void 0 || Object.keys(options.exposes).length === 0) && (options.remotes === void 0 || Object.keys(options.remotes).length === 0)) {
479
479
  warnings.push(
480
- '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: { ... }`.'
480
+ "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"
481
481
  );
482
482
  }
483
483
  if (Object.keys(options.exposes ?? {}).length === 0 && Object.keys(options.remotes ?? {}).length > 0) {
484
484
  warnings.push(
485
- `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.`
485
+ `\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`
486
486
  );
487
487
  }
488
488
  return {
@@ -1345,7 +1345,7 @@ export { ${nsAs[1]} };`);
1345
1345
  const inner = clauseRaw.slice(clauseRaw.indexOf("{") + 1, clauseRaw.lastIndexOf("}"));
1346
1346
  if (/export\s+\*/.test(clauseRaw) && !clauseRaw.includes("{")) {
1347
1347
  throw new Error(
1348
- `[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}'".`
1348
+ `[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`
1349
1349
  );
1350
1350
  }
1351
1351
  const bindings = parseBindings(inner).map((b) => b.imported === "default" ? "default" : b.imported);
@@ -1412,13 +1412,13 @@ async function fetchManifest(devEntry, attempts = 30, delayMs = 2e3) {
1412
1412
  const parsed = parseManifest(await res.json());
1413
1413
  if (parsed.unsupportedVersion) {
1414
1414
  console.warn(
1415
- `[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`
1415
+ `[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`
1416
1416
  );
1417
1417
  return null;
1418
1418
  }
1419
1419
  if (parsed.issues.length > 0) {
1420
1420
  console.warn(
1421
- `[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`
1421
+ `[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`
1422
1422
  );
1423
1423
  return null;
1424
1424
  }
@@ -1510,13 +1510,13 @@ async function generateDevTypes(options, _server) {
1510
1510
  if (!remote.devEntry || remote.promise) continue;
1511
1511
  const manifest = await fetchManifest(remote.devEntry);
1512
1512
  if (!manifest || !manifest.exposes) {
1513
- console.warn(`[fulgurjs] dts: remote "${remote.key}" dev manifest unavailable; type mapping skipped.`);
1513
+ 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`);
1514
1514
  continue;
1515
1515
  }
1516
1516
  const remoteRoot = manifest.fsRoot;
1517
1517
  if (!remoteRoot) {
1518
1518
  console.warn(
1519
- `[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`
1519
+ `[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`
1520
1520
  );
1521
1521
  continue;
1522
1522
  }
@@ -1525,7 +1525,7 @@ async function generateDevTypes(options, _server) {
1525
1525
  realRoot = import_node_fs2.default.realpathSync(remoteRoot);
1526
1526
  } catch {
1527
1527
  console.warn(
1528
- `[fulgurjs] dts: remote "${remote.key}" is not on this machine (fsRoot unreachable); type mapping skipped (module types fall back to any).`
1528
+ `[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`
1529
1529
  );
1530
1530
  continue;
1531
1531
  }
@@ -1536,18 +1536,18 @@ async function generateDevTypes(options, _server) {
1536
1536
  let accepted = 0;
1537
1537
  for (const expose of manifest.exposes ?? []) {
1538
1538
  if (manifest.setup && expose.name === manifest.setup) continue;
1539
- const skipped = (reason) => console.warn(`[fulgurjs] dts: remote "${remote.key}" expose ${JSON.stringify(expose.name)} \u8DF3\u8FC7\uFF1A${reason}`);
1539
+ 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`);
1540
1540
  const src = expose.src;
1541
1541
  if (!src || typeof src !== "string") {
1542
1542
  skipped("src \u7F3A\u5931");
1543
1543
  continue;
1544
1544
  }
1545
1545
  if (src.startsWith("/") || /^[a-z]+:/i.test(src)) {
1546
- skipped(`src \u5FC5\u987B\u662F\u76F8\u5BF9\u8DEF\u5F84\uFF0Cgot ${JSON.stringify(src)}`);
1546
+ skipped(`src \u5FC5\u987B\u662F\u76F8\u5BF9\u8DEF\u5F84\uFF0C\u5F53\u524D\u503C\u4E3A ${JSON.stringify(src)}`);
1547
1547
  continue;
1548
1548
  }
1549
1549
  if (src.split("/").includes("..")) {
1550
- skipped(`src \u4E0D\u5F97\u5305\u542B ..\uFF0Cgot ${JSON.stringify(src)}`);
1550
+ skipped(`src \u4E0D\u5F97\u5305\u542B ..\uFF0C\u5F53\u524D\u503C\u4E3A ${JSON.stringify(src)}`);
1551
1551
  continue;
1552
1552
  }
1553
1553
  const abs = import_node_path3.default.join(realRoot, src);
@@ -1599,7 +1599,7 @@ async function generateDevTypes(options, _server) {
1599
1599
  `);
1600
1600
  }
1601
1601
  console.log(
1602
- `[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`
1602
+ `[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`
1603
1603
  );
1604
1604
  }
1605
1605
  }
@@ -1687,7 +1687,7 @@ async function probeRemotesAndBuildSchema(options) {
1687
1687
  console.warn(
1688
1688
  formatFulgurjsDiagnostic({
1689
1689
  code: "DEV-002",
1690
- symptom: `remote "${remote.key}" \u7684 manifest schemaVersion=${parsed.unsupportedVersion} \u4E0D\u53D7\u652F\u6301\uFF08\u672C\u673A\u652F\u6301 1\uFF09`,
1690
+ 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`,
1691
1691
  cause: "\u5BBF\u4E3B\u4E0E\u8FDC\u7A0B\u7684 @fulgurjs/federation \u5927\u7248\u672C\u4E0D\u4E00\u81F4",
1692
1692
  fix: "\u5BF9\u9F50\u5BBF\u4E3B\u4E0E\u8FDC\u7A0B\u7684 @fulgurjs/federation \u7248\u672C\u540E\u91CD\u542F dev server",
1693
1693
  details: { remote: remote.key, url: u.href }
@@ -1700,7 +1700,7 @@ async function probeRemotesAndBuildSchema(options) {
1700
1700
  console.warn(
1701
1701
  formatFulgurjsDiagnostic({
1702
1702
  code: "DEV-002",
1703
- symptom: `remote "${remote.key}" \u7684 dev manifest \u5951\u7EA6\u6821\u9A8C\u5931\u8D25\uFF08${u.href}\uFF09`,
1703
+ symptom: `\u8FDC\u7A0B\u5E94\u7528 "${remote.key}" \u7684\u5F00\u53D1 manifest \u5951\u7EA6\u6821\u9A8C\u5931\u8D25\uFF08${u.href}\uFF09`,
1704
1704
  cause: parsed.issues.map((x) => `${x.field}: ${x.message}`).join("\uFF1B"),
1705
1705
  fix: "\u6838\u5BF9 remote \u7684 federation \u914D\u7F6E exposes\uFF0C\u5E76\u786E\u8BA4 @fulgurjs/federation \u7248\u672C\u4E0E\u5BBF\u4E3B\u4E00\u81F4",
1706
1706
  details: { remote: remote.key, url: u.href, issues: parsed.issues.slice(0, 5) }
@@ -1715,7 +1715,7 @@ async function probeRemotesAndBuildSchema(options) {
1715
1715
  console.warn(
1716
1716
  formatFulgurjsDiagnostic({
1717
1717
  code: "DEV-002",
1718
- symptom: `remote "${remote.key}" \u7684 dev manifest \u53EF\u8FBE\u4F46 exposes \u4E3A\u7A7A\uFF08${u.href}\uFF09`,
1718
+ symptom: `\u8FDC\u7A0B\u5E94\u7528 "${remote.key}" \u7684\u5F00\u53D1 manifest \u53EF\u8FBE\uFF0C\u4F46 exposes \u4E3A\u7A7A\uFF08${u.href}\uFF09`,
1719
1719
  cause: "remote \u4FA7 federation({ exposes }) \u4E3A\u7A7A\uFF0C\u6216\u5176\u63D2\u4EF6\u7248\u672C\u8FC7\u65E7\u5BFC\u81F4 manifest \u7F3A\u5B57\u6BB5",
1720
1720
  fix: "\u6838\u5BF9 remote \u7684 federation \u914D\u7F6E exposes\uFF0C\u5E76\u786E\u8BA4 @fulgurjs/federation \u7248\u672C\u4E0E\u5BBF\u4E3B\u4E00\u81F4",
1721
1721
  details: { remote: remote.key, url: u.href, pluginVersion: manifest.version }
@@ -1727,8 +1727,8 @@ async function probeRemotesAndBuildSchema(options) {
1727
1727
  console.warn(
1728
1728
  formatFulgurjsDiagnostic({
1729
1729
  code: "DEV-006",
1730
- symptom: `\u5BBF\u4E3B\u4E0E remote "${remote.key}" \u7684 @fulgurjs/federation \u7248\u672C\u4E0D\u4E00\u81F4`,
1731
- cause: `\u5BBF\u4E3B ${options.pluginVersion} vs \u8FDC\u7A0B ${remoteVersion}\uFF08pnpm tarball \u65AD\u94FE/\u6F0F\u5347\u7EA7\u5E38\u89C1\uFF09`,
1730
+ symptom: `\u5BBF\u4E3B\u4E0E\u8FDC\u7A0B\u5E94\u7528 "${remote.key}" \u7684 @fulgurjs/federation \u7248\u672C\u4E0D\u4E00\u81F4`,
1731
+ 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`,
1732
1732
  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",
1733
1733
  details: { host: options.pluginVersion, remote: remoteVersion }
1734
1734
  })
@@ -1741,7 +1741,7 @@ async function probeRemotesAndBuildSchema(options) {
1741
1741
  console.warn(
1742
1742
  formatFulgurjsDiagnostic({
1743
1743
  code: "DEV-001",
1744
- 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`,
1744
+ 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`,
1745
1745
  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",
1746
1746
  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",
1747
1747
  details: { remote: remote.key, url: u.href, port, portOpen, error: String(err?.message ?? err) }
@@ -1784,7 +1784,7 @@ function syncViteCacheMarker(root, pluginVersion, log) {
1784
1784
  }
1785
1785
 
1786
1786
  // src/runtime-code.gen.ts
1787
- 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';
1787
+ 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="4.3.1";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';
1788
1788
 
1789
1789
  // src/index.ts
1790
1790
  function readRuntimeCode() {
@@ -1806,7 +1806,7 @@ function enumerateCjsExports(packageName, appRoot) {
1806
1806
  names = Object.keys(mod);
1807
1807
  } catch {
1808
1808
  console.warn(
1809
- `[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.`
1809
+ `[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`
1810
1810
  );
1811
1811
  }
1812
1812
  nsExportCache.set(packageName, names);
@@ -1849,7 +1849,6 @@ function facadeChunkOf(id) {
1849
1849
  return null;
1850
1850
  }
1851
1851
  function federation(options) {
1852
- const warnedUnknownPrefixes = /* @__PURE__ */ new Set();
1853
1852
  let remoteSchemaPromise = null;
1854
1853
  const state = {
1855
1854
  command: "serve",
@@ -1951,7 +1950,7 @@ export { default } from ${JSON.stringify(url)};
1951
1950
  if (userTarget) {
1952
1951
  if (/es20(0\d|1\d|20|21)/.test(String(userTarget))) {
1953
1952
  normalized.warnings.push(
1954
- `build.target="${String(userTarget)}" does not support top-level await; fulgurjs requires es2022 or higher.`
1953
+ `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`
1955
1954
  );
1956
1955
  }
1957
1956
  } else {
@@ -1971,7 +1970,7 @@ export { default } from ${JSON.stringify(url)};
1971
1970
  console.warn(
1972
1971
  formatFulgurjsDiagnostic({
1973
1972
  code: "BLD-006",
1974
- symptom: "build.rollupOptions.output is an array; fulgurjs cannot inject the shared-facade chunk guard automatically",
1973
+ symptom: "build.rollupOptions.output \u662F\u6570\u7EC4\uFF0Cfulgurjs \u65E0\u6CD5\u81EA\u52A8\u6CE8\u5165\u5171\u4EAB\u95E8\u9762 chunk \u9632\u62A4",
1975
1974
  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",
1976
1975
  fix: `\u5728\u6BCF\u4E2A output \u9879\u7684 manualChunks \u6700\u524D\u9762\u52A0\u5206\u652F\uFF1Aif (id.startsWith('virtual:fulgurjs-')) return 'fulgurjs-shared-facades'`
1977
1976
  })
@@ -2008,7 +2007,7 @@ export { default } from ${JSON.stringify(url)};
2008
2007
  configResolved(resolved) {
2009
2008
  state.base = normalizeBase(resolved.base);
2010
2009
  if (resolved.build?.ssr) {
2011
- console.warn("[fulgurjs] SSR builds are not supported in this version; plugin hooks disabled.");
2010
+ 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");
2012
2011
  }
2013
2012
  const n0 = state.normalized;
2014
2013
  const optimize = resolved.optimizeDeps;
@@ -2051,20 +2050,6 @@ export { default } from ${JSON.stringify(url)};
2051
2050
  }
2052
2051
  }
2053
2052
  }
2054
- const n = state.normalized;
2055
- if (n && !bare.startsWith("\0") && !bareClean.startsWith(".") && !bareClean.startsWith("/") && !bareClean.startsWith("virtual:")) {
2056
- const slash = bareClean.indexOf("/");
2057
- if (slash > 0) {
2058
- const prefix = bareClean.slice(0, slash);
2059
- 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)));
2060
- if (!known && !warnedUnknownPrefixes.has(prefix)) {
2061
- warnedUnknownPrefixes.add(prefix);
2062
- console.warn(
2063
- `[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.)`
2064
- );
2065
- }
2066
- }
2067
- }
2068
2053
  if (bareClean === RUNTIME_VIRTUAL_ID) return RESOLVED.runtime;
2069
2054
  if (bareClean === RUNTIME_PROXY_VIRTUAL_ID) return RESOLVED.runtimeProxy;
2070
2055
  if (bareClean === INIT_VIRTUAL_ID) return RESOLVED.init;
@@ -2222,12 +2207,12 @@ ${code}`, map: null };
2222
2207
  state.manualChunkGroups.set(r.id.split("?")[0], group);
2223
2208
  } else {
2224
2209
  console.warn(
2225
- `[fulgurjs] manualChunks: could not resolve "${specifier}" for group "${group}"; those modules will fall back to automatic chunking. (Their shared-negotiation facades are still guarded.)`
2210
+ `[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`
2226
2211
  );
2227
2212
  }
2228
2213
  } catch {
2229
2214
  console.warn(
2230
- `[fulgurjs] manualChunks: resolving "${specifier}" (group "${group}") failed; those modules will fall back to automatic chunking.`
2215
+ `[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`
2231
2216
  );
2232
2217
  }
2233
2218
  }