packages feed

servant-event-stream-0.4.0.1: CHANGELOG.md

# Revision history for servant-event-stream

## 0.4.0.1 -- 2026-03-01

* Fix haddock markup in module header (`t'JsonData'` rendered literally).

## 0.4.0.0 -- 2026-02-27

* **Breaking**: Add `eventComment` and `eventRetry` fields to `ServerEvent`.
  Existing code using the `ServerEvent` constructor must add the new fields,
  e.g. `ServerEvent typ eid dat Nothing Nothing`.
* **Breaking**: Drop `charset=utf-8` from the `Accept` instance. The content
  type is now `text/event-stream` (no parameters), matching the WHATWG spec.
* **New dependency**: `aeson` (for JSON helpers).
* **New dependency**: `servant-client-core` (for `HasClient` instances).
* Add `serverEvent` convenience constructor matching the old 3-field API for easy migration.
* Add `dataEvent` convenience constructor for simple data-only events.
* Add `commentEvent` convenience constructor for heartbeat keepalives.
* Add `retryEvent` convenience constructor for setting client reconnection delay.
* Export `encodeServerEvent` for direct use outside of Servant.
* Add `FromServerEvent` typeclass and `decodeServerEvent` for parsing SSE events.
* Add `MimeUnrender EventStream` and `FramingUnrender ServerEventFraming` instances
  for consuming SSE streams.
* Add `HasClient` instances for `ServerSentEvents` and `PostServerSentEvents`,
  enabling client-side SSE consumption via `servant-client`.
* Add `PostServerSentEvents` combinator for POST SSE endpoints (e.g. OpenAI's
  streaming API), with `HasServer`, `HasClient`, and `HasForeign` instances.
* Add `JsonData` newtype for deriving `ToServerEvent` and `FromServerEvent` via
  JSON encoding using `DerivingVia`.
* Add `jsonEvent` helper to construct events with JSON-encoded data payloads.
* Add `jsonData` helper to decode JSON from an event's data field.
* Strip leading UTF-8 BOM from SSE input, per the WHATWG spec.
* Export `ServerEventFraming` (needed for `StreamPost` SSE endpoints).
* Always emit at least one `data:` field, even when `eventData` is empty.
  Previously, empty data produced no output and the event was silently
  dropped by clients.
* Sanitize `eventType`, `eventId`, and `eventComment` by stripping CR and LF
  characters to prevent malformed SSE output.
* Strip NULL characters from `eventId` (the SSE spec silently ignores ids
  containing NULL).

## 0.3.2.1 -- 2026-02-27

* Add guard space after colon in SSE field encoding. Without it, field values
  starting with a space lost their leading space because the SSE spec strips
  exactly one leading space from field values. (Issue #16)
* Add unit tests for `encodeServerEvent`.

## 0.3.2.0 -- 2026-02-23

* Support GHC 8.6 through 9.12 (base 4.12 to 4.21).
* Remove redundant `Typeable` deriving to fix `-Wderiving-typeable` warning on GHC 9.12+.
* Add CI test matrix for GHC 8.6, 8.10, 9.2, 9.8, 9.12.

## 0.3.1.1 -- 2026-02-23

* Constrain base bounds in test suite to match library.

## 0.3.1.0 -- 2025-08-21

* Qualify `servant` imports so that `ServerSentEvents` added in `servant-0.20.3.0` does not conflict with ours. (Issue #12)

## 0.3.0.0 -- 2024-09-05

* Breaking changes to the API.

    Event streams are implemented using servant's 'Stream' endpoint. You should
    provide a handler that returns a stream of events that implements
    'ToSourceIO' where events have a 'ToServerEvent' instance.

    Example:

    > type MyApi = "books" :> ServerSentEvents (SourceIO Book)
    >
    > instance ToServerEvent Book where
    >   toServerEvent book = ...
    >
    > server :: Server MyApi
    > server = streamBooks
    >   where streamBooks :: Handler (SourceIO Book)
    >         streamBooks = pure $ source [book1, ...]

## 0.2.1.0 -- 2021-04-21

* Import `Data.Semigroup` for base < 4.11.0

## 0.2.0.0 -- 2021-04-20

* `Servant.EventStream` was moved to `Servant.API.EventStream` to adhere existing [upstream layout](https://hackage.haskell.org/package/servant-0.18.2/docs/Servant-API-Stream.html).

## 0.1.0.0 -- 2018-04-30

* First version. Released on an unsuspecting world.