Releases: dan-cooke/remix-sse
@remix-sse/[email protected]
Patch Changes
- c5eb797: Allow the callback passed to EventStream to be async
@remix-sse/[email protected]
Patch Changes
- c5eb797: Allow the callback passed to EventStream to be async
@remix-sse/[email protected]
Major Changes
-
7178870: Split up the single
remix-sse
package into 2 seperate packages@remix-sse/client
and@remix-sse/server
Why
Exporting both the client and server code from a single package has never sat well with me, at the start I got by releasing a single package: remix-sse for server code and remix-sse/client for client code.
This works fine if you are trasnpiling CommonJS imports, but at some point recently create-remix has started every project with type: "module" (ES Modules).
So this made our import paths quite ugly:
remix-sse/client/index.js
-Not to mention this uglier syntax was less discoverable now by language servers.
How to migrate
- Find and replace
import 'remix-sse/client'
->import '@remix-sse/client'
- Find and replace
import 'remix-sse'
->import '@remix-sse'
- Find and replace
-
08b640b: Changes the API of the
EventStream
send function to make the eventKey default to 'message'Using the library myself in a few projects, I have found that I don't usually need to send multiple events from the same emitter, and one eventKey usually suffices. This change will make it more ergonomic for single event emitters, while remaining flexible for multi event emitters
How to migrate
The first argument of send is now just the data string you wish to send.
- If you want to allow multiple events from the same emitter you can specify an
eventKey
in the second argument - Otherwise you can just omit the eventKey all together
export const loader: LoaderFunction = ({ request }) => { return new EventStream(request, (send) => { let gIndex = 0; let g = setInterval(() => { gIndex += 1; --- send('message', JSON.stringify({ hello: 'world', index: gIndex })); +++ send(JSON.stringify({ hello: 'world', index: gIndex })); }, 1000);
return async () => {
clearInterval(g);
};
}); - If you want to allow multiple events from the same emitter you can specify an
};
@remix-sse/[email protected]
Major Changes
-
08b640b: Changes the API for
useSubscribe
to make an eventKey default to 'message'Using the library myself in a few projects, I have found that I don't usually need to send multiple events from the same emitter, and one eventKey usually suffices. This change will make it more ergonomic for single event emitters, while remaining flexible for multi event emitters
How to migrate
--- const data = useSubscribe('/emitter', 'event-key') +++ const data = useSubscribe('/emitter', { eventKey: 'event-key'})
Or if you want use the default
eventKey: 'message'
you can omit it entirelyconst data = useSubscribe('/emitter')
-
7178870: Split up the single
remix-sse
package into 2 seperate packages@remix-sse/client
and@remix-sse/server
Why
Exporting both the client and server code from a single package has never sat well with me, at the start I got by releasing a single package: remix-sse for server code and remix-sse/client for client code.
This works fine if you are trasnpiling CommonJS imports, but at some point recently create-remix has started every project with type: "module" (ES Modules).
So this made our import paths quite ugly:
remix-sse/client/index.js
-Not to mention this uglier syntax was less discoverable now by language servers.
How to migrate
- Find and replace
import 'remix-sse/client'
->import '@remix-sse/client'
- Find and replace
import 'remix-sse'
->import '@remix-sse'
- Find and replace
-
3159987: -
useSubscribe
changed to take anEventSource
- new
useEventStream
hook to be superseeduseSubscribe
as the ergonomic way of listening to events - removed
useEventSource
- removed
RemixSseProvider
No more boilerplate
I wasn't happy with the amount of boilerplate even after making several changes like making the eventKey default to 'message'
The library should not provide the context, if users want to share their event sources across their app they are free to do so, but
remix-sse
should not care about this.So the following changes all have the intention of making the library easier to get started with.
How to migrate
useSubscribe
now takes anEventSource
--- const data = useSubscribe('/emitter', 'event-key') +++ const data = useSubscribe(new EventSource('/emitter'), { eventKey: 'event-key'})
This was purely to make room for the next change
useEventStream
is the MVP nowUse this hook wherever possible, it will create the EventSource for you and call
useSubscribe
making sure
to not duplicate Eventsources to the same URL using a simple map.const data = useEventStream('/emitter')
Removed the context and useEventStream
No need for a context, we can just store a url -> event source map globally
- new
v5.0.0
v4.0.1
v4.0.0
v3.0.1
3.0.1 (2022-12-08)
This release contains the release notes from 3.0.0 as well because semantic release swallowed them up after a force push.
BREAKING CHANGES
useSse
removed. Users should now useuseSubscribe
anduseEventSource
individually
Features
- Improved
deserialize
typing useSubscribe
now only takes a single event key.
Bug Fixes
- Initial data is now
null