unplugin-env 1.0.2 → 1.0.4
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/LICENSE +1 -1
- package/README.md +29 -0
- package/README.zh-CN.md +29 -0
- package/dist/{chunk-6I6MSMXF.js → chunk-C7PRSZM3.js} +1 -1
- package/dist/{chunk-V2T5VQQ7.js → chunk-U46ND53S.js} +537 -160
- package/dist/{chunk-664Z6SFJ.js → chunk-ZHT777ZG.js} +1 -1
- package/dist/esbuild.cjs +538 -161
- package/dist/esbuild.js +1 -1
- package/dist/index.cjs +538 -161
- package/dist/index.js +1 -1
- package/dist/nuxt.cjs +538 -161
- package/dist/nuxt.js +3 -3
- package/dist/rollup.cjs +538 -161
- package/dist/rollup.js +1 -1
- package/dist/types.d.cts +15 -7
- package/dist/types.d.ts +15 -7
- package/dist/vite.cjs +538 -161
- package/dist/vite.js +2 -2
- package/dist/webpack.cjs +538 -161
- package/dist/webpack.js +2 -2
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -1147,7 +1147,7 @@ var require_parse = __commonJS({
|
|
|
1147
1147
|
CHAR_NO_BREAK_SPACE,
|
|
1148
1148
|
CHAR_ZERO_WIDTH_NOBREAK_SPACE
|
|
1149
1149
|
} = require_constants();
|
|
1150
|
-
var
|
|
1150
|
+
var parse2 = (input, options = {}) => {
|
|
1151
1151
|
if (typeof input !== "string") {
|
|
1152
1152
|
throw new TypeError("Expected a string");
|
|
1153
1153
|
}
|
|
@@ -1347,7 +1347,7 @@ var require_parse = __commonJS({
|
|
|
1347
1347
|
push({ type: "eos" });
|
|
1348
1348
|
return ast;
|
|
1349
1349
|
};
|
|
1350
|
-
module2.exports =
|
|
1350
|
+
module2.exports = parse2;
|
|
1351
1351
|
}
|
|
1352
1352
|
});
|
|
1353
1353
|
|
|
@@ -1358,7 +1358,7 @@ var require_braces = __commonJS({
|
|
|
1358
1358
|
var stringify = require_stringify();
|
|
1359
1359
|
var compile = require_compile();
|
|
1360
1360
|
var expand = require_expand();
|
|
1361
|
-
var
|
|
1361
|
+
var parse2 = require_parse();
|
|
1362
1362
|
var braces = (input, options = {}) => {
|
|
1363
1363
|
let output = [];
|
|
1364
1364
|
if (Array.isArray(input)) {
|
|
@@ -1378,7 +1378,7 @@ var require_braces = __commonJS({
|
|
|
1378
1378
|
}
|
|
1379
1379
|
return output;
|
|
1380
1380
|
};
|
|
1381
|
-
braces.parse = (input, options = {}) =>
|
|
1381
|
+
braces.parse = (input, options = {}) => parse2(input, options);
|
|
1382
1382
|
braces.stringify = (input, options = {}) => {
|
|
1383
1383
|
if (typeof input === "string") {
|
|
1384
1384
|
return stringify(braces.parse(input, options), options);
|
|
@@ -1914,7 +1914,7 @@ var require_scan = __commonJS({
|
|
|
1914
1914
|
isExtglob = false;
|
|
1915
1915
|
isGlob = false;
|
|
1916
1916
|
}
|
|
1917
|
-
let
|
|
1917
|
+
let base = str;
|
|
1918
1918
|
let prefix = "";
|
|
1919
1919
|
let glob = "";
|
|
1920
1920
|
if (start > 0) {
|
|
@@ -1922,31 +1922,31 @@ var require_scan = __commonJS({
|
|
|
1922
1922
|
str = str.slice(start);
|
|
1923
1923
|
lastIndex -= start;
|
|
1924
1924
|
}
|
|
1925
|
-
if (
|
|
1926
|
-
|
|
1925
|
+
if (base && isGlob === true && lastIndex > 0) {
|
|
1926
|
+
base = str.slice(0, lastIndex);
|
|
1927
1927
|
glob = str.slice(lastIndex);
|
|
1928
1928
|
} else if (isGlob === true) {
|
|
1929
|
-
|
|
1929
|
+
base = "";
|
|
1930
1930
|
glob = str;
|
|
1931
1931
|
} else {
|
|
1932
|
-
|
|
1932
|
+
base = str;
|
|
1933
1933
|
}
|
|
1934
|
-
if (
|
|
1935
|
-
if (isPathSeparator(
|
|
1936
|
-
|
|
1934
|
+
if (base && base !== "" && base !== "/" && base !== str) {
|
|
1935
|
+
if (isPathSeparator(base.charCodeAt(base.length - 1))) {
|
|
1936
|
+
base = base.slice(0, -1);
|
|
1937
1937
|
}
|
|
1938
1938
|
}
|
|
1939
1939
|
if (opts.unescape === true) {
|
|
1940
1940
|
if (glob) glob = utils.removeBackslashes(glob);
|
|
1941
|
-
if (
|
|
1942
|
-
|
|
1941
|
+
if (base && backslashes === true) {
|
|
1942
|
+
base = utils.removeBackslashes(base);
|
|
1943
1943
|
}
|
|
1944
1944
|
}
|
|
1945
1945
|
const state = {
|
|
1946
1946
|
prefix,
|
|
1947
1947
|
input,
|
|
1948
1948
|
start,
|
|
1949
|
-
base
|
|
1949
|
+
base,
|
|
1950
1950
|
glob,
|
|
1951
1951
|
isBrace,
|
|
1952
1952
|
isBracket,
|
|
@@ -2031,7 +2031,7 @@ var require_parse2 = __commonJS({
|
|
|
2031
2031
|
var syntaxError = (type, char) => {
|
|
2032
2032
|
return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
|
|
2033
2033
|
};
|
|
2034
|
-
var
|
|
2034
|
+
var parse2 = (input, options) => {
|
|
2035
2035
|
if (typeof input !== "string") {
|
|
2036
2036
|
throw new TypeError("Expected a string");
|
|
2037
2037
|
}
|
|
@@ -2180,7 +2180,7 @@ var require_parse2 = __commonJS({
|
|
|
2180
2180
|
output = token.close = `)$))${extglobStar}`;
|
|
2181
2181
|
}
|
|
2182
2182
|
if (token.inner.includes("*") && (rest = remaining()) && /^\.[^\\/.]+$/.test(rest)) {
|
|
2183
|
-
const expression =
|
|
2183
|
+
const expression = parse2(rest, { ...options, fastpaths: false }).output;
|
|
2184
2184
|
output = token.close = `)${expression})${extglobStar})`;
|
|
2185
2185
|
}
|
|
2186
2186
|
if (token.prev.type === "bos") {
|
|
@@ -2705,7 +2705,7 @@ var require_parse2 = __commonJS({
|
|
|
2705
2705
|
}
|
|
2706
2706
|
return state;
|
|
2707
2707
|
};
|
|
2708
|
-
|
|
2708
|
+
parse2.fastpaths = (input, options) => {
|
|
2709
2709
|
const opts = { ...options };
|
|
2710
2710
|
const max = typeof opts.maxLength === "number" ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
|
|
2711
2711
|
const len = input.length;
|
|
@@ -2771,7 +2771,7 @@ var require_parse2 = __commonJS({
|
|
|
2771
2771
|
}
|
|
2772
2772
|
return source;
|
|
2773
2773
|
};
|
|
2774
|
-
module2.exports =
|
|
2774
|
+
module2.exports = parse2;
|
|
2775
2775
|
}
|
|
2776
2776
|
});
|
|
2777
2777
|
|
|
@@ -2781,7 +2781,7 @@ var require_picomatch = __commonJS({
|
|
|
2781
2781
|
"use strict";
|
|
2782
2782
|
var path3 = require("path");
|
|
2783
2783
|
var scan = require_scan();
|
|
2784
|
-
var
|
|
2784
|
+
var parse2 = require_parse2();
|
|
2785
2785
|
var utils = require_utils2();
|
|
2786
2786
|
var constants = require_constants2();
|
|
2787
2787
|
var isObject = (val) => val && typeof val === "object" && !Array.isArray(val);
|
|
@@ -2869,7 +2869,7 @@ var require_picomatch = __commonJS({
|
|
|
2869
2869
|
picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
|
|
2870
2870
|
picomatch.parse = (pattern, options) => {
|
|
2871
2871
|
if (Array.isArray(pattern)) return pattern.map((p) => picomatch.parse(p, options));
|
|
2872
|
-
return
|
|
2872
|
+
return parse2(pattern, { ...options, fastpaths: false });
|
|
2873
2873
|
};
|
|
2874
2874
|
picomatch.scan = (input, options) => scan(input, options);
|
|
2875
2875
|
picomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {
|
|
@@ -2895,10 +2895,10 @@ var require_picomatch = __commonJS({
|
|
|
2895
2895
|
}
|
|
2896
2896
|
let parsed = { negated: false, fastpaths: true };
|
|
2897
2897
|
if (options.fastpaths !== false && (input[0] === "." || input[0] === "*")) {
|
|
2898
|
-
parsed.output =
|
|
2898
|
+
parsed.output = parse2.fastpaths(input, options);
|
|
2899
2899
|
}
|
|
2900
2900
|
if (!parsed.output) {
|
|
2901
|
-
parsed =
|
|
2901
|
+
parsed = parse2(input, options);
|
|
2902
2902
|
}
|
|
2903
2903
|
return picomatch.compileRe(parsed, options, returnOutput, returnState);
|
|
2904
2904
|
};
|
|
@@ -3499,28 +3499,28 @@ var require_tasks = __commonJS({
|
|
|
3499
3499
|
function groupPatternsByBaseDirectory(patterns) {
|
|
3500
3500
|
const group = {};
|
|
3501
3501
|
return patterns.reduce((collection, pattern) => {
|
|
3502
|
-
const
|
|
3503
|
-
if (
|
|
3504
|
-
collection[
|
|
3502
|
+
const base = utils.pattern.getBaseDirectory(pattern);
|
|
3503
|
+
if (base in collection) {
|
|
3504
|
+
collection[base].push(pattern);
|
|
3505
3505
|
} else {
|
|
3506
|
-
collection[
|
|
3506
|
+
collection[base] = [pattern];
|
|
3507
3507
|
}
|
|
3508
3508
|
return collection;
|
|
3509
3509
|
}, group);
|
|
3510
3510
|
}
|
|
3511
3511
|
exports2.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;
|
|
3512
3512
|
function convertPatternGroupsToTasks(positive, negative, dynamic) {
|
|
3513
|
-
return Object.keys(positive).map((
|
|
3514
|
-
return convertPatternGroupToTask(
|
|
3513
|
+
return Object.keys(positive).map((base) => {
|
|
3514
|
+
return convertPatternGroupToTask(base, positive[base], negative, dynamic);
|
|
3515
3515
|
});
|
|
3516
3516
|
}
|
|
3517
3517
|
exports2.convertPatternGroupsToTasks = convertPatternGroupsToTasks;
|
|
3518
|
-
function convertPatternGroupToTask(
|
|
3518
|
+
function convertPatternGroupToTask(base, positive, negative, dynamic) {
|
|
3519
3519
|
return {
|
|
3520
3520
|
dynamic,
|
|
3521
3521
|
positive,
|
|
3522
3522
|
negative,
|
|
3523
|
-
base
|
|
3523
|
+
base,
|
|
3524
3524
|
patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))
|
|
3525
3525
|
};
|
|
3526
3526
|
}
|
|
@@ -4460,8 +4460,8 @@ var require_async3 = __commonJS({
|
|
|
4460
4460
|
onEnd(callback) {
|
|
4461
4461
|
this._emitter.once("end", callback);
|
|
4462
4462
|
}
|
|
4463
|
-
_pushToQueue(directory,
|
|
4464
|
-
const queueItem = { directory, base
|
|
4463
|
+
_pushToQueue(directory, base) {
|
|
4464
|
+
const queueItem = { directory, base };
|
|
4465
4465
|
this._queue.push(queueItem, (error) => {
|
|
4466
4466
|
if (error !== null) {
|
|
4467
4467
|
this._handleError(error);
|
|
@@ -4488,19 +4488,19 @@ var require_async3 = __commonJS({
|
|
|
4488
4488
|
this._isDestroyed = true;
|
|
4489
4489
|
this._emitter.emit("error", error);
|
|
4490
4490
|
}
|
|
4491
|
-
_handleEntry(entry,
|
|
4491
|
+
_handleEntry(entry, base) {
|
|
4492
4492
|
if (this._isDestroyed || this._isFatalError) {
|
|
4493
4493
|
return;
|
|
4494
4494
|
}
|
|
4495
4495
|
const fullpath = entry.path;
|
|
4496
|
-
if (
|
|
4497
|
-
entry.path = common.joinPathSegments(
|
|
4496
|
+
if (base !== void 0) {
|
|
4497
|
+
entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);
|
|
4498
4498
|
}
|
|
4499
4499
|
if (common.isAppliedFilter(this._settings.entryFilter, entry)) {
|
|
4500
4500
|
this._emitEntry(entry);
|
|
4501
4501
|
}
|
|
4502
4502
|
if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {
|
|
4503
|
-
this._pushToQueue(fullpath,
|
|
4503
|
+
this._pushToQueue(fullpath, base === void 0 ? void 0 : entry.path);
|
|
4504
4504
|
}
|
|
4505
4505
|
}
|
|
4506
4506
|
_emitEntry(entry) {
|
|
@@ -4608,19 +4608,19 @@ var require_sync3 = __commonJS({
|
|
|
4608
4608
|
this._handleQueue();
|
|
4609
4609
|
return this._storage;
|
|
4610
4610
|
}
|
|
4611
|
-
_pushToQueue(directory,
|
|
4612
|
-
this._queue.add({ directory, base
|
|
4611
|
+
_pushToQueue(directory, base) {
|
|
4612
|
+
this._queue.add({ directory, base });
|
|
4613
4613
|
}
|
|
4614
4614
|
_handleQueue() {
|
|
4615
4615
|
for (const item of this._queue.values()) {
|
|
4616
4616
|
this._handleDirectory(item.directory, item.base);
|
|
4617
4617
|
}
|
|
4618
4618
|
}
|
|
4619
|
-
_handleDirectory(directory,
|
|
4619
|
+
_handleDirectory(directory, base) {
|
|
4620
4620
|
try {
|
|
4621
4621
|
const entries = this._scandir(directory, this._settings.fsScandirSettings);
|
|
4622
4622
|
for (const entry of entries) {
|
|
4623
|
-
this._handleEntry(entry,
|
|
4623
|
+
this._handleEntry(entry, base);
|
|
4624
4624
|
}
|
|
4625
4625
|
} catch (error) {
|
|
4626
4626
|
this._handleError(error);
|
|
@@ -4632,16 +4632,16 @@ var require_sync3 = __commonJS({
|
|
|
4632
4632
|
}
|
|
4633
4633
|
throw error;
|
|
4634
4634
|
}
|
|
4635
|
-
_handleEntry(entry,
|
|
4635
|
+
_handleEntry(entry, base) {
|
|
4636
4636
|
const fullpath = entry.path;
|
|
4637
|
-
if (
|
|
4638
|
-
entry.path = common.joinPathSegments(
|
|
4637
|
+
if (base !== void 0) {
|
|
4638
|
+
entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);
|
|
4639
4639
|
}
|
|
4640
4640
|
if (common.isAppliedFilter(this._settings.entryFilter, entry)) {
|
|
4641
4641
|
this._pushToStorage(entry);
|
|
4642
4642
|
}
|
|
4643
4643
|
if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {
|
|
4644
|
-
this._pushToQueue(fullpath,
|
|
4644
|
+
this._pushToQueue(fullpath, base === void 0 ? void 0 : entry.path);
|
|
4645
4645
|
}
|
|
4646
4646
|
}
|
|
4647
4647
|
_pushToStorage(entry) {
|
|
@@ -5537,14 +5537,14 @@ __export(index_exports, {
|
|
|
5537
5537
|
});
|
|
5538
5538
|
module.exports = __toCommonJS(index_exports);
|
|
5539
5539
|
var import_node_fs3 = require("fs");
|
|
5540
|
-
var
|
|
5540
|
+
var import_node_process5 = __toESM(require("process"), 1);
|
|
5541
5541
|
var import_unplugin = require("unplugin");
|
|
5542
5542
|
|
|
5543
5543
|
// src/core/compress.ts
|
|
5544
5544
|
var import_node_fs = __toESM(require("fs"), 1);
|
|
5545
5545
|
var import_node_path = __toESM(require("path"), 1);
|
|
5546
5546
|
var import_node_process2 = __toESM(require("process"), 1);
|
|
5547
|
-
var
|
|
5547
|
+
var import_zip_lib = require("zip-lib");
|
|
5548
5548
|
|
|
5549
5549
|
// node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js
|
|
5550
5550
|
var ANSI_BACKGROUND_OFFSET = 10;
|
|
@@ -6056,48 +6056,45 @@ var Log = class {
|
|
|
6056
6056
|
};
|
|
6057
6057
|
|
|
6058
6058
|
// src/core/compress.ts
|
|
6059
|
-
async function createCompress(options,
|
|
6060
|
-
const {
|
|
6061
|
-
const zipFilePath = import_node_path.default.resolve(import_node_process2.default.cwd(), `${import_node_path.default.basename(
|
|
6062
|
-
|
|
6063
|
-
|
|
6064
|
-
|
|
6065
|
-
|
|
6066
|
-
|
|
6067
|
-
|
|
6068
|
-
|
|
6069
|
-
|
|
6070
|
-
|
|
6071
|
-
|
|
6072
|
-
|
|
6073
|
-
|
|
6074
|
-
|
|
6075
|
-
|
|
6076
|
-
|
|
6077
|
-
|
|
6078
|
-
|
|
6079
|
-
|
|
6080
|
-
|
|
6081
|
-
|
|
6082
|
-
|
|
6083
|
-
|
|
6084
|
-
const absoluteOutDir = import_node_path.default.resolve(outDir2);
|
|
6085
|
-
archive.directory(absoluteOutDir, ignoreBase ? false : import_node_path.default.basename(outDir2));
|
|
6086
|
-
archive.finalize();
|
|
6087
|
-
} catch (error) {
|
|
6088
|
-
Log.error("Error compressing the directory", error);
|
|
6089
|
-
throw error;
|
|
6090
|
-
}
|
|
6091
|
-
});
|
|
6059
|
+
async function createCompress(options, outDir) {
|
|
6060
|
+
const { includeBaseDir } = options;
|
|
6061
|
+
const zipFilePath = import_node_path.default.resolve(import_node_process2.default.cwd(), `${import_node_path.default.basename(outDir)}.zip`);
|
|
6062
|
+
const absoluteOutDir = import_node_path.default.resolve(outDir);
|
|
6063
|
+
Log.log("Compressing directory:", absoluteOutDir);
|
|
6064
|
+
try {
|
|
6065
|
+
const zip = new import_zip_lib.Zip();
|
|
6066
|
+
if (!includeBaseDir) {
|
|
6067
|
+
zip.addFolder(absoluteOutDir);
|
|
6068
|
+
} else {
|
|
6069
|
+
zip.addFolder(absoluteOutDir, import_node_path.default.basename(outDir));
|
|
6070
|
+
}
|
|
6071
|
+
await zip.archive(zipFilePath);
|
|
6072
|
+
const stat = import_node_fs.default.statSync(zipFilePath);
|
|
6073
|
+
const size = stat.size;
|
|
6074
|
+
const readableSize = size > 1024 * 1024 ? `${(size / 1024 / 1024).toFixed(1)} MB` : `${(size / 1024).toFixed(1)} KB`;
|
|
6075
|
+
Log.success(
|
|
6076
|
+
"Successfully compressed to:",
|
|
6077
|
+
`${zipFilePath} (${readableSize})`
|
|
6078
|
+
);
|
|
6079
|
+
return null;
|
|
6080
|
+
} catch (error) {
|
|
6081
|
+
Log.error("Compression error:", error);
|
|
6082
|
+
throw error;
|
|
6083
|
+
}
|
|
6092
6084
|
}
|
|
6093
6085
|
|
|
6086
|
+
// src/core/options.ts
|
|
6087
|
+
var import_node_process4 = __toESM(require("process"), 1);
|
|
6088
|
+
var import_utils = require("@antfu/utils");
|
|
6089
|
+
|
|
6094
6090
|
// src/core/generate.ts
|
|
6091
|
+
var import_node_child_process = require("child_process");
|
|
6095
6092
|
var import_node_fs2 = require("fs");
|
|
6096
6093
|
var import_node_path2 = __toESM(require("path"), 1);
|
|
6097
6094
|
var import_node_process3 = __toESM(require("process"), 1);
|
|
6098
6095
|
var import_fast_glob = __toESM(require_out4(), 1);
|
|
6099
|
-
var
|
|
6100
|
-
var
|
|
6096
|
+
var recast = __toESM(require("recast"), 1);
|
|
6097
|
+
var import_typescript = __toESM(require("recast/parsers/typescript"), 1);
|
|
6101
6098
|
function mergeObjects(prodObj, devObj) {
|
|
6102
6099
|
const prodProps = new Map(prodObj.properties.map((p) => [p.key.name || p.key.value, p]));
|
|
6103
6100
|
for (const prop of devObj.properties) {
|
|
@@ -6111,90 +6108,264 @@ function mergeObjects(prodObj, devObj) {
|
|
|
6111
6108
|
}
|
|
6112
6109
|
}
|
|
6113
6110
|
}
|
|
6114
|
-
async function generateScript(options,
|
|
6115
|
-
const {
|
|
6116
|
-
const folder = await
|
|
6117
|
-
|
|
6111
|
+
async function generateScript(options, context) {
|
|
6112
|
+
const { configDir, emitFileName, emitDir, globalName, devMatch, buildMatch } = options.env;
|
|
6113
|
+
const folder = await resolveConfigFolder(import_node_process3.default.cwd(), configDir);
|
|
6114
|
+
if (!folder)
|
|
6115
|
+
throw new Error(`[unplugin-env] Config directory "${configDir}" not found from ${import_node_process3.default.cwd()}`);
|
|
6116
|
+
const files = await (0, import_fast_glob.default)("*.{js,ts}", {
|
|
6118
6117
|
absolute: true,
|
|
6119
6118
|
cwd: folder
|
|
6120
6119
|
});
|
|
6121
|
-
|
|
6120
|
+
if (!files.length)
|
|
6121
|
+
throw new Error(`[unplugin-env] No config files found in ${folder}`);
|
|
6122
|
+
const { mode, base } = context;
|
|
6123
|
+
const testReg = mode === "dev" ? devMatch : buildMatch;
|
|
6122
6124
|
let target = "";
|
|
6123
6125
|
let source = "";
|
|
6124
6126
|
let code = "";
|
|
6125
|
-
|
|
6127
|
+
let targetFile = "";
|
|
6128
|
+
let sourceFile = "";
|
|
6129
|
+
const resolvedEmitFileName = resolveEmitFileName(emitDir, emitFileName);
|
|
6126
6130
|
for (const file of files) {
|
|
6127
6131
|
try {
|
|
6128
6132
|
const mod = await import_node_fs2.promises.readFile(file, "utf-8");
|
|
6129
|
-
if (testReg?.test(file))
|
|
6133
|
+
if (testReg?.test(file)) {
|
|
6130
6134
|
target = mod;
|
|
6131
|
-
|
|
6135
|
+
targetFile = file;
|
|
6136
|
+
} else {
|
|
6132
6137
|
source = mod;
|
|
6138
|
+
sourceFile = file;
|
|
6139
|
+
}
|
|
6133
6140
|
} catch (error) {
|
|
6134
6141
|
console.error(`Error loading file ${file}:`, error);
|
|
6135
6142
|
}
|
|
6136
6143
|
}
|
|
6137
|
-
|
|
6138
|
-
|
|
6139
|
-
|
|
6140
|
-
|
|
6144
|
+
if (files.length === 1) {
|
|
6145
|
+
if (!target) {
|
|
6146
|
+
target = source;
|
|
6147
|
+
targetFile = sourceFile;
|
|
6148
|
+
}
|
|
6149
|
+
if (!source) {
|
|
6150
|
+
source = target;
|
|
6151
|
+
sourceFile = targetFile;
|
|
6152
|
+
}
|
|
6153
|
+
}
|
|
6154
|
+
if (!target || !targetFile)
|
|
6155
|
+
throw new Error(`[unplugin-env] No file matched "${testReg}" in ${folder}`);
|
|
6156
|
+
if (!source || !sourceFile)
|
|
6157
|
+
throw new Error(`[unplugin-env] No base config file found in ${folder}`);
|
|
6158
|
+
const targetAst = parseConfig(target, targetFile);
|
|
6159
|
+
const sourceAst = parseConfig(source, sourceFile);
|
|
6160
|
+
const targetExport = getDefaultExportObject(targetAst, targetFile);
|
|
6161
|
+
const sourceExport = getDefaultExportObject(sourceAst, sourceFile);
|
|
6141
6162
|
mergeObjects(sourceExport, targetExport);
|
|
6142
|
-
const mergedCode =
|
|
6163
|
+
const mergedCode = recast.print(sourceExport).code;
|
|
6143
6164
|
const returnedTarget = mergedCode;
|
|
6144
6165
|
const versionInfo = await generateVersion(options, mode);
|
|
6145
6166
|
code = `window.${globalName}=${returnedTarget};
|
|
6146
6167
|
${versionInfo}`;
|
|
6147
6168
|
const formatCode = code;
|
|
6169
|
+
const viteIgnoreAttr = context.framework === "vite" ? " vite-ignore" : "";
|
|
6170
|
+
const scriptSrc = joinBasePath(base, resolvedEmitFileName);
|
|
6148
6171
|
return {
|
|
6149
6172
|
code,
|
|
6150
|
-
script: ` <script type="text/javascript" src="${
|
|
6173
|
+
script: ` <script type="text/javascript"${viteIgnoreAttr} src="${scriptSrc}"></script>
|
|
6151
6174
|
</head>`,
|
|
6152
6175
|
emit: {
|
|
6153
6176
|
type: "asset",
|
|
6154
|
-
fileName:
|
|
6177
|
+
fileName: resolvedEmitFileName,
|
|
6155
6178
|
source: formatCode
|
|
6156
6179
|
},
|
|
6157
6180
|
watchFiles: files
|
|
6158
6181
|
};
|
|
6159
6182
|
}
|
|
6183
|
+
async function getFullPackageJson(cwd = import_node_process3.default.cwd()) {
|
|
6184
|
+
const pkgPath = import_node_path2.default.resolve(cwd, "package.json");
|
|
6185
|
+
const content = await import_node_fs2.promises.readFile(pkgPath, "utf-8");
|
|
6186
|
+
return JSON.parse(content);
|
|
6187
|
+
}
|
|
6188
|
+
function wrapText(text, maxLen) {
|
|
6189
|
+
const lines = [];
|
|
6190
|
+
let current = "";
|
|
6191
|
+
for (const char of text) {
|
|
6192
|
+
current += char;
|
|
6193
|
+
if (current.length >= maxLen) {
|
|
6194
|
+
lines.push(current);
|
|
6195
|
+
current = "";
|
|
6196
|
+
}
|
|
6197
|
+
}
|
|
6198
|
+
if (current)
|
|
6199
|
+
lines.push(current);
|
|
6200
|
+
return lines;
|
|
6201
|
+
}
|
|
6202
|
+
function parseConfig(code, filePath) {
|
|
6203
|
+
const parser = filePath.endsWith(".ts") ? import_typescript.default : void 0;
|
|
6204
|
+
return parser ? recast.parse(code, { parser }) : recast.parse(code);
|
|
6205
|
+
}
|
|
6206
|
+
function getDefaultExportObject(ast, filePath) {
|
|
6207
|
+
const exportNode = ast?.program?.body?.find((node) => node.type === "ExportDefaultDeclaration");
|
|
6208
|
+
if (!exportNode?.declaration)
|
|
6209
|
+
throw new Error(`[unplugin-env] ${filePath} must have a default export of an object`);
|
|
6210
|
+
let decl = exportNode.declaration;
|
|
6211
|
+
if (decl.type === "TSAsExpression" || decl.type === "TSTypeAssertion")
|
|
6212
|
+
decl = decl.expression;
|
|
6213
|
+
if (decl.type === "CallExpression" && decl.arguments?.[0]?.type === "ObjectExpression")
|
|
6214
|
+
decl = decl.arguments[0];
|
|
6215
|
+
if (decl.type !== "ObjectExpression")
|
|
6216
|
+
throw new Error(`[unplugin-env] ${filePath} default export must be an object literal`);
|
|
6217
|
+
return decl;
|
|
6218
|
+
}
|
|
6219
|
+
function joinBasePath(base, resourcePath) {
|
|
6220
|
+
const safeBase = base && base.endsWith("/") ? base : `${base || "/"}`.replace(/\/?$/, "/");
|
|
6221
|
+
const safeFile = resourcePath.replace(/^\/+/, "");
|
|
6222
|
+
return `${safeBase}${safeFile}`;
|
|
6223
|
+
}
|
|
6224
|
+
function resolveEmitFileName(emitDir, emitFileName) {
|
|
6225
|
+
const normalizedFile = emitFileName.replace(/\\/g, "/").replace(/^\/+/, "");
|
|
6226
|
+
if (!emitDir)
|
|
6227
|
+
return normalizedFile;
|
|
6228
|
+
const normalizedDir = emitDir.replace(/\\/g, "/").replace(/^\/+|\/+$/g, "");
|
|
6229
|
+
if (!normalizedDir)
|
|
6230
|
+
return normalizedFile;
|
|
6231
|
+
const prefix = `${normalizedDir}/`;
|
|
6232
|
+
if (normalizedFile === normalizedDir || normalizedFile.startsWith(prefix))
|
|
6233
|
+
return normalizedFile;
|
|
6234
|
+
return import_node_path2.default.posix.join(normalizedDir, normalizedFile);
|
|
6235
|
+
}
|
|
6236
|
+
async function resolveConfigFolder(root, configDir) {
|
|
6237
|
+
if (!configDir)
|
|
6238
|
+
return "";
|
|
6239
|
+
const candidate = import_node_path2.default.isAbsolute(configDir) ? configDir : import_node_path2.default.resolve(root, configDir);
|
|
6240
|
+
try {
|
|
6241
|
+
const stat = await import_node_fs2.promises.stat(candidate);
|
|
6242
|
+
if (stat.isDirectory())
|
|
6243
|
+
return candidate;
|
|
6244
|
+
} catch {
|
|
6245
|
+
}
|
|
6246
|
+
return findFolder(root, configDir);
|
|
6247
|
+
}
|
|
6160
6248
|
async function generateVersion(options, mode) {
|
|
6161
|
-
const pkg = await (
|
|
6162
|
-
|
|
6249
|
+
const pkg = await getFullPackageJson(import_node_process3.default.cwd());
|
|
6250
|
+
const name = pkg?.name ?? "Unknown App";
|
|
6251
|
+
const version = `v${pkg?.version ?? "0.0.0"}`;
|
|
6252
|
+
const branchName = getBranchName() || "unknown";
|
|
6253
|
+
const commitHash = getCommitHash() || "unknown";
|
|
6254
|
+
const datetime = options.datetime;
|
|
6255
|
+
const stateLabel = mode === "dev" ? "runtime" : "built";
|
|
6256
|
+
const stateColor = mode === "dev" ? "#059669" : "#2563EB";
|
|
6257
|
+
const MAX_DESC_LINE_LEN = 36;
|
|
6258
|
+
const rawDesc = pkg?.description ?? "unknown";
|
|
6259
|
+
const descLines = wrapText(rawDesc, MAX_DESC_LINE_LEN);
|
|
6260
|
+
const baseLines = [
|
|
6261
|
+
`${name} ${version} ${stateLabel}`,
|
|
6262
|
+
`Branch : ${branchName}`,
|
|
6263
|
+
`Commit : ${commitHash}`,
|
|
6264
|
+
`Time : ${datetime}`,
|
|
6265
|
+
`Desc : ${descLines[0]}`,
|
|
6266
|
+
...descLines.slice(1).map((l) => ` ${l}`)
|
|
6267
|
+
];
|
|
6268
|
+
const maxLen = Math.max(...baseLines.map((l) => l.length));
|
|
6269
|
+
const divider = "-".repeat(maxLen + 4);
|
|
6270
|
+
const textParts = [
|
|
6271
|
+
`${divider}
|
|
6272
|
+
`,
|
|
6273
|
+
` ${name} `,
|
|
6274
|
+
` ${version} `,
|
|
6275
|
+
` ${stateLabel}
|
|
6276
|
+
`,
|
|
6277
|
+
`${divider}
|
|
6278
|
+
`,
|
|
6279
|
+
` Branch :`,
|
|
6280
|
+
` ${branchName}
|
|
6281
|
+
`,
|
|
6282
|
+
` Commit :`,
|
|
6283
|
+
` ${commitHash}
|
|
6284
|
+
`,
|
|
6285
|
+
` Time :`,
|
|
6286
|
+
` ${datetime}
|
|
6287
|
+
`,
|
|
6288
|
+
` Desc :`,
|
|
6289
|
+
` ${descLines[0]}
|
|
6290
|
+
`,
|
|
6291
|
+
...descLines.slice(1).map((l) => ` ${l}
|
|
6292
|
+
`),
|
|
6293
|
+
`${divider}`
|
|
6294
|
+
];
|
|
6295
|
+
const styles3 = [
|
|
6296
|
+
"color:#9CA3AF",
|
|
6297
|
+
// divider
|
|
6298
|
+
"color:#111827;font-weight:600",
|
|
6299
|
+
// name
|
|
6300
|
+
"color:#2563EB;font-weight:600",
|
|
6301
|
+
// version
|
|
6302
|
+
`color:${stateColor};font-weight:600`,
|
|
6303
|
+
// state
|
|
6304
|
+
"color:#9CA3AF",
|
|
6305
|
+
// divider
|
|
6306
|
+
"color:#6B7280",
|
|
6307
|
+
// Branch label
|
|
6308
|
+
"color:#111827",
|
|
6309
|
+
"color:#6B7280",
|
|
6310
|
+
// Commit label
|
|
6311
|
+
"color:#111827",
|
|
6312
|
+
"color:#6B7280",
|
|
6313
|
+
// Time label
|
|
6314
|
+
"color:#2563EB",
|
|
6315
|
+
"color:#6B7280",
|
|
6316
|
+
// Desc label
|
|
6317
|
+
"color:#4B5563",
|
|
6318
|
+
...descLines.slice(1).map(() => "color:#4B5563"),
|
|
6319
|
+
"color:#9CA3AF"
|
|
6320
|
+
// divider
|
|
6321
|
+
];
|
|
6322
|
+
return `
|
|
6323
|
+
console.log(
|
|
6324
|
+
${JSON.stringify(`%c${textParts.join("%c")}`)},
|
|
6325
|
+
${styles3.map((s) => JSON.stringify(s)).join(",\n ")}
|
|
6326
|
+
)
|
|
6327
|
+
`.trim();
|
|
6163
6328
|
}
|
|
6164
6329
|
async function findFolder(directoryPath, dir) {
|
|
6165
6330
|
const ignore = /* @__PURE__ */ new Set(["dist", "node_modules", "playground", "example", "test", "jest", "tests", "locales", "public", ".git", ".github", ".vscode"]);
|
|
6166
|
-
const
|
|
6167
|
-
const
|
|
6331
|
+
const entries = await import_node_fs2.promises.readdir(directoryPath, { withFileTypes: true });
|
|
6332
|
+
const dirLower = dir.toLowerCase();
|
|
6333
|
+
const filePaths = entries.filter((entry) => !ignore.has(entry.name));
|
|
6168
6334
|
let nestedFolder = "";
|
|
6169
|
-
for (const
|
|
6170
|
-
|
|
6171
|
-
|
|
6172
|
-
|
|
6173
|
-
|
|
6174
|
-
|
|
6175
|
-
|
|
6176
|
-
|
|
6177
|
-
|
|
6178
|
-
return nestedFolder;
|
|
6179
|
-
}
|
|
6180
|
-
}
|
|
6335
|
+
for (const entry of filePaths) {
|
|
6336
|
+
if (!entry.isDirectory())
|
|
6337
|
+
continue;
|
|
6338
|
+
const fullFilePath = import_node_path2.default.join(directoryPath, entry.name);
|
|
6339
|
+
if (entry.name.toLowerCase() === dirLower)
|
|
6340
|
+
return fullFilePath;
|
|
6341
|
+
nestedFolder = await findFolder(fullFilePath, dir);
|
|
6342
|
+
if (nestedFolder)
|
|
6343
|
+
return nestedFolder;
|
|
6181
6344
|
}
|
|
6182
6345
|
return "";
|
|
6183
6346
|
}
|
|
6347
|
+
function getBranchName() {
|
|
6348
|
+
const branchName = (0, import_node_child_process.execSync)("git rev-parse --abbrev-ref HEAD").toString().trim();
|
|
6349
|
+
return branchName;
|
|
6350
|
+
}
|
|
6351
|
+
function getCommitHash() {
|
|
6352
|
+
const commitHash = (0, import_node_child_process.execSync)("git rev-parse HEAD").toString().trim();
|
|
6353
|
+
return commitHash.slice(0, 8);
|
|
6354
|
+
}
|
|
6184
6355
|
|
|
6185
6356
|
// src/core/options.ts
|
|
6186
|
-
var import_utils = require("@antfu/utils");
|
|
6187
6357
|
function resolveOptions(options) {
|
|
6188
6358
|
const defaults = {
|
|
6189
6359
|
env: {
|
|
6190
|
-
|
|
6191
|
-
|
|
6360
|
+
configDir: "config",
|
|
6361
|
+
emitFileName: "manifest.js",
|
|
6362
|
+
emitDir: "",
|
|
6192
6363
|
globalName: "manifest",
|
|
6193
|
-
|
|
6194
|
-
|
|
6364
|
+
devMatch: /dev/i,
|
|
6365
|
+
buildMatch: /prod/i
|
|
6195
6366
|
},
|
|
6196
6367
|
compress: {
|
|
6197
|
-
|
|
6368
|
+
includeBaseDir: true
|
|
6198
6369
|
}
|
|
6199
6370
|
};
|
|
6200
6371
|
const mergeOptions = (0, import_utils.deepMerge)(defaults, options);
|
|
@@ -6207,67 +6378,273 @@ function resolveOptions(options) {
|
|
|
6207
6378
|
datetime: formatter.format(/* @__PURE__ */ new Date())
|
|
6208
6379
|
};
|
|
6209
6380
|
}
|
|
6381
|
+
function createUnifiedContext(resolved) {
|
|
6382
|
+
const ctx = {
|
|
6383
|
+
framework: "",
|
|
6384
|
+
base: "/",
|
|
6385
|
+
outDir: "dist",
|
|
6386
|
+
mode: "build",
|
|
6387
|
+
scriptInfo: {
|
|
6388
|
+
code: "",
|
|
6389
|
+
script: "",
|
|
6390
|
+
emit: {
|
|
6391
|
+
type: "asset",
|
|
6392
|
+
source: "",
|
|
6393
|
+
fileName: ""
|
|
6394
|
+
},
|
|
6395
|
+
watchFiles: []
|
|
6396
|
+
},
|
|
6397
|
+
get isDev() {
|
|
6398
|
+
return this.mode === "dev";
|
|
6399
|
+
},
|
|
6400
|
+
get isBuild() {
|
|
6401
|
+
return this.mode === "build";
|
|
6402
|
+
},
|
|
6403
|
+
// --- VITE ---
|
|
6404
|
+
async setVite(config) {
|
|
6405
|
+
this.framework = "vite";
|
|
6406
|
+
this.base = config.base || "/";
|
|
6407
|
+
this.outDir = config.build?.outDir || "dist";
|
|
6408
|
+
this.mode = config.command === "serve" ? "dev" : "build";
|
|
6409
|
+
ctx.scriptInfo = await generateScript(resolved, ctx);
|
|
6410
|
+
},
|
|
6411
|
+
// --- ROLLUP ---
|
|
6412
|
+
async setRollup(options) {
|
|
6413
|
+
this.framework = "rollup";
|
|
6414
|
+
this.outDir = options.dir || "dist";
|
|
6415
|
+
this.mode = import_node_process4.default.env.ROLLUP_WATCH ? "dev" : "build";
|
|
6416
|
+
ctx.scriptInfo = await generateScript(resolved, ctx);
|
|
6417
|
+
},
|
|
6418
|
+
// --- WEBPACK ---
|
|
6419
|
+
async setWebpack(compiler) {
|
|
6420
|
+
this.framework = "webpack";
|
|
6421
|
+
this.base = compiler.options.output?.publicPath || "/";
|
|
6422
|
+
this.outDir = compiler.options.output?.path || "dist";
|
|
6423
|
+
const raw = compiler.options.mode || "production";
|
|
6424
|
+
this.mode = raw === "development" ? "dev" : "build";
|
|
6425
|
+
ctx.scriptInfo = await generateScript(resolved, ctx);
|
|
6426
|
+
},
|
|
6427
|
+
// --- RSPACK ---
|
|
6428
|
+
async setRspack(compiler) {
|
|
6429
|
+
this.framework = "rspack";
|
|
6430
|
+
this.base = compiler.options.output?.publicPath || "/";
|
|
6431
|
+
this.outDir = compiler.options.output?.path || "dist";
|
|
6432
|
+
const raw = compiler.options.mode || "production";
|
|
6433
|
+
this.mode = raw === "development" ? "dev" : "build";
|
|
6434
|
+
ctx.scriptInfo = await generateScript(resolved, ctx);
|
|
6435
|
+
},
|
|
6436
|
+
// --- ESBUILD ---
|
|
6437
|
+
async setEsbuild(build) {
|
|
6438
|
+
this.framework = "esbuild";
|
|
6439
|
+
this.outDir = build.initialOptions.outdir || "dist";
|
|
6440
|
+
this.mode = build.initialOptions.watch ? "dev" : "build";
|
|
6441
|
+
ctx.scriptInfo = await generateScript(resolved, ctx);
|
|
6442
|
+
},
|
|
6443
|
+
// --- FARM ---
|
|
6444
|
+
async setFarm(compiler) {
|
|
6445
|
+
this.framework = "farm";
|
|
6446
|
+
this.base = compiler.config.output?.publicPath || "/";
|
|
6447
|
+
this.outDir = compiler.config.output?.path || "dist";
|
|
6448
|
+
const raw = compiler.config.mode || "production";
|
|
6449
|
+
this.mode = raw === "development" ? "dev" : "build";
|
|
6450
|
+
ctx.scriptInfo = await generateScript(resolved, ctx);
|
|
6451
|
+
},
|
|
6452
|
+
// --- ROLLDOWN ---
|
|
6453
|
+
async setRolldown(options) {
|
|
6454
|
+
this.framework = "rolldown";
|
|
6455
|
+
this.outDir = options.dir || "dist";
|
|
6456
|
+
this.mode = import_node_process4.default.env.ROLLDOWN_WATCH ? "dev" : "build";
|
|
6457
|
+
ctx.scriptInfo = await generateScript(resolved, ctx);
|
|
6458
|
+
}
|
|
6459
|
+
};
|
|
6460
|
+
return ctx;
|
|
6461
|
+
}
|
|
6210
6462
|
|
|
6211
6463
|
// src/index.ts
|
|
6212
6464
|
var virtualEnvId = "virtual:env";
|
|
6465
|
+
var virtualEnvAliasId = "virtual-env";
|
|
6213
6466
|
var resolvedVirtualEnvId = `\0${virtualEnvId}`;
|
|
6214
|
-
var
|
|
6215
|
-
|
|
6467
|
+
var resolvedVirtualEnvAliasId = `\0${virtualEnvAliasId}`;
|
|
6468
|
+
function isVirtualEnvId(id) {
|
|
6469
|
+
return id.startsWith(virtualEnvId) || id.startsWith(virtualEnvAliasId);
|
|
6470
|
+
}
|
|
6471
|
+
function resolveVirtualEnvId(id) {
|
|
6472
|
+
return id.startsWith(virtualEnvAliasId) ? resolvedVirtualEnvAliasId : resolvedVirtualEnvId;
|
|
6473
|
+
}
|
|
6474
|
+
function isResolvedVirtualEnvId(id) {
|
|
6475
|
+
return id.startsWith(resolvedVirtualEnvId) || id.startsWith(resolvedVirtualEnvAliasId);
|
|
6476
|
+
}
|
|
6216
6477
|
var unpluginFactory = (options = {}) => {
|
|
6217
6478
|
const resolved = resolveOptions(options);
|
|
6479
|
+
const ctx = createUnifiedContext(resolved);
|
|
6480
|
+
let frameworkReady = null;
|
|
6481
|
+
let legacyEmitHooked = false;
|
|
6218
6482
|
return [{
|
|
6219
|
-
name: "plugin-env
|
|
6220
|
-
apply: "serve",
|
|
6483
|
+
name: "plugin-env",
|
|
6221
6484
|
enforce: "post",
|
|
6222
|
-
|
|
6223
|
-
|
|
6224
|
-
|
|
6485
|
+
rollup: {
|
|
6486
|
+
async buildStart() {
|
|
6487
|
+
const outputOptions = { dir: ctx.outDir };
|
|
6488
|
+
await ctx.setRollup(outputOptions);
|
|
6489
|
+
},
|
|
6490
|
+
outputOptions(outputOptions) {
|
|
6491
|
+
ctx.outDir = outputOptions.dir || ctx.outDir;
|
|
6492
|
+
return outputOptions;
|
|
6493
|
+
}
|
|
6225
6494
|
},
|
|
6226
|
-
|
|
6227
|
-
|
|
6228
|
-
|
|
6495
|
+
vite: {
|
|
6496
|
+
async configResolved(config) {
|
|
6497
|
+
await ctx.setVite(config);
|
|
6498
|
+
}
|
|
6229
6499
|
},
|
|
6230
|
-
async
|
|
6231
|
-
|
|
6232
|
-
|
|
6233
|
-
|
|
6234
|
-
|
|
6235
|
-
|
|
6236
|
-
|
|
6500
|
+
async webpack(compiler) {
|
|
6501
|
+
frameworkReady = ctx.setWebpack(compiler);
|
|
6502
|
+
const webpackLib = compiler.webpack;
|
|
6503
|
+
const RawSource = webpackLib?.sources?.RawSource;
|
|
6504
|
+
compiler.hooks.thisCompilation.tap("plugin-env", (compilation) => {
|
|
6505
|
+
if (webpackLib?.Compilation?.PROCESS_ASSETS_STAGE_PRE_PROCESS) {
|
|
6506
|
+
const { Compilation, sources } = webpackLib;
|
|
6507
|
+
compilation.hooks.processAssets.tapPromise(
|
|
6508
|
+
{ name: "plugin-env", stage: Compilation.PROCESS_ASSETS_STAGE_PRE_PROCESS },
|
|
6509
|
+
async () => {
|
|
6510
|
+
await frameworkReady;
|
|
6511
|
+
const manifestName = ctx.scriptInfo.emit.fileName;
|
|
6512
|
+
if (!manifestName)
|
|
6513
|
+
return;
|
|
6514
|
+
const asset = compilation.getAsset(manifestName);
|
|
6515
|
+
if (!asset || asset.info?.minimized)
|
|
6516
|
+
return;
|
|
6517
|
+
compilation.updateAsset(manifestName, asset.source, { ...asset.info, minimized: true });
|
|
6518
|
+
}
|
|
6519
|
+
);
|
|
6520
|
+
compilation.hooks.processAssets.tapPromise(
|
|
6521
|
+
{ name: "plugin-env", stage: Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE },
|
|
6522
|
+
async (assets) => {
|
|
6523
|
+
await frameworkReady;
|
|
6524
|
+
const { script } = ctx.scriptInfo;
|
|
6525
|
+
if (!script)
|
|
6526
|
+
return;
|
|
6527
|
+
const scriptTag = script.replace(/<\/head>\s*$/i, "").trim();
|
|
6528
|
+
for (const name of Object.keys(assets)) {
|
|
6529
|
+
if (!name.endsWith(".html"))
|
|
6530
|
+
continue;
|
|
6531
|
+
const asset = compilation.getAsset(name);
|
|
6532
|
+
const html = asset?.source.source().toString() || "";
|
|
6533
|
+
if (!html || html.includes(scriptTag))
|
|
6534
|
+
continue;
|
|
6535
|
+
const nextHtml = html.replace(/<\/head>/i, script);
|
|
6536
|
+
if (nextHtml !== html)
|
|
6537
|
+
compilation.updateAsset(name, new sources.RawSource(nextHtml));
|
|
6538
|
+
}
|
|
6539
|
+
}
|
|
6540
|
+
);
|
|
6541
|
+
} else if (!legacyEmitHooked) {
|
|
6542
|
+
legacyEmitHooked = true;
|
|
6543
|
+
compiler.hooks.emit.tapAsync("plugin-env", (comp, cb) => {
|
|
6544
|
+
const run = () => {
|
|
6545
|
+
const { script } = ctx.scriptInfo;
|
|
6546
|
+
if (!script)
|
|
6547
|
+
return cb();
|
|
6548
|
+
const scriptTag = script.replace(/<\/head>\s*$/i, "").trim();
|
|
6549
|
+
for (const name of Object.keys(comp.assets)) {
|
|
6550
|
+
if (!name.endsWith(".html"))
|
|
6551
|
+
continue;
|
|
6552
|
+
const asset = comp.assets[name];
|
|
6553
|
+
const html = asset?.source().toString() || "";
|
|
6554
|
+
if (!html || html.includes(scriptTag))
|
|
6555
|
+
continue;
|
|
6556
|
+
const nextHtml = html.replace(/<\/head>/i, script);
|
|
6557
|
+
if (nextHtml !== html) {
|
|
6558
|
+
comp.assets[name] = RawSource ? new RawSource(nextHtml) : {
|
|
6559
|
+
source: () => nextHtml,
|
|
6560
|
+
size: () => nextHtml.length
|
|
6561
|
+
};
|
|
6562
|
+
}
|
|
6563
|
+
}
|
|
6564
|
+
cb();
|
|
6565
|
+
};
|
|
6566
|
+
if (frameworkReady) {
|
|
6567
|
+
frameworkReady.then(run).catch((error) => cb(error));
|
|
6568
|
+
} else {
|
|
6569
|
+
run();
|
|
6570
|
+
}
|
|
6571
|
+
});
|
|
6572
|
+
}
|
|
6573
|
+
});
|
|
6574
|
+
},
|
|
6575
|
+
rspack: async (compiler) => {
|
|
6576
|
+
frameworkReady = ctx.setRspack(compiler);
|
|
6577
|
+
},
|
|
6578
|
+
esbuild: {
|
|
6579
|
+
async setup(build) {
|
|
6580
|
+
await ctx.setEsbuild(build);
|
|
6237
6581
|
}
|
|
6238
|
-
}
|
|
6239
|
-
}, {
|
|
6240
|
-
name: "unplugin-env-build",
|
|
6241
|
-
apply: "build",
|
|
6242
|
-
enforce: "post",
|
|
6243
|
-
configResolved(config) {
|
|
6244
|
-
base = config.base;
|
|
6245
|
-
outDir = config.build.outDir;
|
|
6246
6582
|
},
|
|
6247
|
-
|
|
6248
|
-
|
|
6249
|
-
return resolvedVirtualEnvId;
|
|
6583
|
+
async farm(compiler) {
|
|
6584
|
+
await ctx.setFarm(compiler);
|
|
6250
6585
|
},
|
|
6251
|
-
|
|
6252
|
-
|
|
6253
|
-
|
|
6254
|
-
this.emitFile(emit);
|
|
6255
|
-
return "";
|
|
6586
|
+
rolldown: {
|
|
6587
|
+
async outputOptions(outputOptions) {
|
|
6588
|
+
await ctx.setRolldown(outputOptions);
|
|
6256
6589
|
}
|
|
6590
|
+
},
|
|
6591
|
+
async resolveId(id) {
|
|
6592
|
+
if (isVirtualEnvId(id))
|
|
6593
|
+
return resolveVirtualEnvId(id);
|
|
6594
|
+
},
|
|
6595
|
+
loadInclude(id) {
|
|
6596
|
+
if (isResolvedVirtualEnvId(id) || isVirtualEnvId(id))
|
|
6597
|
+
return true;
|
|
6257
6598
|
if (id.endsWith(".html")) {
|
|
6258
|
-
|
|
6259
|
-
code = code.replace(/<\/head>/g, script);
|
|
6260
|
-
return {
|
|
6261
|
-
code
|
|
6262
|
-
};
|
|
6599
|
+
return ctx.framework === "vite" || ctx.framework === "rollup" || ctx.framework === "rolldown";
|
|
6263
6600
|
}
|
|
6264
|
-
return
|
|
6601
|
+
return false;
|
|
6602
|
+
},
|
|
6603
|
+
async load(id) {
|
|
6604
|
+
if (frameworkReady)
|
|
6605
|
+
await frameworkReady;
|
|
6606
|
+
const { code, watchFiles, emit, script } = ctx.scriptInfo;
|
|
6607
|
+
if (ctx.isDev) {
|
|
6608
|
+
if (isResolvedVirtualEnvId(id)) {
|
|
6609
|
+
watchFiles.forEach((file) => {
|
|
6610
|
+
this.addWatchFile(file);
|
|
6611
|
+
});
|
|
6612
|
+
return code;
|
|
6613
|
+
}
|
|
6614
|
+
} else {
|
|
6615
|
+
if (isResolvedVirtualEnvId(id)) {
|
|
6616
|
+
this.emitFile(emit);
|
|
6617
|
+
return "";
|
|
6618
|
+
}
|
|
6619
|
+
const canTransformHtml = ctx.framework === "vite" || ctx.framework === "rollup" || ctx.framework === "rolldown";
|
|
6620
|
+
if (canTransformHtml && id.endsWith(".html")) {
|
|
6621
|
+
let code2 = await import_node_fs3.promises.readFile(id, "utf-8");
|
|
6622
|
+
code2 = code2.replace(/<\/head>/g, script);
|
|
6623
|
+
return { code: code2 };
|
|
6624
|
+
}
|
|
6625
|
+
}
|
|
6626
|
+
},
|
|
6627
|
+
transformInclude(id) {
|
|
6628
|
+
return /\.(?:c|m)?(?:j|t)sx?$/.test(id);
|
|
6629
|
+
},
|
|
6630
|
+
async transform(code, id) {
|
|
6631
|
+
if (ctx.framework !== "webpack" && ctx.framework !== "rspack")
|
|
6632
|
+
return;
|
|
6633
|
+
if (!id.match(/\.(?:c|m)?(?:j|t)sx?$/))
|
|
6634
|
+
return;
|
|
6635
|
+
if (!code.includes(virtualEnvId))
|
|
6636
|
+
return;
|
|
6637
|
+
return code.replaceAll(virtualEnvId, virtualEnvAliasId);
|
|
6265
6638
|
},
|
|
6266
6639
|
buildEnd: () => {
|
|
6267
|
-
|
|
6640
|
+
import_node_process5.default.on("beforeExit", () => {
|
|
6268
6641
|
const { compress } = resolved;
|
|
6269
|
-
|
|
6270
|
-
|
|
6642
|
+
createCompress(compress, ctx.outDir).then(() => {
|
|
6643
|
+
import_node_process5.default.exit(0);
|
|
6644
|
+
}).catch((error) => {
|
|
6645
|
+
import_node_process5.default.exitCode = 1;
|
|
6646
|
+
throw error;
|
|
6647
|
+
});
|
|
6271
6648
|
});
|
|
6272
6649
|
}
|
|
6273
6650
|
}];
|