v0.9.0
Better SSE Version 0.9.0
npm install better-sse@latest
yarn add better-sse@latest
pnpm add better-sse@latest
This release includes some minor fixes and quality-of-life improvements to the TypeScript types shipped with Better SSE.
Changes
⚠ BREAKING: SessionState
interface renamed to DefaultSessionState
The exported SessionState
interface has been renamed to DefaultSessionState
.
This is to avoid confusion as the type of each sessions' state
property can vary between different session instances if you provide one as a generic argument to its constructor, whereas the exported interface here is designed to only be used to define the default type if you do not explicitly give one when you create the session.
// Before
declare module "better-sse" {
interface SessionState {
myProperty: string;
}
}
// After
declare module "better-sse" {
interface DefaultSessionState {
myProperty: string;
}
}
Strong typing for the session state
property of sessions registered with a channel
You can now pass an optional second generic argument to the Channel
constructor and the createChannel
factory function that allows you to define the type of the state
property for all Session
s registered to that channel.
This allows you to have strong typing when accessing the state
property of sessions in the activeSessions
list and in the filter
callback option in the broadcast
method, as well as allowing you to enforce that only sessions with the same state
type can be registered with that channel.
Strong typing for channel session states:
// Before
type AuthedSessionState = { isAdmin: boolean };
const channel = createChannel();
const session = createSession<AuthedSessionState>(req, res);
channel.register(session);
channel.activeSessions[0].state.isAdmin; // `unknown`
// After
type AuthedSessionState = { isAdmin: boolean };
const channel = createChannel<*, AuthedSessionState>(); // Provide the type for the state of every session on this channel
const session = createSession<AuthedSessionState>(req, res);
channel.register(session);
channel.activeSessions[0].state.isAdmin; // `boolean`
Only sessions with the same state type given to the channel may be registered:
const channel = createChannel<*, { propertyA: string }>();
const session = await createSession<{ propertyB: string }>(req, res);
channel.register(session); // TypeScript error! Only sessions with the same type can be registered
Channels may now have a default state type defined globally
A new DefaultChannelState
interface is exported that allows you to use module augmentation and declaration merging to define a default type for the Channel#state
property if you do not provide one during construction.
This functions identically to the DefaultSessionState
interface, but for Channel
s instead.
declare module "better-sse" {
interface DefaultChannelState {
myProperty: string;
}
}
Full Changelog
Added
- Added the ability to type the
state
property of sessions registered with a Channel via an optional second generic argument to theChannel
constructor. - Added the
DefaultChannelState
interface that may be used via module augmentation to alter the default channel state type for all channels.
Changed
- Update the
SessionState
interface to be namedDefaultSessionState
.