@shuyun-ep-team/scripts
Version:
为项目提供相应的脚本,使其减少繁琐的配置。
80 lines • 2.67 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const cross_spawn_1 = __importDefault(require("cross-spawn"));
const setEncoding = (stream, encoding) => {
if (stream && encoding && 'setEncoding' in stream && typeof stream.setEncoding === 'function') {
stream.setEncoding(encoding);
}
};
const prepareStream = (stream, encoding) => {
if (stream === null) {
return null;
}
setEncoding(stream, encoding);
const buffers = [];
stream.on('data', data => buffers.push(data));
return buffers;
};
const closeArgsToError = (code, signal) => {
if (signal !== null) {
const err = new Error(`Exited with signal ${signal}`);
err.exitSignal = signal;
return err;
}
if (code !== 0) {
const err = new Error(`Exited with status ${code}`);
err.exitStatus = code;
return err;
}
return null;
};
const concatBuffer = (buffer) => {
if (buffer === null || buffer.length === 0) {
return null;
}
if (typeof buffer[0] === 'string') {
return buffer.join('');
}
if (Buffer.isBuffer(buffer[0])) {
return Buffer.concat(buffer);
}
throw new Error('Unexpected buffer type');
};
function spawnPromise(cmd, args, options) {
let childProcess;
let encoding;
if (options && options.encoding !== null) {
encoding = options.encoding;
options = Object.assign({}, options);
delete options.encoding;
}
if (Array.isArray(args) || (args === undefined && options === undefined)) {
childProcess = cross_spawn_1.default(cmd, args, options);
}
else {
childProcess = cross_spawn_1.default(cmd, Object.assign({}, options));
}
setEncoding(childProcess.stdin, encoding);
return new Promise((resolve, reject) => {
const stdout = prepareStream(childProcess.stdout, 'utf-8');
const stderr = prepareStream(childProcess.stderr, 'utf-8');
childProcess.once('exit', (code, signal) => {
const error = closeArgsToError(code, signal);
if (error != null) {
error.stdout = concatBuffer(stdout);
error.stderr = concatBuffer(stderr);
reject(error);
}
else {
resolve(concatBuffer(stdout));
}
});
});
}
exports.spawnPromise = spawnPromise;
exports.spawn = cross_spawn_1.default;
exports.spawnSync = exports.spawn.sync;
//# sourceMappingURL=cross-spawn.js.map