@nestjs/websockets 8.3.0 → 8.3.1
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 +1 -0
- package/adapters/index.js +1 -1
- package/adapters/ws-adapter.js +1 -1
- package/context/exception-filters-context.js +1 -1
- package/context/ws-context-creator.js +1 -1
- package/context/ws-proxy.js +2 -2
- package/decorators/connected-socket.decorator.js +1 -1
- package/decorators/index.js +5 -5
- package/decorators/message-body.decorator.js +1 -1
- package/errors/index.js +1 -1
- package/errors/ws-exception.js +3 -3
- package/exceptions/base-ws-exception-filter.js +2 -2
- package/exceptions/index.js +1 -1
- package/exceptions/ws-exceptions-handler.js +1 -1
- package/gateway-metadata-explorer.js +3 -3
- package/index.js +5 -5
- package/interfaces/hooks/index.js +3 -3
- package/interfaces/index.js +5 -5
- package/package.json +3 -3
- package/socket-module.js +3 -3
- package/socket-server-provider.js +3 -3
- package/utils/index.js +1 -1
- package/utils/param.utils.js +3 -3
- package/web-sockets-controller.js +6 -6
package/Readme.md
CHANGED
|
@@ -123,6 +123,7 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
|
|
123
123
|
<td align="center" valign="middle"><a href="https://thecasinowizard.com/bonuses/no-deposit-bonuses/" target="_blank"><img src="https://nestjs.com/img/casinowizard-logo.png" width="120" valign="middle" /></a></td></tr><tr>
|
|
124
124
|
<td align="center" valign="middle"><a href="https://polygon-software.ch/" target="_blank"><img src="https://nestjs.com/img/polygon-logo.svg" width="120" valign="middle" /></a></td>
|
|
125
125
|
<td align="center" valign="middle"><a href="https://mobilereality.pl/" target="_blank"><img src="https://nestjs.com/img/mobile-reality-logo.png" width="45" valign="middle" /></a></td>
|
|
126
|
+
<td align="center" valign="middle"><a href="https://boringowl.io/" target="_blank"><img src="https://nestjs.com/img/boringowl-logo.svg" width="120" valign="middle" /></a></td>
|
|
126
127
|
</tr></table>
|
|
127
128
|
|
|
128
129
|
## Backers
|
package/adapters/index.js
CHANGED
package/adapters/ws-adapter.js
CHANGED
|
@@ -20,7 +20,7 @@ class AbstractWsAdapter {
|
|
|
20
20
|
client.on(constants_1.DISCONNECT_EVENT, callback);
|
|
21
21
|
}
|
|
22
22
|
async close(server) {
|
|
23
|
-
const isCallable = server &&
|
|
23
|
+
const isCallable = server && shared_utils_1.isFunction(server.close);
|
|
24
24
|
isCallable && (await new Promise(resolve => server.close(resolve)));
|
|
25
25
|
}
|
|
26
26
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
@@ -13,7 +13,7 @@ class ExceptionFiltersContext extends base_exception_filter_context_1.BaseExcept
|
|
|
13
13
|
this.moduleContext = moduleKey;
|
|
14
14
|
const exceptionHandler = new ws_exceptions_handler_1.WsExceptionsHandler();
|
|
15
15
|
const filters = this.createContext(instance, callback, constants_1.EXCEPTION_FILTERS_METADATA);
|
|
16
|
-
if (
|
|
16
|
+
if (shared_utils_1.isEmpty(filters)) {
|
|
17
17
|
return exceptionHandler;
|
|
18
18
|
}
|
|
19
19
|
exceptionHandler.setCustomFilters(filters.reverse());
|
|
@@ -109,7 +109,7 @@ class WsContextCreator {
|
|
|
109
109
|
return paramsOptions.length ? pipesFn : null;
|
|
110
110
|
}
|
|
111
111
|
async getParamValue(value, { metatype, type, data }, pipes) {
|
|
112
|
-
return
|
|
112
|
+
return shared_utils_1.isEmpty(pipes)
|
|
113
113
|
? value
|
|
114
114
|
: this.pipesConsumer.apply(value, { metatype, type, data }, pipes);
|
|
115
115
|
}
|
package/context/ws-proxy.js
CHANGED
|
@@ -9,9 +9,9 @@ class WsProxy {
|
|
|
9
9
|
return async (...args) => {
|
|
10
10
|
try {
|
|
11
11
|
const result = await targetCallback(...args);
|
|
12
|
-
return !
|
|
12
|
+
return !rxjs_1.isObservable(result)
|
|
13
13
|
? result
|
|
14
|
-
: result.pipe(
|
|
14
|
+
: result.pipe(operators_1.catchError(error => {
|
|
15
15
|
this.handleError(exceptionsHandler, args, error);
|
|
16
16
|
return rxjs_1.EMPTY;
|
|
17
17
|
}));
|
|
@@ -3,4 +3,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ConnectedSocket = void 0;
|
|
4
4
|
const ws_paramtype_enum_1 = require("../enums/ws-paramtype.enum");
|
|
5
5
|
const param_utils_1 = require("../utils/param.utils");
|
|
6
|
-
exports.ConnectedSocket =
|
|
6
|
+
exports.ConnectedSocket = param_utils_1.createWsParamDecorator(ws_paramtype_enum_1.WsParamtype.SOCKET);
|
package/decorators/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
tslib_1.__exportStar(require("./connected-socket.decorator"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./gateway-server.decorator"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./message-body.decorator"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./socket-gateway.decorator"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./subscribe-message.decorator"), exports);
|
|
@@ -4,6 +4,6 @@ exports.MessageBody = void 0;
|
|
|
4
4
|
const ws_paramtype_enum_1 = require("../enums/ws-paramtype.enum");
|
|
5
5
|
const param_utils_1 = require("../utils/param.utils");
|
|
6
6
|
function MessageBody(propertyOrPipe, ...pipes) {
|
|
7
|
-
return
|
|
7
|
+
return param_utils_1.createPipesWsParamDecorator(ws_paramtype_enum_1.WsParamtype.PAYLOAD)(propertyOrPipe, ...pipes);
|
|
8
8
|
}
|
|
9
9
|
exports.MessageBody = MessageBody;
|
package/errors/index.js
CHANGED
package/errors/ws-exception.js
CHANGED
|
@@ -9,11 +9,11 @@ class WsException extends Error {
|
|
|
9
9
|
this.initMessage();
|
|
10
10
|
}
|
|
11
11
|
initMessage() {
|
|
12
|
-
if (
|
|
12
|
+
if (shared_utils_1.isString(this.error)) {
|
|
13
13
|
this.message = this.error;
|
|
14
14
|
}
|
|
15
|
-
else if (
|
|
16
|
-
|
|
15
|
+
else if (shared_utils_1.isObject(this.error) &&
|
|
16
|
+
shared_utils_1.isString(this.error.message)) {
|
|
17
17
|
this.message = this.error.message;
|
|
18
18
|
}
|
|
19
19
|
else if (this.constructor) {
|
|
@@ -16,7 +16,7 @@ class BaseWsExceptionFilter {
|
|
|
16
16
|
}
|
|
17
17
|
const status = 'error';
|
|
18
18
|
const result = exception.getError();
|
|
19
|
-
const message =
|
|
19
|
+
const message = shared_utils_1.isObject(result)
|
|
20
20
|
? result
|
|
21
21
|
: {
|
|
22
22
|
status,
|
|
@@ -36,7 +36,7 @@ class BaseWsExceptionFilter {
|
|
|
36
36
|
return BaseWsExceptionFilter.logger.error(exception);
|
|
37
37
|
}
|
|
38
38
|
isExceptionObject(err) {
|
|
39
|
-
return
|
|
39
|
+
return shared_utils_1.isObject(err) && !!err.message;
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
exports.BaseWsExceptionFilter = BaseWsExceptionFilter;
|
package/exceptions/index.js
CHANGED
|
@@ -23,7 +23,7 @@ class WsExceptionsHandler extends base_ws_exception_filter_1.BaseWsExceptionFilt
|
|
|
23
23
|
this.filters = filters;
|
|
24
24
|
}
|
|
25
25
|
invokeCustomFilters(exception, args) {
|
|
26
|
-
if (
|
|
26
|
+
if (shared_utils_1.isEmpty(this.filters))
|
|
27
27
|
return false;
|
|
28
28
|
const filter = this.filters.find(({ exceptionMetatypes }) => {
|
|
29
29
|
const hasMetatype = !exceptionMetatypes.length ||
|
|
@@ -14,7 +14,7 @@ class GatewayMetadataExplorer {
|
|
|
14
14
|
exploreMethodMetadata(instancePrototype, methodName) {
|
|
15
15
|
const callback = instancePrototype[methodName];
|
|
16
16
|
const isMessageMapping = Reflect.getMetadata(constants_1.MESSAGE_MAPPING_METADATA, callback);
|
|
17
|
-
if (
|
|
17
|
+
if (shared_utils_1.isUndefined(isMessageMapping)) {
|
|
18
18
|
return null;
|
|
19
19
|
}
|
|
20
20
|
const message = Reflect.getMetadata(constants_1.MESSAGE_METADATA, callback);
|
|
@@ -26,12 +26,12 @@ class GatewayMetadataExplorer {
|
|
|
26
26
|
}
|
|
27
27
|
*scanForServerHooks(instance) {
|
|
28
28
|
for (const propertyKey in instance) {
|
|
29
|
-
if (
|
|
29
|
+
if (shared_utils_1.isFunction(propertyKey)) {
|
|
30
30
|
continue;
|
|
31
31
|
}
|
|
32
32
|
const property = String(propertyKey);
|
|
33
33
|
const isServer = Reflect.getMetadata(constants_1.GATEWAY_SERVER_METADATA, instance, property);
|
|
34
|
-
if (!
|
|
34
|
+
if (!shared_utils_1.isUndefined(isServer)) {
|
|
35
35
|
yield property;
|
|
36
36
|
}
|
|
37
37
|
}
|
package/index.js
CHANGED
|
@@ -8,8 +8,8 @@ const tslib_1 = require("tslib");
|
|
|
8
8
|
* MIT Licensed
|
|
9
9
|
*/
|
|
10
10
|
require("reflect-metadata");
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
tslib_1.__exportStar(require("./adapters"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./decorators"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./errors"), exports);
|
|
14
|
+
tslib_1.__exportStar(require("./exceptions"), exports);
|
|
15
|
+
tslib_1.__exportStar(require("./interfaces"), exports);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
tslib_1.__exportStar(require("./on-gateway-connection.interface"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./on-gateway-disconnect.interface"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./on-gateway-init.interface"), exports);
|
package/interfaces/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
tslib_1.__exportStar(require("./gateway-metadata.interface"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./hooks"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./server-and-event-streams-host.interface"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./web-socket-server.interface"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./ws-response.interface"), exports);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nestjs/websockets",
|
|
3
|
-
"version": "8.3.
|
|
3
|
+
"version": "8.3.1",
|
|
4
4
|
"description": "Nest - modern, fast, powerful node.js web framework (@websockets)",
|
|
5
5
|
"author": "Kamil Mysliwiec",
|
|
6
6
|
"license": "MIT",
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
"tslib": "2.3.1"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
|
-
"@nestjs/common": "8.3.
|
|
21
|
-
"@nestjs/core": "8.3.
|
|
20
|
+
"@nestjs/common": "8.3.1",
|
|
21
|
+
"@nestjs/core": "8.3.1"
|
|
22
22
|
},
|
|
23
23
|
"peerDependencies": {
|
|
24
24
|
"@nestjs/common": "^8.0.0",
|
package/socket-module.js
CHANGED
|
@@ -30,7 +30,7 @@ class SocketModule {
|
|
|
30
30
|
modules.forEach(({ providers }, moduleName) => this.connectAllGateways(providers, moduleName));
|
|
31
31
|
}
|
|
32
32
|
connectAllGateways(providers, moduleName) {
|
|
33
|
-
|
|
33
|
+
iterare_1.iterate(providers.values())
|
|
34
34
|
.filter(wrapper => wrapper && !wrapper.isNotMetatype)
|
|
35
35
|
.forEach(wrapper => this.connectGatewayToServer(wrapper, moduleName));
|
|
36
36
|
}
|
|
@@ -55,7 +55,7 @@ class SocketModule {
|
|
|
55
55
|
return;
|
|
56
56
|
}
|
|
57
57
|
const servers = this.socketsContainer.getAll();
|
|
58
|
-
await Promise.all(
|
|
58
|
+
await Promise.all(iterare_1.iterate(servers.values())
|
|
59
59
|
.filter(({ server }) => server)
|
|
60
60
|
.map(async ({ server }) => adapter.close(server)));
|
|
61
61
|
await ((_a = adapter) === null || _a === void 0 ? void 0 : _a.dispose());
|
|
@@ -67,7 +67,7 @@ class SocketModule {
|
|
|
67
67
|
this.isAdapterInitialized = true;
|
|
68
68
|
return;
|
|
69
69
|
}
|
|
70
|
-
const { IoAdapter } =
|
|
70
|
+
const { IoAdapter } = load_adapter_1.loadAdapter('@nestjs/platform-socket.io', 'WebSockets', () => require('@nestjs/platform-socket.io'));
|
|
71
71
|
const ioAdapter = new IoAdapter(this.httpServer);
|
|
72
72
|
this.applicationConfig.setIoAdapter(ioAdapter);
|
|
73
73
|
this.isAdapterInitialized = true;
|
|
@@ -23,7 +23,7 @@ class SocketServerProvider {
|
|
|
23
23
|
}
|
|
24
24
|
createSocketServer(options, port) {
|
|
25
25
|
const adapter = this.applicationConfig.getIoAdapter();
|
|
26
|
-
const _a = options, { namespace, server } = _a, partialOptions =
|
|
26
|
+
const _a = options, { namespace, server } = _a, partialOptions = tslib_1.__rest(_a, ["namespace", "server"]);
|
|
27
27
|
const ioServer = adapter.create(port, partialOptions);
|
|
28
28
|
const serverAndEventStreamsHost = server_and_event_streams_factory_1.ServerAndEventStreamsFactory.create(ioServer);
|
|
29
29
|
this.socketsContainer.addOne({ port, path: options.path }, serverAndEventStreamsHost);
|
|
@@ -43,10 +43,10 @@ class SocketServerProvider {
|
|
|
43
43
|
return adapter.create(port, Object.assign(Object.assign({}, options), { namespace: this.validateNamespace(options.namespace || ''), server }));
|
|
44
44
|
}
|
|
45
45
|
validateNamespace(namespace) {
|
|
46
|
-
if (!
|
|
46
|
+
if (!shared_utils_1.isString(namespace)) {
|
|
47
47
|
return namespace;
|
|
48
48
|
}
|
|
49
|
-
return
|
|
49
|
+
return shared_utils_1.addLeadingSlash(namespace);
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
exports.SocketServerProvider = SocketServerProvider;
|
package/utils/index.js
CHANGED
package/utils/param.utils.js
CHANGED
|
@@ -8,15 +8,15 @@ const constants_1 = require("../constants");
|
|
|
8
8
|
function createWsParamDecorator(paramtype) {
|
|
9
9
|
return (...pipes) => (target, key, index) => {
|
|
10
10
|
const args = Reflect.getMetadata(constants_1.PARAM_ARGS_METADATA, target.constructor, key) || {};
|
|
11
|
-
Reflect.defineMetadata(constants_1.PARAM_ARGS_METADATA,
|
|
11
|
+
Reflect.defineMetadata(constants_1.PARAM_ARGS_METADATA, route_params_decorator_1.assignMetadata(args, paramtype, index, undefined, ...pipes), target.constructor, key);
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
14
|
exports.createWsParamDecorator = createWsParamDecorator;
|
|
15
15
|
const createPipesWsParamDecorator = (paramtype) => (data, ...pipes) => (target, key, index) => {
|
|
16
16
|
const args = Reflect.getMetadata(constants_1.PARAM_ARGS_METADATA, target.constructor, key) || {};
|
|
17
|
-
const hasParamData =
|
|
17
|
+
const hasParamData = shared_utils_1.isNil(data) || shared_utils_1.isString(data);
|
|
18
18
|
const paramData = hasParamData ? data : undefined;
|
|
19
19
|
const paramPipes = hasParamData ? pipes : [data, ...pipes];
|
|
20
|
-
Reflect.defineMetadata(constants_1.PARAM_ARGS_METADATA,
|
|
20
|
+
Reflect.defineMetadata(constants_1.PARAM_ARGS_METADATA, route_params_decorator_1.assignMetadata(args, paramtype, index, paramData, ...paramPipes), target.constructor, key);
|
|
21
21
|
};
|
|
22
22
|
exports.createPipesWsParamDecorator = createPipesWsParamDecorator;
|
|
@@ -68,14 +68,14 @@ class WebSocketsController {
|
|
|
68
68
|
subscribeConnectionEvent(instance, event) {
|
|
69
69
|
if (instance.handleConnection) {
|
|
70
70
|
event
|
|
71
|
-
.pipe(
|
|
71
|
+
.pipe(operators_1.distinctUntilChanged((prev, curr) => compare_element_util_1.compareElementAt(prev, curr, 0)))
|
|
72
72
|
.subscribe((args) => instance.handleConnection(...args));
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
subscribeDisconnectEvent(instance, event) {
|
|
76
76
|
if (instance.handleDisconnect) {
|
|
77
77
|
event
|
|
78
|
-
.pipe(
|
|
78
|
+
.pipe(operators_1.distinctUntilChanged())
|
|
79
79
|
.subscribe(instance.handleDisconnect.bind(instance));
|
|
80
80
|
}
|
|
81
81
|
}
|
|
@@ -85,17 +85,17 @@ class WebSocketsController {
|
|
|
85
85
|
message,
|
|
86
86
|
callback: callback.bind(instance, client),
|
|
87
87
|
}));
|
|
88
|
-
adapter.bindMessageHandlers(client, handlers, data =>
|
|
88
|
+
adapter.bindMessageHandlers(client, handlers, data => rxjs_1.from(this.pickResult(data)).pipe(operators_1.mergeAll()));
|
|
89
89
|
}
|
|
90
90
|
async pickResult(deferredResult) {
|
|
91
91
|
const result = await deferredResult;
|
|
92
|
-
if (result &&
|
|
92
|
+
if (result && shared_utils_1.isFunction(result.subscribe)) {
|
|
93
93
|
return result;
|
|
94
94
|
}
|
|
95
95
|
if (result instanceof Promise) {
|
|
96
|
-
return
|
|
96
|
+
return rxjs_1.from(result);
|
|
97
97
|
}
|
|
98
|
-
return
|
|
98
|
+
return rxjs_1.of(result);
|
|
99
99
|
}
|
|
100
100
|
assignServerToProperties(instance, server) {
|
|
101
101
|
for (const propertyKey of this.metadataExplorer.scanForServerHooks(instance)) {
|