packages feed

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 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