@nestjs/websockets 12.0.0-alpha.5 → 12.0.0-alpha.7
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.
- package/Readme.md +25 -46
- package/gateway-metadata-explorer.js +1 -1
- package/package.json +4 -4
- package/socket-module.d.ts +3 -2
- package/socket-module.js +11 -4
- package/utils/param.utils.js +4 -9
- package/decorators/ws-pattern.decorator.d.ts +0 -16
- package/decorators/ws-pattern.decorator.js +0 -22
package/Readme.md
CHANGED
|
@@ -59,11 +59,11 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
|
|
59
59
|
|
|
60
60
|
<table style="text-align:center;">
|
|
61
61
|
<tr>
|
|
62
|
-
<td><a href="https://trilon.io" target="_blank"><img src="https://nestjs.com/img/trilon.svg" width="200" valign="middle" /></a></td>
|
|
63
|
-
<td><a href="https://microsoft.com/" target="_blank"><img src="https://nestjs.com/img/
|
|
64
|
-
<td><a href="https://mojam.co" target="_blank"><img src="https://
|
|
62
|
+
<td><a href="https://trilon.io" target="_blank"><img src="https://nestjs.com/img/github/trilon-logo.svg" width="200" valign="middle" /></a></td>
|
|
63
|
+
<td><a href="https://microsoft.com/" target="_blank"><img src="https://nestjs.com/img/github/microsoft-logo.png" width="180" valign="middle" /></a></td>
|
|
64
|
+
<td><a href="https://mojam.co" target="_blank"><img src="https://images.opencollective.com/mojamco/981e9de/logo/256.png?height=256" width="80" valign="middle" /></a></td>
|
|
65
65
|
<td><a href="https://valor-software.com/" target="_blank"><img src="https://docs.nestjs.com/assets/sponsors/valor-software.png" width="170" valign="middle" /></a></td>
|
|
66
|
-
<td><a href="https://serpapi.com/" target="_blank"><img src="https://nestjs.com/img/
|
|
66
|
+
<td><a href="https://serpapi.com/" target="_blank"><img src="https://nestjs.com/img/github/serpapi-logo.png" width="150" valign="middle" /></a></td>
|
|
67
67
|
</tr>
|
|
68
68
|
</table>
|
|
69
69
|
|
|
@@ -71,15 +71,15 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
|
|
71
71
|
|
|
72
72
|
<table style="text-align:center;">
|
|
73
73
|
<tr>
|
|
74
|
-
<td><a href="https://www.redhat.com" target="_blank"><img src="https://nestjs.com/img/
|
|
75
|
-
<td><a href="https://github.com/Sanofi-IADC" target="_blank"><img src="https://docs.nestjs.com/assets/sponsors/sanofi.png" width="
|
|
76
|
-
<td><a href="https://nx.dev" target="_blank"><img src="https://nestjs.com/img/
|
|
77
|
-
<td><a href="https://intrinsic.ventures/" target="_blank"><img src="https://nestjs.com/img/
|
|
78
|
-
<td><a href="https://jetbrains.com/" target="_blank"><img src="https://nestjs.com/img/
|
|
74
|
+
<td><a href="https://www.redhat.com" target="_blank"><img src="https://nestjs.com/img/github/red-hat-logo.svg" width="150" valign="middle" /></a></td>
|
|
75
|
+
<td><a href="https://github.com/Sanofi-IADC" target="_blank"><img src="https://docs.nestjs.com/assets/sponsors/sanofi.png" width="120" valign="middle" /></a></td>
|
|
76
|
+
<td><a href="https://nx.dev" target="_blank"><img src="https://nestjs.com/img/github/nx-logo.png" height="45" valign="middle" /></a></td>
|
|
77
|
+
<td><a href="https://intrinsic.ventures/" target="_blank"><img src="https://nestjs.com/img/github/intrinisic-logo.png" width="150" valign="middle" /></a></td>
|
|
78
|
+
<td><a href="https://jetbrains.com/" target="_blank"><img src="https://nestjs.com/img/github/jetbrains-logo.svg" width="70" valign="middle" /></a></td>
|
|
79
79
|
</tr>
|
|
80
80
|
<tr>
|
|
81
|
-
<td><a href="https://snyk.co/nestjs" target="_blank"><img src="https://nestjs.com/img/
|
|
82
|
-
<td><a href="https://www.movavi.com/imovie-for-windows.html" target="_blank"><img src="https://
|
|
81
|
+
<td><a href="https://snyk.co/nestjs" target="_blank"><img src="https://nestjs.com/img/github/snyk-logo-black.png" width="125" valign="middle" /></a></td>
|
|
82
|
+
<td align="center"><a href="https://www.movavi.com/imovie-for-windows.html" target="_blank"><img src="https://images.opencollective.com/movavi/1fb15e5/avatar/256.png?height=256" width="60" valign="middle" /></a></td>
|
|
83
83
|
</tr>
|
|
84
84
|
</table>
|
|
85
85
|
|
|
@@ -87,15 +87,15 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
|
|
87
87
|
|
|
88
88
|
<table style="text-align:center;">
|
|
89
89
|
<tr>
|
|
90
|
-
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/
|
|
91
|
-
<td><a href="https://
|
|
92
|
-
<td><a href="https://
|
|
93
|
-
<td align="center" valign="middle"><a href="https://
|
|
94
|
-
<td align="center" valign="middle"><a href="https://
|
|
95
|
-
<td align="center" valign="middle"><a href="https://crawljobs.com" target="_blank"><img src="https://nestjs.com/img/logos/crawljobs-logo.svg" width="130" valign="middle" /></a></td>
|
|
90
|
+
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/github/mercedes-logo.png" width="100" valign="middle" /></a></td>
|
|
91
|
+
<td><a href="https://handsontable.com/docs/react-data-grid/?utm_source=NestJS_GH&utm_medium=sponsorship&utm_campaign=library_sponsorship_2024" target="_blank"><img src="https://nestjs.com/img/github/handsontable-dark-logo.svg#2" width="150" valign="middle" /></a></td>
|
|
92
|
+
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/github/it_flashcards-logo.png" width="170" valign="middle" /></a></td>
|
|
93
|
+
<td align="center" valign="middle"><a href="https://arcjet.com/?ref=nestjs" target="_blank"><img src="https://nestjs.com/img/github/arcjet-logo.svg" width="170" valign="middle" /></a></td>
|
|
94
|
+
<td align="center" valign="middle"><a href="https://pandektes.com" target="_blank"><img src="https://nestjs.com/img/github/pandektes-logo.png" width="65" valign="middle" /></a></td>
|
|
96
95
|
</tr><tr>
|
|
97
|
-
<td align="center" valign="middle"><a href="https://
|
|
98
|
-
<td align="center" valign="middle"><a href="https://
|
|
96
|
+
<td align="center" valign="middle"><a href="https://www.fintechcrafts.com/" target="_blank"><img src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/935813df-48a9-4b41-b923-7d70b5621c6b/2026-05-06%2010%2021%2033.png" width="65" valign="middle" /></a></td>
|
|
97
|
+
<td align="center" valign="middle"><a href="https://talordata.com/?campaignid=Ya5Xpw2gmhyee6Tg&utm_source=nestjs&utm_term=nestjs" target="_blank"><img src="https://images.opencollective.com/elowen/9ccac7f/avatar/512.png" width="65" valign="middle" /></a></td>
|
|
98
|
+
<td align="center" valign="middle"><a href="https://memory2.co/" target="_blank"><img src="https://images.opencollective.com/memory-squared/bbe37f5/avatar/256.png?height=50" width="65" valign="middle" /></a></td>
|
|
99
99
|
</tr>
|
|
100
100
|
</table>
|
|
101
101
|
|
|
@@ -103,33 +103,12 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
|
|
103
103
|
|
|
104
104
|
<table>
|
|
105
105
|
<tr>
|
|
106
|
-
<td align="center" valign="middle"><a href="https://
|
|
107
|
-
<td align="center" valign="middle"><a href="https://
|
|
108
|
-
<td align="center" valign="middle"><a href="https://
|
|
109
|
-
<td align="center" valign="middle"><a href="https://
|
|
110
|
-
<td align="center" valign="middle"><a href="https://
|
|
111
|
-
<td align="center" valign="middle"><a href="https://
|
|
112
|
-
</tr>
|
|
113
|
-
<tr>
|
|
114
|
-
<td align="center" valign="middle"><a href="https://vpn-review.com/vpn-for-torrenting" target="_blank"><img src="https://nestjs.com/img/logos/vpn-review-logo.png" width="85" valign="middle" /></a></td>
|
|
115
|
-
<td align="center" valign="middle"><a href="https://lambda-it.ch/" target="_blank"><img src="https://nestjs.com/img/logos/lambda-it-logo.svg" width="115" valign="middle" /></a></td>
|
|
116
|
-
<td align="center" valign="middle"><a href="https://rocketech.it/cases/?utm_source=google&utm_medium=badge&utm_campaign=nestjs" target="_blank"><img src="https://nestjs.com/img/logos/rocketech-logo.svg" width="110" valign="middle" /></a></td>
|
|
117
|
-
<td align="center" valign="middle"><a href="https://www.anonymistic.com/" target="_blank"><img src="https://nestjs.com/img/logos/anonymistic-logo.png" width="125" valign="middle" /></a></td>
|
|
118
|
-
<td align="center" valign="middle"><a href="https://www.naologic.com/" target="_blank"><img src="https://nestjs.com/img/logos/naologic-logo.svg" width="125" valign="middle" /></a></td>
|
|
119
|
-
<td align="center" valign="middle"><a href="https://triplecore.io" target="_blank"><img src="https://nestjs.com/img/logos/triplecore-logo.svg" width="50" valign="middle" /></a></td>
|
|
120
|
-
</tr>
|
|
121
|
-
<tr>
|
|
122
|
-
<td align="center" valign="middle"><a href="https://polygon-software.ch/" target="_blank"><img src="https://nestjs.com/img/logos/polygon-logo.svg" width="120" valign="middle" /></a></td>
|
|
123
|
-
<td align="center" valign="middle"><a href="https://boringowl.io/" target="_blank"><img src="https://nestjs.com/img/logos/boringowl-logo.svg" width="120" valign="middle" /></a></td>
|
|
124
|
-
<td align="center" valign="middle"><a href="https://nordbot.app/" target="_blank"><img src="https://nestjs.com/img/logos/nordbot-logo.png" width="120" valign="middle" /></a></td>
|
|
125
|
-
<td align="center" valign="middle"><a href="https://doppio.sh/" target="_blank"><img src="https://nestjs.com/img/logos/dopiosh-logo.png" width="50" valign="middle" /></a></td>
|
|
126
|
-
<td align="center" valign="middle"><a href="https://www.hingehealth.com/" target="_blank"><img src="https://nestjs.com/img/logos/hinge-health-logo.svg" width="100" valign="middle" /></a></td>
|
|
127
|
-
<td align="center" valign="middle"><a href="https://www.tripoffice.com/" target="_blank"><img src="https://nestjs.com/img/logos/tripoffice-logo.png" width="140" valign="middle" /></a></td>
|
|
128
|
-
</tr>
|
|
129
|
-
<tr>
|
|
130
|
-
<td align="center" valign="middle"><a href="https://solcellsforetag.se/" target="_blank"><img src="https://nestjs.com/img/logos/solcellsforetag-logo.svg" width="140" valign="middle" /></a></td>
|
|
131
|
-
<td align="center" valign="middle"><a href="https://www.route4me.com/" target="_blank"><img src="https://nestjs.com/img/logos/route4me-logo.svg" width="100" valign="middle" /></a></td>
|
|
132
|
-
<td align="center" valign="middle"><a href="https://memory2.co/" target="_blank"><img src="https://images.opencollective.com/memory-squared/bbe37f5/avatar/256.png?height=50" width="50" valign="middle" /></a></td>
|
|
106
|
+
<td align="center" valign="middle"><a href="https://mantro.net/" target="_blank"><img src="https://nestjs.com/img/github/mantro-logo.svg" width="95" valign="middle" /></a></td>
|
|
107
|
+
<td align="center" valign="middle"><a href="https://triplebyte.com/" target="_blank"><img src="https://nestjs.com/img/github/triplebyte-logo.png" width="107" valign="middle" /></a></td>
|
|
108
|
+
<td align="center" valign="middle"><a href="https://nearpod.com/" target="_blank"><img src="https://nestjs.com/img/github/nearpod-logo.svg" width="100" valign="middle" /></a></td>
|
|
109
|
+
<td align="center" valign="middle"><a href="https://www.naologic.com/" target="_blank"><img src="https://nestjs.com/img/github/naologic-logo.svg" width="125" valign="middle" /></a></td>
|
|
110
|
+
<td align="center" valign="middle"><a href="https://triplecore.io" target="_blank"><img src="https://nestjs.com/img/github/triplecore-logo.svg" width="50" valign="middle" /></a>
|
|
111
|
+
<td align="center" valign="middle"><a href="https://www.hingehealth.com/" target="_blank"><img src="https://nestjs.com/img/github/hinge-health-logo.svg" width="100" valign="middle" /></a></td>
|
|
133
112
|
</tr>
|
|
134
113
|
</table>
|
|
135
114
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nestjs/websockets",
|
|
3
|
-
"version": "12.0.0-alpha.
|
|
3
|
+
"version": "12.0.0-alpha.7",
|
|
4
4
|
"description": "Nest - modern, fast, powerful node.js web framework (@websockets)",
|
|
5
5
|
"author": "Kamil Mysliwiec",
|
|
6
6
|
"license": "MIT",
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"tslib": "2.8.1"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@nestjs/common": "^12.0.0-alpha.
|
|
30
|
-
"@nestjs/core": "^12.0.0-alpha.
|
|
29
|
+
"@nestjs/common": "^12.0.0-alpha.7",
|
|
30
|
+
"@nestjs/core": "^12.0.0-alpha.7"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"@nestjs/common": "^11.0.0",
|
|
@@ -41,5 +41,5 @@
|
|
|
41
41
|
"optional": true
|
|
42
42
|
}
|
|
43
43
|
},
|
|
44
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "66e89ffc3d14e47d572bd6ea3f8714fa6916160b"
|
|
45
45
|
}
|
package/socket-module.d.ts
CHANGED
|
@@ -7,11 +7,12 @@ export declare class SocketModule<THttpServer = any, TAppOptions extends NestApp
|
|
|
7
7
|
private applicationConfig;
|
|
8
8
|
private webSocketsController;
|
|
9
9
|
private isAdapterInitialized;
|
|
10
|
+
private adapterInitPromise;
|
|
10
11
|
private httpServer;
|
|
11
12
|
private appOptions;
|
|
12
13
|
private injector;
|
|
13
|
-
register(container: NestContainer, applicationConfig: ApplicationConfig, graphInspector: GraphInspector, appOptions: TAppOptions, httpServer?: THttpServer): void
|
|
14
|
-
connectAllGateways(providers: Map<InjectionToken, InstanceWrapper<Injectable>>, moduleName: string): void
|
|
14
|
+
register(container: NestContainer, applicationConfig: ApplicationConfig, graphInspector: GraphInspector, appOptions: TAppOptions, httpServer?: THttpServer): Promise<void[][]>;
|
|
15
|
+
connectAllGateways(providers: Map<InjectionToken, InstanceWrapper<Injectable>>, moduleName: string): Promise<void[]>;
|
|
15
16
|
connectGatewayToServer(wrapper: InstanceWrapper<Injectable>, moduleName: string): Promise<void>;
|
|
16
17
|
close(): Promise<any>;
|
|
17
18
|
private initializeAdapter;
|
package/socket-module.js
CHANGED
|
@@ -12,6 +12,7 @@ export class SocketModule {
|
|
|
12
12
|
applicationConfig;
|
|
13
13
|
webSocketsController;
|
|
14
14
|
isAdapterInitialized;
|
|
15
|
+
adapterInitPromise = null;
|
|
15
16
|
httpServer;
|
|
16
17
|
appOptions;
|
|
17
18
|
injector;
|
|
@@ -28,12 +29,15 @@ export class SocketModule {
|
|
|
28
29
|
const serverProvider = new SocketServerProvider(this.socketsContainer, applicationConfig);
|
|
29
30
|
this.webSocketsController = new WebSocketsController(serverProvider, applicationConfig, contextCreator, container, this.injector, exceptionFiltersContext, graphInspector, this.appOptions);
|
|
30
31
|
const modules = container.getModules();
|
|
31
|
-
|
|
32
|
+
return Promise.all(iterate(modules.entries())
|
|
33
|
+
.map(([moduleName, { providers }]) => this.connectAllGateways(providers, moduleName))
|
|
34
|
+
.toArray());
|
|
32
35
|
}
|
|
33
36
|
connectAllGateways(providers, moduleName) {
|
|
34
|
-
iterate(providers.values())
|
|
37
|
+
return Promise.all(iterate(providers.values())
|
|
35
38
|
.filter(wrapper => wrapper && !wrapper.isNotMetatype)
|
|
36
|
-
.
|
|
39
|
+
.map(wrapper => this.connectGatewayToServer(wrapper, moduleName))
|
|
40
|
+
.toArray());
|
|
37
41
|
}
|
|
38
42
|
async connectGatewayToServer(wrapper, moduleName) {
|
|
39
43
|
const { instance, metatype } = wrapper;
|
|
@@ -42,7 +46,10 @@ export class SocketModule {
|
|
|
42
46
|
return;
|
|
43
47
|
}
|
|
44
48
|
if (!this.isAdapterInitialized) {
|
|
45
|
-
|
|
49
|
+
// Memoize the initialization promise so concurrent gateway connections
|
|
50
|
+
// share a single adapter instead of racing to create their own.
|
|
51
|
+
this.adapterInitPromise ??= this.initializeAdapter();
|
|
52
|
+
await this.adapterInitPromise;
|
|
46
53
|
}
|
|
47
54
|
this.webSocketsController.connectGatewayToServer(wrapper, moduleName);
|
|
48
55
|
}
|
package/utils/param.utils.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { assignMetadata } from '@nestjs/common';
|
|
2
|
-
import { isNil, isString } from '@nestjs/common/internal';
|
|
2
|
+
import { isNil, isParameterDecoratorOptions, isString, } from '@nestjs/common/internal';
|
|
3
3
|
import 'reflect-metadata';
|
|
4
4
|
import { PARAM_ARGS_METADATA } from '../constants.js';
|
|
5
5
|
export function createWsParamDecorator(paramtype) {
|
|
@@ -11,10 +11,7 @@ export function createWsParamDecorator(paramtype) {
|
|
|
11
11
|
}
|
|
12
12
|
export const createPipesWsParamDecorator = (paramtype) => (data, optionsOrPipe, ...pipes) => (target, key, index) => {
|
|
13
13
|
const args = Reflect.getMetadata(PARAM_ARGS_METADATA, target.constructor, key) || {};
|
|
14
|
-
const isDataOptions = data
|
|
15
|
-
typeof data === 'object' &&
|
|
16
|
-
!('transform' in data) &&
|
|
17
|
-
('schema' in data || 'pipes' in data);
|
|
14
|
+
const isDataOptions = isParameterDecoratorOptions(data);
|
|
18
15
|
if (isDataOptions) {
|
|
19
16
|
const opts = data;
|
|
20
17
|
Reflect.defineMetadata(PARAM_ARGS_METADATA, assignMetadata(args, paramtype, index, {
|
|
@@ -25,12 +22,10 @@ export const createPipesWsParamDecorator = (paramtype) => (data, optionsOrPipe,
|
|
|
25
22
|
}
|
|
26
23
|
const hasParamData = isNil(data) || isString(data);
|
|
27
24
|
const paramData = hasParamData ? data : undefined;
|
|
28
|
-
const isOptions = optionsOrPipe
|
|
29
|
-
typeof optionsOrPipe === 'object' &&
|
|
30
|
-
('schema' in optionsOrPipe || 'pipes' in optionsOrPipe);
|
|
25
|
+
const isOptions = isParameterDecoratorOptions(optionsOrPipe);
|
|
31
26
|
let paramPipes;
|
|
32
27
|
if (isOptions) {
|
|
33
|
-
paramPipes = optionsOrPipe.pipes ?? [];
|
|
28
|
+
paramPipes = [...(optionsOrPipe.pipes ?? []), ...pipes];
|
|
34
29
|
}
|
|
35
30
|
else if (hasParamData) {
|
|
36
31
|
paramPipes = [optionsOrPipe, ...pipes].filter(Boolean);
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { PipeTransform, Type } from '@nestjs/common';
|
|
2
|
-
/**
|
|
3
|
-
* WebSockets pattern parameter decorator.
|
|
4
|
-
* Extracts the subscribed message pattern from the current ws event.
|
|
5
|
-
*
|
|
6
|
-
* @example
|
|
7
|
-
* ```typescript
|
|
8
|
-
* @SubscribeMessage('events')
|
|
9
|
-
* onEvent(@WsPattern() pattern: string) {
|
|
10
|
-
* return { event: pattern, data: 'ok' };
|
|
11
|
-
* }
|
|
12
|
-
* ```
|
|
13
|
-
*
|
|
14
|
-
* @publicApi
|
|
15
|
-
*/
|
|
16
|
-
export declare function WsPattern(...pipes: (Type<PipeTransform> | PipeTransform)[]): ParameterDecorator;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WsPattern = WsPattern;
|
|
4
|
-
const ws_paramtype_enum_1 = require("../enums/ws-paramtype.enum");
|
|
5
|
-
const param_utils_1 = require("../utils/param.utils");
|
|
6
|
-
/**
|
|
7
|
-
* WebSockets pattern parameter decorator.
|
|
8
|
-
* Extracts the subscribed message pattern from the current ws event.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```typescript
|
|
12
|
-
* @SubscribeMessage('events')
|
|
13
|
-
* onEvent(@WsPattern() pattern: string) {
|
|
14
|
-
* return { event: pattern, data: 'ok' };
|
|
15
|
-
* }
|
|
16
|
-
* ```
|
|
17
|
-
*
|
|
18
|
-
* @publicApi
|
|
19
|
-
*/
|
|
20
|
-
function WsPattern(...pipes) {
|
|
21
|
-
return (0, param_utils_1.createPipesWsParamDecorator)(ws_paramtype_enum_1.WsParamtype.PATTERN)(undefined, ...pipes);
|
|
22
|
-
}
|