@node-minify/cli
Version:
CLI - command line interface for @node-minify
228 lines (221 loc) • 6.05 kB
JavaScript
// 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