UNPKG

@aws-cdk-testing/cli-integ

Version:

Integration tests for the AWS CDK CLI

70 lines 11.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.npmMostRecentMatching = npmMostRecentMatching; exports.npmQueryInstalledVersion = npmQueryInstalledVersion; exports.typescriptVersionsSync = typescriptVersionsSync; exports.typescriptVersionsYoungerThanDaysSync = typescriptVersionsYoungerThanDaysSync; const child_process_1 = require("child_process"); const semver = require("semver"); const shell_1 = require("./shell"); const MINIMUM_VERSION = '3.9'; async function npmMostRecentMatching(packageName, range) { const output = JSON.parse(await (0, shell_1.shell)(['node', require.resolve('npm'), '--silent', 'view', `${packageName}@${range}`, 'version', '--json'], { show: 'error', captureStderr: false, })); if (typeof output === 'string') { return output; } if (!Array.isArray(output)) { throw new Error(`Expected array from npm, got: ${JSON.stringify(output)}`); } if (output.length === 0) { throw new Error(`Found no package matching ${packageName}@${range}`); } // Otherwise an array that may or may not be sorted. Sort it then get the top one. output.sort((a, b) => semver.compare(a, b)); return output[output.length - 1]; } async function npmQueryInstalledVersion(packageName, dir) { const reportStr = await (0, shell_1.shell)(['node', require.resolve('npm'), 'list', '--json', '--depth', '0', packageName], { cwd: dir, show: 'error', captureStderr: false, outputs: [process.stderr], }); const report = JSON.parse(reportStr); return report.dependencies[packageName].version; } /** * Use NPM preinstalled on the machine to look up a list of TypeScript versions */ function typescriptVersionsSync() { const { stdout } = (0, child_process_1.spawnSync)('npm', ['--silent', 'view', `typescript@>=${MINIMUM_VERSION}`, 'version', '--json'], { encoding: 'utf-8' }); const versions = JSON.parse(stdout); return Array.from(new Set(versions.map(v => v.split('.').slice(0, 2).join('.')))); } /** * Use NPM preinstalled on the machine to query publish times of versions */ function typescriptVersionsYoungerThanDaysSync(days, versions) { const { stdout } = (0, child_process_1.spawnSync)('npm', ['--silent', 'view', 'typescript', 'time', '--json'], { encoding: 'utf-8' }); const versionTsMap = JSON.parse(stdout); const cutoffDate = new Date(Date.now() - (days * 24 * 3600 * 1000)); const cutoffDateS = cutoffDate.toISOString(); const recentVersions = Object.entries(versionTsMap) .filter(([_, dateS]) => dateS > cutoffDateS) .map(([v]) => v); // Input versions are of the form 3.9, 5.2, etc. // Actual versions are of the form `3.9.15`, `5.3.0-dev.20511311`. // Return only 2-digit versions for which there is a non-prerelease version in the set of recentVersions // So a 2-digit versions that is followed by `.<digits>` until the end of the string. return versions.filter((twoV) => { const re = new RegExp(`^${reQuote(twoV)}\\.\\d+$`); return recentVersions.some(fullV => fullV.match(re)); }); } function reQuote(str) { return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibnBtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBTUEsc0RBbUJDO0FBRUQsNERBU0M7QUFLRCx3REFLQztBQUtELHNGQW1CQztBQXRFRCxpREFBMEM7QUFDMUMsaUNBQWlDO0FBQ2pDLG1DQUFnQztBQUVoQyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFFdkIsS0FBSyxVQUFVLHFCQUFxQixDQUFDLFdBQW1CLEVBQUUsS0FBYTtJQUM1RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBQSxhQUFLLEVBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsV0FBVyxJQUFJLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRTtRQUMxSSxJQUFJLEVBQUUsT0FBTztRQUNiLGFBQWEsRUFBRSxLQUFLO0tBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBRUosSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMvQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLFdBQVcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxrRkFBa0Y7SUFDbEYsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFB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QyxDQUFDO1FBQ25ELE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxHQUFXO0lBQzFCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNwRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3Bhd25TeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IHNoZWxsIH0gZnJvbSAnLi9zaGVsbCc7XG5cbmNvbnN0IE1JTklNVU1fVkVSU0lPTiA9ICczLjknO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbnBtTW9zdFJlY2VudE1hdGNoaW5nKHBhY2thZ2VOYW1lOiBzdHJpbmcsIHJhbmdlOiBzdHJpbmcpIHtcbiAgY29uc3Qgb3V0cHV0ID0gSlNPTi5wYXJzZShhd2FpdCBzaGVsbChbJ25vZGUnLCByZXF1aXJlLnJlc29sdmUoJ25wbScpLCAnLS1zaWxlbnQnLCAndmlldycsIGAke3BhY2thZ2VOYW1lfUAke3JhbmdlfWAsICd2ZXJzaW9uJywgJy0tanNvbiddLCB7XG4gICAgc2hvdzogJ2Vycm9yJyxcbiAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgfSkpO1xuXG4gIGlmICh0eXBlb2Ygb3V0cHV0ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cbiAgaWYgKCFBcnJheS5pc0FycmF5KG91dHB1dCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFycmF5IGZyb20gbnBtLCBnb3Q6ICR7SlNPTi5zdHJpbmdpZnkob3V0cHV0KX1gKTtcbiAgfVxuICBpZiAob3V0cHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRm91bmQgbm8gcGFja2FnZSBtYXRjaGluZyAke3BhY2thZ2VOYW1lfUAke3JhbmdlfWApO1xuICB9XG5cbiAgLy8gT3RoZXJ3aXNlIGFuIGFycmF5IHRoYXQgbWF5IG9yIG1heSBub3QgYmUgc29ydGVkLiBTb3J0IGl0IHRoZW4gZ2V0IHRoZSB0b3Agb25lLlxuICBvdXRwdXQuc29ydCgoYTogc3RyaW5nLCBiOiBzdHJpbmcpID0+IHNlbXZlci5jb21wYXJlKGEsIGIpKTtcbiAgcmV0dXJuIG91dHB1dFtvdXRwdXQubGVuZ3RoIC0gMV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBucG1RdWVyeUluc3RhbGxlZFZlcnNpb24ocGFja2FnZU5hbWU6IHN0cmluZywgZGlyOiBzdHJpbmcpIHtcbiAgY29uc3QgcmVwb3J0U3RyID0gYXdhaXQgc2hlbGwoWydub2RlJywgcmVxdWlyZS5yZXNvbHZlKCducG0nKSwgJ2xpc3QnLCAnLS1qc29uJywgJy0tZGVwdGgnLCAnMCcsIHBhY2thZ2VOYW1lXSwge1xuICAgIGN3ZDogZGlyLFxuICAgIHNob3c6ICdlcnJvcicsXG4gICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgb3V0cHV0czogW3Byb2Nlc3Muc3RkZXJyXSxcbiAgfSk7XG4gIGNvbnN0IHJlcG9ydCA9IEpTT04ucGFyc2UocmVwb3J0U3RyKTtcbiAgcmV0dXJuIHJlcG9ydC5kZXBlbmRlbmNpZXNbcGFja2FnZU5hbWVdLnZlcnNpb247XG59XG5cbi8qKlxuICogVXNlIE5QTSBwcmVpbnN0YWxsZWQgb24gdGhlIG1hY2hpbmUgdG8gbG9vayB1cCBhIGxpc3Qgb2YgVHlwZVNjcmlwdCB2ZXJzaW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNjcmlwdFZlcnNpb25zU3luYygpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHsgc3Rkb3V0IH0gPSBzcGF3blN5bmMoJ25wbScsIFsnLS1zaWxlbnQnLCAndmlldycsIGB0eXBlc2NyaXB0QD49JHtNSU5JTVVNX1ZFUlNJT059YCwgJ3ZlcnNpb24nLCAnLS1qc29uJ10sIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG5cbiAgY29uc3QgdmVyc2lvbnM6IHN0cmluZ1tdID0gSlNPTi5wYXJzZShzdGRvdXQpO1xuICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KHZlcnNpb25zLm1hcCh2ID0+IHYuc3BsaXQoJy4nKS5zbGljZSgwLCAyKS5qb2luKCcuJykpKSk7XG59XG5cbi8qKlxuICogVXNlIE5QTSBwcmVpbnN0YWxsZWQgb24gdGhlIG1hY2hpbmUgdG8gcXVlcnkgcHVibGlzaCB0aW1lcyBvZiB2ZXJzaW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNjcmlwdFZlcnNpb25zWW91bmdlclRoYW5EYXlzU3luYyhkYXlzOiBudW1iZXIsIHZlcnNpb25zOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgeyBzdGRvdXQgfSA9IHNwYXduU3luYygnbnBtJywgWyctLXNpbGVudCcsICd2aWV3JywgJ3R5cGVzY3JpcHQnLCAndGltZScsICctLWpzb24nXSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgY29uc3QgdmVyc2lvblRzTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0gSlNPTi5wYXJzZShzdGRvdXQpO1xuXG4gIGNvbnN0IGN1dG9mZkRhdGUgPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gKGRheXMgKiAyNCAqIDM2MDAgKiAxMDAwKSk7XG4gIGNvbnN0IGN1dG9mZkRhdGVTID0gY3V0b2ZmRGF0ZS50b0lTT1N0cmluZygpO1xuXG4gIGNvbnN0IHJlY2VudFZlcnNpb25zID0gT2JqZWN0LmVudHJpZXModmVyc2lvblRzTWFwKVxuICAgIC5maWx0ZXIoKFtfLCBkYXRlU10pID0+IGRhdGVTID4gY3V0b2ZmRGF0ZVMpXG4gICAgLm1hcCgoW3ZdKSA9PiB2KTtcblxuICAvLyBJbnB1dCB2ZXJzaW9ucyBhcmUgb2YgdGhlIGZvcm0gMy45LCA1LjIsIGV0Yy5cbiAgLy8gQWN0dWFsIHZlcnNpb25zIGFyZSBvZiB0aGUgZm9ybSBgMy45LjE1YCwgYDUuMy4wLWRldi4yMDUxMTMxMWAuXG4gIC8vIFJldHVybiBvbmx5IDItZGlnaXQgdmVyc2lvbnMgZm9yIHdoaWNoIHRoZXJlIGlzIGEgbm9uLXByZXJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgc2V0IG9mIHJlY2VudFZlcnNpb25zXG4gIC8vIFNvIGEgMi1kaWdpdCB2ZXJzaW9ucyB0aGF0IGlzIGZvbGxvd2VkIGJ5IGAuPGRpZ2l0cz5gIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbiAgcmV0dXJuIHZlcnNpb25zLmZpbHRlcigodHdvVikgPT4ge1xuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgXiR7cmVRdW90ZSh0d29WKX1cXFxcLlxcXFxkKyRgKTtcbiAgICByZXR1cm4gcmVjZW50VmVyc2lvbnMuc29tZShmdWxsViA9PiBmdWxsVi5tYXRjaChyZSkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVRdW90ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcbn1cbiJdfQ==