Skip to content

Commit

Permalink
feat(use): Generic for extending the context extras
Browse files Browse the repository at this point in the history
Closes #189
  • Loading branch information
enisdenjo committed May 30, 2021
1 parent e3b81fa commit 401cd4c
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 12 deletions.
10 changes: 8 additions & 2 deletions docs/modules/use_uwebsockets.md
Original file line number Diff line number Diff line change
Expand Up @@ -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**<E\>(`options`: [*ServerOptions*](../interfaces/server.serveroptions.md)<[*Extra*](../interfaces/use_uwebsockets.extra.md) & *Partial*<E\>\>, `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*<PropertyKey, unknown\> | *Record*<PropertyKey, never\> |

#### 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*<E\>\> | - |
| `behavior` | uWS.WebSocketBehavior | {} |
| `keepAlive` | *number* | - |

Expand Down
10 changes: 8 additions & 2 deletions docs/modules/use_ws.md
Original file line number Diff line number Diff line change
Expand Up @@ -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**<E\>(`options`: [*ServerOptions*](../interfaces/server.serveroptions.md)<[*Extra*](../interfaces/use_ws.extra.md) & *Partial*<E\>\>, `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*<PropertyKey, unknown\> | *Record*<PropertyKey, never\> |

#### 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*<E\>\> |
| `ws` | WebSocketServer |
| `keepAlive` | *number* |

Expand Down
10 changes: 6 additions & 4 deletions src/use/uWebSockets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,10 @@ interface Client {
*
* @category Server/uWebSockets
*/
export function makeBehavior(
options: ServerOptions<Extra>,
export function makeBehavior<
E extends Record<PropertyKey, unknown> = Record<PropertyKey, never>
>(
options: ServerOptions<Extra & Partial<E>>,
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))
Expand All @@ -44,7 +46,7 @@ export function makeBehavior(
keepAlive = 12 * 1000,
): uWS.WebSocketBehavior {
const isProd = process.env.NODE_ENV === 'production';
const server = makeServer<Extra>(options);
const server = makeServer(options);
const clients = new Map<uWS.WebSocket, Client>();

let onDrain = () => {
Expand Down Expand Up @@ -113,7 +115,7 @@ export function makeBehavior(
},
onMessage: (cb) => (client.handleMessage = cb),
},
{ socket, request },
{ socket, request } as Extra & Partial<E>,
);

if (keepAlive > 0 && isFinite(keepAlive)) {
Expand Down
10 changes: 6 additions & 4 deletions src/use/ws.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,10 @@ export interface Extra {
*
* @category Server/ws
*/
export function useServer(
options: ServerOptions<Extra>,
export function useServer<
E extends Record<PropertyKey, unknown> = Record<PropertyKey, never>
>(
options: ServerOptions<Extra & Partial<E>>,
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))
Expand All @@ -43,7 +45,7 @@ export function useServer(
keepAlive = 12 * 1000,
): Disposable {
const isProd = process.env.NODE_ENV === 'production';
const server = makeServer<Extra>(options);
const server = makeServer(options);

ws.on('error', (err) => {
// catch the first thrown error and re-throw it once all clients have been notified
Expand Down Expand Up @@ -104,7 +106,7 @@ export function useServer(
}
}),
},
{ socket, request },
{ socket, request } as Extra & Partial<E>,
);

socket.once('close', (code, reason) => {
Expand Down

0 comments on commit 401cd4c

Please sign in to comment.