@lark-apaas/coding-vite-preset 0.1.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.
Files changed (108) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +68 -0
  3. package/lib/index.d.ts +37 -0
  4. package/lib/index.d.ts.map +1 -0
  5. package/lib/index.js +69 -0
  6. package/lib/index.js.map +1 -0
  7. package/lib/module-alias/clsx.d.ts +4 -0
  8. package/lib/module-alias/clsx.d.ts.map +1 -0
  9. package/lib/module-alias/clsx.js +13 -0
  10. package/lib/module-alias/clsx.js.map +1 -0
  11. package/lib/module-alias/echarts-for-react.d.ts +14 -0
  12. package/lib/module-alias/echarts-for-react.d.ts.map +1 -0
  13. package/lib/module-alias/echarts-for-react.js +142 -0
  14. package/lib/module-alias/echarts-for-react.js.map +1 -0
  15. package/lib/module-alias/echarts.d.ts +9 -0
  16. package/lib/module-alias/echarts.d.ts.map +1 -0
  17. package/lib/module-alias/echarts.js +84 -0
  18. package/lib/module-alias/echarts.js.map +1 -0
  19. package/lib/module-alias/registry_echarts_theme.d.ts +692 -0
  20. package/lib/module-alias/registry_echarts_theme.d.ts.map +1 -0
  21. package/lib/module-alias/registry_echarts_theme.js +394 -0
  22. package/lib/module-alias/registry_echarts_theme.js.map +1 -0
  23. package/lib/polyfills/index.d.ts +15 -0
  24. package/lib/polyfills/index.d.ts.map +1 -0
  25. package/lib/polyfills/index.js +36 -0
  26. package/lib/polyfills/index.js.map +1 -0
  27. package/lib/preset.d.ts +14 -0
  28. package/lib/preset.d.ts.map +1 -0
  29. package/lib/preset.js +452 -0
  30. package/lib/preset.js.map +1 -0
  31. package/lib/utils/hmr-timing.d.ts +10 -0
  32. package/lib/utils/hmr-timing.d.ts.map +1 -0
  33. package/lib/utils/hmr-timing.js +102 -0
  34. package/lib/utils/hmr-timing.js.map +1 -0
  35. package/lib/utils/normalize-base-path.d.ts +12 -0
  36. package/lib/utils/normalize-base-path.d.ts.map +1 -0
  37. package/lib/utils/normalize-base-path.js +24 -0
  38. package/lib/utils/normalize-base-path.js.map +1 -0
  39. package/lib/utils/snapdom-proxy.d.ts +8 -0
  40. package/lib/utils/snapdom-proxy.d.ts.map +1 -0
  41. package/lib/utils/snapdom-proxy.js +52 -0
  42. package/lib/utils/snapdom-proxy.js.map +1 -0
  43. package/lib/vite-plugins/banner-plugin.d.ts +3 -0
  44. package/lib/vite-plugins/banner-plugin.d.ts.map +1 -0
  45. package/lib/vite-plugins/banner-plugin.js +26 -0
  46. package/lib/vite-plugins/banner-plugin.js.map +1 -0
  47. package/lib/vite-plugins/css-legacy-plugin.d.ts +12 -0
  48. package/lib/vite-plugins/css-legacy-plugin.d.ts.map +1 -0
  49. package/lib/vite-plugins/css-legacy-plugin.js +205 -0
  50. package/lib/vite-plugins/css-legacy-plugin.js.map +1 -0
  51. package/lib/vite-plugins/error-overlay-plugin.d.ts +33 -0
  52. package/lib/vite-plugins/error-overlay-plugin.d.ts.map +1 -0
  53. package/lib/vite-plugins/error-overlay-plugin.js +129 -0
  54. package/lib/vite-plugins/error-overlay-plugin.js.map +1 -0
  55. package/lib/vite-plugins/html-output-plugin.d.ts +21 -0
  56. package/lib/vite-plugins/html-output-plugin.d.ts.map +1 -0
  57. package/lib/vite-plugins/html-output-plugin.js +171 -0
  58. package/lib/vite-plugins/html-output-plugin.js.map +1 -0
  59. package/lib/vite-plugins/module-alias-plugin.d.ts +10 -0
  60. package/lib/vite-plugins/module-alias-plugin.d.ts.map +1 -0
  61. package/lib/vite-plugins/module-alias-plugin.js +40 -0
  62. package/lib/vite-plugins/module-alias-plugin.js.map +1 -0
  63. package/lib/vite-plugins/og-meta-plugin.d.ts +17 -0
  64. package/lib/vite-plugins/og-meta-plugin.d.ts.map +1 -0
  65. package/lib/vite-plugins/og-meta-plugin.js +80 -0
  66. package/lib/vite-plugins/og-meta-plugin.js.map +1 -0
  67. package/lib/vite-plugins/polyfill-plugin.d.ts +12 -0
  68. package/lib/vite-plugins/polyfill-plugin.d.ts.map +1 -0
  69. package/lib/vite-plugins/polyfill-plugin.js +132 -0
  70. package/lib/vite-plugins/polyfill-plugin.js.map +1 -0
  71. package/lib/vite-plugins/route-parser-plugin.d.ts +13 -0
  72. package/lib/vite-plugins/route-parser-plugin.d.ts.map +1 -0
  73. package/lib/vite-plugins/route-parser-plugin.js +120 -0
  74. package/lib/vite-plugins/route-parser-plugin.js.map +1 -0
  75. package/lib/vite-plugins/runtime-injection-plugin.d.ts +23 -0
  76. package/lib/vite-plugins/runtime-injection-plugin.d.ts.map +1 -0
  77. package/lib/vite-plugins/runtime-injection-plugin.js +93 -0
  78. package/lib/vite-plugins/runtime-injection-plugin.js.map +1 -0
  79. package/lib/vite-plugins/slardar-plugin.d.ts +10 -0
  80. package/lib/vite-plugins/slardar-plugin.d.ts.map +1 -0
  81. package/lib/vite-plugins/slardar-plugin.js +102 -0
  82. package/lib/vite-plugins/slardar-plugin.js.map +1 -0
  83. package/lib/vite-plugins/source-map-upload-plugin.d.ts +7 -0
  84. package/lib/vite-plugins/source-map-upload-plugin.d.ts.map +1 -0
  85. package/lib/vite-plugins/source-map-upload-plugin.js +85 -0
  86. package/lib/vite-plugins/source-map-upload-plugin.js.map +1 -0
  87. package/lib/vite-plugins/static-assets-plugin.d.ts +27 -0
  88. package/lib/vite-plugins/static-assets-plugin.d.ts.map +1 -0
  89. package/lib/vite-plugins/static-assets-plugin.js +393 -0
  90. package/lib/vite-plugins/static-assets-plugin.js.map +1 -0
  91. package/lib/vite-plugins/view-context-plugin.d.ts +4 -0
  92. package/lib/vite-plugins/view-context-plugin.d.ts.map +1 -0
  93. package/lib/vite-plugins/view-context-plugin.js +40 -0
  94. package/lib/vite-plugins/view-context-plugin.js.map +1 -0
  95. package/lib/vite-plugins/vite-client-patch-plugin.d.ts +23 -0
  96. package/lib/vite-plugins/vite-client-patch-plugin.d.ts.map +1 -0
  97. package/lib/vite-plugins/vite-client-patch-plugin.js +53 -0
  98. package/lib/vite-plugins/vite-client-patch-plugin.js.map +1 -0
  99. package/package.json +61 -0
  100. package/src/empty.css +1 -0
  101. package/src/inspector-stub.js +6 -0
  102. package/src/module-alias/clsx.mjs +8 -0
  103. package/src/module-alias/echarts-for-react.mjs +129 -0
  104. package/src/module-alias/echarts.mjs +43 -0
  105. package/src/module-alias/registry_echarts_theme.mjs +390 -0
  106. package/src/overlay/components.js +94 -0
  107. package/src/overlay/index.js +443 -0
  108. package/src/overlay/vite-client.js +554 -0
package/lib/preset.js ADDED
@@ -0,0 +1,452 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.createRecommendViteConfig = createRecommendViteConfig;
40
+ const fs_1 = __importDefault(require("fs"));
41
+ const path_1 = __importDefault(require("path"));
42
+ const plugin_react_1 = __importDefault(require("@vitejs/plugin-react"));
43
+ const vite_1 = __importDefault(require("@tailwindcss/vite"));
44
+ const vite_tsconfig_paths_1 = __importDefault(require("vite-tsconfig-paths"));
45
+ // @lark-apaas/devtool-kits and @lark-apaas/vite-inspector-plugin are loaded dynamically
46
+ // to avoid requiring their transitive dependencies (e.g. express) at config load time.
47
+ // They are only needed in dev mode.
48
+ const vite_client_patch_plugin_1 = require("./vite-plugins/vite-client-patch-plugin");
49
+ // routeParserPlugin is loaded dynamically since it depends on @lark-apaas/devtool-kits
50
+ const slardar_plugin_1 = require("./vite-plugins/slardar-plugin");
51
+ const view_context_plugin_1 = require("./vite-plugins/view-context-plugin");
52
+ const og_meta_plugin_1 = require("./vite-plugins/og-meta-plugin");
53
+ const module_alias_plugin_1 = require("./vite-plugins/module-alias-plugin");
54
+ const html_output_plugin_1 = require("./vite-plugins/html-output-plugin");
55
+ const error_overlay_plugin_1 = require("./vite-plugins/error-overlay-plugin");
56
+ const static_assets_plugin_1 = require("./vite-plugins/static-assets-plugin");
57
+ const plugin_legacy_1 = __importDefault(require("@vitejs/plugin-legacy"));
58
+ const snapdom_proxy_1 = require("./utils/snapdom-proxy");
59
+ const hmr_timing_1 = require("./utils/hmr-timing");
60
+ function sendBackendUnavailable502(_err, _req, res) {
61
+ if (res.headersSent)
62
+ return;
63
+ res.writeHead(502, {
64
+ 'Content-Type': 'application/json; charset=utf-8',
65
+ 'Cache-Control': 'no-cache, no-store, must-revalidate',
66
+ });
67
+ res.end(JSON.stringify({
68
+ error: 'Bad Gateway',
69
+ message: 'Backend service is not running',
70
+ }));
71
+ }
72
+ function readAppFlags(rootDir) {
73
+ try {
74
+ return JSON.parse(fs_1.default.readFileSync(path_1.default.resolve(rootDir, 'package.json'), 'utf-8')).flags || {};
75
+ }
76
+ catch {
77
+ return {};
78
+ }
79
+ }
80
+ function createRecommendViteConfig(options) {
81
+ const { isDev = true, needRoutes = true, clientBasePath = '', publicPath = '', codeSplitting = true, } = options;
82
+ // Inspector can be disabled via environment variable
83
+ const enableInspector = isDev && process.env.DISABLE_INSPECTOR !== 'true';
84
+ const rootDir = process.cwd();
85
+ const serverPort = process.env.SERVER_PORT || '3000';
86
+ const appFlags = readAppFlags(rootDir);
87
+ // 从 clientBasePath(如 /app/app123)中提取 appId,用于构造旧路径代理规则
88
+ // 仅在新路径格式(/app/:appId)下启用旧路径兼容
89
+ const isNewPathFormat = /^\/app\/[^/]/.test(clientBasePath);
90
+ const appId = isNewPathFormat
91
+ ? clientBasePath.replace(/\/+$/, '').split('/').pop()
92
+ : '';
93
+ // 读取构建前生成的路由定义 JSON,供 define 注入到 bundle
94
+ // build.sh 在 client 构建之前已将 page-routes.json / api-routes.json 写入 dist/
95
+ // 独立于 needRoutes(needRoutes 仅控制 RouteParserPlugin),只要文件存在就注入
96
+ let pageRouteDefinitions = [];
97
+ let apiRouteDefinitions = [];
98
+ try {
99
+ const pageRoutesPath = path_1.default.resolve(rootDir, 'dist/page-routes.json');
100
+ if (fs_1.default.existsSync(pageRoutesPath)) {
101
+ pageRouteDefinitions = JSON.parse(fs_1.default.readFileSync(pageRoutesPath, 'utf-8'));
102
+ }
103
+ }
104
+ catch { /* ignore */ }
105
+ try {
106
+ const apiRoutesPath = path_1.default.resolve(rootDir, 'dist/api-routes.json');
107
+ if (fs_1.default.existsSync(apiRoutesPath)) {
108
+ apiRouteDefinitions = JSON.parse(fs_1.default.readFileSync(apiRoutesPath, 'utf-8'));
109
+ }
110
+ }
111
+ catch { /* ignore */ }
112
+ // Build the plugins array
113
+ const plugins = [
114
+ // Cloud env patch: suppress auto page-reload on HMR WebSocket reconnect (dev only)
115
+ isDev && (0, vite_client_patch_plugin_1.viteClientPatchPlugin)(),
116
+ // Error overlay plugin - replaces Vite's native error overlay with custom one
117
+ // Must be first to intercept config and disable native overlay
118
+ // Only enabled in development mode
119
+ isDev && (0, error_overlay_plugin_1.errorOverlayPlugin)({ clientBasePath }),
120
+ // Static assets plugin - supports @shared/static/* imports
121
+ // Must be before tsconfigPaths() so resolveId intercepts @shared/static/*
122
+ // before tsconfig resolution. This is critical for JSON files: if tsconfigPaths
123
+ // resolves first, the module ID ends with .json and vite:json's transform
124
+ // will corrupt the virtual module content.
125
+ (0, static_assets_plugin_1.staticAssetsPlugin)({ clientBasePath, rootDir }),
126
+ // TSConfig paths plugin - auto-reads path aliases from tsconfig.json
127
+ (0, vite_tsconfig_paths_1.default)(),
128
+ // Inspector plugin for dev mode (injects data attributes for debugging)
129
+ // Only enabled in development when DISABLE_INSPECTOR is not set
130
+ // Must be BEFORE react() — both use enforce:'pre' and Vite runs them in array order.
131
+ // If react() runs first, its JSX transform converts JSX to _jsxDEV() calls,
132
+ // leaving no JSX elements for the inspector to annotate.
133
+ // Dynamically loaded to avoid requiring its dependencies at config load time.
134
+ ...(enableInspector ? (() => {
135
+ try {
136
+ const { inspectorPlugin } = require('@lark-apaas/vite-inspector-plugin');
137
+ return [inspectorPlugin()];
138
+ }
139
+ catch {
140
+ return [];
141
+ }
142
+ })() : []),
143
+ // React plugin (Vite 8 + @vitejs/plugin-react v6, Oxc-based)
144
+ (0, plugin_react_1.default)(),
145
+ // Tailwind CSS 4 via Vite plugin (faster than PostCSS integration)
146
+ (0, vite_1.default)(),
147
+ // Module alias plugin for clsx and echarts
148
+ (0, module_alias_plugin_1.moduleAliasPlugin)(),
149
+ // Route parser plugin (when needRoutes is true)
150
+ // Dynamically loaded since it depends on @lark-apaas/devtool-kits
151
+ ...(needRoutes ? (() => {
152
+ try {
153
+ const { routeParserPlugin } = require('./vite-plugins/route-parser-plugin');
154
+ return [routeParserPlugin({
155
+ appPath: './client/src/app.tsx',
156
+ outputPath: path_1.default.resolve(rootDir, 'dist/client/routes.json'),
157
+ serveBasePath: clientBasePath,
158
+ ...(isDev ? { basePath: '' } : {}),
159
+ })];
160
+ }
161
+ catch {
162
+ return [];
163
+ }
164
+ })() : []),
165
+ // View context injection plugin (must be before slardar so it appears first in HTML)
166
+ (0, view_context_plugin_1.viewContextPlugin)(),
167
+ // Performance monitoring plugin (Slardar + Tea)
168
+ (0, slardar_plugin_1.slardarPlugin)({ bid: 'apaas_miaoda' }),
169
+ // OG Meta tags injection plugin
170
+ (0, og_meta_plugin_1.ogMetaPlugin)(),
171
+ // 生产环境:为旧浏览器按需注入 polyfill(使用 @vitejs/plugin-legacy modernPolyfills 模式)
172
+ !isDev && (0, plugin_legacy_1.default)({
173
+ renderLegacyChunks: false,
174
+ modernPolyfills: true,
175
+ }),
176
+ // HTML output plugin - handles HTML path and dev mode disk write
177
+ (0, html_output_plugin_1.htmlOutputPlugin)({
178
+ isDev,
179
+ outDir: path_1.default.resolve(rootDir, 'dist/client'),
180
+ }),
181
+ // HMR timing plugin (dev only)
182
+ isDev && (0, hmr_timing_1.createHmrTimingPlugin)(),
183
+ ];
184
+ const config = {
185
+ root: rootDir,
186
+ base: publicPath ? publicPath + '/' : '/',
187
+ plugins: plugins.filter(Boolean),
188
+ resolve: {
189
+ // Align with rspack-preset's mainFields order
190
+ mainFields: ['module', 'browser', 'main'],
191
+ extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'],
192
+ alias: {
193
+ // 确保所有 echarts 子路径导入(如 echarts/core, echarts/lib/...)
194
+ // 都解析到 preset 自带的 echarts,避免第三方扩展(如 echarts-wordcloud)
195
+ // 安装了独立的 echarts 副本导致注册不到同一个实例上
196
+ echarts: path_1.default.dirname(require.resolve('echarts/package.json')),
197
+ // Intercept @/inspector.dev.css import from client-toolkit
198
+ // In dev mode, inspector injects styles at runtime, so we use empty CSS
199
+ // This avoids creating files in user's project directory
200
+ '@/inspector.dev.css': path_1.default.resolve(__dirname, '../src/empty.css'),
201
+ // In production, replace inspector package with empty stub
202
+ // Inspector is only needed in development mode
203
+ ...(!isDev
204
+ ? {
205
+ '@lark-apaas/miaoda-inspector': path_1.default.resolve(__dirname, '../src/inspector-stub.js'),
206
+ }
207
+ : {}),
208
+ },
209
+ },
210
+ define: {
211
+ // Polyfill for Node.js global object (used by sockjs-client, etc.)
212
+ global: 'globalThis',
213
+ // Note: Don't define 'window' or 'typeof window' - esbuild doesn't support
214
+ // 'typeof X' as define key, and 'window: globalThis' causes "Cannot set property window"
215
+ // error. In browser environment, window is already available.
216
+ 'process.env.NODE_ENV': JSON.stringify(isDev ? 'development' : 'production'),
217
+ 'process.env.runtimeMode': JSON.stringify('fullstack'),
218
+ 'process.env.CLIENT_BASE_PATH': JSON.stringify(clientBasePath),
219
+ // 与 rspack-preset 对齐:默认空字符串,使用 || 进行 fallback
220
+ 'process.env.FORCE_FRAMEWORK_DOMAIN_MAIN': JSON.stringify(process.env.FORCE_FRAMEWORK_DOMAIN_MAIN ?? ''),
221
+ 'process.env.CWD': JSON.stringify(''),
222
+ // Runtime injection flag for client-toolkit compatibility
223
+ 'process.env.__RUNTIME_INJECTED__': JSON.stringify('true'),
224
+ // Build tool identifier for source map handling
225
+ // Vite dev mode doesn't need source map mapping - stack traces are already source paths
226
+ 'process.env.BUILD_TOOL': JSON.stringify('vite'),
227
+ // 模板 flags 配置
228
+ 'process.env.APP_FLAGS': JSON.stringify(appFlags),
229
+ // 路由定义,供客户端匹配 referer_path 和 api
230
+ 'process.env.__PAGE_ROUTE_DEFINITIONS__': JSON.stringify(JSON.stringify(pageRouteDefinitions)),
231
+ 'process.env.__API_ROUTE_DEFINITIONS__': JSON.stringify(JSON.stringify(apiRouteDefinitions)),
232
+ },
233
+ server: {
234
+ port: Number(process.env.CLIENT_DEV_PORT) || 8080,
235
+ host: process.env.CLIENT_DEV_HOST || 'localhost',
236
+ strictPort: true,
237
+ cors: true,
238
+ // Allow all hosts (align with rspack-preset's allowedHosts: 'all')
239
+ allowedHosts: true,
240
+ headers: {
241
+ ...(process.env.FORCE_FRAMEWORK_DOMAIN_MAIN
242
+ ? {
243
+ 'Access-Control-Allow-Origin': process.env.FORCE_FRAMEWORK_DOMAIN_MAIN,
244
+ }
245
+ : {}),
246
+ },
247
+ watch: {
248
+ usePolling: true,
249
+ interval: 500,
250
+ // Ignore node_modules to prevent unnecessary HMR updates
251
+ // especially for yalc-linked packages
252
+ ignored: ['**/node_modules/**', '**/dist/**'],
253
+ },
254
+ // HMR WebSocket configuration
255
+ // Reference: https://vite.dev/config/server-options.html#server-hmr
256
+ // When behind a reverse proxy (FORCE_FRAMEWORK_DOMAIN_MAIN is set), use wss://
257
+ // For local development, use default ws://
258
+ hmr: process.env.FORCE_FRAMEWORK_DOMAIN_MAIN
259
+ ? {
260
+ protocol: 'wss',
261
+ path: `/ws`,
262
+ }
263
+ : {
264
+ path: `/ws`,
265
+ },
266
+ proxy: {
267
+ // API proxy
268
+ [`${clientBasePath}/api`]: {
269
+ target: `http://localhost:${serverPort}`,
270
+ changeOrigin: true,
271
+ configure: (proxy) => {
272
+ proxy.on('error', (err, req, res) => {
273
+ sendBackendUnavailable502(err, req, res);
274
+ });
275
+ },
276
+ },
277
+ // Inner API proxy
278
+ [`${clientBasePath}/__innerapi__`]: {
279
+ target: `http://localhost:${serverPort}`,
280
+ changeOrigin: true,
281
+ configure: (proxy) => {
282
+ proxy.on('error', (err, req, res) => {
283
+ sendBackendUnavailable502(err, req, res);
284
+ });
285
+ },
286
+ },
287
+ // 旧路径(/af/p/:appId)兼容代理,转发到 Node Server 由 legacy-path-redirect 中间件处理
288
+ ...(appId
289
+ ? {
290
+ [`/af/p/${appId}/api`]: {
291
+ target: `http://localhost:${serverPort}`,
292
+ changeOrigin: true,
293
+ configure: (proxy) => {
294
+ proxy.on('error', (err, req, res) => {
295
+ sendBackendUnavailable502(err, req, res);
296
+ });
297
+ },
298
+ },
299
+ [`/af/p/${appId}/__innerapi__`]: {
300
+ target: `http://localhost:${serverPort}`,
301
+ changeOrigin: true,
302
+ configure: (proxy) => {
303
+ proxy.on('error', (err, req, res) => {
304
+ sendBackendUnavailable502(err, req, res);
305
+ });
306
+ },
307
+ },
308
+ }
309
+ : {}),
310
+ },
311
+ },
312
+ build: {
313
+ outDir: path_1.default.resolve(rootDir, 'dist/client'),
314
+ emptyOutDir: false,
315
+ sourcemap: isDev ? true : 'hidden', // Align with rspack-preset's devtool config
316
+ minify: !isDev,
317
+ // CSS 降级:使用 Vite 内置的 Lightning CSS 转换现代 CSS 特性
318
+ cssTarget: ['ios12', 'safari12', 'chrome80'],
319
+ rollupOptions: {
320
+ input: path_1.default.resolve(rootDir, 'client/index.html'),
321
+ output: {
322
+ // Code splitting: when disabled, all dynamic imports are inlined into single bundle
323
+ // When enabled (default), Vite will split chunks based on dynamic imports
324
+ ...(codeSplitting ? {} : { inlineDynamicImports: true }),
325
+ },
326
+ },
327
+ // Copy public directory
328
+ copyPublicDir: true,
329
+ },
330
+ publicDir: path_1.default.resolve(rootDir, 'client/public'),
331
+ // Don't specify css.postcss here - let Vite pick up the project's postcss.config.js
332
+ // This allows projects to configure their own PostCSS plugins (e.g., Tailwind v4)
333
+ // Optimize deps for faster dev startup
334
+ optimizeDeps: {
335
+ include: [
336
+ 'react',
337
+ 'react-dom',
338
+ 'react/jsx-runtime',
339
+ 'react/jsx-dev-runtime',
340
+ 'clsx',
341
+ 'echarts',
342
+ 'echarts-for-react',
343
+ // Include inspector so Vite pre-bundles it with its dependencies
344
+ ...(enableInspector ? ['@lark-apaas/miaoda-inspector'] : []),
345
+ ],
346
+ exclude: [],
347
+ // Pass define replacements to Rolldown for pre-bundling (Vite 8)
348
+ // Without this, process.env.X in dependencies won't be replaced
349
+ // @ts-expect-error Vite 8 rolldownOptions — type defs may lag behind runtime support
350
+ rolldownOptions: {
351
+ define: {
352
+ 'process.env.NODE_ENV': JSON.stringify(isDev ? 'development' : 'production'),
353
+ // Use actual value if set, otherwise undefined for ?? fallback
354
+ 'process.env.FORCE_FRAMEWORK_DOMAIN_MAIN': process.env
355
+ .FORCE_FRAMEWORK_DOMAIN_MAIN
356
+ ? JSON.stringify(process.env.FORCE_FRAMEWORK_DOMAIN_MAIN)
357
+ : 'undefined',
358
+ global: 'globalThis',
359
+ // Align with rspack-preset
360
+ 'process.env.__RUNTIME_INJECTED__': JSON.stringify('true'),
361
+ },
362
+ },
363
+ },
364
+ };
365
+ // Add custom middleware setup for dev server
366
+ if (isDev) {
367
+ const originalConfigureServer = config.server?.configureServer;
368
+ config.server = {
369
+ ...config.server,
370
+ };
371
+ // Use a plugin to configure the dev server with middlewares
372
+ // devtool-kits is loaded dynamically to avoid requiring express at config load time
373
+ config.plugins.push({
374
+ name: 'fullstack-dev-middlewares',
375
+ async configureServer(server) {
376
+ // Register SnapDom proxy middleware
377
+ (0, snapdom_proxy_1.registerSnapDomProxyMiddleware)(server.middlewares, {
378
+ baseUrl: clientBasePath,
379
+ });
380
+ // Dynamically load devtool-kits middlewares
381
+ try {
382
+ const { handleDevProxyError, registerMiddlewares, createDevLogsMiddleware, createOpenapiMiddleware, createCollectLogsMiddleware, } = await Promise.resolve().then(() => __importStar(require('@lark-apaas/devtool-kits')));
383
+ await registerMiddlewares(server.middlewares, [
384
+ createDevLogsMiddleware({
385
+ logDir: process.env.LOG_DIR || './logs',
386
+ }),
387
+ createOpenapiMiddleware({
388
+ openapiFilePath: path_1.default.resolve(rootDir, './client/src/api/gen/openapi.json'),
389
+ serverDir: path_1.default.resolve(rootDir, './server'),
390
+ enableEnhancement: true,
391
+ }),
392
+ createCollectLogsMiddleware({
393
+ logDir: process.env.LOG_DIR || './logs',
394
+ fileName: 'browser.log',
395
+ }),
396
+ ], {
397
+ basePath: clientBasePath,
398
+ isDev,
399
+ });
400
+ // Proxy HTML requests to backend server
401
+ server.middlewares.use((req, res, next) => {
402
+ const devServerWhiteList = [
403
+ '/@vite',
404
+ '/@fs',
405
+ '/__vite',
406
+ '/@id',
407
+ '/node_modules',
408
+ '/dev/',
409
+ '.hot-update',
410
+ ];
411
+ const isHtmlRequest = req.headers.accept?.includes('text/html');
412
+ const pathname = req.url?.split('?')[0] || '';
413
+ const isDevServerPath = devServerWhiteList.some((item) => pathname.includes(item));
414
+ const isStaticAsset = /\.(js|css|png|jpg|jpeg|gif|svg|ico|woff|woff2|ttf|eot)$/i.test(pathname);
415
+ if (isHtmlRequest && !isDevServerPath && !isStaticAsset) {
416
+ const http = require('http');
417
+ const proxyReq = http.request({
418
+ hostname: 'localhost',
419
+ port: serverPort,
420
+ path: req.url,
421
+ method: req.method,
422
+ headers: req.headers,
423
+ }, (proxyRes) => {
424
+ res.writeHead(proxyRes.statusCode || 200, proxyRes.headers);
425
+ proxyRes.pipe(res);
426
+ });
427
+ proxyReq.on('error', (err) => {
428
+ handleDevProxyError(err, req, res, {
429
+ target: `http://localhost:${serverPort}`,
430
+ });
431
+ });
432
+ req.pipe(proxyReq);
433
+ }
434
+ else {
435
+ next();
436
+ }
437
+ });
438
+ }
439
+ catch {
440
+ // devtool-kits not available, skip dev middlewares
441
+ console.warn('[coding-vite-preset] @lark-apaas/devtool-kits not found, skipping dev middlewares');
442
+ }
443
+ // Call original configureServer if exists
444
+ if (originalConfigureServer) {
445
+ originalConfigureServer(server);
446
+ }
447
+ },
448
+ });
449
+ }
450
+ return config;
451
+ }
452
+ //# sourceMappingURL=preset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset.js","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Plugin } from 'vite';
2
+ /**
3
+ * Create HMR timing plugin for Vite 8+
4
+ *
5
+ * Uses the `hotUpdate` hook to detect HMR updates and broadcasts timing
6
+ * data to connected clients via `server.hot.send()`.
7
+ */
8
+ export declare function createHmrTimingPlugin(): Plugin;
9
+ export default createHmrTimingPlugin;
10
+ //# sourceMappingURL=hmr-timing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmr-timing.d.ts","sourceRoot":"","sources":["../../src/utils/hmr-timing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAmC,MAAM,MAAM,CAAC;AAOpE;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CA6D9C;AAED,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.createHmrTimingPlugin = createHmrTimingPlugin;
37
+ const fs = __importStar(require("fs"));
38
+ const VALID_EXTENSIONS = [
39
+ '.js', '.jsx', '.ts', '.tsx', '.svelte', '.css', '.json', '.html',
40
+ ];
41
+ /**
42
+ * Create HMR timing plugin for Vite 8+
43
+ *
44
+ * Uses the `hotUpdate` hook to detect HMR updates and broadcasts timing
45
+ * data to connected clients via `server.hot.send()`.
46
+ */
47
+ function createHmrTimingPlugin() {
48
+ let startTime = 0;
49
+ let changedFiles = new Set();
50
+ let server = null;
51
+ return {
52
+ name: 'fullstack-hmr-timing',
53
+ configureServer(devServer) {
54
+ server = devServer;
55
+ // Listen for file changes to track timing start
56
+ server.watcher.on('change', (file) => {
57
+ startTime = Date.now();
58
+ changedFiles.add(file);
59
+ });
60
+ },
61
+ // Vite 8: hotUpdate replaces handleHotUpdate
62
+ hotUpdate(_ctx) {
63
+ if (!server || changedFiles.size === 0)
64
+ return;
65
+ const duration = Date.now() - startTime;
66
+ // Filter valid files - only keep actual project files
67
+ const validFiles = [...changedFiles]
68
+ .map((f) => f.replace(process.cwd(), '').replace(/\\/g, '/'))
69
+ .filter((filePath) => {
70
+ if (!filePath || filePath.length === 0)
71
+ return false;
72
+ if (filePath.includes('/node_modules/'))
73
+ return false;
74
+ return VALID_EXTENSIONS.some((ext) => filePath.toLowerCase().endsWith(ext));
75
+ });
76
+ // Get file statistics
77
+ const totalSize = validFiles.reduce((sum, filePath) => {
78
+ try {
79
+ return sum + fs.statSync(process.cwd() + filePath).size;
80
+ }
81
+ catch {
82
+ return sum;
83
+ }
84
+ }, 0);
85
+ const payload = {
86
+ duration,
87
+ fileCount: validFiles.length,
88
+ fileTotalSize: totalSize,
89
+ };
90
+ // Broadcast to browser via Vite 8 HotChannel API
91
+ server.hot.send({
92
+ type: 'custom',
93
+ event: 'hmr-timing',
94
+ data: payload,
95
+ });
96
+ // Clear changed files after broadcasting
97
+ changedFiles.clear();
98
+ },
99
+ };
100
+ }
101
+ exports.default = createHmrTimingPlugin;
102
+ //# sourceMappingURL=hmr-timing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmr-timing.js","sourceRoot":"","sources":["../../src/utils/hmr-timing.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,sDA6DC;AAzED,uCAAyB;AAEzB,MAAM,gBAAgB,GAAG;IACvB,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CAClE,CAAC;AAEF;;;;;GAKG;AACH,SAAgB,qBAAqB;IACnC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,IAAI,MAAM,GAAyB,IAAI,CAAC;IAExC,OAAO;QACL,IAAI,EAAE,sBAAsB;QAE5B,eAAe,CAAC,SAAwB;YACtC,MAAM,GAAG,SAAS,CAAC;YAEnB,gDAAgD;YAChD,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;gBACnC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvB,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,6CAA6C;QAC7C,SAAS,CAAC,IAAsB;YAC9B,IAAI,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC;gBAAE,OAAO;YAE/C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAExC,sDAAsD;YACtD,MAAM,UAAU,GAAG,CAAC,GAAG,YAAY,CAAC;iBACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;iBAC5D,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACnB,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACrD,IAAI,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACtD,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CACnC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CACrC,CAAC;YACJ,CAAC,CAAC,CAAC;YAEL,sBAAsB;YACtB,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;gBACpD,IAAI,CAAC;oBACH,OAAO,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC;gBAC1D,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,GAAG,CAAC;gBACb,CAAC;YACH,CAAC,EAAE,CAAC,CAAC,CAAC;YAEN,MAAM,OAAO,GAAG;gBACd,QAAQ;gBACR,SAAS,EAAE,UAAU,CAAC,MAAM;gBAC5B,aAAa,EAAE,SAAS;aACzB,CAAC;YAEF,iDAAiD;YACjD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,YAAY;gBACnB,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;YAEH,yCAAyC;YACzC,YAAY,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,kBAAe,qBAAqB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Normalize base path, ensuring it starts with '/' and does not include trailing slash
3
+ * @param basePath Original base path
4
+ * @returns Normalized base path
5
+ */
6
+ export declare function normalizeBasePathWithoutTrailingSlash(basePath: string): string;
7
+ /**
8
+ * Normalize base path, ensuring it starts with '/' and does not include trailing slash
9
+ * Equivalent to `normalizeBasePath` from @lark-apaas/devtool-kits
10
+ */
11
+ export declare function normalizeBasePath(basePath: string): string;
12
+ //# sourceMappingURL=normalize-base-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-base-path.d.ts","sourceRoot":"","sources":["../../src/utils/normalize-base-path.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,qCAAqC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK9E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG1D"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeBasePathWithoutTrailingSlash = normalizeBasePathWithoutTrailingSlash;
4
+ exports.normalizeBasePath = normalizeBasePath;
5
+ /**
6
+ * Normalize base path, ensuring it starts with '/' and does not include trailing slash
7
+ * @param basePath Original base path
8
+ * @returns Normalized base path
9
+ */
10
+ function normalizeBasePathWithoutTrailingSlash(basePath) {
11
+ const basePathWithoutTrailingSlash = basePath.endsWith('/')
12
+ ? basePath.slice(0, -1)
13
+ : basePath;
14
+ return basePathWithoutTrailingSlash;
15
+ }
16
+ /**
17
+ * Normalize base path, ensuring it starts with '/' and does not include trailing slash
18
+ * Equivalent to `normalizeBasePath` from @lark-apaas/devtool-kits
19
+ */
20
+ function normalizeBasePath(basePath) {
21
+ const normalized = basePath.startsWith('/') ? basePath : `/${basePath}`;
22
+ return normalized.endsWith('/') ? normalized.slice(0, -1) : normalized;
23
+ }
24
+ //# sourceMappingURL=normalize-base-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-base-path.js","sourceRoot":"","sources":["../../src/utils/normalize-base-path.ts"],"names":[],"mappings":";;AAKA,sFAKC;AAMD,8CAGC;AAnBD;;;;GAIG;AACH,SAAgB,qCAAqC,CAAC,QAAgB;IACpE,MAAM,4BAA4B,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;QACzD,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC,QAAQ,CAAC;IACb,OAAO,4BAA4B,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,QAAgB;IAChD,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;IACxE,OAAO,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AACzE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Connect } from 'vite';
2
+ interface SnapDomMiddlewareOptions {
3
+ proxyUrl?: string;
4
+ baseUrl?: string;
5
+ }
6
+ export declare function registerSnapDomProxyMiddleware(middlewares: Connect.Server, options?: SnapDomMiddlewareOptions): void;
7
+ export default registerSnapDomProxyMiddleware;
8
+ //# sourceMappingURL=snapdom-proxy.d.ts.map