@lark-apaas/coding-vite-preset 1.0.7-alpha.0 → 1.0.7-alpha.10
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/lib/preset.d.ts.map +1 -1
- package/lib/preset.js +98 -53
- package/lib/preset.js.map +1 -1
- package/lib/vite-plugins/health-middleware-plugin.d.ts +45 -0
- package/lib/vite-plugins/health-middleware-plugin.d.ts.map +1 -0
- package/lib/vite-plugins/health-middleware-plugin.js +67 -0
- package/lib/vite-plugins/health-middleware-plugin.js.map +1 -0
- package/lib/vite-plugins/miaoda-fonts-mirror-plugin.d.ts +14 -0
- package/lib/vite-plugins/miaoda-fonts-mirror-plugin.d.ts.map +1 -0
- package/lib/vite-plugins/miaoda-fonts-mirror-plugin.js +99 -0
- package/lib/vite-plugins/miaoda-fonts-mirror-plugin.js.map +1 -0
- package/lib/vite-plugins/runtime-injection-plugin.d.ts.map +1 -1
- package/lib/vite-plugins/runtime-injection-plugin.js +5 -2
- package/lib/vite-plugins/runtime-injection-plugin.js.map +1 -1
- package/lib/vite-plugins/ws-watchdog-plugin.d.ts +19 -0
- package/lib/vite-plugins/ws-watchdog-plugin.d.ts.map +1 -0
- package/lib/vite-plugins/ws-watchdog-plugin.js +86 -0
- package/lib/vite-plugins/ws-watchdog-plugin.js.map +1 -0
- package/package.json +4 -4
- package/src/runtime/ws-watchdog-client.mjs +148 -0
package/lib/preset.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAyB,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAyB,MAAM,MAAM,CAAC;AAsD9D,MAAM,WAAW,gCAAgC;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uBAAuB;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAUD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,gCAAgC,GACxC,UAAU,CA6hBZ"}
|
package/lib/preset.js
CHANGED
|
@@ -57,6 +57,22 @@ const static_assets_plugin_1 = require("./vite-plugins/static-assets-plugin");
|
|
|
57
57
|
const polyfill_plugin_1 = require("./vite-plugins/polyfill-plugin");
|
|
58
58
|
const snapdom_proxy_1 = require("./utils/snapdom-proxy");
|
|
59
59
|
const hmr_timing_1 = require("./utils/hmr-timing");
|
|
60
|
+
const ws_watchdog_plugin_1 = require("./vite-plugins/ws-watchdog-plugin");
|
|
61
|
+
const miaoda_fonts_mirror_plugin_1 = require("./vite-plugins/miaoda-fonts-mirror-plugin");
|
|
62
|
+
const health_middleware_plugin_1 = require("./vite-plugins/health-middleware-plugin");
|
|
63
|
+
/**
|
|
64
|
+
* 兼容两种模板 layout 的路径解析:
|
|
65
|
+
* - 老全栈模板:`client/X` 存在(前后端共存时代)
|
|
66
|
+
* - 新 jsPage 模板:`X` 在项目根(无 client/ 包装)
|
|
67
|
+
*
|
|
68
|
+
* 优先用 `client/<rel>`(如果存在),否则降级到 `<rel>`。
|
|
69
|
+
*/
|
|
70
|
+
function resolveClientPath(rootDir, rel) {
|
|
71
|
+
const legacy = path_1.default.resolve(rootDir, 'client', rel);
|
|
72
|
+
if (fs_1.default.existsSync(legacy))
|
|
73
|
+
return legacy;
|
|
74
|
+
return path_1.default.resolve(rootDir, rel);
|
|
75
|
+
}
|
|
60
76
|
function sendBackendUnavailable502(_err, _req, res) {
|
|
61
77
|
if (res.headersSent)
|
|
62
78
|
return;
|
|
@@ -81,6 +97,11 @@ function createRecommendViteConfig(options) {
|
|
|
81
97
|
const { isDev = true, needRoutes = true, clientBasePath = '', publicPath = '', codeSplitting = true, } = options;
|
|
82
98
|
const rootDir = process.cwd();
|
|
83
99
|
const serverPort = process.env.SERVER_PORT || '3000';
|
|
100
|
+
// 从 package.json mclaw.features 推导应用类型;jsPage(client) 没有 server,
|
|
101
|
+
// 不应注入 /api、/__innerapi__、HTML→server 之类的 proxy(否则会被转到老沙箱
|
|
102
|
+
// 的 mock-health 上拿到 "ok" 占位响应)
|
|
103
|
+
const appType = (0, health_middleware_plugin_1.detectAppType)(rootDir);
|
|
104
|
+
const hasServer = appType !== 'client';
|
|
84
105
|
const appFlags = readAppFlags(rootDir);
|
|
85
106
|
// Inspector can be disabled via environment variable
|
|
86
107
|
const enableInspector = isDev && process.env.DISABLE_INSPECTOR !== 'true';
|
|
@@ -150,7 +171,9 @@ function createRecommendViteConfig(options) {
|
|
|
150
171
|
try {
|
|
151
172
|
const { routeParserPlugin } = require('./vite-plugins/route-parser-plugin');
|
|
152
173
|
return [routeParserPlugin({
|
|
153
|
-
appPath: '
|
|
174
|
+
appPath: fs_1.default.existsSync(path_1.default.resolve(rootDir, 'client/src/app.tsx'))
|
|
175
|
+
? './client/src/app.tsx'
|
|
176
|
+
: './src/app.tsx',
|
|
154
177
|
outputPath: path_1.default.resolve(rootDir, 'dist/client/routes.json'),
|
|
155
178
|
serveBasePath: clientBasePath,
|
|
156
179
|
...(isDev ? { basePath: '' } : {}),
|
|
@@ -187,6 +210,17 @@ function createRecommendViteConfig(options) {
|
|
|
187
210
|
}),
|
|
188
211
|
// HMR timing plugin (dev only)
|
|
189
212
|
isDev && (0, hmr_timing_1.createHmrTimingPlugin)(),
|
|
213
|
+
// WS Watchdog plugin (dev only) — 检测沙箱代理链路下的 WebSocket 僵尸连接,
|
|
214
|
+
// 客户端 5s ping 一次,连续 2 次拿不到 pong 即向 parent 发 disconnected。
|
|
215
|
+
// 沙箱 iframe 自启动;普通本地开发也启用、不会有副作用。
|
|
216
|
+
isDev && (0, ws_watchdog_plugin_1.createWsWatchdogPlugin)({ clientBasePath }),
|
|
217
|
+
// Google Fonts → 妙搭字体代理(编译时字符串替换)
|
|
218
|
+
// 屏蔽 Google Fonts 在内网/部分客户端不可达导致的白屏。
|
|
219
|
+
// 关闭:env MIAODA_FONTS_MIRROR_OFF=1
|
|
220
|
+
(0, miaoda_fonts_mirror_plugin_1.miaodaFontsMirrorPlugin)(),
|
|
221
|
+
// 妙搭沙箱外壳的 health endpoint(仅 dev)
|
|
222
|
+
// 规范:飞书文档 - 妙搭应用 Health Check 接口规范
|
|
223
|
+
isDev && (0, health_middleware_plugin_1.healthMiddlewarePlugin)({ rootDir }),
|
|
190
224
|
];
|
|
191
225
|
const config = {
|
|
192
226
|
root: rootDir,
|
|
@@ -272,7 +306,9 @@ function createRecommendViteConfig(options) {
|
|
|
272
306
|
: {
|
|
273
307
|
path: `/ws`,
|
|
274
308
|
},
|
|
275
|
-
proxy
|
|
309
|
+
// jsPage(client) 没 server,不需要 API / HTML proxy;
|
|
310
|
+
// 否则 HTML 请求会被 proxy 到 mock-health 拿到 "ok" 占位响应
|
|
311
|
+
proxy: hasServer ? {
|
|
276
312
|
// API proxy
|
|
277
313
|
[`${clientBasePath}/api`]: {
|
|
278
314
|
target: `http://localhost:${serverPort}`,
|
|
@@ -316,7 +352,7 @@ function createRecommendViteConfig(options) {
|
|
|
316
352
|
},
|
|
317
353
|
}
|
|
318
354
|
: {}),
|
|
319
|
-
},
|
|
355
|
+
} : undefined,
|
|
320
356
|
},
|
|
321
357
|
build: {
|
|
322
358
|
outDir: path_1.default.resolve(rootDir, 'dist/client'),
|
|
@@ -326,7 +362,7 @@ function createRecommendViteConfig(options) {
|
|
|
326
362
|
// CSS 降级:使用 Vite 内置的 Lightning CSS 转换现代 CSS 特性
|
|
327
363
|
cssTarget: ['ios12', 'safari12', 'chrome80'],
|
|
328
364
|
rollupOptions: {
|
|
329
|
-
input:
|
|
365
|
+
input: resolveClientPath(rootDir, 'index.html'),
|
|
330
366
|
output: {
|
|
331
367
|
// Code splitting: when disabled, all dynamic imports are inlined into single bundle
|
|
332
368
|
// When enabled (default), Vite will split chunks based on dynamic imports
|
|
@@ -350,7 +386,7 @@ function createRecommendViteConfig(options) {
|
|
|
350
386
|
// Copy public directory
|
|
351
387
|
copyPublicDir: true,
|
|
352
388
|
},
|
|
353
|
-
publicDir:
|
|
389
|
+
publicDir: resolveClientPath(rootDir, 'public'),
|
|
354
390
|
// Don't specify css.postcss here - let Vite pick up the project's postcss.config.js
|
|
355
391
|
// This allows projects to configure their own PostCSS plugins (e.g., Tailwind v4)
|
|
356
392
|
// Optimize deps for faster dev startup
|
|
@@ -400,8 +436,12 @@ function createRecommendViteConfig(options) {
|
|
|
400
436
|
// Vite 8 的 baseMiddleware:当请求 pathname 不以 base(含末尾 /)开头时
|
|
401
437
|
// 显示 "did you mean to visit ..." 警告页,不再自动 301 redirect。
|
|
402
438
|
// 沙箱预览过来的 URL 通常是 `/app/app_xxx?sso_token=...`(pathname 没末尾 /),
|
|
403
|
-
//
|
|
404
|
-
//
|
|
439
|
+
// 会被这个警告页拦下导致预览打不开。
|
|
440
|
+
//
|
|
441
|
+
// 注意:不能用 301——浏览器跳 → 沙箱网关在转发"带尾 /"的请求时会把
|
|
442
|
+
// 尾 / 又 strip 回去 → vite 又看到缺尾 / → 又 301 → ERR_TOO_MANY_REDIRECTS。
|
|
443
|
+
// 改用 internal rewrite:直接改 req.url,浏览器全程不感知 redirect,
|
|
444
|
+
// 下游 vite baseMiddleware 继续 strip base → SPA fallback。
|
|
405
445
|
//
|
|
406
446
|
// 必须 unshift 到 stack 开头才能早于内置 baseMiddleware 执行。
|
|
407
447
|
const baseWithSlash = clientBasePath.endsWith('/')
|
|
@@ -413,17 +453,14 @@ function createRecommendViteConfig(options) {
|
|
|
413
453
|
if (Array.isArray(stack)) {
|
|
414
454
|
stack.unshift({
|
|
415
455
|
route: '',
|
|
416
|
-
handle: (req,
|
|
456
|
+
handle: (req, _res, next) => {
|
|
417
457
|
const url = req.url || '';
|
|
418
458
|
const qIdx = url.indexOf('?');
|
|
419
459
|
const pathname = qIdx >= 0 ? url.slice(0, qIdx) : url;
|
|
420
460
|
const search = qIdx >= 0 ? url.slice(qIdx) : '';
|
|
421
461
|
if (pathname === baseWithoutSlash) {
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
});
|
|
425
|
-
res.end();
|
|
426
|
-
return;
|
|
462
|
+
// internal rewrite — 不发 301,避免与网关 round-trip 死循环
|
|
463
|
+
req.url = baseWithoutSlash + '/' + search;
|
|
427
464
|
}
|
|
428
465
|
next();
|
|
429
466
|
},
|
|
@@ -442,7 +479,7 @@ function createRecommendViteConfig(options) {
|
|
|
442
479
|
logDir: process.env.LOG_DIR || './logs',
|
|
443
480
|
}),
|
|
444
481
|
createOpenapiMiddleware({
|
|
445
|
-
openapiFilePath:
|
|
482
|
+
openapiFilePath: resolveClientPath(rootDir, 'src/api/gen/openapi.json'),
|
|
446
483
|
serverDir: path_1.default.resolve(rootDir, './server'),
|
|
447
484
|
enableEnhancement: true,
|
|
448
485
|
}),
|
|
@@ -455,47 +492,55 @@ function createRecommendViteConfig(options) {
|
|
|
455
492
|
isDev,
|
|
456
493
|
});
|
|
457
494
|
// Proxy HTML requests to backend server
|
|
458
|
-
server
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
const
|
|
474
|
-
const
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
target: `http://localhost:${serverPort}`,
|
|
495
|
+
// 仅在有 server 的应用类型(fullstack)下启用;jsPage(client) 没 server,
|
|
496
|
+
// vite 自己处理 SPA fallback 即可(HTML 命中 index.html)
|
|
497
|
+
if (hasServer) {
|
|
498
|
+
server.middlewares.use((req, res, next) => {
|
|
499
|
+
const devServerWhiteList = [
|
|
500
|
+
'/@vite',
|
|
501
|
+
'/@fs',
|
|
502
|
+
'/__vite',
|
|
503
|
+
'/@id',
|
|
504
|
+
'/node_modules',
|
|
505
|
+
'/dev/',
|
|
506
|
+
'.hot-update',
|
|
507
|
+
];
|
|
508
|
+
const isHtmlRequest = req.headers.accept?.includes('text/html');
|
|
509
|
+
const pathname = req.url?.split('?')[0] || '';
|
|
510
|
+
const isDevServerPath = devServerWhiteList.some((item) => pathname.includes(item));
|
|
511
|
+
const isStaticAsset = /\.(js|css|png|jpg|jpeg|gif|svg|ico|woff|woff2|ttf|eot)$/i.test(pathname);
|
|
512
|
+
if (isHtmlRequest && !isDevServerPath && !isStaticAsset) {
|
|
513
|
+
const http = require('http');
|
|
514
|
+
const proxyReq = http.request({
|
|
515
|
+
hostname: 'localhost',
|
|
516
|
+
port: serverPort,
|
|
517
|
+
path: req.url,
|
|
518
|
+
method: req.method,
|
|
519
|
+
headers: req.headers,
|
|
520
|
+
}, (proxyRes) => {
|
|
521
|
+
res.writeHead(proxyRes.statusCode || 200, proxyRes.headers);
|
|
522
|
+
proxyRes.pipe(res);
|
|
487
523
|
});
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
524
|
+
proxyReq.on('error', (err) => {
|
|
525
|
+
handleDevProxyError(err, req, res, {
|
|
526
|
+
target: `http://localhost:${serverPort}`,
|
|
527
|
+
});
|
|
528
|
+
});
|
|
529
|
+
req.pipe(proxyReq);
|
|
530
|
+
}
|
|
531
|
+
else {
|
|
532
|
+
next();
|
|
533
|
+
}
|
|
534
|
+
});
|
|
535
|
+
}
|
|
495
536
|
}
|
|
496
|
-
catch {
|
|
497
|
-
// devtool-kits
|
|
498
|
-
|
|
537
|
+
catch (error) {
|
|
538
|
+
// devtool-kits 加载失败时输出详细诊断,避免静默吞错导致整套 dev middleware 全死
|
|
539
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
540
|
+
console.warn(`[coding-vite-preset] @lark-apaas/devtool-kits 加载失败,跳过 dev middlewares\n` +
|
|
541
|
+
` 错误: ${msg}\n` +
|
|
542
|
+
` 影响: /dev/logs/* /dev/openapi.json 等 endpoint 不可用\n` +
|
|
543
|
+
` 排查: ls node_modules/@lark-apaas/devtool-kits;若不存在则 install 没装,若存在则 ESM resolve 问题`);
|
|
499
544
|
}
|
|
500
545
|
// Call original configureServer if exists
|
|
501
546
|
if (originalConfigureServer) {
|
package/lib/preset.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preset.js","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"preset.js","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Plugin } from 'vite';
|
|
2
|
+
/**
|
|
3
|
+
* Health Check Middleware Plugin
|
|
4
|
+
*
|
|
5
|
+
* 给妙搭外壳提供统一的 health endpoint,让外壳能判断"应用是否就绪"。
|
|
6
|
+
* 接口规范见飞书文档 - 妙搭应用 Health Check 接口规范。
|
|
7
|
+
*
|
|
8
|
+
* Response shape:
|
|
9
|
+
* {
|
|
10
|
+
* "type": "client" | "fullstack" | "server",
|
|
11
|
+
* "ready": boolean,
|
|
12
|
+
* "status": {
|
|
13
|
+
* "client"?: boolean,
|
|
14
|
+
* "server"?: boolean
|
|
15
|
+
* }
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* - type 从项目 package.json 的 `mclaw.features` 推导
|
|
19
|
+
* - 包含 client + server → fullstack
|
|
20
|
+
* - 仅 server → server
|
|
21
|
+
* - 其它/默认 → client
|
|
22
|
+
* - status.client 在本 middleware 可响应时永远 true(vite middleware 跑 = vite ready)
|
|
23
|
+
* - status.server 仅 fullstack/server 场景下存在;当前实现先返回 false 占位,
|
|
24
|
+
* 后续接入对 server 进程的实际探活后改为真实判断
|
|
25
|
+
* - ready 由本 plugin 内部根据 type 要求算出,外壳直接读 ready 即可
|
|
26
|
+
*/
|
|
27
|
+
interface HealthMiddlewarePluginOptions {
|
|
28
|
+
/**
|
|
29
|
+
* 项目根目录,用于读取 package.json
|
|
30
|
+
*/
|
|
31
|
+
rootDir: string;
|
|
32
|
+
/**
|
|
33
|
+
* Health endpoint 路径,默认 /dev/health
|
|
34
|
+
*/
|
|
35
|
+
endpoint?: string;
|
|
36
|
+
/**
|
|
37
|
+
* 显式覆盖 type;如果不传则从 package.json mclaw.features 推导
|
|
38
|
+
*/
|
|
39
|
+
type?: 'client' | 'fullstack' | 'server';
|
|
40
|
+
}
|
|
41
|
+
export type AppType = 'client' | 'fullstack' | 'server';
|
|
42
|
+
export declare function detectAppType(rootDir: string): AppType;
|
|
43
|
+
export declare function healthMiddlewarePlugin(options: HealthMiddlewarePluginOptions): Plugin;
|
|
44
|
+
export default healthMiddlewarePlugin;
|
|
45
|
+
//# sourceMappingURL=health-middleware-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-middleware-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/health-middleware-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,MAAM,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,UAAU,6BAA6B;IACrC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;CAC1C;AAED,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAExD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAgBtD;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,6BAA6B,GACrC,MAAM,CA8CR;AAED,eAAe,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.detectAppType = detectAppType;
|
|
7
|
+
exports.healthMiddlewarePlugin = healthMiddlewarePlugin;
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
function detectAppType(rootDir) {
|
|
11
|
+
try {
|
|
12
|
+
const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(rootDir, 'package.json'), 'utf-8'));
|
|
13
|
+
const features = Array.isArray(pkg?.mclaw?.features)
|
|
14
|
+
? pkg.mclaw.features
|
|
15
|
+
: ['client'];
|
|
16
|
+
const hasClient = features.includes('client');
|
|
17
|
+
const hasServer = features.includes('server');
|
|
18
|
+
if (hasClient && hasServer)
|
|
19
|
+
return 'fullstack';
|
|
20
|
+
if (hasServer)
|
|
21
|
+
return 'server';
|
|
22
|
+
return 'client';
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return 'client';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function healthMiddlewarePlugin(options) {
|
|
29
|
+
const endpoint = options.endpoint ?? '/dev/health';
|
|
30
|
+
const appType = options.type ?? detectAppType(options.rootDir);
|
|
31
|
+
return {
|
|
32
|
+
name: 'fullstack-health-middleware',
|
|
33
|
+
apply: 'serve',
|
|
34
|
+
configureServer(server) {
|
|
35
|
+
server.middlewares.use(endpoint, (req, res, next) => {
|
|
36
|
+
// 只处理 GET,其它方法放行给下游或 404
|
|
37
|
+
if (req.method && req.method !== 'GET') {
|
|
38
|
+
return next();
|
|
39
|
+
}
|
|
40
|
+
const status = {};
|
|
41
|
+
// client status:本 middleware 可响应即 vite ready
|
|
42
|
+
if (appType === 'client' || appType === 'fullstack') {
|
|
43
|
+
status.client = true;
|
|
44
|
+
}
|
|
45
|
+
// server status:当前占位,等后续接入对 server 实际探活
|
|
46
|
+
// TODO(server): 通过 fetch `http://127.0.0.1:${SERVER_PORT}/dev/health` 拿真实 ready
|
|
47
|
+
if (appType === 'server' || appType === 'fullstack') {
|
|
48
|
+
status.server = false;
|
|
49
|
+
}
|
|
50
|
+
// ready 由 SDK 自己算出来给外壳直接读:所有 status 字段都为 true
|
|
51
|
+
const statusValues = Object.values(status);
|
|
52
|
+
const ready = statusValues.length > 0 && statusValues.every((v) => v === true);
|
|
53
|
+
const payload = {
|
|
54
|
+
type: appType,
|
|
55
|
+
ready,
|
|
56
|
+
status,
|
|
57
|
+
};
|
|
58
|
+
res.setHeader('Content-Type', 'application/json');
|
|
59
|
+
res.setHeader('Cache-Control', 'no-store');
|
|
60
|
+
res.statusCode = 200;
|
|
61
|
+
res.end(JSON.stringify(payload));
|
|
62
|
+
});
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
exports.default = healthMiddlewarePlugin;
|
|
67
|
+
//# sourceMappingURL=health-middleware-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-middleware-plugin.js","sourceRoot":"","sources":["../../src/vite-plugins/health-middleware-plugin.ts"],"names":[],"mappings":";;;;;AA+CA,sCAgBC;AAED,wDAgDC;AAjHD,4CAAoB;AACpB,gDAAwB;AA8CxB,SAAgB,aAAa,CAAC,OAAe;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAC7D,CAAC;QACF,MAAM,QAAQ,GAAa,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC;YAC5D,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ;YACpB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACf,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,SAAS,IAAI,SAAS;YAAE,OAAO,WAAW,CAAC;QAC/C,IAAI,SAAS;YAAE,OAAO,QAAQ,CAAC;QAC/B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAgB,sBAAsB,CACpC,OAAsC;IAEtC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,aAAa,CAAC;IACnD,MAAM,OAAO,GAAY,OAAO,CAAC,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAExE,OAAO;QACL,IAAI,EAAE,6BAA6B;QACnC,KAAK,EAAE,OAAO;QAEd,eAAe,CAAC,MAAqB;YACnC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBAClD,yBAAyB;gBACzB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;oBACvC,OAAO,IAAI,EAAE,CAAC;gBAChB,CAAC;gBAED,MAAM,MAAM,GAA2C,EAAE,CAAC;gBAE1D,6CAA6C;gBAC7C,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;oBACpD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;gBACvB,CAAC;gBAED,wCAAwC;gBACxC,gFAAgF;gBAChF,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;oBACpD,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;gBACxB,CAAC;gBAED,8CAA8C;gBAC9C,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC3C,MAAM,KAAK,GACT,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;gBAEnE,MAAM,OAAO,GAAG;oBACd,IAAI,EAAE,OAAO;oBACb,KAAK;oBACL,MAAM;iBACP,CAAC;gBAEF,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;gBAClD,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;gBAC3C,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;gBACrB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,kBAAe,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Plugin } from 'vite';
|
|
2
|
+
export interface MiaodaFontsMirrorOptions {
|
|
3
|
+
/** Mirror 完整基址,默认 `https://miaoda.feishu.cn/fonts` */
|
|
4
|
+
mirror?: string;
|
|
5
|
+
/** 关闭(调试时兜底) */
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
/** 命中时打 warning(便于找出源码里的旧引用) */
|
|
8
|
+
warnOnMatch?: boolean;
|
|
9
|
+
/** 排除 id 子串或正则 */
|
|
10
|
+
exclude?: (string | RegExp)[];
|
|
11
|
+
}
|
|
12
|
+
export declare function miaodaFontsMirrorPlugin(options?: MiaodaFontsMirrorOptions): Plugin | false;
|
|
13
|
+
export default miaodaFontsMirrorPlugin;
|
|
14
|
+
//# sourceMappingURL=miaoda-fonts-mirror-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"miaoda-fonts-mirror-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/miaoda-fonts-mirror-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAiCnC,MAAM,WAAW,wBAAwB;IACvC,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gCAAgC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB;IAClB,OAAO,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;CAC/B;AAED,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,wBAA6B,GACrC,MAAM,GAAG,KAAK,CAuEhB;AAED,eAAe,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.miaodaFontsMirrorPlugin = miaodaFontsMirrorPlugin;
|
|
4
|
+
/**
|
|
5
|
+
* miaoda-fonts-mirror-plugin
|
|
6
|
+
*
|
|
7
|
+
* 编译时把 Google Fonts 公共源替换为妙搭字体代理,屏蔽网络不可达问题。
|
|
8
|
+
*
|
|
9
|
+
* 背景(章小川 @ 2026-04-17 妙搭 CR 群):
|
|
10
|
+
* - 原方案(miaoda-skills MR 311)在 skill PE 里教模型使用 miaoda.feishu.cn/fonts
|
|
11
|
+
* - 问题:占 token + 增加模型学习成本;存量应用无法追溯修复
|
|
12
|
+
* - 方案:在 fullstack-vite-preset 层做编译时字符串替换
|
|
13
|
+
* · pathname 与 Google Fonts 完全一致(`/css` / `/css2?family=...&wght=...&display=swap`)
|
|
14
|
+
* · 只换域名,任何模型输出都能被正确代理
|
|
15
|
+
* · 存量应用只需重新编译发布即可修复
|
|
16
|
+
* · 单点收敛,所有用 preset 的应用(包括 template、其他应用)一致受益
|
|
17
|
+
*
|
|
18
|
+
* 覆盖范围:
|
|
19
|
+
* - index.html(含 <link> / <style>)
|
|
20
|
+
* - 所有 CSS / SCSS / LESS(@import url / url(...))
|
|
21
|
+
* - JS / TS / TSX / Vue / Svelte(字符串字面量,保险兜底)
|
|
22
|
+
* - fonts.googleapis.com(CSS 加载 API)和 fonts.gstatic.com(字体文件存储)
|
|
23
|
+
*
|
|
24
|
+
* 关闭方式:传 `{ disabled: true }` 或设置环境变量 MIAODA_FONTS_MIRROR_OFF=1
|
|
25
|
+
*/
|
|
26
|
+
const DEFAULT_MIRROR = 'https://miaoda.feishu.cn/fonts';
|
|
27
|
+
// 同时覆盖 googleapis.com(CSS 加载 API)和 gstatic.com(字体文件 CDN)
|
|
28
|
+
const GOOGLE_FONTS_RE = /https?:\/\/fonts\.(googleapis|gstatic)\.com/g;
|
|
29
|
+
// 不带 g 标志,用于快速检测(避免 lastIndex 副作用)
|
|
30
|
+
const HAS_GOOGLE_FONTS = /fonts\.(googleapis|gstatic)\.com/;
|
|
31
|
+
const TRANSFORM_EXT = /\.(html|css|scss|sass|less|styl|js|jsx|ts|tsx|mjs|cjs|vue|svelte)(\?|$)/;
|
|
32
|
+
function miaodaFontsMirrorPlugin(options = {}) {
|
|
33
|
+
const envDisabled = process.env.MIAODA_FONTS_MIRROR_OFF === '1';
|
|
34
|
+
if (options.disabled || envDisabled)
|
|
35
|
+
return false;
|
|
36
|
+
const mirror = options.mirror ?? DEFAULT_MIRROR;
|
|
37
|
+
const warn = options.warnOnMatch ?? false;
|
|
38
|
+
const exclude = options.exclude ?? [];
|
|
39
|
+
const shouldExclude = (id) => {
|
|
40
|
+
for (const pat of exclude) {
|
|
41
|
+
if (typeof pat === 'string' && id.includes(pat))
|
|
42
|
+
return true;
|
|
43
|
+
if (pat instanceof RegExp && pat.test(id))
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
return false;
|
|
47
|
+
};
|
|
48
|
+
const stats = { files: 0, occurrences: 0 };
|
|
49
|
+
return {
|
|
50
|
+
name: 'miaoda-fonts-mirror',
|
|
51
|
+
enforce: 'pre',
|
|
52
|
+
buildStart() {
|
|
53
|
+
stats.files = 0;
|
|
54
|
+
stats.occurrences = 0;
|
|
55
|
+
},
|
|
56
|
+
transformIndexHtml(html) {
|
|
57
|
+
if (!HAS_GOOGLE_FONTS.test(html))
|
|
58
|
+
return html;
|
|
59
|
+
const matches = html.match(GOOGLE_FONTS_RE);
|
|
60
|
+
const replaced = html.replace(GOOGLE_FONTS_RE, mirror);
|
|
61
|
+
stats.files += 1;
|
|
62
|
+
stats.occurrences += matches?.length ?? 0;
|
|
63
|
+
if (warn) {
|
|
64
|
+
// eslint-disable-next-line no-console
|
|
65
|
+
console.warn(`[miaoda-fonts-mirror] rewrote ${matches?.length ?? 0} occurrence(s) in index.html`);
|
|
66
|
+
}
|
|
67
|
+
return replaced;
|
|
68
|
+
},
|
|
69
|
+
transform(code, id) {
|
|
70
|
+
if (!TRANSFORM_EXT.test(id))
|
|
71
|
+
return null;
|
|
72
|
+
if (shouldExclude(id))
|
|
73
|
+
return null;
|
|
74
|
+
if (!HAS_GOOGLE_FONTS.test(code))
|
|
75
|
+
return null;
|
|
76
|
+
const matches = code.match(GOOGLE_FONTS_RE);
|
|
77
|
+
if (!matches)
|
|
78
|
+
return null;
|
|
79
|
+
stats.files += 1;
|
|
80
|
+
stats.occurrences += matches.length;
|
|
81
|
+
if (warn) {
|
|
82
|
+
// eslint-disable-next-line no-console
|
|
83
|
+
console.warn(`[miaoda-fonts-mirror] rewrote ${matches.length} occurrence(s) in ${id}`);
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
code: code.replace(GOOGLE_FONTS_RE, mirror),
|
|
87
|
+
map: null,
|
|
88
|
+
};
|
|
89
|
+
},
|
|
90
|
+
closeBundle() {
|
|
91
|
+
if (stats.files > 0) {
|
|
92
|
+
// eslint-disable-next-line no-console
|
|
93
|
+
console.log(`[miaoda-fonts-mirror] ✓ rewrote ${stats.occurrences} occurrence(s) across ${stats.files} file(s) → ${mirror}`);
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
exports.default = miaodaFontsMirrorPlugin;
|
|
99
|
+
//# sourceMappingURL=miaoda-fonts-mirror-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"miaoda-fonts-mirror-plugin.js","sourceRoot":"","sources":["../../src/vite-plugins/miaoda-fonts-mirror-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-injection-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/runtime-injection-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAoC,MAAM,MAAM,CAAC;AAMrE,MAAM,WAAW,6BAA6B;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,6BAAkC,GAC1C,MAAM,
|
|
1
|
+
{"version":3,"file":"runtime-injection-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/runtime-injection-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAoC,MAAM,MAAM,CAAC;AAMrE,MAAM,WAAW,6BAA6B;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,6BAAkC,GAC1C,MAAM,CAkFR;AAED,eAAe,sBAAsB,CAAC"}
|
|
@@ -60,8 +60,11 @@ function runtimeInjectionPlugin(options = {}) {
|
|
|
60
60
|
transform(code, id) {
|
|
61
61
|
if (!enabled || isDev)
|
|
62
62
|
return null;
|
|
63
|
-
//
|
|
64
|
-
|
|
63
|
+
// 只处理入口文件,兼容两种 layout:
|
|
64
|
+
// - 老全栈模板:client/src/index.tsx
|
|
65
|
+
// - 新 jsPage 模板:src/index.tsx(无 client/ 包装)
|
|
66
|
+
// server 端文件不经过 vite transform,正则匹配到 src/index.tsx 是安全的
|
|
67
|
+
if (!/(?:[/\\]client)?[/\\]src[/\\]index\.(tsx?|jsx?)$/.test(id)) {
|
|
65
68
|
return null;
|
|
66
69
|
}
|
|
67
70
|
// 检查是否已经包含 runtime import
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-injection-plugin.js","sourceRoot":"","sources":["../../src/vite-plugins/runtime-injection-plugin.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAiBH,
|
|
1
|
+
{"version":3,"file":"runtime-injection-plugin.js","sourceRoot":"","sources":["../../src/vite-plugins/runtime-injection-plugin.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAiBH,wDAoFC;AAjGD,MAAM,cAAc,GAAG,oCAAoC,CAAC;AAC5D,MAAM,YAAY,GAAG,cAAc,CAAC;AACpC,MAAM,cAAc,GAAG,WAAW,cAAc,MAAM,CAAC;AAWvD,SAAgB,sBAAsB,CACpC,UAAyC,EAAE;IAE3C,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,cAAc,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IACxD,MAAM,WAAW,GAAG,cAAc,GAAG,YAAY,CAAC;IAClD,IAAI,KAAK,GAAG,IAAI,CAAC;IAEjB,OAAO;QACL,IAAI,EAAE,6BAA6B;QACnC,OAAO,EAAE,KAAK;QAEd,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE;YACxB,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,KAAK,GAAG,OAAO,KAAK,OAAO,CAAC;YAE5B,OAAO;gBACL,YAAY,EAAE;oBACZ,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,IAAI,EAAE,CAAC,EAAE,cAAc,CAAC;iBACnE;aACF,CAAC;QACJ,CAAC;QAED,6BAA6B;QAC7B,eAAe,CAAC,MAAqB;YACnC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAErB,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBAC9C,IAAI,GAAG,CAAC,GAAG,KAAK,WAAW;oBAAE,OAAO,IAAI,EAAE,CAAC;gBAE3C,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;oBACjF,IAAI,MAAM,EAAE,CAAC;wBACX,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;wBACxD,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACvB,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;wBACrB,GAAG,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;oBACvC,CAAC;gBACH,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;oBACrB,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,kCAAkC;QAClC,SAAS,CAAC,IAAI,EAAE,EAAE;YAChB,IAAI,CAAC,OAAO,IAAI,KAAK;gBAAE,OAAO,IAAI,CAAC;YAEnC,uBAAuB;YACvB,iCAAiC;YACjC,8CAA8C;YAC9C,wDAAwD;YACxD,IAAI,CAAC,kDAAkD,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBACjE,OAAO,IAAI,CAAC;YACd,CAAC;YAED,0BAA0B;YAC1B,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,yBAAyB;YACzB,OAAO;gBACL,IAAI,EAAE,cAAc,GAAG,IAAI;gBAC3B,GAAG,EAAE,IAAI;aACV,CAAC;QACJ,CAAC;QAED,4BAA4B;QAC5B,kBAAkB,CAAC,IAAY;YAC7B,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YAEpC,MAAM,IAAI,GAAwB;gBAChC;oBACE,GAAG,EAAE,QAAQ;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE;oBAC3C,QAAQ,EAAE,cAAc;iBACzB;aACF,CAAC;YAEF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,kBAAe,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 检测沙箱代理链路下的 WebSocket 僵尸连接:客户端每 5s 发 ping,
|
|
3
|
+
* 连续 2 次拿不到 pong 即判死,向 parent 发 disconnected 通知。
|
|
4
|
+
*
|
|
5
|
+
* 设计 spec: docs/superpowers/specs/2026-04-27-sandbox-ws-watchdog-design.md
|
|
6
|
+
*/
|
|
7
|
+
import type { Plugin } from 'vite';
|
|
8
|
+
export interface WsWatchdogPluginOptions {
|
|
9
|
+
pingEvent?: string;
|
|
10
|
+
pongEvent?: string;
|
|
11
|
+
/**
|
|
12
|
+
* 客户端 base 路径(如 `/app/app_xxx`)。aiforce 等网关把完整路径透传给 Vite,
|
|
13
|
+
* middleware 匹配和注入的 <script src> 都必须带 base;空串退化为本地裸路径。
|
|
14
|
+
*/
|
|
15
|
+
clientBasePath?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function createWsWatchdogPlugin(options?: WsWatchdogPluginOptions): Plugin;
|
|
18
|
+
export default createWsWatchdogPlugin;
|
|
19
|
+
//# sourceMappingURL=ws-watchdog-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-watchdog-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/ws-watchdog-plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAqB,MAAM,MAAM,CAAC;AAqBtD,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,uBAA4B,GACpC,MAAM,CAwER;AAED,eAAe,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 检测沙箱代理链路下的 WebSocket 僵尸连接:客户端每 5s 发 ping,
|
|
4
|
+
* 连续 2 次拿不到 pong 即判死,向 parent 发 disconnected 通知。
|
|
5
|
+
*
|
|
6
|
+
* 设计 spec: docs/superpowers/specs/2026-04-27-sandbox-ws-watchdog-design.md
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.createWsWatchdogPlugin = createWsWatchdogPlugin;
|
|
13
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
14
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
15
|
+
const CLIENT_RUNTIME_PATH = '/@ws-watchdog.js';
|
|
16
|
+
// 本包是 CommonJS,所以走 __dirname;编译后/源码两种布局各一套候选。
|
|
17
|
+
const CLIENT_RUNTIME_CANDIDATES = [
|
|
18
|
+
node_path_1.default.resolve(__dirname, '../../src/runtime/ws-watchdog-client.mjs'),
|
|
19
|
+
node_path_1.default.resolve(__dirname, '../runtime/ws-watchdog-client.mjs'),
|
|
20
|
+
];
|
|
21
|
+
function getClientRuntimePath() {
|
|
22
|
+
for (const p of CLIENT_RUNTIME_CANDIDATES) {
|
|
23
|
+
if (node_fs_1.default.existsSync(p))
|
|
24
|
+
return p;
|
|
25
|
+
}
|
|
26
|
+
console.error('[fullstack-ws-watchdog] runtime client not found:', CLIENT_RUNTIME_CANDIDATES);
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
function createWsWatchdogPlugin(options = {}) {
|
|
30
|
+
const { pingEvent = 'ws-watchdog:ping', pongEvent = 'ws-watchdog:pong', clientBasePath = '', } = options;
|
|
31
|
+
const watchdogPath = clientBasePath + CLIENT_RUNTIME_PATH;
|
|
32
|
+
return {
|
|
33
|
+
name: 'fullstack-ws-watchdog',
|
|
34
|
+
apply: 'serve',
|
|
35
|
+
configureServer(server) {
|
|
36
|
+
console.info('[fullstack-ws-watchdog] active');
|
|
37
|
+
server.ws.on(pingEvent, (data, client) => {
|
|
38
|
+
if (typeof data?.t !== 'number')
|
|
39
|
+
return;
|
|
40
|
+
client.send(pongEvent, { echo: data.t });
|
|
41
|
+
});
|
|
42
|
+
// 直出 plain .mjs,跳过 server.transformRequest;no-cache 让 npm 版本升降级
|
|
43
|
+
// 时浏览器立刻拉新脚本,避免"旧 client + 新 server"的 stale 窗口。
|
|
44
|
+
server.middlewares.use((req, res, next) => {
|
|
45
|
+
if (req.url !== watchdogPath)
|
|
46
|
+
return next();
|
|
47
|
+
const clientPath = getClientRuntimePath();
|
|
48
|
+
if (!clientPath) {
|
|
49
|
+
res.statusCode = 500;
|
|
50
|
+
res.end('// watchdog client not found');
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
let code = node_fs_1.default.readFileSync(clientPath, 'utf-8');
|
|
55
|
+
const replacements = {
|
|
56
|
+
'process.env.FORCE_FRAMEWORK_DOMAIN_MAIN': JSON.stringify(process.env.FORCE_FRAMEWORK_DOMAIN_MAIN ?? ''),
|
|
57
|
+
'process.env.CLIENT_BASE_PATH': JSON.stringify(clientBasePath),
|
|
58
|
+
};
|
|
59
|
+
for (const [key, value] of Object.entries(replacements)) {
|
|
60
|
+
code = code.replace(new RegExp(key.replace(/\./g, '\\.'), 'g'), value);
|
|
61
|
+
}
|
|
62
|
+
res.setHeader('Content-Type', 'application/javascript');
|
|
63
|
+
res.setHeader('Cache-Control', 'no-cache');
|
|
64
|
+
res.end(code);
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
console.error('[fullstack-ws-watchdog] failed to serve client:', e);
|
|
68
|
+
res.statusCode = 500;
|
|
69
|
+
res.end(`// Error: ${e}`);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
},
|
|
73
|
+
transformIndexHtml() {
|
|
74
|
+
const tags = [
|
|
75
|
+
{
|
|
76
|
+
tag: 'script',
|
|
77
|
+
attrs: { type: 'module', src: watchdogPath },
|
|
78
|
+
injectTo: 'head-prepend',
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
return tags;
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
exports.default = createWsWatchdogPlugin;
|
|
86
|
+
//# sourceMappingURL=ws-watchdog-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-watchdog-plugin.js","sourceRoot":"","sources":["../../src/vite-plugins/ws-watchdog-plugin.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lark-apaas/coding-vite-preset",
|
|
3
|
-
"version": "1.0.7-alpha.
|
|
3
|
+
"version": "1.0.7-alpha.10",
|
|
4
4
|
"description": "Vite 8 preset for OpenClaw projects",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
"src/module-alias/echarts.mjs",
|
|
13
13
|
"src/module-alias/echarts-for-react.mjs",
|
|
14
14
|
"src/module-alias/registry_echarts_theme.mjs",
|
|
15
|
-
"src/overlay"
|
|
15
|
+
"src/overlay",
|
|
16
|
+
"src/runtime/ws-watchdog-client.mjs"
|
|
16
17
|
],
|
|
17
18
|
"license": "MIT",
|
|
18
19
|
"keywords": [
|
|
@@ -31,7 +32,7 @@
|
|
|
31
32
|
"prepublishOnly": "npm run build"
|
|
32
33
|
},
|
|
33
34
|
"dependencies": {
|
|
34
|
-
"@lark-apaas/devtool-kits": "
|
|
35
|
+
"@lark-apaas/devtool-kits": "1.2.24-alpha.3",
|
|
35
36
|
"@lark-apaas/vite-inspector-plugin": "^1.0.3",
|
|
36
37
|
"@tailwindcss/vite": "^4.0.0",
|
|
37
38
|
"@vitejs/plugin-react": "^6.0.0",
|
|
@@ -48,7 +49,6 @@
|
|
|
48
49
|
"tailwind-merge": "^2.5.5"
|
|
49
50
|
},
|
|
50
51
|
"devDependencies": {
|
|
51
|
-
"@lark-apaas/vite-inspector-plugin": "^1.0.3",
|
|
52
52
|
"@types/node": "^22.15.30",
|
|
53
53
|
"typescript": "^5.9.2",
|
|
54
54
|
"vite": "^8.0.0",
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/* eslint-env browser */
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* WebSocket Watchdog Client。在 Vite 沙箱 iframe 内自启动;
|
|
5
|
+
* 通过 createHotContext 走 HMR 通道发 ping/收 pong;判死后 postMessage 给 parent。
|
|
6
|
+
*
|
|
7
|
+
* 设计 spec: docs/superpowers/specs/2026-04-27-sandbox-ws-watchdog-design.md
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @typedef {Object} WatchdogDeps
|
|
12
|
+
* @property {(event: string, data: unknown) => void} sendCustom
|
|
13
|
+
* @property {(event: string, cb: (data: unknown) => void) => void} onCustom
|
|
14
|
+
* @property {(status: 'connected' | 'disconnected') => void} postStatus
|
|
15
|
+
* @property {(handler: () => void, ms: number) => number} setInterval
|
|
16
|
+
* @property {(handle: number) => void} clearInterval
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @typedef {Object} WatchdogOptions
|
|
21
|
+
* @property {number} [intervalMs] 默认 5000
|
|
22
|
+
* @property {number} [missThreshold] 默认 2
|
|
23
|
+
* @property {number} [echoFreshnessMs] 默认 15000
|
|
24
|
+
* @property {string} [pingEvent] 默认 'ws-watchdog:ping'
|
|
25
|
+
* @property {string} [pongEvent] 默认 'ws-watchdog:pong'
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* 不返回 dispose——watchdog 跟 iframe 同生命周期,无独立销毁路径。
|
|
30
|
+
* @param {WatchdogDeps} deps
|
|
31
|
+
* @param {WatchdogOptions} [options]
|
|
32
|
+
*/
|
|
33
|
+
export function createWatchdog(deps, options = {}) {
|
|
34
|
+
const intervalMs = options.intervalMs ?? 5000;
|
|
35
|
+
const missThreshold = options.missThreshold ?? 2;
|
|
36
|
+
const echoFreshnessMs = options.echoFreshnessMs ?? 15000;
|
|
37
|
+
const pingEvent = options.pingEvent ?? 'ws-watchdog:ping';
|
|
38
|
+
const pongEvent = options.pongEvent ?? 'ws-watchdog:pong';
|
|
39
|
+
|
|
40
|
+
let missed = 0;
|
|
41
|
+
/** @type {'connected' | 'disconnected'} */
|
|
42
|
+
let reportedStatus = 'connected';
|
|
43
|
+
let pingSeq = 0;
|
|
44
|
+
/** @type {Map<number, number>} seq → wall-clock 时间戳 */
|
|
45
|
+
const recentPings = new Map();
|
|
46
|
+
|
|
47
|
+
function onTick() {
|
|
48
|
+
// missed++ 必须先于 sendCustom:发送侧抛错时 missed 已累加,下一 tick 仍能判死。
|
|
49
|
+
missed += 1;
|
|
50
|
+
const seq = ++pingSeq;
|
|
51
|
+
const now = Date.now();
|
|
52
|
+
recentPings.set(seq, now);
|
|
53
|
+
for (const [s, ts] of recentPings) {
|
|
54
|
+
if (now - ts > echoFreshnessMs) recentPings.delete(s);
|
|
55
|
+
}
|
|
56
|
+
deps.sendCustom(pingEvent, { t: seq });
|
|
57
|
+
if (missed >= missThreshold && reportedStatus !== 'disconnected') {
|
|
58
|
+
deps.postStatus('disconnected');
|
|
59
|
+
reportedStatus = 'disconnected';
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
deps.onCustom(pongEvent, (raw) => {
|
|
64
|
+
const data = /** @type {{ echo?: number } | undefined} */ (raw);
|
|
65
|
+
if (typeof data?.echo !== 'number' || !recentPings.has(data.echo)) return;
|
|
66
|
+
recentPings.delete(data.echo);
|
|
67
|
+
missed = 0;
|
|
68
|
+
if (reportedStatus !== 'connected') {
|
|
69
|
+
deps.postStatus('connected');
|
|
70
|
+
reportedStatus = 'connected';
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
deps.setInterval(onTick, intervalMs);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// postMessage 的 targetOrigin 必须显式指定,禁止用 '*'。
|
|
78
|
+
|
|
79
|
+
const PARENT_ORIGIN_KEY = '__parentOrigin';
|
|
80
|
+
|
|
81
|
+
function getParentOriginFromParams() {
|
|
82
|
+
try {
|
|
83
|
+
const origin = new URLSearchParams(window.location.search).get(PARENT_ORIGIN_KEY);
|
|
84
|
+
if (origin) {
|
|
85
|
+
try { sessionStorage.setItem(PARENT_ORIGIN_KEY, origin); } catch { /* 忽略 */ }
|
|
86
|
+
return origin;
|
|
87
|
+
}
|
|
88
|
+
} catch { /* 忽略 URL 解析失败 */ }
|
|
89
|
+
try { return sessionStorage.getItem(PARENT_ORIGIN_KEY) || undefined; }
|
|
90
|
+
catch { return undefined; }
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function getLegacyParentOrigin() {
|
|
94
|
+
const { origin } = window.location;
|
|
95
|
+
if (origin.includes('force.feishuapp.net')) return 'https://force.feishu.cn';
|
|
96
|
+
if (origin.includes('force-pre.feishuapp.net')) return 'https://force.feishu-pre.cn';
|
|
97
|
+
if (origin.includes('force.byted.org')) return 'https://force.feishu-boe.cn';
|
|
98
|
+
if (origin.includes('feishuapp.cn') || origin.includes('miaoda.feishuapp.net')) return 'https://miaoda.feishu.cn';
|
|
99
|
+
if (origin.includes('fsapp.kundou.cn') || origin.includes('miaoda-pre.feishuapp.net')) return 'https://miaoda.feishu-pre.cn';
|
|
100
|
+
return 'https://miaoda.feishu-boe.cn';
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function resolveParentOrigin() {
|
|
104
|
+
const paramOrigin = getParentOriginFromParams();
|
|
105
|
+
if (paramOrigin) return paramOrigin;
|
|
106
|
+
// plugin middleware 在送出脚本时把这个 token 编译期替换成字符串字面量。
|
|
107
|
+
return process.env.FORCE_FRAMEWORK_DOMAIN_MAIN || getLegacyParentOrigin();
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function postStatus(status) {
|
|
111
|
+
try {
|
|
112
|
+
const origin = resolveParentOrigin();
|
|
113
|
+
if (!origin) return;
|
|
114
|
+
window.parent.postMessage(
|
|
115
|
+
{ type: 'DevServerMessage', data: { type: 'devServer-status', status } },
|
|
116
|
+
origin,
|
|
117
|
+
);
|
|
118
|
+
} catch (e) {
|
|
119
|
+
console.error('[fullstack-ws-watchdog] postMessage error:', e);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// 仅在 iframe 内自启动;jsdom(vitest)下 window.parent === window 自然跳过。
|
|
124
|
+
// 直出的 raw module 拿不到 import.meta.hot,所以借 createHotContext 走 HMR 通道。
|
|
125
|
+
// CLIENT_BASE_PATH 由 plugin 编译期替换;缺前缀会被网关 404。
|
|
126
|
+
const CLIENT_BASE_PATH = process.env.CLIENT_BASE_PATH || '';
|
|
127
|
+
|
|
128
|
+
if (typeof window !== 'undefined' && window.parent !== window) {
|
|
129
|
+
(async () => {
|
|
130
|
+
try {
|
|
131
|
+
const { createHotContext } = await import(CLIENT_BASE_PATH + '/@vite/client');
|
|
132
|
+
const hot = createHotContext(CLIENT_BASE_PATH + '/@ws-watchdog.js');
|
|
133
|
+
createWatchdog({
|
|
134
|
+
sendCustom: (event, data) => {
|
|
135
|
+
// 断连时 hot.send 可能抛;吞掉即可——missed 已在 onTick 顶部累加。
|
|
136
|
+
try { hot.send(event, data); }
|
|
137
|
+
catch (e) { console.warn('[fullstack-ws-watchdog] send failed:', e); }
|
|
138
|
+
},
|
|
139
|
+
onCustom: (event, cb) => hot.on(event, cb),
|
|
140
|
+
postStatus,
|
|
141
|
+
setInterval: (handler, ms) => window.setInterval(handler, ms),
|
|
142
|
+
clearInterval: (handle) => window.clearInterval(handle),
|
|
143
|
+
});
|
|
144
|
+
} catch (e) {
|
|
145
|
+
console.warn('[fullstack-ws-watchdog] bootstrap failed:', e);
|
|
146
|
+
}
|
|
147
|
+
})();
|
|
148
|
+
}
|