addOption( 'outfile', 'Write minified output to this file (instead of standard out).', false, true, 'o' ); $this->addOption( 'type', 'Override the input type (one of "js" or "css"). Defaults to file extension. ' . 'Required if reading from standard input.', false, true, 'o' ); $this->addArg( 'file', 'Input file. Use - to read from standard input.' ); $this->addDescription( "Minify one or more JavaScript or CSS files.\n" . "If multiple input files are given, they will be concatenated." ); } public function execute() { $outputFile = $this->getOption( 'outfile', false ); if ( $outputFile === false ) { // Only output the minified result (or errors) // Avoid output() because this should not honour --quiet foreach ( $this->mArgs as $arg ) { print $this->minify( $arg ) . "\n"; } } else { $result = ''; foreach ( $this->mArgs as $arg ) { $this->output( "Minifying {$arg} ...\n" ); $result .= $this->minify( $arg ); } $this->output( "Writing to {$outputFile} ...\n" ); file_put_contents( $outputFile, $result ); $this->output( "Done!\n" ); } } public function getExtension( $fileName ) { $dotPos = strrpos( $fileName, '.' ); if ( $dotPos === false ) { $this->fatalError( "Unknown file type ($fileName). Use --type." ); } return substr( $fileName, $dotPos + 1 ); } private function readFile( $fileName ) { if ( $fileName === '-' ) { $inText = $this->getStdin( self::STDIN_ALL ); } else { AtEase::suppressWarnings(); $inText = file_get_contents( $fileName ); AtEase::restoreWarnings(); if ( $inText === false ) { $this->fatalError( "Unable to open file $fileName for reading." ); } } return $inText; } public function minify( $inPath ) { $extension = $this->getOption( 'type', null ) ?? $this->getExtension( $inPath ); $inText = $this->readFile( $inPath ); switch ( $extension ) { case 'js': $outText = JavaScriptMinifier::minify( $inText ); break; case 'css': $outText = CSSMin::minify( $inText ); break; default: $this->fatalError( "Unsupported file type \"$extension\"." ); } return $outText; } } $maintClass = MinifyScript::class; require_once RUN_MAINTENANCE_IF_MAIN;