@nestjs/platform-ws 11.1.16 → 12.0.0-alpha.0

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.
@@ -1 +1 @@
1
- export * from './ws-adapter';
1
+ export * from './ws-adapter.js';
package/adapters/index.js CHANGED
@@ -1,4 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./ws-adapter"), exports);
1
+ export * from './ws-adapter.js';
@@ -1,8 +1,8 @@
1
- import { INestApplicationContext, Logger } from '@nestjs/common';
1
+ import { type INestApplicationContext, Logger } from '@nestjs/common';
2
2
  import { AbstractWsAdapter } from '@nestjs/websockets';
3
- import { MessageMappingProperties } from '@nestjs/websockets/gateway-metadata-explorer';
4
3
  import * as http from 'http';
5
4
  import { Observable } from 'rxjs';
5
+ import type { MessageMappingProperties } from '@nestjs/websockets';
6
6
  type WsServerRegistryEntry = any[];
7
7
  type WsData = string | Buffer | ArrayBuffer | Buffer[];
8
8
  type WsMessageParser = (data: WsData) => {
@@ -1,14 +1,11 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WsAdapter = void 0;
4
- const common_1 = require("@nestjs/common");
5
- const load_package_util_1 = require("@nestjs/common/utils/load-package.util");
6
- const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
7
- const websockets_1 = require("@nestjs/websockets");
8
- const constants_1 = require("@nestjs/websockets/constants");
9
- const http = require("http");
10
- const rxjs_1 = require("rxjs");
11
- const operators_1 = require("rxjs/operators");
1
+ import { Logger } from '@nestjs/common';
2
+ import { AbstractWsAdapter } from '@nestjs/websockets';
3
+ import * as http from 'http';
4
+ import { createRequire } from 'module';
5
+ import { EMPTY, fromEvent } from 'rxjs';
6
+ import { filter, first, mergeMap, share, takeUntil } from 'rxjs/operators';
7
+ import { loadPackageSync, isNil, normalizePath } from '@nestjs/common/internal';
8
+ import { CLOSE_EVENT, CONNECTION_EVENT, ERROR_EVENT, } from '@nestjs/websockets/internal';
12
9
  let wsPackage = {};
13
10
  var READY_STATE;
14
11
  (function (READY_STATE) {
@@ -21,16 +18,21 @@ const UNDERLYING_HTTP_SERVER_PORT = 0;
21
18
  /**
22
19
  * @publicApi
23
20
  */
24
- class WsAdapter extends websockets_1.AbstractWsAdapter {
21
+ export class WsAdapter extends AbstractWsAdapter {
22
+ logger = new Logger(WsAdapter.name);
23
+ httpServersRegistry = new Map();
24
+ wsServersRegistry = new Map();
25
+ messageParser = (data) => {
26
+ return JSON.parse(data.toString());
27
+ };
25
28
  constructor(appOrHttpServer, options) {
26
29
  super(appOrHttpServer);
27
- this.logger = new common_1.Logger(WsAdapter.name);
28
- this.httpServersRegistry = new Map();
29
- this.wsServersRegistry = new Map();
30
- this.messageParser = (data) => {
31
- return JSON.parse(data.toString());
32
- };
33
- wsPackage = (0, load_package_util_1.loadPackage)('ws', 'WsAdapter', () => require('ws'));
30
+ wsPackage = loadPackageSync('ws', 'WsAdapter', () => createRequire(import.meta.url)('ws'));
31
+ // Normalize CJS/ESM: In CJS, require('ws') returns WebSocket with .Server.
32
+ // We need .Server for creating WebSocketServer instances.
33
+ if (!wsPackage.Server) {
34
+ wsPackage = { ...wsPackage, Server: wsPackage.WebSocketServer };
35
+ }
34
36
  if (options?.messageParser) {
35
37
  this.messageParser = options.messageParser;
36
38
  }
@@ -77,8 +79,8 @@ class WsAdapter extends websockets_1.AbstractWsAdapter {
77
79
  bindMessageHandlers(client, handlers, transform) {
78
80
  const handlersMap = new Map();
79
81
  handlers.forEach(handler => handlersMap.set(handler.message, handler));
80
- const close$ = (0, rxjs_1.fromEvent)(client, constants_1.CLOSE_EVENT).pipe((0, operators_1.share)(), (0, operators_1.first)());
81
- const source$ = (0, rxjs_1.fromEvent)(client, 'message').pipe((0, operators_1.mergeMap)(data => this.bindMessageHandler(data, handlersMap, transform).pipe((0, operators_1.filter)(result => !(0, shared_utils_1.isNil)(result)))), (0, operators_1.takeUntil)(close$));
82
+ const close$ = fromEvent(client, CLOSE_EVENT).pipe(share(), first());
83
+ const source$ = fromEvent(client, 'message').pipe(mergeMap(data => this.bindMessageHandler(data, handlersMap, transform).pipe(filter(result => !isNil(result)))), takeUntil(close$));
82
84
  const onMessage = (response) => {
83
85
  if (client.readyState !== READY_STATE.OPEN_STATE) {
84
86
  return;
@@ -91,28 +93,30 @@ class WsAdapter extends websockets_1.AbstractWsAdapter {
91
93
  try {
92
94
  const message = this.messageParser(buffer.data);
93
95
  if (!message) {
94
- return rxjs_1.EMPTY;
96
+ return EMPTY;
95
97
  }
96
98
  const messageHandler = handlersMap.get(message.event);
97
99
  const { callback } = messageHandler;
98
100
  return transform(callback(message.data, message.event));
99
101
  }
100
102
  catch {
101
- return rxjs_1.EMPTY;
103
+ return EMPTY;
102
104
  }
103
105
  }
104
106
  bindErrorHandler(server) {
105
- server.on(constants_1.CONNECTION_EVENT, (ws) => ws.on(constants_1.ERROR_EVENT, (err) => this.logger.error(err)));
106
- server.on(constants_1.ERROR_EVENT, (err) => this.logger.error(err));
107
+ server.on(CONNECTION_EVENT, (ws) => ws.on(ERROR_EVENT, (err) => this.logger.error(err)));
108
+ server.on(ERROR_EVENT, (err) => this.logger.error(err));
107
109
  return server;
108
110
  }
109
111
  bindClientDisconnect(client, callback) {
110
- client.on(constants_1.CLOSE_EVENT, callback);
112
+ client.on(CLOSE_EVENT, callback);
111
113
  }
112
114
  async close(server) {
113
115
  const closeEventSignal = new Promise((resolve, reject) => server.close((err) => (err ? reject(err) : resolve(undefined))));
114
- for (const ws of server.clients) {
115
- ws.terminate();
116
+ if (server.clients) {
117
+ for (const ws of server.clients) {
118
+ ws.terminate();
119
+ }
116
120
  }
117
121
  await closeEventSignal;
118
122
  }
@@ -152,7 +156,7 @@ class WsAdapter extends websockets_1.AbstractWsAdapter {
152
156
  }
153
157
  }
154
158
  catch (err) {
155
- socket.end('HTTP/1.1 400\r\n' + err.message);
159
+ socket.end(`HTTP/1.1 400\r\n${err.message}`);
156
160
  }
157
161
  });
158
162
  return httpServer;
@@ -160,8 +164,7 @@ class WsAdapter extends websockets_1.AbstractWsAdapter {
160
164
  addWsServerToRegistry(wsServer, port, path) {
161
165
  const entries = this.wsServersRegistry.get(port) ?? [];
162
166
  entries.push(wsServer);
163
- wsServer.path = (0, shared_utils_1.normalizePath)(path);
167
+ wsServer.path = normalizePath(path);
164
168
  this.wsServersRegistry.set(port, entries);
165
169
  }
166
170
  }
167
- exports.WsAdapter = WsAdapter;
package/index.d.ts CHANGED
@@ -1 +1 @@
1
- export * from './adapters';
1
+ export * from './adapters/index.js';
package/index.js CHANGED
@@ -1,10 +1,7 @@
1
- "use strict";
2
1
  /*
3
2
  * Nest @platform-ws
4
3
  * Copyright(c) 2017 - 2025 Kamil Mysliwiec
5
4
  * https://nestjs.com
6
5
  * MIT Licensed
7
6
  */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- const tslib_1 = require("tslib");
10
- tslib_1.__exportStar(require("./adapters"), exports);
7
+ export * from './adapters/index.js';
package/package.json CHANGED
@@ -1,9 +1,17 @@
1
1
  {
2
2
  "name": "@nestjs/platform-ws",
3
- "version": "11.1.16",
3
+ "version": "12.0.0-alpha.0",
4
4
  "description": "Nest - modern, fast, powerful node.js web framework (@platform-ws)",
5
5
  "author": "Kamil Mysliwiec",
6
6
  "license": "MIT",
7
+ "type": "module",
8
+ "main": "./index.js",
9
+ "exports": {
10
+ ".": "./index.js",
11
+ "./*.js": "./*.js",
12
+ "./*": "./*.js",
13
+ "./adapters": "./adapters/index.js"
14
+ },
7
15
  "homepage": "https://nestjs.com",
8
16
  "funding": {
9
17
  "type": "opencollective",
@@ -26,5 +34,5 @@
26
34
  "@nestjs/websockets": "^11.0.0",
27
35
  "rxjs": "^7.1.0"
28
36
  },
29
- "gitHead": "315e698096208868b43dda25f2db9ac9d7c1d822"
37
+ "gitHead": "7035ecc828a2a9f752aad188871b1171663a20c2"
30
38
  }
@@ -2,13 +2,7 @@
2
2
  "extends": "../tsconfig.build.json",
3
3
  "compilerOptions": {
4
4
  "outDir": ".",
5
- "rootDir": ".",
6
- "paths": {
7
- "@nestjs/common": ["../common"],
8
- "@nestjs/common/*": ["../common/*"],
9
- "@nestjs/websockets": ["../websockets"],
10
- "@nestjs/websockets/*": ["../websockets/*"]
11
- }
5
+ "rootDir": "."
12
6
  },
13
7
  "exclude": ["node_modules", "dist", "test/**/*", "*.spec.ts"],
14
8
  "references": [