1 {-# LANGUAGE OverloadedStrings #-}
    2 module Web.Uglify
    3   ( appWebJS
    4   , generateUglifyJS
    5   ) where
    6 
    7 import Control.Monad (guard)
    8 import Control.Monad.IO.Class (liftIO)
    9 import Data.ByteString (isPrefixOf)
   10 import Data.List (union)
   11 import qualified System.Posix.FilePath as RF
   12 import System.Process (callProcess)
   13 
   14 import Files
   15 import Web
   16 import Web.Types
   17 import Web.Files
   18 import Web.Generate
   19 import Web.Libs
   20 
   21 appWebJS :: IO [WebFilePath]
   22 appWebJS = do
   23   includes <- webIncludes
   24   pre <- mapM makeWebFilePath pre'
   25   filteredJS <- filter (\f -> not (isPrefixOf "lib/" (webFileRel f)) && f `notElem` pre) <$> findWebFiles ".js"
   26   let webjs = mconcat [includes, tail pre, filteredJS]
   27   coffee <- map (replaceWebExtension ".js") <$> findWebFiles ".coffee"
   28   return $ union webjs coffee
   29   where
   30     pre' = ["debug.js", "app.js", "constants.js", "routes.js", "messages.js", "templates.js"]
   31 
   32 generateUglifyJS :: WebGenerator
   33 generateUglifyJS = \fileToGenInfo@(fileToGen, _) -> do
   34   inputFiles <- liftIO appWebJS
   35   guard (not $ null inputFiles)
   36   inputFilesAbs <- mapM ((liftIO . unRawFilePath) . webFileAbs) inputFiles
   37   fileToGenAbs <- liftIO $ unRawFilePath $ webFileAbs fileToGen
   38   let fileToGenMap = webFileAbs fileToGen RF.<.> ".map"
   39   fileToGenMapAbs <- liftIO $ unRawFilePath fileToGenMap
   40   webRegenerate (do
   41     print "making minified with command..."
   42     print
   43       ("uglifyjs",
   44       ["--output", fileToGenAbs
   45       , "--source-map", fileToGenMapAbs
   46       , "--prefix", "relative"
   47       , "--screw-ie8", "--mangle", "--compress"
   48       , "--define", "DEBUG=false"
   49       , "--wrap", "app"
   50       ]
   51       ++ inputFilesAbs)
   52     callProcess "uglifyjs" $
   53       ["--output", fileToGenAbs
   54       , "--source-map", fileToGenMapAbs
   55       , "--prefix", "relative"
   56       , "--screw-ie8", "--mangle", "--compress"
   57       , "--define", "DEBUG=false"
   58       , "--wrap", "app"
   59       ]
   60       ++ inputFilesAbs)
   61     []
   62     inputFiles
   63     fileToGenInfo