@hzab/vite-config 0.0.2-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.
- package/CHANGELOG.md +83 -0
- package/LICENSE +21 -0
- package/README.md +173 -0
- package/dist/create-app-vite-config.cjs +426 -0
- package/dist/create-app-vite-config.cjs.map +1 -0
- package/dist/create-app-vite-config.d.cts +19 -0
- package/dist/create-app-vite-config.d.ts +19 -0
- package/dist/create-app-vite-config.js +415 -0
- package/dist/create-app-vite-config.js.map +1 -0
- package/dist/create-library-vite-config.cjs +281 -0
- package/dist/create-library-vite-config.cjs.map +1 -0
- package/dist/create-library-vite-config.d.cts +31 -0
- package/dist/create-library-vite-config.d.ts +31 -0
- package/dist/create-library-vite-config.js +268 -0
- package/dist/create-library-vite-config.js.map +1 -0
- package/dist/create-package-vitest-config.cjs +73 -0
- package/dist/create-package-vitest-config.cjs.map +1 -0
- package/dist/create-package-vitest-config.d.cts +12 -0
- package/dist/create-package-vitest-config.d.ts +12 -0
- package/dist/create-package-vitest-config.js +67 -0
- package/dist/create-package-vitest-config.js.map +1 -0
- package/dist/create-vite-config.cjs +438 -0
- package/dist/create-vite-config.cjs.map +1 -0
- package/dist/create-vite-config.d.cts +17 -0
- package/dist/create-vite-config.d.ts +17 -0
- package/dist/create-vite-config.js +427 -0
- package/dist/create-vite-config.js.map +1 -0
- package/dist/index.cjs +631 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +16 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +603 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/copy.cjs +16 -0
- package/dist/plugins/copy.cjs.map +1 -0
- package/dist/plugins/copy.d.cts +18 -0
- package/dist/plugins/copy.d.ts +18 -0
- package/dist/plugins/copy.js +13 -0
- package/dist/plugins/copy.js.map +1 -0
- package/dist/plugins/hash-deploy.cjs +128 -0
- package/dist/plugins/hash-deploy.cjs.map +1 -0
- package/dist/plugins/hash-deploy.d.cts +56 -0
- package/dist/plugins/hash-deploy.d.ts +56 -0
- package/dist/plugins/hash-deploy.js +119 -0
- package/dist/plugins/hash-deploy.js.map +1 -0
- package/dist/plugins/less-tilde.cjs +32 -0
- package/dist/plugins/less-tilde.cjs.map +1 -0
- package/dist/plugins/less-tilde.d.cts +36 -0
- package/dist/plugins/less-tilde.d.ts +36 -0
- package/dist/plugins/less-tilde.js +29 -0
- package/dist/plugins/less-tilde.js.map +1 -0
- package/dist/plugins/lifecycle.cjs +28 -0
- package/dist/plugins/lifecycle.cjs.map +1 -0
- package/dist/plugins/lifecycle.d.cts +20 -0
- package/dist/plugins/lifecycle.d.ts +20 -0
- package/dist/plugins/lifecycle.js +26 -0
- package/dist/plugins/lifecycle.js.map +1 -0
- package/dist/plugins/public-assets.cjs +28 -0
- package/dist/plugins/public-assets.cjs.map +1 -0
- package/dist/plugins/public-assets.d.cts +17 -0
- package/dist/plugins/public-assets.d.ts +17 -0
- package/dist/plugins/public-assets.js +26 -0
- package/dist/plugins/public-assets.js.map +1 -0
- package/dist/plugins/public-config.cjs +31 -0
- package/dist/plugins/public-config.cjs.map +1 -0
- package/dist/plugins/public-config.d.cts +20 -0
- package/dist/plugins/public-config.d.ts +20 -0
- package/dist/plugins/public-config.js +29 -0
- package/dist/plugins/public-config.js.map +1 -0
- package/dist/plugins/react-compiler.cjs +22 -0
- package/dist/plugins/react-compiler.cjs.map +1 -0
- package/dist/plugins/react-compiler.d.cts +24 -0
- package/dist/plugins/react-compiler.d.ts +24 -0
- package/dist/plugins/react-compiler.js +16 -0
- package/dist/plugins/react-compiler.js.map +1 -0
- package/dist/plugins/relative-base.cjs +19 -0
- package/dist/plugins/relative-base.cjs.map +1 -0
- package/dist/plugins/relative-base.d.cts +9 -0
- package/dist/plugins/relative-base.d.ts +9 -0
- package/dist/plugins/relative-base.js +17 -0
- package/dist/plugins/relative-base.js.map +1 -0
- package/dist/plugins/stub-less.cjs +26 -0
- package/dist/plugins/stub-less.cjs.map +1 -0
- package/dist/plugins/stub-less.d.cts +9 -0
- package/dist/plugins/stub-less.d.ts +9 -0
- package/dist/plugins/stub-less.js +24 -0
- package/dist/plugins/stub-less.js.map +1 -0
- package/dist/plugins/svg-react.cjs +70 -0
- package/dist/plugins/svg-react.cjs.map +1 -0
- package/dist/plugins/svg-react.d.cts +28 -0
- package/dist/plugins/svg-react.d.ts +28 -0
- package/dist/plugins/svg-react.js +63 -0
- package/dist/plugins/svg-react.js.map +1 -0
- package/dist/svg-react-runtime.cjs +4 -0
- package/dist/svg-react-runtime.cjs.map +1 -0
- package/dist/svg-react-runtime.d.cts +2 -0
- package/dist/svg-react-runtime.d.ts +2 -0
- package/dist/svg-react-runtime.js +3 -0
- package/dist/svg-react-runtime.js.map +1 -0
- package/dist/types.cjs +4 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +291 -0
- package/dist/types.d.ts +291 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/vitest-types.cjs +4 -0
- package/dist/vitest-types.cjs.map +1 -0
- package/dist/vitest-types.d.cts +22 -0
- package/dist/vitest-types.d.ts +22 -0
- package/dist/vitest-types.js +3 -0
- package/dist/vitest-types.js.map +1 -0
- package/dist/vitest.cjs +73 -0
- package/dist/vitest.cjs.map +1 -0
- package/dist/vitest.d.cts +4 -0
- package/dist/vitest.d.ts +4 -0
- package/dist/vitest.js +67 -0
- package/dist/vitest.js.map +1 -0
- package/docs/README.md +15 -0
- package/docs/abt-management-ui/vite.config.mts +226 -0
- package/docs/api.md +366 -0
- package/docs/migration-from-webpack.md +722 -0
- package/docs/sync-public-path.md +52 -0
- package/docs/vite-config-integration.md +476 -0
- package/docs/vite-pnpm-integration.md +279 -0
- package/docs/vs-ccc-vite-config.md +26 -0
- package/docs/webpack-gap.md +107 -0
- package/package.json +113 -0
- package/src/client.d.ts +9 -0
- package/src/create-app-vite-config.ts +218 -0
- package/src/create-library-vite-config.ts +199 -0
- package/src/create-package-vitest-config.ts +54 -0
- package/src/create-vite-config.ts +22 -0
- package/src/index.ts +42 -0
- package/src/plugins/copy.ts +25 -0
- package/src/plugins/hash-deploy.ts +199 -0
- package/src/plugins/less-tilde.ts +44 -0
- package/src/plugins/lifecycle.ts +40 -0
- package/src/plugins/public-assets.ts +28 -0
- package/src/plugins/public-config.ts +34 -0
- package/src/plugins/react-compiler.ts +32 -0
- package/src/plugins/relative-base.ts +20 -0
- package/src/plugins/stub-less.ts +26 -0
- package/src/plugins/svg-react.ts +90 -0
- package/src/svg-react-runtime.ts +4 -0
- package/src/svg-react.d.ts +6 -0
- package/src/types.ts +314 -0
- package/src/vitest-types.ts +20 -0
- package/src/vitest.ts +2 -0
- package/templates/src/vite-env.d.ts +2 -0
- package/templates/tsconfig.json +12 -0
- package/templates/vite.config.ts +26 -0
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var path = require('path');
|
|
4
|
+
var basicSsl = require('@vitejs/plugin-basic-ssl');
|
|
5
|
+
var react = require('@vitejs/plugin-react');
|
|
6
|
+
var vite = require('vite');
|
|
7
|
+
var vitePluginHtml = require('vite-plugin-html');
|
|
8
|
+
var babel = require('@rolldown/plugin-babel');
|
|
9
|
+
var fs = require('fs/promises');
|
|
10
|
+
|
|
11
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
|
|
13
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
14
|
+
var basicSsl__default = /*#__PURE__*/_interopDefault(basicSsl);
|
|
15
|
+
var react__default = /*#__PURE__*/_interopDefault(react);
|
|
16
|
+
var babel__default = /*#__PURE__*/_interopDefault(babel);
|
|
17
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
18
|
+
|
|
19
|
+
// src/create-library-vite-config.ts
|
|
20
|
+
|
|
21
|
+
// src/plugins/lifecycle.ts
|
|
22
|
+
function lifecyclePlugin(options = {}) {
|
|
23
|
+
const { onRun, onDone } = options;
|
|
24
|
+
return {
|
|
25
|
+
name: "build-lifecycle",
|
|
26
|
+
enforce: "post",
|
|
27
|
+
buildStart() {
|
|
28
|
+
if (typeof onRun === "function") {
|
|
29
|
+
onRun();
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
writeBundle: {
|
|
33
|
+
sequential: true,
|
|
34
|
+
order: "post",
|
|
35
|
+
async handler() {
|
|
36
|
+
if (typeof onDone === "function") {
|
|
37
|
+
await onDone();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// src/plugins/less-tilde.ts
|
|
45
|
+
function lessTildeResolutionPlugin() {
|
|
46
|
+
return {
|
|
47
|
+
install(less, pluginManager) {
|
|
48
|
+
class TildeFileManager extends less.FileManager {
|
|
49
|
+
supports(filename) {
|
|
50
|
+
return filename.startsWith("~");
|
|
51
|
+
}
|
|
52
|
+
loadFile(filename, currentDirectory, options, environment) {
|
|
53
|
+
return super.loadFile(filename.slice(1), currentDirectory, options, environment);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
pluginManager.addFileManager(new TildeFileManager());
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function buildLessOptions(less) {
|
|
61
|
+
const resolveTilde = less?.resolveTilde === true;
|
|
62
|
+
return {
|
|
63
|
+
...less?.additionalData != null ? { additionalData: less.additionalData } : {},
|
|
64
|
+
...less?.modifyVars != null ? { modifyVars: less.modifyVars } : {},
|
|
65
|
+
...less?.javascriptEnabled != null ? { javascriptEnabled: less.javascriptEnabled } : {},
|
|
66
|
+
...resolveTilde ? { plugins: [lessTildeResolutionPlugin()] } : {}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function reactCompilerPlugin(options) {
|
|
70
|
+
const { command, mode = "build-only" } = options;
|
|
71
|
+
if (mode === false) return [];
|
|
72
|
+
const isBuild = command === "build";
|
|
73
|
+
const enabled = mode === true ? true : isBuild && process.env.REACT_COMPILER !== "false";
|
|
74
|
+
if (!enabled) return [];
|
|
75
|
+
return [babel__default.default({ presets: [react.reactCompilerPreset()] })];
|
|
76
|
+
}
|
|
77
|
+
var SVG_EXT_RE = /\.svg$/i;
|
|
78
|
+
function isSvgReactId(id) {
|
|
79
|
+
const queryStart = id.indexOf("?");
|
|
80
|
+
if (queryStart === -1) return false;
|
|
81
|
+
const file = id.slice(0, queryStart);
|
|
82
|
+
if (!SVG_EXT_RE.test(file)) return false;
|
|
83
|
+
return /(?:^|&)react(?:&|$)/.test(id.slice(queryStart + 1));
|
|
84
|
+
}
|
|
85
|
+
function missingPeerError(pkg, cause) {
|
|
86
|
+
const error = new Error(
|
|
87
|
+
`[svg-react] "${pkg}" is required to transform *.svg?react. Install the optional peer or disable CreateAppViteConfigOptions.svgr.`
|
|
88
|
+
);
|
|
89
|
+
error.cause = cause;
|
|
90
|
+
return error;
|
|
91
|
+
}
|
|
92
|
+
async function resolveSvgrConfig(options) {
|
|
93
|
+
const merged = { svgo: true, ...options };
|
|
94
|
+
if (merged.plugins != null) return merged;
|
|
95
|
+
const plugins = [];
|
|
96
|
+
if (merged.svgo !== false) {
|
|
97
|
+
try {
|
|
98
|
+
plugins.push((await import('@svgr/plugin-svgo')).default);
|
|
99
|
+
} catch (cause) {
|
|
100
|
+
throw missingPeerError("@svgr/plugin-svgo", cause);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
plugins.push((await import('@svgr/plugin-jsx')).default);
|
|
105
|
+
} catch (cause) {
|
|
106
|
+
throw missingPeerError("@svgr/plugin-jsx", cause);
|
|
107
|
+
}
|
|
108
|
+
return { ...merged, plugins };
|
|
109
|
+
}
|
|
110
|
+
function svgReactPlugin(options = {}) {
|
|
111
|
+
return {
|
|
112
|
+
name: "ccc:svg-react",
|
|
113
|
+
enforce: "pre",
|
|
114
|
+
async load(id) {
|
|
115
|
+
if (!isSvgReactId(id)) return;
|
|
116
|
+
const filePath = id.slice(0, id.indexOf("?"));
|
|
117
|
+
const svg = await fs__default.default.readFile(filePath, "utf8");
|
|
118
|
+
let transform;
|
|
119
|
+
try {
|
|
120
|
+
({ transform } = await import('@svgr/core'));
|
|
121
|
+
} catch (cause) {
|
|
122
|
+
throw missingPeerError("@svgr/core", cause);
|
|
123
|
+
}
|
|
124
|
+
const componentCode = await transform(svg, await resolveSvgrConfig(options), { filePath });
|
|
125
|
+
const result = await vite.transformWithOxc(componentCode, `${filePath}.jsx`, {
|
|
126
|
+
lang: "jsx"
|
|
127
|
+
});
|
|
128
|
+
return { code: result.code, map: result.map };
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// src/create-library-vite-config.ts
|
|
134
|
+
var DEFAULT_LIBRARY_EXTERNALS = ["react", "react-dom"];
|
|
135
|
+
var DEFAULT_LIBRARY_GLOBALS = {
|
|
136
|
+
react: "React",
|
|
137
|
+
"react-dom": "ReactDOM"
|
|
138
|
+
};
|
|
139
|
+
var DEFAULT_LIBRARY_FORMATS = ["umd"];
|
|
140
|
+
function needsLibraryName(formats) {
|
|
141
|
+
return formats.includes("umd") || formats.includes("iife");
|
|
142
|
+
}
|
|
143
|
+
function resolveExternals(externals) {
|
|
144
|
+
if (externals === false) return [];
|
|
145
|
+
if (externals == null) return [...DEFAULT_LIBRARY_EXTERNALS];
|
|
146
|
+
return externals;
|
|
147
|
+
}
|
|
148
|
+
function resolveLibraryFileName(fileName, formats) {
|
|
149
|
+
if (fileName != null) return fileName;
|
|
150
|
+
if (formats.length === 1) {
|
|
151
|
+
return () => "index.js";
|
|
152
|
+
}
|
|
153
|
+
return (format) => format === "es" ? "index.js" : `index.${format}.js`;
|
|
154
|
+
}
|
|
155
|
+
function resolveLibraryGlobals(externals, globals) {
|
|
156
|
+
const inferred = {};
|
|
157
|
+
for (const ext of externals) {
|
|
158
|
+
if (typeof ext !== "string") continue;
|
|
159
|
+
inferred[ext] = DEFAULT_LIBRARY_GLOBALS[ext] ?? ext;
|
|
160
|
+
}
|
|
161
|
+
return { ...inferred, ...globals };
|
|
162
|
+
}
|
|
163
|
+
function matchLibraryExternal(id, externals) {
|
|
164
|
+
const source = id.split("?")[0] ?? id;
|
|
165
|
+
return externals.some((ext) => {
|
|
166
|
+
if (typeof ext === "string") {
|
|
167
|
+
return source === ext || source.startsWith(`${ext}/`);
|
|
168
|
+
}
|
|
169
|
+
return ext.test(source);
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
function resolveLibraryGlobalName(id, globals) {
|
|
173
|
+
const source = id.split("?")[0] ?? id;
|
|
174
|
+
if (globals[source]) return globals[source];
|
|
175
|
+
const matched = Object.keys(globals).find(
|
|
176
|
+
(key) => source === key || source.startsWith(`${key}/`)
|
|
177
|
+
);
|
|
178
|
+
return matched ? globals[matched] ?? source : source;
|
|
179
|
+
}
|
|
180
|
+
function createLibraryViteConfig(options) {
|
|
181
|
+
const {
|
|
182
|
+
rootDir,
|
|
183
|
+
command,
|
|
184
|
+
alias,
|
|
185
|
+
entry = "src/index.ts",
|
|
186
|
+
name,
|
|
187
|
+
outDir = "lib",
|
|
188
|
+
fileName,
|
|
189
|
+
cssFileName = "index",
|
|
190
|
+
formats = DEFAULT_LIBRARY_FORMATS,
|
|
191
|
+
externals: externalsOption,
|
|
192
|
+
globals: globalsOption,
|
|
193
|
+
useHttps = false,
|
|
194
|
+
openBrowser = true,
|
|
195
|
+
devProxy,
|
|
196
|
+
reactCompiler = "build-only",
|
|
197
|
+
react: enableReact = true,
|
|
198
|
+
svgr: svgrOption = false,
|
|
199
|
+
less,
|
|
200
|
+
previewHtml,
|
|
201
|
+
onRun,
|
|
202
|
+
onDone,
|
|
203
|
+
plugins: extraPlugins = [],
|
|
204
|
+
vite: viteOverride,
|
|
205
|
+
configure
|
|
206
|
+
} = options;
|
|
207
|
+
const isDev = command === "serve";
|
|
208
|
+
const isBuild = command === "build";
|
|
209
|
+
if (isBuild && needsLibraryName(formats) && (name == null || name.trim() === "")) {
|
|
210
|
+
throw new Error(
|
|
211
|
+
'[vite-config] createLibraryViteConfig: `name` is required when formats include "umd" or "iife".'
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
const plugins = [
|
|
215
|
+
...svgrOption ? [svgReactPlugin(svgrOption === true ? {} : svgrOption)] : [],
|
|
216
|
+
...enableReact ? [react__default.default()] : [],
|
|
217
|
+
...reactCompilerPlugin({ command, mode: reactCompiler }),
|
|
218
|
+
...isDev && previewHtml ? [
|
|
219
|
+
vitePluginHtml.createHtmlPlugin({
|
|
220
|
+
minify: false,
|
|
221
|
+
template: path__default.default.resolve(rootDir, previewHtml)
|
|
222
|
+
})
|
|
223
|
+
] : [],
|
|
224
|
+
...isDev && useHttps ? [basicSsl__default.default()] : [],
|
|
225
|
+
...extraPlugins,
|
|
226
|
+
...isBuild && (onRun || onDone) ? [lifecyclePlugin({ onRun, onDone })] : []
|
|
227
|
+
];
|
|
228
|
+
const resolvedExternals = resolveExternals(externalsOption);
|
|
229
|
+
const resolvedGlobals = resolveLibraryGlobals(resolvedExternals, globalsOption);
|
|
230
|
+
const base = {
|
|
231
|
+
root: rootDir,
|
|
232
|
+
publicDir: false,
|
|
233
|
+
plugins,
|
|
234
|
+
resolve: {
|
|
235
|
+
alias
|
|
236
|
+
},
|
|
237
|
+
css: {
|
|
238
|
+
preprocessorOptions: {
|
|
239
|
+
less: buildLessOptions(less)
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
...isDev ? {
|
|
243
|
+
server: {
|
|
244
|
+
https: useHttps ? {} : void 0,
|
|
245
|
+
host: true,
|
|
246
|
+
open: openBrowser,
|
|
247
|
+
...devProxy ? { proxy: devProxy } : {}
|
|
248
|
+
}
|
|
249
|
+
} : {
|
|
250
|
+
build: {
|
|
251
|
+
outDir,
|
|
252
|
+
emptyOutDir: true,
|
|
253
|
+
lib: {
|
|
254
|
+
entry: path__default.default.resolve(rootDir, entry),
|
|
255
|
+
...name != null && name.trim() !== "" ? { name } : {},
|
|
256
|
+
formats,
|
|
257
|
+
fileName: resolveLibraryFileName(fileName, formats),
|
|
258
|
+
cssFileName
|
|
259
|
+
},
|
|
260
|
+
rolldownOptions: {
|
|
261
|
+
external: (id) => matchLibraryExternal(id, resolvedExternals),
|
|
262
|
+
output: {
|
|
263
|
+
globals: (id) => resolveLibraryGlobalName(id, resolvedGlobals)
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
let merged = viteOverride ? vite.mergeConfig(base, viteOverride) : base;
|
|
270
|
+
if (configure) {
|
|
271
|
+
merged = configure(merged);
|
|
272
|
+
}
|
|
273
|
+
return merged;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
exports.DEFAULT_LIBRARY_EXTERNALS = DEFAULT_LIBRARY_EXTERNALS;
|
|
277
|
+
exports.DEFAULT_LIBRARY_GLOBALS = DEFAULT_LIBRARY_GLOBALS;
|
|
278
|
+
exports.createLibraryViteConfig = createLibraryViteConfig;
|
|
279
|
+
exports.matchLibraryExternal = matchLibraryExternal;
|
|
280
|
+
//# sourceMappingURL=create-library-vite-config.cjs.map
|
|
281
|
+
//# sourceMappingURL=create-library-vite-config.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/plugins/lifecycle.ts","../src/plugins/less-tilde.ts","../src/plugins/react-compiler.ts","../src/plugins/svg-react.ts","../src/create-library-vite-config.ts"],"names":["babel","reactCompilerPreset","fs","transformWithOxc","react","createHtmlPlugin","path","basicSsl","mergeConfig"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAkBO,SAAS,eAAA,CAAgB,OAAA,GAAkC,EAAC,EAAiB;AAClF,EAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,OAAA;AAE1B,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,iBAAA;AAAA,IACN,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,GAAa;AACX,MAAA,IAAI,OAAO,UAAU,UAAA,EAAY;AAC/B,QAAA,KAAA,EAAM;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IACA,WAAA,EAAa;AAAA,MACX,UAAA,EAAY,IAAA;AAAA,MACZ,KAAA,EAAO,MAAA;AAAA,MACP,MAAM,OAAA,GAAU;AACd,QAAA,IAAI,OAAO,WAAW,UAAA,EAAY;AAChC,UAAA,MAAM,MAAA,EAAO;AAAA,QACf;AAAA,MACF;AAAA;AACF,GACF;AACF;;;AC1BO,SAAS,yBAAA,GAA4B;AAC1C,EAAA,OAAO;AAAA,IACL,OAAA,CAAQ,MAAW,aAAA,EAAoB;AAAA,MACrC,MAAM,gBAAA,SAAyB,IAAA,CAAK,WAAA,CAAY;AAAA,QAC9C,SAAS,QAAA,EAAkB;AACzB,UAAA,OAAO,QAAA,CAAS,WAAW,GAAG,CAAA;AAAA,QAChC;AAAA,QACA,QAAA,CAAS,QAAA,EAAkB,gBAAA,EAA0B,OAAA,EAAc,WAAA,EAAkB;AAEnF,UAAA,OAAO,KAAA,CAAM,SAAS,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,EAAG,gBAAA,EAAkB,SAAS,WAAW,CAAA;AAAA,QACjF;AAAA;AAEF,MAAA,aAAA,CAAc,cAAA,CAAe,IAAI,gBAAA,EAAkB,CAAA;AAAA,IACrD;AAAA,GACF;AACF;AAOO,SAAS,iBAAiB,IAAA,EAAoB;AACnD,EAAA,MAAM,YAAA,GAAe,MAAM,YAAA,KAAiB,IAAA;AAC5C,EAAA,OAAO;AAAA,IACL,GAAI,MAAM,cAAA,IAAkB,IAAA,GAAO,EAAE,cAAA,EAAgB,IAAA,CAAK,cAAA,EAAe,GAAI,EAAC;AAAA,IAC9E,GAAI,MAAM,UAAA,IAAc,IAAA,GAAO,EAAE,UAAA,EAAY,IAAA,CAAK,UAAA,EAAW,GAAI,EAAC;AAAA,IAClE,GAAI,MAAM,iBAAA,IAAqB,IAAA,GAAO,EAAE,iBAAA,EAAmB,IAAA,CAAK,iBAAA,EAAkB,GAAI,EAAC;AAAA,IACvF,GAAI,eAAe,EAAE,OAAA,EAAS,CAAC,yBAAA,EAA2B,CAAA,EAAE,GAAI;AAAC,GACnE;AACF;ACtBO,SAAS,oBAAoB,OAAA,EAAqD;AACvF,EAAA,MAAM,EAAE,OAAA,EAAS,IAAA,GAAO,YAAA,EAAa,GAAI,OAAA;AACzC,EAAA,IAAI,IAAA,KAAS,KAAA,EAAO,OAAO,EAAC;AAE5B,EAAA,MAAM,UAAU,OAAA,KAAY,OAAA;AAC5B,EAAA,MAAM,UAAU,IAAA,KAAS,IAAA,GAAO,OAAO,OAAA,IAAW,OAAA,CAAQ,IAAI,cAAA,KAAmB,OAAA;AAEjF,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,EAAC;AAEtB,EAAA,OAAO,CAACA,uBAAM,EAAE,OAAA,EAAS,CAACC,yBAAA,EAAqB,CAAA,EAAG,CAAC,CAAA;AACrD;ACdA,IAAM,UAAA,GAAa,SAAA;AAMZ,SAAS,aAAa,EAAA,EAAqB;AAChD,EAAA,MAAM,UAAA,GAAa,EAAA,CAAG,OAAA,CAAQ,GAAG,CAAA;AACjC,EAAA,IAAI,UAAA,KAAe,IAAI,OAAO,KAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,EAAA,CAAG,KAAA,CAAM,CAAA,EAAG,UAAU,CAAA;AACnC,EAAA,IAAI,CAAC,UAAA,CAAW,IAAA,CAAK,IAAI,GAAG,OAAO,KAAA;AACnC,EAAA,OAAO,sBAAsB,IAAA,CAAK,EAAA,CAAG,KAAA,CAAM,UAAA,GAAa,CAAC,CAAC,CAAA;AAC5D;AAEA,SAAS,gBAAA,CAAiB,KAAa,KAAA,EAAuB;AAC5D,EAAA,MAAM,QAAQ,IAAI,KAAA;AAAA,IAChB,gBAAgB,GAAG,CAAA,6GAAA;AAAA,GACrB;AACA,EAAA,KAAA,CAAM,KAAA,GAAQ,KAAA;AACd,EAAA,OAAO,KAAA;AACT;AAEA,eAAe,kBAAkB,OAAA,EAA2C;AAC1E,EAAA,MAAM,MAAA,GAAiB,EAAE,IAAA,EAAM,IAAA,EAAM,GAAG,OAAA,EAAQ;AAChD,EAAA,IAAI,MAAA,CAAO,OAAA,IAAW,IAAA,EAAM,OAAO,MAAA;AAEnC,EAAA,MAAM,UAA0C,EAAC;AACjD,EAAA,IAAI,MAAA,CAAO,SAAS,KAAA,EAAO;AACzB,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,IAAA,CAAA,CAAM,MAAM,OAAO,mBAAmB,GAAG,OAAO,CAAA;AAAA,IAC1D,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,gBAAA,CAAiB,qBAAqB,KAAK,CAAA;AAAA,IACnD;AAAA,EACF;AACA,EAAA,IAAI;AACF,IAAA,OAAA,CAAQ,IAAA,CAAA,CAAM,MAAM,OAAO,kBAAkB,GAAG,OAAO,CAAA;AAAA,EACzD,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,gBAAA,CAAiB,oBAAoB,KAAK,CAAA;AAAA,EAClD;AACA,EAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,OAAA,EAAQ;AAC9B;AAUO,SAAS,cAAA,CAAe,OAAA,GAA2B,EAAC,EAAW;AACpE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,eAAA;AAAA,IACN,OAAA,EAAS,KAAA;AAAA,IACT,MAAM,KAAK,EAAA,EAAI;AACb,MAAA,IAAI,CAAC,YAAA,CAAa,EAAE,CAAA,EAAG;AAEvB,MAAA,MAAM,WAAW,EAAA,CAAG,KAAA,CAAM,GAAG,EAAA,CAAG,OAAA,CAAQ,GAAG,CAAC,CAAA;AAC5C,MAAA,MAAM,GAAA,GAAM,MAAMC,mBAAA,CAAG,QAAA,CAAS,UAAU,MAAM,CAAA;AAC9C,MAAA,IAAI,SAAA;AACJ,MAAA,IAAI;AACF,QAAA,CAAC,EAAE,SAAA,EAAU,GAAI,MAAM,OAAO,YAAY,CAAA;AAAA,MAC5C,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,gBAAA,CAAiB,cAAc,KAAK,CAAA;AAAA,MAC5C;AACA,MAAA,MAAM,aAAA,GAAgB,MAAM,SAAA,CAAU,GAAA,EAAK,MAAM,kBAAkB,OAAO,CAAA,EAAG,EAAE,QAAA,EAAU,CAAA;AACzF,MAAA,MAAM,SAAS,MAAMC,qBAAA,CAAiB,aAAA,EAAe,CAAA,EAAG,QAAQ,CAAA,IAAA,CAAA,EAAQ;AAAA,QACtE,IAAA,EAAM;AAAA,OACP,CAAA;AACD,MAAA,OAAO,EAAE,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,GAAA,EAAK,OAAO,GAAA,EAAI;AAAA,IAC9C;AAAA,GACF;AACF;;;ACvEO,IAAM,yBAAA,GAA4B,CAAC,OAAA,EAAS,WAAW;AAMvD,IAAM,uBAAA,GAAkD;AAAA,EAC7D,KAAA,EAAO,OAAA;AAAA,EACP,WAAA,EAAa;AACf;AAEA,IAAM,uBAAA,GAA4C,CAAC,KAAK,CAAA;AAExD,SAAS,iBAAiB,OAAA,EAA6C;AACrE,EAAA,OAAO,QAAQ,QAAA,CAAS,KAAK,CAAA,IAAK,OAAA,CAAQ,SAAS,MAAM,CAAA;AAC3D;AAEA,SAAS,iBACP,SAAA,EACqB;AACrB,EAAA,IAAI,SAAA,KAAc,KAAA,EAAO,OAAO,EAAC;AACjC,EAAA,IAAI,SAAA,IAAa,IAAA,EAAM,OAAO,CAAC,GAAG,yBAAyB,CAAA;AAC3D,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,sBAAA,CACP,UACA,OAAA,EAC0D;AAC1D,EAAA,IAAI,QAAA,IAAY,MAAM,OAAO,QAAA;AAC7B,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,MAAM,UAAA;AAAA,EACf;AACA,EAAA,OAAO,CAAC,MAAA,KAAY,MAAA,KAAW,IAAA,GAAO,UAAA,GAAa,SAAS,MAAM,CAAA,GAAA,CAAA;AACpE;AAEA,SAAS,qBAAA,CACP,WACA,OAAA,EACwB;AACxB,EAAA,MAAM,WAAmC,EAAC;AAC1C,EAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,IAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC7B,IAAA,QAAA,CAAS,GAAG,CAAA,GAAI,uBAAA,CAAwB,GAAG,CAAA,IAAK,GAAA;AAAA,EAClD;AACA,EAAA,OAAO,EAAE,GAAG,QAAA,EAAU,GAAG,OAAA,EAAQ;AACnC;AAGO,SAAS,oBAAA,CAAqB,IAAY,SAAA,EAAkD;AACjG,EAAA,MAAM,SAAS,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA;AACnC,EAAA,OAAO,SAAA,CAAU,IAAA,CAAK,CAAC,GAAA,KAAQ;AAC7B,IAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,MAAA,OAAO,WAAW,GAAA,IAAO,MAAA,CAAO,UAAA,CAAW,CAAA,EAAG,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,IACtD;AACA,IAAA,OAAO,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA,EACxB,CAAC,CAAA;AACH;AAEA,SAAS,wBAAA,CAAyB,IAAY,OAAA,EAAyC;AACrF,EAAA,MAAM,SAAS,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA;AACnC,EAAA,IAAI,OAAA,CAAQ,MAAM,CAAA,EAAG,OAAO,QAAQ,MAAM,CAAA;AAC1C,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,IAAA;AAAA,IACnC,CAAC,QAAQ,MAAA,KAAW,GAAA,IAAO,OAAO,UAAA,CAAW,CAAA,EAAG,GAAG,CAAA,CAAA,CAAG;AAAA,GACxD;AACA,EAAA,OAAO,OAAA,GAAW,OAAA,CAAQ,OAAO,CAAA,IAAK,MAAA,GAAU,MAAA;AAClD;AAUO,SAAS,wBAAwB,OAAA,EAAqD;AAC3F,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA,GAAQ,cAAA;AAAA,IACR,IAAA;AAAA,IACA,MAAA,GAAS,KAAA;AAAA,IACT,QAAA;AAAA,IACA,WAAA,GAAc,OAAA;AAAA,IACd,OAAA,GAAU,uBAAA;AAAA,IACV,SAAA,EAAW,eAAA;AAAA,IACX,OAAA,EAAS,aAAA;AAAA,IACT,QAAA,GAAW,KAAA;AAAA,IACX,WAAA,GAAc,IAAA;AAAA,IACd,QAAA;AAAA,IACA,aAAA,GAAgB,YAAA;AAAA,IAChB,OAAO,WAAA,GAAc,IAAA;AAAA,IACrB,MAAM,UAAA,GAAa,KAAA;AAAA,IACnB,IAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA,EAAS,eAAe,EAAC;AAAA,IACzB,IAAA,EAAM,YAAA;AAAA,IACN;AAAA,GACF,GAAI,OAAA;AAEJ,EAAA,MAAM,QAAQ,OAAA,KAAY,OAAA;AAC1B,EAAA,MAAM,UAAU,OAAA,KAAY,OAAA;AAE5B,EAAA,IAAI,OAAA,IAAW,iBAAiB,OAAO,CAAA,KAAM,QAAQ,IAAA,IAAQ,IAAA,CAAK,IAAA,EAAK,KAAM,EAAA,CAAA,EAAK;AAChF,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAA0B;AAAA,IAC9B,GAAI,UAAA,GAAa,CAAC,cAAA,CAAe,UAAA,KAAe,IAAA,GAAO,EAAC,GAAI,UAAU,CAAC,CAAA,GAAI,EAAC;AAAA,IAC5E,GAAI,WAAA,GAAc,CAACC,sBAAA,EAAO,IAAI,EAAC;AAAA,IAC/B,GAAG,mBAAA,CAAoB,EAAE,OAAA,EAAS,IAAA,EAAM,eAAe,CAAA;AAAA,IACvD,GAAI,SAAS,WAAA,GACT;AAAA,MACEC,+BAAA,CAAiB;AAAA,QACf,MAAA,EAAQ,KAAA;AAAA,QACR,QAAA,EAAUC,qBAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,WAAW;AAAA,OAC5C;AAAA,QAEH,EAAC;AAAA,IACL,GAAI,KAAA,IAAS,QAAA,GAAW,CAACC,yBAAA,EAAU,IAAI,EAAC;AAAA,IACxC,GAAG,YAAA;AAAA,IACH,GAAI,OAAA,KAAY,KAAA,IAAS,MAAA,CAAA,GAAU,CAAC,eAAA,CAAgB,EAAE,KAAA,EAAO,MAAA,EAAQ,CAAC,CAAA,GAAI;AAAC,GAC7E;AAEA,EAAA,MAAM,iBAAA,GAAoB,iBAAiB,eAAe,CAAA;AAC1D,EAAA,MAAM,eAAA,GAAkB,qBAAA,CAAsB,iBAAA,EAAmB,aAAa,CAAA;AAE9E,EAAA,MAAM,IAAA,GAAmB;AAAA,IACvB,IAAA,EAAM,OAAA;AAAA,IACN,SAAA,EAAW,KAAA;AAAA,IACX,OAAA;AAAA,IACA,OAAA,EAAS;AAAA,MACP;AAAA,KACF;AAAA,IACA,GAAA,EAAK;AAAA,MACH,mBAAA,EAAqB;AAAA,QACnB,IAAA,EAAM,iBAAiB,IAAI;AAAA;AAC7B,KACF;AAAA,IACA,GAAI,KAAA,GACA;AAAA,MACE,MAAA,EAAQ;AAAA,QACN,KAAA,EAAO,QAAA,GAAW,EAAC,GAAI,MAAA;AAAA,QACvB,IAAA,EAAM,IAAA;AAAA,QACN,IAAA,EAAM,WAAA;AAAA,QACN,GAAI,QAAA,GAAW,EAAE,KAAA,EAAO,QAAA,KAAa;AAAC;AACxC,KACF,GACA;AAAA,MACE,KAAA,EAAO;AAAA,QACL,MAAA;AAAA,QACA,WAAA,EAAa,IAAA;AAAA,QACb,GAAA,EAAK;AAAA,UACH,KAAA,EAAOD,qBAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,KAAK,CAAA;AAAA,UAClC,GAAI,IAAA,IAAQ,IAAA,IAAQ,IAAA,CAAK,IAAA,OAAW,EAAA,GAAK,EAAE,IAAA,EAAK,GAAI,EAAC;AAAA,UACrD,OAAA;AAAA,UACA,QAAA,EAAU,sBAAA,CAAuB,QAAA,EAAU,OAAO,CAAA;AAAA,UAClD;AAAA,SACF;AAAA,QACA,eAAA,EAAiB;AAAA,UACf,QAAA,EAAU,CAAC,EAAA,KAAe,oBAAA,CAAqB,IAAI,iBAAiB,CAAA;AAAA,UACpE,MAAA,EAAQ;AAAA,YACN,OAAA,EAAS,CAAC,EAAA,KAAe,wBAAA,CAAyB,IAAI,eAAe;AAAA;AACvE;AACF;AACF;AACF,GACN;AAEA,EAAA,IAAI,MAAA,GAAS,YAAA,GAAeE,gBAAA,CAAY,IAAA,EAAM,YAAY,CAAA,GAAI,IAAA;AAC9D,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,MAAA,GAAS,UAAU,MAAM,CAAA;AAAA,EAC3B;AACA,EAAA,OAAO,MAAA;AACT","file":"create-library-vite-config.cjs","sourcesContent":["import type { PluginOption } from \"vite\";\r\n\r\n/** @public */\r\nexport interface LifecyclePluginOptions {\r\n /** 构建开始(Vite `buildStart`)。仅同步。 */\r\n onRun?: () => void;\r\n /**\r\n * 产物写盘成功之后(`writeBundle` sequential post)。\r\n * 工厂中排在 Hash 根入口写入之后;Hash 写入失败不会调用。\r\n */\r\n onDone?: () => void | Promise<void>;\r\n}\r\n\r\n/**\r\n * 构建起止回调。`onDone` 使用 sequential post `writeBundle`,\r\n * 以便排在 Hash 部署等其它 post 写入之后。\r\n * @public\r\n */\r\nexport function lifecyclePlugin(options: LifecyclePluginOptions = {}): PluginOption {\r\n const { onRun, onDone } = options;\r\n\r\n return {\r\n name: \"build-lifecycle\",\r\n enforce: \"post\",\r\n buildStart() {\r\n if (typeof onRun === \"function\") {\r\n onRun();\r\n }\r\n },\r\n writeBundle: {\r\n sequential: true,\r\n order: \"post\",\r\n async handler() {\r\n if (typeof onDone === \"function\") {\r\n await onDone();\r\n }\r\n },\r\n },\r\n };\r\n}\r\n","import type { LessOptions } from \"../types.ts\";\r\n\r\n/**\r\n * Less 插件:把 webpack 遗留的 `~pkg/...` 导入解析到 node_modules。\r\n *\r\n * Less 自身不认识 `~`(那是 webpack `less-loader` 的约定:从 node_modules 解析);Vite 的\r\n * Less 预处理器也不处理 `~`,会回退到 Less 默认 FileManager 去查找 `node_modules/~pkg/...` 而失败。\r\n * 本插件注册一个 FileManager:仅当导入以 `~` 开头时拦截,去掉前缀后交给默认 FileManager 解析\r\n * (Vite 恒向 `less.render` 注入 `paths: [\"node_modules\"]`)。\r\n *\r\n * 第三方包(如 formily 系)自带 `@import \"~antd/...\"` 时尤其需要——消费方无法修改 node_modules。\r\n * @public\r\n */\r\nexport function lessTildeResolutionPlugin() {\r\n return {\r\n install(less: any, pluginManager: any) {\r\n class TildeFileManager extends less.FileManager {\r\n supports(filename: string) {\r\n return filename.startsWith(\"~\");\r\n }\r\n loadFile(filename: string, currentDirectory: string, options: any, environment: any) {\r\n // `~pkg/...` → `pkg/...`,让默认 FileManager 从 node_modules 解析\r\n return super.loadFile(filename.slice(1), currentDirectory, options, environment);\r\n }\r\n }\r\n pluginManager.addFileManager(new TildeFileManager());\r\n },\r\n };\r\n}\r\n\r\n/**\r\n * 组装 `css.preprocessorOptions.less`:映射 webpack `less-loader` 选项,\r\n * `less.resolveTilde: true` 时注入 `~` 解析插件(默认关闭)。\r\n * @public\r\n */\r\nexport function buildLessOptions(less?: LessOptions) {\r\n const resolveTilde = less?.resolveTilde === true;\r\n return {\r\n ...(less?.additionalData != null ? { additionalData: less.additionalData } : {}),\r\n ...(less?.modifyVars != null ? { modifyVars: less.modifyVars } : {}),\r\n ...(less?.javascriptEnabled != null ? { javascriptEnabled: less.javascriptEnabled } : {}),\r\n ...(resolveTilde ? { plugins: [lessTildeResolutionPlugin()] } : {}),\r\n };\r\n}\r\n","import babel from \"@rolldown/plugin-babel\";\r\nimport { reactCompilerPreset } from \"@vitejs/plugin-react\";\r\n\r\nimport type { ReactCompilerMode } from \"../types.ts\";\r\nimport type { PluginOption } from \"vite\";\r\n\r\n/** @public */\r\nexport interface ReactCompilerPluginOptions {\r\n command: string;\r\n /**\r\n * - `true`:始终启用\r\n * - `\"build-only\"`:仅 build,且 `REACT_COMPILER=false` 可关\r\n * - `false`:关闭\r\n */\r\n mode?: ReactCompilerMode;\r\n}\r\n\r\n/**\r\n * React Compiler(babel preset)。默认仅生产构建启用。\r\n * @public\r\n */\r\nexport function reactCompilerPlugin(options: ReactCompilerPluginOptions): PluginOption[] {\r\n const { command, mode = \"build-only\" } = options;\r\n if (mode === false) return [];\r\n\r\n const isBuild = command === \"build\";\r\n const enabled = mode === true ? true : isBuild && process.env.REACT_COMPILER !== \"false\";\r\n\r\n if (!enabled) return [];\r\n\r\n return [babel({ presets: [reactCompilerPreset()] })];\r\n}\r\n","import fs from \"node:fs/promises\";\r\nimport { transformWithOxc } from \"vite\";\r\n\r\nimport type { Config } from \"@svgr/core\";\r\nimport type { Plugin } from \"vite\";\r\n\r\n/**\r\n * @see https://react-svgr.com/docs/options/\r\n * @public\r\n */\r\nexport interface SvgReactOptions {\r\n /** @defaultValue true */\r\n svgo?: boolean;\r\n icon?: boolean;\r\n [key: string]: unknown;\r\n}\r\n\r\nconst SVG_EXT_RE = /\\.svg$/i;\r\n\r\n/**\r\n * `*.svg?react`(及带其它 query 时的 `react` 段)。\r\n * 不匹配 `?reactive` / webpack 的 `?svgEle`。\r\n */\r\nexport function isSvgReactId(id: string): boolean {\r\n const queryStart = id.indexOf(\"?\");\r\n if (queryStart === -1) return false;\r\n const file = id.slice(0, queryStart);\r\n if (!SVG_EXT_RE.test(file)) return false;\r\n return /(?:^|&)react(?:&|$)/.test(id.slice(queryStart + 1));\r\n}\r\n\r\nfunction missingPeerError(pkg: string, cause: unknown): Error {\r\n const error = new Error(\r\n `[svg-react] \"${pkg}\" is required to transform *.svg?react. Install the optional peer or disable CreateAppViteConfigOptions.svgr.`,\r\n );\r\n error.cause = cause;\r\n return error;\r\n}\r\n\r\nasync function resolveSvgrConfig(options: SvgReactOptions): Promise<Config> {\r\n const merged: Config = { svgo: true, ...options };\r\n if (merged.plugins != null) return merged;\r\n\r\n const plugins: NonNullable<Config[\"plugins\"]> = [];\r\n if (merged.svgo !== false) {\r\n try {\r\n plugins.push((await import(\"@svgr/plugin-svgo\")).default);\r\n } catch (cause) {\r\n throw missingPeerError(\"@svgr/plugin-svgo\", cause);\r\n }\r\n }\r\n try {\r\n plugins.push((await import(\"@svgr/plugin-jsx\")).default);\r\n } catch (cause) {\r\n throw missingPeerError(\"@svgr/plugin-jsx\", cause);\r\n }\r\n return { ...merged, plugins };\r\n}\r\n\r\n/**\r\n * 将 `import Icon from \"./icon.svg?react\"` 编成 React 组件。\r\n * 普通 `*.svg` 仍走 Vite 默认资源 URL,本插件不处理。\r\n *\r\n * `@svgr/core` / `@svgr/plugin-jsx`(以及默认开启 SVGO 时的 `@svgr/plugin-svgo`)\r\n * 仅在真正命中 `?react` 时动态加载,根入口不会静态依赖它们。\r\n * @public\r\n */\r\nexport function svgReactPlugin(options: SvgReactOptions = {}): Plugin {\r\n return {\r\n name: \"ccc:svg-react\",\r\n enforce: \"pre\",\r\n async load(id) {\r\n if (!isSvgReactId(id)) return;\r\n\r\n const filePath = id.slice(0, id.indexOf(\"?\"));\r\n const svg = await fs.readFile(filePath, \"utf8\");\r\n let transform;\r\n try {\r\n ({ transform } = await import(\"@svgr/core\"));\r\n } catch (cause) {\r\n throw missingPeerError(\"@svgr/core\", cause);\r\n }\r\n const componentCode = await transform(svg, await resolveSvgrConfig(options), { filePath });\r\n const result = await transformWithOxc(componentCode, `${filePath}.jsx`, {\r\n lang: \"jsx\",\r\n });\r\n return { code: result.code, map: result.map };\r\n },\r\n };\r\n}\r\n","import path from \"node:path\";\r\nimport basicSsl from \"@vitejs/plugin-basic-ssl\";\r\nimport react from \"@vitejs/plugin-react\";\r\nimport { mergeConfig, type PluginOption, type UserConfig } from \"vite\";\r\nimport { createHtmlPlugin } from \"vite-plugin-html\";\r\n\r\nimport { lifecyclePlugin } from \"./plugins/lifecycle.ts\";\r\nimport { buildLessOptions } from \"./plugins/less-tilde.ts\";\r\nimport { reactCompilerPlugin } from \"./plugins/react-compiler.ts\";\r\nimport { svgReactPlugin } from \"./plugins/svg-react.ts\";\r\n\r\nimport type { CreateLibraryViteConfigOptions, LibraryFormats } from \"./types.ts\";\r\n\r\n/**\r\n * 组件库构建默认外置\r\n * 传入 `externals` 时整表替换;追加时展开本常量。\r\n * @public\r\n */\r\nexport const DEFAULT_LIBRARY_EXTERNALS = [\"react\", \"react-dom\"] as const;\r\n\r\n/**\r\n * UMD / IIFE 默认全局名。未出现在表里的字符串 external 用自身包名。\r\n * @public\r\n */\r\nexport const DEFAULT_LIBRARY_GLOBALS: Record<string, string> = {\r\n react: \"React\",\r\n \"react-dom\": \"ReactDOM\",\r\n};\r\n\r\nconst DEFAULT_LIBRARY_FORMATS: LibraryFormats[] = [\"umd\"];\r\n\r\nfunction needsLibraryName(formats: readonly LibraryFormats[]): boolean {\r\n return formats.includes(\"umd\") || formats.includes(\"iife\");\r\n}\r\n\r\nfunction resolveExternals(\r\n externals: CreateLibraryViteConfigOptions[\"externals\"],\r\n): (string | RegExp)[] {\r\n if (externals === false) return [];\r\n if (externals == null) return [...DEFAULT_LIBRARY_EXTERNALS];\r\n return externals;\r\n}\r\n\r\nfunction resolveLibraryFileName(\r\n fileName: CreateLibraryViteConfigOptions[\"fileName\"],\r\n formats: readonly LibraryFormats[],\r\n): string | ((format: string, entryName: string) => string) {\r\n if (fileName != null) return fileName;\r\n if (formats.length === 1) {\r\n return () => \"index.js\";\r\n }\r\n return (format) => (format === \"es\" ? \"index.js\" : `index.${format}.js`);\r\n}\r\n\r\nfunction resolveLibraryGlobals(\r\n externals: readonly (string | RegExp)[],\r\n globals?: Record<string, string>,\r\n): Record<string, string> {\r\n const inferred: Record<string, string> = {};\r\n for (const ext of externals) {\r\n if (typeof ext !== \"string\") continue;\r\n inferred[ext] = DEFAULT_LIBRARY_GLOBALS[ext] ?? ext;\r\n }\r\n return { ...inferred, ...globals };\r\n}\r\n\r\n/** 字符串 external 同时匹配子路径(如 `react` → `react/jsx-runtime`)。 */\r\nexport function matchLibraryExternal(id: string, externals: readonly (string | RegExp)[]): boolean {\r\n const source = id.split(\"?\")[0] ?? id;\r\n return externals.some((ext) => {\r\n if (typeof ext === \"string\") {\r\n return source === ext || source.startsWith(`${ext}/`);\r\n }\r\n return ext.test(source);\r\n });\r\n}\r\n\r\nfunction resolveLibraryGlobalName(id: string, globals: Record<string, string>): string {\r\n const source = id.split(\"?\")[0] ?? id;\r\n if (globals[source]) return globals[source];\r\n const matched = Object.keys(globals).find(\r\n (key) => source === key || source.startsWith(`${key}/`),\r\n );\r\n return matched ? (globals[matched] ?? source) : source;\r\n}\r\n\r\n/**\r\n * 组装组件库 Vite 配置:build 走 `build.lib`(默认 UMD → `lib/`),serve 为预览应用。\r\n *\r\n * 不启用 Hash 部署、public 复制、public-config。不默认 `example/` 预览目录或 antd / Formily externals。\r\n *\r\n * 合并顺序:`base(options) → mergeConfig(base, vite) → configure(final)`\r\n * @public\r\n */\r\nexport function createLibraryViteConfig(options: CreateLibraryViteConfigOptions): UserConfig {\r\n const {\r\n rootDir,\r\n command,\r\n alias,\r\n entry = \"src/index.ts\",\r\n name,\r\n outDir = \"lib\",\r\n fileName,\r\n cssFileName = \"index\",\r\n formats = DEFAULT_LIBRARY_FORMATS,\r\n externals: externalsOption,\r\n globals: globalsOption,\r\n useHttps = false,\r\n openBrowser = true,\r\n devProxy,\r\n reactCompiler = \"build-only\",\r\n react: enableReact = true,\r\n svgr: svgrOption = false,\r\n less,\r\n previewHtml,\r\n onRun,\r\n onDone,\r\n plugins: extraPlugins = [],\r\n vite: viteOverride,\r\n configure,\r\n } = options;\r\n\r\n const isDev = command === \"serve\";\r\n const isBuild = command === \"build\";\r\n\r\n if (isBuild && needsLibraryName(formats) && (name == null || name.trim() === \"\")) {\r\n throw new Error(\r\n '[vite-config] createLibraryViteConfig: `name` is required when formats include \"umd\" or \"iife\".',\r\n );\r\n }\r\n\r\n const plugins: PluginOption[] = [\r\n ...(svgrOption ? [svgReactPlugin(svgrOption === true ? {} : svgrOption)] : []),\r\n ...(enableReact ? [react()] : []),\r\n ...reactCompilerPlugin({ command, mode: reactCompiler }),\r\n ...(isDev && previewHtml\r\n ? [\r\n createHtmlPlugin({\r\n minify: false,\r\n template: path.resolve(rootDir, previewHtml),\r\n }),\r\n ]\r\n : []),\r\n ...(isDev && useHttps ? [basicSsl()] : []),\r\n ...extraPlugins,\r\n ...(isBuild && (onRun || onDone) ? [lifecyclePlugin({ onRun, onDone })] : []),\r\n ];\r\n\r\n const resolvedExternals = resolveExternals(externalsOption);\r\n const resolvedGlobals = resolveLibraryGlobals(resolvedExternals, globalsOption);\r\n\r\n const base: UserConfig = {\r\n root: rootDir,\r\n publicDir: false,\r\n plugins,\r\n resolve: {\r\n alias,\r\n },\r\n css: {\r\n preprocessorOptions: {\r\n less: buildLessOptions(less),\r\n },\r\n },\r\n ...(isDev\r\n ? {\r\n server: {\r\n https: useHttps ? {} : undefined,\r\n host: true,\r\n open: openBrowser,\r\n ...(devProxy ? { proxy: devProxy } : {}),\r\n },\r\n }\r\n : {\r\n build: {\r\n outDir,\r\n emptyOutDir: true,\r\n lib: {\r\n entry: path.resolve(rootDir, entry),\r\n ...(name != null && name.trim() !== \"\" ? { name } : {}),\r\n formats,\r\n fileName: resolveLibraryFileName(fileName, formats),\r\n cssFileName,\r\n },\r\n rolldownOptions: {\r\n external: (id: string) => matchLibraryExternal(id, resolvedExternals),\r\n output: {\r\n globals: (id: string) => resolveLibraryGlobalName(id, resolvedGlobals),\r\n },\r\n },\r\n },\r\n }),\r\n };\r\n\r\n let merged = viteOverride ? mergeConfig(base, viteOverride) : base;\r\n if (configure) {\r\n merged = configure(merged);\r\n }\r\n return merged;\r\n}\r\n"]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { UserConfig } from 'vite';
|
|
2
|
+
import { CreateLibraryViteConfigOptions } from './types.cjs';
|
|
3
|
+
import './plugins/copy.cjs';
|
|
4
|
+
import 'vite-plugin-static-copy';
|
|
5
|
+
import './plugins/hash-deploy.cjs';
|
|
6
|
+
import './plugins/svg-react.cjs';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* 组件库构建默认外置
|
|
10
|
+
* 传入 `externals` 时整表替换;追加时展开本常量。
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
declare const DEFAULT_LIBRARY_EXTERNALS: readonly ["react", "react-dom"];
|
|
14
|
+
/**
|
|
15
|
+
* UMD / IIFE 默认全局名。未出现在表里的字符串 external 用自身包名。
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
18
|
+
declare const DEFAULT_LIBRARY_GLOBALS: Record<string, string>;
|
|
19
|
+
/** 字符串 external 同时匹配子路径(如 `react` → `react/jsx-runtime`)。 */
|
|
20
|
+
declare function matchLibraryExternal(id: string, externals: readonly (string | RegExp)[]): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* 组装组件库 Vite 配置:build 走 `build.lib`(默认 UMD → `lib/`),serve 为预览应用。
|
|
23
|
+
*
|
|
24
|
+
* 不启用 Hash 部署、public 复制、public-config。不默认 `example/` 预览目录或 antd / Formily externals。
|
|
25
|
+
*
|
|
26
|
+
* 合并顺序:`base(options) → mergeConfig(base, vite) → configure(final)`
|
|
27
|
+
* @public
|
|
28
|
+
*/
|
|
29
|
+
declare function createLibraryViteConfig(options: CreateLibraryViteConfigOptions): UserConfig;
|
|
30
|
+
|
|
31
|
+
export { DEFAULT_LIBRARY_EXTERNALS, DEFAULT_LIBRARY_GLOBALS, createLibraryViteConfig, matchLibraryExternal };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { UserConfig } from 'vite';
|
|
2
|
+
import { CreateLibraryViteConfigOptions } from './types.js';
|
|
3
|
+
import './plugins/copy.js';
|
|
4
|
+
import 'vite-plugin-static-copy';
|
|
5
|
+
import './plugins/hash-deploy.js';
|
|
6
|
+
import './plugins/svg-react.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* 组件库构建默认外置
|
|
10
|
+
* 传入 `externals` 时整表替换;追加时展开本常量。
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
declare const DEFAULT_LIBRARY_EXTERNALS: readonly ["react", "react-dom"];
|
|
14
|
+
/**
|
|
15
|
+
* UMD / IIFE 默认全局名。未出现在表里的字符串 external 用自身包名。
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
18
|
+
declare const DEFAULT_LIBRARY_GLOBALS: Record<string, string>;
|
|
19
|
+
/** 字符串 external 同时匹配子路径(如 `react` → `react/jsx-runtime`)。 */
|
|
20
|
+
declare function matchLibraryExternal(id: string, externals: readonly (string | RegExp)[]): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* 组装组件库 Vite 配置:build 走 `build.lib`(默认 UMD → `lib/`),serve 为预览应用。
|
|
23
|
+
*
|
|
24
|
+
* 不启用 Hash 部署、public 复制、public-config。不默认 `example/` 预览目录或 antd / Formily externals。
|
|
25
|
+
*
|
|
26
|
+
* 合并顺序:`base(options) → mergeConfig(base, vite) → configure(final)`
|
|
27
|
+
* @public
|
|
28
|
+
*/
|
|
29
|
+
declare function createLibraryViteConfig(options: CreateLibraryViteConfigOptions): UserConfig;
|
|
30
|
+
|
|
31
|
+
export { DEFAULT_LIBRARY_EXTERNALS, DEFAULT_LIBRARY_GLOBALS, createLibraryViteConfig, matchLibraryExternal };
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import basicSsl from '@vitejs/plugin-basic-ssl';
|
|
3
|
+
import react, { reactCompilerPreset } from '@vitejs/plugin-react';
|
|
4
|
+
import { mergeConfig, transformWithOxc } from 'vite';
|
|
5
|
+
import { createHtmlPlugin } from 'vite-plugin-html';
|
|
6
|
+
import babel from '@rolldown/plugin-babel';
|
|
7
|
+
import fs from 'fs/promises';
|
|
8
|
+
|
|
9
|
+
// src/create-library-vite-config.ts
|
|
10
|
+
|
|
11
|
+
// src/plugins/lifecycle.ts
|
|
12
|
+
function lifecyclePlugin(options = {}) {
|
|
13
|
+
const { onRun, onDone } = options;
|
|
14
|
+
return {
|
|
15
|
+
name: "build-lifecycle",
|
|
16
|
+
enforce: "post",
|
|
17
|
+
buildStart() {
|
|
18
|
+
if (typeof onRun === "function") {
|
|
19
|
+
onRun();
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
writeBundle: {
|
|
23
|
+
sequential: true,
|
|
24
|
+
order: "post",
|
|
25
|
+
async handler() {
|
|
26
|
+
if (typeof onDone === "function") {
|
|
27
|
+
await onDone();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// src/plugins/less-tilde.ts
|
|
35
|
+
function lessTildeResolutionPlugin() {
|
|
36
|
+
return {
|
|
37
|
+
install(less, pluginManager) {
|
|
38
|
+
class TildeFileManager extends less.FileManager {
|
|
39
|
+
supports(filename) {
|
|
40
|
+
return filename.startsWith("~");
|
|
41
|
+
}
|
|
42
|
+
loadFile(filename, currentDirectory, options, environment) {
|
|
43
|
+
return super.loadFile(filename.slice(1), currentDirectory, options, environment);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
pluginManager.addFileManager(new TildeFileManager());
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function buildLessOptions(less) {
|
|
51
|
+
const resolveTilde = less?.resolveTilde === true;
|
|
52
|
+
return {
|
|
53
|
+
...less?.additionalData != null ? { additionalData: less.additionalData } : {},
|
|
54
|
+
...less?.modifyVars != null ? { modifyVars: less.modifyVars } : {},
|
|
55
|
+
...less?.javascriptEnabled != null ? { javascriptEnabled: less.javascriptEnabled } : {},
|
|
56
|
+
...resolveTilde ? { plugins: [lessTildeResolutionPlugin()] } : {}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function reactCompilerPlugin(options) {
|
|
60
|
+
const { command, mode = "build-only" } = options;
|
|
61
|
+
if (mode === false) return [];
|
|
62
|
+
const isBuild = command === "build";
|
|
63
|
+
const enabled = mode === true ? true : isBuild && process.env.REACT_COMPILER !== "false";
|
|
64
|
+
if (!enabled) return [];
|
|
65
|
+
return [babel({ presets: [reactCompilerPreset()] })];
|
|
66
|
+
}
|
|
67
|
+
var SVG_EXT_RE = /\.svg$/i;
|
|
68
|
+
function isSvgReactId(id) {
|
|
69
|
+
const queryStart = id.indexOf("?");
|
|
70
|
+
if (queryStart === -1) return false;
|
|
71
|
+
const file = id.slice(0, queryStart);
|
|
72
|
+
if (!SVG_EXT_RE.test(file)) return false;
|
|
73
|
+
return /(?:^|&)react(?:&|$)/.test(id.slice(queryStart + 1));
|
|
74
|
+
}
|
|
75
|
+
function missingPeerError(pkg, cause) {
|
|
76
|
+
const error = new Error(
|
|
77
|
+
`[svg-react] "${pkg}" is required to transform *.svg?react. Install the optional peer or disable CreateAppViteConfigOptions.svgr.`
|
|
78
|
+
);
|
|
79
|
+
error.cause = cause;
|
|
80
|
+
return error;
|
|
81
|
+
}
|
|
82
|
+
async function resolveSvgrConfig(options) {
|
|
83
|
+
const merged = { svgo: true, ...options };
|
|
84
|
+
if (merged.plugins != null) return merged;
|
|
85
|
+
const plugins = [];
|
|
86
|
+
if (merged.svgo !== false) {
|
|
87
|
+
try {
|
|
88
|
+
plugins.push((await import('@svgr/plugin-svgo')).default);
|
|
89
|
+
} catch (cause) {
|
|
90
|
+
throw missingPeerError("@svgr/plugin-svgo", cause);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
plugins.push((await import('@svgr/plugin-jsx')).default);
|
|
95
|
+
} catch (cause) {
|
|
96
|
+
throw missingPeerError("@svgr/plugin-jsx", cause);
|
|
97
|
+
}
|
|
98
|
+
return { ...merged, plugins };
|
|
99
|
+
}
|
|
100
|
+
function svgReactPlugin(options = {}) {
|
|
101
|
+
return {
|
|
102
|
+
name: "ccc:svg-react",
|
|
103
|
+
enforce: "pre",
|
|
104
|
+
async load(id) {
|
|
105
|
+
if (!isSvgReactId(id)) return;
|
|
106
|
+
const filePath = id.slice(0, id.indexOf("?"));
|
|
107
|
+
const svg = await fs.readFile(filePath, "utf8");
|
|
108
|
+
let transform;
|
|
109
|
+
try {
|
|
110
|
+
({ transform } = await import('@svgr/core'));
|
|
111
|
+
} catch (cause) {
|
|
112
|
+
throw missingPeerError("@svgr/core", cause);
|
|
113
|
+
}
|
|
114
|
+
const componentCode = await transform(svg, await resolveSvgrConfig(options), { filePath });
|
|
115
|
+
const result = await transformWithOxc(componentCode, `${filePath}.jsx`, {
|
|
116
|
+
lang: "jsx"
|
|
117
|
+
});
|
|
118
|
+
return { code: result.code, map: result.map };
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// src/create-library-vite-config.ts
|
|
124
|
+
var DEFAULT_LIBRARY_EXTERNALS = ["react", "react-dom"];
|
|
125
|
+
var DEFAULT_LIBRARY_GLOBALS = {
|
|
126
|
+
react: "React",
|
|
127
|
+
"react-dom": "ReactDOM"
|
|
128
|
+
};
|
|
129
|
+
var DEFAULT_LIBRARY_FORMATS = ["umd"];
|
|
130
|
+
function needsLibraryName(formats) {
|
|
131
|
+
return formats.includes("umd") || formats.includes("iife");
|
|
132
|
+
}
|
|
133
|
+
function resolveExternals(externals) {
|
|
134
|
+
if (externals === false) return [];
|
|
135
|
+
if (externals == null) return [...DEFAULT_LIBRARY_EXTERNALS];
|
|
136
|
+
return externals;
|
|
137
|
+
}
|
|
138
|
+
function resolveLibraryFileName(fileName, formats) {
|
|
139
|
+
if (fileName != null) return fileName;
|
|
140
|
+
if (formats.length === 1) {
|
|
141
|
+
return () => "index.js";
|
|
142
|
+
}
|
|
143
|
+
return (format) => format === "es" ? "index.js" : `index.${format}.js`;
|
|
144
|
+
}
|
|
145
|
+
function resolveLibraryGlobals(externals, globals) {
|
|
146
|
+
const inferred = {};
|
|
147
|
+
for (const ext of externals) {
|
|
148
|
+
if (typeof ext !== "string") continue;
|
|
149
|
+
inferred[ext] = DEFAULT_LIBRARY_GLOBALS[ext] ?? ext;
|
|
150
|
+
}
|
|
151
|
+
return { ...inferred, ...globals };
|
|
152
|
+
}
|
|
153
|
+
function matchLibraryExternal(id, externals) {
|
|
154
|
+
const source = id.split("?")[0] ?? id;
|
|
155
|
+
return externals.some((ext) => {
|
|
156
|
+
if (typeof ext === "string") {
|
|
157
|
+
return source === ext || source.startsWith(`${ext}/`);
|
|
158
|
+
}
|
|
159
|
+
return ext.test(source);
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
function resolveLibraryGlobalName(id, globals) {
|
|
163
|
+
const source = id.split("?")[0] ?? id;
|
|
164
|
+
if (globals[source]) return globals[source];
|
|
165
|
+
const matched = Object.keys(globals).find(
|
|
166
|
+
(key) => source === key || source.startsWith(`${key}/`)
|
|
167
|
+
);
|
|
168
|
+
return matched ? globals[matched] ?? source : source;
|
|
169
|
+
}
|
|
170
|
+
function createLibraryViteConfig(options) {
|
|
171
|
+
const {
|
|
172
|
+
rootDir,
|
|
173
|
+
command,
|
|
174
|
+
alias,
|
|
175
|
+
entry = "src/index.ts",
|
|
176
|
+
name,
|
|
177
|
+
outDir = "lib",
|
|
178
|
+
fileName,
|
|
179
|
+
cssFileName = "index",
|
|
180
|
+
formats = DEFAULT_LIBRARY_FORMATS,
|
|
181
|
+
externals: externalsOption,
|
|
182
|
+
globals: globalsOption,
|
|
183
|
+
useHttps = false,
|
|
184
|
+
openBrowser = true,
|
|
185
|
+
devProxy,
|
|
186
|
+
reactCompiler = "build-only",
|
|
187
|
+
react: enableReact = true,
|
|
188
|
+
svgr: svgrOption = false,
|
|
189
|
+
less,
|
|
190
|
+
previewHtml,
|
|
191
|
+
onRun,
|
|
192
|
+
onDone,
|
|
193
|
+
plugins: extraPlugins = [],
|
|
194
|
+
vite: viteOverride,
|
|
195
|
+
configure
|
|
196
|
+
} = options;
|
|
197
|
+
const isDev = command === "serve";
|
|
198
|
+
const isBuild = command === "build";
|
|
199
|
+
if (isBuild && needsLibraryName(formats) && (name == null || name.trim() === "")) {
|
|
200
|
+
throw new Error(
|
|
201
|
+
'[vite-config] createLibraryViteConfig: `name` is required when formats include "umd" or "iife".'
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
const plugins = [
|
|
205
|
+
...svgrOption ? [svgReactPlugin(svgrOption === true ? {} : svgrOption)] : [],
|
|
206
|
+
...enableReact ? [react()] : [],
|
|
207
|
+
...reactCompilerPlugin({ command, mode: reactCompiler }),
|
|
208
|
+
...isDev && previewHtml ? [
|
|
209
|
+
createHtmlPlugin({
|
|
210
|
+
minify: false,
|
|
211
|
+
template: path.resolve(rootDir, previewHtml)
|
|
212
|
+
})
|
|
213
|
+
] : [],
|
|
214
|
+
...isDev && useHttps ? [basicSsl()] : [],
|
|
215
|
+
...extraPlugins,
|
|
216
|
+
...isBuild && (onRun || onDone) ? [lifecyclePlugin({ onRun, onDone })] : []
|
|
217
|
+
];
|
|
218
|
+
const resolvedExternals = resolveExternals(externalsOption);
|
|
219
|
+
const resolvedGlobals = resolveLibraryGlobals(resolvedExternals, globalsOption);
|
|
220
|
+
const base = {
|
|
221
|
+
root: rootDir,
|
|
222
|
+
publicDir: false,
|
|
223
|
+
plugins,
|
|
224
|
+
resolve: {
|
|
225
|
+
alias
|
|
226
|
+
},
|
|
227
|
+
css: {
|
|
228
|
+
preprocessorOptions: {
|
|
229
|
+
less: buildLessOptions(less)
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
...isDev ? {
|
|
233
|
+
server: {
|
|
234
|
+
https: useHttps ? {} : void 0,
|
|
235
|
+
host: true,
|
|
236
|
+
open: openBrowser,
|
|
237
|
+
...devProxy ? { proxy: devProxy } : {}
|
|
238
|
+
}
|
|
239
|
+
} : {
|
|
240
|
+
build: {
|
|
241
|
+
outDir,
|
|
242
|
+
emptyOutDir: true,
|
|
243
|
+
lib: {
|
|
244
|
+
entry: path.resolve(rootDir, entry),
|
|
245
|
+
...name != null && name.trim() !== "" ? { name } : {},
|
|
246
|
+
formats,
|
|
247
|
+
fileName: resolveLibraryFileName(fileName, formats),
|
|
248
|
+
cssFileName
|
|
249
|
+
},
|
|
250
|
+
rolldownOptions: {
|
|
251
|
+
external: (id) => matchLibraryExternal(id, resolvedExternals),
|
|
252
|
+
output: {
|
|
253
|
+
globals: (id) => resolveLibraryGlobalName(id, resolvedGlobals)
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
let merged = viteOverride ? mergeConfig(base, viteOverride) : base;
|
|
260
|
+
if (configure) {
|
|
261
|
+
merged = configure(merged);
|
|
262
|
+
}
|
|
263
|
+
return merged;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
export { DEFAULT_LIBRARY_EXTERNALS, DEFAULT_LIBRARY_GLOBALS, createLibraryViteConfig, matchLibraryExternal };
|
|
267
|
+
//# sourceMappingURL=create-library-vite-config.js.map
|
|
268
|
+
//# sourceMappingURL=create-library-vite-config.js.map
|