cabal-version: 2.4

-- TODO:
--  - Rename wasp-cli back to just wasp.
--  - Manually updating exposed-modules, other-modules and data-files is tedious.
--    Consider using hpack, or maybe even hpack-dhall.

name:           waspc
version:        0.10.0
description:    Please see the README on GitHub at <https://github.com/wasp-lang/wasp/waspc#readme>
homepage:       https://github.com/wasp-lang/wasp/waspc#readme
bug-reports:    https://github.com/wasp-lang/wasp/issues
author:         Wasp Team
maintainer:     team@wasp-lang.dev
copyright:      Wasp, Inc.
license:        MIT
license-file:   LICENSE
build-type:     Simple
extra-source-files:
  README.md
  ChangeLog.md
data-files:
  -- NOTE: cabal has this weird rule that * doesn't capture file extension, nor can you provide just *,
  --   it has to be followed by extension, which is why we have to manually list all of the extensions,
  --   and also files with no extension.
  --   Check https://github.com/haskell/cabal/issues/5883 for more details.
  Generator/templates/Dockerfile
  Generator/templates/dockerignore
  Generator/templates/react-app/gitignore
  Generator/templates/react-app/npmrc
  Generator/templates/server/patches/*.patch
  Generator/templates/server/gitignore
  Generator/templates/server/npmrc
  Generator/templates/**/*.prisma
  Generator/templates/**/*.toml
  Generator/templates/**/*.ts
  Generator/templates/**/*.json
  Generator/templates/**/*.ico
  Generator/templates/**/*.html
  Generator/templates/**/*.md
  Generator/templates/**/*.js
  Generator/templates/**/*.jsx
  Generator/templates/**/*.tsx
  Generator/templates/**/*.mjs
  Generator/templates/**/*.png
  Cli/bash-completion
  Cli/templates/**/*.css
  Cli/templates/**/*.json
  Cli/templates/**/*.jsx
  Cli/templates/**/*.png
  Cli/templates/**/*.ts
  Cli/templates/new/.gitignore
  Cli/templates/new/.wasproot
  Cli/templates/new/src/.waspignore
data-dir: data/

source-repository head
  type: git
  location: https://github.com/wasp-lang/wasp

common common-all
  default-language: Haskell2010
  ghc-options:
    -Wall
    -- -optP-Wno-nonportable-include-path avoids warning caused by .../autogen/cabal_macros.h. on OSX.
    -optP-Wno-nonportable-include-path
    -- -fwrite-ide-info and -hiedir=.hie tell GHC to write compile-time information about the code
    -- to .hie directory. This information can then be used by other tools, e.g. stan (static analyzer).
    -fwrite-ide-info -hiedir=.hie
  default-extensions:
    OverloadedStrings
    TemplateHaskell
    QuasiQuotes
    ScopedTypeVariables
    LambdaCase
    FlexibleContexts
    MultiParamTypeClasses
    DisambiguateRecordFields

common common-exe
  ghc-options:
    -threaded -rtsopts -with-rtsopts=-N

library
  import: common-all
  hs-source-dirs: src
  build-tool-depends:
      alex:alex
  build-depends:
    , base                  >= 4.7 && < 5
    , Glob                  ^>= 0.10.2
    , containers            ^>= 0.6.5
    , directory             ^>= 1.3.6 && < 1.4
    , dir-traverse          ^>= 0.2.3
    , filepath              ^>= 1.4.2
    , time                  ^>= 1.9.3
    , bytestring            ^>= 0.10.12
    , aeson                 ^>= 1.5.6
    , aeson-pretty          ^>= 0.8
    , text                  ^>= 1.2.4
    , template-haskell      ^>= 2.16.0
    , unordered-containers  ^>= 0.2.16
    , mtl                   ^>= 2.2.2
    , async                 ^>= 2.2.4
    , conduit               ^>= 1.3.4
    , exceptions            ^>= 0.10.4
    , split                 ^>= 0.2.3
    , conduit-extra         ^>= 1.3.5
    , process               ^>= 1.6.13
    , cryptohash-sha256     ^>= 0.11.102
    , mustache              ^>= 2.3.2
    , parsec                ^>= 3.1.14
    , path                  ^>= 0.9.2
    , path-io               ^>= 1.6.3
    , regex-tdfa            ^>= 1.3.1
    , strong-path           ^>= 1.1.4
    , unliftio              ^>= 0.2.20
    , utf8-string           ^>= 1.0.2
    , cryptonite            ^>= 0.29
    , fsnotify              ^>= 0.3.0
    , http-conduit          ^>= 2.3.8
    , uuid                  ^>= 1.3.15
    -- 'array' is used by code generated by Alex for src/Analyzer/Parser/Lexer.x
    , array                 ^>= 0.5.4
    , deepseq               ^>= 1.4.4
    , extra                 ^>= 1.7.10
    , dotenv                ^>= 0.10.0
    , network               ^>= 3.1.2
  other-modules: Paths_waspc
  exposed-modules:
    FilePath.Extra
    Wasp.Analyzer
    Wasp.Analyzer.AnalyzeError
    Wasp.Analyzer.ErrorMessage
    Wasp.Analyzer.Evaluator
    Wasp.Analyzer.Evaluator.Bindings
    Wasp.Analyzer.Evaluator.Evaluation
    Wasp.Analyzer.Evaluator.Evaluation.Combinators
    Wasp.Analyzer.Evaluator.Evaluation.Internal
    Wasp.Analyzer.Evaluator.Evaluation.TypedDictExpr
    Wasp.Analyzer.Evaluator.Evaluation.TypedDictExpr.Combinators
    Wasp.Analyzer.Evaluator.Evaluation.TypedExpr
    Wasp.Analyzer.Evaluator.Evaluation.TypedExpr.Combinators
    Wasp.Analyzer.Evaluator.EvaluationError
    Wasp.Analyzer.Parser
    Wasp.Analyzer.Parser.AST
    Wasp.Analyzer.Parser.AST.PrettyPrinter
    Wasp.Analyzer.Parser.Ctx
    Wasp.Analyzer.Parser.ConcreteParser
    Wasp.Analyzer.Parser.ConcreteParser.ParseError
    Wasp.Analyzer.Parser.CST
    Wasp.Analyzer.Parser.CST.Traverse
    Wasp.Analyzer.Parser.ConcreteParser.ParserLib
    Wasp.Analyzer.Parser.Lexer
    Wasp.Analyzer.Parser.Lexer.Lexer
    Wasp.Analyzer.Parser.Lexer.Internal
    Wasp.Analyzer.Parser.ParseError
    Wasp.Analyzer.Parser.PrettyPrinter
    Wasp.Analyzer.Parser.AbstractParser
    Wasp.Analyzer.Parser.AbstractParser.Monad
    Wasp.Analyzer.Parser.SourceOffset
    Wasp.Analyzer.Parser.SourcePosition
    Wasp.Analyzer.Parser.SourceRegion
    Wasp.Analyzer.Parser.SourceSpan
    Wasp.Analyzer.Parser.Token
    Wasp.Analyzer.Parser.TokenSet
    Wasp.Analyzer.StdTypeDefinitions
    Wasp.Analyzer.StdTypeDefinitions.App.Dependency
    Wasp.Analyzer.StdTypeDefinitions.Entity
    Wasp.Analyzer.Type
    Wasp.Analyzer.TypeChecker
    Wasp.Analyzer.TypeChecker.AST
    Wasp.Analyzer.TypeChecker.Internal
    Wasp.Analyzer.TypeChecker.Monad
    Wasp.Analyzer.TypeChecker.TypeError
    Wasp.Analyzer.TypeDefinitions
    Wasp.Analyzer.TypeDefinitions.Class.HasCustomEvaluation
    Wasp.Analyzer.TypeDefinitions.Class.IsDeclType
    Wasp.Analyzer.TypeDefinitions.Class.IsEnumType
    Wasp.Analyzer.TypeDefinitions.Internal
    Wasp.Analyzer.TypeDefinitions.TH
    Wasp.Analyzer.TypeDefinitions.TH.Common
    Wasp.Analyzer.TypeDefinitions.TH.Decl
    Wasp.Analyzer.TypeDefinitions.TH.Enum
    Wasp.AppSpec
    Wasp.AppSpec.Action
    Wasp.AppSpec.Api
    Wasp.AppSpec.App
    Wasp.AppSpec.App.Auth
    Wasp.AppSpec.App.Auth.PasswordReset
    Wasp.AppSpec.App.Auth.EmailVerification
    Wasp.AppSpec.App.Client
    Wasp.AppSpec.App.Db
    Wasp.AppSpec.App.EmailSender
    Wasp.AppSpec.App.Dependency
    Wasp.AppSpec.App.Server
    Wasp.AppSpec.App.Wasp
    Wasp.AppSpec.ConfigFile
    Wasp.AppSpec.Core.Decl
    Wasp.AppSpec.Core.Ref
    Wasp.AppSpec.Entity
    Wasp.AppSpec.Entity.Field
    Wasp.AppSpec.ExternalCode
    Wasp.AppSpec.ExtImport
    Wasp.AppSpec.Job
    Wasp.AppSpec.JSON
    Wasp.AppSpec.Operation
    Wasp.AppSpec.Page
    Wasp.AppSpec.Query
    Wasp.AppSpec.Route
    Wasp.AppSpec.Valid
    Wasp.AppSpec.Util
    Wasp.CompileOptions
    Wasp.ConfigFile
    Wasp.Data
    Wasp.Db.Postgres
    Wasp.Error
    Wasp.Env
    Wasp.ExternalCode
    Wasp.JsImport
    Wasp.Generator
    Wasp.Generator.Common
    Wasp.Generator.ConfigFile
    Wasp.Generator.ConfigFileGenerator
    Wasp.Generator.DbGenerator
    Wasp.Generator.DbGenerator.Common
    Wasp.Generator.DbGenerator.Jobs
    Wasp.Generator.DbGenerator.Operations
    Wasp.Generator.DockerGenerator
    Wasp.Generator.ExternalCodeGenerator
    Wasp.Generator.ExternalCodeGenerator.Common
    Wasp.Generator.ExternalCodeGenerator.Js
    Wasp.Generator.FileDraft
    Wasp.Generator.FileDraft.CopyDirFileDraft
    Wasp.Generator.FileDraft.CopyFileDraft
    Wasp.Generator.FileDraft.TemplateFileDraft
    Wasp.Generator.FileDraft.TextFileDraft
    Wasp.Generator.FileDraft.CopyAndModifyTextFileDraft
    Wasp.Generator.FileDraft.Writeable
    Wasp.Generator.FileDraft.WriteableMonad
    Wasp.Generator.Job
    Wasp.Generator.Job.Common
    Wasp.Generator.Job.IO
    Wasp.Generator.Job.IO.PrefixedWriter
    Wasp.Generator.Job.Process
    Wasp.Generator.JsImport
    Wasp.Generator.Monad
    Wasp.Generator.AuthProviders
    Wasp.Generator.AuthProviders.Common
    Wasp.Generator.AuthProviders.OAuth
    Wasp.Generator.AuthProviders.Local
    Wasp.Generator.AuthProviders.Email
    Wasp.Generator.ServerGenerator
    Wasp.Generator.ServerGenerator.JsImport
    Wasp.Generator.ServerGenerator.ApiRoutesG
    Wasp.Generator.ServerGenerator.AuthG
    Wasp.Generator.ServerGenerator.Auth.OAuthAuthG
    Wasp.Generator.ServerGenerator.Auth.LocalAuthG
    Wasp.Generator.ServerGenerator.Auth.EmailAuthG
    Wasp.Generator.ServerGenerator.Db.Seed
    Wasp.Generator.ServerGenerator.EmailSenderG
    Wasp.Generator.ServerGenerator.EmailSender.Providers
    Wasp.Generator.ServerGenerator.Common
    Wasp.Generator.ServerGenerator.ConfigG
    Wasp.Generator.ServerGenerator.ExternalCodeGenerator
    Wasp.Generator.ServerGenerator.JobGenerator
    Wasp.Generator.ServerGenerator.OperationsG
    Wasp.Generator.ServerGenerator.OperationsRoutesG
    Wasp.Generator.ServerGenerator.Setup
    Wasp.Generator.ServerGenerator.Start
    Wasp.Generator.Setup
    Wasp.Generator.Start
    Wasp.Generator.Templates
    Wasp.Generator.Test
    Wasp.Generator.WebAppGenerator
    Wasp.Generator.WebAppGenerator.JsImport
    Wasp.Generator.WebAppGenerator.AuthG
    Wasp.Generator.WebAppGenerator.Auth.OAuthAuthG
    Wasp.Generator.WebAppGenerator.Auth.LocalAuthG
    Wasp.Generator.WebAppGenerator.Auth.EmailAuthG
    Wasp.Generator.WebAppGenerator.Auth.Common
    Wasp.Generator.WebAppGenerator.Common
    Wasp.Generator.WebAppGenerator.ExternalCodeGenerator
    Wasp.Generator.WebAppGenerator.OperationsGenerator
    Wasp.Generator.WebAppGenerator.OperationsGenerator.ResourcesG
    Wasp.Generator.WebAppGenerator.RouterGenerator
    Wasp.Generator.WebAppGenerator.Setup
    Wasp.Generator.WebAppGenerator.Start
    Wasp.Generator.WebAppGenerator.Test
    Wasp.Generator.WriteFileDrafts
    Wasp.Project
    Wasp.Project.Analyze
    Wasp.Project.Common
    Wasp.Project.Db
    Wasp.Project.Db.Migrations
    Wasp.Project.Db.Dev
    Wasp.Project.Db.Dev.Postgres
    Wasp.Project.Deployment
    Wasp.Project.Env
    Wasp.NpmDependency
    Wasp.Psl.Ast.Model
    Wasp.Psl.Generator.Model
    Wasp.Psl.Parser.Model
    Wasp.SemanticVersion
    Wasp.Util
    Wasp.Util.Network.Socket
    Wasp.Util.Control.Monad
    Wasp.Util.Fib
    Wasp.Util.IO
    Wasp.Util.Terminal
    Wasp.WaspignoreFile
    Wasp.Generator.NpmDependencies
    Wasp.Generator.NpmInstall
    Wasp.Message
    Wasp.Version

library waspls
  import: common-all
  hs-source-dirs: waspls/src
  exposed-modules:
    Wasp.LSP.Server
  other-modules:
    Wasp.LSP.ServerState
    Wasp.LSP.ServerConfig
    Wasp.LSP.ServerM
    Wasp.LSP.Handlers
    Wasp.LSP.Diagnostic
    Wasp.LSP.Completion
    Wasp.LSP.Util
    Wasp.LSP.Syntax
  build-depends:
      base
    , aeson
    , aeson-pretty
    , deepseq
    , data-default ^>=0.7.1.1
    , hslogger ^>=1.3.1.0
    , lens ^>=5.1
    , lsp ^>=1.4.0.0
    , lsp-types ^>=1.4.0.1
    , mtl
    , text
    , transformers ^>=0.5.6.2
    , utf8-string
    , waspc

library cli-lib
  import: common-all
  hs-source-dirs: cli/src
  build-depends:
      directory
    , base
    , filepath
    , time
    , aeson
    , mtl
    , async
    , exceptions
    , cryptonite
    , fsnotify
    , http-conduit
    , optparse-applicative ^>=0.17.0.0
    , path
    , path-io
    , process
    , strong-path
    , text
    , utf8-string
    , uuid
    , waspc
    , waspls
    , unliftio ^>= 0.2.20
  other-modules: Paths_waspc
  exposed-modules:
    Wasp.Cli.Command
    Wasp.Cli.FileSystem
    Wasp.Cli.Command.BashCompletion
    Wasp.Cli.Command.Build
    Wasp.Cli.Command.Call
    Wasp.Cli.Command.Clean
    Wasp.Cli.Command.Uninstall
    Wasp.Cli.Command.Common
    Wasp.Cli.Command.Compile
    Wasp.Cli.Command.CreateNewProject
    Wasp.Cli.Command.Db
    Wasp.Cli.Command.Db.Migrate
    Wasp.Cli.Command.Db.Reset
    Wasp.Cli.Command.Db.Seed
    Wasp.Cli.Command.Db.Studio
    Wasp.Cli.Command.Deps
    Wasp.Cli.Command.Deploy
    Wasp.Cli.Command.Dockerfile
    Wasp.Cli.Command.Info
    Wasp.Cli.Command.Start
    Wasp.Cli.Command.Start.Db
    Wasp.Cli.Command.Telemetry
    Wasp.Cli.Command.Telemetry.Common
    Wasp.Cli.Command.Telemetry.Project
    Wasp.Cli.Command.Telemetry.User
    Wasp.Cli.Command.Test
    Wasp.Cli.Command.Watch
    Wasp.Cli.Command.WaspLS
    Wasp.Cli.Common
    Wasp.Cli.Terminal
    Wasp.Cli.Command.Message
    Wasp.Cli.Message

executable wasp-cli
  import: common-all, common-exe
  hs-source-dirs: cli/exe
  main-is: Main.hs
  build-depends:
      base
    , async
    , waspc
    , cli-lib
    , with-utf8 ^>= 1.0.2
  other-modules:
      Paths_waspc

test-suite waspc-test
  import: common-all, common-exe
  type: exitcode-stdio-1.0
  hs-source-dirs: test
  main-is: TastyDiscoverDriver.hs
  build-tool-depends:
    tasty-discover:tasty-discover
  build-depends:
    , aeson
    , base
    , Diff                  ^>= 0.4.1
    , deepseq
    , filepath
    , mtl
    , parsec
    , path
    , split
    , strong-path
    , text
    , unordered-containers
    , bytestring
    , waspc
    , QuickCheck            ^>= 2.14
    , tasty                 ^>= 1.4.2
    -- tasty-hspec 1.1.7 introduces breaking changes, which is why we have < 1.1.7 .
    , tasty-hspec           >= 1.1 && < 1.1.7
    , tasty-quickcheck      ^>= 0.10
    , tasty-golden          ^>= 2.3.5
  other-modules:
    Analyzer.Evaluation.EvaluationErrorTest
    Analyzer.EvaluatorTest
    Analyzer.Parser.ConcreteParserTest
    Analyzer.Parser.CST.TraverseTest
    Analyzer.Parser.ParseErrorTest
    Analyzer.Parser.SourcePositionTest
    Analyzer.ParserTest
    Analyzer.TestUtil
    Analyzer.TypeChecker.InternalTest
    Analyzer.TypeCheckerTest
    AnalyzerTest
    AppSpec.ValidTest
    ErrorTest
    FilePath.ExtraTest
    Fixtures
    Generator.DbGeneratorTest
    Generator.ExternalCodeGenerator.JsTest
    Generator.FileDraft.CopyFileDraftTest
    Generator.FileDraft.CopyAndModifyTextFileDraftTest
    Generator.FileDraft.TemplateFileDraftTest
    Generator.MockWriteableMonad
    Generator.WebAppGeneratorTest
    Generator.WriteFileDraftsTest
    Generator.JsImportTest
    Psl.Common.ModelTest
    Psl.Generator.ModelTest
    Psl.Parser.ModelTest
    Test.Util
    Util.FibTest
    Util.Control.MonadTest
    UtilTest
    Util.Diff
    SemanticVersionTest
    WaspignoreFileTest
    Paths_waspc
    Generator.NpmDependenciesTest
    JsImportTest

test-suite cli-test
  import: common-all, common-exe
  type: exitcode-stdio-1.0
  hs-source-dirs: cli/test
  main-is: TastyDiscoverDriver.hs
  build-tool-depends:
    tasty-discover:tasty-discover
  build-depends:
    , base
    , waspc
    , cli-lib
    , QuickCheck            ^>= 2.14
    , tasty                 ^>= 1.4.2
    -- tasty-hspec 1.1.7 introduces breaking changes, which is why we have < 1.1.7 .
    , tasty-hspec           >= 1.1 && < 1.1.7
    , tasty-quickcheck      ^>= 0.10
  other-modules:
    DbMigrateTest
    TerminalTest
    Paths_waspc
    Wasp.Cli.Command.Telemetry.ProjectTest

test-suite e2e-test
  import: common-all, common-exe
  type: exitcode-stdio-1.0
  hs-source-dirs: e2e-test
  main-is: Main.hs
  build-tool-depends: waspc:wasp-cli
  build-depends:
    , waspc
    , aeson
    , directory
    , base
    , filepath
    , strong-path
    , text
    , mtl
    , bytestring
    , dir-traverse
    , aeson-pretty
    , process
    , tasty                 ^>= 1.4.2
    -- tasty-hspec 1.1.7 introduces breaking changes, which is why we have < 1.1.7 .
    , tasty-hspec           >= 1.1 && < 1.1.7
    , tasty-golden          ^>= 2.3.5
  other-modules:
    Common
    GoldenTest
    ShellCommands
    Util
    Tests.WaspBuildTest
    Tests.WaspCompileTest
    Tests.WaspJobTest
    Tests.WaspMigrateTest
    Tests.WaspNewTest
    Tests.WaspComplexTest