hjsmin-0.1.5.1: Text/Jasmine.hs
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