aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authoreric thul <thul.eric@gmail.com>2015-05-14 22:13:59 -0400
committereric thul <thul.eric@gmail.com>2015-05-14 22:13:59 -0400
commita72c8af19a72186069465c139b72df9c353fd3d1 (patch)
treeecb69055fe7b668b99d49153c12c729938ed08dc /src
parenta8b2571ee98ccd640a39873f8a9d67c707f336fe (diff)
downloadpurs-loader-a72c8af19a72186069465c139b72df9c353fd3d1.tar.gz
purs-loader-a72c8af19a72186069465c139b72df9c353fd3d1.tar.zst
purs-loader-a72c8af19a72186069465c139b72df9c353fd3d1.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/Loader.purs10
-rw-r--r--src/Options.purs77
2 files changed, 57 insertions, 30 deletions
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)
26import PursLoader.LoaderRef (LoaderRef(), Loader(), async, cacheable, clearDependencies, addDependency, query, resourcePath) 26import PursLoader.LoaderRef (LoaderRef(), Loader(), async, cacheable, clearDependencies, addDependency, query, resourcePath)
27import PursLoader.LoaderUtil (getRemainingRequest, parseQuery) 27import PursLoader.LoaderUtil (getRemainingRequest, parseQuery)
28import PursLoader.OS (eol) 28import PursLoader.OS (eol)
29import PursLoader.Options (pscMakeOptions, pscMakeDefaultOutput, pscMakeOutputOption) 29import PursLoader.Options (loaderSrcOption, pscMakeOptions, pscMakeDefaultOutput, pscMakeOutputOption)
30import PursLoader.Path (dirname, join, relative, resolve) 30import PursLoader.Path (dirname, join, relative, resolve)
31 31
32foreign import cwd "var cwd = process.cwd();" :: String 32foreign import cwd "var cwd = process.cwd();" :: String
@@ -43,8 +43,8 @@ indexFilename = "index.js"
43 43
44(!!!) = flip (!!) 44(!!!) = flip (!!)
45 45
46pursPattern :: String -> String 46pursPattern :: [String] -> String
47pursPattern root = join [ "{" ++ joinWith "," [ bowerPattern, root ] ++ "}" 47pursPattern srcs = join [ "{" ++ joinWith "," ([ bowerPattern ] <> srcs) ++ "}"
48 , "**" 48 , "**"
49 , "*.purs" 49 , "*.purs"
50 ] 50 ]
@@ -86,10 +86,10 @@ loader' ref source = do
86 liftEff $ cacheable ref 86 liftEff $ cacheable ref
87 87
88 let request = getRemainingRequest ref 88 let request = getRemainingRequest ref
89 root = dirname $ relative cwd request
90 parsed = parseQuery $ query ref 89 parsed = parseQuery $ query ref
90 srcs = loaderSrcOption parsed
91 opts = pscMakeOptions parsed 91 opts = pscMakeOptions parsed
92 pattern = pursPattern root 92 pattern = pursPattern $ fromMaybe [] srcs
93 key = match moduleRegex source >>= (!!!) 1 93 key = match moduleRegex source >>= (!!!) 1
94 94
95 files <- glob pattern 95 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
2 ( pscMakeOptions 2 ( pscMakeOptions
3 , pscMakeDefaultOutput 3 , pscMakeDefaultOutput
4 , pscMakeOutputOption 4 , pscMakeOutputOption
5 , loaderSrcOption
5 ) where 6 ) where
6 7
7import Data.Either (either) 8import Data.Either (either)
@@ -24,6 +25,12 @@ verboseErrorsOpt = "verbose-errors"
24 25
25outputOpt = "output" 26outputOpt = "output"
26 27
28commentsOpt = "comments"
29
30noPrefixOpt = "no-prefix"
31
32srcOpt = "src"
33
27pscMakeDefaultOutput = "output" 34pscMakeDefaultOutput = "output"
28 35
29newtype Options 36newtype Options
@@ -32,29 +39,42 @@ newtype Options
32 , noMagicDo :: NullOrUndefined Boolean 39 , noMagicDo :: NullOrUndefined Boolean
33 , noTco :: NullOrUndefined Boolean 40 , noTco :: NullOrUndefined Boolean
34 , verboseErrors :: NullOrUndefined Boolean 41 , verboseErrors :: NullOrUndefined Boolean
42 , comments :: NullOrUndefined Boolean
35 , output :: NullOrUndefined String 43 , output :: NullOrUndefined String
44 , noPrefix :: NullOrUndefined Boolean
45 , src :: NullOrUndefined [String]
36 } 46 }
37 47
38instance isForeignOptions :: IsForeign Options where 48instance isForeignOptions :: IsForeign Options where
39 read obj = (\a b c d e f -> 49 read obj = Options <$> ({ noPrelude: _
40 Options { noPrelude: a 50 , noOpts: _
41 , noOpts: b 51 , noMagicDo: _
42 , noMagicDo: c 52 , noTco: _
43 , noTco: d 53 , verboseErrors: _
44 , verboseErrors: e 54 , comments: _
45 , output: f 55 , output: _
46 }) <$> readProp noPreludeOpt obj 56 , noPrefix: _
47 <*> readProp noOptsOpt obj 57 , src: _
48 <*> readProp noMagicDoOpt obj 58 } <$> readProp noPreludeOpt obj
49 <*> readProp noTcoOpt obj 59 <*> readProp noOptsOpt obj
50 <*> readProp verboseErrorsOpt obj 60 <*> readProp noMagicDoOpt obj
51 <*> readProp outputOpt obj 61 <*> readProp noTcoOpt obj
52 62 <*> readProp verboseErrorsOpt obj
53booleanOpt :: String -> NullOrUndefined Boolean -> [String] 63 <*> readProp commentsOpt obj
54booleanOpt key opt = maybe [] (\a -> if a then ["--" ++ key] else []) (runNullOrUndefined opt) 64 <*> readProp outputOpt obj
55 65 <*> readProp noPrefixOpt obj
56stringOpt :: String -> NullOrUndefined String -> [String] 66 <*> readProp srcOpt obj)
57stringOpt key opt = maybe [] (\a -> ["--" ++ key ++ "=" ++ a]) (runNullOrUndefined opt) 67
68class LoaderOption a where
69 opt :: String -> NullOrUndefined a -> [String]
70
71instance booleanLoaderOption :: LoaderOption Boolean where
72 opt key opt = maybe [] (\a -> if a then ["--" ++ key] else [])
73 (runNullOrUndefined opt)
74
75instance stringLoaderOption :: LoaderOption String where
76 opt key opt = maybe [] (\a -> ["--" ++ key ++ "=" ++ a])
77 (runNullOrUndefined opt)
58 78
59pscMakeOutputOption :: Foreign -> Maybe String 79pscMakeOutputOption :: Foreign -> Maybe String
60pscMakeOutputOption query = either (const Nothing) 80pscMakeOutputOption query = either (const Nothing)
@@ -64,9 +84,16 @@ pscMakeOutputOption query = either (const Nothing)
64pscMakeOptions :: Foreign -> [String] 84pscMakeOptions :: Foreign -> [String]
65pscMakeOptions query = either (const []) fold parsed 85pscMakeOptions query = either (const []) fold parsed
66 where parsed = read query :: F Options 86 where parsed = read query :: F Options
67 fold (Options a) = booleanOpt noPreludeOpt a.noPrelude <> 87 fold (Options a) = opt noPreludeOpt a.noPrelude <>
68 booleanOpt noOptsOpt a.noOpts <> 88 opt noOptsOpt a.noOpts <>
69 booleanOpt noMagicDoOpt a.noMagicDo <> 89 opt noMagicDoOpt a.noMagicDo <>
70 booleanOpt noTcoOpt a.noTco <> 90 opt noTcoOpt a.noTco <>
71 booleanOpt verboseErrorsOpt a.verboseErrors <> 91 opt verboseErrorsOpt a.verboseErrors <>
72 stringOpt outputOpt a.output 92 opt commentsOpt a.comments <>
93 opt outputOpt a.output <>
94 opt noPrefixOpt a.noPrefix
95
96loaderSrcOption :: Foreign -> Maybe [String]
97loaderSrcOption query = either (const Nothing)
98 (\(Options a) -> runNullOrUndefined a.src)
99 (read query)