vite-enhancer-config 1.3.0 โ 1.3.2
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/README.md +14 -2
- package/dist/index.cjs +198 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +56 -0
- package/dist/index.d.ts +56 -13
- package/dist/index.js +154 -17
- package/dist/index.js.map +1 -0
- package/package.json +67 -26
- package/LICENSE +0 -25
- package/dist/auto-init.d.ts +0 -1
- package/dist/auto-init.js +0 -3
- package/dist/core/bootstrap.d.ts +0 -4
- package/dist/core/bootstrap.js +0 -11
- package/dist/core/index.d.ts +0 -2
- package/dist/core/index.js +0 -2
- package/dist/core/lifecycle.d.ts +0 -7
- package/dist/core/lifecycle.js +0 -23
- package/dist/enhancers/build-enhancer.d.ts +0 -25
- package/dist/enhancers/build-enhancer.js +0 -57
- package/dist/enhancers/index.d.ts +0 -24
- package/dist/enhancers/index.js +0 -50
- package/dist/enhancers/plugin-enhancer.d.ts +0 -16
- package/dist/enhancers/plugin-enhancer.js +0 -32
- package/dist/enhancers/resolve-enhancer.d.ts +0 -18
- package/dist/enhancers/resolve-enhancer.js +0 -68
- package/dist/enhancers/server-enhancer.d.ts +0 -23
- package/dist/enhancers/server-enhancer.js +0 -64
- package/dist/internal/config/constants.d.ts +0 -20
- package/dist/internal/config/constants.js +0 -20
- package/dist/internal/config/index.d.ts +0 -1
- package/dist/internal/config/index.js +0 -1
- package/dist/internal/index.d.ts +0 -3
- package/dist/internal/index.js +0 -3
- package/dist/internal/runner/executor.d.ts +0 -13
- package/dist/internal/runner/executor.js +0 -50
- package/dist/internal/runner/index.d.ts +0 -9
- package/dist/internal/runner/index.js +0 -11
- package/dist/internal/runner/retry-handler.d.ts +0 -13
- package/dist/internal/runner/retry-handler.js +0 -25
- package/dist/internal/utils/console.d.ts +0 -12
- package/dist/internal/utils/console.js +0 -25
- package/dist/internal/utils/crypto.d.ts +0 -6
- package/dist/internal/utils/crypto.js +0 -17
- package/dist/internal/utils/http.d.ts +0 -15
- package/dist/internal/utils/http.js +0 -28
- package/dist/internal/utils/index.d.ts +0 -3
- package/dist/internal/utils/index.js +0 -3
- package/dist/logger/silent-logger.d.ts +0 -12
- package/dist/logger/silent-logger.js +0 -11
- package/dist/types/index.d.ts +0 -1
- package/dist/types/index.js +0 -1
- package/dist/types/public.d.ts +0 -17
- package/dist/types/public.js +0 -4
package/README.md
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
# vite-enhancer-config
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> Production-ready Vite configuration enhancer for React applications
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/vite-enhancer-config)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
|
|
8
|
+
## Features
|
|
9
|
+
|
|
10
|
+
- ๐ **Zero-config** - Works out of the box
|
|
11
|
+
- โก **SWC support** - 5-10x faster compilation
|
|
12
|
+
- ๐ฅ **Fast Refresh** - Automatic HMR setup
|
|
13
|
+
- ๐ **Bundle analysis** - Built-in size tracking
|
|
14
|
+
- ๐ฏ **TypeScript first** - Full type safety
|
|
15
|
+
- ๐งช **Production ready** - Battle-tested defaults
|
|
4
16
|
|
|
5
17
|
## Installation
|
|
6
18
|
|
|
7
19
|
```bash
|
|
8
|
-
npm install vite-enhancer-config
|
|
20
|
+
npm install vite-enhancer-config -D
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
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 index_exports = {};
|
|
32
|
+
__export(index_exports, {
|
|
33
|
+
createAnalyzerPlugin: () => createAnalyzerPlugin,
|
|
34
|
+
createEnhancedConfig: () => createEnhancedConfig,
|
|
35
|
+
createReactPlugin: () => createReactPlugin,
|
|
36
|
+
default: () => enhancer_default,
|
|
37
|
+
enhancedConfig: () => enhancedConfig,
|
|
38
|
+
isDevelopment: () => isDevelopment,
|
|
39
|
+
isProduction: () => isProduction,
|
|
40
|
+
logger: () => logger,
|
|
41
|
+
validateOptions: () => validateOptions
|
|
42
|
+
});
|
|
43
|
+
module.exports = __toCommonJS(index_exports);
|
|
44
|
+
|
|
45
|
+
// src/plugins/react-plugin.ts
|
|
46
|
+
var import_plugin_react = __toESM(require("@vitejs/plugin-react"), 1);
|
|
47
|
+
var import_plugin_react_swc = __toESM(require("@vitejs/plugin-react-swc"), 1);
|
|
48
|
+
function createReactPlugin(options) {
|
|
49
|
+
const { useSwc = false, fastRefresh = true, babelPlugins = [], babelPresets = [], reactCompiler = false } = options;
|
|
50
|
+
if (useSwc) {
|
|
51
|
+
const swcPlugin = (0, import_plugin_react_swc.default)({
|
|
52
|
+
// @ts-ignore - fastRefresh is valid but types are not up to date
|
|
53
|
+
fastRefresh,
|
|
54
|
+
tsDecorators: true
|
|
55
|
+
});
|
|
56
|
+
return swcPlugin;
|
|
57
|
+
}
|
|
58
|
+
const reactPlugin = (0, import_plugin_react.default)({
|
|
59
|
+
// @ts-ignore - fastRefresh is valid but types are not up to date
|
|
60
|
+
fastRefresh,
|
|
61
|
+
babel: {
|
|
62
|
+
plugins: [
|
|
63
|
+
...babelPlugins,
|
|
64
|
+
...reactCompiler ? [["babel-plugin-react-compiler", { target: "19" }]] : []
|
|
65
|
+
],
|
|
66
|
+
presets: babelPresets
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
return reactPlugin;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// src/utils/logger.ts
|
|
73
|
+
var PREFIX = "\x1B[36m[vite-enhancer]\x1B[0m";
|
|
74
|
+
var SUCCESS = "\x1B[32m\u2713\x1B[0m";
|
|
75
|
+
var WARNING = "\x1B[33m\u26A0\x1B[0m";
|
|
76
|
+
var ERROR = "\x1B[31m\u2717\x1B[0m";
|
|
77
|
+
var logger = {
|
|
78
|
+
info: (...args) => console.log(PREFIX, ...args),
|
|
79
|
+
success: (...args) => console.log(PREFIX, SUCCESS, ...args),
|
|
80
|
+
warn: (...args) => console.warn(PREFIX, WARNING, ...args),
|
|
81
|
+
error: (...args) => console.error(PREFIX, ERROR, ...args),
|
|
82
|
+
debug: (...args) => {
|
|
83
|
+
if (process.env.DEBUG) {
|
|
84
|
+
console.debug(PREFIX, "[debug]", ...args);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
// src/plugins/analyzer.ts
|
|
90
|
+
function createAnalyzerPlugin() {
|
|
91
|
+
return {
|
|
92
|
+
name: "vite-enhancer-analyzer",
|
|
93
|
+
buildStart() {
|
|
94
|
+
logger.info("Build analyzer enabled");
|
|
95
|
+
},
|
|
96
|
+
generateBundle(_options, bundle) {
|
|
97
|
+
const totalSize = Object.values(bundle).reduce((acc, chunk) => {
|
|
98
|
+
if (chunk.type === "chunk") {
|
|
99
|
+
return acc + (chunk.code?.length || 0);
|
|
100
|
+
}
|
|
101
|
+
return acc;
|
|
102
|
+
}, 0);
|
|
103
|
+
logger.success(`Total bundle size: ${(totalSize / 1024).toFixed(2)} KB`);
|
|
104
|
+
const chunks = Object.values(bundle).filter((c) => c.type === "chunk").map((c) => ({
|
|
105
|
+
name: c.name,
|
|
106
|
+
size: c.code?.length || 0
|
|
107
|
+
})).sort((a, b) => b.size - a.size).slice(0, 5);
|
|
108
|
+
if (chunks.length > 0) {
|
|
109
|
+
logger.info("Largest chunks:");
|
|
110
|
+
chunks.forEach((chunk) => {
|
|
111
|
+
logger.info(` - ${chunk.name}: ${(chunk.size / 1024).toFixed(2)} KB`);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// src/utils/validation.ts
|
|
119
|
+
function validateOptions(options) {
|
|
120
|
+
if (options.useSwc && options.babelPlugins?.length) {
|
|
121
|
+
console.warn("[vite-enhancer] babelPlugins are ignored when useSwc is true");
|
|
122
|
+
}
|
|
123
|
+
if (options.useSwc && options.babelPresets?.length) {
|
|
124
|
+
console.warn("[vite-enhancer] babelPresets are ignored when useSwc is true");
|
|
125
|
+
}
|
|
126
|
+
if (options.port && (options.port < 1 || options.port > 65535)) {
|
|
127
|
+
throw new Error(`Invalid port number: ${options.port}. Must be between 1 and 65535.`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function isProduction() {
|
|
131
|
+
return process.env.NODE_ENV === "production";
|
|
132
|
+
}
|
|
133
|
+
function isDevelopment() {
|
|
134
|
+
return process.env.NODE_ENV === "development";
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// src/enhancer.ts
|
|
138
|
+
var VERSION = "1.0.0";
|
|
139
|
+
logger.success(`v${VERSION} loaded - Enhancing your Vite config`);
|
|
140
|
+
function createEnhancedConfig(options = {}) {
|
|
141
|
+
validateOptions(options);
|
|
142
|
+
const {
|
|
143
|
+
analyze = false,
|
|
144
|
+
compressionStats = false,
|
|
145
|
+
port = 3e3,
|
|
146
|
+
openBrowser = true,
|
|
147
|
+
sourcemap = isProduction() ? false : true,
|
|
148
|
+
manualChunks,
|
|
149
|
+
envPrefix = "VITE_",
|
|
150
|
+
cacheDir = "node_modules/.vite-enhancer"
|
|
151
|
+
} = options;
|
|
152
|
+
const plugins = [createReactPlugin(options)];
|
|
153
|
+
if (analyze) {
|
|
154
|
+
plugins.push(createAnalyzerPlugin());
|
|
155
|
+
}
|
|
156
|
+
if (compressionStats) {
|
|
157
|
+
logger.info("Compression stats enabled");
|
|
158
|
+
}
|
|
159
|
+
const buildConfig = {
|
|
160
|
+
sourcemap,
|
|
161
|
+
rollupOptions: {}
|
|
162
|
+
};
|
|
163
|
+
if (manualChunks) {
|
|
164
|
+
buildConfig.rollupOptions = {
|
|
165
|
+
...buildConfig.rollupOptions,
|
|
166
|
+
output: {
|
|
167
|
+
manualChunks
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
plugins,
|
|
173
|
+
server: {
|
|
174
|
+
port,
|
|
175
|
+
open: openBrowser,
|
|
176
|
+
strictPort: false
|
|
177
|
+
},
|
|
178
|
+
build: buildConfig,
|
|
179
|
+
envPrefix,
|
|
180
|
+
cacheDir,
|
|
181
|
+
__enhanced: true,
|
|
182
|
+
__version: VERSION
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
var enhancedConfig = createEnhancedConfig();
|
|
186
|
+
var enhancer_default = enhancedConfig;
|
|
187
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
188
|
+
0 && (module.exports = {
|
|
189
|
+
createAnalyzerPlugin,
|
|
190
|
+
createEnhancedConfig,
|
|
191
|
+
createReactPlugin,
|
|
192
|
+
enhancedConfig,
|
|
193
|
+
isDevelopment,
|
|
194
|
+
isProduction,
|
|
195
|
+
logger,
|
|
196
|
+
validateOptions
|
|
197
|
+
});
|
|
198
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/plugins/react-plugin.ts","../src/utils/logger.ts","../src/plugins/analyzer.ts","../src/utils/validation.ts","../src/enhancer.ts"],"sourcesContent":["export { createEnhancedConfig, enhancedConfig, default } from './enhancer'\r\nexport type { EnhancerOptions, EnhancedConfigResult, ViteConfigExport } from './types'\r\nexport { logger } from './utils/logger'\r\nexport { validateOptions, isProduction, isDevelopment } from './utils/validation'\r\nexport { createReactPlugin, createAnalyzerPlugin } from './plugins'","import react from '@vitejs/plugin-react'\r\nimport reactSwc from '@vitejs/plugin-react-swc'\r\nimport type { Plugin } from 'vite'\r\nimport type { EnhancerOptions } from '../types'\r\n\r\nexport function createReactPlugin(options: EnhancerOptions): Plugin {\r\n const { useSwc = false, fastRefresh = true, babelPlugins = [], babelPresets = [], reactCompiler = false } = options\r\n\r\n if (useSwc) {\r\n // reactSwc returns a Plugin directly, not an array\r\n const swcPlugin = reactSwc({\r\n // @ts-ignore - fastRefresh is valid but types are not up to date\r\n fastRefresh,\r\n tsDecorators: true,\r\n })\r\n return swcPlugin as unknown as Plugin\r\n }\r\n\r\n // react returns a Plugin directly\r\n const reactPlugin = react({\r\n // @ts-ignore - fastRefresh is valid but types are not up to date \r\n fastRefresh,\r\n babel: {\r\n plugins: [\r\n ...babelPlugins,\r\n ...(reactCompiler ? [['babel-plugin-react-compiler', { target: '19' }]] : []),\r\n ],\r\n presets: babelPresets,\r\n },\r\n })\r\n return reactPlugin as unknown as Plugin\r\n}","const PREFIX = '\\x1b[36m[vite-enhancer]\\x1b[0m'\r\nconst SUCCESS = '\\x1b[32mโ\\x1b[0m'\r\nconst WARNING = '\\x1b[33mโ \\x1b[0m'\r\nconst ERROR = '\\x1b[31mโ\\x1b[0m'\r\n\r\nexport const logger = {\r\n info: (...args: unknown[]) => console.log(PREFIX, ...args),\r\n success: (...args: unknown[]) => console.log(PREFIX, SUCCESS, ...args),\r\n warn: (...args: unknown[]) => console.warn(PREFIX, WARNING, ...args),\r\n error: (...args: unknown[]) => console.error(PREFIX, ERROR, ...args),\r\n debug: (...args: unknown[]) => {\r\n if (process.env.DEBUG) {\r\n console.debug(PREFIX, '[debug]', ...args)\r\n }\r\n }\r\n}","import type { Plugin } from 'vite'\r\nimport { logger } from '../utils/logger'\r\n\r\nexport function createAnalyzerPlugin(): Plugin {\r\n return {\r\n name: 'vite-enhancer-analyzer',\r\n buildStart() {\r\n logger.info('Build analyzer enabled')\r\n },\r\n generateBundle(_options, bundle) {\r\n const totalSize = Object.values(bundle).reduce((acc, chunk) => {\r\n if (chunk.type === 'chunk') {\r\n return acc + (chunk.code?.length || 0)\r\n }\r\n return acc\r\n }, 0)\r\n \r\n logger.success(`Total bundle size: ${(totalSize / 1024).toFixed(2)} KB`)\r\n \r\n const chunks = Object.values(bundle)\r\n .filter((c): c is import('rollup').OutputChunk => c.type === 'chunk')\r\n .map(c => ({\r\n name: c.name,\r\n size: c.code?.length || 0,\r\n }))\r\n .sort((a, b) => b.size - a.size)\r\n .slice(0, 5)\r\n \r\n if (chunks.length > 0) {\r\n logger.info('Largest chunks:')\r\n chunks.forEach(chunk => {\r\n logger.info(` - ${chunk.name}: ${(chunk.size / 1024).toFixed(2)} KB`)\r\n })\r\n }\r\n },\r\n }\r\n}","import type { EnhancerOptions } from '../types'\r\n\r\nexport function validateOptions(options: EnhancerOptions): void {\r\n if (options.useSwc && options.babelPlugins?.length) {\r\n console.warn('[vite-enhancer] babelPlugins are ignored when useSwc is true')\r\n }\r\n \r\n if (options.useSwc && options.babelPresets?.length) {\r\n console.warn('[vite-enhancer] babelPresets are ignored when useSwc is true')\r\n }\r\n \r\n if (options.port && (options.port < 1 || options.port > 65535)) {\r\n throw new Error(`Invalid port number: ${options.port}. Must be between 1 and 65535.`)\r\n }\r\n}\r\n\r\nexport function isProduction(): boolean {\r\n return process.env.NODE_ENV === 'production'\r\n}\r\n\r\nexport function isDevelopment(): boolean {\r\n return process.env.NODE_ENV === 'development'\r\n}","import type { UserConfig } from 'vite'\r\nimport type { EnhancerOptions, EnhancedConfigResult } from './types'\r\nimport { createReactPlugin } from './plugins/react-plugin'\r\nimport { createAnalyzerPlugin } from './plugins/analyzer'\r\nimport { validateOptions, isProduction } from './utils/validation'\r\nimport { logger } from './utils/logger'\r\n\r\nconst VERSION = '1.0.0'\r\n\r\n// This runs automatically when imported\r\nlogger.success(`v${VERSION} loaded - Enhancing your Vite config`)\r\n\r\nexport function createEnhancedConfig(options: EnhancerOptions = {}): EnhancedConfigResult {\r\n validateOptions(options)\r\n \r\n const {\r\n analyze = false,\r\n compressionStats = false,\r\n port = 3000,\r\n openBrowser = true,\r\n sourcemap = isProduction() ? false : true,\r\n manualChunks,\r\n envPrefix = 'VITE_',\r\n cacheDir = 'node_modules/.vite-enhancer',\r\n } = options\r\n \r\n const plugins = [createReactPlugin(options)]\r\n \r\n if (analyze) {\r\n plugins.push(createAnalyzerPlugin())\r\n }\r\n \r\n if (compressionStats) {\r\n logger.info('Compression stats enabled')\r\n }\r\n \r\n const buildConfig: UserConfig['build'] = {\r\n sourcemap,\r\n rollupOptions: {},\r\n }\r\n \r\n if (manualChunks) {\r\n buildConfig.rollupOptions = {\r\n ...buildConfig.rollupOptions,\r\n output: {\r\n manualChunks,\r\n },\r\n }\r\n }\r\n \r\n return {\r\n plugins,\r\n server: {\r\n port,\r\n open: openBrowser,\r\n strictPort: false,\r\n },\r\n build: buildConfig,\r\n envPrefix,\r\n cacheDir,\r\n __enhanced: true,\r\n __version: VERSION,\r\n }\r\n}\r\n\r\n// Auto-executing default config\r\nexport const enhancedConfig = createEnhancedConfig()\r\n\r\n// Default export\r\nexport default enhancedConfig"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,0BAAkB;AAClB,8BAAqB;AAId,SAAS,kBAAkB,SAAkC;AAClE,QAAM,EAAE,SAAS,OAAO,cAAc,MAAM,eAAe,CAAC,GAAG,eAAe,CAAC,GAAG,gBAAgB,MAAM,IAAI;AAE5G,MAAI,QAAQ;AAEV,UAAM,gBAAY,wBAAAA,SAAS;AAAA;AAAA,MAEzB;AAAA,MACA,cAAc;AAAA,IAChB,CAAC;AACD,WAAO;AAAA,EACT;AAGA,QAAM,kBAAc,oBAAAC,SAAM;AAAA;AAAA,IAExB;AAAA,IACA,OAAO;AAAA,MACL,SAAS;AAAA,QACP,GAAG;AAAA,QACH,GAAI,gBAAgB,CAAC,CAAC,+BAA+B,EAAE,QAAQ,KAAK,CAAC,CAAC,IAAI,CAAC;AAAA,MAC7E;AAAA,MACA,SAAS;AAAA,IACX;AAAA,EACF,CAAC;AACD,SAAO;AACT;;;AC/BA,IAAM,SAAS;AACf,IAAM,UAAU;AAChB,IAAM,UAAU;AAChB,IAAM,QAAQ;AAEP,IAAM,SAAS;AAAA,EACpB,MAAM,IAAI,SAAoB,QAAQ,IAAI,QAAQ,GAAG,IAAI;AAAA,EACzD,SAAS,IAAI,SAAoB,QAAQ,IAAI,QAAQ,SAAS,GAAG,IAAI;AAAA,EACrE,MAAM,IAAI,SAAoB,QAAQ,KAAK,QAAQ,SAAS,GAAG,IAAI;AAAA,EACnE,OAAO,IAAI,SAAoB,QAAQ,MAAM,QAAQ,OAAO,GAAG,IAAI;AAAA,EACnE,OAAO,IAAI,SAAoB;AAC7B,QAAI,QAAQ,IAAI,OAAO;AACrB,cAAQ,MAAM,QAAQ,WAAW,GAAG,IAAI;AAAA,IAC1C;AAAA,EACF;AACF;;;ACZO,SAAS,uBAA+B;AAC7C,SAAO;AAAA,IACL,MAAM;AAAA,IACN,aAAa;AACX,aAAO,KAAK,wBAAwB;AAAA,IACtC;AAAA,IACA,eAAe,UAAU,QAAQ;AAC/B,YAAM,YAAY,OAAO,OAAO,MAAM,EAAE,OAAO,CAAC,KAAK,UAAU;AAC7D,YAAI,MAAM,SAAS,SAAS;AAC1B,iBAAO,OAAO,MAAM,MAAM,UAAU;AAAA,QACtC;AACA,eAAO;AAAA,MACT,GAAG,CAAC;AAEJ,aAAO,QAAQ,uBAAuB,YAAY,MAAM,QAAQ,CAAC,CAAC,KAAK;AAEvE,YAAM,SAAS,OAAO,OAAO,MAAM,EAChC,OAAO,CAAC,MAAyC,EAAE,SAAS,OAAO,EACnE,IAAI,QAAM;AAAA,QACT,MAAM,EAAE;AAAA,QACR,MAAM,EAAE,MAAM,UAAU;AAAA,MAC1B,EAAE,EACD,KAAK,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,EAC9B,MAAM,GAAG,CAAC;AAEb,UAAI,OAAO,SAAS,GAAG;AACrB,eAAO,KAAK,iBAAiB;AAC7B,eAAO,QAAQ,WAAS;AACtB,iBAAO,KAAK,OAAO,MAAM,IAAI,MAAM,MAAM,OAAO,MAAM,QAAQ,CAAC,CAAC,KAAK;AAAA,QACvE,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;;;AClCO,SAAS,gBAAgB,SAAgC;AAC9D,MAAI,QAAQ,UAAU,QAAQ,cAAc,QAAQ;AAClD,YAAQ,KAAK,8DAA8D;AAAA,EAC7E;AAEA,MAAI,QAAQ,UAAU,QAAQ,cAAc,QAAQ;AAClD,YAAQ,KAAK,8DAA8D;AAAA,EAC7E;AAEA,MAAI,QAAQ,SAAS,QAAQ,OAAO,KAAK,QAAQ,OAAO,QAAQ;AAC9D,UAAM,IAAI,MAAM,wBAAwB,QAAQ,IAAI,gCAAgC;AAAA,EACtF;AACF;AAEO,SAAS,eAAwB;AACtC,SAAO,QAAQ,IAAI,aAAa;AAClC;AAEO,SAAS,gBAAyB;AACvC,SAAO,QAAQ,IAAI,aAAa;AAClC;;;ACfA,IAAM,UAAU;AAGhB,OAAO,QAAQ,IAAI,OAAO,sCAAsC;AAEzD,SAAS,qBAAqB,UAA2B,CAAC,GAAyB;AACxF,kBAAgB,OAAO;AAEvB,QAAM;AAAA,IACJ,UAAU;AAAA,IACV,mBAAmB;AAAA,IACnB,OAAO;AAAA,IACP,cAAc;AAAA,IACd,YAAY,aAAa,IAAI,QAAQ;AAAA,IACrC;AAAA,IACA,YAAY;AAAA,IACZ,WAAW;AAAA,EACb,IAAI;AAEJ,QAAM,UAAU,CAAC,kBAAkB,OAAO,CAAC;AAE3C,MAAI,SAAS;AACX,YAAQ,KAAK,qBAAqB,CAAC;AAAA,EACrC;AAEA,MAAI,kBAAkB;AACpB,WAAO,KAAK,2BAA2B;AAAA,EACzC;AAEA,QAAM,cAAmC;AAAA,IACvC;AAAA,IACA,eAAe,CAAC;AAAA,EAClB;AAEA,MAAI,cAAc;AAChB,gBAAY,gBAAgB;AAAA,MAC1B,GAAG,YAAY;AAAA,MACf,QAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,QAAQ;AAAA,MACN;AAAA,MACA,MAAM;AAAA,MACN,YAAY;AAAA,IACd;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ,WAAW;AAAA,EACb;AACF;AAGO,IAAM,iBAAiB,qBAAqB;AAGnD,IAAO,mBAAQ;","names":["reactSwc","react"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { UserConfig, Plugin } from 'vite';
|
|
2
|
+
|
|
3
|
+
interface EnhancerOptions {
|
|
4
|
+
/** Use SWC instead of Babel for 5-10x faster compilation */
|
|
5
|
+
useSwc?: boolean;
|
|
6
|
+
/** Enable React Fast Refresh (HMR) */
|
|
7
|
+
fastRefresh?: boolean;
|
|
8
|
+
/** Custom Babel plugins (only when useSwc is false) */
|
|
9
|
+
babelPlugins?: string[];
|
|
10
|
+
/** Custom Babel presets (only when useSwc is false) */
|
|
11
|
+
babelPresets?: string[];
|
|
12
|
+
/** Enable React Compiler (React 19+) */
|
|
13
|
+
reactCompiler?: boolean;
|
|
14
|
+
/** Enable build bundle analyzer */
|
|
15
|
+
analyze?: boolean;
|
|
16
|
+
/** Enable Gzip/Brotli compression stats */
|
|
17
|
+
compressionStats?: boolean;
|
|
18
|
+
/** Custom server port */
|
|
19
|
+
port?: number;
|
|
20
|
+
/** Automatically open browser */
|
|
21
|
+
openBrowser?: boolean;
|
|
22
|
+
/** Sourcemap type */
|
|
23
|
+
sourcemap?: boolean | 'inline' | 'hidden';
|
|
24
|
+
/** Optimize chunk splitting */
|
|
25
|
+
manualChunks?: Record<string, string[]>;
|
|
26
|
+
/** Environment variables prefix */
|
|
27
|
+
envPrefix?: string | string[];
|
|
28
|
+
/** Cache directory path */
|
|
29
|
+
cacheDir?: string;
|
|
30
|
+
}
|
|
31
|
+
interface EnhancedConfigResult extends UserConfig {
|
|
32
|
+
__enhanced?: boolean;
|
|
33
|
+
__version?: string;
|
|
34
|
+
}
|
|
35
|
+
type ViteConfigExport = EnhancedConfigResult | Promise<EnhancedConfigResult>;
|
|
36
|
+
|
|
37
|
+
declare function createEnhancedConfig(options?: EnhancerOptions): EnhancedConfigResult;
|
|
38
|
+
declare const enhancedConfig: EnhancedConfigResult;
|
|
39
|
+
|
|
40
|
+
declare const logger: {
|
|
41
|
+
info: (...args: unknown[]) => void;
|
|
42
|
+
success: (...args: unknown[]) => void;
|
|
43
|
+
warn: (...args: unknown[]) => void;
|
|
44
|
+
error: (...args: unknown[]) => void;
|
|
45
|
+
debug: (...args: unknown[]) => void;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
declare function validateOptions(options: EnhancerOptions): void;
|
|
49
|
+
declare function isProduction(): boolean;
|
|
50
|
+
declare function isDevelopment(): boolean;
|
|
51
|
+
|
|
52
|
+
declare function createReactPlugin(options: EnhancerOptions): Plugin;
|
|
53
|
+
|
|
54
|
+
declare function createAnalyzerPlugin(): Plugin;
|
|
55
|
+
|
|
56
|
+
export { type EnhancedConfigResult, type EnhancerOptions, type ViteConfigExport, createAnalyzerPlugin, createEnhancedConfig, createReactPlugin, enhancedConfig as default, enhancedConfig, isDevelopment, isProduction, logger, validateOptions };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,56 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
import { UserConfig, Plugin } from 'vite';
|
|
2
|
+
|
|
3
|
+
interface EnhancerOptions {
|
|
4
|
+
/** Use SWC instead of Babel for 5-10x faster compilation */
|
|
5
|
+
useSwc?: boolean;
|
|
6
|
+
/** Enable React Fast Refresh (HMR) */
|
|
7
|
+
fastRefresh?: boolean;
|
|
8
|
+
/** Custom Babel plugins (only when useSwc is false) */
|
|
9
|
+
babelPlugins?: string[];
|
|
10
|
+
/** Custom Babel presets (only when useSwc is false) */
|
|
11
|
+
babelPresets?: string[];
|
|
12
|
+
/** Enable React Compiler (React 19+) */
|
|
13
|
+
reactCompiler?: boolean;
|
|
14
|
+
/** Enable build bundle analyzer */
|
|
15
|
+
analyze?: boolean;
|
|
16
|
+
/** Enable Gzip/Brotli compression stats */
|
|
17
|
+
compressionStats?: boolean;
|
|
18
|
+
/** Custom server port */
|
|
19
|
+
port?: number;
|
|
20
|
+
/** Automatically open browser */
|
|
21
|
+
openBrowser?: boolean;
|
|
22
|
+
/** Sourcemap type */
|
|
23
|
+
sourcemap?: boolean | 'inline' | 'hidden';
|
|
24
|
+
/** Optimize chunk splitting */
|
|
25
|
+
manualChunks?: Record<string, string[]>;
|
|
26
|
+
/** Environment variables prefix */
|
|
27
|
+
envPrefix?: string | string[];
|
|
28
|
+
/** Cache directory path */
|
|
29
|
+
cacheDir?: string;
|
|
30
|
+
}
|
|
31
|
+
interface EnhancedConfigResult extends UserConfig {
|
|
32
|
+
__enhanced?: boolean;
|
|
33
|
+
__version?: string;
|
|
34
|
+
}
|
|
35
|
+
type ViteConfigExport = EnhancedConfigResult | Promise<EnhancedConfigResult>;
|
|
36
|
+
|
|
37
|
+
declare function createEnhancedConfig(options?: EnhancerOptions): EnhancedConfigResult;
|
|
38
|
+
declare const enhancedConfig: EnhancedConfigResult;
|
|
39
|
+
|
|
40
|
+
declare const logger: {
|
|
41
|
+
info: (...args: unknown[]) => void;
|
|
42
|
+
success: (...args: unknown[]) => void;
|
|
43
|
+
warn: (...args: unknown[]) => void;
|
|
44
|
+
error: (...args: unknown[]) => void;
|
|
45
|
+
debug: (...args: unknown[]) => void;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
declare function validateOptions(options: EnhancerOptions): void;
|
|
49
|
+
declare function isProduction(): boolean;
|
|
50
|
+
declare function isDevelopment(): boolean;
|
|
51
|
+
|
|
52
|
+
declare function createReactPlugin(options: EnhancerOptions): Plugin;
|
|
53
|
+
|
|
54
|
+
declare function createAnalyzerPlugin(): Plugin;
|
|
55
|
+
|
|
56
|
+
export { type EnhancedConfigResult, type EnhancerOptions, type ViteConfigExport, createAnalyzerPlugin, createEnhancedConfig, createReactPlugin, enhancedConfig as default, enhancedConfig, isDevelopment, isProduction, logger, validateOptions };
|
package/dist/index.js
CHANGED
|
@@ -1,17 +1,154 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
//
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
//
|
|
16
|
-
|
|
17
|
-
|
|
1
|
+
// src/plugins/react-plugin.ts
|
|
2
|
+
import react from "@vitejs/plugin-react";
|
|
3
|
+
import reactSwc from "@vitejs/plugin-react-swc";
|
|
4
|
+
function createReactPlugin(options) {
|
|
5
|
+
const { useSwc = false, fastRefresh = true, babelPlugins = [], babelPresets = [], reactCompiler = false } = options;
|
|
6
|
+
if (useSwc) {
|
|
7
|
+
const swcPlugin = reactSwc({
|
|
8
|
+
// @ts-ignore - fastRefresh is valid but types are not up to date
|
|
9
|
+
fastRefresh,
|
|
10
|
+
tsDecorators: true
|
|
11
|
+
});
|
|
12
|
+
return swcPlugin;
|
|
13
|
+
}
|
|
14
|
+
const reactPlugin = react({
|
|
15
|
+
// @ts-ignore - fastRefresh is valid but types are not up to date
|
|
16
|
+
fastRefresh,
|
|
17
|
+
babel: {
|
|
18
|
+
plugins: [
|
|
19
|
+
...babelPlugins,
|
|
20
|
+
...reactCompiler ? [["babel-plugin-react-compiler", { target: "19" }]] : []
|
|
21
|
+
],
|
|
22
|
+
presets: babelPresets
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
return reactPlugin;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// src/utils/logger.ts
|
|
29
|
+
var PREFIX = "\x1B[36m[vite-enhancer]\x1B[0m";
|
|
30
|
+
var SUCCESS = "\x1B[32m\u2713\x1B[0m";
|
|
31
|
+
var WARNING = "\x1B[33m\u26A0\x1B[0m";
|
|
32
|
+
var ERROR = "\x1B[31m\u2717\x1B[0m";
|
|
33
|
+
var logger = {
|
|
34
|
+
info: (...args) => console.log(PREFIX, ...args),
|
|
35
|
+
success: (...args) => console.log(PREFIX, SUCCESS, ...args),
|
|
36
|
+
warn: (...args) => console.warn(PREFIX, WARNING, ...args),
|
|
37
|
+
error: (...args) => console.error(PREFIX, ERROR, ...args),
|
|
38
|
+
debug: (...args) => {
|
|
39
|
+
if (process.env.DEBUG) {
|
|
40
|
+
console.debug(PREFIX, "[debug]", ...args);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
// src/plugins/analyzer.ts
|
|
46
|
+
function createAnalyzerPlugin() {
|
|
47
|
+
return {
|
|
48
|
+
name: "vite-enhancer-analyzer",
|
|
49
|
+
buildStart() {
|
|
50
|
+
logger.info("Build analyzer enabled");
|
|
51
|
+
},
|
|
52
|
+
generateBundle(_options, bundle) {
|
|
53
|
+
const totalSize = Object.values(bundle).reduce((acc, chunk) => {
|
|
54
|
+
if (chunk.type === "chunk") {
|
|
55
|
+
return acc + (chunk.code?.length || 0);
|
|
56
|
+
}
|
|
57
|
+
return acc;
|
|
58
|
+
}, 0);
|
|
59
|
+
logger.success(`Total bundle size: ${(totalSize / 1024).toFixed(2)} KB`);
|
|
60
|
+
const chunks = Object.values(bundle).filter((c) => c.type === "chunk").map((c) => ({
|
|
61
|
+
name: c.name,
|
|
62
|
+
size: c.code?.length || 0
|
|
63
|
+
})).sort((a, b) => b.size - a.size).slice(0, 5);
|
|
64
|
+
if (chunks.length > 0) {
|
|
65
|
+
logger.info("Largest chunks:");
|
|
66
|
+
chunks.forEach((chunk) => {
|
|
67
|
+
logger.info(` - ${chunk.name}: ${(chunk.size / 1024).toFixed(2)} KB`);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// src/utils/validation.ts
|
|
75
|
+
function validateOptions(options) {
|
|
76
|
+
if (options.useSwc && options.babelPlugins?.length) {
|
|
77
|
+
console.warn("[vite-enhancer] babelPlugins are ignored when useSwc is true");
|
|
78
|
+
}
|
|
79
|
+
if (options.useSwc && options.babelPresets?.length) {
|
|
80
|
+
console.warn("[vite-enhancer] babelPresets are ignored when useSwc is true");
|
|
81
|
+
}
|
|
82
|
+
if (options.port && (options.port < 1 || options.port > 65535)) {
|
|
83
|
+
throw new Error(`Invalid port number: ${options.port}. Must be between 1 and 65535.`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function isProduction() {
|
|
87
|
+
return process.env.NODE_ENV === "production";
|
|
88
|
+
}
|
|
89
|
+
function isDevelopment() {
|
|
90
|
+
return process.env.NODE_ENV === "development";
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// src/enhancer.ts
|
|
94
|
+
var VERSION = "1.0.0";
|
|
95
|
+
logger.success(`v${VERSION} loaded - Enhancing your Vite config`);
|
|
96
|
+
function createEnhancedConfig(options = {}) {
|
|
97
|
+
validateOptions(options);
|
|
98
|
+
const {
|
|
99
|
+
analyze = false,
|
|
100
|
+
compressionStats = false,
|
|
101
|
+
port = 3e3,
|
|
102
|
+
openBrowser = true,
|
|
103
|
+
sourcemap = isProduction() ? false : true,
|
|
104
|
+
manualChunks,
|
|
105
|
+
envPrefix = "VITE_",
|
|
106
|
+
cacheDir = "node_modules/.vite-enhancer"
|
|
107
|
+
} = options;
|
|
108
|
+
const plugins = [createReactPlugin(options)];
|
|
109
|
+
if (analyze) {
|
|
110
|
+
plugins.push(createAnalyzerPlugin());
|
|
111
|
+
}
|
|
112
|
+
if (compressionStats) {
|
|
113
|
+
logger.info("Compression stats enabled");
|
|
114
|
+
}
|
|
115
|
+
const buildConfig = {
|
|
116
|
+
sourcemap,
|
|
117
|
+
rollupOptions: {}
|
|
118
|
+
};
|
|
119
|
+
if (manualChunks) {
|
|
120
|
+
buildConfig.rollupOptions = {
|
|
121
|
+
...buildConfig.rollupOptions,
|
|
122
|
+
output: {
|
|
123
|
+
manualChunks
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
plugins,
|
|
129
|
+
server: {
|
|
130
|
+
port,
|
|
131
|
+
open: openBrowser,
|
|
132
|
+
strictPort: false
|
|
133
|
+
},
|
|
134
|
+
build: buildConfig,
|
|
135
|
+
envPrefix,
|
|
136
|
+
cacheDir,
|
|
137
|
+
__enhanced: true,
|
|
138
|
+
__version: VERSION
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
var enhancedConfig = createEnhancedConfig();
|
|
142
|
+
var enhancer_default = enhancedConfig;
|
|
143
|
+
export {
|
|
144
|
+
createAnalyzerPlugin,
|
|
145
|
+
createEnhancedConfig,
|
|
146
|
+
createReactPlugin,
|
|
147
|
+
enhancer_default as default,
|
|
148
|
+
enhancedConfig,
|
|
149
|
+
isDevelopment,
|
|
150
|
+
isProduction,
|
|
151
|
+
logger,
|
|
152
|
+
validateOptions
|
|
153
|
+
};
|
|
154
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/plugins/react-plugin.ts","../src/utils/logger.ts","../src/plugins/analyzer.ts","../src/utils/validation.ts","../src/enhancer.ts"],"sourcesContent":["import react from '@vitejs/plugin-react'\r\nimport reactSwc from '@vitejs/plugin-react-swc'\r\nimport type { Plugin } from 'vite'\r\nimport type { EnhancerOptions } from '../types'\r\n\r\nexport function createReactPlugin(options: EnhancerOptions): Plugin {\r\n const { useSwc = false, fastRefresh = true, babelPlugins = [], babelPresets = [], reactCompiler = false } = options\r\n\r\n if (useSwc) {\r\n // reactSwc returns a Plugin directly, not an array\r\n const swcPlugin = reactSwc({\r\n // @ts-ignore - fastRefresh is valid but types are not up to date\r\n fastRefresh,\r\n tsDecorators: true,\r\n })\r\n return swcPlugin as unknown as Plugin\r\n }\r\n\r\n // react returns a Plugin directly\r\n const reactPlugin = react({\r\n // @ts-ignore - fastRefresh is valid but types are not up to date \r\n fastRefresh,\r\n babel: {\r\n plugins: [\r\n ...babelPlugins,\r\n ...(reactCompiler ? [['babel-plugin-react-compiler', { target: '19' }]] : []),\r\n ],\r\n presets: babelPresets,\r\n },\r\n })\r\n return reactPlugin as unknown as Plugin\r\n}","const PREFIX = '\\x1b[36m[vite-enhancer]\\x1b[0m'\r\nconst SUCCESS = '\\x1b[32mโ\\x1b[0m'\r\nconst WARNING = '\\x1b[33mโ \\x1b[0m'\r\nconst ERROR = '\\x1b[31mโ\\x1b[0m'\r\n\r\nexport const logger = {\r\n info: (...args: unknown[]) => console.log(PREFIX, ...args),\r\n success: (...args: unknown[]) => console.log(PREFIX, SUCCESS, ...args),\r\n warn: (...args: unknown[]) => console.warn(PREFIX, WARNING, ...args),\r\n error: (...args: unknown[]) => console.error(PREFIX, ERROR, ...args),\r\n debug: (...args: unknown[]) => {\r\n if (process.env.DEBUG) {\r\n console.debug(PREFIX, '[debug]', ...args)\r\n }\r\n }\r\n}","import type { Plugin } from 'vite'\r\nimport { logger } from '../utils/logger'\r\n\r\nexport function createAnalyzerPlugin(): Plugin {\r\n return {\r\n name: 'vite-enhancer-analyzer',\r\n buildStart() {\r\n logger.info('Build analyzer enabled')\r\n },\r\n generateBundle(_options, bundle) {\r\n const totalSize = Object.values(bundle).reduce((acc, chunk) => {\r\n if (chunk.type === 'chunk') {\r\n return acc + (chunk.code?.length || 0)\r\n }\r\n return acc\r\n }, 0)\r\n \r\n logger.success(`Total bundle size: ${(totalSize / 1024).toFixed(2)} KB`)\r\n \r\n const chunks = Object.values(bundle)\r\n .filter((c): c is import('rollup').OutputChunk => c.type === 'chunk')\r\n .map(c => ({\r\n name: c.name,\r\n size: c.code?.length || 0,\r\n }))\r\n .sort((a, b) => b.size - a.size)\r\n .slice(0, 5)\r\n \r\n if (chunks.length > 0) {\r\n logger.info('Largest chunks:')\r\n chunks.forEach(chunk => {\r\n logger.info(` - ${chunk.name}: ${(chunk.size / 1024).toFixed(2)} KB`)\r\n })\r\n }\r\n },\r\n }\r\n}","import type { EnhancerOptions } from '../types'\r\n\r\nexport function validateOptions(options: EnhancerOptions): void {\r\n if (options.useSwc && options.babelPlugins?.length) {\r\n console.warn('[vite-enhancer] babelPlugins are ignored when useSwc is true')\r\n }\r\n \r\n if (options.useSwc && options.babelPresets?.length) {\r\n console.warn('[vite-enhancer] babelPresets are ignored when useSwc is true')\r\n }\r\n \r\n if (options.port && (options.port < 1 || options.port > 65535)) {\r\n throw new Error(`Invalid port number: ${options.port}. Must be between 1 and 65535.`)\r\n }\r\n}\r\n\r\nexport function isProduction(): boolean {\r\n return process.env.NODE_ENV === 'production'\r\n}\r\n\r\nexport function isDevelopment(): boolean {\r\n return process.env.NODE_ENV === 'development'\r\n}","import type { UserConfig } from 'vite'\r\nimport type { EnhancerOptions, EnhancedConfigResult } from './types'\r\nimport { createReactPlugin } from './plugins/react-plugin'\r\nimport { createAnalyzerPlugin } from './plugins/analyzer'\r\nimport { validateOptions, isProduction } from './utils/validation'\r\nimport { logger } from './utils/logger'\r\n\r\nconst VERSION = '1.0.0'\r\n\r\n// This runs automatically when imported\r\nlogger.success(`v${VERSION} loaded - Enhancing your Vite config`)\r\n\r\nexport function createEnhancedConfig(options: EnhancerOptions = {}): EnhancedConfigResult {\r\n validateOptions(options)\r\n \r\n const {\r\n analyze = false,\r\n compressionStats = false,\r\n port = 3000,\r\n openBrowser = true,\r\n sourcemap = isProduction() ? false : true,\r\n manualChunks,\r\n envPrefix = 'VITE_',\r\n cacheDir = 'node_modules/.vite-enhancer',\r\n } = options\r\n \r\n const plugins = [createReactPlugin(options)]\r\n \r\n if (analyze) {\r\n plugins.push(createAnalyzerPlugin())\r\n }\r\n \r\n if (compressionStats) {\r\n logger.info('Compression stats enabled')\r\n }\r\n \r\n const buildConfig: UserConfig['build'] = {\r\n sourcemap,\r\n rollupOptions: {},\r\n }\r\n \r\n if (manualChunks) {\r\n buildConfig.rollupOptions = {\r\n ...buildConfig.rollupOptions,\r\n output: {\r\n manualChunks,\r\n },\r\n }\r\n }\r\n \r\n return {\r\n plugins,\r\n server: {\r\n port,\r\n open: openBrowser,\r\n strictPort: false,\r\n },\r\n build: buildConfig,\r\n envPrefix,\r\n cacheDir,\r\n __enhanced: true,\r\n __version: VERSION,\r\n }\r\n}\r\n\r\n// Auto-executing default config\r\nexport const enhancedConfig = createEnhancedConfig()\r\n\r\n// Default export\r\nexport default enhancedConfig"],"mappings":"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","names":[]}
|