cabal-version:      2.4
name:               ema
version:            0.1.0.0
license:            AGPL-3.0-only
copyright:          2021 Sridhar Ratnakumar
maintainer:         srid@srid.ca
author:             Sridhar Ratnakumar
category:           Web
synopsis:           Static site generator library with hot reload
bug-reports:        https://github.com/srid/ema/issues
homepage:           https://ema.srid.ca/
description:
  Ema is a next-gen Haskell library for building jamstack-style static sites.
  Ema sites are change-aware; in addition to good ol’ static site generation,
  it provides a live server supporting fast hot-reload in the browser on code
  or data change.

extra-source-files:
  CHANGELOG.md
  LICENSE
  README.md

flag with-examples
  description: Include examples and their dependencies
  default:     True

flag with-helpers
  description: Include helper modules based on blaze-html
  default:     True

library
  -- Modules included in this executable, other than Main.
  -- other-modules:

  -- LANGUAGE extensions used by modules in this package.
  -- other-extensions:
  build-depends:
    , aeson
    , async
    , base                   >=4.13.0.0 && <=4.17.0.0
    , containers
    , data-default
    , directory
    , filepath
    , http-types
    , lvar
    , monad-logger
    , monad-logger-extras
    , neat-interpolation
    , optparse-applicative
    , relude
    , safe-exceptions
    , stm
    , text
    , unliftio
    , wai
    , wai-middleware-static
    , wai-websockets
    , warp
    , websockets

  if (flag(with-helpers) || flag(with-examples))
    build-depends:
      , blaze-html
      , blaze-markup
      , filepattern
      , fsnotify

    if flag(with-examples)
      build-depends:
        , commonmark
        , commonmark-extensions
        , commonmark-pandoc
        , pandoc-types
        , profunctors
        , shower
        , tagged
        , time

  mixins:
    base hiding (Prelude),
    relude (Relude as Prelude, Relude.Container.One),
    relude

  ghc-options:
    -Wall -Wincomplete-record-updates -Wincomplete-uni-patterns

  default-extensions:
    FlexibleContexts
    FlexibleInstances
    KindSignatures
    LambdaCase
    MultiParamTypeClasses
    MultiWayIf
    OverloadedStrings
    ScopedTypeVariables
    TupleSections
    ViewPatterns

  exposed-modules:
    Ema
    Ema.CLI

  if (flag(with-helpers) || flag(with-examples))
    exposed-modules:
      Ema.Helper.FileSystem
      Ema.Helper.Tailwind

  other-modules:
    Ema.App
    Ema.Class
    Ema.Generate
    Ema.Route
    Ema.Route.Slug
    Ema.Route.UrlStrategy
    Ema.Server

  if flag(with-examples)
    exposed-modules:
      Ema.Example.Ex01_HelloWorld
      Ema.Example.Ex02_Clock
      Ema.Example.Ex03_Documentation

  hs-source-dirs:     src
  default-language:   Haskell2010

executable ema-docs
  hs-source-dirs:   docs
  default-language: Haskell2010
  main-is:          Main.hs
  build-depends:
    , base
    , ema