UNPKG

firebase-ci

Version:

Simplified Firebase interaction for continuous integration including deploying hosting, functions, and database/storage rules.

92 lines (75 loc) 2.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isPromise = isPromise; exports.runCommand = runCommand; exports.shellescape = shellescape; var _stream = _interopRequireDefault(require("stream")); var _child_process = require("child_process"); var _logger = require("../utils/logger"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } process.env.FORCE_COLOR = true; function isPromise(valToCheck) { return valToCheck && typeof valToCheck.then === 'function'; } function runCommand({ beforeMsg, successMsg, command, errorMsg, args, pipeOutput = true }) { if (beforeMsg) (0, _logger.info)(beforeMsg); return new Promise((resolve, reject) => { const child = (0, _child_process.spawn)(command, args, { env: process.env, shell: true }); let output; let error; const customStream = new _stream.default.Writable(); const customErrorStream = new _stream.default.Writable(); customStream._write = (data, ...argv) => { output += data; if (pipeOutput) { process.stdout._write(data, ...argv); } }; customErrorStream._write = (data, ...argv) => { error += data; if (pipeOutput) { process.stderr._write(data, ...argv); } }; child.stdout.pipe(customStream); child.stderr.pipe(customErrorStream); child.on('exit', (code, signal) => { if (code !== 0) { if (output && output.indexOf('npm WARN') !== -1) { return resolve(successMsg || output); } reject(error || output); } else { if (successMsg) (0, _logger.info)(successMsg); if (output && output.indexOf('undefined') === 0) { resolve(successMsg || output.replace('undefined', '')); } else { resolve(successMsg || output); } } }); }); } function shellescape(a) { const ret = []; a.forEach(s => { if (/[^A-Za-z0-9_/:=-]/.test(s)) { s = "'" + s.replace(/'/g, "'\\''") + "'"; s = s.replace(/^(?:'')+/g, '').replace(/\\'''/g, "\\'"); } ret.push(s); }); return ret.join(' '); }