module Text.Jasmine ( minify , minifym , minifyBb , minifyFile ) where 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 [Char] ByteString minifym ByteString s = case ByteString -> Either [Char] JSAST myParse ByteString s of Left [Char] msg -> [Char] -> Either [Char] ByteString forall a b. a -> Either a b Left ([Char] -> [Char] forall a. Show a => a -> [Char] show [Char] msg) Right JSAST p -> ByteString -> Either [Char] ByteString forall a b. b -> Either a b Right (ByteString -> Either [Char] ByteString) -> ByteString -> Either [Char] 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 [Char] Builder minifyBb ByteString s = case ByteString -> Either [Char] JSAST myParse ByteString s of Left [Char] msg -> [Char] -> Either [Char] Builder forall a b. a -> Either a b Left ([Char] -> [Char] forall a. Show a => a -> [Char] show [Char] msg) Right JSAST p -> Builder -> Either [Char] 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 . [Char] -> JSAST readJs ([Char] -> JSAST) -> (ByteString -> [Char]) -> ByteString -> JSAST forall b c a. (b -> c) -> (a -> b) -> a -> c . ByteString -> [Char] lbToStr minifyFile :: FilePath -> IO LBS.ByteString minifyFile :: [Char] -> IO ByteString minifyFile [Char] filename = ByteString -> ByteString minify (ByteString -> ByteString) -> IO ByteString -> IO ByteString forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [Char] -> IO ByteString LBS.readFile [Char] filename myParse :: LBS.ByteString -> Either String JSAST myParse :: ByteString -> Either [Char] JSAST myParse ByteString input = [Char] -> [Char] -> Either [Char] JSAST parse (ByteString -> [Char] lbToStr ByteString input) [Char] "src" lbToStr :: LBS.ByteString -> String lbToStr :: ByteString -> [Char] lbToStr = Text -> [Char] unpack (Text -> [Char]) -> (ByteString -> Text) -> ByteString -> [Char] forall b c a. (b -> c) -> (a -> b) -> a -> c . OnDecodeError -> ByteString -> Text decodeUtf8With OnDecodeError lenientDecode