1 {-# LANGUAGE OverloadedStrings #-}
    2 module Databrary.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 Databrary.Files
   15 import Databrary.Web
   16 import Databrary.Web.Types
   17 import Databrary.Web.Files
   18 import Databrary.Web.Generate
   19 import Databrary.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