Skip to content

Commit 5cbf7fb

Browse files
committed
Merge with dir argument parsers
2 parents d399c82 + 959a2ee commit 5cbf7fb

File tree

5 files changed

+55
-36
lines changed

5 files changed

+55
-36
lines changed

waspc/cli/src/Wasp/Cli/Command/BuildStart/ArgumentsParser.hs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@ module Wasp.Cli.Command.BuildStart.ArgumentsParser
55
where
66

77
import qualified Options.Applicative as Opt
8-
import Wasp.Cli.Util.EnvVarArgument (EnvVarFileArgument, envVarFileReader, envVarReader)
8+
import Wasp.Cli.Util.EnvVarArgument (envVarReader)
9+
import Wasp.Cli.Util.PathArgument (FilePathArgument, filePathReader)
910
import Wasp.Env (EnvVar)
1011

1112
data BuildStartArgs = BuildStartArgs
1213
{ clientEnvironmentVariables :: [EnvVar],
13-
clientEnvironmentFiles :: [EnvVarFileArgument],
14+
clientEnvironmentFiles :: [FilePathArgument],
1415
serverEnvironmentVariables :: [EnvVar],
15-
serverEnvironmentFiles :: [EnvVarFileArgument]
16+
serverEnvironmentFiles :: [FilePathArgument]
1617
}
1718

1819
buildStartArgsParser :: Opt.Parser BuildStartArgs
@@ -41,9 +42,9 @@ buildStartArgsParser =
4142
<> Opt.metavar "NAME=VALUE"
4243
<> Opt.help ("Set an environment variable for the " <> targetName <> " (can be used multiple times)")
4344

44-
makeEnvironmentFileParser :: String -> String -> Opt.Parser EnvVarFileArgument
45+
makeEnvironmentFileParser :: String -> String -> Opt.Parser FilePathArgument
4546
makeEnvironmentFileParser targetName longOptionName =
46-
Opt.option envVarFileReader $
47+
Opt.option filePathReader $
4748
Opt.long longOptionName
4849
<> Opt.metavar "FILE_PATH"
4950
<> Opt.help ("Load environment variables for the " <> targetName <> " from a file (can be used multiple times)")

waspc/cli/src/Wasp/Cli/Command/BuildStart/Config.hs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ import qualified Wasp.AppSpec.Valid as ASV
2323
import Wasp.Cli.Command (Command, CommandError (CommandError))
2424
import Wasp.Cli.Command.BuildStart.ArgumentsParser (BuildStartArgs)
2525
import qualified Wasp.Cli.Command.BuildStart.ArgumentsParser as Args
26-
import Wasp.Cli.Util.EnvVarArgument (EnvVarFileArgument, readEnvVarFile)
27-
import Wasp.Env (EnvVar, nubEnvVars, overrideEnvVars)
26+
import Wasp.Cli.Util.PathArgument (FilePathArgument)
27+
import qualified Wasp.Cli.Util.PathArgument as PathArgument
28+
import Wasp.Env (EnvVar, nubEnvVars, overrideEnvVars, parseDotEnvFile)
2829
import Wasp.Generator.Common (ProjectRootDir)
2930
import Wasp.Generator.ServerGenerator.Common (defaultDevServerUrl)
3031
import qualified Wasp.Generator.ServerGenerator.Common as Server
@@ -108,8 +109,11 @@ overrideEnvVarsCommand forced existing =
108109
intercalate ", " duplicateNames
109110
Right combined -> return combined
110111

111-
combineEnvVarsWithEnvFiles :: [EnvVar] -> [EnvVarFileArgument] -> IO [EnvVar]
112+
combineEnvVarsWithEnvFiles :: [EnvVar] -> [FilePathArgument] -> IO [EnvVar]
112113
combineEnvVarsWithEnvFiles pairs files = do
113-
pairsFromFiles <- mapM readEnvVarFile files
114+
pairsFromFiles <- mapM readEnvVarsFromFile files
114115
let allEnvVars = pairs <> concat pairsFromFiles
115116
return $ nubEnvVars allEnvVars
117+
118+
readEnvVarsFromFile :: FilePathArgument -> IO [EnvVar]
119+
readEnvVarsFromFile pathArg = PathArgument.getFilePath pathArg >>= parseDotEnvFile
Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,11 @@
11
module Wasp.Cli.Util.EnvVarArgument
22
( envVarReader,
33
envVarFromString,
4-
EnvVarFileArgument,
5-
getEnvVarFilePath,
6-
envVarFileReader,
7-
readEnvVarFile,
84
)
95
where
106

11-
import Control.Monad ((>=>))
12-
import Options.Applicative (ReadM, eitherReader, str)
13-
import StrongPath (Abs, File, Path')
14-
import StrongPath.FilePath (parseAbsFile)
15-
import System.Directory (makeAbsolute)
16-
import Wasp.Env (EnvVar, parseDotEnvFile)
7+
import Options.Applicative (ReadM, eitherReader)
8+
import Wasp.Env (EnvVar)
179

1810
envVarReader :: ReadM EnvVar
1911
envVarReader = eitherReader envVarFromString
@@ -28,20 +20,3 @@ envVarFromString var =
2820
_ -> failure
2921
where
3022
failure = Left $ "Environment variable must be in the format NAME=VALUE: " ++ var
31-
32-
envVarFileReader :: ReadM EnvVarFileArgument
33-
envVarFileReader = EnvVarFileArgument <$> str
34-
35-
-- Paths passed as arguments to a CLI are conventionally either absolute paths,
36-
-- or paths relative to the current working directory. We need IO to resolve
37-
-- which kind of path it is, but we also don't want any unsafe transformations
38-
-- in the meantime; so we make this type opaque until we have access to the IO
39-
-- monad.
40-
newtype EnvVarFileArgument = EnvVarFileArgument FilePath
41-
deriving (Show, Eq)
42-
43-
getEnvVarFilePath :: EnvVarFileArgument -> IO (Path' Abs (File ()))
44-
getEnvVarFilePath (EnvVarFileArgument filePath) = makeAbsolute filePath >>= parseAbsFile
45-
46-
readEnvVarFile :: EnvVarFileArgument -> IO [EnvVar]
47-
readEnvVarFile = getEnvVarFilePath >=> parseDotEnvFile
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
module Wasp.Cli.Util.PathArgument
2+
( FilePathArgument,
3+
DirPathArgument,
4+
getFilePath,
5+
getDirPath,
6+
filePathReader,
7+
dirPathReader,
8+
)
9+
where
10+
11+
import Options.Applicative (ReadM, str)
12+
import StrongPath (Abs, Dir', File', Path', parseAbsDir)
13+
import StrongPath.FilePath (parseAbsFile)
14+
import System.Directory (makeAbsolute)
15+
16+
-- Paths passed as arguments to a CLI are conventionally either absolute paths,
17+
-- or paths relative to the current working directory. We need IO to resolve
18+
-- which kind of path it is, but we also don't want any unsafe transformations
19+
-- in the meantime; so we make these types opaque until we have access to the IO
20+
-- monad.
21+
22+
newtype FilePathArgument = FilePathArgument FilePath
23+
deriving (Show, Eq)
24+
25+
newtype DirPathArgument = DirPathArgument FilePath
26+
deriving (Show, Eq)
27+
28+
filePathReader :: ReadM FilePathArgument
29+
filePathReader = FilePathArgument <$> str
30+
31+
dirPathReader :: ReadM DirPathArgument
32+
dirPathReader = DirPathArgument <$> str
33+
34+
getFilePath :: FilePathArgument -> IO (Path' Abs File')
35+
getFilePath (FilePathArgument filePath) = makeAbsolute filePath >>= parseAbsFile
36+
37+
getDirPath :: DirPathArgument -> IO (Path' Abs Dir')
38+
getDirPath (DirPathArgument dirPath) = makeAbsolute dirPath >>= parseAbsDir

waspc/waspc.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,7 @@ library cli-lib
611611
Wasp.Cli.Interactive
612612
Wasp.Cli.GithubRepo
613613
Wasp.Cli.Util.EnvVarArgument
614+
Wasp.Cli.Util.PathArgument
614615
Wasp.Cli.Util.Parser
615616

616617
executable wasp-cli

0 commit comments

Comments
 (0)