@lark-apaas/coding-vite-preset 1.0.17 → 1.0.18-alpha.20260819082511
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.
|
@@ -13,9 +13,8 @@
|
|
|
13
13
|
* 但 reload 走的是旧的死 HTTP/2 连接,不是新 TCP。
|
|
14
14
|
*
|
|
15
15
|
* 解决方案:
|
|
16
|
-
* 通过 Vite transform hook 拦截 @vite/client
|
|
17
|
-
*
|
|
18
|
-
* 不再触发;失败只打 warn,由用户决定是否刷新。
|
|
16
|
+
* 通过 Vite transform hook 拦截 @vite/client,直接移除 WS 重连后的 location.reload()。
|
|
17
|
+
* 用户若需要获取最新代码,手动刷新即可(符合云端 IDE 使用预期)。
|
|
19
18
|
*
|
|
20
19
|
* 适用范围:仅 dev server (apply: 'serve')
|
|
21
20
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-client-patch-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/vite-client-patch-plugin.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"vite-client-patch-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/vite-client-patch-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAkBnC,wBAAgB,qBAAqB,IAAI,MAAM,CAmE9C"}
|
|
@@ -14,32 +14,19 @@
|
|
|
14
14
|
* 但 reload 走的是旧的死 HTTP/2 连接,不是新 TCP。
|
|
15
15
|
*
|
|
16
16
|
* 解决方案:
|
|
17
|
-
* 通过 Vite transform hook 拦截 @vite/client
|
|
18
|
-
*
|
|
19
|
-
* 不再触发;失败只打 warn,由用户决定是否刷新。
|
|
17
|
+
* 通过 Vite transform hook 拦截 @vite/client,直接移除 WS 重连后的 location.reload()。
|
|
18
|
+
* 用户若需要获取最新代码,手动刷新即可(符合云端 IDE 使用预期)。
|
|
20
19
|
*
|
|
21
20
|
* 适用范围:仅 dev server (apply: 'serve')
|
|
22
21
|
*/
|
|
23
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
23
|
exports.viteClientPatchPlugin = viteClientPatchPlugin;
|
|
25
24
|
/**
|
|
26
|
-
* 匹配 vite:ws:disconnect
|
|
27
|
-
* url.search = "";
|
|
25
|
+
* 匹配 vite:ws:disconnect 处理器中的重连刷新代码:
|
|
28
26
|
* await waitForSuccessfulPing(url.href);
|
|
29
27
|
* location.reload();
|
|
30
|
-
* 其中 url.search = "" 会把 sandbox_token 一并抹掉,导致探活恒被沙箱网关 401
|
|
31
|
-
* (ws_proxy_service.go 的 token == "" 判断),故一并重写。
|
|
32
28
|
*/
|
|
33
|
-
const
|
|
34
|
-
/**
|
|
35
|
-
* 匹配 transport 里的 HMR 心跳定时器:
|
|
36
|
-
* pingIntervalId = setInterval(() => { ... }, pingInterval);
|
|
37
|
-
* Vite 被动断开只走 close → onDisconnection(),不清定时器;且 pingIntervalId 被下次
|
|
38
|
-
* connect 覆盖后再也清不掉,重连后每断一次泄漏一个。改成 IIFE 内的局部 id 自清(不能清
|
|
39
|
-
* 共享变量,会误杀新连接的心跳;用 IIFE 而非 const 声明,避免注入点落在无大括号的语句
|
|
40
|
-
* 位置时产生语法错误)。已实测 Vite 7.3.x / 8.0.x 文本一致。
|
|
41
|
-
*/
|
|
42
|
-
const PING_INTERVAL_LEAK_PATTERN = /pingIntervalId = setInterval\(\(\) => \{\s*if \(socket\.readyState === socket\.OPEN\) socket\.send\(JSON\.stringify\(\{ type: "ping" \}\)\);\s*\}, pingInterval\);/;
|
|
29
|
+
const RECONNECT_RELOAD_PATTERN = /(await waitForSuccessfulPing\(url\.href\);)\r?\n(\s*)location\.reload\(\);/;
|
|
43
30
|
/**
|
|
44
31
|
* 匹配 @vite/client 顶层那处悬空的 HMR 建链调用(无 .catch):
|
|
45
32
|
* transport.connect(createHMRHandler(handleMessage));
|
|
@@ -56,19 +43,12 @@ function viteClientPatchPlugin() {
|
|
|
56
43
|
return;
|
|
57
44
|
}
|
|
58
45
|
let patched = code;
|
|
59
|
-
// patch 1:
|
|
60
|
-
if (
|
|
61
|
-
patched = patched.replace(
|
|
62
|
-
indent +
|
|
63
|
-
'url.search = __st ? "?sandbox_token=" + encodeURIComponent(__st) : "";\n' +
|
|
64
|
-
indent +
|
|
65
|
-
'await waitForSuccessfulPing(url.href);\n' +
|
|
66
|
-
indent +
|
|
67
|
-
'transport.connect(createHMRHandler(handleMessage)).catch((e) => { ' +
|
|
68
|
-
"console.warn('[fullstack-vite-client-patch] HMR reconnect failed (ignored):', e); });");
|
|
46
|
+
// patch 1: 移除 WS 重连后的 location.reload()(云端死连接导致 ~18s 白屏)
|
|
47
|
+
if (RECONNECT_RELOAD_PATTERN.test(patched)) {
|
|
48
|
+
patched = patched.replace(RECONNECT_RELOAD_PATTERN, (_, pingLine) => pingLine);
|
|
69
49
|
}
|
|
70
50
|
else {
|
|
71
|
-
console.warn('[fullstack-vite-client-patch] Warning: Could not find the
|
|
51
|
+
console.warn('[fullstack-vite-client-patch] Warning: Could not find the reconnect-reload pattern ' +
|
|
72
52
|
'in @vite/client. The patch has NOT been applied. ' +
|
|
73
53
|
'Check if this Vite version changed the vite:ws:disconnect handler.');
|
|
74
54
|
}
|
|
@@ -99,17 +79,6 @@ function viteClientPatchPlugin() {
|
|
|
99
79
|
'createHMRHandler(handleMessage))` call in @vite/client. The closed-error guard ' +
|
|
100
80
|
'has NOT been applied. Check if this Vite version changed the HMR client bootstrap.');
|
|
101
81
|
}
|
|
102
|
-
// patch 4: 心跳定时器自清,修 patch 1 自动重连放大的 Vite 定时器泄漏
|
|
103
|
-
if (PING_INTERVAL_LEAK_PATTERN.test(patched)) {
|
|
104
|
-
patched = patched.replace(PING_INTERVAL_LEAK_PATTERN, 'pingIntervalId = (() => { const id = setInterval(() => { ' +
|
|
105
|
-
'if (socket.readyState === socket.OPEN) socket.send(JSON.stringify({ type: "ping" })); ' +
|
|
106
|
-
'else clearInterval(id); }, pingInterval); return id; })();');
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
console.warn('[fullstack-vite-client-patch] Warning: Could not find the ping-interval pattern ' +
|
|
110
|
-
'in @vite/client; stale heartbeat timers will leak on reconnect. ' +
|
|
111
|
-
'Check if this Vite version changed createWebSocketModuleRunnerTransport.');
|
|
112
|
-
}
|
|
113
82
|
return patched === code ? undefined : { code: patched };
|
|
114
83
|
},
|
|
115
84
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-client-patch-plugin.js","sourceRoot":"","sources":["../../src/vite-plugins/vite-client-patch-plugin.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"vite-client-patch-plugin.js","sourceRoot":"","sources":["../../src/vite-plugins/vite-client-patch-plugin.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;AAoBH,sDAmEC;AAnFD;;;;GAIG;AACH,MAAM,wBAAwB,GAC5B,4EAA4E,CAAC;AAE/E;;;;GAIG;AACH,MAAM,eAAe,GACnB,8EAA8E,CAAC;AAEjF,SAAgB,qBAAqB;IACnC,OAAO;QACL,IAAI,EAAE,6BAA6B;QACnC,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,OAAO;QAEd,SAAS,CAAC,IAAI,EAAE,EAAE;YAChB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;gBAChD,OAAO;YACT,CAAC;YAED,IAAI,OAAO,GAAG,IAAI,CAAC;YAEnB,yDAAyD;YACzD,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3C,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,wBAAwB,EACxB,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAC1B,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CACV,qFAAqF;oBACnF,mDAAmD;oBACnD,oEAAoE,CACvE,CAAC;YACJ,CAAC;YAED,4DAA4D;YAC5D,qEAAqE;YACrE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;YACpD,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;oBAC1C,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;oBAChD,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,wBAAwB,EACxB,GAAG,EAAE,CAAC,oCAAoC,OAAO,EAAE,CACpD,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CACV,uFAAuF;wBACrF,mFAAmF,CACtF,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,2CAA2C;YAC3C,8DAA8D;YAC9D,kFAAkF;YAClF,uDAAuD;YACvD,uDAAuD;YACvD,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,eAAe,EACf,oEAAoE;oBAClE,qFAAqF,CACxF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CACV,+EAA+E;oBAC7E,iFAAiF;oBACjF,oFAAoF,CACvF,CAAC;YACJ,CAAC;YAED,OAAO,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC1D,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lark-apaas/coding-vite-preset",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.18-alpha.20260819082511",
|
|
4
4
|
"description": "Vite 8 preset for OpenClaw projects",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"prepublishOnly": "npm run build"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@lark-apaas/devtool-kits": "
|
|
34
|
+
"@lark-apaas/devtool-kits": "1.2.25-alpha.20260819082505",
|
|
35
35
|
"@tailwindcss/vite": "^4.0.0",
|
|
36
36
|
"@vitejs/plugin-react": "^6.0.0",
|
|
37
37
|
"clsx": "^2.1.1",
|