UNPKG

tinify-client

Version:

A CLI to compress your images not only intelligently but also to the EXTREME!

93 lines (92 loc) 3.55 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.compressBatchWrapper = void 0; const fast_glob_1 = __importDefault(require("fast-glob")); const ora_1 = __importDefault(require("ora")); const i18n_1 = require("../i18n"); const colors_1 = require("../constants/colors"); const decorated_console_1 = require("../utils/decorated-console"); const lite_lodash_1 = require("../utils/lite-lodash"); const compress_1 = require("./compress"); const compressBatch_1 = require("./compressBatch"); const dictionary = i18n_1.i18n(); /** * * @param directory image directory or images * @param params */ async function compressBatchWrapper(directory, params) { const { verbose, 'dry-run': dryRun } = params; let milliseconds = 0; const spinner = ora_1.default(`${dictionary.compressing}... ${lite_lodash_1.timeToReadable(milliseconds)} 🚀`); const GAP = 100; const timer = setInterval(() => { milliseconds += GAP; spinner.text = `${dictionary.compressing}... ${lite_lodash_1.timeToReadable(milliseconds)} 🚀`; }, 1 * GAP); verbose && typeof directory === 'string' && decorated_console_1.decorated.time(colors_1.GREEN + ` ${dictionary.genTotalTimeCostsTips(directory)}` + colors_1.EOS); let errorMsg = ''; try { const images = await retrieveImages(directory); // console.log(`images from glob: ${pattern}`, images); if (!images.length) { errorMsg = `Found 0 images in ${directory}. Aborted`; return; } else { if (Array.isArray(directory)) { decorated_console_1.decorated.info('Found', images.length, `images${colors_1.GREEN}`, directory.join(', '), colors_1.EOS); } else { decorated_console_1.decorated.info('Found', images.length, `images in${colors_1.GREEN}`, directory, colors_1.EOS); } console.log(); } spinner.start(); const results = await compressBatch_1.compressBatch(images, params); const beautifulResults = results.map(compress_1.summarize); setTimeout(() => { console.log(colors_1.YELLOW); console.table(beautifulResults); console.log(); }); } catch (error) { decorated_console_1.decorated.error(error); process.exit(-1); } finally { clearInterval(timer); if (errorMsg) { spinner.clear().fail(errorMsg); } else { spinner.clear().succeed(dictionary.compressed + ` ${lite_lodash_1.timeToReadable(milliseconds)} ✨`); } if (verbose && typeof directory === 'string') { // console.log('tmpFiles:', tmpFiles); decorated_console_1.decorated.timeEnd(colors_1.GREEN + ` ${dictionary.genTotalTimeCostsTips(directory)}` + colors_1.EOS); console.log(); } } return; } exports.compressBatchWrapper = compressBatchWrapper; async function retrieveImages(directory) { if (Array.isArray(directory)) { return directory; } const separator = directory.endsWith('/') ? '' : '/'; const pattern = `${directory}${separator}**/*.{png,jpg}`; const images = await fast_glob_1.default(pattern, { ignore: [ '**/node_modules', ], onlyFiles: true, }); return images; }