@lovable.dev/vite-tanstack-config 0.0.1

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.
package/dist/index.cjs ADDED
@@ -0,0 +1,299 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var src_exports = {};
32
+ __export(src_exports, {
33
+ defineConfig: () => defineConfig
34
+ });
35
+ module.exports = __toCommonJS(src_exports);
36
+ var import_vite = require("vite");
37
+ var SANDBOX_ENV_VAR = "DEV_SERVER__PROJECT_PATH";
38
+ var LOVABLE_SANDBOX_ENV_VAR = "LOVABLE_SANDBOX";
39
+ function isSandboxEnvironment() {
40
+ return process.env[LOVABLE_SANDBOX_ENV_VAR] === "1" || !!process.env[SANDBOX_ENV_VAR];
41
+ }
42
+ function logWarning(message) {
43
+ console.warn(`[@lovable.dev/vite-tanstack-config] ${message}`);
44
+ }
45
+ function validateHeaders(config) {
46
+ const headers = config.server?.headers;
47
+ if (!headers)
48
+ return;
49
+ const headerKeys = Object.keys(headers);
50
+ if (headerKeys.length > 0) {
51
+ logWarning(`Your config includes server headers that will be removed in sandbox mode: ${headerKeys.join(", ")}`);
52
+ }
53
+ }
54
+ function isExternalUrl(url) {
55
+ try {
56
+ const parsed = new URL(url);
57
+ return !["localhost", "127.0.0.1", "::1", "0.0.0.0", "::"].includes(parsed.hostname);
58
+ } catch {
59
+ return false;
60
+ }
61
+ }
62
+ function validateProxy(config) {
63
+ const proxy = config.server?.proxy;
64
+ if (!proxy)
65
+ return;
66
+ for (const [path, proxyConfig] of Object.entries(proxy)) {
67
+ if (typeof proxyConfig === "string") {
68
+ if (isExternalUrl(proxyConfig)) {
69
+ logWarning(
70
+ `Proxy '${path}' targets external URL: ${proxyConfig}. This may cause issues in the sandbox environment.`
71
+ );
72
+ }
73
+ } else if (proxyConfig) {
74
+ if (proxyConfig.target && isExternalUrl(String(proxyConfig.target))) {
75
+ logWarning(
76
+ `Proxy '${path}' targets external URL: ${proxyConfig.target}. This may cause issues in the sandbox environment.`
77
+ );
78
+ }
79
+ if (proxyConfig.ws) {
80
+ logWarning(`Proxy '${path}' enables WebSocket proxying, which may interfere with HMR.`);
81
+ }
82
+ if (proxyConfig.changeOrigin) {
83
+ logWarning(`Proxy '${path}' changes origin, which may cause CORS issues.`);
84
+ }
85
+ }
86
+ }
87
+ }
88
+ function validateCors(config) {
89
+ if (config.server?.cors && typeof config.server.cors !== "boolean" && config.server.cors !== null) {
90
+ logWarning("Custom CORS config detected. Sandbox requires specific CORS settings for proxy compatibility.");
91
+ }
92
+ }
93
+ function validatePort(config) {
94
+ if (config.server?.port && config.server.port !== 8080) {
95
+ logWarning(`Port ${config.server.port} configured, but sandbox requires port 8080. Using 8080.`);
96
+ }
97
+ }
98
+ function validateConfig(config) {
99
+ validateHeaders(config);
100
+ validateProxy(config);
101
+ validateCors(config);
102
+ validatePort(config);
103
+ }
104
+ function cleanServerConfig(config) {
105
+ if (config.server?.headers || config.server?.cors || config.server?.proxy) {
106
+ const { headers: _headers, cors: _cors, proxy: _proxy, ...serverRest } = config.server;
107
+ return {
108
+ ...config,
109
+ server: serverRest
110
+ };
111
+ }
112
+ return config;
113
+ }
114
+ function devClientErrorLogger() {
115
+ const VIRTUAL_ID = "virtual:dev-client-error-handler";
116
+ const RESOLVED_ID = "\0" + VIRTUAL_ID;
117
+ return {
118
+ name: "dev-client-error-logger",
119
+ apply: "serve",
120
+ enforce: "pre",
121
+ resolveId(id) {
122
+ if (id === VIRTUAL_ID)
123
+ return RESOLVED_ID;
124
+ return void 0;
125
+ },
126
+ load(id) {
127
+ if (id !== RESOLVED_ID)
128
+ return void 0;
129
+ return [
130
+ "if (typeof window !== 'undefined' && import.meta.hot) {",
131
+ " const send = (d) => { try { import.meta.hot.send('client-runtime-error', d) } catch {} };",
132
+ " window.addEventListener('error', (e) => {",
133
+ " send({ type: 'runtime-error', message: e.message, stack: e.error?.stack, filename: e.filename, lineno: e.lineno, colno: e.colno });",
134
+ " });",
135
+ " window.addEventListener('unhandledrejection', (e) => {",
136
+ " const err = e.reason;",
137
+ " send({ type: 'unhandled-rejection', message: err?.message || String(err), stack: err?.stack });",
138
+ " });",
139
+ "}"
140
+ ].join("\n");
141
+ },
142
+ configureServer(server) {
143
+ const origConsoleError = console.error;
144
+ let forwarding = false;
145
+ console.error = (...args) => {
146
+ origConsoleError.apply(console, args);
147
+ if (forwarding)
148
+ return;
149
+ forwarding = true;
150
+ try {
151
+ const error = args[0];
152
+ if (error instanceof Error) {
153
+ server.ws.send({
154
+ type: "custom",
155
+ event: "client-runtime-error",
156
+ data: {
157
+ source: "ssr",
158
+ type: "ssr-render-error",
159
+ name: error.name,
160
+ message: error.message,
161
+ stack: error.stack
162
+ }
163
+ });
164
+ }
165
+ } finally {
166
+ forwarding = false;
167
+ }
168
+ };
169
+ server.ws.on("client-runtime-error", (data) => {
170
+ const { type, message, stack, filename, lineno, colno } = data;
171
+ const label = type === "unhandled-rejection" ? "Unhandled Rejection" : "Runtime Error";
172
+ let loc = "";
173
+ if (filename) {
174
+ loc = ` at ${filename}`;
175
+ if (lineno != null)
176
+ loc += `:${lineno}`;
177
+ if (colno != null)
178
+ loc += `:${colno}`;
179
+ }
180
+ server.config.logger.error(`
181
+ [client] ${label}: ${message}${loc}`);
182
+ if (stack) {
183
+ server.config.logger.error(stack);
184
+ }
185
+ server.ws.send({
186
+ type: "custom",
187
+ event: "client-runtime-error",
188
+ data
189
+ });
190
+ });
191
+ },
192
+ transform(code, id) {
193
+ const normalizedId = id.replace(/\\/g, "/");
194
+ if (normalizedId.includes("routes/__root")) {
195
+ return `import "${VIRTUAL_ID}";
196
+ ${code}`;
197
+ }
198
+ return void 0;
199
+ }
200
+ };
201
+ }
202
+ function devServerFnErrorLogger() {
203
+ const HMR_SEND_KEY = "__TANSTACK_SERVER_FN_HMR_SEND__";
204
+ return {
205
+ name: "dev-server-fn-error-logger",
206
+ apply: "serve",
207
+ enforce: "pre",
208
+ configureServer(server) {
209
+ globalThis[HMR_SEND_KEY] = (data) => {
210
+ server.ws.send({
211
+ type: "custom",
212
+ event: "server-fn-error",
213
+ data
214
+ });
215
+ };
216
+ },
217
+ transform(code, id) {
218
+ const normalizedId = id.replace(/\\/g, "/");
219
+ const isTargetModule = normalizedId.includes("/@tanstack/start-server-core/src/server-functions-handler.ts") || normalizedId.includes("/@tanstack/start-server-core/dist/esm/server-functions-handler.js");
220
+ if (!isTargetModule) {
221
+ return null;
222
+ }
223
+ const needle = "const unwrapped = res.result || res.error";
224
+ if (!code.includes(needle)) {
225
+ return null;
226
+ }
227
+ return code.replace(
228
+ needle,
229
+ `${needle}
230
+
231
+ if (res?.error) {
232
+ const err = res.error
233
+ const payload = {
234
+ source: 'tanstack',
235
+ type: 'server-fn-error',
236
+ method: request.method,
237
+ url: request.url,
238
+ name: err?.name ?? 'Error',
239
+ message: err?.message ?? String(err),
240
+ stack: typeof err?.stack === 'string' ? err.stack : undefined,
241
+ }
242
+ globalThis.${HMR_SEND_KEY}?.(payload)
243
+ }`
244
+ );
245
+ }
246
+ };
247
+ }
248
+ function defineConfig(options = {}) {
249
+ return async ({ command, mode: _mode }) => {
250
+ const isSandbox = isSandboxEnvironment();
251
+ const internalPlugins = [];
252
+ const tailwindcss = (await import("@tailwindcss/vite")).default;
253
+ internalPlugins.push(tailwindcss());
254
+ const tsConfigPaths = (await import("vite-tsconfig-paths")).default;
255
+ internalPlugins.push(tsConfigPaths({ projects: ["./tsconfig.json"] }));
256
+ if (options.clientErrorLogger !== false) {
257
+ internalPlugins.push(devClientErrorLogger());
258
+ }
259
+ if (options.serverFnErrorLogger !== false) {
260
+ internalPlugins.push(devServerFnErrorLogger());
261
+ }
262
+ if (options.cloudflare !== false && command === "build") {
263
+ try {
264
+ const { cloudflare } = await import("@cloudflare/vite-plugin");
265
+ const cfOptions = typeof options.cloudflare === "object" && options.cloudflare || {
266
+ viteEnvironment: { name: "ssr" }
267
+ };
268
+ internalPlugins.push(cloudflare(cfOptions));
269
+ } catch {
270
+ }
271
+ }
272
+ let config = {
273
+ resolve: {
274
+ alias: {
275
+ "@": `${process.cwd()}/src`
276
+ }
277
+ },
278
+ plugins: [...internalPlugins, ...options.plugins ?? []]
279
+ };
280
+ if (options.vite) {
281
+ config = (0, import_vite.mergeConfig)(config, options.vite);
282
+ }
283
+ if (isSandbox) {
284
+ validateConfig(config);
285
+ config = cleanServerConfig(
286
+ (0, import_vite.mergeConfig)(config, {
287
+ server: { host: "::", port: 8080, strictPort: true }
288
+ })
289
+ );
290
+ } else {
291
+ config = (0, import_vite.mergeConfig)({ server: { host: "::", port: 8080 } }, config);
292
+ }
293
+ return config;
294
+ };
295
+ }
296
+ // Annotate the CommonJS export names for ESM import in node:
297
+ 0 && (module.exports = {
298
+ defineConfig
299
+ });
@@ -0,0 +1,15 @@
1
+ import { PluginOption, UserConfig } from 'vite';
2
+
3
+ interface LovableViteTanstackOptions {
4
+ plugins?: PluginOption[];
5
+ vite?: UserConfig;
6
+ clientErrorLogger?: boolean;
7
+ serverFnErrorLogger?: boolean;
8
+ cloudflare?: Record<string, unknown> | false;
9
+ }
10
+ declare function defineConfig(options?: LovableViteTanstackOptions): (env: {
11
+ command: string;
12
+ mode: string;
13
+ }) => Promise<UserConfig>;
14
+
15
+ export { type LovableViteTanstackOptions, defineConfig };
@@ -0,0 +1,15 @@
1
+ import { PluginOption, UserConfig } from 'vite';
2
+
3
+ interface LovableViteTanstackOptions {
4
+ plugins?: PluginOption[];
5
+ vite?: UserConfig;
6
+ clientErrorLogger?: boolean;
7
+ serverFnErrorLogger?: boolean;
8
+ cloudflare?: Record<string, unknown> | false;
9
+ }
10
+ declare function defineConfig(options?: LovableViteTanstackOptions): (env: {
11
+ command: string;
12
+ mode: string;
13
+ }) => Promise<UserConfig>;
14
+
15
+ export { type LovableViteTanstackOptions, defineConfig };
package/dist/index.js ADDED
@@ -0,0 +1,264 @@
1
+ // src/index.ts
2
+ import { mergeConfig } from "vite";
3
+ var SANDBOX_ENV_VAR = "DEV_SERVER__PROJECT_PATH";
4
+ var LOVABLE_SANDBOX_ENV_VAR = "LOVABLE_SANDBOX";
5
+ function isSandboxEnvironment() {
6
+ return process.env[LOVABLE_SANDBOX_ENV_VAR] === "1" || !!process.env[SANDBOX_ENV_VAR];
7
+ }
8
+ function logWarning(message) {
9
+ console.warn(`[@lovable.dev/vite-tanstack-config] ${message}`);
10
+ }
11
+ function validateHeaders(config) {
12
+ const headers = config.server?.headers;
13
+ if (!headers)
14
+ return;
15
+ const headerKeys = Object.keys(headers);
16
+ if (headerKeys.length > 0) {
17
+ logWarning(`Your config includes server headers that will be removed in sandbox mode: ${headerKeys.join(", ")}`);
18
+ }
19
+ }
20
+ function isExternalUrl(url) {
21
+ try {
22
+ const parsed = new URL(url);
23
+ return !["localhost", "127.0.0.1", "::1", "0.0.0.0", "::"].includes(parsed.hostname);
24
+ } catch {
25
+ return false;
26
+ }
27
+ }
28
+ function validateProxy(config) {
29
+ const proxy = config.server?.proxy;
30
+ if (!proxy)
31
+ return;
32
+ for (const [path, proxyConfig] of Object.entries(proxy)) {
33
+ if (typeof proxyConfig === "string") {
34
+ if (isExternalUrl(proxyConfig)) {
35
+ logWarning(
36
+ `Proxy '${path}' targets external URL: ${proxyConfig}. This may cause issues in the sandbox environment.`
37
+ );
38
+ }
39
+ } else if (proxyConfig) {
40
+ if (proxyConfig.target && isExternalUrl(String(proxyConfig.target))) {
41
+ logWarning(
42
+ `Proxy '${path}' targets external URL: ${proxyConfig.target}. This may cause issues in the sandbox environment.`
43
+ );
44
+ }
45
+ if (proxyConfig.ws) {
46
+ logWarning(`Proxy '${path}' enables WebSocket proxying, which may interfere with HMR.`);
47
+ }
48
+ if (proxyConfig.changeOrigin) {
49
+ logWarning(`Proxy '${path}' changes origin, which may cause CORS issues.`);
50
+ }
51
+ }
52
+ }
53
+ }
54
+ function validateCors(config) {
55
+ if (config.server?.cors && typeof config.server.cors !== "boolean" && config.server.cors !== null) {
56
+ logWarning("Custom CORS config detected. Sandbox requires specific CORS settings for proxy compatibility.");
57
+ }
58
+ }
59
+ function validatePort(config) {
60
+ if (config.server?.port && config.server.port !== 8080) {
61
+ logWarning(`Port ${config.server.port} configured, but sandbox requires port 8080. Using 8080.`);
62
+ }
63
+ }
64
+ function validateConfig(config) {
65
+ validateHeaders(config);
66
+ validateProxy(config);
67
+ validateCors(config);
68
+ validatePort(config);
69
+ }
70
+ function cleanServerConfig(config) {
71
+ if (config.server?.headers || config.server?.cors || config.server?.proxy) {
72
+ const { headers: _headers, cors: _cors, proxy: _proxy, ...serverRest } = config.server;
73
+ return {
74
+ ...config,
75
+ server: serverRest
76
+ };
77
+ }
78
+ return config;
79
+ }
80
+ function devClientErrorLogger() {
81
+ const VIRTUAL_ID = "virtual:dev-client-error-handler";
82
+ const RESOLVED_ID = "\0" + VIRTUAL_ID;
83
+ return {
84
+ name: "dev-client-error-logger",
85
+ apply: "serve",
86
+ enforce: "pre",
87
+ resolveId(id) {
88
+ if (id === VIRTUAL_ID)
89
+ return RESOLVED_ID;
90
+ return void 0;
91
+ },
92
+ load(id) {
93
+ if (id !== RESOLVED_ID)
94
+ return void 0;
95
+ return [
96
+ "if (typeof window !== 'undefined' && import.meta.hot) {",
97
+ " const send = (d) => { try { import.meta.hot.send('client-runtime-error', d) } catch {} };",
98
+ " window.addEventListener('error', (e) => {",
99
+ " send({ type: 'runtime-error', message: e.message, stack: e.error?.stack, filename: e.filename, lineno: e.lineno, colno: e.colno });",
100
+ " });",
101
+ " window.addEventListener('unhandledrejection', (e) => {",
102
+ " const err = e.reason;",
103
+ " send({ type: 'unhandled-rejection', message: err?.message || String(err), stack: err?.stack });",
104
+ " });",
105
+ "}"
106
+ ].join("\n");
107
+ },
108
+ configureServer(server) {
109
+ const origConsoleError = console.error;
110
+ let forwarding = false;
111
+ console.error = (...args) => {
112
+ origConsoleError.apply(console, args);
113
+ if (forwarding)
114
+ return;
115
+ forwarding = true;
116
+ try {
117
+ const error = args[0];
118
+ if (error instanceof Error) {
119
+ server.ws.send({
120
+ type: "custom",
121
+ event: "client-runtime-error",
122
+ data: {
123
+ source: "ssr",
124
+ type: "ssr-render-error",
125
+ name: error.name,
126
+ message: error.message,
127
+ stack: error.stack
128
+ }
129
+ });
130
+ }
131
+ } finally {
132
+ forwarding = false;
133
+ }
134
+ };
135
+ server.ws.on("client-runtime-error", (data) => {
136
+ const { type, message, stack, filename, lineno, colno } = data;
137
+ const label = type === "unhandled-rejection" ? "Unhandled Rejection" : "Runtime Error";
138
+ let loc = "";
139
+ if (filename) {
140
+ loc = ` at ${filename}`;
141
+ if (lineno != null)
142
+ loc += `:${lineno}`;
143
+ if (colno != null)
144
+ loc += `:${colno}`;
145
+ }
146
+ server.config.logger.error(`
147
+ [client] ${label}: ${message}${loc}`);
148
+ if (stack) {
149
+ server.config.logger.error(stack);
150
+ }
151
+ server.ws.send({
152
+ type: "custom",
153
+ event: "client-runtime-error",
154
+ data
155
+ });
156
+ });
157
+ },
158
+ transform(code, id) {
159
+ const normalizedId = id.replace(/\\/g, "/");
160
+ if (normalizedId.includes("routes/__root")) {
161
+ return `import "${VIRTUAL_ID}";
162
+ ${code}`;
163
+ }
164
+ return void 0;
165
+ }
166
+ };
167
+ }
168
+ function devServerFnErrorLogger() {
169
+ const HMR_SEND_KEY = "__TANSTACK_SERVER_FN_HMR_SEND__";
170
+ return {
171
+ name: "dev-server-fn-error-logger",
172
+ apply: "serve",
173
+ enforce: "pre",
174
+ configureServer(server) {
175
+ globalThis[HMR_SEND_KEY] = (data) => {
176
+ server.ws.send({
177
+ type: "custom",
178
+ event: "server-fn-error",
179
+ data
180
+ });
181
+ };
182
+ },
183
+ transform(code, id) {
184
+ const normalizedId = id.replace(/\\/g, "/");
185
+ const isTargetModule = normalizedId.includes("/@tanstack/start-server-core/src/server-functions-handler.ts") || normalizedId.includes("/@tanstack/start-server-core/dist/esm/server-functions-handler.js");
186
+ if (!isTargetModule) {
187
+ return null;
188
+ }
189
+ const needle = "const unwrapped = res.result || res.error";
190
+ if (!code.includes(needle)) {
191
+ return null;
192
+ }
193
+ return code.replace(
194
+ needle,
195
+ `${needle}
196
+
197
+ if (res?.error) {
198
+ const err = res.error
199
+ const payload = {
200
+ source: 'tanstack',
201
+ type: 'server-fn-error',
202
+ method: request.method,
203
+ url: request.url,
204
+ name: err?.name ?? 'Error',
205
+ message: err?.message ?? String(err),
206
+ stack: typeof err?.stack === 'string' ? err.stack : undefined,
207
+ }
208
+ globalThis.${HMR_SEND_KEY}?.(payload)
209
+ }`
210
+ );
211
+ }
212
+ };
213
+ }
214
+ function defineConfig(options = {}) {
215
+ return async ({ command, mode: _mode }) => {
216
+ const isSandbox = isSandboxEnvironment();
217
+ const internalPlugins = [];
218
+ const tailwindcss = (await import("@tailwindcss/vite")).default;
219
+ internalPlugins.push(tailwindcss());
220
+ const tsConfigPaths = (await import("vite-tsconfig-paths")).default;
221
+ internalPlugins.push(tsConfigPaths({ projects: ["./tsconfig.json"] }));
222
+ if (options.clientErrorLogger !== false) {
223
+ internalPlugins.push(devClientErrorLogger());
224
+ }
225
+ if (options.serverFnErrorLogger !== false) {
226
+ internalPlugins.push(devServerFnErrorLogger());
227
+ }
228
+ if (options.cloudflare !== false && command === "build") {
229
+ try {
230
+ const { cloudflare } = await import("@cloudflare/vite-plugin");
231
+ const cfOptions = typeof options.cloudflare === "object" && options.cloudflare || {
232
+ viteEnvironment: { name: "ssr" }
233
+ };
234
+ internalPlugins.push(cloudflare(cfOptions));
235
+ } catch {
236
+ }
237
+ }
238
+ let config = {
239
+ resolve: {
240
+ alias: {
241
+ "@": `${process.cwd()}/src`
242
+ }
243
+ },
244
+ plugins: [...internalPlugins, ...options.plugins ?? []]
245
+ };
246
+ if (options.vite) {
247
+ config = mergeConfig(config, options.vite);
248
+ }
249
+ if (isSandbox) {
250
+ validateConfig(config);
251
+ config = cleanServerConfig(
252
+ mergeConfig(config, {
253
+ server: { host: "::", port: 8080, strictPort: true }
254
+ })
255
+ );
256
+ } else {
257
+ config = mergeConfig({ server: { host: "::", port: 8080 } }, config);
258
+ }
259
+ return config;
260
+ };
261
+ }
262
+ export {
263
+ defineConfig
264
+ };
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@lovable.dev/vite-tanstack-config",
3
+ "version": "0.0.1",
4
+ "description": "Vite config wrapper for Lovable TanStack Start projects",
5
+ "main": "./dist/index.cjs",
6
+ "module": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "type": "module",
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsup src/index.ts --format cjs,esm --dts --outDir dist",
14
+ "typecheck": "tsgo --noEmit",
15
+ "dev": "tsup src/index.ts --format cjs,esm --dts --watch",
16
+ "test": "vitest",
17
+ "prepublishOnly": "npm run clean && npm run build",
18
+ "clean": "rimraf dist",
19
+ "coverage": "vitest run --coverage"
20
+ },
21
+ "keywords": [
22
+ "vite",
23
+ "tanstack",
24
+ "lovable",
25
+ "config"
26
+ ],
27
+ "license": "MIT",
28
+ "peerDependencies": {
29
+ "vite": ">=5.0.0 <9.0.0",
30
+ "@tailwindcss/vite": ">=4.0.0",
31
+ "vite-tsconfig-paths": ">=6.0.0",
32
+ "@cloudflare/vite-plugin": ">=1.0.0"
33
+ },
34
+ "peerDependenciesMeta": {
35
+ "@cloudflare/vite-plugin": {
36
+ "optional": true
37
+ }
38
+ },
39
+ "devDependencies": {
40
+ "@cloudflare/vite-plugin": "^1.25.5",
41
+ "@tailwindcss/vite": "^4.2.1",
42
+ "@types/node": "catalog:",
43
+ "rimraf": "^5.0.0",
44
+ "tsup": "^7.2.0",
45
+ "typescript": "catalog:",
46
+ "vite": "^7.3.1",
47
+ "vite-tsconfig-paths": "^6.0.2",
48
+ "vitest": "catalog:"
49
+ }
50
+ }