tinify-client
Version:
A CLI to compress your images not only intelligently but also to the EXTREME!
93 lines (92 loc) • 3.55 kB
JavaScript
;
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;
}