You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
3.3 KiB
89 lines
3.3 KiB
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const webpack_1 = __importDefault(require("webpack"));
|
|
class WebpackBar extends webpack_1.default.ProgressPlugin {
|
|
constructor(props) {
|
|
super(percentage => {
|
|
const { buildID } = this;
|
|
if (percentage === 1) {
|
|
this.sendEvent('bundle_build_done', { percentage, buildID });
|
|
}
|
|
else if (percentage === 0) {
|
|
this.sendEvent('bundle_build_started', {
|
|
percentage,
|
|
buildID,
|
|
bundleDetails: props.bundleDetails,
|
|
});
|
|
}
|
|
else {
|
|
this.sendEvent('bundle_transform_progressed', { percentage, buildID });
|
|
}
|
|
});
|
|
this.props = props;
|
|
this.sendEvent = (name, props) => {
|
|
this.props.logger.info({ tag: 'metro' }, JSON.stringify({
|
|
tag: 'metro',
|
|
id: Date.now(),
|
|
shouldHide: false,
|
|
type: name,
|
|
...props,
|
|
}));
|
|
};
|
|
// Add some offset from Metro
|
|
this._nextBundleBuildID = 999;
|
|
this.buildID = '';
|
|
}
|
|
getNewBuildID() {
|
|
return (this._nextBundleBuildID++).toString(36);
|
|
}
|
|
apply(compiler) {
|
|
this.buildID = this.getNewBuildID();
|
|
super.apply(compiler);
|
|
// "invalid" event fires when you have changed a file, and Webpack is
|
|
// recompiling a bundle. WebpackDevServer takes care to pause serving the
|
|
// bundle, so if you refresh, it'll wait instead of serving the old one.
|
|
// "invalid" is short for "bundle invalidated", it doesn't imply any errors.
|
|
compiler.hooks.invalid.tap('invalid', () => {
|
|
this.props.bundleDetails.bundleType = 'hmr';
|
|
});
|
|
compiler.hooks.done.tap('done', async (stats) => {
|
|
var _a;
|
|
const statsData = stats.toJson({
|
|
all: false,
|
|
warnings: true,
|
|
errors: true,
|
|
});
|
|
if (stats.hasErrors()) {
|
|
const metroErrors = statsData.errors.map(error => {
|
|
return {
|
|
message: error,
|
|
name: 'WebpackError',
|
|
};
|
|
});
|
|
this.sendEvent('bundle_build_failed', {
|
|
buildID: this.buildID,
|
|
bundleOptions: this.props.bundleDetails,
|
|
});
|
|
for (const error of metroErrors) {
|
|
this.sendEvent('bundling_error', {
|
|
error,
|
|
});
|
|
}
|
|
return;
|
|
}
|
|
// Show warnings if no errors were found.
|
|
if ((_a = statsData.warnings) === null || _a === void 0 ? void 0 : _a.length) {
|
|
for (const warning of statsData.warnings) {
|
|
this.sendEvent('bundling_warning', {
|
|
warning,
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
exports.default = WebpackBar;
|
|
//# sourceMappingURL=ExpoProgressBarPlugin.js.map
|