"use strict";
/**
 * Fork of https://github.com/clessg/progress-bar-webpack-plugin
 * but with TS
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const chalk_1 = __importDefault(require("chalk"));
const progress_1 = __importDefault(require("progress"));
const webpack_1 = require("webpack");
class ExpoProgressBarPlugin extends webpack_1.ProgressPlugin {
    constructor() {
        const stream = process.stderr;
        const enabled = stream && stream.isTTY;
        if (!enabled) {
            super();
            return;
        }
        var barLeft = chalk_1.default.bold('[');
        var barRight = chalk_1.default.bold(']');
        var preamble = chalk_1.default.cyan.bold('  build ') + barLeft;
        //`[:bar] ${chalk.green.bold(':percent')} (:elapsed seconds)`
        var barFormat = preamble + ':bar' + barRight + chalk_1.default.magenta.bold(' :percent');
        var summary = true;
        const barOptions = {
            complete: '=',
            incomplete: ' ',
            width: 20,
            total: 100,
            clear: false,
        };
        const bar = new progress_1.default(barFormat, barOptions);
        let running = false;
        let startTime = 0;
        let lastPercent = 0;
        super((percent, msg) => {
            if (!running && lastPercent !== 0) {
                stream.write('\n');
            }
            var newPercent = Math.floor(percent * barOptions.width);
            if (lastPercent < newPercent || newPercent === 0) {
                bar.update(percent, {
                    msg,
                });
                lastPercent = newPercent;
            }
            if (!running) {
                running = true;
                startTime = Date.now();
                lastPercent = 0;
            }
            else if (percent === 1) {
                var now = Date.now();
                var buildTime = (now - startTime) / 1000 + 's';
                bar.terminate();
                if (summary) {
                    stream.write(chalk_1.default.green.bold('Build completed in ' + buildTime + '\n\n'));
                }
                running = false;
            }
        });
    }
}
exports.default = ExpoProgressBarPlugin;
//# sourceMappingURL=ExpoProgressBarPlugin.js.map