first commit
This commit is contained in:
90
app_vue/node_modules/webpack-bundle-analyzer/lib/statsUtils.js
generated
vendored
Normal file
90
app_vue/node_modules/webpack-bundle-analyzer/lib/statsUtils.js
generated
vendored
Normal file
@ -0,0 +1,90 @@
|
||||
"use strict";
|
||||
|
||||
const {
|
||||
createWriteStream
|
||||
} = require('fs');
|
||||
|
||||
const {
|
||||
Readable
|
||||
} = require('stream');
|
||||
|
||||
class StatsSerializeStream extends Readable {
|
||||
constructor(stats) {
|
||||
super();
|
||||
this._indentLevel = 0;
|
||||
this._stringifier = this._stringify(stats);
|
||||
}
|
||||
|
||||
get _indent() {
|
||||
return ' '.repeat(this._indentLevel);
|
||||
}
|
||||
|
||||
_read() {
|
||||
let readMore = true;
|
||||
|
||||
while (readMore) {
|
||||
const {
|
||||
value,
|
||||
done
|
||||
} = this._stringifier.next();
|
||||
|
||||
if (done) {
|
||||
this.push(null);
|
||||
readMore = false;
|
||||
} else {
|
||||
readMore = this.push(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*_stringify(obj) {
|
||||
if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || obj === null) {
|
||||
yield JSON.stringify(obj);
|
||||
} else if (Array.isArray(obj)) {
|
||||
yield '[';
|
||||
this._indentLevel++;
|
||||
let isFirst = true;
|
||||
|
||||
for (let item of obj) {
|
||||
if (item === undefined) {
|
||||
item = null;
|
||||
}
|
||||
|
||||
yield `${isFirst ? '' : ','}\n${this._indent}`;
|
||||
yield* this._stringify(item);
|
||||
isFirst = false;
|
||||
}
|
||||
|
||||
this._indentLevel--;
|
||||
yield obj.length ? `\n${this._indent}]` : ']';
|
||||
} else {
|
||||
yield '{';
|
||||
this._indentLevel++;
|
||||
let isFirst = true;
|
||||
const entries = Object.entries(obj);
|
||||
|
||||
for (const [itemKey, itemValue] of entries) {
|
||||
if (itemValue === undefined) {
|
||||
continue;
|
||||
}
|
||||
|
||||
yield `${isFirst ? '' : ','}\n${this._indent}${JSON.stringify(itemKey)}: `;
|
||||
yield* this._stringify(itemValue);
|
||||
isFirst = false;
|
||||
}
|
||||
|
||||
this._indentLevel--;
|
||||
yield entries.length ? `\n${this._indent}}` : '}';
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
exports.StatsSerializeStream = StatsSerializeStream;
|
||||
exports.writeStats = writeStats;
|
||||
|
||||
async function writeStats(stats, filepath) {
|
||||
return new Promise((resolve, reject) => {
|
||||
new StatsSerializeStream(stats).on('end', resolve).on('error', reject).pipe(createWriteStream(filepath));
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user