@fulgurjs/federation 6.8.7 → 6.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/README.en.md +3 -0
- package/README.md +3 -0
- package/dist/application-core-BuhXQmLF.d.cts +16 -0
- package/dist/application-core-DWI3eKme.d.ts +16 -0
- package/dist/bridge-app-react.cjs +177 -9
- package/dist/bridge-app-react.d.cts +15 -3
- package/dist/bridge-app-react.d.ts +15 -3
- package/dist/bridge-app-react.js +101 -9
- package/dist/bridge-app-vue.cjs +138 -12
- package/dist/bridge-app-vue.d.cts +20 -5
- package/dist/bridge-app-vue.d.ts +20 -5
- package/dist/bridge-app-vue.js +62 -12
- package/dist/bridge-host-react.d.cts +1 -1
- package/dist/bridge-host-react.d.ts +1 -1
- package/dist/bridge-host-vue.d.cts +1 -1
- package/dist/bridge-host-vue.d.ts +1 -1
- package/dist/chunk-6OB47FSR.js +81 -0
- package/dist/cli.js +349 -23
- package/dist/index.cjs +7 -6
- package/dist/index.js +7 -6
- package/dist/react-adapter.d.cts +1 -1
- package/dist/react-adapter.d.ts +1 -1
- package/dist/react.d.ts +29 -4
- package/dist/react.js +1 -0
- package/dist/{remote-types-xf1B6_pK.d.ts → remote-types-COmBhjRc.d.ts} +1 -1
- package/dist/{remote-types-58hdbx6x.d.cts → remote-types-CStGOJwu.d.cts} +1 -1
- package/dist/runtime.js +1 -1
- package/dist/vue-adapter.d.cts +1 -1
- package/dist/vue-adapter.d.ts +1 -1
- package/dist/vue-store.cjs +40 -0
- package/dist/vue-store.d.cts +4 -0
- package/dist/vue-store.d.ts +4 -0
- package/dist/vue-store.js +15 -0
- package/dist/vue.d.ts +37 -6
- package/dist/vue.js +2 -0
- package/docs/en/reference/api.md +38 -2
- package/docs/en/reference/types.md +27 -0
- package/docs/zh/reference/api.md +46 -2
- package/docs/zh/reference/types.md +27 -0
- package/examples/templates/README.md +3 -0
- package/examples/templates/react-host-vue-remote/README.md +24 -0
- package/examples/templates/react-host-vue-remote/package.json +2 -1
- package/examples/templates/react-host-vue-remote/pnpm-lock.yaml +7 -7
- package/examples/templates/react-host-vue-remote/pnpm-workspace.yaml +1 -1
- package/examples/templates/react-host-vue-remote/react-host/package.json +1 -1
- package/examples/templates/react-host-vue-remote/react-host/src/application.tsx +62 -0
- package/examples/templates/react-host-vue-remote/react-host/src/main.tsx +2 -62
- package/examples/templates/react-host-vue-remote/scripts/prod.mjs +101 -0
- package/examples/templates/react-host-vue-remote/vue-remote/README.md +17 -16
- package/examples/templates/react-host-vue-remote/vue-remote/fulgurjs.config.ts +2 -2
- package/examples/templates/react-host-vue-remote/vue-remote/package.json +1 -1
- package/examples/templates/react-host-vue-remote/vue-remote/src/AboutPage.vue +1 -0
- package/examples/templates/react-host-vue-remote/vue-remote/src/App.vue +15 -5
- package/examples/templates/react-host-vue-remote/vue-remote/src/HomePage.vue +1 -0
- package/examples/templates/react-host-vue-remote/vue-remote/src/application.ts +19 -0
- package/examples/templates/react-host-vue-remote/vue-remote/src/main.ts +2 -15
- package/examples/templates/react-react/README.md +25 -1
- package/examples/templates/react-react/host/package.json +1 -1
- package/examples/templates/react-react/host/src/application.tsx +33 -0
- package/examples/templates/react-react/host/src/main.tsx +3 -32
- package/examples/templates/react-react/package.json +2 -1
- package/examples/templates/react-react/pnpm-lock.yaml +7 -7
- package/examples/templates/react-react/pnpm-workspace.yaml +1 -1
- package/examples/templates/react-react/remote/package.json +1 -1
- package/examples/templates/react-react/remote/src/application.tsx +11 -0
- package/examples/templates/react-react/remote/src/main.tsx +3 -10
- package/examples/templates/react-react/scripts/prod.mjs +101 -0
- package/examples/templates/showcase/README.md +35 -7
- package/examples/templates/showcase/package.json +2 -1
- package/examples/templates/showcase/pnpm-lock.yaml +11 -11
- package/examples/templates/showcase/pnpm-workspace.yaml +1 -1
- package/examples/templates/showcase/react-host/package.json +1 -1
- package/examples/templates/showcase/react-host/src/application.tsx +28 -0
- package/examples/templates/showcase/react-host/src/demo-log.ts +5 -8
- package/examples/templates/showcase/react-host/src/main.tsx +2 -33
- package/examples/templates/showcase/react-host/src/routing.ts +2 -2
- package/examples/templates/showcase/react-remote/fulgurjs.config.ts +1 -1
- package/examples/templates/showcase/react-remote/package.json +1 -1
- package/examples/templates/showcase/react-remote/src/ChildLayout.tsx +3 -2
- package/examples/templates/showcase/react-remote/src/{bridge.tsx → application.tsx} +21 -21
- package/examples/templates/showcase/react-remote/src/child-bus.ts +23 -23
- package/examples/templates/showcase/react-remote/src/main.tsx +2 -18
- package/examples/templates/showcase/react-remote/src/pages/Locked.tsx +2 -1
- package/examples/templates/showcase/react-remote/src/pages/OrderDetail.tsx +2 -1
- package/examples/templates/showcase/react-remote/src/pages/OrderList.tsx +2 -1
- package/examples/templates/showcase/scripts/prod.mjs +101 -0
- package/examples/templates/showcase/vue-host/package.json +1 -1
- package/examples/templates/showcase/vue-host/src/application.ts +28 -0
- package/examples/templates/showcase/vue-host/src/demo-log.ts +4 -7
- package/examples/templates/showcase/vue-host/src/main.ts +2 -30
- package/examples/templates/showcase/vue-host/src/routing.ts +2 -2
- package/examples/templates/showcase/vue-remote/fulgurjs.config.ts +1 -1
- package/examples/templates/showcase/vue-remote/package.json +1 -1
- package/examples/templates/showcase/vue-remote/src/ChildLayout.vue +3 -2
- package/examples/templates/showcase/vue-remote/src/{bridge.ts → application.ts} +10 -13
- package/examples/templates/showcase/vue-remote/src/child-bus.ts +23 -23
- package/examples/templates/showcase/vue-remote/src/main.ts +2 -16
- package/examples/templates/showcase/vue-remote/src/pages/Locked.vue +2 -1
- package/examples/templates/showcase/vue-remote/src/pages/OrderDetail.vue +2 -1
- package/examples/templates/showcase/vue-remote/src/pages/OrderList.vue +2 -1
- package/examples/templates/vue-host-react-remote/README.md +24 -0
- package/examples/templates/vue-host-react-remote/package.json +2 -1
- package/examples/templates/vue-host-react-remote/pnpm-lock.yaml +7 -7
- package/examples/templates/vue-host-react-remote/pnpm-workspace.yaml +1 -1
- package/examples/templates/vue-host-react-remote/react-remote/README.md +17 -17
- package/examples/templates/vue-host-react-remote/react-remote/fulgurjs.config.ts +2 -2
- package/examples/templates/vue-host-react-remote/react-remote/package.json +1 -1
- package/examples/templates/vue-host-react-remote/react-remote/src/{bridge.tsx → application.tsx} +13 -24
- package/examples/templates/vue-host-react-remote/react-remote/src/main.tsx +2 -7
- package/examples/templates/vue-host-react-remote/scripts/prod.mjs +101 -0
- package/examples/templates/vue-host-react-remote/vue-host/package.json +1 -1
- package/examples/templates/vue-host-react-remote/vue-host/src/application.ts +5 -0
- package/examples/templates/vue-host-react-remote/vue-host/src/main.ts +2 -4
- package/examples/templates/vue-vue/README.md +25 -1
- package/examples/templates/vue-vue/host/package.json +1 -1
- package/examples/templates/vue-vue/host/src/application.ts +54 -0
- package/examples/templates/vue-vue/host/src/main.ts +3 -50
- package/examples/templates/vue-vue/package.json +2 -1
- package/examples/templates/vue-vue/pnpm-lock.yaml +7 -7
- package/examples/templates/vue-vue/pnpm-workspace.yaml +1 -1
- package/examples/templates/vue-vue/remote/package.json +1 -1
- package/examples/templates/vue-vue/remote/src/application.ts +6 -0
- package/examples/templates/vue-vue/remote/src/main.ts +3 -5
- package/examples/templates/vue-vue/scripts/prod.mjs +101 -0
- package/package.json +14 -9
- package/examples/templates/react-host-vue-remote/react-host/src/fulgurjs/types/bridge-vue-remote/metadata.json +0 -15
- package/examples/templates/react-host-vue-remote/react-host/src/fulgurjs/types/bridge-vue-remote/modules.d.ts +0 -14
- package/examples/templates/react-host-vue-remote/react-host/src/fulgurjs/types/bridge-vue-remote/registry.d.ts +0 -10
- package/examples/templates/react-host-vue-remote/vue-remote/src/bridge.ts +0 -57
- package/examples/templates/showcase/react-host/src/fulgurjs/types/vue-remote/metadata.json +0 -16
- package/examples/templates/showcase/react-host/src/fulgurjs/types/vue-remote/modules.d.ts +0 -71
- package/examples/templates/showcase/react-host/src/fulgurjs/types/vue-remote/registry.d.ts +0 -10
- package/examples/templates/showcase/vue-host/src/fulgurjs/types/react-remote/metadata.json +0 -16
- package/examples/templates/showcase/vue-host/src/fulgurjs/types/react-remote/modules.d.ts +0 -79
- package/examples/templates/showcase/vue-host/src/fulgurjs/types/react-remote/registry.d.ts +0 -10
- package/examples/templates/vue-host-react-remote/vue-host/src/fulgurjs/types/bridge-react-remote/metadata.json +0 -16
- package/examples/templates/vue-host-react-remote/vue-host/src/fulgurjs/types/bridge-react-remote/modules.d.ts +0 -10
- package/examples/templates/vue-host-react-remote/vue-host/src/fulgurjs/types/bridge-react-remote/registry.d.ts +0 -10
package/dist/cli.js
CHANGED
|
@@ -236,18 +236,18 @@ function validateHostPages(value) {
|
|
|
236
236
|
}
|
|
237
237
|
return hp;
|
|
238
238
|
}
|
|
239
|
-
function validatePathsInsideApp(options, appRoot,
|
|
239
|
+
function validatePathsInsideApp(options, appRoot, fs11, path10) {
|
|
240
240
|
const checkModule = (field, value) => {
|
|
241
241
|
if (typeof value !== "string" || value.trim() === "") return;
|
|
242
|
-
if (/^(https?:)?\/\//.test(value) ||
|
|
242
|
+
if (/^(https?:)?\/\//.test(value) || path10.isAbsolute(value)) {
|
|
243
243
|
appConfigError(
|
|
244
244
|
`${field} "${value}" \u4E0D\u662F\u672C\u9879\u76EE\u5185\u7684\u6A21\u5757\u8DEF\u5F84`,
|
|
245
245
|
"exposes/setup \u7684\u503C\u662F\u76F8\u5BF9\u672C\u5E94\u7528\u6839\u76EE\u5F55\u7684\u6E90\u6587\u4EF6\u8DEF\u5F84\uFF08URL/\u7EDD\u5BF9\u8DEF\u5F84\u65E0\u6CD5\u5728\u72EC\u7ACB\u4ED3\u5E93\u95F4\u79FB\u690D\uFF09",
|
|
246
246
|
`\u6539\u4E3A\u76F8\u5BF9\u8DEF\u5F84\uFF0C\u5982 './src/views/Home.vue'\uFF08\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55 = \u5E94\u7528\u6839 ${appRoot}\uFF09`
|
|
247
247
|
);
|
|
248
248
|
}
|
|
249
|
-
const abs =
|
|
250
|
-
if (!
|
|
249
|
+
const abs = path10.resolve(appRoot, value);
|
|
250
|
+
if (!fs11.existsSync(abs)) {
|
|
251
251
|
appConfigError(
|
|
252
252
|
`${field} \u6307\u5411\u7684\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A${value}`,
|
|
253
253
|
`\u6309\u5E94\u7528\u6839 ${appRoot} \u89E3\u6790\u540E\u672A\u627E\u5230\u8BE5\u6587\u4EF6`,
|
|
@@ -316,11 +316,11 @@ function resolveEsbuild(configPath) {
|
|
|
316
316
|
);
|
|
317
317
|
}
|
|
318
318
|
async function loadAppConfig(configPath) {
|
|
319
|
-
const
|
|
319
|
+
const fs11 = await import("node:fs");
|
|
320
320
|
const os = await import("node:os");
|
|
321
|
-
const
|
|
322
|
-
const abs =
|
|
323
|
-
if (!
|
|
321
|
+
const path10 = await import("node:path");
|
|
322
|
+
const abs = path10.resolve(configPath);
|
|
323
|
+
if (!fs11.existsSync(abs)) {
|
|
324
324
|
appConfigError(
|
|
325
325
|
`\u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A${abs}`,
|
|
326
326
|
"--config \u6307\u5411\u7684\u8DEF\u5F84\u5728\u672C\u673A\u4E0D\u5B58\u5728\uFF08\u76F8\u5BF9\u8DEF\u5F84\u4EE5 CLI \u8FDB\u7A0B cwd \u89E3\u6790\uFF09",
|
|
@@ -328,11 +328,11 @@ async function loadAppConfig(configPath) {
|
|
|
328
328
|
);
|
|
329
329
|
}
|
|
330
330
|
if (abs.endsWith(".json")) {
|
|
331
|
-
const parsed = JSON.parse(
|
|
331
|
+
const parsed = JSON.parse(fs11.readFileSync(abs, "utf8"));
|
|
332
332
|
if (isAggregateShape(parsed)) aggregateMigrationError();
|
|
333
|
-
return finishAppShape(parsed, {}, abs,
|
|
333
|
+
return finishAppShape(parsed, {}, abs, path10.dirname(abs), fs11, path10);
|
|
334
334
|
}
|
|
335
|
-
const rawSource =
|
|
335
|
+
const rawSource = fs11.readFileSync(abs, "utf8");
|
|
336
336
|
if (/@fulgurjs\/federation\/config/.test(rawSource)) {
|
|
337
337
|
appConfigError(
|
|
338
338
|
`\u914D\u7F6E\u5BFC\u5165\u4E86\u5DF2\u5220\u9664\u7684\u5B50\u8DEF\u5F84 "@fulgurjs/federation/config"`,
|
|
@@ -363,21 +363,21 @@ async function loadAppConfig(configPath) {
|
|
|
363
363
|
plugins: [selfRedirect],
|
|
364
364
|
logLevel: "silent"
|
|
365
365
|
});
|
|
366
|
-
const tmpDir =
|
|
366
|
+
const tmpDir = fs11.mkdtempSync(path10.join(os.tmpdir(), "fulgurjs-appcfg-"));
|
|
367
367
|
try {
|
|
368
|
-
const bundleFile =
|
|
369
|
-
|
|
368
|
+
const bundleFile = path10.join(tmpDir, "fulgurjs.config.bundle.mjs");
|
|
369
|
+
fs11.writeFileSync(bundleFile, out.outputFiles[0].text);
|
|
370
370
|
const mod = await import(
|
|
371
371
|
/* @vite-ignore */
|
|
372
372
|
`${pathToFileURL(bundleFile).href}?t=${Date.now()}`
|
|
373
373
|
);
|
|
374
374
|
if (isAggregateShape(mod.default)) aggregateMigrationError();
|
|
375
|
-
return finishAppShape(mod.default, { hostPages: mod.hostPages }, abs,
|
|
375
|
+
return finishAppShape(mod.default, { hostPages: mod.hostPages }, abs, path10.dirname(abs), fs11, path10);
|
|
376
376
|
} finally {
|
|
377
|
-
|
|
377
|
+
fs11.rmSync(tmpDir, { recursive: true, force: true });
|
|
378
378
|
}
|
|
379
379
|
}
|
|
380
|
-
function finishAppShape(def, named, configPath, appRoot,
|
|
380
|
+
function finishAppShape(def, named, configPath, appRoot, fs11, path10) {
|
|
381
381
|
if (def === void 0 || def === null) {
|
|
382
382
|
appConfigError(
|
|
383
383
|
"fulgurjs.config.ts \u6CA1\u6709\u53EF\u7528\u7684\u9ED8\u8BA4\u5BFC\u51FA",
|
|
@@ -390,7 +390,7 @@ function finishAppShape(def, named, configPath, appRoot, fs10, path9) {
|
|
|
390
390
|
}
|
|
391
391
|
const options = def;
|
|
392
392
|
validateAppOptions(options);
|
|
393
|
-
validatePathsInsideApp(options, appRoot,
|
|
393
|
+
validatePathsInsideApp(options, appRoot, fs11, path10);
|
|
394
394
|
const hostPages = named.hostPages !== void 0 ? validateHostPages(named.hostPages) : void 0;
|
|
395
395
|
return {
|
|
396
396
|
kind: "app",
|
|
@@ -522,6 +522,10 @@ function checklistFor(scenario) {
|
|
|
522
522
|
out.push(" \u5B8C\u6574\u5B50\u5E94\u7528\uFF08\u81EA\u5E26 Router/store\uFF09\u7528\u6865\u63A5 createVueBridgeApp/createReactBridgeApp\u2014\u2014\u5BBF\u4E3B\u53EA\u914D\u6302\u8F7D\u524D\u7F00\u4E0E\u5165\u53E3\uFF0C");
|
|
523
523
|
out.push(" \u5B50\u5E94\u7528\u4FDD\u7559\u81EA\u5DF1\u7684 Router \u4E0E\u4E1A\u52A1\u83DC\u5355\uFF0C\u4E0D\u9010\u9875\u767B\u8BB0\u5185\u90E8\u9875\u9762");
|
|
524
524
|
}
|
|
525
|
+
if (provide) {
|
|
526
|
+
out.push(" \u5B8C\u6574\u5B50\u5E94\u7528\u63A8\u8350 defineApplication\uFF1A\u4E00\u4EFD\u88C5\u914D\u7528\u4E8E\u72EC\u7ACB application.start \u4E0E\u8FDC\u7A0B\u9ED8\u8BA4\u5BFC\u51FA\uFF0C");
|
|
527
|
+
out.push(" \u4E0D\u518D\u590D\u5236 main/bridge \u4E24\u5957\u521D\u59CB\u5316\u3002\u5DF2\u6709 router/\u5B88\u536B\u7EE7\u7EED\u590D\u7528\uFF1B\u6309 context.mode \u9009\u62E9 web/memory \u8DEF\u7531\u3002");
|
|
528
|
+
}
|
|
525
529
|
out.push("4. shared \u91CC\u53EA\u5217\u300C\u9879\u76EE\u5B9E\u9645\u5B89\u88C5\u4E14\u8DE8\u5E94\u7528\u5171\u4EAB\u300D\u7684\u5E93\uFF0C\u8DE8\u5E94\u7528\u540C\u5B9E\u4F8B\u7684\uFF08vue/react/react-dom/router/store\uFF09\u914D singleton: true\uFF1B");
|
|
526
530
|
out.push(" \u72EC\u7ACB Router/store \u7684\u5B8C\u6574\u5B50\u5E94\u7528\u9694\u79BB\u8BBE\u8BA1\u662F\u5408\u6CD5\u7684\u2014\u2014\u4E0D\u662F\u6240\u6709\u5171\u4EAB\u9879\u90FD\u5FC5\u987B singleton");
|
|
527
531
|
if (consume) {
|
|
@@ -533,6 +537,7 @@ function checklistFor(scenario) {
|
|
|
533
537
|
out.push(APP_ENTRY_NOTE[framework]);
|
|
534
538
|
out.push('6. dev \u51B7\u542F\u52A8\u9996\u8F6E 30~60s \u6709\u9884\u6784\u5EFA\u7A97\u53E3\uFF08\u77AC\u65F6 504/"ce"\uFF0CDEV-010\uFF09\uFF1A\u5148\u771F\u5B9E\u6253\u5F00\u9875\u9762\u9884\u70ED\u518D\u505A\u65AD\u8A00');
|
|
535
539
|
out.push("7. \u914D\u7F6E\u89E3\u91CA\uFF1Afulgurjs explain\uFF1B\u90E8\u7F72\u4F53\u68C0\uFF1Afulgurjs doctor --base <URL> --apps <\u90E8\u7F72\u5B50\u76EE\u5F55...>");
|
|
540
|
+
out.push(" \u63A5\u5165\u524D\u5148\u8FD0\u884C fulgurjs doctor --config ./fulgurjs.config.ts\uFF08\u672C\u5730\u9884\u68C0\uFF0C\u4E0D\u4EE3\u8868\u6D4F\u89C8\u5668\u9A8C\u6536\u901A\u8FC7\uFF09");
|
|
536
541
|
if (consume) {
|
|
537
542
|
out.push(" \uFF08--apps \u662F\u7AD9\u70B9\u6839\u4E0B\u7684\u90E8\u7F72\u5B50\u76EE\u5F55\uFF0C\u4E0D\u662F\u5BB9\u5668\u540D\uFF09");
|
|
538
543
|
out.push("8. \u4EC5\u9010\u9875\u63A5\u5165\u7684\u5BBF\u4E3B\uFF1A\u9875\u9762\u5951\u7EA6\u6838\u5BF9 fulgurjs check-pages\uFF08--manifest/--site \u6307\u5B9A\u8FDC\u7A0B manifest \u6765\u6E90\uFF09\uFF1B");
|
|
@@ -833,8 +838,8 @@ function nodeEnginesViolation(nodeVersion, range) {
|
|
|
833
838
|
if (!range) return void 0;
|
|
834
839
|
const m = range.trim().match(/^>=?(\d+)\.(\d+)(?:\.(\d+))?/);
|
|
835
840
|
if (!m) return void 0;
|
|
836
|
-
const
|
|
837
|
-
const [curMajor, curMinor = 0, curPatch = 0] =
|
|
841
|
+
const parse2 = (v) => v.replace(/^v/, "").split(/[.-]/).map((x) => Number(x) || 0);
|
|
842
|
+
const [curMajor, curMinor = 0, curPatch = 0] = parse2(nodeVersion);
|
|
838
843
|
const [minMajor, minMinor = 0, minPatch = 0] = [Number(m[1]), Number(m[2] ?? 0), Number(m[3] ?? 0)];
|
|
839
844
|
const ge = (a, b) => a[0] !== b[0] ? a[0] > b[0] : a[1] !== b[1] ? a[1] > b[1] : (a[2] ?? 0) >= (b[2] ?? 0);
|
|
840
845
|
if (range.startsWith(">=")) {
|
|
@@ -1453,7 +1458,7 @@ var RUNTIME_VERSION;
|
|
|
1453
1458
|
var init_version = __esm({
|
|
1454
1459
|
"src/version.ts"() {
|
|
1455
1460
|
"use strict";
|
|
1456
|
-
RUNTIME_VERSION = "6.
|
|
1461
|
+
RUNTIME_VERSION = "6.9.0";
|
|
1457
1462
|
}
|
|
1458
1463
|
});
|
|
1459
1464
|
|
|
@@ -2069,8 +2074,8 @@ function computeStaticClosure(ts, entryFiles, resolver, root) {
|
|
|
2069
2074
|
}
|
|
2070
2075
|
if (file.endsWith(".vue")) {
|
|
2071
2076
|
const req = createRequire3(path4.join(root, "package.json"));
|
|
2072
|
-
const { parse } = req("vue/compiler-sfc");
|
|
2073
|
-
const { descriptor } =
|
|
2077
|
+
const { parse: parse2 } = req("vue/compiler-sfc");
|
|
2078
|
+
const { descriptor } = parse2(text);
|
|
2074
2079
|
text = [descriptor.script?.content, descriptor.scriptSetup?.content].filter(Boolean).join("\n");
|
|
2075
2080
|
if (descriptor.script?.src) text += `
|
|
2076
2081
|
import ${JSON.stringify(descriptor.script.src)}`;
|
|
@@ -3395,6 +3400,303 @@ var init_port = __esm({
|
|
|
3395
3400
|
}
|
|
3396
3401
|
});
|
|
3397
3402
|
|
|
3403
|
+
// node_modules/es-module-lexer/dist/lexer.js
|
|
3404
|
+
function parse(E2, g = "@") {
|
|
3405
|
+
if (!C) return init.then((() => parse(E2)));
|
|
3406
|
+
const I = E2.length + 1, w = (C.__heap_base.value || C.__heap_base) + 4 * I - C.memory.buffer.byteLength;
|
|
3407
|
+
w > 0 && C.memory.grow(Math.ceil(w / 65536));
|
|
3408
|
+
const K = C.sa(I - 1);
|
|
3409
|
+
if ((A ? B : Q)(E2, new Uint16Array(C.memory.buffer, K, I)), !C.parse()) throw Object.assign(new Error(`Parse error ${g}:${E2.slice(0, C.e()).split("\n").length}:${C.e() - E2.lastIndexOf("\n", C.e() - 1)}`), { idx: C.e() });
|
|
3410
|
+
const o = [], D = [];
|
|
3411
|
+
for (; C.ri(); ) {
|
|
3412
|
+
const A2 = C.is(), Q2 = C.ie(), B2 = C.it(), g2 = C.ai(), I2 = C.id(), w2 = C.ss(), K2 = C.se();
|
|
3413
|
+
let D2;
|
|
3414
|
+
C.ip() && (D2 = k(E2.slice(-1 === I2 ? A2 - 1 : A2, -1 === I2 ? Q2 + 1 : Q2))), o.push({ n: D2, t: B2, s: A2, e: Q2, ss: w2, se: K2, d: I2, a: g2 });
|
|
3415
|
+
}
|
|
3416
|
+
for (; C.re(); ) {
|
|
3417
|
+
const A2 = C.es(), Q2 = C.ee(), B2 = C.els(), g2 = C.ele(), I2 = E2.slice(A2, Q2), w2 = I2[0], K2 = B2 < 0 ? void 0 : E2.slice(B2, g2), o2 = K2 ? K2[0] : "";
|
|
3418
|
+
D.push({ s: A2, e: Q2, ls: B2, le: g2, n: '"' === w2 || "'" === w2 ? k(I2) : I2, ln: '"' === o2 || "'" === o2 ? k(K2) : K2 });
|
|
3419
|
+
}
|
|
3420
|
+
function k(A2) {
|
|
3421
|
+
try {
|
|
3422
|
+
return (0, eval)(A2);
|
|
3423
|
+
} catch (A3) {
|
|
3424
|
+
}
|
|
3425
|
+
}
|
|
3426
|
+
return [o, D, !!C.f(), !!C.ms()];
|
|
3427
|
+
}
|
|
3428
|
+
function Q(A2, Q2) {
|
|
3429
|
+
const B2 = A2.length;
|
|
3430
|
+
let C2 = 0;
|
|
3431
|
+
for (; C2 < B2; ) {
|
|
3432
|
+
const B3 = A2.charCodeAt(C2);
|
|
3433
|
+
Q2[C2++] = (255 & B3) << 8 | B3 >>> 8;
|
|
3434
|
+
}
|
|
3435
|
+
}
|
|
3436
|
+
function B(A2, Q2) {
|
|
3437
|
+
const B2 = A2.length;
|
|
3438
|
+
let C2 = 0;
|
|
3439
|
+
for (; C2 < B2; ) Q2[C2] = A2.charCodeAt(C2++);
|
|
3440
|
+
}
|
|
3441
|
+
var ImportType, A, C, E, init;
|
|
3442
|
+
var init_lexer = __esm({
|
|
3443
|
+
"node_modules/es-module-lexer/dist/lexer.js"() {
|
|
3444
|
+
!(function(A2) {
|
|
3445
|
+
A2[A2.Static = 1] = "Static", A2[A2.Dynamic = 2] = "Dynamic", A2[A2.ImportMeta = 3] = "ImportMeta", A2[A2.StaticSourcePhase = 4] = "StaticSourcePhase", A2[A2.DynamicSourcePhase = 5] = "DynamicSourcePhase", A2[A2.StaticDeferPhase = 6] = "StaticDeferPhase", A2[A2.DynamicDeferPhase = 7] = "DynamicDeferPhase";
|
|
3446
|
+
})(ImportType || (ImportType = {}));
|
|
3447
|
+
A = 1 === new Uint8Array(new Uint16Array([1]).buffer)[0];
|
|
3448
|
+
E = () => {
|
|
3449
|
+
return A2 = "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GzYCHAtBAEEAKAKwCkECajYCsAoCQAJAAkACQEEAECkiAUHhAEYNACABQfcARg0BQQAoArAKIQEMAgtBACgCsAoiAUECakHACEEKEC8NAUEGIQIMAgtBACgCsAoiAS8BAkHpAEcNACABLwEEQfQARw0AQQQhAiABLwEGQegARg0BC0EAIAFBfmo2ArAKDwtBACABIAJBAXRqNgKwCgJAQQEQKUH7AEYNAEEAIAE2ArAKDwtBACgCsAoiACECA0BBACACQQJqNgKwCgJAAkACQEEBECkiAkEiRg0AIAJBJ0cNAUEnEBpBAEEAKAKwCkECajYCsApBARApIQIMAgtBIhAaQQBBACgCsApBAmo2ArAKQQEQKSECDAELIAIQLCECCwJAIAJBOkYNAEEAIAE2ArAKDwtBAEEAKAKwCkECajYCsAoCQEEBECkiAkEiRg0AIAJBJ0YNAEEAIAE2ArAKDwsgAhAaQQBBACgCsApBAmo2ArAKAkACQEEBECkiAkEsRg0AIAJB/QBGDQFBACABNgKwCg8LQQBBACgCsApBAmo2ArAKQQEQKUH9AEYNAEEAKAKwCiECDAELC0EAKALwCSIBIAA2AhAgAUEAKAKwCkECajYCDAttAQJ/AkACQANAAkAgAEH//wNxIgFBd2oiAkEXSw0AQQEgAnRBn4CABHENAgsgAUGgAUYNASAAIQIgARAoDQJBACECQQBBACgCsAoiAEECajYCsAogAC8BAiIADQAMAgsLIAAhAgsgAkH//wNxC6sBAQR/AkACQEEAKAKwCiICLwEAIgNB4QBGDQAgASEEIAAhBQwBC0EAIAJBBGo2ArAKQQEQKSECQQAoArAKIQUCQAJAIAJBIkYNACACQSdGDQAgAhAsGkEAKAKwCiEEDAELIAIQGkEAQQAoArAKQQJqIgQ2ArAKC0EBECkhA0EAKAKwCiECCwJAIAIgBUYNACAFIARBACAAIAAgAUYiAhtBACABIAIbEAILIAMLcgEEf0EAKAKwCiEAQQAoArQKIQECQAJAA0AgAEECaiECIAAgAU8NAQJAAkAgAi8BACIDQaR/ag4CAQQACyACIQAgA0F2ag4EAgEBAgELIABBBGohAAwACwtBACACNgKwChAlQQAPC0EAIAI2ArAKQd0AC0kBA39BACEDAkAgAkUNAAJAA0AgAC0AACIEIAEtAAAiBUcNASABQQFqIQEgAEEBaiEAIAJBf2oiAg0ADAILCyAEIAVrIQMLIAMLC+wBAgBBgAgLzgEAAHgAcABvAHIAdABtAHAAbwByAHQAZgBvAHIAZQB0AGEAbwB1AHIAYwBlAHIAbwBtAHUAbgBjAHQAaQBvAG4AcwBzAGUAcgB0AHYAbwB5AGkAZQBkAGUAbABlAGMAbwBuAHQAaQBuAGkAbgBzAHQAYQBuAHQAeQBiAHIAZQBhAHIAZQB0AHUAcgBkAGUAYgB1AGcAZwBlAGEAdwBhAGkAdABoAHIAdwBoAGkAbABlAGkAZgBjAGEAdABjAGYAaQBuAGEAbABsAGUAbABzAABB0AkLEAEAAAACAAAAAAQAAEA5AAA=", "undefined" != typeof Buffer ? Buffer.from(A2, "base64") : Uint8Array.from(atob(A2), ((A3) => A3.charCodeAt(0)));
|
|
3450
|
+
var A2;
|
|
3451
|
+
};
|
|
3452
|
+
init = WebAssembly.compile(E()).then(WebAssembly.instantiate).then((({ exports: A2 }) => {
|
|
3453
|
+
C = A2;
|
|
3454
|
+
}));
|
|
3455
|
+
}
|
|
3456
|
+
});
|
|
3457
|
+
|
|
3458
|
+
// src/doctor-source.ts
|
|
3459
|
+
var doctor_source_exports = {};
|
|
3460
|
+
__export(doctor_source_exports, {
|
|
3461
|
+
runSourceDoctor: () => runSourceDoctor
|
|
3462
|
+
});
|
|
3463
|
+
import fs10 from "node:fs";
|
|
3464
|
+
import path9 from "node:path";
|
|
3465
|
+
import { createRequire as createRequire5 } from "node:module";
|
|
3466
|
+
async function runSourceDoctor(configPath) {
|
|
3467
|
+
let loaded;
|
|
3468
|
+
try {
|
|
3469
|
+
loaded = await loadAppConfig(configPath);
|
|
3470
|
+
} catch (error) {
|
|
3471
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
3472
|
+
const sections = message.split("\n");
|
|
3473
|
+
return {
|
|
3474
|
+
checks: [{
|
|
3475
|
+
app: "(config)",
|
|
3476
|
+
item: "\u914D\u7F6E\u52A0\u8F7D",
|
|
3477
|
+
level: "FAIL",
|
|
3478
|
+
symptom: sections[0]?.replace(/^\[fulgurjs:[^\]]+\]\s*/, "") ?? message,
|
|
3479
|
+
cause: message.match(/根因:(.+)/)?.[1],
|
|
3480
|
+
fix: message.match(/修法:(.+)/)?.[1]
|
|
3481
|
+
}],
|
|
3482
|
+
failed: true,
|
|
3483
|
+
complete: false,
|
|
3484
|
+
filesScanned: 0,
|
|
3485
|
+
manualChecks: [],
|
|
3486
|
+
integrationFiles: { required: [], optional: [], existing: [] }
|
|
3487
|
+
};
|
|
3488
|
+
}
|
|
3489
|
+
const root = fs10.realpathSync(loaded.appRoot);
|
|
3490
|
+
const options = loaded.options;
|
|
3491
|
+
const app = options.name;
|
|
3492
|
+
const checks = [];
|
|
3493
|
+
const pending = [];
|
|
3494
|
+
const seen = /* @__PURE__ */ new Set();
|
|
3495
|
+
const imports = /* @__PURE__ */ new Set();
|
|
3496
|
+
const sources = /* @__PURE__ */ new Map();
|
|
3497
|
+
let complete = true;
|
|
3498
|
+
const relative = (file) => path9.relative(root, file).split(path9.sep).join("/");
|
|
3499
|
+
const within = (file) => file === root || file.startsWith(root + path9.sep);
|
|
3500
|
+
const add = (item, level, symptom, cause, fix) => {
|
|
3501
|
+
checks.push({ app, item, level, symptom, cause, fix });
|
|
3502
|
+
};
|
|
3503
|
+
const resolveSource = (value, parent = root) => {
|
|
3504
|
+
const clean = value.split(/[?#]/)[0];
|
|
3505
|
+
const file = /^(?:\/?@\/|~\/)/.test(clean) ? path9.join(root, "src", clean.replace(/^(?:\/?@\/|~\/)/, "")) : path9.resolve(parent, clean);
|
|
3506
|
+
for (const ext of extensions) {
|
|
3507
|
+
const candidate = file + ext;
|
|
3508
|
+
if (!fs10.existsSync(candidate) || !fs10.statSync(candidate).isFile()) continue;
|
|
3509
|
+
const real = fs10.realpathSync(candidate);
|
|
3510
|
+
return real;
|
|
3511
|
+
}
|
|
3512
|
+
return void 0;
|
|
3513
|
+
};
|
|
3514
|
+
const required = [relative(loaded.configPath)];
|
|
3515
|
+
for (const [key, expose] of Object.entries(options.exposes ?? {})) {
|
|
3516
|
+
const file = resolveSource(typeof expose === "string" ? expose : expose.import);
|
|
3517
|
+
if (file) {
|
|
3518
|
+
pending.push(file);
|
|
3519
|
+
required.push(relative(file));
|
|
3520
|
+
add(`expose ${key}`, "PASS", `\u6E90\u6587\u4EF6\u5B58\u5728\uFF1A${relative(file)}`);
|
|
3521
|
+
} else {
|
|
3522
|
+
complete = false;
|
|
3523
|
+
add(
|
|
3524
|
+
`expose ${key}`,
|
|
3525
|
+
"FAIL",
|
|
3526
|
+
"\u66B4\u9732\u6E90\u6587\u4EF6\u7F3A\u5931\u6216\u65E0\u6CD5\u89E3\u6790\u3002",
|
|
3527
|
+
"\u914D\u7F6E\u6307\u5411\u7684\u6587\u4EF6\u4E0D\u80FD\u5728\u52A0\u8F7D\u65F6\u624D\u53D1\u73B0\u7F3A\u5931\u3002",
|
|
3528
|
+
"\u6838\u5BF9 exposes \u8DEF\u5F84\u3001\u540E\u7F00\u548C\u522B\u540D\uFF1B\u5171\u4EAB\u76EE\u5F55\u53E6\u7528\u5176\u6240\u5C5E\u9879\u76EE\u95E8\u7981\u6838\u5B9E\u3002"
|
|
3529
|
+
);
|
|
3530
|
+
}
|
|
3531
|
+
}
|
|
3532
|
+
if (options.setup) {
|
|
3533
|
+
const file = resolveSource(options.setup);
|
|
3534
|
+
if (file) pending.push(file);
|
|
3535
|
+
else {
|
|
3536
|
+
complete = false;
|
|
3537
|
+
add("setup", "FAIL", "setup \u6E90\u6587\u4EF6\u4E0D\u5B58\u5728\u6216\u65E0\u6CD5\u89E3\u6790\u3002", "\u521D\u59CB\u5316\u5165\u53E3\u4E0D\u80FD\u5728\u52A0\u8F7D\u65F6\u624D\u53D1\u73B0\u7F3A\u5931\u3002", "\u4FEE\u6B63 setup \u8DEF\u5F84\uFF1B\u6CA1\u6709\u521D\u59CB\u5316\u9700\u6C42\u5219\u5220\u9664 setup \u914D\u7F6E\u3002");
|
|
3538
|
+
}
|
|
3539
|
+
}
|
|
3540
|
+
const html = path9.join(root, "index.html");
|
|
3541
|
+
let hasEntry = false;
|
|
3542
|
+
if (fs10.existsSync(html)) for (const tag of fs10.readFileSync(html, "utf8").matchAll(/<script\b[^>]*>/gi)) {
|
|
3543
|
+
const entry = tag[0].match(/\bsrc=["']([^"']+)["']/i)?.[1];
|
|
3544
|
+
if (!entry || !/\btype=["']module["']/i.test(tag[0]) || /^(?:https?:)?\/\//.test(entry)) continue;
|
|
3545
|
+
const file = resolveSource(entry.replace(/^\//, ""));
|
|
3546
|
+
if (file) {
|
|
3547
|
+
pending.push(file);
|
|
3548
|
+
hasEntry = true;
|
|
3549
|
+
}
|
|
3550
|
+
}
|
|
3551
|
+
if (Object.keys(options.remotes ?? {}).length && !hasEntry) complete = false;
|
|
3552
|
+
await init;
|
|
3553
|
+
while (pending.length && seen.size < 256) {
|
|
3554
|
+
const file = pending.shift();
|
|
3555
|
+
if (!within(file)) {
|
|
3556
|
+
complete = false;
|
|
3557
|
+
add("\u76EE\u5F55\u5916\u6E90\u7801", "WARN", "\u5DF2\u914D\u7F6E\u7684\u6E90\u6587\u4EF6\u5B58\u5728\u4E8E\u5E94\u7528\u76EE\u5F55\u4E4B\u5916\uFF1B\u672A\u8BFB\u53D6\u6587\u4EF6\u5185\u5BB9\u3002", "\u5355\u9879\u76EE\u9884\u68C0\u4E0D\u5C55\u5F00 monorepo \u5916\u90E8\u76EE\u5F55\u3002", "\u901A\u8FC7\u8BE5\u5171\u4EAB\u76EE\u5F55\u6240\u5C5E\u9879\u76EE\u7684\u7C7B\u578B\u4E0E\u6784\u5EFA\u95E8\u7981\u6838\u5B9E\uFF1B\u5408\u6CD5\u7684\u8DE8\u76EE\u5F55 expose \u4E0D\u4F1A\u88AB\u5224\u4E3A\u7F3A\u6587\u4EF6\u3002");
|
|
3558
|
+
continue;
|
|
3559
|
+
}
|
|
3560
|
+
if (seen.has(file) || /\.d\.[cm]?ts$/.test(file) || relative(file).includes("fulgurjs/types/")) continue;
|
|
3561
|
+
if (!/\.(?:[cm]?js|jsx|ts|tsx|vue)$/.test(file)) continue;
|
|
3562
|
+
seen.add(file);
|
|
3563
|
+
const raw = fs10.readFileSync(file, "utf8");
|
|
3564
|
+
if (file.endsWith(".vue") && /<script\b[^>]*\bsrc\s*=/.test(raw)) complete = false;
|
|
3565
|
+
const script = file.endsWith(".vue") ? [...raw.matchAll(/<script\b[^>]*>([\s\S]*?)<\/script>/gi)].map((match) => match[1]).join("\n") : raw;
|
|
3566
|
+
try {
|
|
3567
|
+
const { code } = await esbuildTransform()(script, { loader: file.endsWith(".tsx") || file.endsWith(".jsx") ? "tsx" : "ts", target: "esnext" });
|
|
3568
|
+
sources.set(relative(file), code);
|
|
3569
|
+
if (/import\.meta\.glob/.test(code)) complete = false;
|
|
3570
|
+
for (const item of parse(code)[0]) {
|
|
3571
|
+
if (!item.n) {
|
|
3572
|
+
if (item.d >= 0) complete = false;
|
|
3573
|
+
continue;
|
|
3574
|
+
}
|
|
3575
|
+
imports.add(item.n);
|
|
3576
|
+
if (item.n.startsWith(".") || /^(?:\/?@\/|~\/)/.test(item.n)) {
|
|
3577
|
+
if (/\.(?:[cm]?js|jsx|ts|tsx|vue)$/.test(item.n.split(/[?#]/)[0]) || !/\.[a-z0-9]+$/i.test(item.n.split(/[?#]/)[0])) {
|
|
3578
|
+
const next = resolveSource(item.n, path9.dirname(file));
|
|
3579
|
+
if (next) pending.push(next);
|
|
3580
|
+
else {
|
|
3581
|
+
complete = false;
|
|
3582
|
+
add(relative(file), "WARN", "\u6709\u672C\u5730\u5BFC\u5165\u65E0\u6CD5\u8DDF\u968F\uFF0C\u6E90\u7801\u68C0\u67E5\u4E0D\u662F\u5B8C\u6574\u4F9D\u8D56\u95ED\u5305\u3002", "\u53EF\u80FD\u4F7F\u7528\u81EA\u5B9A\u4E49\u522B\u540D\u3001\u865A\u62DF\u6A21\u5757\u3001\u8D44\u6E90\u6216\u76EE\u5F55\u5916\u6E90\u7801\u3002", "\u6309\u9879\u76EE tsconfig/Vite \u914D\u7F6E\u5B8C\u6210\u89E3\u6790\u4E0E\u7C7B\u578B\u68C0\u67E5\uFF1B\u672C\u547D\u4EE4\u4E0D\u731C\u81EA\u5B9A\u4E49\u522B\u540D\u3002");
|
|
3583
|
+
}
|
|
3584
|
+
}
|
|
3585
|
+
}
|
|
3586
|
+
}
|
|
3587
|
+
} catch {
|
|
3588
|
+
complete = false;
|
|
3589
|
+
add(relative(file), "WARN", "\u672C\u6587\u4EF6\u65E0\u6CD5\u9759\u6001\u89E3\u6790\uFF0C\u672A\u628A\u5B83\u5224\u5B9A\u4E3A\u68C0\u67E5\u901A\u8FC7\u3002", "\u53EF\u80FD\u5305\u542B\u5B8F\u3001\u81EA\u5B9A\u4E49\u8BED\u6CD5\u6216\u6E90\u7801\u9519\u8BEF\u3002", "\u8FD0\u884C\u672C\u9879\u76EE\u6709\u6548\u914D\u7F6E\u7684\u7C7B\u578B/\u6784\u5EFA\u68C0\u67E5\uFF1B\u4E0D\u8981\u7528\u6B64\u62A5\u544A\u4EE3\u66FF\u7F16\u8BD1\u3002");
|
|
3590
|
+
}
|
|
3591
|
+
}
|
|
3592
|
+
if (pending.length) complete = false;
|
|
3593
|
+
for (const [file, code] of sources) {
|
|
3594
|
+
if (/setActivePinia\s*\(/.test(code) && /\bawait\b/.test(code)) {
|
|
3595
|
+
add(
|
|
3596
|
+
file,
|
|
3597
|
+
"WARN",
|
|
3598
|
+
"\u540C\u4E00\u6A21\u5757\u4F7F\u7528 setActivePinia \u548C await\uFF0C\u9700\u8981\u786E\u8BA4\u5F02\u6B65\u72B6\u6001\u5F52\u5C5E\u3002",
|
|
3599
|
+
"\u7B49\u5F85\u671F\u95F4\u53E6\u4E00\u4E2A\u5E94\u7528\u53EF\u80FD\u6539\u53D8\u5168\u5C40 activePinia\uFF1B\u9759\u6001\u626B\u63CF\u4E0D\u80FD\u8BC1\u660E\u5F53\u524D\u56DE\u8C03\u4E00\u5B9A\u53D6\u9519\u5B9E\u4F8B\u3002",
|
|
3600
|
+
"\u5728\u56DE\u8C03\u4E2D\u4F20\u5165\u672C\u5E94\u7528 pinia\uFF0C\u6216\u7528 /vue \u7684 bindStoreToApp \u7ED1\u5B9A\u5B9E\u9645\u5B9E\u4F8B\uFF1B\u7EC4\u4EF6\u5185\u4FDD\u7559\u539F\u751F\u6CE8\u5165\uFF0C\u4E0D\u628A\u5E93\u5355\u4F8B\u5F53\u6210\u4E1A\u52A1 store \u5B9E\u4F8B\u3002"
|
|
3601
|
+
);
|
|
3602
|
+
}
|
|
3603
|
+
if (/defineBridgeApp\s*\(/.test(code) && /createWeb(?:Hash)?History\s*\(/.test(code) && !/createMemoryHistory|defineApplication/.test(code)) {
|
|
3604
|
+
add(
|
|
3605
|
+
file,
|
|
3606
|
+
"WARN",
|
|
3607
|
+
"\u6865\u63A5\u88C5\u914D\u4E2D\u51FA\u73B0\u6D4F\u89C8\u5668 history\uFF0C\u9700\u786E\u8BA4\u5B83\u53EA\u5728\u72EC\u7ACB\u542F\u52A8\u65F6\u6267\u884C\u3002",
|
|
3608
|
+
"\u5B50\u5E94\u7528\u76F4\u63A5\u5199\u6D4F\u89C8\u5668\u5386\u53F2\u53EF\u80FD\u91CD\u590D\u524D\u7F00\u6216\u6DFB\u52A0\u610F\u5916 hash\uFF1B\u6B64\u9879\u662F\u4EBA\u5DE5\u6838\u67E5\uFF0C\u4E0D\u662F\u5DF2\u590D\u73B0\u7F3A\u9677\u3002",
|
|
3609
|
+
"\u7EDF\u4E00\u88C5\u914D\u7528 defineApplication\uFF1B\u6309 context.mode \u9009\u62E9 web/memory history\uFF0C\u6865\u63A5\u8FD4\u56DE { app, router }\u3002"
|
|
3610
|
+
);
|
|
3611
|
+
}
|
|
3612
|
+
for (const match of code.matchAll(/import\.meta\.glob(?:Eager)?\s*\(\s*(\[[\s\S]*?\]|["'][^"']+["'])/g)) {
|
|
3613
|
+
if (/\.ts/.test(match[1]) && !/![^"']*\.d\.ts/.test(match[1])) {
|
|
3614
|
+
add(
|
|
3615
|
+
file,
|
|
3616
|
+
"WARN",
|
|
3617
|
+
"\u53D1\u73B0\u626B\u63CF .ts \u7684\u4E1A\u52A1 glob\uFF0C\u672A\u770B\u5230\u6392\u9664 .d.ts \u7684\u8D1F\u6A21\u5F0F\u3002",
|
|
3618
|
+
"\u81EA\u52A8\u751F\u6210\u58F0\u660E\u53EA\u7528\u4E8E\u7C7B\u578B\uFF1B\u4E0D\u80FD\u88AB\u7EC4\u4EF6/\u5DE5\u5177\u6CE8\u518C\u5668\u4F5C\u4E3A\u8FD0\u884C\u6A21\u5757\u6267\u884C\u3002\u5176\u4ED6 exclude \u914D\u7F6E\u9700\u4EBA\u5DE5\u6838\u5B9E\u3002",
|
|
3619
|
+
"\u5728 glob \u4E2D\u6392\u9664 **/*.d.ts \u548C\u5E94\u7528\u88C5\u914D\u76EE\u5F55\uFF1B\u4E0D\u8981\u5BFC\u5165\u751F\u6210\u58F0\u660E\u7684\u5185\u5BB9\u3002"
|
|
3620
|
+
);
|
|
3621
|
+
}
|
|
3622
|
+
}
|
|
3623
|
+
}
|
|
3624
|
+
const shared = Array.isArray(options.shared) ? options.shared : Object.keys(options.shared ?? {});
|
|
3625
|
+
const isImported = (key) => [...imports].some((value) => value === key || value.startsWith(key + "/"));
|
|
3626
|
+
for (const key of shared) {
|
|
3627
|
+
const hint = Array.isArray(options.shared) ? void 0 : options.shared?.[key];
|
|
3628
|
+
const local = typeof hint === "string" ? hint : hint?.import;
|
|
3629
|
+
const target = (typeof local === "string" ? local : key).replace(/\/$/, "");
|
|
3630
|
+
if (Object.keys(options.remotes ?? {}).length && complete && local !== false && !isImported(target)) {
|
|
3631
|
+
add(
|
|
3632
|
+
`shared.${key}`,
|
|
3633
|
+
"WARN",
|
|
3634
|
+
"\u5DF2\u626B\u63CF\u5165\u53E3\u6CA1\u6709\u53D1\u73B0\u6B64\u5171\u4EAB\u5E93\u7684\u8FD0\u884C\u65F6\u5BFC\u5165\u3002",
|
|
3635
|
+
"\u53EF\u80FD\u662F\u591A\u4F59 provider\uFF0C\u4E5F\u53EF\u80FD\u7531\u626B\u63CF\u4E4B\u5916\u7684\u5165\u53E3\u4F7F\u7528\uFF1B\u4E0D\u80FD\u4EC5\u51ED\u5B89\u88C5\u4E86\u4F9D\u8D56\u5C31\u8981\u6C42\u5171\u4EAB\u3002",
|
|
3636
|
+
"\u786E\u8BA4\u771F\u5B9E\u7528\u9014\uFF1B\u5B8C\u6574\u5B50\u5E94\u7528\u81EA\u6709\u7684\u72B6\u6001\u5E93\u901A\u5E38\u7531\u5B50\u5E94\u7528\u63D0\u4F9B\uFF0C\u4E0D\u8981\u6C42\u672A\u4F7F\u7528\u5B83\u7684\u5BBF\u4E3B\u91CD\u590D\u63D0\u4F9B\u3002"
|
|
3637
|
+
);
|
|
3638
|
+
}
|
|
3639
|
+
}
|
|
3640
|
+
for (const [key, remote] of Object.entries(options.remotes ?? {})) {
|
|
3641
|
+
if (typeof remote === "function") {
|
|
3642
|
+
add(`remotes.${key}`, "WARN", "\u8FDC\u7A0B\u5730\u5740\u7531\u8FD0\u884C\u65F6\u51FD\u6570\u51B3\u5B9A\uFF0C\u672A\u6267\u884C\u8BE5\u51FD\u6570\u3002", "\u79BB\u7EBF\u9884\u68C0\u4E0D\u6267\u884C\u4E1A\u52A1\u8FDC\u7A0B\u5730\u5740\u56DE\u8C03\u3002", "\u5728\u5B9E\u9645 dev/prod \u94FE\u8DEF\u6838\u5BF9\u51FD\u6570\u8FD4\u56DE\u503C\u3001\u5165\u53E3\u7C7B\u578B\u548C\u7F51\u7EDC\u9519\u8BEF\u3002");
|
|
3643
|
+
} else if (typeof remote === "string") {
|
|
3644
|
+
if (/^https?:\/\/(localhost|127\.0\.0\.1|\[::1\])(?=[:/]|$)/.test(remote)) {
|
|
3645
|
+
add(
|
|
3646
|
+
`remotes.${key}`,
|
|
3647
|
+
"WARN",
|
|
3648
|
+
"\u5355\u5730\u5740\u8FDC\u7A0B\u6307\u5411\u672C\u673A\u5F00\u53D1\u670D\u52A1\uFF0C\u751F\u4EA7\u4E5F\u4F1A\u4F7F\u7528\u8BE5\u5730\u5740\u3002",
|
|
3649
|
+
"\u6CA1\u6709\u663E\u5F0F\u533A\u5206\u5F00\u53D1\u4E0E\u751F\u4EA7\u5730\u5740\u3002",
|
|
3650
|
+
"\u4F7F\u7528 { dev: \u5F00\u53D1\u5730\u5740, prod: \u90E8\u7F72\u8DEF\u5F84\u6216URL }\uFF1B\u751F\u4EA7\u4E0D\u501F\u7528\u5F00\u53D1\u670D\u52A1\u5668\u3002"
|
|
3651
|
+
);
|
|
3652
|
+
}
|
|
3653
|
+
} else if (!remote.dev || !remote.prod) {
|
|
3654
|
+
add(`remotes.${key}`, "WARN", "\u8FDC\u7A0B\u5730\u5740\u672A\u540C\u65F6\u58F0\u660E dev/prod\u3002", "\u7F3A\u7701\u56DE\u9000\u53EF\u80FD\u628A\u5F00\u53D1\u5730\u5740\u5E26\u5165\u751F\u4EA7\u3002", "\u5728\u540C\u4E00\u914D\u7F6E\u4E2D\u660E\u786E\u5199\u51FA dev \u548C prod\uFF0C\u518D\u6838\u5BF9\u90E8\u7F72\u5B50\u8DEF\u5F84\u3002");
|
|
3655
|
+
}
|
|
3656
|
+
}
|
|
3657
|
+
add(
|
|
3658
|
+
"\u6E90\u7801\u626B\u63CF\u8303\u56F4",
|
|
3659
|
+
complete ? "PASS" : "WARN",
|
|
3660
|
+
`\u8BFB\u53D6 ${seen.size} \u4E2A\u5E94\u7528\u6E90\u6587\u4EF6${complete ? "\uFF1B\u9759\u6001\u4F9D\u8D56\u626B\u63CF\u5B8C\u6210\u3002" : "\uFF1B\u626B\u63CF\u4E0D\u5B8C\u6574\uFF0C\u4E0D\u80FD\u636E\u6B64\u5BA3\u79F0\u63A5\u5165\u6210\u529F\u3002"}`,
|
|
3661
|
+
complete ? void 0 : "\u5B58\u5728\u52A8\u6001\u8DEF\u5F84\u3001\u81EA\u5B9A\u4E49\u522B\u540D\u6216\u8D85\u8FC7256\u6587\u4EF6\u7684\u4F9D\u8D56\u56FE\u3002",
|
|
3662
|
+
complete ? void 0 : "\u5B8C\u6210\u6784\u5EFA\u3001\u6709\u6548\u9879\u76EETS\u548C\u5B9E\u9645\u6D4F\u89C8\u5668\u9A8C\u6536\uFF1B\u6B64\u547D\u4EE4\u53EA\u505A\u63A5\u5165\u9884\u68C0\u3002"
|
|
3663
|
+
);
|
|
3664
|
+
return {
|
|
3665
|
+
checks,
|
|
3666
|
+
failed: checks.some((check) => check.level === "FAIL"),
|
|
3667
|
+
complete,
|
|
3668
|
+
filesScanned: seen.size,
|
|
3669
|
+
manualChecks: [
|
|
3670
|
+
"\u5B8C\u6574\u5B50\u5E94\u7528\uFF1A\u590D\u7528\u4E00\u4EFD\u88C5\u914D\u4EE3\u7801\uFF1BVue \u8FD4\u56DE\u5C1A\u672A\u5B89\u88C5\u7684 app/router\uFF0C\u5B88\u536B\u5148\u51C6\u5907\u597D\u3002",
|
|
3671
|
+
"Vue \u8FDC\u7A0B\u7EC4\u4EF6\uFF1A\u9700\u8981\u7684\u7956\u5148\u6CE8\u5165\u3001\u5168\u5C40\u7EC4\u4EF6\u3001\u6743\u9650\u6307\u4EE4\u548C\u4E3B\u9898\u5FC5\u987B\u5728\u5B9E\u9645\u6D88\u8D39 app \u4E2D\u5B58\u5728\uFF1B\u4E0D\u4F1A\u81EA\u52A8\u590D\u5236\u6574\u4E2A\u4E1A\u52A1 app\u3002",
|
|
3672
|
+
"\u4E1A\u52A1 store \u5B9E\u4F8B\u4E0E\u5171\u4EAB\u5E93\u5B9E\u4F8B\u662F\u4E24\u4EF6\u4E8B\uFF1B\u5E76\u884C\u5BB9\u5668\u4E0D\u80FD\u9760\u4E00\u4E2A\u53EF\u53D8\u6A21\u5757\u53D8\u91CF\u533A\u5206\u72B6\u6001\u5F52\u5C5E\u3002",
|
|
3673
|
+
"\u6E90\u7801\u9884\u68C0\u4E0D\u8BC1\u660E\u6302\u8F7D\u3001\u6DF1\u94FE\u3001\u4F1A\u8BDD\u3001\u5378\u8F7D\u548C\u9519\u8BEF\u6062\u590D\u901A\u8FC7\uFF1B\u8FD9\u4E9B\u7531\u5B9E\u9645\u9A8C\u6536\u786E\u8BA4\u3002"
|
|
3674
|
+
],
|
|
3675
|
+
integrationFiles: {
|
|
3676
|
+
required: [...new Set(required)],
|
|
3677
|
+
optional: ["setup\uFF1A\u53EA\u6709\u8FDC\u7A0B\u521D\u59CB\u5316/\u5168\u5C40\u7EC4\u4EF6/Provider\u7B49\u9700\u6C42\u624D\u914D\u7F6E", "\u4F1A\u8BDD/context\uFF1A\u53EA\u6709\u5BBF\u4E3B\u767B\u5F55\u6001\u548C\u8DE8\u5E94\u7528\u4E0A\u4E0B\u6587\u9700\u6C42\u624D\u63A5\u5165", "hostPages\uFF1A\u4EC5\u9010\u9875\u63A5\u5165\uFF1B\u5B8C\u6574\u5B50\u5E94\u7528\u4E0D\u91CD\u590D\u767B\u8BB0\u5185\u90E8\u83DC\u5355"],
|
|
3678
|
+
existing: ["vite.config\uFF1A\u6CE8\u518C federation", "\u72EC\u7ACB main\uFF1A\u8C03\u7528 application.start", "\u539F router/\u5B88\u536B\uFF1A\u590D\u7528\u8DEF\u7531\uFF0C\u6309\u8FD0\u884C\u6A21\u5F0F\u521B\u5EFA history", "\u5BBF\u4E3B\u89C6\u56FE\uFF1A\u58F0\u660E\u6302\u8F7D\u524D\u7F00\u548C createVueBridgeApp/createReactBridgeApp"]
|
|
3679
|
+
}
|
|
3680
|
+
};
|
|
3681
|
+
}
|
|
3682
|
+
var requireFromHere, cachedTransform, esbuildTransform, extensions;
|
|
3683
|
+
var init_doctor_source = __esm({
|
|
3684
|
+
"src/doctor-source.ts"() {
|
|
3685
|
+
"use strict";
|
|
3686
|
+
init_lexer();
|
|
3687
|
+
init_app_config();
|
|
3688
|
+
requireFromHere = createRequire5(import.meta.url);
|
|
3689
|
+
esbuildTransform = () => {
|
|
3690
|
+
if (!cachedTransform) {
|
|
3691
|
+
const esb = requireFromHere("esbuild");
|
|
3692
|
+
cachedTransform = esb.transform.bind(esb);
|
|
3693
|
+
}
|
|
3694
|
+
return cachedTransform;
|
|
3695
|
+
};
|
|
3696
|
+
extensions = ["", ".ts", ".tsx", ".js", ".jsx", ".mjs", ".vue", "/index.ts", "/index.tsx", "/index.js", "/index.vue"];
|
|
3697
|
+
}
|
|
3698
|
+
});
|
|
3699
|
+
|
|
3398
3700
|
// src/cli.ts
|
|
3399
3701
|
import { resolve } from "node:path";
|
|
3400
3702
|
|
|
@@ -3747,6 +4049,8 @@ var HELP = `fulgurjs \u2014 Vite Module Federation CLI (@fulgurjs/federation)
|
|
|
3747
4049
|
fulgurjs port <\u5E94\u7528> <\u65B0\u7AEF\u53E3> [--write] \u4E00\u6B21\u66F4\u65B0\u56DB\u5904\uFF1A\u5E94\u7528 package.json dev/preview\u3001
|
|
3748
4050
|
\u5BBF\u4E3B fulgurjs.config.ts \u8BE5\u8FDC\u7A0B dev \u5730\u5740\u3001
|
|
3749
4051
|
scripts/dev.config.json\u3001README \u7AEF\u53E3\u8868
|
|
4052
|
+
\u672C\u5730\u63A5\u5165\u9884\u68C0\uFF08\u4E0D\u542F\u52A8\u5E94\u7528\u3001\u4E0D\u8BF7\u6C42\u7AD9\u70B9\uFF1BWARN \u662F\u4EBA\u5DE5\u6838\u67E5\u9879\uFF09\uFF1A
|
|
4053
|
+
fulgurjs doctor --config <path> [--json] \u67E5\u5165\u53E3/\u5730\u5740/glob/\u72B6\u6001\u5F52\u5C5E\uFF0C\u8F93\u51FA\u5FC5\u6539\u4E0E\u53EF\u9009\u6587\u4EF6\u6E05\u5355
|
|
3750
4054
|
\u90E8\u7F72\u4F53\u68C0\uFF08--apps \u5FC5\u586B\uFF1A\u7AD9\u70B9\u6839\u4E0B\u7684\u90E8\u7F72\u5B50\u76EE\u5F55\uFF0C\u8FDC\u7A0B\u90E8\u7F72\u5728 /remote-a/ \u5C31\u5199 remote-a\uFF1B
|
|
3751
4055
|
'.' \u8868\u793A\u90E8\u7F72\u5728\u7AD9\u70B9\u6839\uFF1B\u6761\u76EE\u53EF\u5199\u5B8C\u6574 URL \u68C0\u67E5\u591A origin\uFF1B\u4E0D\u505A\u4EFB\u4F55\u9ED8\u8BA4\u731C\u6D4B\uFF09\uFF1A
|
|
3752
4056
|
fulgurjs doctor --base <URL> --apps <a,b,c> [--entry <\u6587\u4EF6\u540D>] [--no-entry]
|
|
@@ -3988,6 +4292,28 @@ async function main() {
|
|
|
3988
4292
|
if (cmd === "doctor") {
|
|
3989
4293
|
const base = argOf("--base");
|
|
3990
4294
|
const appsRaw = argOf("--apps");
|
|
4295
|
+
const config = argOf("--config");
|
|
4296
|
+
if (has("--config") && !config) {
|
|
4297
|
+
console.error("[fulgurjs:doctor] --config \u7F3A\u5C11\u8DEF\u5F84\u3002\u7528\u6CD5\uFF1Adoctor --config ./fulgurjs.config.ts");
|
|
4298
|
+
return 2;
|
|
4299
|
+
}
|
|
4300
|
+
if (config) {
|
|
4301
|
+
if (has("--base") || has("--apps")) {
|
|
4302
|
+
console.error("[fulgurjs:doctor] \u672C\u5730 --config \u4E0E\u90E8\u7F72 --base/--apps \u5206\u5F00\u6267\u884C\uFF0C\u907F\u514D\u628A\u6E90\u7801\u9884\u68C0\u5F53\u6210\u90E8\u7F72\u9A8C\u6536\u3002");
|
|
4303
|
+
return 2;
|
|
4304
|
+
}
|
|
4305
|
+
const { runSourceDoctor: runSourceDoctor2 } = await Promise.resolve().then(() => (init_doctor_source(), doctor_source_exports));
|
|
4306
|
+
const report = await runSourceDoctor2(resolve(config));
|
|
4307
|
+
if (has("--json")) console.log(JSON.stringify({ mode: "source", ...report }, null, 2));
|
|
4308
|
+
else {
|
|
4309
|
+
console.log(formatDoctorReport(report.checks));
|
|
4310
|
+
console.log("\n\u5FC5\u9700\u5165\u53E3\u6587\u4EF6\uFF1A\n" + report.integrationFiles.required.map((file) => ` ${file}`).join("\n"));
|
|
4311
|
+
console.log("\n\u5DF2\u6709\u6587\u4EF6\u9700\u8981\u63A5\u7EBF\uFF1A\n" + report.integrationFiles.existing.map((file) => ` ${file}`).join("\n"));
|
|
4312
|
+
console.log("\n\u6309\u9700\u6C42\u9009\u7528\uFF1A\n" + report.integrationFiles.optional.map((file) => ` ${file}`).join("\n"));
|
|
4313
|
+
console.log("\n\u5FC5\u987B\u4EBA\u5DE5\u9A8C\u6536\uFF1A\n" + report.manualChecks.map((line) => ` ${line}`).join("\n"));
|
|
4314
|
+
}
|
|
4315
|
+
return report.failed ? 1 : 0;
|
|
4316
|
+
}
|
|
3991
4317
|
if (!base) {
|
|
3992
4318
|
console.error("[fulgurjs:doctor] \u7F3A\u5C11 --base <URL>\uFF08\u7AD9\u70B9\u6839\u5730\u5740\uFF0C\u5982 http://your-site\uFF09");
|
|
3993
4319
|
return 2;
|