{"version":3,"sources":["../src/index.ts","../src/compress.ts","../src/spinner.ts"],"sourcesContent":["/*!\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"],"mappings":"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","names":["chalk","chalk"]}