cabal-version:      3.0
name:               aeson-generics-typescript
version:            0.0.0.1
synopsis:
  Generates TypeScript definitions that match Generic Aeson encodings

description:
  This project uses GHC.Generics to generate TypeScript type definitions that match the Generic Aseon encoding for the same type.
  Included here are tests that round trip by compling the TypeScript with tsc, and checking that generated values type check.

category:           Web
author:             Platonic.Systems
maintainer:         info@Platonic.Systems
copyright:          2023
license:            BSD-3-Clause
license-file:       LICENSE
build-type:         Simple
extra-source-files: README.md

source-repository head
  type: git
  location: https://gitlab.com/platonic/aeson-generics-typescript.git

common shared
  default-language:   GHC2021
  default-extensions:
    AllowAmbiguousTypes
    ApplicativeDo
    BlockArguments
    CPP
    DataKinds
    DefaultSignatures
    DeriveAnyClass
    DerivingStrategies
    DerivingVia
    DuplicateRecordFields
    ExtendedDefaultRules
    FunctionalDependencies
    GADTs
    ImpredicativeTypes
    LambdaCase
    LinearTypes
    MultiWayIf
    OverloadedLabels
    OverloadedStrings
    PartialTypeSignatures
    PatternSynonyms
    QuantifiedConstraints
    RecordWildCards
    RoleAnnotations
    TypeFamilies
    TypeFamilyDependencies
    UndecidableInstances
    ViewPatterns

library
  import:          shared
  hs-source-dirs:  src
  exposed-modules: Data.Aeson.Generics.TypeScript
  hs-source-dirs:  src
  ghc-options:
    -Weverything -Wno-all-missed-specialisations -Wno-implicit-prelude
    -Wno-missing-local-signatures -Wno-missing-import-lists
    -Wno-missing-export-lists -Wno-missing-safe-haskell-mode
    -Wno-prepositive-qualified-module -Wno-safe -Wno-unsafe

  build-depends:
    , base
    , containers
    , string-interpolate
    , text
    , time

executable tests
  import:         shared
  main-is:        Main.hs
  hs-source-dirs: test src
  ghc-options:
    -Wall -Wcompat -fwarn-redundant-constraints
    -fwarn-incomplete-uni-patterns -fwarn-tabs
    -fwarn-incomplete-record-updates -fwarn-identities -threaded
    -fno-warn-missing-home-modules -rtsopts -freduction-depth=1000
    -with-rtsopts=-N +RTS -H2G -A32M -RTS

  build-depends:
    , aeson               >=2.1.2  && <2.2
    , base                >=4.17.2 && <4.18
    , bytestring          >=0.11.5 && <0.12
    , containers          >=0.6.7  && <0.7
    , directory           >=1.3.7  && <1.4
    , filepath            >=1.4.2  && <1.5
    , hspec               >=2.11.7 && <2.12
    , process             >=1.6.17 && <1.7
    , QuickCheck          >=2.14.3 && <2.15
    , random              >=1.2.1  && <1.3
    , split               >=0.2.4  && <0.3
    , string-interpolate  >=0.3.2  && <0.4
    , text                >=2.0.2  && <2.1
    , time                >=1.12.2 && <1.13

  other-modules:
    Data.Aeson.Generics.TypeScript
    Data.Aeson.Generics.TypeScript.AesonSpec
    Data.Aeson.Generics.TypeScript.ASTSpec
    Data.Aeson.Generics.TypeScript.PrintSpec
    Data.Aeson.Generics.TypeScript.Types