module Text.Jasmine ( minify , minifym , minifyBb , minifyFile ) where import Control.Applicative ((<$>)) import Data.Text.Lazy (unpack) import Data.Text.Lazy.Encoding (decodeUtf8With) import Data.Text.Encoding.Error (lenientDecode) import Language.JavaScript.Parser (readJs, parse, JSNode(..)) import qualified Blaze.ByteString.Builder as BB import qualified Data.ByteString.Lazy as LB import qualified Data.ByteString.Lazy.Char8 as S8 import Text.Jasmine.Pretty minifym :: LB.ByteString -> Either String LB.ByteString minifym s = case myParse s of Left msg -> Left (show msg) Right p -> Right $ BB.toLazyByteString $ renderJS p minifyBb :: LB.ByteString -> Either String BB.Builder minifyBb s = case myParse s of Left msg -> Left (show msg) Right p -> Right (renderJS p) minify :: LB.ByteString -> LB.ByteString minify s = BB.toLazyByteString . renderJS . readJs $ lbToStr s minifyFile :: FilePath -> IO LB.ByteString minifyFile filename = minify <$> LB.readFile filename myParse :: S8.ByteString -> Either String JSNode myParse input = parse (lbToStr input) "src" lbToStr :: S8.ByteString -> String lbToStr = unpack . decodeUtf8With lenientDecode