module Main where import Options.Applicative import Text.Jasmine import qualified Data.ByteString.Lazy as B import qualified Data.ByteString.Lazy.Char8 as C8 data Options = Options { inputFile :: String , outputFile :: Maybe String } main :: IO () main = execParser opts >>= minify' where opts = info (helper <*> options) ( fullDesc <> progDesc "Minify JavaScript files." <> header "hjsmin - a simple command-line interface to the 'hjsmin' library" ) options :: Parser Options options = Options <$> argument str (metavar "INPUT_FILE" <> help "The unminified, original JavaScript file") <*> optional ( strOption (long "output-file" <> short 'o' <> metavar "OUTPUT_FILE" <> help "The minified output file. Default: stdout") ) minify' :: Options -> IO () minify' o = do minified <- minifyFile (inputFile o) case outputFile o of Nothing -> C8.putStrLn minified Just f -> B.writeFile f minified