module Text.Jasmine ( minify , minifym , minifyBb , minifyFile ) where import Control.Applicative ((<$>)) import Data.ByteString.Builder (Builder) import qualified Data.ByteString.Builder as Builder import qualified Data.ByteString.Lazy.Char8 as LBS import Data.Text.Lazy (unpack) import Data.Text.Lazy.Encoding (decodeUtf8With) import Data.Text.Encoding.Error (lenientDecode) import Language.JavaScript.Parser (readJs, parse, JSAST) import Language.JavaScript.Pretty.Printer (renderJS) import Language.JavaScript.Process.Minify (minifyJS) minifym :: LBS.ByteString -> Either String LBS.ByteString minifym :: ByteString -> Either String ByteString minifym s :: ByteString s = case ByteString -> Either String JSAST myParse ByteString s of Left msg :: String msg -> String -> Either String ByteString forall a b. a -> Either a b Left (String -> String forall a. Show a => a -> String show String msg) Right p :: JSAST p -> ByteString -> Either String ByteString forall a b. b -> Either a b Right (ByteString -> Either String ByteString) -> ByteString -> Either String ByteString forall a b. (a -> b) -> a -> b $ Builder -> ByteString Builder.toLazyByteString (Builder -> ByteString) -> Builder -> ByteString forall a b. (a -> b) -> a -> b $ JSAST -> Builder renderJS (JSAST -> Builder) -> JSAST -> Builder forall a b. (a -> b) -> a -> b $ JSAST -> JSAST minifyJS JSAST p minifyBb :: LBS.ByteString -> Either String Builder minifyBb :: ByteString -> Either String Builder minifyBb s :: ByteString s = case ByteString -> Either String JSAST myParse ByteString s of Left msg :: String msg -> String -> Either String Builder forall a b. a -> Either a b Left (String -> String forall a. Show a => a -> String show String msg) Right p :: JSAST p -> Builder -> Either String Builder forall a b. b -> Either a b Right (JSAST -> Builder renderJS (JSAST -> Builder) -> JSAST -> Builder forall a b. (a -> b) -> a -> b $ JSAST -> JSAST minifyJS JSAST p) minify :: LBS.ByteString -> LBS.ByteString minify :: ByteString -> ByteString minify = Builder -> ByteString Builder.toLazyByteString (Builder -> ByteString) -> (ByteString -> Builder) -> ByteString -> ByteString forall b c a. (b -> c) -> (a -> b) -> a -> c . JSAST -> Builder renderJS (JSAST -> Builder) -> (ByteString -> JSAST) -> ByteString -> Builder forall b c a. (b -> c) -> (a -> b) -> a -> c . JSAST -> JSAST minifyJS (JSAST -> JSAST) -> (ByteString -> JSAST) -> ByteString -> JSAST forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> JSAST readJs (String -> JSAST) -> (ByteString -> String) -> ByteString -> JSAST forall b c a. (b -> c) -> (a -> b) -> a -> c . ByteString -> String lbToStr minifyFile :: FilePath -> IO LBS.ByteString minifyFile :: String -> IO ByteString minifyFile filename :: String filename = ByteString -> ByteString minify (ByteString -> ByteString) -> IO ByteString -> IO ByteString forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> String -> IO ByteString LBS.readFile String filename myParse :: LBS.ByteString -> Either String JSAST myParse :: ByteString -> Either String JSAST myParse input :: ByteString input = String -> String -> Either String JSAST parse (ByteString -> String lbToStr ByteString input) "src" lbToStr :: LBS.ByteString -> String lbToStr :: ByteString -> String lbToStr = Text -> String unpack (Text -> String) -> (ByteString -> Text) -> ByteString -> String forall b c a. (b -> c) -> (a -> b) -> a -> c . OnDecodeError -> ByteString -> Text decodeUtf8With OnDecodeError lenientDecode