mirror of
https://github.com/wasp-lang/wasp.git
synced 2024-12-28 19:44:30 +03:00
56 lines
2.3 KiB
Haskell
56 lines
2.3 KiB
Haskell
module Command.Compile
|
|
( compileIO
|
|
, compile
|
|
, compileIOWithOptions
|
|
) where
|
|
|
|
import Control.Monad.Except (runExceptT, throwError)
|
|
import Control.Monad.IO.Class (liftIO)
|
|
|
|
import qualified Cli.Common
|
|
import Command (Command, CommandError (..))
|
|
import Command.Common (findWaspProjectRootDirFromCwd,
|
|
waspSaysC)
|
|
import Command.Db.Migrate (MigrationDirCopyDirection (..),
|
|
copyDbMigrationsDir)
|
|
import Common (WaspProjectDir)
|
|
import CompileOptions (CompileOptions (..))
|
|
import qualified Lib
|
|
import StrongPath (Abs, Dir, Path, (</>))
|
|
|
|
|
|
compile :: Command ()
|
|
compile = do
|
|
waspProjectDir <- findWaspProjectRootDirFromCwd
|
|
let outDir = waspProjectDir </> Cli.Common.dotWaspDirInWaspProjectDir
|
|
</> Cli.Common.generatedCodeDirInDotWaspDir
|
|
|
|
waspSaysC "Compiling wasp code..."
|
|
compilationResult <- liftIO $ compileIO waspProjectDir outDir
|
|
case compilationResult of
|
|
Left compileError -> throwError $ CommandError $ "Compilation failed: " ++ compileError
|
|
Right () -> waspSaysC "Code has been successfully compiled, project has been generated.\n"
|
|
|
|
-- | Compiles Wasp source code in waspProjectDir directory and generates a project
|
|
-- in given outDir directory.
|
|
compileIO :: Path Abs (Dir WaspProjectDir)
|
|
-> Path Abs (Dir Lib.ProjectRootDir)
|
|
-> IO (Either String ())
|
|
compileIO waspProjectDir outDir = compileIOWithOptions options waspProjectDir outDir
|
|
where
|
|
options = CompileOptions
|
|
{ externalCodeDirPath = waspProjectDir </> Cli.Common.extCodeDirInWaspProjectDir
|
|
, isBuild = False
|
|
}
|
|
|
|
compileIOWithOptions :: CompileOptions
|
|
-> Path Abs (Dir Cli.Common.WaspProjectDir)
|
|
-> Path Abs (Dir Lib.ProjectRootDir)
|
|
-> IO (Either String ())
|
|
compileIOWithOptions options waspProjectDir outDir = runExceptT $ do
|
|
-- TODO: Use throwIO instead of Either to return exceptions?
|
|
liftIO (Lib.compile waspProjectDir outDir options)
|
|
>>= either throwError return
|
|
liftIO (copyDbMigrationsDir CopyMigDirDown waspProjectDir outDir)
|
|
>>= maybe (return ()) (throwError . ("Copying migration folder failed: " ++))
|