@zohodesk/client_build_tool
Version:
A CLI tool to build web applications and client libraries
93 lines (73 loc) • 2.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.BundleIntegrityReport = void 0;
var _fs = _interopRequireDefault(require("fs"));
var _path = _interopRequireDefault(require("path"));
var _stream = require("stream");
var _objectManipulation = require("../../utils/object-manipulation");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const pluginName = 'BundleIntegrityReportPlugin';
class BundleIntegrityReport {
constructor({
options,
excludeKeysInReport,
fileName
}) {
this.excludeKeysInStat = excludeKeysInReport;
this.statsFileName = fileName;
this.statsOptions = options;
}
apply(compiler) {
compiler.hooks.done.tapAsync(pluginName, (stats, callback) => {
if (stats.hasErrors()) {
console.error(stats.toString({
all: false,
errors: true,
errorDetails: true,
colors: true
}));
return callback(new Error('Build failed due to compilation errors.'));
}
const statsJson = (0, _objectManipulation.removeKeysFromObject)(stats.toJson(this.statsOptions), this.excludeKeysInStat);
this.emitStats(statsJson).on('end', () => {
callback();
}).on('error', e => {
callback(e);
});
});
}
writeStatsFileInAStream(statsObj) {
const {
outputPath
} = statsObj;
const ouputFileName = _path.default.join(outputPath, this.statsFileName);
return this.createReadStream(statsObj).pipe(_fs.default.createWriteStream(ouputFileName));
}
createReadStream(statsObj) {
const excludeKeys = this.excludeKeysInStat;
return new _stream.Readable({
read() {
let isDone = false;
const objToStringGen = (0, _objectManipulation.convertObjectToStringGen)(statsObj, excludeKeys);
while (!isDone) {
const {
done,
value
} = objToStringGen.next();
if (done) {
isDone = true;
this.push(null);
} else {
this.push(value);
}
}
}
});
}
emitStats(statsJson) {
return this.writeStatsFileInAStream(statsJson);
}
}
exports.BundleIntegrityReport = BundleIntegrityReport;