mirror of
https://github.com/tiennm99/FBcount.git
synced 2026-05-15 14:58:32 +00:00
106 lines
2.6 KiB
JavaScript
106 lines
2.6 KiB
JavaScript
"use strict";
|
|
|
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault.js");
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.spawn = spawn;
|
|
exports.progress = progress;
|
|
|
|
var _byline = _interopRequireDefault(require("byline"));
|
|
|
|
var _child_process = _interopRequireDefault(require("child_process"));
|
|
|
|
var _fs = _interopRequireDefault(require("fs"));
|
|
|
|
var _log = require("./log.js");
|
|
|
|
var MAX_LINES = 20;
|
|
var DEBUG_THRESHOLDS = false;
|
|
|
|
function errorLines(lines) {
|
|
return lines.slice(-MAX_LINES).map(function (line) {
|
|
return line[1];
|
|
}).join('\n');
|
|
}
|
|
|
|
function spawn(cmd, args, opts) {
|
|
var child = _child_process.default.spawn(cmd, args, opts);
|
|
|
|
var stdout = (0, _byline.default)(child.stdout);
|
|
var stderr = (0, _byline.default)(child.stderr);
|
|
var lines = [];
|
|
|
|
var onData = function onData(data) {
|
|
var time = new Date().getTime();
|
|
lines.push([time, data.toString()]); // TODO chalk stdout/stderr?
|
|
|
|
var thresholds = this.thresholds; // eslint-disable-line no-invalid-this
|
|
|
|
if (thresholds) {
|
|
for (var key in thresholds) {
|
|
if (data.indexOf(key) >= 0) {
|
|
var p = thresholds[key];
|
|
|
|
_log.log.showProgress(p);
|
|
|
|
if (DEBUG_THRESHOLDS) {
|
|
lines.push([time, '************']);
|
|
lines.push([time, p + ': ' + key]);
|
|
lines.push([time, '************']);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
var promise = new Promise(function (resolve, reject) {
|
|
child.on('error', function (error) {
|
|
console.error(errorLines(lines)); // dont use `log` here
|
|
|
|
reject(error);
|
|
});
|
|
child.on('close', function (code) {
|
|
if (code) {
|
|
console.error(errorLines(lines)); // dont use `log` here
|
|
|
|
return reject(new Error(`${cmd} failed with code ${code}`));
|
|
}
|
|
|
|
resolve();
|
|
});
|
|
});
|
|
onData = onData.bind(promise);
|
|
if (stdout) stdout.on('data', onData);
|
|
if (stderr) stderr.on('data', onData);
|
|
promise.child = child;
|
|
promise.lines = lines;
|
|
return promise;
|
|
}
|
|
|
|
function progress(promise, thresholds) {
|
|
promise.thresholds = thresholds;
|
|
var child = promise.child,
|
|
lines = promise.lines;
|
|
|
|
_log.log.enableProgress(promise.child.spawnfile);
|
|
|
|
_log.log.showProgress(0);
|
|
|
|
var start = new Date().getTime();
|
|
child.on('close', function () {
|
|
if (DEBUG_THRESHOLDS) {
|
|
var finish = new Date().getTime();
|
|
var content = lines.map(function (line) {
|
|
return (100 * (line[0] - start) / (finish - start) | 0) + ': ' + line[1];
|
|
}).join('\n');
|
|
|
|
_fs.default.writeFileSync(child.spawnfile + '.debug', content);
|
|
}
|
|
|
|
_log.log.showProgress(100);
|
|
|
|
_log.log.disableProgress();
|
|
});
|
|
} |