shakespeare-babel 0.1.0.0 → 0.2.0.0
raw patch · 2 files changed
+45/−16 lines, 2 filesdep +data-defaultdep +directorydep +process
Dependencies added: data-default, directory, process
Files
- shakespeare-babel.cabal +5/−2
- src/Text/Babel.hs +40/−14
shakespeare-babel.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: shakespeare-babel-version: 0.1.0.0+version: 0.2.0.0 synopsis: compile es2015 license: PublicDomain author: ncaq@@ -17,8 +17,11 @@ library exposed-modules: Text.Babel build-depends: base >=4.8 && <4.9- , shakespeare >=2.0 && <2.1 , classy-prelude >=0.12 && <0.13+ , data-default >=0.5 && <0.6+ , directory >=1.2 && <1.3+ , process >=1.4 && <1.5+ , shakespeare >=2.0 && <2.1 , template-haskell >=2.10 && <2.11 hs-source-dirs: src default-language: Haskell2010
src/Text/Babel.hs view
@@ -1,24 +1,32 @@ -- | A Shakespearean module for Babel -module Text.Babel- ( babel- , babelFile- , babelFileReload- , babelSettings- ) where+module Text.Babel where +import Data.Default import Language.Haskell.TH.Quote import Language.Haskell.TH.Syntax+import System.Directory+import System.Process import Text.Julius import Text.Shakespeare +newtype BabelArgs = BabelArgs [String]+ deriving (Eq, Ord, Read, Show)++instance Default BabelArgs where+ def = BabelArgs ["--presets", "es2015", "--source-maps", "inline", "--source-file-name", "babel.es6.js"]+ -- | es2015 compiles down to Javascript babelSettings :: Q ShakespeareSettings-babelSettings = do+babelSettings = babelSettingsWithArgs def++babelSettingsWithArgs :: BabelArgs -> Q ShakespeareSettings+babelSettingsWithArgs (BabelArgs args) = do jsettings <- javascriptSettings+ exe <- qRunIO babelExePath return $ jsettings { varChar = '#' , preConversion = Just PreConvert- { preConvert = ReadProcess "babel" ["--presets", "es2015"]+ { preConvert = ReadProcess exe args , preEscapeIgnoreBalanced = "'\"" , preEscapeIgnoreLine = "//" , wrapInsertion = Just WrapInsertion@@ -30,18 +38,36 @@ , wrapInsertionAddParens = False }}} +babelExePath :: IO FilePath+babelExePath = do+ (_, bin, _) <- readProcessWithExitCode "npm" ["bin"] []+ let npmBabel = takeWhile (/= '\n') bin ++ "/" ++ "babel"+ npmExist <- doesFileExist npmBabel+ return $ if npmExist+ then npmBabel+ else "babel"+ -- | Read inline babel :: QuasiQuoter-babel = QuasiQuoter { quoteExp = \s -> babelSettings >>= \rs -> quoteExp (shakespeare rs) s }+babel = babelWithArgs def +babelWithArgs :: BabelArgs -> QuasiQuoter+babelWithArgs bArgs = QuasiQuoter { quoteExp = \s -> babelSettingsWithArgs bArgs >>= \rs -> quoteExp (shakespeare rs) s }+ -- | Read in a es2015 file babelFile :: FilePath -> Q Exp-babelFile fp = do- rs <- babelSettings+babelFile = babelFileWithArgs def++babelFileWithArgs :: BabelArgs -> FilePath -> Q Exp+babelFileWithArgs bArgs fp = do+ rs <- babelSettingsWithArgs bArgs shakespeareFile rs fp --- | Read in a es2015 file at develop+-- | Read in a es2015 file when develop babelFileReload :: FilePath -> Q Exp-babelFileReload fp = do- rs <- babelSettings+babelFileReload = babelFileReloadWithArgs def++babelFileReloadWithArgs :: BabelArgs -> FilePath -> Q Exp+babelFileReloadWithArgs bArgs fp = do+ rs <- babelSettingsWithArgs bArgs shakespeareFileReload rs fp