module Development.Shake.MinifyCSS (
minifyCSSRules
, minifyCSSRulesWith
, 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
-> FilePath
-> Rules ()
minifyCSSRules =
minifyCSSRulesWith defaultConfig
minifyCSSRulesWith :: Config
-> FilePath
-> FilePath
-> Rules ()
minifyCSSRulesWith cfg src tgt =
tgt %> \out ->
minifyCSSActionWith cfg src out
minifyCSSAction :: FilePath
-> FilePath
-> Action ()
minifyCSSAction =
minifyCSSActionWith defaultConfig
minifyCSSActionWith :: Config
-> FilePath
-> FilePath
-> 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