@lark-apaas/coding-preset-vite-react 1.0.3-alpha.4 → 1.0.3-alpha.6

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,26 +1,7 @@
1
1
  import type { Plugin } from 'vite';
2
- /**
3
- * 检测当前下游 Vite 是不是 8+。Vite 8 在 `optimizeDeps.esbuildOptions` 非空时
4
- * 会打一行 deprecation warn(参见 vite 8.x node.js 中 applyDepOptimizationOptionCompat
5
- * 对 esbuildOptions 的处理),并把 plugins 自动 push 到 rolldown.plugins 末尾。
6
- * 我们已经独立挂了 rolldown.plugins,所以在 Vite 8+ 上直接不挂 esbuildOptions
7
- * 避免污染下游用户输出;Vite < 8 仍按 esbuild 路径挂载。
8
- *
9
- * package 自身 tsconfig 用 CommonJS 模块格式(参见 b8a35078: tsup → tsc CJS),
10
- * 直接用 require 拿 vite/package.json;读不到就保守按"不是 8+"处理
11
- * (多挂 esbuild 路径不影响低版本正确性)。
12
- *
13
- * 单测里通过 plugin options `_viteMajorOverride` 强行覆盖来切换两个分支。
14
- */
15
- export declare function detectViteMajor(): number | null;
16
2
  export interface CapabilitiesBundlePluginOptions {
17
3
  /** 覆盖扫描目录(相对项目根)。不传时按默认目录列表依次扫描。 */
18
4
  dir?: string;
19
- /**
20
- * 注入下游 Vite 主版本号,跳过自动探测。仅供单测覆盖 Vite < 8 / Vite 8+
21
- * 两条 depOptimizer 分支用,**生产代码不应该传**。
22
- */
23
- _viteMajorOverride?: number | null;
24
5
  }
25
6
  /**
26
7
  * 把业务工程 `<dir>/*.json` 的 capability 配置打成 `virtual:capabilities` 虚拟模块。
@@ -34,10 +15,8 @@ export interface CapabilitiesBundlePluginOptions {
34
15
  * 也提供解析——因为 client-toolkit-lite 是 pre-bundle 进来的,pre-bundle 的
35
16
  * esbuild 不会经过 Vite 主 pipeline 的 plugin 链。
36
17
  *
37
- * V1 限制:dev 期更改 capability JSON 后,pre-bundle 产物的刷新取决于
38
- * depOptimizer 缓存是否失效——命中缓存时取启动时快照,未命中(依赖图变化触发
39
- * 重新预打包)时会重新扫盘读取。所以新增 / 修改 capability 建议直接重启
40
- * dev server 以确保拿到新值。
18
+ * V1 限制:dev 期更改 capability JSON 后,pre-bundle 产物里的 map 是启动时快照,
19
+ * 不会自动刷新;新增 / 修改 capability 后需要重启 dev server。
41
20
  */
42
21
  export declare function capabilitiesBundlePlugin(options?: CapabilitiesBundlePluginOptions): Plugin;
43
22
  export default capabilitiesBundlePlugin;
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/plugins/capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAmBnC;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAS/C;AAKD,MAAM,WAAW,+BAA+B;IAC9C,oCAAoC;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,+BAAoC,GAAG,MAAM,CA+H9F;AAED,eAAe,wBAAwB,CAAC"}
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/plugins/capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAQnC,MAAM,WAAW,+BAA+B;IAC9C,oCAAoC;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,+BAAoC,GAAG,MAAM,CA0F9F;AAED,eAAe,wBAAwB,CAAC"}
@@ -33,37 +33,11 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.detectViteMajor = detectViteMajor;
37
36
  exports.capabilitiesBundlePlugin = capabilitiesBundlePlugin;
38
37
  const fs = __importStar(require("node:fs"));
39
38
  const path = __importStar(require("node:path"));
40
39
  const VIRTUAL_ID = 'virtual:capabilities';
41
40
  const RESOLVED = '\0' + VIRTUAL_ID;
42
- const ESBUILD_NAMESPACE = 'miaoda-virtual-capabilities';
43
- /**
44
- * 检测当前下游 Vite 是不是 8+。Vite 8 在 `optimizeDeps.esbuildOptions` 非空时
45
- * 会打一行 deprecation warn(参见 vite 8.x node.js 中 applyDepOptimizationOptionCompat
46
- * 对 esbuildOptions 的处理),并把 plugins 自动 push 到 rolldown.plugins 末尾。
47
- * 我们已经独立挂了 rolldown.plugins,所以在 Vite 8+ 上直接不挂 esbuildOptions
48
- * 避免污染下游用户输出;Vite < 8 仍按 esbuild 路径挂载。
49
- *
50
- * package 自身 tsconfig 用 CommonJS 模块格式(参见 b8a35078: tsup → tsc CJS),
51
- * 直接用 require 拿 vite/package.json;读不到就保守按"不是 8+"处理
52
- * (多挂 esbuild 路径不影响低版本正确性)。
53
- *
54
- * 单测里通过 plugin options `_viteMajorOverride` 强行覆盖来切换两个分支。
55
- */
56
- function detectViteMajor() {
57
- try {
58
- // eslint-disable-next-line @typescript-eslint/no-require-imports
59
- const pkg = require('vite/package.json');
60
- const major = parseInt(String(pkg.version ?? '').split('.')[0] ?? '', 10);
61
- return Number.isFinite(major) ? major : null;
62
- }
63
- catch {
64
- return null;
65
- }
66
- }
67
41
  // jsPage 约定的 capability 目录(老 fullstack 路径 `server/capabilities/` 不兼容)
68
42
  const DEFAULT_DIRS = ['shared/capabilities'];
69
43
  /**
@@ -78,10 +52,8 @@ const DEFAULT_DIRS = ['shared/capabilities'];
78
52
  * 也提供解析——因为 client-toolkit-lite 是 pre-bundle 进来的,pre-bundle 的
79
53
  * esbuild 不会经过 Vite 主 pipeline 的 plugin 链。
80
54
  *
81
- * V1 限制:dev 期更改 capability JSON 后,pre-bundle 产物的刷新取决于
82
- * depOptimizer 缓存是否失效——命中缓存时取启动时快照,未命中(依赖图变化触发
83
- * 重新预打包)时会重新扫盘读取。所以新增 / 修改 capability 建议直接重启
84
- * dev server 以确保拿到新值。
55
+ * V1 限制:dev 期更改 capability JSON 后,pre-bundle 产物里的 map 是启动时快照,
56
+ * 不会自动刷新;新增 / 修改 capability 后需要重启 dev server。
85
57
  */
86
58
  function capabilitiesBundlePlugin(options = {}) {
87
59
  let rootDir = process.cwd();
@@ -115,59 +87,33 @@ function capabilitiesBundlePlugin(options = {}) {
115
87
  configResolved(config) {
116
88
  rootDir = config.root;
117
89
  },
118
- // depOptimizer 不走 Vite plugin pipeline,是另一条独立的预打包链,
119
- // 必须在 depOptimizer 自己的入口里也注册解析;否则下游 node_modules
120
- // 任何保留了 `import 'virtual:capabilities'` 的产物(典型如 client-capability
121
- // 把它标 external 的 dist)会在依赖预打包阶段直接 fail:
122
- // `[ERROR] Could not resolve "virtual:capabilities"` / Error during
123
- // dependency optimization。
124
- //
125
- // Vite 同时支持两套 depOptimizer:
126
- // - 默认 esbuild(Vite 7 / Vite 8 不显式 opt-in Rolldown 时跑这条)
127
- // - Rolldown(Vite 8 opt-in,走 optimizeDeps.rolldownOptions.plugins)
128
- // Vite 8 上把 esbuildOptions 写非空会触发 deprecation warn —— 见上面
129
- // isVite8Plus 注释;所以 Vite 8+ 只挂 rolldown 路径,Vite < 8 才挂 esbuild。
90
+ // 同时通过 depOptimizer Rolldown 注入解析,让 client-toolkit-lite 这种
91
+ // pre-bundle 进来的依赖也能把 `import 'virtual:capabilities'` 解掉。
92
+ // Vite 8 Rolldown 替换了 esbuild 做 depOptimize,所以走 rolldownOptions.plugins。
130
93
  config(_userConfig, _env) {
131
- // 两条路径共用同一份生成函数,确保字节级一致(也方便测试断言一致性)。
132
- const renderMap = () => `export default ${JSON.stringify(loadMap())};`;
133
- const rolldownPlugin = {
134
- name: 'miaoda-capabilities-rolldown',
135
- resolveId(source) {
136
- if (source === VIRTUAL_ID)
137
- return RESOLVED;
138
- return null;
139
- },
140
- load(id) {
141
- if (id !== RESOLVED)
142
- return null;
143
- return renderMap();
94
+ // `rolldownOptions` 是 Vite 8 引入的 depOptimizer 新 API,
95
+ // 当前 Vite 类型还没覆盖,需要 as any 绕过
96
+ return {
97
+ optimizeDeps: {
98
+ rolldownOptions: {
99
+ plugins: [
100
+ {
101
+ name: 'miaoda-capabilities-rolldown',
102
+ resolveId(source) {
103
+ if (source === VIRTUAL_ID)
104
+ return RESOLVED;
105
+ return null;
106
+ },
107
+ load(id) {
108
+ if (id !== RESOLVED)
109
+ return null;
110
+ return `export default ${JSON.stringify(loadMap())};`;
111
+ },
112
+ },
113
+ ],
114
+ },
144
115
  },
145
116
  };
146
- const optimizeDeps = {
147
- // Vite 8 Rolldown depOptimizer:API 形态跟 rollup/rolldown 一致,
148
- // 跟主 pipeline 共用 resolveId/load。当前 Vite 类型还没覆盖,as any 绕过。
149
- rolldownOptions: { plugins: [rolldownPlugin] },
150
- };
151
- const viteMajor = options._viteMajorOverride !== undefined
152
- ? options._viteMajorOverride
153
- : detectViteMajor();
154
- const isVite8Plus = viteMajor !== null && viteMajor >= 8;
155
- if (!isVite8Plus) {
156
- // Vite < 8:默认(esbuild)depOptimizer,用 esbuild plugin API
157
- // (setup + onResolve/onLoad + namespace),跟 rollup 的 resolveId/load 不同。
158
- optimizeDeps.esbuildOptions = {
159
- plugins: [
160
- {
161
- name: 'miaoda-capabilities-esbuild',
162
- setup(build) {
163
- build.onResolve({ filter: /^virtual:capabilities$/ }, () => ({ path: VIRTUAL_ID, namespace: ESBUILD_NAMESPACE }));
164
- build.onLoad({ filter: /.*/, namespace: ESBUILD_NAMESPACE }, () => ({ contents: renderMap(), loader: 'js' }));
165
- },
166
- },
167
- ],
168
- };
169
- }
170
- return { optimizeDeps };
171
117
  },
172
118
  resolveId(id) {
173
119
  if (id === VIRTUAL_ID)
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/plugins/capabilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/plugins/capabilities.ts"],"names":[],"mappings":"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"}
@@ -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.3-alpha.4",
3
+ "version": "1.0.3-alpha.6",
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