@@ -5,8 +5,11 @@
55
66module Language.PureScript.Publish
77 ( preparePackage
8+ , preparePackage'
89 , PrepareM()
910 , runPrepareM
11+ , PublishOptions(..)
12+ , defaultPublishOptions
1013 , getVersionFromGitTag
1114 , getBowerInfo
1215 , getModulesAndBookmarks
@@ -49,11 +52,22 @@ import qualified Language.PureScript.Docs as D
4952import Language.PureScript.Publish.Utils
5053import Language.PureScript.Publish.ErrorsWarnings
5154
55+data PublishOptions = PublishOptions
56+ { -- | How to obtain the version tag and version that the data being
57+ -- generated will refer to.
58+ publishGetVersion :: PrepareM (String, Version)
59+ }
60+
61+defaultPublishOptions :: PublishOptions
62+defaultPublishOptions = PublishOptions
63+ { publishGetVersion = getVersionFromGitTag
64+ }
65+
5266-- | Attempt to retrieve package metadata from the current directory.
5367-- Calls exitFailure if no package metadata could be retrieved.
54−preparePackage :: IO D.UploadedPackage
55−preparePackage =
56− runPrepareM preparePackage'
68+preparePackage :: PublishOptions -> IO D.UploadedPackage
69+preparePackage opts =
70+ runPrepareM (preparePackage' opts)
5771 >>= either (\e -> printError e >> exitFailure)
5872 handleWarnings
5973 where
@@ -93,14 +107,14 @@ otherError = throwError . OtherError
93107catchLeft :: Applicative f => Either a b -> (a -> f b) -> f b
94108catchLeft a f = either f pure a
95109
96−preparePackage' :: PrepareM D.UploadedPackage
97−preparePackage' = do
110+preparePackage' :: PublishOptions -> PrepareM D.UploadedPackage
111+preparePackage' opts = do
98112 exists <- liftIO (doesFileExist "bower.json")
99113 unless exists (userError BowerJSONNotFound)
100114
101115 pkgMeta <- liftIO (Bower.decodeFile "bower.json")
102116 >>= flip catchLeft (userError . CouldntParseBowerJSON)
103− (pkgVersionTag, pkgVersion) <- getVersionFromGitTag
117+ (pkgVersionTag, pkgVersion) <- publishGetVersion opts
104118 pkgGithub <- getBowerInfo pkgMeta
105119 (pkgBookmarks, pkgModules) <- getModulesAndBookmarks
106120