@nestjs/platform-ws 10.4.11 → 11.0.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,6 +4,14 @@ import { MessageMappingProperties } from '@nestjs/websockets/gateway-metadata-ex
4
4
  import * as http from 'http';
5
5
  import { Observable } from 'rxjs';
6
6
  type WsServerRegistryEntry = any[];
7
+ type WsData = string | Buffer | ArrayBuffer | Buffer[];
8
+ type WsMessageParser = (data: WsData) => {
9
+ event: string;
10
+ data: any;
11
+ } | void;
12
+ type WsAdapterOptions = {
13
+ messageParser?: WsMessageParser;
14
+ };
7
15
  /**
8
16
  * @publicApi
9
17
  */
@@ -11,7 +19,8 @@ export declare class WsAdapter extends AbstractWsAdapter {
11
19
  protected readonly logger: Logger;
12
20
  protected readonly httpServersRegistry: Map<number, any>;
13
21
  protected readonly wsServersRegistry: Map<number, WsServerRegistryEntry>;
14
- constructor(appOrHttpServer?: INestApplicationContext | any);
22
+ protected messageParser: WsMessageParser;
23
+ constructor(appOrHttpServer?: INestApplicationContext | object, options?: WsAdapterOptions);
15
24
  create(port: number, options?: Record<string, any> & {
16
25
  namespace?: string;
17
26
  server?: any;
@@ -23,7 +32,8 @@ export declare class WsAdapter extends AbstractWsAdapter {
23
32
  bindClientDisconnect(client: any, callback: Function): void;
24
33
  close(server: any): Promise<void>;
25
34
  dispose(): Promise<void>;
26
- protected ensureHttpServerExists(port: number, httpServer?: http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>): http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>;
35
+ setMessageParser(parser: WsMessageParser): void;
36
+ protected ensureHttpServerExists(port: number, httpServer?: http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>): http.Server<typeof http.IncomingMessage, typeof http.ServerResponse> | undefined;
27
37
  protected addWsServerToRegistry<T extends Record<'path', string> = any>(wsServer: T, port: number, path: string): void;
28
38
  }
29
39
  export {};
@@ -22,12 +22,18 @@ const UNDERLYING_HTTP_SERVER_PORT = 0;
22
22
  * @publicApi
23
23
  */
24
24
  class WsAdapter extends websockets_1.AbstractWsAdapter {
25
- constructor(appOrHttpServer) {
25
+ constructor(appOrHttpServer, options) {
26
26
  super(appOrHttpServer);
27
27
  this.logger = new common_1.Logger(WsAdapter.name);
28
28
  this.httpServersRegistry = new Map();
29
29
  this.wsServersRegistry = new Map();
30
+ this.messageParser = (data) => {
31
+ return JSON.parse(data.toString());
32
+ };
30
33
  wsPackage = (0, load_package_util_1.loadPackage)('ws', 'WsAdapter', () => require('ws'));
34
+ if (options?.messageParser) {
35
+ this.messageParser = options.messageParser;
36
+ }
31
37
  }
32
38
  create(port, options) {
33
39
  const { server, path, ...wsOptions } = options;
@@ -83,7 +89,10 @@ class WsAdapter extends websockets_1.AbstractWsAdapter {
83
89
  }
84
90
  bindMessageHandler(buffer, handlersMap, transform) {
85
91
  try {
86
- const message = JSON.parse(buffer.data);
92
+ const message = this.messageParser(buffer.data);
93
+ if (!message) {
94
+ return rxjs_1.EMPTY;
95
+ }
87
96
  const messageHandler = handlersMap.get(message.event);
88
97
  const { callback } = messageHandler;
89
98
  return transform(callback(message.data, message.event));
@@ -101,7 +110,7 @@ class WsAdapter extends websockets_1.AbstractWsAdapter {
101
110
  client.on(constants_1.CLOSE_EVENT, callback);
102
111
  }
103
112
  async close(server) {
104
- const closeEventSignal = new Promise((resolve, reject) => server.close(err => (err ? reject(err) : resolve(undefined))));
113
+ const closeEventSignal = new Promise((resolve, reject) => server.close((err) => (err ? reject(err) : resolve(undefined))));
105
114
  for (const ws of server.clients) {
106
115
  ws.terminate();
107
116
  }
@@ -115,6 +124,9 @@ class WsAdapter extends websockets_1.AbstractWsAdapter {
115
124
  this.httpServersRegistry.clear();
116
125
  this.wsServersRegistry.clear();
117
126
  }
127
+ setMessageParser(parser) {
128
+ this.messageParser = parser;
129
+ }
118
130
  ensureHttpServerExists(port, httpServer = http.createServer()) {
119
131
  if (this.httpServersRegistry.has(port)) {
120
132
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestjs/platform-ws",
3
- "version": "10.4.11",
3
+ "version": "11.0.0-next.2",
4
4
  "description": "Nest - modern, fast, powerful node.js web framework (@platform-ws)",
5
5
  "author": "Kamil Mysliwiec",
6
6
  "license": "MIT",