@@ -7,12 +7,14 @@ module GulpPurescript.Options
7
7
8
8
import Control.Alt ((<|>))
9
9
10
- import Data.Array (concat )
10
+ import Data.Array (concat , singleton )
11
11
import Data.Either (Either (..), either )
12
12
import Data.Foreign (Foreign (), ForeignError (TypeMismatch), F ())
13
13
import Data.Foreign.Class (IsForeign , read , readProp )
14
+ import Data.Foreign.Keys (keys )
14
15
import Data.Foreign.NullOrUndefined (NullOrUndefined (..), runNullOrUndefined )
15
16
import Data.Maybe (Maybe (..), fromMaybe , maybe )
17
+ import Data.Traversable (for )
16
18
import Data.Tuple (Tuple ())
17
19
import Data.Tuple.Nested (tuple2 )
18
20
@@ -76,6 +78,10 @@ ffiOpt = "ffi"
76
78
77
79
ffiKey = ffiOpt
78
80
81
+ docgenOpt = " docgen"
82
+
83
+ docgenKey = docgenOpt
84
+
79
85
newtype Psc
80
86
= Psc { noPrelude :: NullOrUndefined Boolean
81
87
, noTco :: NullOrUndefined Boolean
@@ -106,7 +112,9 @@ newtype PscMake
106
112
}
107
113
108
114
newtype PscDocs
109
- = PscDocs { format :: NullOrUndefined Format }
115
+ = PscDocs { format :: NullOrUndefined Format
116
+ , docgen :: NullOrUndefined Foreign
117
+ }
110
118
111
119
data Format = Markdown | ETags | CTags
112
120
@@ -167,7 +175,11 @@ instance isForeignPscMake :: IsForeign PscMake where
167
175
<*> readProp ffiKey obj)
168
176
169
177
instance isForeignPscDocs :: IsForeign PscDocs where
170
- read obj = PscDocs <<< { format: _ } <$> readProp formatKey obj
178
+ read obj =
179
+ PscDocs <$> ({ format: _
180
+ , docgen: _
181
+ } <$> readProp formatKey obj
182
+ <*> readProp docgenOpt obj)
171
183
172
184
instance isForeignFormat :: IsForeign Format where
173
185
read val = read val >>= (\a -> case a of
@@ -195,6 +207,28 @@ mkPathArray :: String -> NullOrUndefined [String] -> [String]
195
207
mkPathArray key opt = concat $ mkString key <$> (NullOrUndefined <<< Just )
196
208
<$> (fromMaybe [] (runNullOrUndefined opt) >>= expandGlob)
197
209
210
+ mkDocgen :: String -> NullOrUndefined Foreign -> [String ]
211
+ mkDocgen key opt = concat $ mkString key <$> (NullOrUndefined <<< Just )
212
+ <$> (maybe [] parse (runNullOrUndefined opt))
213
+ where
214
+ parse :: Foreign -> [String ]
215
+ parse obj = either (const [] ) id $ parseName obj
216
+ <|> parseList obj
217
+ <|> parseObj obj
218
+ <|> pure []
219
+
220
+ parseName :: Foreign -> F [String ]
221
+ parseName obj = singleton <$> read obj
222
+
223
+ parseList :: Foreign -> F [String ]
224
+ parseList obj = read obj
225
+
226
+ parseObj :: Foreign -> F [String ]
227
+ parseObj obj = do
228
+ modules <- keys obj
229
+ for modules \m -> (\f -> m ++ " :" ++ f) <$> readProp m obj
230
+
231
+
198
232
foreign import expandGlob
199
233
" " "
200
234
var expandGlob = (function () {
@@ -255,4 +289,5 @@ pscMakeOptions opts = either (const []) fold parsed
255
289
pscDocsOptions :: Foreign -> [String ]
256
290
pscDocsOptions opts = either (const [] ) fold parsed
257
291
where parsed = read opts :: F PscDocs
258
- fold (PscDocs a) = mkFormat formatOpt a.format
292
+ fold (PscDocs a) = mkFormat formatOpt a.format <>
293
+ mkDocgen docgenOpt a.docgen
0 commit comments