@@ -11,6 +11,7 @@ module Main where
11
11
12
12
import qualified Control.Foldl as Foldl
13
13
import Control.Concurrent.Async (forConcurrently_ , mapConcurrently )
14
+ import Control.Error.Util (note )
14
15
import qualified Data.Aeson as Aeson
15
16
import Data.Aeson.Types (fieldLabelModifier )
16
17
import Data.Aeson.Encode.Pretty
@@ -497,7 +498,7 @@ data BowerInfo = BowerInfo
497
498
{ bower_name :: Text
498
499
, bower_repository :: BowerInfoRepo
499
500
, bower_dependencies :: Map. Map Text Text
500
- , bower_version :: Text
501
+ , bower_version :: Maybe Text
501
502
} deriving (Show , Eq , Generic )
502
503
instance Aeson. FromJSON BowerInfo where
503
504
parseJSON = Aeson. genericParseJSON Aeson. defaultOptions
@@ -509,22 +510,25 @@ data BowerOutput = BowerOutput
509
510
} deriving (Show , Eq , Generic , Aeson.FromJSON )
510
511
511
512
addFromBower :: String -> IO ()
512
- addFromBower name = do
513
- let bowerProc = inproc " bower" [ " info" , T. pack name, " --json" , " -l=error" ] empty
513
+ addFromBower arg = do
514
+ echoT $ " Adding package " <> name <> " at " <> (fromMaybe " latest" version) <> " from Bower..."
515
+ let bowerProc = inproc " bower" [ " info" , T. pack arg, " --json" , " -l=error" ] empty
514
516
result <- fold <$> shellToIOText bowerProc
515
517
if T. null result
516
518
then exitWithErr " Error: Does the package exist on Bower?"
517
519
else do
518
520
let result' = do
519
- bowerOutput <- Aeson. eitherDecodeStrict $ encodeUtf8 result
520
- let bowerInfo = latest bowerOutput
521
+ bowerInfo <- case version of
522
+ Just _ -> Aeson. eitherDecodeStrict (encodeUtf8 result) :: Either String BowerInfo
523
+ Nothing -> latest <$> Aeson. eitherDecodeStrict (encodeUtf8 result) :: Either String BowerInfo
524
+ version' <- note " Unable to infer the package version" $ (" v" <> ) <$> bower_version bowerInfo <|> version
521
525
pkgName <- mkPackageName' $ bower_name bowerInfo
522
526
packageNames <- traverse mkPackageName' $ Map. keys (bower_dependencies bowerInfo)
523
527
pure $
524
528
( pkgName
525
529
, PackageInfo
526
530
(T. replace " git:" " https:" . url $ bower_repository bowerInfo)
527
- ( " v " <> bower_version bowerInfo)
531
+ version'
528
532
packageNames
529
533
)
530
534
case result' of
@@ -536,6 +540,10 @@ addFromBower name = do
536
540
where
537
541
stripBowerNamePrefix s = fromMaybe s $ T. stripPrefix " purescript-" s
538
542
mkPackageName' = Bifunctor. first show . mkPackageName . stripBowerNamePrefix
543
+ parseVersion' s = case s of
544
+ " " -> Nothing
545
+ s' -> Just $ T. tail s'
546
+ (name, version) = Bifunctor. second parseVersion' $ T. breakOn " #" $ T. pack arg
539
547
540
548
formatPackageFile :: IO ()
541
549
formatPackageFile =
0 commit comments