Ctrl K
ComunidadGuías…

scripts/compressSvg-cli.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/usr/bin/env bun

/**
 * CLI entry point for scripts/compressSvg.ts. This file is never imported by anything (the action and tests import
 * the library directly), so it can unconditionally parse argv and run — no entry guard needed.
 */
import * as fs from 'fs';
import * as path from 'path';

import compressSvg from './compressSvg';

function logHelp() {
    console.log('');
    console.log('Usage:');
    console.log('  Mode 1 - Directory scan:');
    console.log('    npm run compress-svg -- --dir assets/images');
    console.log('');
    console.log('  Mode 2 - Specific files:');
    console.log('    npm run compress-svg -- --files file1.svg file2.svg ...');
    console.log('');
    console.log('Options:');
    console.log('  --help, -h    Show this help message');
    console.log('  --dir         Compress all SVG files in specified directory');
    console.log('  --files       Compress specified SVG files');
    console.log('');
    console.log('To ignore compression for a file, add "-ignore-compression" to the file name: file-ignore-compression.svg');
    console.log('');
}

const args = process.argv.slice(2);
const firstArg = args.at(0);

if (firstArg === '--help' || firstArg === '-h') {
    logHelp();
    process.exit(0);
}

if (firstArg === '--dir' || firstArg === '-d') {
    const targetDir = args.at(1);

    if (!targetDir) {
        console.error('❌ No directory specified after --dir flag');
        console.log('');
        logHelp();
        process.exit(1);
    }

    if (!fs.existsSync(targetDir)) {
        console.error(`❌ Directory '${targetDir}' does not exist.`);
        process.exit(1);
    }

    const stat = fs.statSync(targetDir);
    if (!stat.isDirectory()) {
        console.error(`❌ '${targetDir}' is not a directory.`);
        console.log('Use --files flag to compress specific files');
        process.exit(1);
    }

    console.log(`Target directory: ${path.resolve(targetDir)}`);

    compressSvg('directory', {targetDir})
        .then(() => {
            console.log('\n✅ SVG compression completed successfully');
            process.exit(0);
        })
        .catch((error: unknown) => {
            const errorMessage = error instanceof Error ? error.message : String(error);
            console.error(`Fatal error: ${errorMessage}`);
            process.exit(1);
        });
} else if (firstArg === '--files' || firstArg === '-f') {
    if (args.length < 2) {
        console.error('❌ No files specified after --files flag');
        console.log('');
        logHelp();
        process.exit(1);
    }

    const filePaths = args.slice(1);
    console.log(`Specific files (${filePaths.length} files provided)`);

    compressSvg('files', {filePaths})
        .then(() => {
            console.log('\n✅ SVG compression completed successfully');
            process.exit(0);
        })
        .catch((error: unknown) => {
            const errorMessage = error instanceof Error ? error.message : String(error);
            console.error(`Fatal error: ${errorMessage}`);
            process.exit(1);
        });
}
// No arguments provided - show help
else {
    logHelp();
    process.exit(0);
}