UNPKG

ko

Version:
71 lines (70 loc) 2.76 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const promises_1 = __importDefault(require("fs/promises")); const path_1 = __importDefault(require("path")); class PurgeCacheWebpackPlugin { constructor() { this.WEBPACK_PLUGIN_NAME = 'PurgeCacheWebpackPlugin'; } purgeCacheFiles(directory, maxAge, callback) { promises_1.default.readdir(directory) .then(files => { const expiredPacks = []; if (files.length === 0) return callback(); for (const file of files) { const pack = new Promise((resolve, reject) => { const filePath = path_1.default.join(directory, file); promises_1.default.stat(filePath) .then(stats => { if (stats.mtime.getTime() + maxAge < Date.now()) { promises_1.default.unlink(filePath) .then(() => { resolve(true); }) .catch(err => reject(err)); } else { resolve(true); } }) .catch(err => reject(err)); }); expiredPacks.push(pack); } Promise.allSettled(expiredPacks).then(results => { const errors = results .filter(result => result.status === 'rejected') .map((result) => result.reason); callback(errors); }); }) .catch(err => { callback([err]); }); } apply(compiler) { compiler.hooks.done.tapAsync({ name: this.WEBPACK_PLUGIN_NAME }, (_, callback) => { const { type, maxAge, cacheLocation } = compiler.options.cache; if (type === 'filesystem') { const logger = compiler.getInfrastructureLogger(this.WEBPACK_PLUGIN_NAME); this.purgeCacheFiles(cacheLocation, maxAge, errors => { if (errors?.length) { errors.forEach(err => logger.warn(err.message)); } else { logger.info(`purge expired cache files completed`); } callback(); }); } else { callback(); } }); } } exports.default = PurgeCacheWebpackPlugin;