{"version":3,"sources":["../src/bin/cli.ts","../src/index.ts","../src/compress.ts","../src/spinner.ts","../package.json"],"sourcesContent":["#!/usr/bin/env node\n\n/*!\n * node-minify\n * Copyright(c) 2011-2024 Rodolphe Stoclin\n * MIT Licensed\n */\n\nimport { Command } from \"commander\";\nimport updateNotifier from \"update-notifier\";\nconst program = new Command();\nimport type { Settings } from \"@node-minify/types\";\nimport { run } from \"../\";\nimport packageJson from \"../../package.json\";\n\nupdateNotifier({ pkg: packageJson }).notify();\n\nprogram\n    .storeOptionsAsProperties()\n    .version(packageJson.version, \"-v, --version\")\n    .option(\n        \"-c, --compressor [compressor]\",\n        \"use the specified compressor [uglify-js]\",\n        \"uglify-js\"\n    )\n    .option(\"-i, --input [file]\", \"input file path\")\n    .option(\"-o, --output [file]\", \"output file path\")\n    .option(\"-s, --silence\", \"no output will be printed\")\n    .option(\n        \"-O, --option [option]\",\n        \"option for the compressor as JSON object\",\n        \"\"\n    );\n\nprogram.on(\"--help\", () => {\n    console.log(\"  List of compressors:\");\n    console.log(\"\");\n    console.log(\"    - babel-minify\");\n    console.log(\"    - gcc\");\n    console.log(\"    - html-minifier\");\n    console.log(\"    - terser\");\n    console.log(\"    - uglify-js\");\n    console.log(\"    - uglify-es\");\n    console.log(\"    - yui\");\n    console.log(\"\");\n});\n\nprogram.parse(process.argv);\n\nconst options: Settings = program.opts();\n\n/**\n * Show help if missing mandatory.\n */\nif (!options.compressor || !options.input || !options.output) {\n    program.help();\n}\n\nrun(options)\n    .then(() => process.exit())\n    .catch((err) => {\n        console.error(err);\n        process.exit(1);\n    });\n","/*!\n * node-minify\n * Copyright(c) 2011-2024 Rodolphe Stoclin\n * MIT Licensed\n */\n\n/**\n * Module dependencies.\n */\nimport type { Result, Settings } from \"@node-minify/types\";\n// @ts-expect-error moduleResolution:nodenext issue 54523\nimport chalk from \"chalk\";\nimport { compress } from \"./compress\";\nimport { spinnerError, spinnerStart, spinnerStop } from \"./spinner\";\n\n/**\n * Module variables.\n */\nlet silence = false;\n\n/**\n * Run one compressor.\n * @param cli Settings\n */\nconst runOne = async (cli: Settings) => {\n    const compressor =\n        typeof cli.compressor === \"string\"\n            ? await import(`@node-minify/${cli.compressor}`)\n            : cli.compressor;\n\n    const compressorName =\n        typeof cli.compressor === \"string\"\n            ? cli.compressor\n            : cli.compressor\n              ? cli.compressor.name\n              : \"unknownCompressor\";\n\n    const options: Settings = {\n        compressorLabel: compressorName,\n        compressor: compressor.default,\n        input: typeof cli.input === \"string\" ? cli.input.split(\",\") : \"\",\n        output: cli.output,\n    };\n\n    if (cli.option) {\n        options.options = JSON.parse(cli.option);\n    }\n\n    if (!silence) {\n        spinnerStart(options);\n    }\n\n    return compress(options)\n        .then((result: Result) => {\n            if (!silence) {\n                spinnerStop(result);\n            }\n            return result;\n        })\n        .catch((err: Error) => {\n            if (!silence) {\n                spinnerError(options);\n            }\n            throw err;\n        });\n};\n\n/**\n * Run cli.\n * @param cli Settings\n */\nconst run = (cli: Settings) => {\n    silence = !!cli.silence;\n\n    if (!silence) {\n        console.log(\"\");\n        console.log(chalk.bgBlue.black(\" INFO \"), \"Starting compression...\");\n        console.log(\"\");\n    }\n\n    return new Promise((resolve, reject) => {\n        runOne(cli)\n            .then(() => {\n                if (!silence) {\n                    console.log(\"\");\n                    console.log(\n                        chalk.bgGreen.black(\" DONE \"),\n                        chalk.green(\"Done!\")\n                    );\n                    console.log(\"\");\n                }\n            })\n            .then(resolve)\n            .catch(reject);\n    });\n};\n\n/**\n * Expose `run()`.\n */\nexport { run };\n","/*!\n * node-minify\n * Copyright(c) 2011-2024 Rodolphe Stoclin\n * MIT Licensed\n */\n\n/**\n * Module dependencies.\n */\nimport minify from \"@node-minify/core\";\nimport type { Result, Settings } from \"@node-minify/types\";\nimport { utils } from \"@node-minify/utils\";\n\n/**\n * Run compression.\n * @param options Settings\n */\nconst compress = (options: Settings): Promise<Result> => {\n    return new Promise<Result>((resolve, reject) => {\n        minify(options)\n            .then(() => {\n                if (options?.output?.includes(\"$1\")) {\n                    // npx node-minify --compressor uglify-js --input 'source/**/*.js' --output 'source/$1.min.js' --option '{\"warnings\": true, \"mangle\": false}'\n                    return resolve({\n                        compressorLabel: options.compressorLabel ?? \"\",\n                        compressor: options.compressor,\n                        size: \"0\",\n                        sizeGzip: \"0\",\n                    });\n                }\n                if (!options.output) {\n                    return resolve({\n                        compressorLabel: options.compressorLabel ?? \"\",\n                        compressor: options.compressor,\n                        size: \"0\",\n                        sizeGzip: \"0\",\n                    });\n                }\n                utils\n                    .getFilesizeGzippedInBytes(options.output)\n                    .then((sizeGzip: string) => {\n                        resolve({\n                            compressorLabel: options.compressorLabel ?? \"\",\n                            compressor: options.compressor,\n                            size: options.output\n                                ? utils.getFilesizeInBytes(options.output)\n                                : \"0\",\n                            sizeGzip: sizeGzip,\n                        });\n                    })\n                    .catch(reject);\n            })\n            .catch(reject);\n    });\n};\n\n/**\n * Expose `compress()`.\n */\nexport { compress };\n","/*!\n * node-minify\n * Copyright(c) 2011-2024 Rodolphe Stoclin\n * MIT Licensed\n */\n\n/**\n * Module dependencies.\n */\nimport type { Result, Settings } from \"@node-minify/types\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\n\nconst spinner = ora();\n\n/**\n * Start spinner.\n * @param options Settings\n */\nconst start = (options: Settings) => {\n    spinner.text = `Compressing file(s) with ${chalk.green(\n        options.compressorLabel\n    )}...`;\n    spinner.start();\n};\n\n/**\n * Stop spinner.\n * @param result\n */\nconst stop = (result: Result) => {\n    spinner.text = `File(s) compressed successfully with ${chalk.green(\n        result.compressorLabel\n    )} (${chalk.green(result.size)} minified, ${chalk.green(\n        result.sizeGzip\n    )} gzipped)`;\n    spinner.succeed();\n};\n\n/**\n * Mark spinner as failed.\n * @param options Settings\n */\nconst error = (options: Settings) => {\n    spinner.text = `Error - file(s) not compressed with ${chalk.red(\n        options.compressorLabel\n    )}`;\n    spinner.fail();\n};\n\n/**\n * Expose `start(), stop() and error()`.\n */\nexport { start as spinnerStart, stop as spinnerStop, error as spinnerError };\n","{\n  \"name\": \"@node-minify/cli\",\n  \"version\": \"9.0.2\",\n  \"description\": \"CLI - command line interface for @node-minify\",\n  \"keywords\": [\n    \"compressor\",\n    \"minify\",\n    \"minifier\"\n  ],\n  \"author\": \"Rodolphe Stoclin <srodolphe@gmail.com>\",\n  \"homepage\": \"https://github.com/srod/node-minify/tree/master/packages/cli#readme\",\n  \"license\": \"MIT\",\n  \"bin\": {\n    \"node-minify\": \"dist/cli.mjs\"\n  },\n  \"engines\": {\n    \"node\": \">=18.0.0\"\n  },\n  \"directories\": {\n    \"lib\": \"dist\",\n    \"test\": \"__tests__\"\n  },\n  \"main\": \"./dist/index.js\",\n  \"module\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.mjs\",\n      \"require\": \"./dist/index.js\"\n    }\n  },\n  \"files\": [\n    \"bin\",\n    \"dist/**/*\"\n  ],\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/srod/node-minify.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/srod/node-minify/issues\"\n  },\n  \"scripts\": {\n    \"clean\": \"pnpm dlx rimraf dist\",\n    \"build\": \"pnpm clean && tsup src/index.ts --format cjs,esm --dts --sourcemap && tsup src/bin/cli.ts --format esm --dts --sourcemap\",\n    \"lint\": \"biome lint .\",\n    \"prepublishOnly\": \"pnpm build\",\n    \"test\": \"vitest run\",\n    \"test:ci\": \"vitest run --coverage\",\n    \"test:watch\": \"vitest\"\n  },\n  \"dependencies\": {\n    \"@node-minify/core\": \"workspace:*\",\n    \"@node-minify/utils\": \"workspace:*\",\n    \"chalk\": \"5.3.0\",\n    \"commander\": \"12.1.0\",\n    \"ora\": \"8.1.1\",\n    \"update-notifier\": \"7.3.1\"\n  },\n  \"devDependencies\": {\n    \"@node-minify/types\": \"workspace:*\",\n    \"@types/chalk\": \"^2.2.0\",\n    \"@types/ora\": \"^3.2.0\"\n  }\n}\n"],"mappings":"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","names":["chalk","options","options","options","chalk"]}