UNPKG

jsii-release

Version:

Release jsii modules to multiple package managers

132 lines 15.2 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.addToShellPath = exports.rimraf = exports.shell = void 0; const child_process = __importStar(require("child_process")); const fs = __importStar(require("fs")); const path = __importStar(require("path")); /** * A shell command that does what you want * * Is platform-aware, handles errors nicely. */ async function shell(command, options = {}) { var _a, _b, _c, _d; if (options.modEnv && options.env) { throw new Error('Use either env or modEnv but not both'); } // Always output the command const commandAsString = Array.isArray(command) ? command.join(' ') : command; ((_a = options.output) !== null && _a !== void 0 ? _a : process.stdout).write(`💻 ${commandAsString}\n`); let output = (_b = options.output) !== null && _b !== void 0 ? _b : process.stdout; switch ((_c = options.show) !== null && _c !== void 0 ? _c : 'always') { case 'always': break; case 'never': case 'error': output = undefined; break; } if (process.env.VERBOSE) { output = process.stdout; } const env = (_d = options.env) !== null && _d !== void 0 ? _d : (options.modEnv ? { ...process.env, ...options.modEnv } : process.env); const spawnOptions = { ...options, env, // Need this for Windows where we want .cmd and .bat to be found as well. shell: true, stdio: ['ignore', 'pipe', 'pipe'], }; const child = Array.isArray(command) ? child_process.spawn(command[0], command.slice(1), spawnOptions) : child_process.spawn(command, spawnOptions); return new Promise((resolve, reject) => { const stdout = new Array(); const stderr = new Array(); child.stdout.on('data', chunk => { output === null || output === void 0 ? void 0 : output.write(chunk); stdout.push(chunk); }); child.stderr.on('data', chunk => { var _a; output === null || output === void 0 ? void 0 : output.write(chunk); if ((_a = options.captureStderr) !== null && _a !== void 0 ? _a : true) { stderr.push(chunk); } }); child.once('error', reject); child.once('close', code => { var _a; const stderrOutput = Buffer.concat(stderr).toString('utf-8'); const stdoutOutput = Buffer.concat(stdout).toString('utf-8'); const out = (options.onlyStderr ? stderrOutput : stdoutOutput + stderrOutput).trim(); if (code === 0 || options.allowErrExit) { resolve(out); } else { if (options.show === 'error') { ((_a = options.output) !== null && _a !== void 0 ? _a : process.stdout).write(out + '\n'); } reject(new Error(`'${commandAsString}' exited with error code ${code}.`)); } }); }); } exports.shell = shell; /** * rm -rf reimplementation, don't want to depend on an NPM package for this */ function rimraf(fsPath) { try { const isDir = fs.lstatSync(fsPath).isDirectory(); if (isDir) { for (const file of fs.readdirSync(fsPath)) { rimraf(path.join(fsPath, file)); } fs.rmdirSync(fsPath); } else { fs.unlinkSync(fsPath); } } catch (e) { // We will survive ENOENT if (e.code !== 'ENOENT') { throw e; } } } exports.rimraf = rimraf; function addToShellPath(x) { var _a, _b; const parts = (_b = (_a = process.env.PATH) === null || _a === void 0 ? void 0 : _a.split(':')) !== null && _b !== void 0 ? _b : []; if (!parts.includes(x)) { parts.unshift(x); } process.env.PATH = parts.join(':'); } exports.addToShellPath = addToShellPath; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29kZWFydGlmYWN0L3NoZWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkRBQStDO0FBQy9DLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFFN0I7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxLQUFLLENBQUMsT0FBMEIsRUFBRSxVQUF3QixFQUFFOztJQUNoRixJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7S0FDMUQ7SUFFRCw0QkFBNEI7SUFDNUIsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQzdFLENBQUMsTUFBQSxPQUFPLENBQUMsTUFBTSxtQ0FBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sZUFBZSxJQUFJLENBQUMsQ0FBQztJQUVwRSxJQUFJLE1BQU0sR0FBc0MsTUFBQSxPQUFPLENBQUMsTUFBTSxtQ0FBSSxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ2pGLFFBQVEsTUFBQSxPQUFPLENBQUMsSUFBSSxtQ0FBSSxRQUFRLEVBQUU7UUFDaEMsS0FBSyxRQUFRO1lBQ1gsTUFBTTtRQUNSLEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxPQUFPO1lBQ1YsTUFBTSxHQUFHLFNBQVMsQ0FBQztZQUNuQixNQUFNO0tBQ1Q7SUFFRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFO1FBQ3ZCLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0tBQ3pCO0lBRUQsTUFBTSxHQUFHLEdBQUcsTUFBQSxPQUFP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aWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuLyoqXG4gKiBBIHNoZWxsIGNvbW1hbmQgdGhhdCBkb2VzIHdoYXQgeW91IHdhbnRcbiAqXG4gKiBJcyBwbGF0Zm9ybS1hd2FyZSwgaGFuZGxlcyBlcnJvcnMgbmljZWx5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hlbGwoY29tbWFuZDogc3RyaW5nIHwgc3RyaW5nW10sIG9wdGlvbnM6IFNoZWxsT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKG9wdGlvbnMubW9kRW52ICYmIG9wdGlvbnMuZW52KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVc2UgZWl0aGVyIGVudiBvciBtb2RFbnYgYnV0IG5vdCBib3RoJyk7XG4gIH1cblxuICAvLyBBbHdheXMgb3V0cHV0IHRoZSBjb21tYW5kXG4gIGNvbnN0IGNvbW1hbmRBc1N0cmluZyA9IEFycmF5LmlzQXJyYXkoY29tbWFuZCkgPyBjb21tYW5kLmpvaW4oJyAnKSA6IGNvbW1hbmQ7XG4gIChvcHRpb25zLm91dHB1dCA/PyBwcm9jZXNzLnN0ZG91dCkud3JpdGUoYPCfkrsgJHtjb21tYW5kQXNTdHJpbmd9XFxuYCk7XG5cbiAgbGV0IG91dHB1dDogTm9kZUpTLldyaXRhYmxlU3RyZWFtIHwgdW5kZWZpbmVkID0gb3B0aW9ucy5vdXRwdXQgPz8gcHJvY2Vzcy5zdGRvdXQ7XG4gIHN3aXRjaCAob3B0aW9ucy5zaG93ID8/ICdhbHdheXMnKSB7XG4gICAgY2FzZSAnYWx3YXlzJzpcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ25ldmVyJzpcbiAgICBjYXNlICdlcnJvcic6XG4gICAgICBvdXRwdXQgPSB1bmRlZmluZWQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5WRVJCT1NFKSB7XG4gICAgb3V0cHV0ID0gcHJvY2Vzcy5zdGRvdXQ7XG4gIH1cblxuICBjb25zdCBlbnYgPSBvcHRpb25zLmVudiA/PyAob3B0aW9ucy5tb2RFbnYgPyB7IC4uLnByb2Nlc3MuZW52LCAuLi5vcHRpb25zLm1vZEVudiB9IDogcHJvY2Vzcy5lbnYpO1xuICBjb25zdCBzcGF3bk9wdGlvbnM6IGNoaWxkX3Byb2Nlc3MuU3Bhd25PcHRpb25zV2l0aFN0ZGlvVHVwbGU8Y2hpbGRfcHJvY2Vzcy5TdGRpb051bGwsIGNoaWxkX3Byb2Nlc3MuU3RkaW9QaXBlLCBjaGlsZF9wcm9jZXNzLlN0ZGlvUGlwZT4gPSB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbnYsXG4gICAgLy8gTmVlZCB0aGlzIGZvciBXaW5kb3dzIHdoZXJlIHdlIHdhbnQgLmNtZCBhbmQgLmJhdCB0byBiZSBmb3VuZCBhcyB3ZWxsLlxuICAgIHNoZWxsOiB0cnVlLFxuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfTtcblxuICBjb25zdCBjaGlsZCA9IEFycmF5LmlzQXJyYXkoY29tbWFuZClcbiAgICA/IGNoaWxkX3Byb2Nlc3Muc3Bhd24oY29tbWFuZFswXSwgY29tbWFuZC5zbGljZSgxKSwgc3Bhd25PcHRpb25zKVxuICAgIDogY2hpbGRfcHJvY2Vzcy5zcGF3bihjb21tYW5kLCBzcGF3bk9wdGlvbnMpO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzdGRvdXQgPSBuZXcgQXJyYXk8QnVmZmVyPigpO1xuICAgIGNvbnN0IHN0ZGVyciA9IG5ldyBBcnJheTxCdWZmZXI+KCk7XG5cbiAgICBjaGlsZC5zdGRvdXQhLm9uKCdkYXRhJywgY2h1bmsgPT4ge1xuICAgICAgb3V0cHV0Py53cml0ZShjaHVuayk7XG4gICAgICBzdGRvdXQucHVzaChjaHVuayk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5zdGRlcnIhLm9uKCdkYXRhJywgY2h1bmsgPT4ge1xuICAgICAgb3V0cHV0Py53cml0ZShjaHVuayk7XG4gICAgICBpZiAob3B0aW9ucy5jYXB0dXJlU3RkZXJyID8/IHRydWUpIHtcbiAgICAgICAgc3RkZXJyLnB1c2goY2h1bmspO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY2hpbGQub25jZSgnZXJyb3InLCByZWplY3QpO1xuXG4gICAgY2hpbGQub25jZSgnY2xvc2UnLCBjb2RlID0+IHtcbiAgICAgIGNvbnN0IHN0ZGVyck91dHB1dCA9IEJ1ZmZlci5jb25jYXQoc3RkZXJyKS50b1N0cmluZygndXRmLTgnKTtcbiAgICAgIGNvbnN0IHN0ZG91dE91dHB1dCA9IEJ1ZmZlci5jb25jYXQoc3Rkb3V0KS50b1N0cmluZygndXRmLTgnKTtcbiAgICAgIGNvbnN0IG91dCA9IChvcHRpb25zLm9ubHlTdGRlcnIgPyBzdGRlcnJPdXRwdXQgOiBzdGRvdXRPdXRwdXQgKyBzdGRlcnJPdXRwdXQpLnRyaW0oKTtcbiAgICAgIGlmIChjb2RlID09PSAwIHx8IG9wdGlvbnMuYWxsb3dFcnJFeGl0KSB7XG4gICAgICAgIHJlc29sdmUob3V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvcHRpb25zLnNob3cgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAob3B0aW9ucy5vdXRwdXQgPz8gcHJvY2Vzcy5zdGRvdXQpLndyaXRlKG91dCArICdcXG4nKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QobmV3IEVycm9yKGAnJHtjb21tYW5kQXNTdHJpbmd9JyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICR7Y29kZX0uYCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGVsbE9wdGlvbnMgZXh0ZW5kcyBjaGlsZF9wcm9jZXNzLlNwYXduT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIHRvIGFkZCB0byAnZW52J1xuICAgKi9cbiAgcmVhZG9ubHkgbW9kRW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogRG9uJ3QgZmFpbCB3aGVuIGV4aXRpbmcgd2l0aCBhbiBlcnJvclxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dFcnJFeGl0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBjYXB0dXJlIHN0ZGVyclxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjYXB0dXJlU3RkZXJyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGFzcyBvdXRwdXQgaGVyZVxuICAgKlxuICAgKiBAZGVmYXVsdCBzdGRvdXQgdW5sZXNzIHF1aWV0PXRydWVcbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dD86IE5vZGVKUy5Xcml0YWJsZVN0cmVhbTtcblxuICAvKipcbiAgICogT25seSByZXR1cm4gc3RkZXJyLiBGb3IgZXhhbXBsZSwgdGhpcyBpcyB1c2VkIHRvIHZhbGlkYXRlXG4gICAqIHRoYXQgd2hlbiBDST10cnVlLCBhbGwgbG9ncyBhcmUgc2VudCB0byBzdGRvdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBvbmx5U3RkZXJyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRG9uJ3QgbG9nIHRvIHN0ZG91dFxuICAgKlxuICAgKiBAZGVmYXVsdCBhbHdheXNcbiAgICovXG4gIHJlYWRvbmx5IHNob3c/OiAnYWx3YXlzJyB8ICduZXZlcicgfCAnZXJyb3InO1xufVxuXG4vKipcbiAqIHJtIC1yZiByZWltcGxlbWVudGF0aW9uLCBkb24ndCB3YW50IHRvIGRlcGVuZCBvbiBhbiBOUE0gcGFja2FnZSBmb3IgdGhpc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmltcmFmKGZzUGF0aDogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgaXNEaXIgPSBmcy5sc3RhdFN5bmMoZnNQYXRoKS5pc0RpcmVjdG9yeSgpO1xuXG4gICAgaWYgKGlzRGlyKSB7XG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZnMucmVhZGRpclN5bmMoZnNQYXRoKSkge1xuICAgICAgICByaW1yYWYocGF0aC5qb2luKGZzUGF0aCwgZmlsZSkpO1xuICAgICAgfVxuICAgICAgZnMucm1kaXJTeW5jKGZzUGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZzLnVubGlua1N5bmMoZnNQYXRoKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIC8vIFdlIHdpbGwgc3Vydml2ZSBFTk9FTlRcbiAgICBpZiAoZS5jb2RlICE9PSAnRU5PRU5UJykgeyB0aHJvdyBlOyB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvU2hlbGxQYXRoKHg6IHN0cmluZykge1xuICBjb25zdCBwYXJ0cyA9IHByb2Nlc3MuZW52LlBBVEg/LnNwbGl0KCc6JykgPz8gW107XG5cbiAgaWYgKCFwYXJ0cy5pbmNsdWRlcyh4KSkge1xuICAgIHBhcnRzLnVuc2hpZnQoeCk7XG4gIH1cblxuICBwcm9jZXNzLmVudi5QQVRIID0gcGFydHMuam9pbignOicpO1xufVxuIl19