@lark-apaas/coding-preset-vite-react 1.0.1-beta.0 → 1.0.2-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"vite-client-patch.d.ts","sourceRoot":"","sources":["../../src/plugins/vite-client-patch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAkBnC,wBAAgB,qBAAqB,IAAI,MAAM,CAyC9C;AAED,eAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"vite-client-patch.d.ts","sourceRoot":"","sources":["../../src/plugins/vite-client-patch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AA0BnC,wBAAgB,qBAAqB,IAAI,MAAM,CA2D9C;AAED,eAAe,qBAAqB,CAAC"}
@@ -15,6 +15,12 @@ exports.viteClientPatchPlugin = viteClientPatchPlugin;
15
15
  * 仅 dev(`apply: 'serve'`)。
16
16
  */
17
17
  const RECONNECT_RELOAD_PATTERN = /(await waitForSuccessfulPing\(url\.href\);)\r?\n(\s*)location\.reload\(\);/;
18
+ /**
19
+ * 匹配 @vite/client 顶层那处悬空的 HMR 建链调用(无 .catch):
20
+ * transport.connect(createHMRHandler(handleMessage));
21
+ * 已实测 Vite 7.3.x / 8.0.x 文本一致;负向先行避免重复 patch(幂等)。
22
+ */
23
+ const CONNECT_PATTERN = /transport\.connect\(createHMRHandler\(handleMessage\)\)(?!\s*\.catch)(\s*;)?/;
18
24
  function viteClientPatchPlugin() {
19
25
  return {
20
26
  name: 'miaoda-vite-client-patch',
@@ -44,6 +50,19 @@ function viteClientPatchPlugin() {
44
50
  'sandbox_token NOT injected — Vite client.mjs may have changed.');
45
51
  }
46
52
  }
53
+ // patch 3: 给悬空的 transport.connect 补 .catch
54
+ // HMR 建链失败时(hmrPort 存在 → client.mjs 内 `throw e`),这个无 .catch 的
55
+ // 悬空 Promise reject 会变成 unhandledrejection("WebSocket closed without opened." 等),
56
+ // 冒泡到全局 / 下游 React ErrorBoundary,把 dev 建链失败升级成运行态渲染失败。
57
+ // 只截最终这一跳,不动 Vite 内部 reject / fallback / reconnect 逻辑。
58
+ if (CONNECT_PATTERN.test(patched)) {
59
+ patched = patched.replace(CONNECT_PATTERN, "transport.connect(createHMRHandler(handleMessage)).catch((e) => { " +
60
+ "console.warn('[miaoda-vite-client-patch] HMR connect failed (ignored):', e); });");
61
+ }
62
+ else {
63
+ console.warn('[miaoda-vite-client-patch] `transport.connect(createHMRHandler(handleMessage))` ' +
64
+ 'call not found in @vite/client; closed-error guard NOT applied — Vite client.mjs may have changed.');
65
+ }
47
66
  return patched === code ? undefined : { code: patched };
48
67
  },
49
68
  };
@@ -1 +1 @@
1
- {"version":3,"file":"vite-client-patch.js","sourceRoot":"","sources":["../../src/plugins/vite-client-patch.ts"],"names":[],"mappings":";;AAkBA,sDAyCC;AAzDD;;;;;;;;;;;;GAYG;AACH,MAAM,wBAAwB,GAC5B,4EAA4E,CAAC;AAE/E,SAAgB,qBAAqB;IACnC,OAAO;QACL,IAAI,EAAE,0BAA0B;QAChC,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,OAAO;QAEd,SAAS,CAAC,IAAI,EAAE,EAAE;YAChB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;gBAAE,OAAO;YAExD,IAAI,OAAO,GAAG,IAAI,CAAC;YAEnB,wCAAwC;YACxC,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;YACjF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CACV,iFAAiF;oBAC/E,uDAAuD,CAC1D,CAAC;YACJ,CAAC;YAED,4DAA4D;YAC5D,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,2EAA2E;wBACzE,gEAAgE,CACnE,CAAC;gBACJ,CAAC;YACH,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;AAED,kBAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"vite-client-patch.js","sourceRoot":"","sources":["../../src/plugins/vite-client-patch.ts"],"names":[],"mappings":";;AA0BA,sDA2DC;AAnFD;;;;;;;;;;;;GAYG;AACH,MAAM,wBAAwB,GAC5B,4EAA4E,CAAC;AAE/E;;;;GAIG;AACH,MAAM,eAAe,GACnB,8EAA8E,CAAC;AAEjF,SAAgB,qBAAqB;IACnC,OAAO;QACL,IAAI,EAAE,0BAA0B;QAChC,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,OAAO;QAEd,SAAS,CAAC,IAAI,EAAE,EAAE;YAChB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;gBAAE,OAAO;YAExD,IAAI,OAAO,GAAG,IAAI,CAAC;YAEnB,wCAAwC;YACxC,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;YACjF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CACV,iFAAiF;oBAC/E,uDAAuD,CAC1D,CAAC;YACJ,CAAC;YAED,4DAA4D;YAC5D,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,2EAA2E;wBACzE,gEAAgE,CACnE,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,kFAAkF,CACrF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CACV,kFAAkF;oBAChF,oGAAoG,CACvG,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;AAED,kBAAe,qBAAqB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lark-apaas/coding-preset-vite-react",
3
- "version": "1.0.1-beta.0",
3
+ "version": "1.0.2-alpha.0",
4
4
  "description": "Vite 8 preset for miaoda-coding vite-react (jsPage) templates — pure frontend, no fullstack baggage",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",
@@ -404,10 +404,22 @@ if (!window.__VITE_ERROR_OVERLAY_INITIALIZED__) {
404
404
  );
405
405
  }
406
406
 
407
+ // 检测 Vite HMR / WebSocket 建链族错误(dev-only,仅影响热更新,不应渲染错误页)
408
+ // 兜底:即便源头 client patch 失效,这些错误也不会被升级成全屏「页面出错了」
409
+ function isHmrConnectionError(error) {
410
+ const message = (error && error.message) || '';
411
+ return (
412
+ /WebSocket closed without opened/i.test(message) ||
413
+ /transport was disconnected/i.test(message) ||
414
+ /failed to connect to websocket/i.test(message) ||
415
+ /WebSocket closed/i.test(message)
416
+ );
417
+ }
418
+
407
419
  // 处理运行时错误(与 rspack 对齐)
408
420
  function handleRuntimeError(error) {
409
- // 如果是编译相关的错误,忽略它(会由 vite:error 事件处理)
410
- if (!error || isCompileError(error)) {
421
+ // 编译错误由 vite:error 处理;HMR 连接错误只影响热更新,二者都不渲染错误页
422
+ if (!error || isCompileError(error) || isHmrConnectionError(error)) {
411
423
  return;
412
424
  }
413
425