@lark-apaas/fullstack-vite-preset 1.0.1-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.
Files changed (71) hide show
  1. package/README.md +121 -0
  2. package/lib/index.d.ts +39 -0
  3. package/lib/index.d.ts.map +1 -0
  4. package/lib/index.js +75 -0
  5. package/lib/index.js.map +1 -0
  6. package/lib/module-alias/clsx.d.ts +4 -0
  7. package/lib/module-alias/clsx.d.ts.map +1 -0
  8. package/lib/module-alias/clsx.js +13 -0
  9. package/lib/module-alias/clsx.js.map +1 -0
  10. package/lib/module-alias/echarts.d.ts +4 -0
  11. package/lib/module-alias/echarts.d.ts.map +1 -0
  12. package/lib/module-alias/echarts.js +50 -0
  13. package/lib/module-alias/echarts.js.map +1 -0
  14. package/lib/module-alias/registry_echarts_theme.d.ts +696 -0
  15. package/lib/module-alias/registry_echarts_theme.d.ts.map +1 -0
  16. package/lib/module-alias/registry_echarts_theme.js +394 -0
  17. package/lib/module-alias/registry_echarts_theme.js.map +1 -0
  18. package/lib/preset.d.ts +14 -0
  19. package/lib/preset.d.ts.map +1 -0
  20. package/lib/preset.js +283 -0
  21. package/lib/preset.js.map +1 -0
  22. package/lib/utils/hmr-timing.d.ts +8 -0
  23. package/lib/utils/hmr-timing.d.ts.map +1 -0
  24. package/lib/utils/hmr-timing.js +132 -0
  25. package/lib/utils/hmr-timing.js.map +1 -0
  26. package/lib/utils/normalize-base-path.d.ts +7 -0
  27. package/lib/utils/normalize-base-path.d.ts.map +1 -0
  28. package/lib/utils/normalize-base-path.js +15 -0
  29. package/lib/utils/normalize-base-path.js.map +1 -0
  30. package/lib/utils/snapdom-proxy.d.ts +8 -0
  31. package/lib/utils/snapdom-proxy.d.ts.map +1 -0
  32. package/lib/utils/snapdom-proxy.js +52 -0
  33. package/lib/utils/snapdom-proxy.js.map +1 -0
  34. package/lib/vite-plugins/html-output-plugin.d.ts +14 -0
  35. package/lib/vite-plugins/html-output-plugin.d.ts.map +1 -0
  36. package/lib/vite-plugins/html-output-plugin.js +129 -0
  37. package/lib/vite-plugins/html-output-plugin.js.map +1 -0
  38. package/lib/vite-plugins/inspector-css-plugin.d.ts +19 -0
  39. package/lib/vite-plugins/inspector-css-plugin.d.ts.map +1 -0
  40. package/lib/vite-plugins/inspector-css-plugin.js +70 -0
  41. package/lib/vite-plugins/inspector-css-plugin.js.map +1 -0
  42. package/lib/vite-plugins/module-alias-plugin.d.ts +10 -0
  43. package/lib/vite-plugins/module-alias-plugin.d.ts.map +1 -0
  44. package/lib/vite-plugins/module-alias-plugin.js +36 -0
  45. package/lib/vite-plugins/module-alias-plugin.js.map +1 -0
  46. package/lib/vite-plugins/og-meta-plugin.d.ts +17 -0
  47. package/lib/vite-plugins/og-meta-plugin.d.ts.map +1 -0
  48. package/lib/vite-plugins/og-meta-plugin.js +81 -0
  49. package/lib/vite-plugins/og-meta-plugin.js.map +1 -0
  50. package/lib/vite-plugins/route-parser-plugin.d.ts +8 -0
  51. package/lib/vite-plugins/route-parser-plugin.d.ts.map +1 -0
  52. package/lib/vite-plugins/route-parser-plugin.js +280 -0
  53. package/lib/vite-plugins/route-parser-plugin.js.map +1 -0
  54. package/lib/vite-plugins/runtime-injection-plugin.d.ts +22 -0
  55. package/lib/vite-plugins/runtime-injection-plugin.d.ts.map +1 -0
  56. package/lib/vite-plugins/runtime-injection-plugin.js +50 -0
  57. package/lib/vite-plugins/runtime-injection-plugin.js.map +1 -0
  58. package/lib/vite-plugins/slardar-plugin.d.ts +10 -0
  59. package/lib/vite-plugins/slardar-plugin.d.ts.map +1 -0
  60. package/lib/vite-plugins/slardar-plugin.js +98 -0
  61. package/lib/vite-plugins/slardar-plugin.js.map +1 -0
  62. package/lib/vite-plugins/view-context-plugin.d.ts +4 -0
  63. package/lib/vite-plugins/view-context-plugin.d.ts.map +1 -0
  64. package/lib/vite-plugins/view-context-plugin.js +40 -0
  65. package/lib/vite-plugins/view-context-plugin.js.map +1 -0
  66. package/package.json +57 -0
  67. package/src/empty.css +1 -0
  68. package/src/inspector-stub.js +6 -0
  69. package/src/module-alias/clsx.mjs +8 -0
  70. package/src/module-alias/echarts.mjs +28 -0
  71. package/src/module-alias/registry_echarts_theme.mjs +390 -0
package/lib/preset.js ADDED
@@ -0,0 +1,283 @@
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.createRecommendViteConfig = createRecommendViteConfig;
7
+ const path_1 = __importDefault(require("path"));
8
+ const plugin_react_1 = __importDefault(require("@vitejs/plugin-react"));
9
+ const vite_inspector_plugin_1 = require("@lark-apaas/vite-inspector-plugin");
10
+ const devtool_kits_1 = require("@lark-apaas/devtool-kits");
11
+ const route_parser_plugin_1 = require("./vite-plugins/route-parser-plugin");
12
+ const slardar_plugin_1 = require("./vite-plugins/slardar-plugin");
13
+ const view_context_plugin_1 = require("./vite-plugins/view-context-plugin");
14
+ const og_meta_plugin_1 = require("./vite-plugins/og-meta-plugin");
15
+ const module_alias_plugin_1 = require("./vite-plugins/module-alias-plugin");
16
+ const inspector_css_plugin_1 = require("./vite-plugins/inspector-css-plugin");
17
+ const html_output_plugin_1 = require("./vite-plugins/html-output-plugin");
18
+ const runtime_injection_plugin_1 = require("./vite-plugins/runtime-injection-plugin");
19
+ const snapdom_proxy_1 = require("./utils/snapdom-proxy");
20
+ const hmr_timing_1 = require("./utils/hmr-timing");
21
+ function sendBackendUnavailable502(_err, _req, res) {
22
+ if (res.headersSent)
23
+ return;
24
+ res.writeHead(502, {
25
+ 'Content-Type': 'application/json; charset=utf-8',
26
+ 'Cache-Control': 'no-cache, no-store, must-revalidate',
27
+ });
28
+ res.end(JSON.stringify({
29
+ error: 'Bad Gateway',
30
+ message: 'Backend service is not running',
31
+ }));
32
+ }
33
+ function createRecommendViteConfig(options) {
34
+ const { isDev = true, enableReactRefresh = isDev, needRoutes = true, clientBasePath = '', publicPath = '', } = options;
35
+ // Inspector can be disabled via environment variable
36
+ const enableInspector = isDev && process.env.DISABLE_INSPECTOR !== 'true';
37
+ const rootDir = process.cwd();
38
+ const serverPort = process.env.SERVER_PORT || '3000';
39
+ // Build the plugins array
40
+ const plugins = [
41
+ // Runtime injection plugin - injects @lark-apaas/client-toolkit/runtime
42
+ // Must be early to ensure runtime is loaded before app code
43
+ (0, runtime_injection_plugin_1.runtimeInjectionPlugin)(),
44
+ // Inspector CSS plugin - handles @/inspector.dev.css import
45
+ // Must be before React plugin to intercept the import
46
+ (0, inspector_css_plugin_1.inspectorCssPlugin)({ isDev }),
47
+ // React plugin with Babel for styled-jsx support
48
+ (0, plugin_react_1.default)({
49
+ jsxRuntime: 'automatic',
50
+ // Only use inspector jsx-runtime in dev mode when inspector is enabled
51
+ jsxImportSource: enableInspector
52
+ ? '@lark-apaas/miaoda-inspector-jsx-runtime'
53
+ : 'react',
54
+ babel: {
55
+ plugins: [['styled-jsx/babel']],
56
+ },
57
+ // Only enable fast refresh in dev mode
58
+ ...(enableReactRefresh ? {} : { fastRefresh: false }),
59
+ }),
60
+ // Inspector plugin for dev mode (injects data attributes for debugging)
61
+ // Only enabled in development when DISABLE_INSPECTOR is not set
62
+ enableInspector && (0, vite_inspector_plugin_1.inspectorPlugin)(),
63
+ // Module alias plugin for clsx and echarts
64
+ (0, module_alias_plugin_1.moduleAliasPlugin)(),
65
+ // Route parser plugin (dev only, when needRoutes is true)
66
+ needRoutes &&
67
+ (0, route_parser_plugin_1.routeParserPlugin)({
68
+ appPath: './client/src/app.tsx',
69
+ }),
70
+ // Performance monitoring plugin (Slardar + Tea)
71
+ (0, slardar_plugin_1.slardarPlugin)({ bid: 'apaas_miaoda' }),
72
+ // View context injection plugin
73
+ (0, view_context_plugin_1.viewContextPlugin)(),
74
+ // OG Meta tags injection plugin
75
+ (0, og_meta_plugin_1.ogMetaPlugin)(),
76
+ // HTML output plugin - handles HTML path and dev mode disk write
77
+ (0, html_output_plugin_1.htmlOutputPlugin)({
78
+ isDev,
79
+ outDir: path_1.default.resolve(rootDir, 'dist/client'),
80
+ }),
81
+ // HMR timing plugin (dev only)
82
+ isDev && (0, hmr_timing_1.createHmrTimingPlugin)(),
83
+ ];
84
+ const config = {
85
+ root: rootDir,
86
+ base: publicPath ? publicPath + '/' : '/',
87
+ plugins: plugins.filter(Boolean),
88
+ resolve: {
89
+ extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'],
90
+ alias: {
91
+ // In production, replace inspector package with empty stub
92
+ // Inspector is only needed in development mode
93
+ ...(!isDev
94
+ ? {
95
+ '@lark-apaas/miaoda-inspector': path_1.default.resolve(__dirname, '../src/inspector-stub.js'),
96
+ }
97
+ : {}),
98
+ },
99
+ },
100
+ define: {
101
+ // Polyfill for Node.js global object (used by sockjs-client, etc.)
102
+ global: 'globalThis',
103
+ 'process.env.NODE_ENV': JSON.stringify(isDev ? 'development' : 'production'),
104
+ 'process.env.runtimeMode': JSON.stringify('fullstack'),
105
+ 'process.env.CLIENT_BASE_PATH': JSON.stringify(clientBasePath),
106
+ // Define as undefined (not empty string) when not set, so ?? fallback works
107
+ 'process.env.FORCE_FRAMEWORK_DOMAIN_MAIN': process.env
108
+ .FORCE_FRAMEWORK_DOMAIN_MAIN
109
+ ? JSON.stringify(process.env.FORCE_FRAMEWORK_DOMAIN_MAIN)
110
+ : 'undefined',
111
+ 'process.env.CWD': JSON.stringify(''),
112
+ },
113
+ server: {
114
+ port: Number(process.env.CLIENT_DEV_PORT) || 8080,
115
+ host: process.env.CLIENT_DEV_HOST || 'localhost',
116
+ strictPort: false,
117
+ cors: true,
118
+ headers: {
119
+ ...(process.env.FORCE_FRAMEWORK_DOMAIN_MAIN
120
+ ? {
121
+ 'Access-Control-Allow-Origin': process.env.FORCE_FRAMEWORK_DOMAIN_MAIN,
122
+ }
123
+ : {}),
124
+ },
125
+ watch: {
126
+ usePolling: true,
127
+ interval: 500,
128
+ },
129
+ proxy: {
130
+ // API proxy
131
+ [`${clientBasePath}/api`]: {
132
+ target: `http://localhost:${serverPort}`,
133
+ changeOrigin: true,
134
+ configure: (proxy) => {
135
+ proxy.on('error', (err, req, res) => {
136
+ sendBackendUnavailable502(err, req, res);
137
+ });
138
+ },
139
+ },
140
+ // Inner API proxy
141
+ [`${clientBasePath}/__innerapi__`]: {
142
+ target: `http://localhost:${serverPort}`,
143
+ changeOrigin: true,
144
+ configure: (proxy) => {
145
+ proxy.on('error', (err, req, res) => {
146
+ sendBackendUnavailable502(err, req, res);
147
+ });
148
+ },
149
+ },
150
+ },
151
+ },
152
+ build: {
153
+ outDir: path_1.default.resolve(rootDir, 'dist/client'),
154
+ emptyOutDir: false,
155
+ sourcemap: isDev,
156
+ minify: !isDev ? 'esbuild' : false,
157
+ rollupOptions: {
158
+ input: path_1.default.resolve(rootDir, 'client/index.html'),
159
+ output: {
160
+ // Allow code splitting (Vite default)
161
+ manualChunks: undefined,
162
+ },
163
+ },
164
+ // Copy public directory
165
+ copyPublicDir: true,
166
+ },
167
+ publicDir: path_1.default.resolve(rootDir, 'client/public'),
168
+ // Don't specify css.postcss here - let Vite pick up the project's postcss.config.js
169
+ // This allows projects to configure their own PostCSS plugins (e.g., Tailwind v4)
170
+ // Optimize deps for faster dev startup
171
+ optimizeDeps: {
172
+ include: [
173
+ 'react',
174
+ 'react-dom',
175
+ 'react/jsx-runtime',
176
+ 'react/jsx-dev-runtime',
177
+ 'clsx',
178
+ 'echarts',
179
+ // Include inspector so Vite pre-bundles it with its dependencies
180
+ ...(enableInspector ? ['@lark-apaas/miaoda-inspector'] : []),
181
+ ],
182
+ // Exclude jsx-runtime from pre-bundling (it's handled specially by React plugin)
183
+ exclude: enableInspector
184
+ ? ['@lark-apaas/miaoda-inspector-jsx-runtime']
185
+ : [],
186
+ // Pass define replacements to esbuild for pre-bundling
187
+ // Without this, process.env.X in dependencies won't be replaced
188
+ esbuildOptions: {
189
+ define: {
190
+ 'process.env.NODE_ENV': JSON.stringify(isDev ? 'development' : 'production'),
191
+ // Use actual value if set, otherwise undefined for ?? fallback
192
+ 'process.env.FORCE_FRAMEWORK_DOMAIN_MAIN': process.env
193
+ .FORCE_FRAMEWORK_DOMAIN_MAIN
194
+ ? JSON.stringify(process.env.FORCE_FRAMEWORK_DOMAIN_MAIN)
195
+ : 'undefined',
196
+ global: 'globalThis',
197
+ },
198
+ },
199
+ },
200
+ };
201
+ // Add custom middleware setup for dev server
202
+ if (isDev) {
203
+ const originalConfigureServer = config.server?.configureServer;
204
+ config.server = {
205
+ ...config.server,
206
+ };
207
+ // Use a plugin to configure the dev server with middlewares
208
+ config.plugins.push({
209
+ name: 'fullstack-dev-middlewares',
210
+ async configureServer(server) {
211
+ // Note: Express compatibility layer (res.status, res.json, req.query) is now
212
+ // handled by @lark-apaas/devtool-kits internally via registerMiddlewares()
213
+ // Register SnapDom proxy middleware
214
+ (0, snapdom_proxy_1.registerSnapDomProxyMiddleware)(server.middlewares, {
215
+ baseUrl: clientBasePath,
216
+ });
217
+ // Register devtool-kits middlewares (must await since it's async)
218
+ await (0, devtool_kits_1.registerMiddlewares)(server.middlewares, [
219
+ (0, devtool_kits_1.createDevLogsMiddleware)({
220
+ logDir: process.env.LOG_DIR || './logs',
221
+ }),
222
+ (0, devtool_kits_1.createOpenapiMiddleware)({
223
+ openapiFilePath: path_1.default.resolve(rootDir, './client/src/api/gen/openapi.json'),
224
+ serverDir: path_1.default.resolve(rootDir, './server'),
225
+ enableEnhancement: true,
226
+ }),
227
+ (0, devtool_kits_1.createCollectLogsMiddleware)({
228
+ logDir: process.env.LOG_DIR || './logs',
229
+ fileName: 'browser.log',
230
+ }),
231
+ ], {
232
+ basePath: clientBasePath,
233
+ isDev,
234
+ });
235
+ // Proxy HTML requests to backend server
236
+ server.middlewares.use((req, res, next) => {
237
+ const devServerWhiteList = [
238
+ '/@vite',
239
+ '/@fs',
240
+ '/__vite',
241
+ '/@id',
242
+ '/node_modules',
243
+ '/dev/',
244
+ '.hot-update',
245
+ ];
246
+ const isHtmlRequest = req.headers.accept?.includes('text/html');
247
+ const pathname = req.url?.split('?')[0] || '';
248
+ const isDevServerPath = devServerWhiteList.some((item) => pathname.includes(item));
249
+ const isStaticAsset = /\.(js|css|png|jpg|jpeg|gif|svg|ico|woff|woff2|ttf|eot)$/i.test(pathname);
250
+ if (isHtmlRequest && !isDevServerPath && !isStaticAsset) {
251
+ // Forward to backend server
252
+ const http = require('http');
253
+ const proxyReq = http.request({
254
+ hostname: 'localhost',
255
+ port: serverPort,
256
+ path: req.url,
257
+ method: req.method,
258
+ headers: req.headers,
259
+ }, (proxyRes) => {
260
+ res.writeHead(proxyRes.statusCode || 200, proxyRes.headers);
261
+ proxyRes.pipe(res);
262
+ });
263
+ proxyReq.on('error', (err) => {
264
+ (0, devtool_kits_1.handleDevProxyError)(err, req, res, {
265
+ target: `http://localhost:${serverPort}`,
266
+ });
267
+ });
268
+ req.pipe(proxyReq);
269
+ }
270
+ else {
271
+ next();
272
+ }
273
+ });
274
+ // Call original configureServer if exists
275
+ if (originalConfigureServer) {
276
+ originalConfigureServer(server);
277
+ }
278
+ },
279
+ });
280
+ }
281
+ return config;
282
+ }
283
+ //# sourceMappingURL=preset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset.js","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":";;;;;AAsDA,8DAyTC;AA/WD,gDAAwB;AAGxB,wEAAyC;AACzC,6EAAoE;AACpE,2DAMkC;AAElC,4EAAuE;AACvE,kEAA8D;AAC9D,4EAAuE;AACvE,kEAA6D;AAC7D,4EAAuE;AACvE,8EAAyE;AACzE,0EAAqE;AACrE,sFAAiF;AACjF,yDAAuE;AACvE,mDAA2D;AAE3D,SAAS,yBAAyB,CAChC,IAAa,EACb,IAAqB,EACrB,GAAmB;IAEnB,IAAI,GAAG,CAAC,WAAW;QAAE,OAAO;IAC5B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,cAAc,EAAE,iCAAiC;QACjD,eAAe,EAAE,qCAAqC;KACvD,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CACL,IAAI,CAAC,SAAS,CAAC;QACb,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,gCAAgC;KAC1C,CAAC,CACH,CAAC;AACJ,CAAC;AAcD,SAAgB,yBAAyB,CACvC,OAAyC;IAEzC,MAAM,EACJ,KAAK,GAAG,IAAI,EACZ,kBAAkB,GAAG,KAAK,EAC1B,UAAU,GAAG,IAAI,EACjB,cAAc,GAAG,EAAE,EACnB,UAAU,GAAG,EAAE,GAChB,GAAG,OAAO,CAAC;IAEZ,qDAAqD;IACrD,MAAM,eAAe,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM,CAAC;IAE1E,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC9B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC;IAErD,0BAA0B;IAC1B,MAAM,OAAO,GAAqD;QAChE,wEAAwE;QACxE,4DAA4D;QAC5D,IAAA,iDAAsB,GAAE;QAExB,4DAA4D;QAC5D,sDAAsD;QACtD,IAAA,yCAAkB,EAAC,EAAE,KAAK,EAAE,CAAC;QAE7B,iDAAiD;QACjD,IAAA,sBAAK,EAAC;YACJ,UAAU,EAAE,WAAW;YACvB,uEAAuE;YACvE,eAAe,EAAE,eAAe;gBAC9B,CAAC,CAAC,0CAA0C;gBAC5C,CAAC,CAAC,OAAO;YACX,KAAK,EAAE;gBACL,OAAO,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC;aAChC;YACD,uCAAuC;YACvC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;SACtD,CAAC;QAEF,wEAAwE;QACxE,gEAAgE;QAChE,eAAe,IAAI,IAAA,uCAAe,GAAE;QAEpC,2CAA2C;QAC3C,IAAA,uCAAiB,GAAE;QAEnB,0DAA0D;QAC1D,UAAU;YACR,IAAA,uCAAiB,EAAC;gBAChB,OAAO,EAAE,sBAAsB;aAChC,CAAC;QAEJ,gDAAgD;QAChD,IAAA,8BAAa,EAAC,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC;QAEtC,gCAAgC;QAChC,IAAA,uCAAiB,GAAE;QAEnB,gCAAgC;QAChC,IAAA,6BAAY,GAAE;QAEd,iEAAiE;QACjE,IAAA,qCAAgB,EAAC;YACf,KAAK;YACL,MAAM,EAAE,cAAI,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC;SAC7C,CAAC;QAEF,+BAA+B;QAC/B,KAAK,IAAI,IAAA,kCAAqB,GAAE;KACjC,CAAC;IAEF,MAAM,MAAM,GAAe;QACzB,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG;QAEzC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAa;QAE5C,OAAO,EAAE;YACP,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;YACnD,KAAK,EAAE;gBACL,2DAA2D;gBAC3D,+CAA+C;gBAC/C,GAAG,CAAC,CAAC,KAAK;oBACR,CAAC,CAAC;wBACE,8BAA8B,EAAE,cAAI,CAAC,OAAO,CAC1C,SAAS,EACT,0BAA0B,CAC3B;qBACF;oBACH,CAAC,CAAC,EAAE,CAAC;aACR;SACF;QAED,MAAM,EAAE;YACN,mEAAmE;YACnE,MAAM,EAAE,YAAY;YACpB,sBAAsB,EAAE,IAAI,CAAC,SAAS,CACpC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CACrC;YACD,yBAAyB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;YACtD,8BAA8B,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;YAC9D,4EAA4E;YAC5E,yCAAyC,EAAE,OAAO,CAAC,GAAG;iBACnD,2BAA2B;gBAC5B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;gBACzD,CAAC,CAAC,WAAW;YACf,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;SACtC;QAED,MAAM,EAAE;YACN,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI;YACjD,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,WAAW;YAChD,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,IAAI;YACV,OAAO,EAAE;gBACP,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B;oBACzC,CAAC,CAAC;wBACE,6BAA6B,EAC3B,OAAO,CAAC,GAAG,CAAC,2BAA2B;qBAC1C;oBACH,CAAC,CAAC,EAAE,CAAC;aACR;YACD,KAAK,EAAE;gBACL,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,GAAG;aACd;YACD,KAAK,EAAE;gBACL,YAAY;gBACZ,CAAC,GAAG,cAAc,MAAM,CAAC,EAAE;oBACzB,MAAM,EAAE,oBAAoB,UAAU,EAAE;oBACxC,YAAY,EAAE,IAAI;oBAClB,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;wBACnB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;4BAClC,yBAAyB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAqB,CAAC,CAAC;wBAC7D,CAAC,CAAC,CAAC;oBACL,CAAC;iBACF;gBACD,kBAAkB;gBAClB,CAAC,GAAG,cAAc,eAAe,CAAC,EAAE;oBAClC,MAAM,EAAE,oBAAoB,UAAU,EAAE;oBACxC,YAAY,EAAE,IAAI;oBAClB,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;wBACnB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;4BAClC,yBAAyB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAqB,CAAC,CAAC;wBAC7D,CAAC,CAAC,CAAC;oBACL,CAAC;iBACF;aACF;SACF;QAED,KAAK,EAAE;YACL,MAAM,EAAE,cAAI,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC;YAC5C,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;YAClC,aAAa,EAAE;gBACb,KAAK,EAAE,cAAI,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,CAAC;gBACjD,MAAM,EAAE;oBACN,sCAAsC;oBACtC,YAAY,EAAE,SAAS;iBACxB;aACF;YACD,wBAAwB;YACxB,aAAa,EAAE,IAAI;SACpB;QAED,SAAS,EAAE,cAAI,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;QAEjD,oFAAoF;QACpF,kFAAkF;QAElF,uCAAuC;QACvC,YAAY,EAAE;YACZ,OAAO,EAAE;gBACP,OAAO;gBACP,WAAW;gBACX,mBAAmB;gBACnB,uBAAuB;gBACvB,MAAM;gBACN,SAAS;gBACT,iEAAiE;gBACjE,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7D;YACD,iFAAiF;YACjF,OAAO,EAAE,eAAe;gBACtB,CAAC,CAAC,CAAC,0CAA0C,CAAC;gBAC9C,CAAC,CAAC,EAAE;YACN,uDAAuD;YACvD,gEAAgE;YAChE,cAAc,EAAE;gBACd,MAAM,EAAE;oBACN,sBAAsB,EAAE,IAAI,CAAC,SAAS,CACpC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CACrC;oBACD,+DAA+D;oBAC/D,yCAAyC,EAAE,OAAO,CAAC,GAAG;yBACnD,2BAA2B;wBAC5B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;wBACzD,CAAC,CAAC,WAAW;oBACf,MAAM,EAAE,YAAY;iBACrB;aACF;SACF;KACF,CAAC;IAEF,6CAA6C;IAC7C,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,uBAAuB,GAC3B,MAAM,CAAC,MACR,EAAE,eAAe,CAAC;QAEnB,MAAM,CAAC,MAAM,GAAG;YACd,GAAG,MAAM,CAAC,MAAM;SACjB,CAAC;QAEF,4DAA4D;QAC3D,MAAM,CAAC,OAAoB,CAAC,IAAI,CAAC;YAChC,IAAI,EAAE,2BAA2B;YACjC,KAAK,CAAC,eAAe,CAAC,MAAqB;gBACzC,6EAA6E;gBAC7E,2EAA2E;gBAE3E,oCAAoC;gBACpC,IAAA,8CAA8B,EAAC,MAAM,CAAC,WAAW,EAAE;oBACjD,OAAO,EAAE,cAAc;iBACxB,CAAC,CAAC;gBAEH,kEAAkE;gBAClE,MAAM,IAAA,kCAAmB,EACvB,MAAM,CAAC,WAAW,EAClB;oBACE,IAAA,sCAAuB,EAAC;wBACtB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ;qBACxC,CAAC;oBACF,IAAA,sCAAuB,EAAC;wBACtB,eAAe,EAAE,cAAI,CAAC,OAAO,CAC3B,OAAO,EACP,mCAAmC,CACpC;wBACD,SAAS,EAAE,cAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC;wBAC5C,iBAAiB,EAAE,IAAI;qBACxB,CAAC;oBACF,IAAA,0CAA2B,EAAC;wBAC1B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ;wBACvC,QAAQ,EAAE,aAAa;qBACxB,CAAC;iBACH,EACD;oBACE,QAAQ,EAAE,cAAc;oBACxB,KAAK;iBACN,CACF,CAAC;gBAEF,wCAAwC;gBACxC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;oBACxC,MAAM,kBAAkB,GAAG;wBACzB,QAAQ;wBACR,MAAM;wBACN,SAAS;wBACT,MAAM;wBACN,eAAe;wBACf,OAAO;wBACP,aAAa;qBACd,CAAC;oBACF,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;oBAChE,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC9C,MAAM,eAAe,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACvD,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CACxB,CAAC;oBACF,MAAM,aAAa,GAAG,0DAA0D,CAAC,IAAI,CACnF,QAAQ,CACT,CAAC;oBAEF,IAAI,aAAa,IAAI,CAAC,eAAe,IAAI,CAAC,aAAa,EAAE,CAAC;wBACxD,4BAA4B;wBAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;wBAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAC3B;4BACE,QAAQ,EAAE,WAAW;4BACrB,IAAI,EAAE,UAAU;4BAChB,IAAI,EAAE,GAAG,CAAC,GAAG;4BACb,MAAM,EAAE,GAAG,CAAC,MAAM;4BAClB,OAAO,EAAE,GAAG,CAAC,OAAO;yBACrB,EACD,CAAC,QAAyB,EAAE,EAAE;4BAC5B,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,IAAI,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;4BAC5D,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACrB,CAAC,CACF,CAAC;wBAEF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;4BAClC,IAAA,kCAAmB,EAAC,GAAG,EAAE,GAAG,EAAE,GAAqB,EAAE;gCACnD,MAAM,EAAE,oBAAoB,UAAU,EAAE;6BACzC,CAAC,CAAC;wBACL,CAAC,CAAC,CAAC;wBAEH,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACrB,CAAC;yBAAM,CAAC;wBACN,IAAI,EAAE,CAAC;oBACT,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,0CAA0C;gBAC1C,IAAI,uBAAuB,EAAE,CAAC;oBAC5B,uBAAuB,CAAC,MAAM,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Plugin } from 'vite';
2
+ /**
3
+ * Create HMR timing plugin for Vite
4
+ * Tracks file changes and compilation time, broadcasting to connected clients
5
+ */
6
+ export declare function createHmrTimingPlugin(): Plugin;
7
+ export default createHmrTimingPlugin;
8
+ //# 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,EAAiB,MAAM,MAAM,CAAC;AAGlD;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAqG9C;AAED,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,132 @@
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
+ /**
39
+ * Create HMR timing plugin for Vite
40
+ * Tracks file changes and compilation time, broadcasting to connected clients
41
+ */
42
+ function createHmrTimingPlugin() {
43
+ let startTime = 0;
44
+ let changedFiles = new Set();
45
+ return {
46
+ name: 'fullstack-hmr-timing',
47
+ configureServer(server) {
48
+ // Listen for file changes
49
+ server.watcher.on('change', (file) => {
50
+ startTime = Date.now();
51
+ changedFiles.add(file);
52
+ });
53
+ // Listen for HMR update events
54
+ server.ws.on('connection', (socket) => {
55
+ // When an HMR update is sent, calculate and broadcast timing
56
+ const originalSend = socket.send.bind(socket);
57
+ socket.send = (data) => {
58
+ try {
59
+ const parsed = JSON.parse(data);
60
+ if (parsed.type === 'update' || parsed.type === 'full-reload') {
61
+ const duration = Date.now() - startTime;
62
+ // Filter valid files - only keep actual project files
63
+ const validFiles = [...changedFiles]
64
+ .map((f) => f.replace(process.cwd(), '').replace(/\\/g, '/'))
65
+ .filter((filePath) => {
66
+ // Filter invalid files
67
+ if (!filePath || filePath.length === 0)
68
+ return false;
69
+ // Filter out node_modules files
70
+ if (filePath.includes('/node_modules/'))
71
+ return false;
72
+ // Only keep supported file types
73
+ const validExtensions = [
74
+ '.js',
75
+ '.jsx',
76
+ '.ts',
77
+ '.tsx',
78
+ '.svelte',
79
+ '.css',
80
+ '.json',
81
+ '.html',
82
+ ];
83
+ const hasValidExtension = validExtensions.some((ext) => filePath.toLowerCase().endsWith(ext));
84
+ if (!hasValidExtension)
85
+ return false;
86
+ return true;
87
+ });
88
+ // Get file statistics
89
+ const fileStats = validFiles.map((filePath) => {
90
+ const fullPath = process.cwd() + filePath;
91
+ try {
92
+ const stats = fs.statSync(fullPath);
93
+ return {
94
+ path: filePath,
95
+ size: stats.size,
96
+ };
97
+ }
98
+ catch {
99
+ return {
100
+ path: filePath,
101
+ size: 0,
102
+ };
103
+ }
104
+ });
105
+ // Calculate total file size (bytes)
106
+ const totalSize = fileStats.reduce((sum, file) => sum + file.size, 0);
107
+ const payload = {
108
+ duration,
109
+ fileCount: validFiles.length,
110
+ fileTotalSize: totalSize,
111
+ };
112
+ // Broadcast to browser
113
+ server.ws.send({
114
+ type: 'custom',
115
+ event: 'hmr-timing',
116
+ data: payload,
117
+ });
118
+ // Clear changed files after broadcasting
119
+ changedFiles.clear();
120
+ }
121
+ }
122
+ catch {
123
+ // Ignore parsing errors
124
+ }
125
+ return originalSend(data);
126
+ };
127
+ });
128
+ },
129
+ };
130
+ }
131
+ exports.default = createHmrTimingPlugin;
132
+ //# sourceMappingURL=hmr-timing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmr-timing.js","sourceRoot":"","sources":["../../src/utils/hmr-timing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
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
+ //# 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"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeBasePathWithoutTrailingSlash = normalizeBasePathWithoutTrailingSlash;
4
+ /**
5
+ * Normalize base path, ensuring it starts with '/' and does not include trailing slash
6
+ * @param basePath Original base path
7
+ * @returns Normalized base path
8
+ */
9
+ function normalizeBasePathWithoutTrailingSlash(basePath) {
10
+ const basePathWithoutTrailingSlash = basePath.endsWith('/')
11
+ ? basePath.slice(0, -1)
12
+ : basePath;
13
+ return basePathWithoutTrailingSlash;
14
+ }
15
+ //# 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;AAVD;;;;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"}
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapdom-proxy.d.ts","sourceRoot":"","sources":["../../src/utils/snapdom-proxy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,UAAU,wBAAwB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,OAAO,CAAC,MAAM,EAC3B,OAAO,GAAE,wBAA6B,GACrC,IAAI,CAiDN;AAED,eAAe,8BAA8B,CAAC"}
@@ -0,0 +1,52 @@
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.registerSnapDomProxyMiddleware = registerSnapDomProxyMiddleware;
7
+ const path_1 = __importDefault(require("path"));
8
+ function registerSnapDomProxyMiddleware(middlewares, options = {}) {
9
+ // `/dev` prefix ensures requests won't be intercepted
10
+ const { proxyUrl = '/dev/snapdom-proxy', baseUrl = '/' } = options;
11
+ const targetUrl = path_1.default.join(baseUrl, proxyUrl);
12
+ middlewares.use(async (req, res, next) => {
13
+ // Only handle GET requests to our proxy endpoint
14
+ if (req.method !== 'GET' || !req.url?.startsWith(targetUrl)) {
15
+ return next();
16
+ }
17
+ try {
18
+ // Parse query parameters
19
+ const url = new URL(req.url, `http://${req.headers.host}`);
20
+ let targetUrlParam = url.searchParams.get('url');
21
+ if (!targetUrlParam) {
22
+ res.statusCode = 400;
23
+ res.setHeader('Content-Type', 'application/json');
24
+ res.end(JSON.stringify({ error: 'Missing url parameter' }));
25
+ return;
26
+ }
27
+ targetUrlParam = decodeURIComponent(targetUrlParam);
28
+ const fetchOption = {
29
+ headers: {
30
+ cookie: req.headers.cookie || '',
31
+ },
32
+ };
33
+ const response = await fetch(targetUrlParam, fetchOption);
34
+ const contentType = response.headers.get('content-type');
35
+ if (contentType) {
36
+ res.setHeader('Content-Type', contentType);
37
+ }
38
+ const buffer = await response.arrayBuffer();
39
+ res.end(Buffer.from(buffer));
40
+ }
41
+ catch (error) {
42
+ res.statusCode = 500;
43
+ res.setHeader('Content-Type', 'application/json');
44
+ res.end(JSON.stringify({
45
+ error: 'Proxy request failed',
46
+ message: error.message,
47
+ }));
48
+ }
49
+ });
50
+ }
51
+ exports.default = registerSnapDomProxyMiddleware;
52
+ //# sourceMappingURL=snapdom-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapdom-proxy.js","sourceRoot":"","sources":["../../src/utils/snapdom-proxy.ts"],"names":[],"mappings":";;;;;AAQA,wEAoDC;AA5DD,gDAAwB;AAQxB,SAAgB,8BAA8B,CAC5C,WAA2B,EAC3B,UAAoC,EAAE;IAEtC,sDAAsD;IACtD,MAAM,EAAE,QAAQ,GAAG,oBAAoB,EAAE,OAAO,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC;IACnE,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE/C,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACvC,iDAAiD;QACjD,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,CAAC;YACH,yBAAyB;YACzB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,IAAI,cAAc,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAEjD,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;gBACrB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;gBAClD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC;gBAC5D,OAAO;YACT,CAAC;YAED,cAAc,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;YACpD,MAAM,WAAW,GAAG;gBAClB,OAAO,EAAE;oBACP,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE;iBACjC;aACF,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;YAE1D,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACzD,IAAI,WAAW,EAAE,CAAC;gBAChB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;YAC7C,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC5C,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;YACrB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;YAClD,GAAG,CAAC,GAAG,CACL,IAAI,CAAC,SAAS,CAAC;gBACb,KAAK,EAAE,sBAAsB;gBAC7B,OAAO,EAAG,KAAe,CAAC,OAAO;aAClC,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kBAAe,8BAA8B,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { Plugin } from 'vite';
2
+ export interface HtmlOutputPluginOptions {
3
+ /** Whether running in development mode */
4
+ isDev: boolean;
5
+ /** Output directory for built files */
6
+ outDir: string;
7
+ }
8
+ /**
9
+ * Vite plugin to handle HTML output:
10
+ * 1. In production: fixes HTML output path (removes extra 'client' directory)
11
+ * 2. In development: writes transformed HTML to disk for backend to serve
12
+ */
13
+ export declare function htmlOutputPlugin(options: HtmlOutputPluginOptions): Plugin;
14
+ //# sourceMappingURL=html-output-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-output-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/html-output-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAiC,MAAM,MAAM,CAAC;AAElE,MAAM,WAAW,uBAAuB;IACtC,0CAA0C;IAC1C,KAAK,EAAE,OAAO,CAAC;IACf,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,CA8HzE"}