feat: refactoring project
This commit is contained in:
104
node_modules/webpack/lib/MultiStats.js
generated
vendored
104
node_modules/webpack/lib/MultiStats.js
generated
vendored
@@ -8,15 +8,25 @@
|
||||
const identifierUtils = require("./util/identifier");
|
||||
|
||||
/** @typedef {import("../declarations/WebpackOptions").StatsOptions} StatsOptions */
|
||||
/** @typedef {import("./Compilation").CreateStatsOptionsContext} CreateStatsOptionsContext */
|
||||
/** @typedef {import("./Compilation").NormalizedStatsOptions} NormalizedStatsOptions */
|
||||
/** @typedef {import("./Stats")} Stats */
|
||||
/** @typedef {import("./stats/DefaultStatsFactoryPlugin").KnownStatsCompilation} KnownStatsCompilation */
|
||||
/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsCompilation} StatsCompilation */
|
||||
/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsError} StatsError */
|
||||
|
||||
/**
|
||||
* @param {string} str string
|
||||
* @param {string} prefix pref
|
||||
* @returns {string} indent
|
||||
*/
|
||||
const indent = (str, prefix) => {
|
||||
const rem = str.replace(/\n([^\n])/g, "\n" + prefix + "$1");
|
||||
const rem = str.replace(/\n([^\n])/g, `\n${prefix}$1`);
|
||||
return prefix + rem;
|
||||
};
|
||||
|
||||
/** @typedef {{ version: boolean, hash: boolean, errorsCount: boolean, warningsCount: boolean, errors: boolean, warnings: boolean, children: NormalizedStatsOptions[] }} ChildOptions */
|
||||
|
||||
class MultiStats {
|
||||
/**
|
||||
* @param {Stats[]} stats the child stats
|
||||
@@ -43,13 +53,30 @@ class MultiStats {
|
||||
return this.stats.some(stat => stat.hasWarnings());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string | boolean | StatsOptions | undefined} options stats options
|
||||
* @param {CreateStatsOptionsContext} context context
|
||||
* @returns {ChildOptions} context context
|
||||
*/
|
||||
_createChildOptions(options, context) {
|
||||
if (!options) {
|
||||
options = {};
|
||||
}
|
||||
const { children: childrenOptions = undefined, ...baseOptions } =
|
||||
typeof options === "string" ? { preset: options } : options;
|
||||
const getCreateStatsOptions = () => {
|
||||
if (!options) {
|
||||
options = {};
|
||||
}
|
||||
|
||||
const { children: childrenOptions = undefined, ...baseOptions } =
|
||||
typeof options === "string"
|
||||
? { preset: options }
|
||||
: /** @type {StatsOptions} */ (options);
|
||||
|
||||
return { childrenOptions, baseOptions };
|
||||
};
|
||||
|
||||
const children = this.stats.map((stat, idx) => {
|
||||
if (typeof options === "boolean") {
|
||||
return stat.compilation.createStatsOptions(options, context);
|
||||
}
|
||||
const { childrenOptions, baseOptions } = getCreateStatsOptions();
|
||||
const childOptions = Array.isArray(childrenOptions)
|
||||
? childrenOptions[idx]
|
||||
: childrenOptions;
|
||||
@@ -77,81 +104,96 @@ class MultiStats {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {any} options stats options
|
||||
* @param {(string | boolean | StatsOptions)=} options stats options
|
||||
* @returns {StatsCompilation} json output
|
||||
*/
|
||||
toJson(options) {
|
||||
options = this._createChildOptions(options, { forToString: false });
|
||||
const childOptions = this._createChildOptions(options, {
|
||||
forToString: false
|
||||
});
|
||||
/** @type {KnownStatsCompilation} */
|
||||
const obj = {};
|
||||
obj.children = this.stats.map((stat, idx) => {
|
||||
const obj = stat.toJson(options.children[idx]);
|
||||
const obj = stat.toJson(childOptions.children[idx]);
|
||||
const compilationName = stat.compilation.name;
|
||||
const name =
|
||||
compilationName &&
|
||||
identifierUtils.makePathsRelative(
|
||||
options.context,
|
||||
stat.compilation.compiler.context,
|
||||
compilationName,
|
||||
stat.compilation.compiler.root
|
||||
);
|
||||
obj.name = name;
|
||||
return obj;
|
||||
});
|
||||
if (options.version) {
|
||||
if (childOptions.version) {
|
||||
obj.version = obj.children[0].version;
|
||||
}
|
||||
if (options.hash) {
|
||||
if (childOptions.hash) {
|
||||
obj.hash = obj.children.map(j => j.hash).join("");
|
||||
}
|
||||
const mapError = (j, obj) => {
|
||||
return {
|
||||
...obj,
|
||||
compilerPath: obj.compilerPath
|
||||
? `${j.name}.${obj.compilerPath}`
|
||||
: j.name
|
||||
};
|
||||
};
|
||||
if (options.errors) {
|
||||
/**
|
||||
* @param {StatsCompilation} j stats error
|
||||
* @param {StatsError} obj Stats error
|
||||
* @returns {TODO} result
|
||||
*/
|
||||
const mapError = (j, obj) => ({
|
||||
...obj,
|
||||
compilerPath: obj.compilerPath ? `${j.name}.${obj.compilerPath}` : j.name
|
||||
});
|
||||
if (childOptions.errors) {
|
||||
obj.errors = [];
|
||||
for (const j of obj.children) {
|
||||
for (const i of j.errors) {
|
||||
const errors =
|
||||
/** @type {NonNullable<KnownStatsCompilation["errors"]>} */
|
||||
(j.errors);
|
||||
for (const i of errors) {
|
||||
obj.errors.push(mapError(j, i));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (options.warnings) {
|
||||
if (childOptions.warnings) {
|
||||
obj.warnings = [];
|
||||
for (const j of obj.children) {
|
||||
for (const i of j.warnings) {
|
||||
const warnings =
|
||||
/** @type {NonNullable<KnownStatsCompilation["warnings"]>} */
|
||||
(j.warnings);
|
||||
for (const i of warnings) {
|
||||
obj.warnings.push(mapError(j, i));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (options.errorsCount) {
|
||||
if (childOptions.errorsCount) {
|
||||
obj.errorsCount = 0;
|
||||
for (const j of obj.children) {
|
||||
obj.errorsCount += j.errorsCount;
|
||||
obj.errorsCount += /** @type {number} */ (j.errorsCount);
|
||||
}
|
||||
}
|
||||
if (options.warningsCount) {
|
||||
if (childOptions.warningsCount) {
|
||||
obj.warningsCount = 0;
|
||||
for (const j of obj.children) {
|
||||
obj.warningsCount += j.warningsCount;
|
||||
obj.warningsCount += /** @type {number} */ (j.warningsCount);
|
||||
}
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {(string | boolean | StatsOptions)=} options stats options
|
||||
* @returns {string} string output
|
||||
*/
|
||||
toString(options) {
|
||||
options = this._createChildOptions(options, { forToString: true });
|
||||
const childOptions = this._createChildOptions(options, {
|
||||
forToString: true
|
||||
});
|
||||
const results = this.stats.map((stat, idx) => {
|
||||
const str = stat.toString(options.children[idx]);
|
||||
const str = stat.toString(childOptions.children[idx]);
|
||||
const compilationName = stat.compilation.name;
|
||||
const name =
|
||||
compilationName &&
|
||||
identifierUtils
|
||||
.makePathsRelative(
|
||||
options.context,
|
||||
stat.compilation.compiler.context,
|
||||
compilationName,
|
||||
stat.compilation.compiler.root
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user