UNPKG

jsii-release

Version:

Release jsii modules to multiple package managers

170 lines • 17.9 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 () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.UsageDir = exports.DEFAULT_USAGE_DIR = void 0; const path = __importStar(require("path")); const fs = __importStar(require("fs-extra")); const files_1 = require("./files"); exports.DEFAULT_USAGE_DIR = path.join((0, files_1.homeDir)(), '.publib-ca/usage'); /** * The usage directory is where we write per-session config files to access the CodeArtifact repository. * * Some config files may be written in a system-global location, but they will not be active unless the * contents of this directory have been sourced/copied into the current terminal. * * CONTRACT * * There are two special entries: * * - `env`, a file with `key=value` entries for environment variables to set. * - `cwd/`, a directory with files that need to be copied into the current directory before each command. * * Other than these, code may write tempfiles to this directory if it wants, but there is no meaning * implied for other files. */ class UsageDir { static default() { return new UsageDir(exports.DEFAULT_USAGE_DIR); } constructor(directory) { this.directory = directory; this.envFile = path.join(this.directory, 'env'); this.cwdDir = path.join(this.directory, 'cwd'); } async delete() { if (await fs.pathExists(this.directory)) { await fs.remove(this.directory); } } /** * Create a fresh empty directory, with helper scripts */ async reset() { await this.delete(); await fs.mkdirp(path.join(this.directory, 'cwd')); await fs.writeFile(path.join(this.directory, 'env'), '', { encoding: 'utf-8' }); await this.addToEnv({ CWD_FILES_DIR: path.join(this.directory, 'cwd'), }); // Write a bash helper to load these settings await fs.writeFile(path.join(this.directory, 'activate.bash'), [ `while read -u10 line; do [[ -z $line ]] || export "$line"; done 10<${this.directory}/env`, 'cp -R $CWD_FILES_DIR/ .', // Copy files from directory even if it is empty ].join('\n'), { encoding: 'utf-8' }); } /** * Set the expiration time of the current settings */ async setExpirationTimeMs(timestamp) { await this.addToEnv({ EXPIRATION_TIME_MS: `${timestamp}`, }); } /** * Add settings to the environment variables */ async addToEnv(settings) { const lines = await (0, files_1.loadLines)(this.envFile); for (const [k, v] of Object.entries(settings)) { (0, files_1.updateIniKey)(lines, k, v); } await (0, files_1.writeLines)(this.envFile, lines); } /** * Return the current environment variables */ async currentEnv() { const lines = await (0, files_1.loadLines)(this.envFile); const splitter = /^([a-zA-Z0-9_-]+)\s*=\s*(.*)$/; const ret = {}; for (const line of lines) { const m = line.match(splitter); if (m) { ret[m[1]] = m[2]; } } return ret; } cwdFile(filename) { return path.join(this.cwdDir, filename); } /** * Activate in the current process (update process.env), copy the cwd/ directory to the current directory */ async activateInCurrentProcess() { for (const [k, v] of Object.entries(await this.currentEnv())) { process.env[k] = v; } await (0, files_1.copyDirectoryContents)(this.cwdDir, '.'); } async copySelectCwdFileHere(...filenames) { for (const file of filenames) { await fs.copyFile(path.join(this.cwdDir, file), file); } } async putFile(filename, contents) { const fileName = path.join(this.directory, filename); await (0, files_1.writeFile)(fileName, contents); return fileName; } async putCwdFile(filename, contents) { await (0, files_1.writeFile)(path.join(this.cwdDir, filename), contents); } async putJson(key, data) { await (0, files_1.writeFile)(path.join(this.directory, key + '.json'), JSON.stringify(data, undefined, 2)); } async readJson(key) { try { return await fs.readJson(path.join(this.directory, key + '.json')); } catch (e) { if (e.code === 'ENOENT') { return undefined; } throw e; } } /** * Print to the console on how to activate these settings */ advertise() { // eslint-disable-next-line no-console console.log('To activate these settings in the current bash shell:'); // eslint-disable-next-line no-console console.log(` source ${this.directory}/activate.bash`); } } exports.UsageDir = UsageDir; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNhZ2UtZGlyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvZGVhcnRpZmFjdC91c2FnZS1kaXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTZCO0FBQzdCLDZDQUErQjtBQUMvQixtQ0FBeUc7QUFFNUYsUUFBQSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUEsZUFBTyxHQUFFLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUUxRTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFhLFFBQVE7SUFDWixNQUFNLENBQUMsT0FBTztRQUNuQixPQUFPLElBQUksUUFBUSxDQUFDLHlCQUFpQixDQUFDLENBQUM7SUFDekMsQ0FBQztJQUtELFlBQW9DLFNBQWlCO1FBQWpCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDbkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNO1FBQ2pCLElBQUksTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxT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QUM7WUFDaEIsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUN4QixPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBRUQsTUFBTSxDQUFDLENBQUM7UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNkLHNDQUFzQztRQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7UUFDckUsc0NBQXNDO1FBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxJQUFJLENBQUMsU0FBUyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVELENBQUM7Q0FDRjtBQXBJRCw0QkFvSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgY29weURpcmVjdG9yeUNvbnRlbnRzLCBob21lRGlyLCBsb2FkTGluZXMsIHVwZGF0ZUluaUtleSwgd3JpdGVGaWxlLCB3cml0ZUxpbmVzIH0gZnJvbSAnLi9maWxlcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1VTQUdFX0RJUiA9IHBhdGguam9pbihob21lRGlyKCksICcucHVibGliLWNhL3VzYWdlJyk7XG5cbi8qKlxuICogVGhlIHVzYWdlIGRpcmVjdG9yeSBpcyB3aGVyZSB3ZSB3cml0ZSBwZXItc2Vzc2lvbiBjb25maWcgZmlsZXMgdG8gYWNjZXNzIHRoZSBDb2RlQXJ0aWZhY3QgcmVwb3NpdG9yeS5cbiAqXG4gKiBTb21lIGNvbmZpZyBmaWxlcyBtYXkgYmUgd3JpdHRlbiBpbiBhIHN5c3RlbS1nbG9iYWwgbG9jYXRpb24sIGJ1dCB0aGV5IHdpbGwgbm90IGJlIGFjdGl2ZSB1bmxlc3MgdGhlXG4gKiBjb250ZW50cyBvZiB0aGlzIGRpcmVjdG9yeSBoYXZlIGJlZW4gc291cmNlZC9jb3BpZWQgaW50byB0aGUgY3VycmVudCB0ZXJtaW5hbC5cbiAqXG4gKiBDT05UUkFDVFxuICpcbiAqIFRoZXJlIGFyZSB0d28gc3BlY2lhbCBlbnRyaWVzOlxuICpcbiAqIC0gYGVudmAsIGEgZmlsZSB3aXRoIGBrZXk9dmFsdWVgIGVudHJpZXMgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byAgc2V0LlxuICogLSBgY3dkL2AsIGEgZGlyZWN0b3J5IHdpdGggZmlsZXMgdGhhdCBuZWVkIHRvIGJlIGNvcGllZCBpbnRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBiZWZvcmUgZWFjaCBjb21tYW5kLlxuICpcbiAqIE90aGVyIHRoYW4gdGhlc2UsIGNvZGUgbWF5IHdyaXRlIHRlbXBmaWxlcyB0byB0aGlzIGRpcmVjdG9yeSBpZiBpdCB3YW50cywgYnV0IHRoZXJlIGlzIG5vIG1lYW5pbmdcbiAqIGltcGxpZWQgZm9yIG90aGVyIGZpbGVzLlxuICovXG5leHBvcnQgY2xhc3MgVXNhZ2VEaXIge1xuICBwdWJsaWMgc3RhdGljIGRlZmF1bHQoKSB7XG4gICAgcmV0dXJuIG5ldyBVc2FnZURpcihERUZBVUxUX1VTQUdFX0RJUik7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZW52RmlsZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY3dkRGlyOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgZGlyZWN0b3J5OiBzdHJpbmcpIHtcbiAgICB0aGlzLmVudkZpbGUgPSBwYXRoLmpvaW4odGhpcy5kaXJlY3RvcnksICdlbnYnKTtcbiAgICB0aGlzLmN3ZERpciA9IHBhdGguam9pbih0aGlzLmRpcmVjdG9yeSwgJ2N3ZCcpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZSgpIHtcbiAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyh0aGlzLmRpcmVjdG9yeSkpIHtcbiAgICAgIGF3YWl0IGZzLnJlbW92ZSh0aGlzLmRpcmVjdG9yeSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGZyZXNoIGVtcHR5IGRpcmVjdG9yeSwgd2l0aCBoZWxwZXIgc2NyaXB0c1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlc2V0KCkge1xuICAgIGF3YWl0IHRoaXMuZGVsZXRlKCk7XG4gICAgYXdhaXQgZnMubWtkaXJwKHBhdGguam9pbih0aGlzLmRpcmVjdG9yeSwgJ2N3ZCcpKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKHRoaXMuZGlyZWN0b3J5LCAnZW52JyksICcnLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5hZGRUb0Vudih7XG4gICAgICBDV0RfRklMRVNfRElSOiBwYXRoLmpvaW4odGhpcy5kaXJlY3RvcnksICdjd2QnKSxcbiAgICB9KTtcblxuICAgIC8vIFdyaXRlIGEgYmFzaCBoZWxwZXIgdG8gbG9hZCB0aGVzZSBzZXR0aW5nc1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoLmpvaW4odGhpcy5kaXJlY3RvcnksICdhY3RpdmF0ZS5iYXNoJyksIFtcbiAgICAgIGB3aGlsZSByZWFkIC11MTAgbGluZTsgZG8gW1sgLXogJGxpbmUgXV0gfHwgZXhwb3J0IFwiJGxpbmVcIjsgZG9uZSAxMDwke3RoaXMuZGlyZWN0b3J5fS9lbnZgLFxuICAgICAgJ2NwIC1SICRDV0RfRklMRVNfRElSLyAuJywgLy8gQ29weSBmaWxlcyBmcm9tIGRpcmVjdG9yeSBldmVuIGlmIGl0IGlzIGVtcHR5XG4gICAgXS5qb2luKCdcXG4nKSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGV4cGlyYXRpb24gdGltZSBvZiB0aGUgY3VycmVudCBzZXR0aW5nc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldEV4cGlyYXRpb25UaW1lTXModGltZXN0YW1wOiBudW1iZXIpIHtcbiAgICBhd2FpdCB0aGlzLmFkZFRvRW52KHtcbiAgICAgIEVYUElSQVRJT05fVElNRV9NUzogYCR7dGltZXN0YW1wfWAsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHNldHRpbmdzIHRvIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBhZGRUb0VudihzZXR0aW5nczogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuICAgIGNvbnN0IGxpbmVzID0gYXdhaXQgbG9hZExpbmVzKHRoaXMuZW52RmlsZSk7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoc2V0dGluZ3MpKSB7XG4gICAgICB1cGRhdGVJbmlLZXkobGluZXMsIGssIHYpO1xuICAgIH1cbiAgICBhd2FpdCB3cml0ZUxpbmVzKHRoaXMuZW52RmlsZSwgbGluZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgY3VycmVudCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBjdXJyZW50RW52KCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICAgIGNvbnN0IGxpbmVzID0gYXdhaXQgbG9hZExpbmVzKHRoaXMuZW52RmlsZSk7XG5cbiAgICBjb25zdCBzcGxpdHRlciA9IC9eKFthLXpBLVowLTlfLV0rKVxccyo9XFxzKiguKikkLztcblxuICAgIGNvbnN0IHJldDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgY29uc3QgbSA9IGxpbmUubWF0Y2goc3BsaXR0ZXIpO1xuICAgICAgaWYgKG0pIHtcbiAgICAgICAgcmV0W21bMV1dID0gbVsyXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHB1YmxpYyBjd2RGaWxlKGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKHRoaXMuY3dkRGlyLCBmaWxlbmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQWN0aXZhdGUgaW4gdGhlIGN1cnJlbnQgcHJvY2VzcyAodXBkYXRlIHByb2Nlc3MuZW52KSwgY29weSB0aGUgY3dkLyBkaXJlY3RvcnkgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYWN0aXZhdGVJbkN1cnJlbnRQcm9jZXNzKCkge1xuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGF3YWl0IHRoaXMuY3VycmVudEVudigpKSkge1xuICAgICAgcHJvY2Vzcy5lbnZba10gPSB2O1xuICAgIH1cblxuICAgIGF3YWl0IGNvcHlEaXJlY3RvcnlDb250ZW50cyh0aGlzLmN3ZERpciwgJy4nKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb3B5U2VsZWN0Q3dkRmlsZUhlcmUoLi4uZmlsZW5hbWVzOiBzdHJpbmdbXSkge1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlbmFtZXMpIHtcbiAgICAgIGF3YWl0IGZzLmNvcHlGaWxlKHBhdGguam9pbih0aGlzLmN3ZERpciwgZmlsZSksIGZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwdXRGaWxlKGZpbGVuYW1lOiBzdHJpbmcsIGNvbnRlbnRzOiBzdHJpbmcpIHtcbiAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguam9pbih0aGlzLmRpcmVjdG9yeSwgZmlsZW5hbWUpO1xuICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlTmFtZSwgY29udGVudHMpO1xuICAgIHJldHVybiBmaWxlTmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwdXRDd2RGaWxlKGZpbGVuYW1lOiBzdHJpbmcsIGNvbnRlbnRzOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB3cml0ZUZpbGUocGF0aC5qb2luKHRoaXMuY3dkRGlyLCBmaWxlbmFtZSksIGNvbnRlbnRzKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwdXRKc29uKGtleTogc3RyaW5nLCBkYXRhOiBhbnkpIHtcbiAgICBhd2FpdCB3cml0ZUZpbGUocGF0aC5qb2luKHRoaXMuZGlyZWN0b3J5LCBrZXkgKyAnLmpzb24nKSwgSlNPTi5zdHJpbmdpZnkoZGF0YSwgdW5kZWZpbmVkLCAyKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVhZEpzb248QT4oa2V5OiBzdHJpbmcpOiBQcm9taXNlPEEgfCB1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGZzLnJlYWRKc29uKHBhdGguam9pbih0aGlzLmRpcmVjdG9yeSwga2V5ICsgJy5qc29uJykpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKGUuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJpbnQgdG8gdGhlIGNvbnNvbGUgb24gaG93IHRvIGFjdGl2YXRlIHRoZXNlIHNldHRpbmdzXG4gICAqL1xuICBwdWJsaWMgYWR2ZXJ0aXNlKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coJ1RvIGFjdGl2YXRlIHRoZXNlIHNldHRpbmdzIGluIHRoZSBjdXJyZW50IGJhc2ggc2hlbGw6Jyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZyhgICAgIHNvdXJjZSAke3RoaXMuZGlyZWN0b3J5fS9hY3RpdmF0ZS5iYXNoYCk7XG4gIH1cbn0iXX0=