module Development.Shake.MinifyCSS ( -- * Rules minifyCSSRules , minifyCSSRulesWith -- * Actions , minifyCSSAction , minifyCSSActionWith ) where import qualified Data.Text.IO as TIO import Development.Shake import Hasmin import System.Directory (createDirectoryIfMissing) import System.FilePath (takeDirectory) minifyCSSRules :: FilePath -- ^ Source file -> FilePath -- ^ Destination/target -> Rules () minifyCSSRules = minifyCSSRulesWith defaultConfig minifyCSSRulesWith :: Config -> FilePath -- ^ Source file -> FilePath -- ^ Destination/target -> Rules () minifyCSSRulesWith cfg src tgt = tgt %> \out -> minifyCSSActionWith cfg src out minifyCSSAction :: FilePath -- ^ Source file -> FilePath -- ^ Destination/target -> Action () minifyCSSAction = minifyCSSActionWith defaultConfig minifyCSSActionWith :: Config -> FilePath -- ^ Source file -> FilePath -- ^ Destination/target -> Action () minifyCSSActionWith cfg src tgt = do need [src] let tgtDir = takeDirectory tgt traced ("Create directory (" ++ tgtDir ++ ")") $ createDirectoryIfMissing True tgtDir traced ("Minify CSS (" ++ tgt ++ ")") $ do contents <- TIO.readFile src case minifyCSSWith cfg contents of Right x -> TIO.writeFile tgt x Left y -> error y