UNPKG

ts-minifer

Version:

Advanced TypeScript code minification and compression tool

114 lines 4.91 kB
#!/usr/bin/env node "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); const commander = __importStar(require("commander")); const fs = __importStar(require("fs")); const path = __importStar(require("path")); const compressor_1 = require("./compressor"); const types_1 = require("./types"); const logger_1 = require("./logger"); const program = new commander.Command(); program .name('ts-minifier') .description('Advanced TypeScript code compression tool') .version('1.0.0') .option('-i, --input <paths...>', 'Input TypeScript files or directories') .option('-o, --output <dir>', 'Output directory', 'dist') .option('-l, --level <level>', 'Compression level (none, minimal, aggressive)', 'minimal') .option('-f, --format <format>', 'Output format (single, multiple)', 'single') .option('-m, --source-maps', 'Generate source maps', false) .option('-v, --verbose', 'Enable verbose logging', false) .option('-c, --config <path>', 'Path to configuration file') .parse(process.argv); async function main() { const opts = program.opts(); const logger = new logger_1.Logger(opts.verbose); // Load configuration from file if provided let config = {}; if (opts.config) { try { const configPath = path.resolve(process.cwd(), opts.config); config = JSON.parse(fs.readFileSync(configPath, 'utf-8')); logger.info(`Loaded configuration from ${configPath}`); } catch (error) { logger.error(`Failed to load config file: ${error}`); process.exit(1); } } // Merge CLI options with config file const compressOptions = { level: opts.level in types_1.CompressionLevel ? types_1.CompressionLevel[opts.level] : types_1.CompressionLevel.MINIMAL, outputFormat: opts.format === 'multiple' ? 'multiple' : 'single', generateSourceMaps: opts.sourceMaps || config.generateSourceMaps || false, excludePatterns: config.excludePatterns, customNamePatterns: config.customNamePatterns }; // Validate input paths const inputPaths = opts.input || config.input || []; if (inputPaths.length === 0) { logger.error('No input files or directories specified'); process.exit(1); } // Resolve input paths to absolute paths const resolvedInputPaths = inputPaths.map((p) => path.resolve(process.cwd(), p)); // Ensure output directory exists const outputDir = path.resolve(process.cwd(), opts.output); fs.mkdirSync(outputDir, { recursive: true }); // Perform compression const compressor = new compressor_1.TypeScriptCompressor(opts.verbose); try { const result = compressor.compressFiles(resolvedInputPaths, compressOptions); logger.info('Compression completed successfully'); logger.info(`Original Size: ${result.stats.originalSize} bytes`); logger.info(`Compressed Size: ${result.stats.compressedSize} bytes`); logger.info(`Compression Ratio: ${(result.stats.compressionRatio * 100).toFixed(2)}%`); logger.info('Output Files:'); result.outputFiles.forEach(file => logger.info(` - ${file}`)); if (result.sourceMapFiles) { logger.info('Source Map Files:'); result.sourceMapFiles.forEach(file => logger.info(` - ${file}`)); } } catch (error) { logger.error(`Compression failed: ${error}`); process.exit(1); } } main(); //# sourceMappingURL=cli.js.map