UNPKG

@node-minify/cli

Version:
228 lines (221 loc) 6.05 kB
#!/usr/bin/env node // src/bin/cli.ts import { Command } from "commander"; import updateNotifier from "update-notifier"; // src/index.ts import chalk2 from "chalk"; // src/compress.ts import minify from "@node-minify/core"; import { utils } from "@node-minify/utils"; var compress = (options2) => { return new Promise((resolve, reject) => { minify(options2).then(() => { if (options2?.output?.includes("$1")) { return resolve({ compressorLabel: options2.compressorLabel ?? "", compressor: options2.compressor, size: "0", sizeGzip: "0" }); } if (!options2.output) { return resolve({ compressorLabel: options2.compressorLabel ?? "", compressor: options2.compressor, size: "0", sizeGzip: "0" }); } utils.getFilesizeGzippedInBytes(options2.output).then((sizeGzip) => { resolve({ compressorLabel: options2.compressorLabel ?? "", compressor: options2.compressor, size: options2.output ? utils.getFilesizeInBytes(options2.output) : "0", sizeGzip }); }).catch(reject); }).catch(reject); }); }; // src/spinner.ts import chalk from "chalk"; import ora from "ora"; var spinner = ora(); var start = (options2) => { spinner.text = `Compressing file(s) with ${chalk.green( options2.compressorLabel )}...`; spinner.start(); }; var stop = (result) => { spinner.text = `File(s) compressed successfully with ${chalk.green( result.compressorLabel )} (${chalk.green(result.size)} minified, ${chalk.green( result.sizeGzip )} gzipped)`; spinner.succeed(); }; var error = (options2) => { spinner.text = `Error - file(s) not compressed with ${chalk.red( options2.compressorLabel )}`; spinner.fail(); }; // src/index.ts var silence = false; var runOne = async (cli) => { const compressor = typeof cli.compressor === "string" ? await import(`@node-minify/${cli.compressor}`) : cli.compressor; const compressorName = typeof cli.compressor === "string" ? cli.compressor : cli.compressor ? cli.compressor.name : "unknownCompressor"; const options2 = { compressorLabel: compressorName, compressor: compressor.default, input: typeof cli.input === "string" ? cli.input.split(",") : "", output: cli.output }; if (cli.option) { options2.options = JSON.parse(cli.option); } if (!silence) { start(options2); } return compress(options2).then((result) => { if (!silence) { stop(result); } return result; }).catch((err) => { if (!silence) { error(options2); } throw err; }); }; var run = (cli) => { silence = !!cli.silence; if (!silence) { console.log(""); console.log(chalk2.bgBlue.black(" INFO "), "Starting compression..."); console.log(""); } return new Promise((resolve, reject) => { runOne(cli).then(() => { if (!silence) { console.log(""); console.log( chalk2.bgGreen.black(" DONE "), chalk2.green("Done!") ); console.log(""); } }).then(resolve).catch(reject); }); }; // package.json var package_default = { name: "@node-minify/cli", version: "9.0.2", description: "CLI - command line interface for @node-minify", keywords: [ "compressor", "minify", "minifier" ], author: "Rodolphe Stoclin <srodolphe@gmail.com>", homepage: "https://github.com/srod/node-minify/tree/master/packages/cli#readme", license: "MIT", bin: { "node-minify": "dist/cli.mjs" }, engines: { node: ">=18.0.0" }, directories: { lib: "dist", test: "__tests__" }, main: "./dist/index.js", module: "./dist/index.mjs", types: "./dist/index.d.ts", exports: { ".": { types: "./dist/index.d.ts", import: "./dist/index.mjs", require: "./dist/index.js" } }, files: [ "bin", "dist/**/*" ], publishConfig: { access: "public" }, repository: { type: "git", url: "git+https://github.com/srod/node-minify.git" }, bugs: { url: "https://github.com/srod/node-minify/issues" }, scripts: { clean: "pnpm dlx rimraf dist", build: "pnpm clean && tsup src/index.ts --format cjs,esm --dts --sourcemap && tsup src/bin/cli.ts --format esm --dts --sourcemap", lint: "biome lint .", prepublishOnly: "pnpm build", test: "vitest run", "test:ci": "vitest run --coverage", "test:watch": "vitest" }, dependencies: { "@node-minify/core": "workspace:*", "@node-minify/utils": "workspace:*", chalk: "5.3.0", commander: "12.1.0", ora: "8.1.1", "update-notifier": "7.3.1" }, devDependencies: { "@node-minify/types": "workspace:*", "@types/chalk": "^2.2.0", "@types/ora": "^3.2.0" } }; // src/bin/cli.ts var program = new Command(); updateNotifier({ pkg: package_default }).notify(); program.storeOptionsAsProperties().version(package_default.version, "-v, --version").option( "-c, --compressor [compressor]", "use the specified compressor [uglify-js]", "uglify-js" ).option("-i, --input [file]", "input file path").option("-o, --output [file]", "output file path").option("-s, --silence", "no output will be printed").option( "-O, --option [option]", "option for the compressor as JSON object", "" ); program.on("--help", () => { console.log(" List of compressors:"); console.log(""); console.log(" - babel-minify"); console.log(" - gcc"); console.log(" - html-minifier"); console.log(" - terser"); console.log(" - uglify-js"); console.log(" - uglify-es"); console.log(" - yui"); console.log(""); }); program.parse(process.argv); var options = program.opts(); if (!options.compressor || !options.input || !options.output) { program.help(); } run(options).then(() => process.exit()).catch((err) => { console.error(err); process.exit(1); }); /*! * node-minify * Copyright(c) 2011-2024 Rodolphe Stoclin * MIT Licensed */ //# sourceMappingURL=cli.mjs.map