From a72c8af19a72186069465c139b72df9c353fd3d1 Mon Sep 17 00:00:00 2001 From: eric thul Date: Thu, 14 May 2015 22:13:59 -0400 Subject: Additional loader options Adds the `psc-make` options `comments` and `no-prefix`. Also, an internal option `src` has been added that is used to specify the source paths of `PureScript` files that will be globbed for compilation. By default the `bower_components` path is globbed, but the loader requires that the source paths be provided for the user's code. Resolves #12 --- src/Loader.purs | 10 ++++---- src/Options.purs | 77 ++++++++++++++++++++++++++++++++++++++------------------ 2 files changed, 57 insertions(+), 30 deletions(-) (limited to 'src') diff --git a/src/Loader.purs b/src/Loader.purs index aae51c0..fedc424 100644 --- a/src/Loader.purs +++ b/src/Loader.purs @@ -26,7 +26,7 @@ import PursLoader.Glob (Glob(), glob) import PursLoader.LoaderRef (LoaderRef(), Loader(), async, cacheable, clearDependencies, addDependency, query, resourcePath) import PursLoader.LoaderUtil (getRemainingRequest, parseQuery) import PursLoader.OS (eol) -import PursLoader.Options (pscMakeOptions, pscMakeDefaultOutput, pscMakeOutputOption) +import PursLoader.Options (loaderSrcOption, pscMakeOptions, pscMakeDefaultOutput, pscMakeOutputOption) import PursLoader.Path (dirname, join, relative, resolve) foreign import cwd "var cwd = process.cwd();" :: String @@ -43,8 +43,8 @@ indexFilename = "index.js" (!!!) = flip (!!) -pursPattern :: String -> String -pursPattern root = join [ "{" ++ joinWith "," [ bowerPattern, root ] ++ "}" +pursPattern :: [String] -> String +pursPattern srcs = join [ "{" ++ joinWith "," ([ bowerPattern ] <> srcs) ++ "}" , "**" , "*.purs" ] @@ -86,10 +86,10 @@ loader' ref source = do liftEff $ cacheable ref let request = getRemainingRequest ref - root = dirname $ relative cwd request parsed = parseQuery $ query ref + srcs = loaderSrcOption parsed opts = pscMakeOptions parsed - pattern = pursPattern root + pattern = pursPattern $ fromMaybe [] srcs key = match moduleRegex source >>= (!!!) 1 files <- glob pattern diff --git a/src/Options.purs b/src/Options.purs index b96cddc..c47bebc 100644 --- a/src/Options.purs +++ b/src/Options.purs @@ -2,6 +2,7 @@ module PursLoader.Options ( pscMakeOptions , pscMakeDefaultOutput , pscMakeOutputOption + , loaderSrcOption ) where import Data.Either (either) @@ -24,6 +25,12 @@ verboseErrorsOpt = "verbose-errors" outputOpt = "output" +commentsOpt = "comments" + +noPrefixOpt = "no-prefix" + +srcOpt = "src" + pscMakeDefaultOutput = "output" newtype Options @@ -32,29 +39,42 @@ newtype Options , noMagicDo :: NullOrUndefined Boolean , noTco :: NullOrUndefined Boolean , verboseErrors :: NullOrUndefined Boolean + , comments :: NullOrUndefined Boolean , output :: NullOrUndefined String + , noPrefix :: NullOrUndefined Boolean + , src :: NullOrUndefined [String] } instance isForeignOptions :: IsForeign Options where - read obj = (\a b c d e f -> - Options { noPrelude: a - , noOpts: b - , noMagicDo: c - , noTco: d - , verboseErrors: e - , output: f - }) <$> readProp noPreludeOpt obj - <*> readProp noOptsOpt obj - <*> readProp noMagicDoOpt obj - <*> readProp noTcoOpt obj - <*> readProp verboseErrorsOpt obj - <*> readProp outputOpt obj - -booleanOpt :: String -> NullOrUndefined Boolean -> [String] -booleanOpt key opt = maybe [] (\a -> if a then ["--" ++ key] else []) (runNullOrUndefined opt) - -stringOpt :: String -> NullOrUndefined String -> [String] -stringOpt key opt = maybe [] (\a -> ["--" ++ key ++ "=" ++ a]) (runNullOrUndefined opt) + read obj = Options <$> ({ noPrelude: _ + , noOpts: _ + , noMagicDo: _ + , noTco: _ + , verboseErrors: _ + , comments: _ + , output: _ + , noPrefix: _ + , src: _ + } <$> readProp noPreludeOpt obj + <*> readProp noOptsOpt obj + <*> readProp noMagicDoOpt obj + <*> readProp noTcoOpt obj + <*> readProp verboseErrorsOpt obj + <*> readProp commentsOpt obj + <*> readProp outputOpt obj + <*> readProp noPrefixOpt obj + <*> readProp srcOpt obj) + +class LoaderOption a where + opt :: String -> NullOrUndefined a -> [String] + +instance booleanLoaderOption :: LoaderOption Boolean where + opt key opt = maybe [] (\a -> if a then ["--" ++ key] else []) + (runNullOrUndefined opt) + +instance stringLoaderOption :: LoaderOption String where + opt key opt = maybe [] (\a -> ["--" ++ key ++ "=" ++ a]) + (runNullOrUndefined opt) pscMakeOutputOption :: Foreign -> Maybe String pscMakeOutputOption query = either (const Nothing) @@ -64,9 +84,16 @@ pscMakeOutputOption query = either (const Nothing) pscMakeOptions :: Foreign -> [String] pscMakeOptions query = either (const []) fold parsed where parsed = read query :: F Options - fold (Options a) = booleanOpt noPreludeOpt a.noPrelude <> - booleanOpt noOptsOpt a.noOpts <> - booleanOpt noMagicDoOpt a.noMagicDo <> - booleanOpt noTcoOpt a.noTco <> - booleanOpt verboseErrorsOpt a.verboseErrors <> - stringOpt outputOpt a.output + fold (Options a) = opt noPreludeOpt a.noPrelude <> + opt noOptsOpt a.noOpts <> + opt noMagicDoOpt a.noMagicDo <> + opt noTcoOpt a.noTco <> + opt verboseErrorsOpt a.verboseErrors <> + opt commentsOpt a.comments <> + opt outputOpt a.output <> + opt noPrefixOpt a.noPrefix + +loaderSrcOption :: Foreign -> Maybe [String] +loaderSrcOption query = either (const Nothing) + (\(Options a) -> runNullOrUndefined a.src) + (read query) -- cgit v1.2.3