@@ -7,12 +7,14 @@ module GulpPurescript.Options
77
88import Control.Alt ((<|>))
99
10- import Data.Array (concat )
10+ import Data.Array (concat , singleton )
1111import Data.Either (Either (..), either )
1212import Data.Foreign (Foreign (), ForeignError (TypeMismatch), F ())
1313import Data.Foreign.Class (IsForeign , read , readProp )
14+ import Data.Foreign.Keys (keys )
1415import Data.Foreign.NullOrUndefined (NullOrUndefined (..), runNullOrUndefined )
1516import Data.Maybe (Maybe (..), fromMaybe , maybe )
17+ import Data.Traversable (for )
1618import Data.Tuple (Tuple ())
1719import Data.Tuple.Nested (tuple2 )
1820
@@ -76,6 +78,10 @@ ffiOpt = "ffi"
7678
7779ffiKey = ffiOpt
7880
81+ docgenOpt = " docgen"
82+
83+ docgenKey = docgenOpt
84+
7985newtype Psc
8086 = Psc { noPrelude :: NullOrUndefined Boolean
8187 , noTco :: NullOrUndefined Boolean
@@ -106,7 +112,9 @@ newtype PscMake
106112 }
107113
108114newtype PscDocs
109- = PscDocs { format :: NullOrUndefined Format }
115+ = PscDocs { format :: NullOrUndefined Format
116+ , docgen :: NullOrUndefined Foreign
117+ }
110118
111119data Format = Markdown | ETags | CTags
112120
@@ -167,7 +175,11 @@ instance isForeignPscMake :: IsForeign PscMake where
167175 <*> readProp ffiKey obj)
168176
169177instance 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)
171183
172184instance isForeignFormat :: IsForeign Format where
173185 read val = read val >>= (\a -> case a of
@@ -195,6 +207,28 @@ mkPathArray :: String -> NullOrUndefined [String] -> [String]
195207mkPathArray key opt = concat $ mkString key <$> (NullOrUndefined <<< Just )
196208 <$> (fromMaybe [] (runNullOrUndefined opt) >>= expandGlob)
197209
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+
198232foreign import expandGlob
199233 " " "
200234 var expandGlob = (function () {
@@ -255,4 +289,5 @@ pscMakeOptions opts = either (const []) fold parsed
255289pscDocsOptions :: Foreign -> [String ]
256290pscDocsOptions opts = either (const [] ) fold parsed
257291 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