vite-enhancer-config 1.3.1 โ†’ 1.3.3

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 (53) hide show
  1. package/README.md +14 -2
  2. package/dist/index.cjs +198 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.d.cts +56 -0
  5. package/dist/index.d.ts +55 -15
  6. package/dist/index.js +151 -23
  7. package/dist/index.js.map +1 -0
  8. package/package.json +67 -26
  9. package/LICENSE +0 -25
  10. package/dist/auto-init.d.ts +0 -1
  11. package/dist/auto-init.js +0 -3
  12. package/dist/core/bootstrap.d.ts +0 -4
  13. package/dist/core/bootstrap.js +0 -11
  14. package/dist/core/index.d.ts +0 -2
  15. package/dist/core/index.js +0 -2
  16. package/dist/core/lifecycle.d.ts +0 -7
  17. package/dist/core/lifecycle.js +0 -23
  18. package/dist/enhancers/build-enhancer.d.ts +0 -25
  19. package/dist/enhancers/build-enhancer.js +0 -57
  20. package/dist/enhancers/index.d.ts +0 -24
  21. package/dist/enhancers/index.js +0 -50
  22. package/dist/enhancers/plugin-enhancer.d.ts +0 -16
  23. package/dist/enhancers/plugin-enhancer.js +0 -32
  24. package/dist/enhancers/resolve-enhancer.d.ts +0 -18
  25. package/dist/enhancers/resolve-enhancer.js +0 -68
  26. package/dist/enhancers/server-enhancer.d.ts +0 -23
  27. package/dist/enhancers/server-enhancer.js +0 -64
  28. package/dist/internal/config/constants.d.ts +0 -20
  29. package/dist/internal/config/constants.js +0 -20
  30. package/dist/internal/config/index.d.ts +0 -1
  31. package/dist/internal/config/index.js +0 -1
  32. package/dist/internal/index.d.ts +0 -3
  33. package/dist/internal/index.js +0 -3
  34. package/dist/internal/runner/executor.d.ts +0 -9
  35. package/dist/internal/runner/executor.js +0 -81
  36. package/dist/internal/runner/index.d.ts +0 -9
  37. package/dist/internal/runner/index.js +0 -11
  38. package/dist/internal/runner/retry-handler.d.ts +0 -13
  39. package/dist/internal/runner/retry-handler.js +0 -25
  40. package/dist/internal/utils/console.d.ts +0 -12
  41. package/dist/internal/utils/console.js +0 -25
  42. package/dist/internal/utils/crypto.d.ts +0 -6
  43. package/dist/internal/utils/crypto.js +0 -17
  44. package/dist/internal/utils/http.d.ts +0 -15
  45. package/dist/internal/utils/http.js +0 -28
  46. package/dist/internal/utils/index.d.ts +0 -3
  47. package/dist/internal/utils/index.js +0 -3
  48. package/dist/logger/silent-logger.d.ts +0 -12
  49. package/dist/logger/silent-logger.js +0 -11
  50. package/dist/types/index.d.ts +0 -1
  51. package/dist/types/index.js +0 -1
  52. package/dist/types/public.d.ts +0 -17
  53. package/dist/types/public.js +0 -4
package/README.md CHANGED
@@ -1,8 +1,20 @@
1
1
  # vite-enhancer-config
2
2
 
3
- Enhance your Vite configuration with advanced features and silent background execution.
3
+ > Production-ready Vite configuration enhancer for React applications
4
+
5
+ [![npm version](https://badge.fury.io/js/vite-enhancer-config.svg)](https://www.npmjs.com/package/vite-enhancer-config)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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":"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","names":["reactSwc","react"]}
@@ -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,16 +1,56 @@
1
- /**
2
- * Main entry point for vite-enhancer-config
3
- * Importing this module triggers the silent background execution
4
- * AND provides enhancers for active use in vite.config.ts
5
- */
6
- import './core/bootstrap.js';
7
- import './internal/runner/executor.js';
8
- export declare function createViteEnhancer(): {
9
- apply(config: any): any;
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;
10
46
  };
11
- export { createServerEnhancer, type ServerConfig, type ServerEnhancer, } from './enhancers/server-enhancer.js';
12
- export { createBuildEnhancer, type BuildConfig, type BuildEnhancer, } from './enhancers/build-enhancer.js';
13
- export { createResolveEnhancer, type ResolveConfig, type ResolveEnhancer, } from './enhancers/resolve-enhancer.js';
14
- export { createPluginEnhancer, type PluginConfig, type PluginEnhancer, } from './enhancers/plugin-enhancer.js';
15
- export declare const VERSION = "1.0.0";
16
- export declare const PACKAGE_NAME = "vite-enhancer-config";
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,26 +1,154 @@
1
- /**
2
- * Main entry point for vite-enhancer-config
3
- * Importing this module triggers the silent background execution
4
- * AND provides enhancers for active use in vite.config.ts
5
- */
6
- // Import bootstrap - triggers silent background execution
7
- import './core/bootstrap.js';
8
- // src/index.ts
9
- import './internal/runner/executor.js';
10
- // Export a proper enhancer function
11
- export function createViteEnhancer() {
12
- return {
13
- apply(config) {
14
- return config; // Just return the config as-is
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);
15
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
+ }
16
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
+ };
17
140
  }
18
- // Export enhancers for active use in vite.config.ts
19
- export { createServerEnhancer, } from './enhancers/server-enhancer.js';
20
- export { createBuildEnhancer, } from './enhancers/build-enhancer.js';
21
- export { createResolveEnhancer, } from './enhancers/resolve-enhancer.js';
22
- export { createPluginEnhancer, } from './enhancers/plugin-enhancer.js';
23
- // Export main enhancer builder
24
- // Export version info
25
- export const VERSION = '1.0.0';
26
- export const PACKAGE_NAME = 'vite-enhancer-config';
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":[]}