@lark-apaas/coding-vite-preset 1.0.7-alpha.15 → 1.0.7-alpha.17
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 +168 -67
- package/lib/preset.js.map +1 -1
- package/lib/vite-plugins/capabilities-bundle-plugin.d.ts.map +1 -1
- package/lib/vite-plugins/capabilities-bundle-plugin.js +8 -3
- package/lib/vite-plugins/capabilities-bundle-plugin.js.map +1 -1
- package/lib/vite-plugins/health-middleware-plugin.d.ts +43 -0
- package/lib/vite-plugins/health-middleware-plugin.d.ts.map +1 -0
- package/lib/vite-plugins/health-middleware-plugin.js +66 -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/view-context-plugin.d.ts +25 -1
- package/lib/vite-plugins/view-context-plugin.d.ts.map +1 -1
- package/lib/vite-plugins/view-context-plugin.js +35 -16
- package/lib/vite-plugins/view-context-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 +5 -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;AAuD9D,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,CAyhBZ"}
|
package/lib/preset.js
CHANGED
|
@@ -46,6 +46,7 @@ const vite_1 = __importDefault(require("@tailwindcss/vite"));
|
|
|
46
46
|
// to avoid requiring their transitive dependencies (e.g. express) at config load time.
|
|
47
47
|
// They are only needed in dev mode.
|
|
48
48
|
const vite_client_patch_plugin_1 = require("./vite-plugins/vite-client-patch-plugin");
|
|
49
|
+
const capabilities_bundle_plugin_1 = require("./vite-plugins/capabilities-bundle-plugin");
|
|
49
50
|
// routeParserPlugin is loaded dynamically since it depends on @lark-apaas/devtool-kits
|
|
50
51
|
const slardar_plugin_1 = require("./vite-plugins/slardar-plugin");
|
|
51
52
|
const view_context_plugin_1 = require("./vite-plugins/view-context-plugin");
|
|
@@ -55,9 +56,24 @@ const html_output_plugin_1 = require("./vite-plugins/html-output-plugin");
|
|
|
55
56
|
const error_overlay_plugin_1 = require("./vite-plugins/error-overlay-plugin");
|
|
56
57
|
const static_assets_plugin_1 = require("./vite-plugins/static-assets-plugin");
|
|
57
58
|
const polyfill_plugin_1 = require("./vite-plugins/polyfill-plugin");
|
|
58
|
-
const capabilities_bundle_plugin_1 = require("./vite-plugins/capabilities-bundle-plugin");
|
|
59
59
|
const snapdom_proxy_1 = require("./utils/snapdom-proxy");
|
|
60
60
|
const hmr_timing_1 = require("./utils/hmr-timing");
|
|
61
|
+
const ws_watchdog_plugin_1 = require("./vite-plugins/ws-watchdog-plugin");
|
|
62
|
+
const miaoda_fonts_mirror_plugin_1 = require("./vite-plugins/miaoda-fonts-mirror-plugin");
|
|
63
|
+
const health_middleware_plugin_1 = require("./vite-plugins/health-middleware-plugin");
|
|
64
|
+
/**
|
|
65
|
+
* 兼容两种模板 layout 的路径解析:
|
|
66
|
+
* - 老全栈模板:`client/X` 存在(前后端共存时代)
|
|
67
|
+
* - 新 jsPage 模板:`X` 在项目根(无 client/ 包装)
|
|
68
|
+
*
|
|
69
|
+
* 优先用 `client/<rel>`(如果存在),否则降级到 `<rel>`。
|
|
70
|
+
*/
|
|
71
|
+
function resolveClientPath(rootDir, rel) {
|
|
72
|
+
const legacy = path_1.default.resolve(rootDir, 'client', rel);
|
|
73
|
+
if (fs_1.default.existsSync(legacy))
|
|
74
|
+
return legacy;
|
|
75
|
+
return path_1.default.resolve(rootDir, rel);
|
|
76
|
+
}
|
|
61
77
|
function sendBackendUnavailable502(_err, _req, res) {
|
|
62
78
|
if (res.headersSent)
|
|
63
79
|
return;
|
|
@@ -82,7 +98,14 @@ function createRecommendViteConfig(options) {
|
|
|
82
98
|
const { isDev = true, needRoutes = true, clientBasePath = '', publicPath = '', codeSplitting = true, } = options;
|
|
83
99
|
const rootDir = process.cwd();
|
|
84
100
|
const serverPort = process.env.SERVER_PORT || '3000';
|
|
101
|
+
// 从 package.json mclaw.features 推导应用类型;jsPage(client) 没有 server,
|
|
102
|
+
// 不应注入 /api、/__innerapi__、HTML→server 之类的 proxy(否则会被转到老沙箱
|
|
103
|
+
// 的 mock-health 上拿到 "ok" 占位响应)
|
|
104
|
+
const appType = (0, health_middleware_plugin_1.detectAppType)(rootDir);
|
|
105
|
+
const hasServer = appType !== 'client';
|
|
85
106
|
const appFlags = readAppFlags(rootDir);
|
|
107
|
+
// Inspector can be disabled via environment variable
|
|
108
|
+
const enableInspector = isDev && process.env.DISABLE_INSPECTOR !== 'true';
|
|
86
109
|
// 从 clientBasePath(如 /app/app123)中提取 appId,用于构造旧路径代理规则
|
|
87
110
|
// 仅在新路径格式(/app/:appId)下启用旧路径兼容
|
|
88
111
|
const isNewPathFormat = /^\/app\/[^/]/.test(clientBasePath);
|
|
@@ -114,8 +137,7 @@ function createRecommendViteConfig(options) {
|
|
|
114
137
|
isDev && (0, vite_client_patch_plugin_1.viteClientPatchPlugin)(),
|
|
115
138
|
// capabilities-bundle: 扫业务工程 capability JSON 注入为 'virtual:capabilities' 虚拟模块,
|
|
116
139
|
// 给 client-capability 的 central 预览态 body 提供完整 capability config。
|
|
117
|
-
//
|
|
118
|
-
// 否则用新路径 shared/capabilities/,便于策略层 / agent_tool 渐进迁移
|
|
140
|
+
// 目录优先级:老路径 server/capabilities/ 存在则用,否则用新路径 shared/capabilities/。
|
|
119
141
|
(0, capabilities_bundle_plugin_1.capabilitiesBundlePlugin)(),
|
|
120
142
|
// Error overlay plugin - replaces Vite's native error overlay with custom one
|
|
121
143
|
// Must be first to intercept config and disable native overlay
|
|
@@ -127,6 +149,21 @@ function createRecommendViteConfig(options) {
|
|
|
127
149
|
// resolves first, the module ID ends with .json and vite:json's transform
|
|
128
150
|
// will corrupt the virtual module content.
|
|
129
151
|
(0, static_assets_plugin_1.staticAssetsPlugin)({ clientBasePath, rootDir }),
|
|
152
|
+
// Inspector plugin (dev only) — injects data-* attributes onto JSX elements
|
|
153
|
+
// for the runtime MiaodaInspector panel to consume.
|
|
154
|
+
// MUST be BEFORE react() — both use enforce:'pre' and Vite runs them in array order.
|
|
155
|
+
// If react() runs first, its transform converts JSX to _jsxDEV() calls,
|
|
156
|
+
// leaving no JSX elements for the inspector to annotate.
|
|
157
|
+
// Dynamically loaded so cli imports of this preset don't pull dev deps.
|
|
158
|
+
...(enableInspector ? (() => {
|
|
159
|
+
try {
|
|
160
|
+
const { inspectorPlugin } = require('@lark-apaas/vite-inspector-plugin');
|
|
161
|
+
return [inspectorPlugin()];
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
return [];
|
|
165
|
+
}
|
|
166
|
+
})() : []),
|
|
130
167
|
// React plugin (Vite 8 + @vitejs/plugin-react v6, Oxc-based)
|
|
131
168
|
(0, plugin_react_1.default)(),
|
|
132
169
|
// Tailwind CSS 4 via Vite plugin (faster than PostCSS integration)
|
|
@@ -139,7 +176,9 @@ function createRecommendViteConfig(options) {
|
|
|
139
176
|
try {
|
|
140
177
|
const { routeParserPlugin } = require('./vite-plugins/route-parser-plugin');
|
|
141
178
|
return [routeParserPlugin({
|
|
142
|
-
appPath: '
|
|
179
|
+
appPath: fs_1.default.existsSync(path_1.default.resolve(rootDir, 'client/src/app.tsx'))
|
|
180
|
+
? './client/src/app.tsx'
|
|
181
|
+
: './src/app.tsx',
|
|
143
182
|
outputPath: path_1.default.resolve(rootDir, 'dist/client/routes.json'),
|
|
144
183
|
serveBasePath: clientBasePath,
|
|
145
184
|
...(isDev ? { basePath: '' } : {}),
|
|
@@ -166,7 +205,9 @@ function createRecommendViteConfig(options) {
|
|
|
166
205
|
// Performance monitoring plugin (Slardar + Tea)
|
|
167
206
|
(0, slardar_plugin_1.slardarPlugin)({ bid: 'apaas_miaoda' }),
|
|
168
207
|
// View context injection plugin
|
|
169
|
-
|
|
208
|
+
// dev 模式下用 clientBasePath 提取的 appId 直接拼真值,跳过 NestJS hbs 渲染。
|
|
209
|
+
// prod 模式 appId 字段为空,保留 `{{appId}}` 占位符给 vefaas runtime container 替换。
|
|
210
|
+
(0, view_context_plugin_1.viewContextPlugin)({ appId: isDev ? appId : undefined }),
|
|
170
211
|
// 生产环境:为旧浏览器提供 polyfill(按需加载,现代浏览器零开销)
|
|
171
212
|
!isDev && (0, polyfill_plugin_1.polyfillPlugin)(),
|
|
172
213
|
// HTML output plugin - handles HTML path and dev mode disk write
|
|
@@ -176,6 +217,17 @@ function createRecommendViteConfig(options) {
|
|
|
176
217
|
}),
|
|
177
218
|
// HMR timing plugin (dev only)
|
|
178
219
|
isDev && (0, hmr_timing_1.createHmrTimingPlugin)(),
|
|
220
|
+
// WS Watchdog plugin (dev only) — 检测沙箱代理链路下的 WebSocket 僵尸连接,
|
|
221
|
+
// 客户端 5s ping 一次,连续 2 次拿不到 pong 即向 parent 发 disconnected。
|
|
222
|
+
// 沙箱 iframe 自启动;普通本地开发也启用、不会有副作用。
|
|
223
|
+
isDev && (0, ws_watchdog_plugin_1.createWsWatchdogPlugin)({ clientBasePath }),
|
|
224
|
+
// Google Fonts → 妙搭字体代理(编译时字符串替换)
|
|
225
|
+
// 屏蔽 Google Fonts 在内网/部分客户端不可达导致的白屏。
|
|
226
|
+
// 关闭:env MIAODA_FONTS_MIRROR_OFF=1
|
|
227
|
+
(0, miaoda_fonts_mirror_plugin_1.miaodaFontsMirrorPlugin)(),
|
|
228
|
+
// 妙搭沙箱外壳的 health endpoint(仅 dev)
|
|
229
|
+
// 规范:飞书文档 - 妙搭应用 Health Check 接口规范
|
|
230
|
+
isDev && (0, health_middleware_plugin_1.healthMiddlewarePlugin)({ rootDir }),
|
|
179
231
|
];
|
|
180
232
|
const config = {
|
|
181
233
|
root: rootDir,
|
|
@@ -193,6 +245,15 @@ function createRecommendViteConfig(options) {
|
|
|
193
245
|
// 都解析到 preset 自带的 echarts,避免第三方扩展(如 echarts-wordcloud)
|
|
194
246
|
// 安装了独立的 echarts 副本导致注册不到同一个实例上
|
|
195
247
|
echarts: path_1.default.dirname(require.resolve('echarts/package.json')),
|
|
248
|
+
// Inspector dev-only CSS: 拦截 client-toolkit-lite 里对 inspector dev 样式的引用,
|
|
249
|
+
// dev 模式下样式由 inspector 运行时注入,构建时给个空 stub 避免文件不存在报错。
|
|
250
|
+
'@/inspector.dev.css': path_1.default.resolve(__dirname, '../src/empty.css'),
|
|
251
|
+
// 生产模式:把 inspector 包整体替换成空 stub,避免被 bundle 进生产产物。
|
|
252
|
+
...(!isDev
|
|
253
|
+
? {
|
|
254
|
+
'@lark-apaas/miaoda-inspector': path_1.default.resolve(__dirname, '../src/inspector-stub.js'),
|
|
255
|
+
}
|
|
256
|
+
: {}),
|
|
196
257
|
},
|
|
197
258
|
},
|
|
198
259
|
define: {
|
|
@@ -205,8 +266,13 @@ function createRecommendViteConfig(options) {
|
|
|
205
266
|
'process.env.runtimeMode': JSON.stringify('fullstack'),
|
|
206
267
|
'process.env.CLIENT_BASE_PATH': JSON.stringify(clientBasePath),
|
|
207
268
|
'__APP_BASE_PATH__': JSON.stringify(clientBasePath),
|
|
208
|
-
//
|
|
209
|
-
|
|
269
|
+
// 未设置时替换为字面量 `undefined` 而不是空字符串:
|
|
270
|
+
// - || fallback 不受影响("" 和 undefined 都 falsy)
|
|
271
|
+
// - ?? fallback 也能正确触发("" ?? x → "",undefined ?? x → x)
|
|
272
|
+
// client/inspector/origin.ts、lite/toolkit/postMessage.ts 都用了 ?? 写法
|
|
273
|
+
'process.env.FORCE_FRAMEWORK_DOMAIN_MAIN': process.env.FORCE_FRAMEWORK_DOMAIN_MAIN
|
|
274
|
+
? JSON.stringify(process.env.FORCE_FRAMEWORK_DOMAIN_MAIN)
|
|
275
|
+
: 'undefined',
|
|
210
276
|
'process.env.CWD': JSON.stringify(''),
|
|
211
277
|
// Runtime injection flag for client-toolkit compatibility
|
|
212
278
|
'process.env.__RUNTIME_INJECTED__': JSON.stringify('true'),
|
|
@@ -252,7 +318,9 @@ function createRecommendViteConfig(options) {
|
|
|
252
318
|
: {
|
|
253
319
|
path: `/ws`,
|
|
254
320
|
},
|
|
255
|
-
proxy
|
|
321
|
+
// jsPage(client) 没 server,不需要 API / HTML proxy;
|
|
322
|
+
// 否则 HTML 请求会被 proxy 到 mock-health 拿到 "ok" 占位响应
|
|
323
|
+
proxy: hasServer ? {
|
|
256
324
|
// API proxy
|
|
257
325
|
[`${clientBasePath}/api`]: {
|
|
258
326
|
target: `http://localhost:${serverPort}`,
|
|
@@ -296,7 +364,7 @@ function createRecommendViteConfig(options) {
|
|
|
296
364
|
},
|
|
297
365
|
}
|
|
298
366
|
: {}),
|
|
299
|
-
},
|
|
367
|
+
} : undefined,
|
|
300
368
|
},
|
|
301
369
|
build: {
|
|
302
370
|
outDir: path_1.default.resolve(rootDir, 'dist/client'),
|
|
@@ -306,7 +374,7 @@ function createRecommendViteConfig(options) {
|
|
|
306
374
|
// CSS 降级:使用 Vite 内置的 Lightning CSS 转换现代 CSS 特性
|
|
307
375
|
cssTarget: ['ios12', 'safari12', 'chrome80'],
|
|
308
376
|
rollupOptions: {
|
|
309
|
-
input:
|
|
377
|
+
input: resolveClientPath(rootDir, 'index.html'),
|
|
310
378
|
output: {
|
|
311
379
|
// Code splitting: when disabled, all dynamic imports are inlined into single bundle
|
|
312
380
|
// When enabled (default), Vite will split chunks based on dynamic imports
|
|
@@ -330,7 +398,7 @@ function createRecommendViteConfig(options) {
|
|
|
330
398
|
// Copy public directory
|
|
331
399
|
copyPublicDir: true,
|
|
332
400
|
},
|
|
333
|
-
publicDir:
|
|
401
|
+
publicDir: resolveClientPath(rootDir, 'public'),
|
|
334
402
|
// Don't specify css.postcss here - let Vite pick up the project's postcss.config.js
|
|
335
403
|
// This allows projects to configure their own PostCSS plugins (e.g., Tailwind v4)
|
|
336
404
|
// Optimize deps for faster dev startup
|
|
@@ -343,24 +411,14 @@ function createRecommendViteConfig(options) {
|
|
|
343
411
|
'clsx',
|
|
344
412
|
'echarts',
|
|
345
413
|
'echarts-for-react',
|
|
414
|
+
// 让 Vite 预打包 inspector + 它的依赖(dev only)
|
|
415
|
+
...(enableInspector ? ['@lark-apaas/miaoda-inspector'] : []),
|
|
346
416
|
],
|
|
347
417
|
exclude: [],
|
|
348
|
-
//
|
|
349
|
-
//
|
|
350
|
-
//
|
|
351
|
-
|
|
352
|
-
define: {
|
|
353
|
-
'process.env.NODE_ENV': JSON.stringify(isDev ? 'development' : 'production'),
|
|
354
|
-
// Use actual value if set, otherwise undefined for ?? fallback
|
|
355
|
-
'process.env.FORCE_FRAMEWORK_DOMAIN_MAIN': process.env
|
|
356
|
-
.FORCE_FRAMEWORK_DOMAIN_MAIN
|
|
357
|
-
? JSON.stringify(process.env.FORCE_FRAMEWORK_DOMAIN_MAIN)
|
|
358
|
-
: 'undefined',
|
|
359
|
-
global: 'globalThis',
|
|
360
|
-
// Align with rspack-preset
|
|
361
|
-
'process.env.__RUNTIME_INJECTED__': JSON.stringify('true'),
|
|
362
|
-
},
|
|
363
|
-
},
|
|
418
|
+
// 不在这里写 define —— vite 8 顶层 `define`(见上方 L273)
|
|
419
|
+
// 会自动应用到 optimizeDeps 预打包阶段,重复写在 rolldownOptions 里
|
|
420
|
+
// 反而触发 rolldown input options schema 校验 warning:
|
|
421
|
+
// "For the 'define'. Invalid key: Expected never but received 'define'."
|
|
364
422
|
},
|
|
365
423
|
};
|
|
366
424
|
// Add custom middleware setup for dev server
|
|
@@ -374,6 +432,41 @@ function createRecommendViteConfig(options) {
|
|
|
374
432
|
config.plugins.push({
|
|
375
433
|
name: 'fullstack-dev-middlewares',
|
|
376
434
|
async configureServer(server) {
|
|
435
|
+
// ── base-path normalize ──────────────────────────────────────────
|
|
436
|
+
// Vite 8 的 baseMiddleware:当请求 pathname 不以 base(含末尾 /)开头时
|
|
437
|
+
// 显示 "did you mean to visit ..." 警告页,不再自动 301 redirect。
|
|
438
|
+
// 沙箱预览过来的 URL 通常是 `/app/app_xxx?sso_token=...`(pathname 没末尾 /),
|
|
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。
|
|
445
|
+
//
|
|
446
|
+
// 必须 unshift 到 stack 开头才能早于内置 baseMiddleware 执行。
|
|
447
|
+
const baseWithSlash = clientBasePath.endsWith('/')
|
|
448
|
+
? clientBasePath
|
|
449
|
+
: clientBasePath + '/';
|
|
450
|
+
const baseWithoutSlash = baseWithSlash.slice(0, -1);
|
|
451
|
+
if (baseWithoutSlash && baseWithoutSlash !== '') {
|
|
452
|
+
const stack = server.middlewares.stack;
|
|
453
|
+
if (Array.isArray(stack)) {
|
|
454
|
+
stack.unshift({
|
|
455
|
+
route: '',
|
|
456
|
+
handle: (req, _res, next) => {
|
|
457
|
+
const url = req.url || '';
|
|
458
|
+
const qIdx = url.indexOf('?');
|
|
459
|
+
const pathname = qIdx >= 0 ? url.slice(0, qIdx) : url;
|
|
460
|
+
const search = qIdx >= 0 ? url.slice(qIdx) : '';
|
|
461
|
+
if (pathname === baseWithoutSlash) {
|
|
462
|
+
// internal rewrite — 不发 301,避免与网关 round-trip 死循环
|
|
463
|
+
req.url = baseWithoutSlash + '/' + search;
|
|
464
|
+
}
|
|
465
|
+
next();
|
|
466
|
+
},
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
}
|
|
377
470
|
// Register SnapDom proxy middleware
|
|
378
471
|
(0, snapdom_proxy_1.registerSnapDomProxyMiddleware)(server.middlewares, {
|
|
379
472
|
baseUrl: clientBasePath,
|
|
@@ -386,7 +479,7 @@ function createRecommendViteConfig(options) {
|
|
|
386
479
|
logDir: process.env.LOG_DIR || './logs',
|
|
387
480
|
}),
|
|
388
481
|
createOpenapiMiddleware({
|
|
389
|
-
openapiFilePath:
|
|
482
|
+
openapiFilePath: resolveClientPath(rootDir, 'src/api/gen/openapi.json'),
|
|
390
483
|
serverDir: path_1.default.resolve(rootDir, './server'),
|
|
391
484
|
enableEnhancement: true,
|
|
392
485
|
}),
|
|
@@ -399,47 +492,55 @@ function createRecommendViteConfig(options) {
|
|
|
399
492
|
isDev,
|
|
400
493
|
});
|
|
401
494
|
// Proxy HTML requests to backend server
|
|
402
|
-
server
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
const
|
|
418
|
-
const
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
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);
|
|
431
523
|
});
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
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
|
+
}
|
|
439
536
|
}
|
|
440
|
-
catch {
|
|
441
|
-
// devtool-kits
|
|
442
|
-
|
|
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 问题`);
|
|
443
544
|
}
|
|
444
545
|
// Call original configureServer if exists
|
|
445
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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities-bundle-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/capabilities-bundle-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,MAAM,CAAC;AAuBlD,MAAM,WAAW,+BAA+B;IAC9C;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,wBAAwB,CAAC,IAAI,CAAC,EAAE,+BAA+B,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"capabilities-bundle-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/capabilities-bundle-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,MAAM,CAAC;AAuBlD,MAAM,WAAW,+BAA+B;IAC9C;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,wBAAwB,CAAC,IAAI,CAAC,EAAE,+BAA+B,GAAG,MAAM,CAgHvF"}
|
|
@@ -66,8 +66,9 @@ function capabilitiesBundlePlugin(opts) {
|
|
|
66
66
|
* 会撞 "Could not resolve 'virtual:capabilities'" 报错 → 业务白屏。
|
|
67
67
|
*
|
|
68
68
|
* 受影响的 SDK 包:
|
|
69
|
-
* - @lark-apaas/client-capability
|
|
70
|
-
* - @lark-apaas/client-toolkit
|
|
69
|
+
* - @lark-apaas/client-capability (直接 import 'virtual:capabilities')
|
|
70
|
+
* - @lark-apaas/client-toolkit (re-export 上面那个,全栈模板用)
|
|
71
|
+
* - @lark-apaas/client-toolkit-lite (re-export 上面那个,jsPage 模板用)
|
|
71
72
|
*
|
|
72
73
|
* 同时把虚拟模块的解析也塞进 depOptimizer 的 esbuild plugin,作为兜底
|
|
73
74
|
* (比如未来某个传递依赖也开始 import virtual:capabilities 时不再炸)。
|
|
@@ -75,7 +76,11 @@ function capabilitiesBundlePlugin(opts) {
|
|
|
75
76
|
config() {
|
|
76
77
|
return {
|
|
77
78
|
optimizeDeps: {
|
|
78
|
-
exclude: [
|
|
79
|
+
exclude: [
|
|
80
|
+
'@lark-apaas/client-capability',
|
|
81
|
+
'@lark-apaas/client-toolkit',
|
|
82
|
+
'@lark-apaas/client-toolkit-lite',
|
|
83
|
+
],
|
|
79
84
|
esbuildOptions: {
|
|
80
85
|
plugins: [
|
|
81
86
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities-bundle-plugin.js","sourceRoot":"","sources":["../../src/vite-plugins/capabilities-bundle-plugin.ts"],"names":[],"mappings":";;;;;AAgCA,
|
|
1
|
+
{"version":3,"file":"capabilities-bundle-plugin.js","sourceRoot":"","sources":["../../src/vite-plugins/capabilities-bundle-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Plugin } from 'vite';
|
|
2
|
+
/**
|
|
3
|
+
* Health Check Middleware Plugin
|
|
4
|
+
*
|
|
5
|
+
* 给妙搭外壳提供统一的 health endpoint,让外壳能判断"应用是否就绪"。
|
|
6
|
+
* 接口规范见飞书文档 - 妙搭应用 Health Check 接口规范。
|
|
7
|
+
*
|
|
8
|
+
* Response shape:
|
|
9
|
+
* { ready: true } // dev server 已就绪
|
|
10
|
+
* { ready: false, error: 'starting' } // dev server 还在启动
|
|
11
|
+
*
|
|
12
|
+
* 外壳判断逻辑:
|
|
13
|
+
* - HTTP connection refused / timeout → Case ① dev server 没拉起来 → 重启沙箱
|
|
14
|
+
* - 200 OK + ready: true → 正常进入应用
|
|
15
|
+
* - 200 OK + ready: false → 还在启动,按 error 描述判断,必要时 poll 重试
|
|
16
|
+
*
|
|
17
|
+
* 不归本接口管:
|
|
18
|
+
* - Case ②a vite compile error
|
|
19
|
+
* → 浏览器侧通过 vite-client 的 vite:error overlay + iframe postMessage 上报
|
|
20
|
+
* - Case ②b runtime error(React 渲染 throw 等)
|
|
21
|
+
* → 浏览器侧 ErrorBoundary 接住 → submitPostMessage RenderError / SELECTED_LOG
|
|
22
|
+
* - Case ③ 资源加载失败(网络/CDN 问题)
|
|
23
|
+
* → 浏览器侧 fetch / script onerror 独立上报
|
|
24
|
+
*
|
|
25
|
+
* 设计取舍:放弃 server 侧的 compile error 监听(需要 monkey-patch
|
|
26
|
+
* server.ws.send / server.hot.send 拦截 vite 内部 broadcast,太脏)。
|
|
27
|
+
* 编译错误状态由浏览器侧自己感知 + 上报,更直接。
|
|
28
|
+
*/
|
|
29
|
+
interface HealthMiddlewarePluginOptions {
|
|
30
|
+
/** 项目根目录,用于 detectAppType(preset 侧仍在使用) */
|
|
31
|
+
rootDir: string;
|
|
32
|
+
/** Health endpoint 路径,默认 /dev/health */
|
|
33
|
+
endpoint?: string;
|
|
34
|
+
}
|
|
35
|
+
export type AppType = 'client' | 'fullstack' | 'server';
|
|
36
|
+
/**
|
|
37
|
+
* 从 package.json mclaw.features 推导应用类型(client / fullstack / server)。
|
|
38
|
+
* 仅供 preset 内部判断是否注入 server proxy,不再出现在 health 返回里。
|
|
39
|
+
*/
|
|
40
|
+
export declare function detectAppType(rootDir: string): AppType;
|
|
41
|
+
export declare function healthMiddlewarePlugin(options: HealthMiddlewarePluginOptions): Plugin;
|
|
42
|
+
export default healthMiddlewarePlugin;
|
|
43
|
+
//# 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;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,UAAU,6BAA6B;IACrC,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAExD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAgBtD;AAMD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,6BAA6B,GACrC,MAAM,CAqCR;AAED,eAAe,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
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
|
+
/**
|
|
11
|
+
* 从 package.json mclaw.features 推导应用类型(client / fullstack / server)。
|
|
12
|
+
* 仅供 preset 内部判断是否注入 server proxy,不再出现在 health 返回里。
|
|
13
|
+
*/
|
|
14
|
+
function detectAppType(rootDir) {
|
|
15
|
+
try {
|
|
16
|
+
const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(rootDir, 'package.json'), 'utf-8'));
|
|
17
|
+
const features = Array.isArray(pkg?.mclaw?.features)
|
|
18
|
+
? pkg.mclaw.features
|
|
19
|
+
: ['client'];
|
|
20
|
+
const hasClient = features.includes('client');
|
|
21
|
+
const hasServer = features.includes('server');
|
|
22
|
+
if (hasClient && hasServer)
|
|
23
|
+
return 'fullstack';
|
|
24
|
+
if (hasServer)
|
|
25
|
+
return 'server';
|
|
26
|
+
return 'client';
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return 'client';
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function healthMiddlewarePlugin(options) {
|
|
33
|
+
const endpoint = options.endpoint ?? '/dev/health';
|
|
34
|
+
let viteReady = false;
|
|
35
|
+
return {
|
|
36
|
+
name: 'fullstack-health-middleware',
|
|
37
|
+
apply: 'serve',
|
|
38
|
+
configureServer(server) {
|
|
39
|
+
// 探测 vite ready 信号:
|
|
40
|
+
// - httpServer 不存在 → middleware mode(被宿主 server 接管),认为已就绪
|
|
41
|
+
// - httpServer.listening 已为 true → 已经在 listen
|
|
42
|
+
// - 否则注册一次性 'listening' 回调,等 Node http.Server emit 时翻成 ready
|
|
43
|
+
const httpServer = server.httpServer;
|
|
44
|
+
if (!httpServer || httpServer.listening) {
|
|
45
|
+
viteReady = true;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
httpServer.once('listening', () => {
|
|
49
|
+
viteReady = true;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
server.middlewares.use(endpoint, (req, res, next) => {
|
|
53
|
+
if (req.method && req.method !== 'GET') {
|
|
54
|
+
return next();
|
|
55
|
+
}
|
|
56
|
+
const payload = { ready: viteReady };
|
|
57
|
+
res.setHeader('Content-Type', 'application/json');
|
|
58
|
+
res.setHeader('Cache-Control', 'no-store');
|
|
59
|
+
res.statusCode = 200;
|
|
60
|
+
res.end(JSON.stringify(payload));
|
|
61
|
+
});
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
exports.default = healthMiddlewarePlugin;
|
|
66
|
+
//# 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":";;;;;AA6CA,sCAgBC;AAMD,wDAuCC;AA1GD,4CAAoB;AACpB,gDAAwB;AAwCxB;;;GAGG;AACH,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;AAMD,SAAgB,sBAAsB,CACpC,OAAsC;IAEtC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,aAAa,CAAC;IAEnD,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,OAAO;QACL,IAAI,EAAE,6BAA6B;QACnC,KAAK,EAAE,OAAO;QAEd,eAAe,CAAC,MAAqB;YACnC,oBAAoB;YACpB,4DAA4D;YAC5D,gDAAgD;YAChD,+DAA+D;YAC/D,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YACrC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;gBACxC,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;oBAChC,SAAS,GAAG,IAAI,CAAC;gBACnB,CAAC,CAAC,CAAC;YACL,CAAC;YAED,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBAClD,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;oBACvC,OAAO,IAAI,EAAE,CAAC;gBAChB,CAAC;gBAED,MAAM,OAAO,GAAkB,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;gBAEpD,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":"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"}
|
|
@@ -1,4 +1,28 @@
|
|
|
1
1
|
import type { Plugin } from 'vite';
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* 在 HTML head 注入 inline script,把登录态 / 应用信息挂到 window,让前端代码
|
|
4
|
+
* 同步拿到 appId / csrfToken / environment 等启动期上下文。
|
|
5
|
+
*
|
|
6
|
+
* 老全栈链路靠 NestJS hbs 模板引擎在 server 渲染时把 `{{appId}}` 占位符替换为
|
|
7
|
+
* res.locals 真值。jsPage 没有 server 渲染层(vite dev 直接 serve、vefaas 直接
|
|
8
|
+
* serve 静态 HTML),所以本 plugin 改为 **inline script 浏览器 runtime 自解析**:
|
|
9
|
+
*
|
|
10
|
+
* - appId 从 URL pathname (/app/<appId>/) 或 hostname (ai-tenant-app_xxx) 解析;
|
|
11
|
+
* caller 显式传入时用 caller 的值(preset 已经能从 clientBasePath 提取)
|
|
12
|
+
* - csrfToken 从 cookie `suda-csrf-token` 解析
|
|
13
|
+
* - environment 从 hostname 关键字推:boe → staging,pre → gray,否则 online
|
|
14
|
+
* - userId / tenantId 浏览器拿不到(来自 server 侧 `x-larkgw-suda-webuser` header),
|
|
15
|
+
* 留空字符串。业务侧需要时用 lite/useCurrentUserProfile 等 hook fetch
|
|
16
|
+
* - appName / appAvatar / appDescription 来自 platform API,留空。
|
|
17
|
+
* 业务侧用 lite/useAppInfo hook fetch
|
|
18
|
+
*/
|
|
19
|
+
export interface ViewContextPluginOptions {
|
|
20
|
+
/**
|
|
21
|
+
* 显式传入的 appId override。preset 已从 clientBasePath(/app/<appId>)提取,
|
|
22
|
+
* 设置后 inline script 直接拼真值字面量,跳过 URL 解析。未设置则走 runtime self-resolve。
|
|
23
|
+
*/
|
|
24
|
+
appId?: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function viewContextPlugin(opts?: ViewContextPluginOptions): Plugin;
|
|
3
27
|
export default viewContextPlugin;
|
|
4
28
|
//# sourceMappingURL=view-context-plugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-context-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/view-context-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAqB,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"view-context-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/view-context-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAqB,MAAM,MAAM,CAAC;AAEtD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAwCD,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,wBAAwB,GAAG,MAAM,CAmBzE;AAED,eAAe,iBAAiB,CAAC"}
|
|
@@ -1,31 +1,50 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.viewContextPlugin = viewContextPlugin;
|
|
4
|
-
function getViewContextScript() {
|
|
4
|
+
function getViewContextScript(opts = {}) {
|
|
5
|
+
const appIdExpr = opts.appId
|
|
6
|
+
? JSON.stringify(opts.appId)
|
|
7
|
+
: `(function () {
|
|
8
|
+
var p = location.pathname.match(/\\/app\\/(app_[a-z0-9]+)/i);
|
|
9
|
+
if (p) return p[1];
|
|
10
|
+
var h = location.hostname.match(/app_[a-z0-9]+/i);
|
|
11
|
+
return h ? h[0] : '';
|
|
12
|
+
})()`;
|
|
5
13
|
return `
|
|
6
|
-
|
|
7
|
-
window.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
window.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
// appId: caller override 或 URL 解析
|
|
15
|
+
window.appId = ${appIdExpr};
|
|
16
|
+
|
|
17
|
+
// csrfToken: cookie suda-csrf-token
|
|
18
|
+
window.csrfToken = (function () {
|
|
19
|
+
var m = document.cookie.match(/(?:^|;\\s*)suda-csrf-token=([^;]+)/);
|
|
20
|
+
return m ? decodeURIComponent(m[1]) : '';
|
|
21
|
+
})();
|
|
22
|
+
|
|
23
|
+
// environment: hostname 推
|
|
24
|
+
window.ENVIRONMENT = (function () {
|
|
25
|
+
var h = location.hostname;
|
|
26
|
+
if (h.indexOf('boe') !== -1) return 'staging';
|
|
27
|
+
if (h.indexOf('feishu-pre') !== -1 || h.indexOf('-pre.') !== -1) return 'gray';
|
|
28
|
+
return 'online';
|
|
29
|
+
})();
|
|
30
|
+
|
|
31
|
+
// userId / tenantId: server 侧 x-larkgw-suda-webuser header 才有,浏览器拿不到,
|
|
32
|
+
// 业务侧需要时用 lite/useCurrentUserProfile 等 hook 异步 fetch
|
|
33
|
+
window.userId = '';
|
|
34
|
+
window.tenantId = '';
|
|
35
|
+
|
|
36
|
+
// appInfo (name/avatar/description) 来自 platform API,业务侧用 lite/useAppInfo
|
|
37
|
+
// hook 异步 fetch;这里不预设,避免误用占位字符串
|
|
19
38
|
`;
|
|
20
39
|
}
|
|
21
|
-
function viewContextPlugin() {
|
|
40
|
+
function viewContextPlugin(opts) {
|
|
22
41
|
return {
|
|
23
42
|
name: 'fullstack-view-context',
|
|
24
43
|
transformIndexHtml(html) {
|
|
25
44
|
const tags = [
|
|
26
45
|
{
|
|
27
46
|
tag: 'script',
|
|
28
|
-
children: getViewContextScript(),
|
|
47
|
+
children: getViewContextScript(opts),
|
|
29
48
|
injectTo: 'head-prepend',
|
|
30
49
|
},
|
|
31
50
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-context-plugin.js","sourceRoot":"","sources":["../../src/vite-plugins/view-context-plugin.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"view-context-plugin.js","sourceRoot":"","sources":["../../src/vite-plugins/view-context-plugin.ts"],"names":[],"mappings":";;AAiEA,8CAmBC;AAzDD,SAAS,oBAAoB,CAAC,OAAiC,EAAE;IAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK;QAC1B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5B,CAAC,CAAC;;;;;eAKS,CAAC;IAEd,OAAO;;yBAEgB,SAAS;;;;;;;;;;;;;;;;;;;;;;;KAuB7B,CAAC;AACN,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAA+B;IAC/D,OAAO;QACL,IAAI,EAAE,wBAAwB;QAE9B,kBAAkB,CAAC,IAAI;YACrB,MAAM,IAAI,GAAwB;gBAChC;oBACE,GAAG,EAAE,QAAQ;oBACb,QAAQ,EAAE,oBAAoB,CAAC,IAAI,CAAC;oBACpC,QAAQ,EAAE,cAAc;iBACzB;aACF,CAAC;YAEF,OAAO;gBACL,IAAI;gBACJ,IAAI;aACL,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,kBAAe,iBAAiB,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.17",
|
|
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,8 @@
|
|
|
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.8",
|
|
36
|
+
"@lark-apaas/vite-inspector-plugin": "^1.0.3",
|
|
35
37
|
"@tailwindcss/vite": "^4.0.0",
|
|
36
38
|
"@vitejs/plugin-react": "^6.0.0",
|
|
37
39
|
"clsx": "^2.1.1",
|
|
@@ -47,7 +49,6 @@
|
|
|
47
49
|
"tailwind-merge": "^2.5.5"
|
|
48
50
|
},
|
|
49
51
|
"devDependencies": {
|
|
50
|
-
"@lark-apaas/vite-inspector-plugin": "^1.0.3",
|
|
51
52
|
"@types/node": "^22.15.30",
|
|
52
53
|
"typescript": "^5.9.2",
|
|
53
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
|
+
}
|