packages feed

Cabal revisions of dnsbase-1.0.2.0

Hackage metadata revisions edit the .cabal file after upload; each diff below is one revision.

revision 1
-cabal-version:  3.12-name:           dnsbase-version:        1.0.2.0-build-type:     Simple-synopsis:       Stub DNS resolver with a typed RData model and value-based extension API--description:    A DNS stub resolver library for Haskell.  The IO layer is-                derived from Kazu Yamamoto's @dns@ package; what @dnsbase@-                adds is a rich set of RRtypes and a runtime-extensible-                RRtype data model with a simple configuration interface.-                .-                Every RR type's payload is modeled as a dedicated Haskell-                type — these include, for example, the recent SVCB and HTTPS-                service-binding records, with extensible up-to-date SvcParam-                coverage.  EDNS option support includes Extended DNS Errors-                (EDE) whose info-code name table is user-extensible.  Coverage-                of both widely used and historical DNS RR types is comprehensive-                — only the most marginal obsolete or experimental types remain-                unimplemented.-                .-                Applications can extend the library with any /missing/-                RRTYPEs, EDNS(0) options, SVCB and HTTPS SvcParam values.-                Application-specified data types take precedence over any-                existing or later added built-in implementations.-                .-                Extensions are registered by constructing a pure resolver-                configuration value, rather than via IO actions on mutable-                global state.  Adding custom data types to the library does not-                require a source-code fork.  See the-                <https://hackage-content.haskell.org/package/dnsbase-1.0.0.0/candidate/docs/Net-DNSBase-Extensible.html Net.DNSBase.Extensible>-                module for-                <https://hackage-content.haskell.org/package/dnsbase-1.0.0.0/candidate/docs/Net-DNSBase-Extensible.html#customRRtype detailed examples>-                .-                The library has been deployed as part of a DANE/DNSSEC survey-                for many years, and performs ~108 million queries each day,-                over approximately 3.5 hours (while also saving results to a-                database and performing some SMTP STARTTLS probes).  Domain-name-                parsing supports 8-bit RFC 1035 names directly and also-                supports pluggable @Text@-based parsers via external-                libraries, for example from the companion-                <https://hackage.haskell.org/package/idna2008 idna2008>-                package.-                .--license:        BSD-3-Clause-license-files:  LICENSE-                LICENSE.dns-author:         Viktor Dukhovni-maintainer:     ietf-dane@dukhovni.org-homepage:       https://github.com/dnsbase/dnsbase-bug-reports:    https://github.com/dnsbase/dnsbase/issues-copyright:      2018-2026 Viktor Dukhovni-category:       Network-tested-with: GHC == 9.10.3-           , GHC == 9.12.3-extra-source-files:-    CHANGELOG.md-    README.md--common all-  ghc-options: -O2 -Wall-  default-language: GHC2024-  default-extensions:-    BlockArguments-    DerivingVia-    MultiWayIf-    PatternSynonyms-    RequiredTypeArguments-    StrictData-    TypeFamilies-    ViewPatterns--common deps-  build-depends:-      base                  >=4.20      && <5-    , base16               ^>=1.0-    , base32                >=0.3       && <0.5-    , base64               ^>=1.0-    , bytestring            >=0.10.8    && <0.13-    , crypton               >=0.30      && <1.2-    , containers            >=0.6       && <0.9-    , deepseq              ^>=1.5-    , hashtables            >=1.2       && <1.6-    , hourglass            ^>=0.2.12-    , iproute              ^>=1.7.9-    , monad-ste            ^>=0.1-    , mtl                   >=2.2       && <2.4-    , network               >=3.1       && <3.3-    , primitive             >=0.8       && <0.10-    , template-haskell      >=2.22      && <2.25-    , text                  >=2.0       && <2.2-    , time                  >=1.11      && <1.16-    , transformers          >=0.5       && <2.7-    , unordered-containers ^>=0.2---- Shared source layout for both the main library and the--- test-only internal library.  Both compile the same .hs files--- under @src@ and @internal@; the two library stanzas differ--- only in which modules they expose.-common library-source-  hs-source-dirs: src internal---- Test-only sub-library that exposes every module of the package.--- Tests @build-depends: dnsbase:internal@ instead of @dnsbase@ so--- they can reach internal modules without going through a hidden--- import.  Built only when the package's test components are built.-library internal-  import: all, deps, library-source-  visibility: private-  exposed-modules:-    Net.DNSBase-    Net.DNSBase.Bytes-    Net.DNSBase.Decode.Domain-    Net.DNSBase.Decode.State-    Net.DNSBase.Domain-    Net.DNSBase.EDNS-    Net.DNSBase.EDNS.OptNum-    Net.DNSBase.EDNS.Option-    Net.DNSBase.EDNS.Option.ECS-    Net.DNSBase.EDNS.Option.EDE-    Net.DNSBase.EDNS.Option.NSID-    Net.DNSBase.EDNS.Option.Opaque-    Net.DNSBase.EDNS.Option.Secalgs-    Net.DNSBase.Encode.Metric-    Net.DNSBase.Encode.State-    Net.DNSBase.Error-    Net.DNSBase.Extensible-    Net.DNSBase.Flags-    Net.DNSBase.Lookup-    Net.DNSBase.Message-    Net.DNSBase.Nat16-    Net.DNSBase.NonEmpty-    Net.DNSBase.NsecTypes-    Net.DNSBase.Opcode-    Net.DNSBase.Present-    Net.DNSBase.RCODE-    Net.DNSBase.RData-    Net.DNSBase.RData.A-    Net.DNSBase.RData.CAA-    Net.DNSBase.RData.CSYNC-    Net.DNSBase.RData.Dnssec-    Net.DNSBase.RData.NSEC-    Net.DNSBase.RData.Obsolete-    Net.DNSBase.RData.SOA-    Net.DNSBase.RData.SRV-    Net.DNSBase.RData.SVCB-    Net.DNSBase.RData.SVCB.SPV-    Net.DNSBase.RData.SVCB.SPVList-    Net.DNSBase.RData.SVCB.SPVSet-    Net.DNSBase.RData.SVCB.SVCParamKey-    Net.DNSBase.RData.SVCB.SVCParamValue-    Net.DNSBase.RData.TLSA-    Net.DNSBase.RData.TXT-    Net.DNSBase.RData.WKS-    Net.DNSBase.RData.XNAME-    Net.DNSBase.RR-    Net.DNSBase.RRCLASS-    Net.DNSBase.RRTYPE-    Net.DNSBase.RRSet-    Net.DNSBase.Resolver-    Net.DNSBase.Secalgs-    Net.DNSBase.Text-    Net.DNSBase.Decode.Internal.Domain-    Net.DNSBase.Decode.Internal.Message-    Net.DNSBase.Decode.Internal.Option-    Net.DNSBase.Decode.Internal.RData-    Net.DNSBase.Decode.Internal.State-    Net.DNSBase.EDNS.Internal.OptNum-    Net.DNSBase.EDNS.Internal.Option-    Net.DNSBase.EDNS.Internal.Option.Opaque-    Net.DNSBase.Encode.Internal.Metric-    Net.DNSBase.Encode.Internal.State-    Net.DNSBase.Internal.Bytes-    Net.DNSBase.Internal.Domain-    Net.DNSBase.Internal.EDNS-    Net.DNSBase.Internal.Error-    Net.DNSBase.Internal.Flags-    Net.DNSBase.Internal.Message-    Net.DNSBase.Internal.NameComp-    Net.DNSBase.Internal.Nat16-    Net.DNSBase.Internal.Opcode-    Net.DNSBase.Internal.Peer-    Net.DNSBase.Internal.Present-    Net.DNSBase.Internal.RCODE-    Net.DNSBase.Internal.RData-    Net.DNSBase.Internal.RR-    Net.DNSBase.Internal.RRCLASS-    Net.DNSBase.Internal.RRTYPE-    Net.DNSBase.Internal.SockIO-    Net.DNSBase.Internal.Text-    Net.DNSBase.Internal.Transport-    Net.DNSBase.Internal.Util-    Net.DNSBase.RData.Internal.XNAME-    Net.DNSBase.Resolver.Internal.Encoding-    Net.DNSBase.Resolver.Internal.Parser-    Net.DNSBase.Resolver.Internal.Types---- The main library.  This is what downstream packages (and Hackage)--- see; @other-modules@ keeps the implementation hidden but compiled--- into the same library, so haddocks on internal symbols propagate--- to their public re-exports.-library-  import: all, deps, library-source-  exposed-modules:-    Net.DNSBase-    Net.DNSBase.Bytes-    Net.DNSBase.Decode.Domain-    Net.DNSBase.Decode.State-    Net.DNSBase.Domain-    Net.DNSBase.EDNS-    Net.DNSBase.EDNS.Option-    Net.DNSBase.EDNS.Option.ECS-    Net.DNSBase.EDNS.Option.EDE-    Net.DNSBase.EDNS.Option.NSID-    Net.DNSBase.EDNS.Option.Opaque-    Net.DNSBase.EDNS.Option.Secalgs-    Net.DNSBase.EDNS.OptNum-    Net.DNSBase.Encode.Metric-    Net.DNSBase.Encode.State-    Net.DNSBase.Error-    Net.DNSBase.Extensible-    Net.DNSBase.Flags-    Net.DNSBase.Lookup-    Net.DNSBase.Message-    Net.DNSBase.Nat16-    Net.DNSBase.NonEmpty-    Net.DNSBase.NsecTypes-    Net.DNSBase.Opcode-    Net.DNSBase.Present-    Net.DNSBase.RCODE-    Net.DNSBase.RData-    Net.DNSBase.RData.A-    Net.DNSBase.RData.CAA-    Net.DNSBase.RData.CSYNC-    Net.DNSBase.RData.Dnssec-    Net.DNSBase.RData.NSEC-    Net.DNSBase.RData.Obsolete-    Net.DNSBase.RData.SOA-    Net.DNSBase.RData.SRV-    Net.DNSBase.RData.SVCB-    Net.DNSBase.RData.SVCB.SPV-    Net.DNSBase.RData.SVCB.SPVList-    Net.DNSBase.RData.SVCB.SPVSet-    Net.DNSBase.RData.SVCB.SVCParamKey-    Net.DNSBase.RData.SVCB.SVCParamValue-    Net.DNSBase.RData.TLSA-    Net.DNSBase.RData.TXT-    Net.DNSBase.RData.WKS-    Net.DNSBase.RData.XNAME-    Net.DNSBase.Resolver-    Net.DNSBase.RR-    Net.DNSBase.RRCLASS-    Net.DNSBase.RRSet-    Net.DNSBase.RRTYPE-    Net.DNSBase.Secalgs-    Net.DNSBase.Text-  other-modules:-    Net.DNSBase.Decode.Internal.Domain-    Net.DNSBase.Decode.Internal.Message-    Net.DNSBase.Decode.Internal.Option-    Net.DNSBase.Decode.Internal.RData-    Net.DNSBase.Decode.Internal.State-    Net.DNSBase.EDNS.Internal.OptNum-    Net.DNSBase.EDNS.Internal.Option-    Net.DNSBase.EDNS.Internal.Option.Opaque-    Net.DNSBase.Encode.Internal.Metric-    Net.DNSBase.Encode.Internal.State-    Net.DNSBase.Internal.Bytes-    Net.DNSBase.Internal.Domain-    Net.DNSBase.Internal.EDNS-    Net.DNSBase.Internal.Error-    Net.DNSBase.Internal.Flags-    Net.DNSBase.Internal.Message-    Net.DNSBase.Internal.NameComp-    Net.DNSBase.Internal.Nat16-    Net.DNSBase.Internal.Opcode-    Net.DNSBase.Internal.Peer-    Net.DNSBase.Internal.Present-    Net.DNSBase.Internal.RCODE-    Net.DNSBase.Internal.RData-    Net.DNSBase.Internal.RR-    Net.DNSBase.Internal.RRCLASS-    Net.DNSBase.Internal.RRTYPE-    Net.DNSBase.Internal.SockIO-    Net.DNSBase.Internal.Text-    Net.DNSBase.Internal.Transport-    Net.DNSBase.Internal.Util-    Net.DNSBase.RData.Internal.XNAME-    Net.DNSBase.Resolver.Internal.Encoding-    Net.DNSBase.Resolver.Internal.Parser-    Net.DNSBase.Resolver.Internal.Types---- Test framework dependencies, split out so individual stanzas--- can opt in.-common test-deps-  build-depends:-      tasty-    , tasty-hunit-    , tasty-quickcheck--common test-  import: all, deps-  hs-source-dirs: tests-  build-depends: dnsbase:internal--test-suite domain-  import: test-  type: exitcode-stdio-1.0-  main-is: domain.hs--test-suite literals-  import: test-  type: exitcode-stdio-1.0-  main-is: literals.hs-  other-modules: LiteralsParser--test-suite message-  import: test-  type: exitcode-stdio-1.0-  main-is: message.hs--test-suite extensibility-  import: test, test-deps-  type: exitcode-stdio-1.0-  main-is: extensibility.hs--test-suite test-  import: test, test-deps-  type: exitcode-stdio-1.0-  main-is: test.hs--benchmark bench-  import: test-  hs-source-dirs: bench-  type: exitcode-stdio-1.0-  main-is: bench.hs-  build-depends:-      tasty-bench+cabal-version:  3.12
+name:           dnsbase
+version:        1.0.2.0
+x-revision: 1
+build-type:     Simple
+synopsis:       Stub DNS resolver with a typed RData model and value-based extension API
+
+description:    A DNS stub resolver library for Haskell.  The IO layer is
+                derived from Kazu Yamamoto's @dns@ package; what @dnsbase@
+                adds is a rich set of RRtypes and a runtime-extensible
+                RRtype data model with a simple configuration interface.
+
+                Every RR type's payload is modeled as a dedicated Haskell
+                type — these include, for example, the recent SVCB and HTTPS
+                service-binding records, with extensible up-to-date SvcParam
+                coverage.  EDNS option support includes Extended DNS Errors
+                (EDE) whose info-code name table is user-extensible.  Coverage
+                of both widely used and historical DNS RR types is comprehensive
+                — only the most marginal obsolete or experimental types remain
+                unimplemented.
+
+                Applications can extend the library with any /missing/
+                RRTYPEs, EDNS(0) options, SVCB and HTTPS SvcParam values.
+                Application-specified data types take precedence over any
+                existing or later added built-in implementations.
+
+                Extensions are registered by constructing a pure resolver
+                configuration value, rather than via IO actions on mutable
+                global state.  Adding custom data types to the library does not
+                require a source-code fork.  See the
+                <https://hackage-content.haskell.org/package/dnsbase-1.0.2.0/docs/Net-DNSBase-Extensible.html Net.DNSBase.Extensible>
+                module for
+                <https://hackage-content.haskell.org/package/dnsbase-1.0.2.0/docs/Net-DNSBase-Extensible.html#customRRtype detailed examples>
+
+                The library has been deployed as part of a DANE/DNSSEC survey
+                for many years, and performs ~108 million queries each day,
+                over approximately 3.5 hours (while also saving results to a
+                database and performing some SMTP STARTTLS probes).  Domain-name
+                parsing supports 8-bit RFC 1035 names directly and also
+                supports pluggable @Text@-based parsers via external
+                libraries, for example from the companion
+                <https://hackage.haskell.org/package/idna2008 idna2008>
+                package.
+
+license:        BSD-3-Clause
+license-files:  LICENSE
+                LICENSE.dns
+author:         Viktor Dukhovni
+maintainer:     ietf-dane@dukhovni.org
+homepage:       https://github.com/dnsbase/dnsbase
+bug-reports:    https://github.com/dnsbase/dnsbase/issues
+copyright:      2018-2026 Viktor Dukhovni
+category:       Network
+tested-with: GHC == 9.10.3
+           , GHC == 9.12.3
+extra-source-files:
+    CHANGELOG.md
+    README.md
+
+common all
+  ghc-options: -O2 -Wall
+  default-language: GHC2024
+  default-extensions:
+    BlockArguments
+    DerivingVia
+    MultiWayIf
+    PatternSynonyms
+    RequiredTypeArguments
+    StrictData
+    TypeFamilies
+    ViewPatterns
+
+common deps
+  build-depends:
+      base                  >=4.20      && <5
+    , base16               ^>=1.0
+    , base32                >=0.3       && <0.5
+    , base64               ^>=1.0
+    , bytestring            >=0.10.8    && <0.13
+    , crypton               >=0.30      && <1.2
+    , containers            >=0.6       && <0.9
+    , deepseq              ^>=1.5
+    , hashtables            >=1.2       && <1.6
+    , hourglass            ^>=0.2.12
+    , iproute              ^>=1.7.9
+    , monad-ste            ^>=0.1
+    , mtl                   >=2.2       && <2.4
+    , network               >=3.1       && <3.3
+    , primitive             >=0.8       && <0.10
+    , template-haskell      >=2.22      && <2.25
+    , text                  >=2.0       && <2.2
+    , time                  >=1.11      && <1.16
+    , transformers          >=0.5       && <2.7
+    , unordered-containers ^>=0.2
+
+-- Shared source layout for both the main library and the
+-- test-only internal library.  Both compile the same .hs files
+-- under @src@ and @internal@; the two library stanzas differ
+-- only in which modules they expose.
+common library-source
+  hs-source-dirs: src internal
+
+-- Test-only sub-library that exposes every module of the package.
+-- Tests @build-depends: dnsbase:internal@ instead of @dnsbase@ so
+-- they can reach internal modules without going through a hidden
+-- import.  Built only when the package's test components are built.
+library internal
+  import: all, deps, library-source
+  visibility: private
+  exposed-modules:
+    Net.DNSBase
+    Net.DNSBase.Bytes
+    Net.DNSBase.Decode.Domain
+    Net.DNSBase.Decode.State
+    Net.DNSBase.Domain
+    Net.DNSBase.EDNS
+    Net.DNSBase.EDNS.OptNum
+    Net.DNSBase.EDNS.Option
+    Net.DNSBase.EDNS.Option.ECS
+    Net.DNSBase.EDNS.Option.EDE
+    Net.DNSBase.EDNS.Option.NSID
+    Net.DNSBase.EDNS.Option.Opaque
+    Net.DNSBase.EDNS.Option.Secalgs
+    Net.DNSBase.Encode.Metric
+    Net.DNSBase.Encode.State
+    Net.DNSBase.Error
+    Net.DNSBase.Extensible
+    Net.DNSBase.Flags
+    Net.DNSBase.Lookup
+    Net.DNSBase.Message
+    Net.DNSBase.Nat16
+    Net.DNSBase.NonEmpty
+    Net.DNSBase.NsecTypes
+    Net.DNSBase.Opcode
+    Net.DNSBase.Present
+    Net.DNSBase.RCODE
+    Net.DNSBase.RData
+    Net.DNSBase.RData.A
+    Net.DNSBase.RData.CAA
+    Net.DNSBase.RData.CSYNC
+    Net.DNSBase.RData.Dnssec
+    Net.DNSBase.RData.NSEC
+    Net.DNSBase.RData.Obsolete
+    Net.DNSBase.RData.SOA
+    Net.DNSBase.RData.SRV
+    Net.DNSBase.RData.SVCB
+    Net.DNSBase.RData.SVCB.SPV
+    Net.DNSBase.RData.SVCB.SPVList
+    Net.DNSBase.RData.SVCB.SPVSet
+    Net.DNSBase.RData.SVCB.SVCParamKey
+    Net.DNSBase.RData.SVCB.SVCParamValue
+    Net.DNSBase.RData.TLSA
+    Net.DNSBase.RData.TXT
+    Net.DNSBase.RData.WKS
+    Net.DNSBase.RData.XNAME
+    Net.DNSBase.RR
+    Net.DNSBase.RRCLASS
+    Net.DNSBase.RRTYPE
+    Net.DNSBase.RRSet
+    Net.DNSBase.Resolver
+    Net.DNSBase.Secalgs
+    Net.DNSBase.Text
+    Net.DNSBase.Decode.Internal.Domain
+    Net.DNSBase.Decode.Internal.Message
+    Net.DNSBase.Decode.Internal.Option
+    Net.DNSBase.Decode.Internal.RData
+    Net.DNSBase.Decode.Internal.State
+    Net.DNSBase.EDNS.Internal.OptNum
+    Net.DNSBase.EDNS.Internal.Option
+    Net.DNSBase.EDNS.Internal.Option.Opaque
+    Net.DNSBase.Encode.Internal.Metric
+    Net.DNSBase.Encode.Internal.State
+    Net.DNSBase.Internal.Bytes
+    Net.DNSBase.Internal.Domain
+    Net.DNSBase.Internal.EDNS
+    Net.DNSBase.Internal.Error
+    Net.DNSBase.Internal.Flags
+    Net.DNSBase.Internal.Message
+    Net.DNSBase.Internal.NameComp
+    Net.DNSBase.Internal.Nat16
+    Net.DNSBase.Internal.Opcode
+    Net.DNSBase.Internal.Peer
+    Net.DNSBase.Internal.Present
+    Net.DNSBase.Internal.RCODE
+    Net.DNSBase.Internal.RData
+    Net.DNSBase.Internal.RR
+    Net.DNSBase.Internal.RRCLASS
+    Net.DNSBase.Internal.RRTYPE
+    Net.DNSBase.Internal.SockIO
+    Net.DNSBase.Internal.Text
+    Net.DNSBase.Internal.Transport
+    Net.DNSBase.Internal.Util
+    Net.DNSBase.RData.Internal.XNAME
+    Net.DNSBase.Resolver.Internal.Encoding
+    Net.DNSBase.Resolver.Internal.Parser
+    Net.DNSBase.Resolver.Internal.Types
+
+-- The main library.  This is what downstream packages (and Hackage)
+-- see; @other-modules@ keeps the implementation hidden but compiled
+-- into the same library, so haddocks on internal symbols propagate
+-- to their public re-exports.
+library
+  import: all, deps, library-source
+  exposed-modules:
+    Net.DNSBase
+    Net.DNSBase.Bytes
+    Net.DNSBase.Decode.Domain
+    Net.DNSBase.Decode.State
+    Net.DNSBase.Domain
+    Net.DNSBase.EDNS
+    Net.DNSBase.EDNS.Option
+    Net.DNSBase.EDNS.Option.ECS
+    Net.DNSBase.EDNS.Option.EDE
+    Net.DNSBase.EDNS.Option.NSID
+    Net.DNSBase.EDNS.Option.Opaque
+    Net.DNSBase.EDNS.Option.Secalgs
+    Net.DNSBase.EDNS.OptNum
+    Net.DNSBase.Encode.Metric
+    Net.DNSBase.Encode.State
+    Net.DNSBase.Error
+    Net.DNSBase.Extensible
+    Net.DNSBase.Flags
+    Net.DNSBase.Lookup
+    Net.DNSBase.Message
+    Net.DNSBase.Nat16
+    Net.DNSBase.NonEmpty
+    Net.DNSBase.NsecTypes
+    Net.DNSBase.Opcode
+    Net.DNSBase.Present
+    Net.DNSBase.RCODE
+    Net.DNSBase.RData
+    Net.DNSBase.RData.A
+    Net.DNSBase.RData.CAA
+    Net.DNSBase.RData.CSYNC
+    Net.DNSBase.RData.Dnssec
+    Net.DNSBase.RData.NSEC
+    Net.DNSBase.RData.Obsolete
+    Net.DNSBase.RData.SOA
+    Net.DNSBase.RData.SRV
+    Net.DNSBase.RData.SVCB
+    Net.DNSBase.RData.SVCB.SPV
+    Net.DNSBase.RData.SVCB.SPVList
+    Net.DNSBase.RData.SVCB.SPVSet
+    Net.DNSBase.RData.SVCB.SVCParamKey
+    Net.DNSBase.RData.SVCB.SVCParamValue
+    Net.DNSBase.RData.TLSA
+    Net.DNSBase.RData.TXT
+    Net.DNSBase.RData.WKS
+    Net.DNSBase.RData.XNAME
+    Net.DNSBase.Resolver
+    Net.DNSBase.RR
+    Net.DNSBase.RRCLASS
+    Net.DNSBase.RRSet
+    Net.DNSBase.RRTYPE
+    Net.DNSBase.Secalgs
+    Net.DNSBase.Text
+  other-modules:
+    Net.DNSBase.Decode.Internal.Domain
+    Net.DNSBase.Decode.Internal.Message
+    Net.DNSBase.Decode.Internal.Option
+    Net.DNSBase.Decode.Internal.RData
+    Net.DNSBase.Decode.Internal.State
+    Net.DNSBase.EDNS.Internal.OptNum
+    Net.DNSBase.EDNS.Internal.Option
+    Net.DNSBase.EDNS.Internal.Option.Opaque
+    Net.DNSBase.Encode.Internal.Metric
+    Net.DNSBase.Encode.Internal.State
+    Net.DNSBase.Internal.Bytes
+    Net.DNSBase.Internal.Domain
+    Net.DNSBase.Internal.EDNS
+    Net.DNSBase.Internal.Error
+    Net.DNSBase.Internal.Flags
+    Net.DNSBase.Internal.Message
+    Net.DNSBase.Internal.NameComp
+    Net.DNSBase.Internal.Nat16
+    Net.DNSBase.Internal.Opcode
+    Net.DNSBase.Internal.Peer
+    Net.DNSBase.Internal.Present
+    Net.DNSBase.Internal.RCODE
+    Net.DNSBase.Internal.RData
+    Net.DNSBase.Internal.RR
+    Net.DNSBase.Internal.RRCLASS
+    Net.DNSBase.Internal.RRTYPE
+    Net.DNSBase.Internal.SockIO
+    Net.DNSBase.Internal.Text
+    Net.DNSBase.Internal.Transport
+    Net.DNSBase.Internal.Util
+    Net.DNSBase.RData.Internal.XNAME
+    Net.DNSBase.Resolver.Internal.Encoding
+    Net.DNSBase.Resolver.Internal.Parser
+    Net.DNSBase.Resolver.Internal.Types
+
+-- Test framework dependencies, split out so individual stanzas
+-- can opt in.
+common test-deps
+  build-depends:
+      tasty
+    , tasty-hunit
+    , tasty-quickcheck
+
+common test
+  import: all, deps
+  hs-source-dirs: tests
+  build-depends: dnsbase:internal
+
+test-suite domain
+  import: test
+  type: exitcode-stdio-1.0
+  main-is: domain.hs
+
+test-suite literals
+  import: test
+  type: exitcode-stdio-1.0
+  main-is: literals.hs
+  other-modules: LiteralsParser
+
+test-suite message
+  import: test
+  type: exitcode-stdio-1.0
+  main-is: message.hs
+
+test-suite extensibility
+  import: test, test-deps
+  type: exitcode-stdio-1.0
+  main-is: extensibility.hs
+
+test-suite test
+  import: test, test-deps
+  type: exitcode-stdio-1.0
+  main-is: test.hs
+
+benchmark bench
+  import: test
+  hs-source-dirs: bench
+  type: exitcode-stdio-1.0
+  main-is: bench.hs
+  build-depends:
+      tasty-bench
revision 2
 cabal-version:  3.12
 name:           dnsbase
 version:        1.0.2.0
-x-revision: 1
+x-revision: 2
 build-type:     Simple
 synopsis:       Stub DNS resolver with a typed RData model and value-based extension API
 
                 require a source-code fork.  See the
                 <https://hackage-content.haskell.org/package/dnsbase-1.0.2.0/docs/Net-DNSBase-Extensible.html Net.DNSBase.Extensible>
                 module for
-                <https://hackage-content.haskell.org/package/dnsbase-1.0.2.0/docs/Net-DNSBase-Extensible.html#customRRtype detailed examples>
+                <https://hackage-content.haskell.org/package/dnsbase-1.0.2.0/docs/Net-DNSBase-Extensible.html#customRRtype detailed examples>.
 
                 The library has been deployed as part of a DANE/DNSSEC survey
                 for many years, and performs ~108 million queries each day,
 copyright:      2018-2026 Viktor Dukhovni
 category:       Network
 tested-with: GHC == 9.10.3
-           , GHC == 9.12.3
+           , GHC == 9.12.4
 extra-source-files:
     CHANGELOG.md
     README.md