From 401cd4ce335e11dcf139502da3aa7dc1f23651c5 Mon Sep 17 00:00:00 2001 From: enisdenjo Date: Sun, 30 May 2021 19:55:49 +0200 Subject: [PATCH] feat(use): Generic for extending the context extras Closes #189 --- docs/modules/use_uwebsockets.md | 10 ++++++++-- docs/modules/use_ws.md | 10 ++++++++-- src/use/uWebSockets.ts | 10 ++++++---- src/use/ws.ts | 10 ++++++---- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/docs/modules/use_uwebsockets.md b/docs/modules/use_uwebsockets.md index 2bbd7f82..a45bd96e 100644 --- a/docs/modules/use_uwebsockets.md +++ b/docs/modules/use_uwebsockets.md @@ -16,16 +16,22 @@ ### makeBehavior -▸ **makeBehavior**(`options`: [*ServerOptions*](../interfaces/server.serveroptions.md)<[*Extra*](../interfaces/use_uwebsockets.extra.md)\>, `behavior?`: uWS.WebSocketBehavior, `keepAlive?`: *number*): uWS.WebSocketBehavior +▸ **makeBehavior**(`options`: [*ServerOptions*](../interfaces/server.serveroptions.md)<[*Extra*](../interfaces/use_uwebsockets.extra.md) & *Partial*\>, `behavior?`: uWS.WebSocketBehavior, `keepAlive?`: *number*): uWS.WebSocketBehavior Make the behaviour for using a [uWebSockets.js](https://github.com/uNetworking/uWebSockets.js) WebSocket server. This is a basic starter, feel free to copy the code over and adjust it to your needs +#### Type parameters + +| Name | Type | Default | +| :------ | :------ | :------ | +| `E` | *Record* | *Record* | + #### Parameters | Name | Type | Default value | | :------ | :------ | :------ | -| `options` | [*ServerOptions*](../interfaces/server.serveroptions.md)<[*Extra*](../interfaces/use_uwebsockets.extra.md)\> | - | +| `options` | [*ServerOptions*](../interfaces/server.serveroptions.md)<[*Extra*](../interfaces/use_uwebsockets.extra.md) & *Partial*\> | - | | `behavior` | uWS.WebSocketBehavior | {} | | `keepAlive` | *number* | - | diff --git a/docs/modules/use_ws.md b/docs/modules/use_ws.md index 0047e669..755db5a1 100644 --- a/docs/modules/use_ws.md +++ b/docs/modules/use_ws.md @@ -16,16 +16,22 @@ ### useServer -▸ **useServer**(`options`: [*ServerOptions*](../interfaces/server.serveroptions.md)<[*Extra*](../interfaces/use_ws.extra.md)\>, `ws`: WebSocketServer, `keepAlive?`: *number*): [*Disposable*](../interfaces/common.disposable.md) +▸ **useServer**(`options`: [*ServerOptions*](../interfaces/server.serveroptions.md)<[*Extra*](../interfaces/use_ws.extra.md) & *Partial*\>, `ws`: WebSocketServer, `keepAlive?`: *number*): [*Disposable*](../interfaces/common.disposable.md) Use the server on a [ws](https://github.com/websockets/ws) ws server. This is a basic starter, feel free to copy the code over and adjust it to your needs +#### Type parameters + +| Name | Type | Default | +| :------ | :------ | :------ | +| `E` | *Record* | *Record* | + #### Parameters | Name | Type | | :------ | :------ | -| `options` | [*ServerOptions*](../interfaces/server.serveroptions.md)<[*Extra*](../interfaces/use_ws.extra.md)\> | +| `options` | [*ServerOptions*](../interfaces/server.serveroptions.md)<[*Extra*](../interfaces/use_ws.extra.md) & *Partial*\> | | `ws` | WebSocketServer | | `keepAlive` | *number* | diff --git a/src/use/uWebSockets.ts b/src/use/uWebSockets.ts index 6ad420cb..eab56670 100644 --- a/src/use/uWebSockets.ts +++ b/src/use/uWebSockets.ts @@ -31,8 +31,10 @@ interface Client { * * @category Server/uWebSockets */ -export function makeBehavior( - options: ServerOptions, +export function makeBehavior< + E extends Record = Record +>( + options: ServerOptions>, behavior: uWS.WebSocketBehavior = {}, /** * The timout between dispatched keep-alive messages. Internally uses the [ws Ping and Pongs]((https://developer.mozilla.org/en-US/docs/Web/API/wss_API/Writing_ws_servers#Pings_and_Pongs_The_Heartbeat_of_wss)) @@ -44,7 +46,7 @@ export function makeBehavior( keepAlive = 12 * 1000, ): uWS.WebSocketBehavior { const isProd = process.env.NODE_ENV === 'production'; - const server = makeServer(options); + const server = makeServer(options); const clients = new Map(); let onDrain = () => { @@ -113,7 +115,7 @@ export function makeBehavior( }, onMessage: (cb) => (client.handleMessage = cb), }, - { socket, request }, + { socket, request } as Extra & Partial, ); if (keepAlive > 0 && isFinite(keepAlive)) { diff --git a/src/use/ws.ts b/src/use/ws.ts index e8869f54..f0f5f448 100644 --- a/src/use/ws.ts +++ b/src/use/ws.ts @@ -30,8 +30,10 @@ export interface Extra { * * @category Server/ws */ -export function useServer( - options: ServerOptions, +export function useServer< + E extends Record = Record +>( + options: ServerOptions>, ws: WebSocketServer, /** * The timout between dispatched keep-alive messages. Internally uses the [ws Ping and Pongs]((https://developer.mozilla.org/en-US/docs/Web/API/wss_API/Writing_ws_servers#Pings_and_Pongs_The_Heartbeat_of_wss)) @@ -43,7 +45,7 @@ export function useServer( keepAlive = 12 * 1000, ): Disposable { const isProd = process.env.NODE_ENV === 'production'; - const server = makeServer(options); + const server = makeServer(options); ws.on('error', (err) => { // catch the first thrown error and re-throw it once all clients have been notified @@ -104,7 +106,7 @@ export function useServer( } }), }, - { socket, request }, + { socket, request } as Extra & Partial, ); socket.once('close', (code, reason) => {