UNPKG

@shuyun-ep-team/scripts

Version:

为项目提供相应的脚本,使其减少繁琐的配置。

80 lines 2.67 kB
"use strict"; 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