UNPKG

cypress

Version:

Cypress is a next generation front end testing tool built for the modern web

145 lines (144 loc) 5.83 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const state_1 = __importDefault(require("./state")); const logger_1 = __importDefault(require("../logger")); const fs_extra_1 = __importDefault(require("fs-extra")); const util_1 = __importDefault(require("../util")); const path_1 = require("path"); const cli_table3_1 = __importDefault(require("cli-table3")); const dayjs_1 = __importDefault(require("dayjs")); const relativeTime_1 = __importDefault(require("dayjs/plugin/relativeTime")); const chalk_1 = __importDefault(require("chalk")); const lodash_1 = __importDefault(require("lodash")); const get_folder_size_1 = __importDefault(require("./get-folder-size")); dayjs_1.default.extend(relativeTime_1.default); // output colors for the table const colors = { titles: chalk_1.default.white, dates: chalk_1.default.cyan, values: chalk_1.default.green, size: chalk_1.default.gray, }; const logCachePath = () => { logger_1.default.always(state_1.default.getCacheDir()); return undefined; }; const clear = () => { return fs_extra_1.default.remove(state_1.default.getCacheDir()); }; const prune = () => __awaiter(void 0, void 0, void 0, function* () { const cacheDir = state_1.default.getCacheDir(); const checkedInBinaryVersion = util_1.default.pkgVersion(); let deletedBinary = false; try { const versions = yield fs_extra_1.default.readdir(cacheDir); for (const version of versions) { if (version !== checkedInBinaryVersion) { deletedBinary = true; const versionDir = (0, path_1.join)(cacheDir, version); yield fs_extra_1.default.remove(versionDir); } } if (deletedBinary) { logger_1.default.always(`Deleted all binary caches except for the ${checkedInBinaryVersion} binary cache.`); } else { logger_1.default.always(`No binary caches found to prune.`); } } catch (e) { if (e.code === 'ENOENT') { logger_1.default.always(`No Cypress cache was found at ${cacheDir}. Nothing to prune.`); return; } throw e; } }); const fileSizeInMB = (size) => { return `${(size / 1024 / 1024).toFixed(1)}MB`; }; /** * Collects all cached versions, finds when each was used * and prints a table with results to the terminal */ const list = (...args_1) => __awaiter(void 0, [...args_1], void 0, function* (showSize = false) { const binaries = yield getCachedVersions(showSize); const head = [colors.titles('version'), colors.titles('last used')]; if (showSize) { head.push(colors.titles('size')); } const table = new cli_table3_1.default({ head, }); binaries.forEach((binary) => { const versionString = colors.values(binary.version); const lastUsed = binary.accessed ? colors.dates(binary.accessed) : 'unknown'; const row = [versionString, lastUsed]; if (showSize) { const size = colors.size(fileSizeInMB(binary.size)); row.push(size); } return table.push(row); }); logger_1.default.always(table.toString()); }); const getCachedVersions = (showSize) => __awaiter(void 0, void 0, void 0, function* () { const cacheDir = state_1.default.getCacheDir(); const versions = yield fs_extra_1.default.readdir(cacheDir); const filteredVersions = versions.filter(util_1.default.isSemver).map((version) => { return { version, folderPath: (0, path_1.join)(cacheDir, version), }; }); const binaries = []; for (const binary of filteredVersions) { const binaryDir = state_1.default.getBinaryDir(binary.version); const executable = state_1.default.getPathToExecutable(binaryDir); try { const stat = yield fs_extra_1.default.stat(executable); const lastAccessedTime = lodash_1.default.get(stat, 'atime'); if (lastAccessedTime) { const accessed = (0, dayjs_1.default)(lastAccessedTime).fromNow(); // @ts-expect-error - accessed is not defined in the type binary.accessed = accessed; } // if no lastAccessedTime // the test runner has never been opened // or could be a test simulating missing timestamp } catch (e) { // could not find the binary or gets its stats // no-op } if (showSize) { const binaryDir = state_1.default.getBinaryDir(binary.version); const size = yield (0, get_folder_size_1.default)(binaryDir); binaries.push(Object.assign(Object.assign({}, binary), { size })); } else { binaries.push(binary); } } return binaries; }); const cacheModule = { path: logCachePath, clear, prune, list, getCachedVersions, }; exports.default = cacheModule;