@tsed/socketio 7.0.0-rc.3 → 7.0.0-rc.4
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.
|
@@ -155,7 +155,6 @@ class SocketHandlersBuilder {
|
|
|
155
155
|
if (filter === SocketFilters_1.SocketFilters.ARGS && useConverter) {
|
|
156
156
|
value = (0, json_mapper_1.deserialize)(value, {
|
|
157
157
|
useAlias: true,
|
|
158
|
-
additionalProperties: this.injector.settings.get("converter.additionalProperties") === "accept",
|
|
159
158
|
type,
|
|
160
159
|
collectionType
|
|
161
160
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SocketHandlersBuilder.js","sourceRoot":"","sources":["../../../src/class/SocketHandlersBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import {InjectorService, Provider} from \"@tsed/di\";\nimport {Store} from \"@tsed/core\";\nimport {$log} from \"@tsed/logger\";\nimport {deserialize} from \"@tsed/json-mapper\";\nimport {Namespace, Socket} from \"socket.io\";\nimport {SocketFilters} from \"../interfaces/SocketFilters\";\nimport {SocketHandlerMetadata} from \"../interfaces/SocketHandlerMetadata\";\nimport {SocketInjectableNsp} from \"../interfaces/SocketInjectableNsp\";\nimport {SocketParamMetadata} from \"../interfaces/SocketParamMetadata\";\nimport {SocketProviderTypes} from \"../interfaces/SocketProviderTypes\";\nimport {SocketReturnsTypes} from \"../interfaces/SocketReturnsTypes\";\nimport {getNspSession} from \"../registries/NspSessionRegistry\";\nimport {SocketProviderMetadata} from \"./SocketProviderMetadata\";\n\n/**\n * @ignore\n */\nexport class SocketHandlersBuilder {\n private socketProviderMetadata: SocketProviderMetadata;\n\n constructor(private provider: Provider, private injector: InjectorService) {\n this.socketProviderMetadata = new SocketProviderMetadata(this.provider.store.get(\"socketIO\"));\n }\n\n /**\n *\n * @param {SocketHandlerMetadata} handlerMetadata\n * @param scope\n * @returns {(data) => void}\n */\n private static bindResponseMiddleware(handlerMetadata: SocketHandlerMetadata, scope: any) {\n const {returns} = handlerMetadata;\n\n return (response: any): void => {\n if (returns) {\n switch (returns.type) {\n case SocketReturnsTypes.BROADCAST:\n scope.nsp.emit(returns.eventName, response);\n break;\n case SocketReturnsTypes.BROADCAST_OTHERS:\n scope.socket.broadcast.emit(returns.eventName, response);\n break;\n case SocketReturnsTypes.EMIT:\n scope.socket.emit(returns.eventName, response);\n break;\n }\n }\n };\n }\n\n /**\n *\n * @returns {any}\n */\n public build(nsps: Map<string, Namespace>) {\n const instance = this.injector.get(this.provider.token);\n const {injectNamespaces, namespace} = this.socketProviderMetadata;\n const nsp = nsps.get(namespace);\n\n instance.$onConnection && this.socketProviderMetadata.createHook(\"$onConnection\", \"connection\");\n instance.$onDisconnect && this.socketProviderMetadata.createHook(\"$onDisconnect\", \"disconnect\");\n\n instance._nspSession = getNspSession(namespace);\n\n injectNamespaces.forEach((setting: SocketInjectableNsp) => {\n instance[setting.propertyKey] = nsps.get(setting.nsp || namespace);\n });\n\n instance[\"nsp\"] = nsp;\n\n if (instance.$onNamespaceInit) {\n instance.$onNamespaceInit(nsp);\n }\n\n return this;\n }\n\n /**\n *\n * @param {Socket} socket\n * @param {Namespace} nsp\n */\n public onConnection(socket: Socket, nsp: Namespace) {\n const {socketProviderMetadata} = this;\n const instance = this.injector.get(this.provider.token);\n\n this.buildHandlers(socket, nsp);\n this.createSession(socket);\n\n if (instance.$onConnection) {\n this.invoke(instance, socketProviderMetadata.$onConnection, {socket, nsp});\n }\n }\n\n public onDisconnect(socket: Socket, nsp: Namespace) {\n const instance = this.injector.get(this.provider.token);\n const {socketProviderMetadata} = this;\n\n if (instance.$onDisconnect) {\n this.invoke(instance, socketProviderMetadata.$onDisconnect, {socket, nsp});\n }\n\n this.destroySession(socket);\n }\n\n /**\n *\n * @param {Socket} socket\n */\n private createSession(socket: Socket) {\n const instance = this.injector.get(this.provider.token);\n instance._nspSession.set(socket.id, new Map());\n }\n\n /**\n *\n * @param {Socket} socket\n */\n private destroySession(socket: Socket) {\n const instance = this.injector.get(this.provider.token);\n instance._nspSession.delete(socket.id);\n }\n\n private buildHandlers(socket: Socket, nsp: Namespace) {\n const {socketProviderMetadata} = this;\n\n socketProviderMetadata.getHandlers().forEach((handler) => {\n const {eventName} = handler;\n\n if (eventName) {\n socket.on(eventName, (...args) => {\n this.runQueue(handler, args, socket, nsp);\n });\n }\n });\n }\n\n private async runQueue(handlerMetadata: SocketHandlerMetadata, args: any[], socket: Socket, nsp: Namespace) {\n let promise: any = Promise.resolve(args);\n const instance = this.injector.get(this.provider.token);\n const {useBefore, useAfter} = this.socketProviderMetadata;\n const scope = {\n args,\n socket,\n nsp,\n eventName: handlerMetadata.eventName\n };\n\n promise = promise.then(() => this.deserialize(handlerMetadata, scope));\n\n if (useBefore) {\n useBefore.forEach((target: any) => (promise = this.bindMiddleware(target, scope, promise)));\n }\n\n if (handlerMetadata.useBefore) {\n handlerMetadata.useBefore.forEach((target) => (promise = this.bindMiddleware(target, scope, promise)));\n }\n\n promise = promise\n .then(() => this.invoke(instance, handlerMetadata, scope))\n .then(SocketHandlersBuilder.bindResponseMiddleware(handlerMetadata, scope));\n\n if (handlerMetadata.useAfter) {\n handlerMetadata.useAfter.forEach((target) => (promise = this.bindMiddleware(target, scope, promise)));\n }\n\n if (useAfter) {\n useAfter.forEach((target: any) => (promise = this.bindMiddleware(target, scope, promise)));\n }\n\n return promise.catch((er: any) => {\n /* istanbul ignore next */\n $log.error(handlerMetadata.eventName, er);\n /* istanbul ignore next */\n process.exit(-1);\n });\n }\n\n private deserialize(handlerMetadata: SocketHandlerMetadata, scope: any) {\n const {parameters} = handlerMetadata;\n Object.keys(parameters || []).forEach((index: any) => {\n const {filter, useConverter, mapIndex, type, collectionType} = parameters![index];\n let value = scope.args[mapIndex!];\n\n if (filter === SocketFilters.ARGS && useConverter) {\n value = deserialize(value, {\n useAlias: true,\n additionalProperties: this.injector.settings.get(\"converter.additionalProperties\") === \"accept\",\n type,\n collectionType\n });\n scope.args[mapIndex!] = value;\n }\n });\n }\n\n private bindMiddleware(target: any, scope: any, promise: Promise<any>): Promise<any> {\n const instance = this.injector.get(target);\n\n if (instance) {\n const handlerMetadata: SocketProviderMetadata = new SocketProviderMetadata(Store.from(instance).get(\"socketIO\"));\n\n if (handlerMetadata.type === SocketProviderTypes.MIDDLEWARE) {\n if (handlerMetadata.error) {\n return promise.catch((error: any) => this.invoke(instance, handlerMetadata.useHandler, {error, ...scope}));\n }\n\n return promise\n .then(() => this.invoke(instance, handlerMetadata.useHandler, scope))\n .then((result: any) => {\n if (result) {\n scope.args = [].concat(result);\n }\n });\n }\n }\n\n return promise;\n }\n\n private async invoke(instance: any, handlerMetadata: SocketHandlerMetadata, scope: any): Promise<any> {\n const {methodClassName, parameters} = handlerMetadata;\n\n return await instance[methodClassName](...this.buildParameters(parameters!, scope));\n }\n\n private buildParameters(parameters: {[key: number]: SocketParamMetadata}, scope: any): any[] {\n return Object.keys(parameters || []).map((index: any) => {\n const param: SocketParamMetadata = parameters[index];\n\n switch (param.filter) {\n case SocketFilters.ARGS:\n if (param.mapIndex !== undefined) {\n return scope.args[param.mapIndex];\n }\n\n return scope.args;\n\n case SocketFilters.EVENT_NAME:\n return scope.eventName;\n\n case SocketFilters.SOCKET:\n return scope.socket;\n\n case SocketFilters.NSP:\n return scope.nsp;\n\n case SocketFilters.ERR:\n return scope.error;\n\n case SocketFilters.SESSION:\n const instance = this.injector.get(this.provider.token);\n return instance._nspSession.get(scope.socket.id);\n }\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SocketHandlersBuilder.js","sourceRoot":"","sources":["../../../src/class/SocketHandlersBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import {InjectorService, Provider} from \"@tsed/di\";\nimport {Store} from \"@tsed/core\";\nimport {$log} from \"@tsed/logger\";\nimport {deserialize} from \"@tsed/json-mapper\";\nimport {Namespace, Socket} from \"socket.io\";\nimport {SocketFilters} from \"../interfaces/SocketFilters\";\nimport {SocketHandlerMetadata} from \"../interfaces/SocketHandlerMetadata\";\nimport {SocketInjectableNsp} from \"../interfaces/SocketInjectableNsp\";\nimport {SocketParamMetadata} from \"../interfaces/SocketParamMetadata\";\nimport {SocketProviderTypes} from \"../interfaces/SocketProviderTypes\";\nimport {SocketReturnsTypes} from \"../interfaces/SocketReturnsTypes\";\nimport {getNspSession} from \"../registries/NspSessionRegistry\";\nimport {SocketProviderMetadata} from \"./SocketProviderMetadata\";\n\n/**\n * @ignore\n */\nexport class SocketHandlersBuilder {\n private socketProviderMetadata: SocketProviderMetadata;\n\n constructor(private provider: Provider, private injector: InjectorService) {\n this.socketProviderMetadata = new SocketProviderMetadata(this.provider.store.get(\"socketIO\"));\n }\n\n /**\n *\n * @param {SocketHandlerMetadata} handlerMetadata\n * @param scope\n * @returns {(data) => void}\n */\n private static bindResponseMiddleware(handlerMetadata: SocketHandlerMetadata, scope: any) {\n const {returns} = handlerMetadata;\n\n return (response: any): void => {\n if (returns) {\n switch (returns.type) {\n case SocketReturnsTypes.BROADCAST:\n scope.nsp.emit(returns.eventName, response);\n break;\n case SocketReturnsTypes.BROADCAST_OTHERS:\n scope.socket.broadcast.emit(returns.eventName, response);\n break;\n case SocketReturnsTypes.EMIT:\n scope.socket.emit(returns.eventName, response);\n break;\n }\n }\n };\n }\n\n /**\n *\n * @returns {any}\n */\n public build(nsps: Map<string, Namespace>) {\n const instance = this.injector.get(this.provider.token);\n const {injectNamespaces, namespace} = this.socketProviderMetadata;\n const nsp = nsps.get(namespace);\n\n instance.$onConnection && this.socketProviderMetadata.createHook(\"$onConnection\", \"connection\");\n instance.$onDisconnect && this.socketProviderMetadata.createHook(\"$onDisconnect\", \"disconnect\");\n\n instance._nspSession = getNspSession(namespace);\n\n injectNamespaces.forEach((setting: SocketInjectableNsp) => {\n instance[setting.propertyKey] = nsps.get(setting.nsp || namespace);\n });\n\n instance[\"nsp\"] = nsp;\n\n if (instance.$onNamespaceInit) {\n instance.$onNamespaceInit(nsp);\n }\n\n return this;\n }\n\n /**\n *\n * @param {Socket} socket\n * @param {Namespace} nsp\n */\n public onConnection(socket: Socket, nsp: Namespace) {\n const {socketProviderMetadata} = this;\n const instance = this.injector.get(this.provider.token);\n\n this.buildHandlers(socket, nsp);\n this.createSession(socket);\n\n if (instance.$onConnection) {\n this.invoke(instance, socketProviderMetadata.$onConnection, {socket, nsp});\n }\n }\n\n public onDisconnect(socket: Socket, nsp: Namespace) {\n const instance = this.injector.get(this.provider.token);\n const {socketProviderMetadata} = this;\n\n if (instance.$onDisconnect) {\n this.invoke(instance, socketProviderMetadata.$onDisconnect, {socket, nsp});\n }\n\n this.destroySession(socket);\n }\n\n /**\n *\n * @param {Socket} socket\n */\n private createSession(socket: Socket) {\n const instance = this.injector.get(this.provider.token);\n instance._nspSession.set(socket.id, new Map());\n }\n\n /**\n *\n * @param {Socket} socket\n */\n private destroySession(socket: Socket) {\n const instance = this.injector.get(this.provider.token);\n instance._nspSession.delete(socket.id);\n }\n\n private buildHandlers(socket: Socket, nsp: Namespace) {\n const {socketProviderMetadata} = this;\n\n socketProviderMetadata.getHandlers().forEach((handler) => {\n const {eventName} = handler;\n\n if (eventName) {\n socket.on(eventName, (...args) => {\n this.runQueue(handler, args, socket, nsp);\n });\n }\n });\n }\n\n private async runQueue(handlerMetadata: SocketHandlerMetadata, args: any[], socket: Socket, nsp: Namespace) {\n let promise: any = Promise.resolve(args);\n const instance = this.injector.get(this.provider.token);\n const {useBefore, useAfter} = this.socketProviderMetadata;\n const scope = {\n args,\n socket,\n nsp,\n eventName: handlerMetadata.eventName\n };\n\n promise = promise.then(() => this.deserialize(handlerMetadata, scope));\n\n if (useBefore) {\n useBefore.forEach((target: any) => (promise = this.bindMiddleware(target, scope, promise)));\n }\n\n if (handlerMetadata.useBefore) {\n handlerMetadata.useBefore.forEach((target) => (promise = this.bindMiddleware(target, scope, promise)));\n }\n\n promise = promise\n .then(() => this.invoke(instance, handlerMetadata, scope))\n .then(SocketHandlersBuilder.bindResponseMiddleware(handlerMetadata, scope));\n\n if (handlerMetadata.useAfter) {\n handlerMetadata.useAfter.forEach((target) => (promise = this.bindMiddleware(target, scope, promise)));\n }\n\n if (useAfter) {\n useAfter.forEach((target: any) => (promise = this.bindMiddleware(target, scope, promise)));\n }\n\n return promise.catch((er: any) => {\n /* istanbul ignore next */\n $log.error(handlerMetadata.eventName, er);\n /* istanbul ignore next */\n process.exit(-1);\n });\n }\n\n private deserialize(handlerMetadata: SocketHandlerMetadata, scope: any) {\n const {parameters} = handlerMetadata;\n Object.keys(parameters || []).forEach((index: any) => {\n const {filter, useConverter, mapIndex, type, collectionType} = parameters![index];\n let value = scope.args[mapIndex!];\n\n if (filter === SocketFilters.ARGS && useConverter) {\n value = deserialize(value, {\n useAlias: true,\n type,\n collectionType\n });\n scope.args[mapIndex!] = value;\n }\n });\n }\n\n private bindMiddleware(target: any, scope: any, promise: Promise<any>): Promise<any> {\n const instance = this.injector.get(target);\n\n if (instance) {\n const handlerMetadata: SocketProviderMetadata = new SocketProviderMetadata(Store.from(instance).get(\"socketIO\"));\n\n if (handlerMetadata.type === SocketProviderTypes.MIDDLEWARE) {\n if (handlerMetadata.error) {\n return promise.catch((error: any) => this.invoke(instance, handlerMetadata.useHandler, {error, ...scope}));\n }\n\n return promise\n .then(() => this.invoke(instance, handlerMetadata.useHandler, scope))\n .then((result: any) => {\n if (result) {\n scope.args = [].concat(result);\n }\n });\n }\n }\n\n return promise;\n }\n\n private async invoke(instance: any, handlerMetadata: SocketHandlerMetadata, scope: any): Promise<any> {\n const {methodClassName, parameters} = handlerMetadata;\n\n return await instance[methodClassName](...this.buildParameters(parameters!, scope));\n }\n\n private buildParameters(parameters: {[key: number]: SocketParamMetadata}, scope: any): any[] {\n return Object.keys(parameters || []).map((index: any) => {\n const param: SocketParamMetadata = parameters[index];\n\n switch (param.filter) {\n case SocketFilters.ARGS:\n if (param.mapIndex !== undefined) {\n return scope.args[param.mapIndex];\n }\n\n return scope.args;\n\n case SocketFilters.EVENT_NAME:\n return scope.eventName;\n\n case SocketFilters.SOCKET:\n return scope.socket;\n\n case SocketFilters.NSP:\n return scope.nsp;\n\n case SocketFilters.ERR:\n return scope.error;\n\n case SocketFilters.SESSION:\n const instance = this.injector.get(this.provider.token);\n return instance._nspSession.get(scope.socket.id);\n }\n });\n }\n}\n"]}
|
|
@@ -152,7 +152,6 @@ export class SocketHandlersBuilder {
|
|
|
152
152
|
if (filter === SocketFilters.ARGS && useConverter) {
|
|
153
153
|
value = deserialize(value, {
|
|
154
154
|
useAlias: true,
|
|
155
|
-
additionalProperties: this.injector.settings.get("converter.additionalProperties") === "accept",
|
|
156
155
|
type,
|
|
157
156
|
collectionType
|
|
158
157
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SocketHandlersBuilder.js","sourceRoot":"","sources":["../../../src/class/SocketHandlersBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import {InjectorService, Provider} from \"@tsed/di\";\nimport {Store} from \"@tsed/core\";\nimport {$log} from \"@tsed/logger\";\nimport {deserialize} from \"@tsed/json-mapper\";\nimport {Namespace, Socket} from \"socket.io\";\nimport {SocketFilters} from \"../interfaces/SocketFilters\";\nimport {SocketHandlerMetadata} from \"../interfaces/SocketHandlerMetadata\";\nimport {SocketInjectableNsp} from \"../interfaces/SocketInjectableNsp\";\nimport {SocketParamMetadata} from \"../interfaces/SocketParamMetadata\";\nimport {SocketProviderTypes} from \"../interfaces/SocketProviderTypes\";\nimport {SocketReturnsTypes} from \"../interfaces/SocketReturnsTypes\";\nimport {getNspSession} from \"../registries/NspSessionRegistry\";\nimport {SocketProviderMetadata} from \"./SocketProviderMetadata\";\n\n/**\n * @ignore\n */\nexport class SocketHandlersBuilder {\n private socketProviderMetadata: SocketProviderMetadata;\n\n constructor(private provider: Provider, private injector: InjectorService) {\n this.socketProviderMetadata = new SocketProviderMetadata(this.provider.store.get(\"socketIO\"));\n }\n\n /**\n *\n * @param {SocketHandlerMetadata} handlerMetadata\n * @param scope\n * @returns {(data) => void}\n */\n private static bindResponseMiddleware(handlerMetadata: SocketHandlerMetadata, scope: any) {\n const {returns} = handlerMetadata;\n\n return (response: any): void => {\n if (returns) {\n switch (returns.type) {\n case SocketReturnsTypes.BROADCAST:\n scope.nsp.emit(returns.eventName, response);\n break;\n case SocketReturnsTypes.BROADCAST_OTHERS:\n scope.socket.broadcast.emit(returns.eventName, response);\n break;\n case SocketReturnsTypes.EMIT:\n scope.socket.emit(returns.eventName, response);\n break;\n }\n }\n };\n }\n\n /**\n *\n * @returns {any}\n */\n public build(nsps: Map<string, Namespace>) {\n const instance = this.injector.get(this.provider.token);\n const {injectNamespaces, namespace} = this.socketProviderMetadata;\n const nsp = nsps.get(namespace);\n\n instance.$onConnection && this.socketProviderMetadata.createHook(\"$onConnection\", \"connection\");\n instance.$onDisconnect && this.socketProviderMetadata.createHook(\"$onDisconnect\", \"disconnect\");\n\n instance._nspSession = getNspSession(namespace);\n\n injectNamespaces.forEach((setting: SocketInjectableNsp) => {\n instance[setting.propertyKey] = nsps.get(setting.nsp || namespace);\n });\n\n instance[\"nsp\"] = nsp;\n\n if (instance.$onNamespaceInit) {\n instance.$onNamespaceInit(nsp);\n }\n\n return this;\n }\n\n /**\n *\n * @param {Socket} socket\n * @param {Namespace} nsp\n */\n public onConnection(socket: Socket, nsp: Namespace) {\n const {socketProviderMetadata} = this;\n const instance = this.injector.get(this.provider.token);\n\n this.buildHandlers(socket, nsp);\n this.createSession(socket);\n\n if (instance.$onConnection) {\n this.invoke(instance, socketProviderMetadata.$onConnection, {socket, nsp});\n }\n }\n\n public onDisconnect(socket: Socket, nsp: Namespace) {\n const instance = this.injector.get(this.provider.token);\n const {socketProviderMetadata} = this;\n\n if (instance.$onDisconnect) {\n this.invoke(instance, socketProviderMetadata.$onDisconnect, {socket, nsp});\n }\n\n this.destroySession(socket);\n }\n\n /**\n *\n * @param {Socket} socket\n */\n private createSession(socket: Socket) {\n const instance = this.injector.get(this.provider.token);\n instance._nspSession.set(socket.id, new Map());\n }\n\n /**\n *\n * @param {Socket} socket\n */\n private destroySession(socket: Socket) {\n const instance = this.injector.get(this.provider.token);\n instance._nspSession.delete(socket.id);\n }\n\n private buildHandlers(socket: Socket, nsp: Namespace) {\n const {socketProviderMetadata} = this;\n\n socketProviderMetadata.getHandlers().forEach((handler) => {\n const {eventName} = handler;\n\n if (eventName) {\n socket.on(eventName, (...args) => {\n this.runQueue(handler, args, socket, nsp);\n });\n }\n });\n }\n\n private async runQueue(handlerMetadata: SocketHandlerMetadata, args: any[], socket: Socket, nsp: Namespace) {\n let promise: any = Promise.resolve(args);\n const instance = this.injector.get(this.provider.token);\n const {useBefore, useAfter} = this.socketProviderMetadata;\n const scope = {\n args,\n socket,\n nsp,\n eventName: handlerMetadata.eventName\n };\n\n promise = promise.then(() => this.deserialize(handlerMetadata, scope));\n\n if (useBefore) {\n useBefore.forEach((target: any) => (promise = this.bindMiddleware(target, scope, promise)));\n }\n\n if (handlerMetadata.useBefore) {\n handlerMetadata.useBefore.forEach((target) => (promise = this.bindMiddleware(target, scope, promise)));\n }\n\n promise = promise\n .then(() => this.invoke(instance, handlerMetadata, scope))\n .then(SocketHandlersBuilder.bindResponseMiddleware(handlerMetadata, scope));\n\n if (handlerMetadata.useAfter) {\n handlerMetadata.useAfter.forEach((target) => (promise = this.bindMiddleware(target, scope, promise)));\n }\n\n if (useAfter) {\n useAfter.forEach((target: any) => (promise = this.bindMiddleware(target, scope, promise)));\n }\n\n return promise.catch((er: any) => {\n /* istanbul ignore next */\n $log.error(handlerMetadata.eventName, er);\n /* istanbul ignore next */\n process.exit(-1);\n });\n }\n\n private deserialize(handlerMetadata: SocketHandlerMetadata, scope: any) {\n const {parameters} = handlerMetadata;\n Object.keys(parameters || []).forEach((index: any) => {\n const {filter, useConverter, mapIndex, type, collectionType} = parameters![index];\n let value = scope.args[mapIndex!];\n\n if (filter === SocketFilters.ARGS && useConverter) {\n value = deserialize(value, {\n useAlias: true,\n additionalProperties: this.injector.settings.get(\"converter.additionalProperties\") === \"accept\",\n type,\n collectionType\n });\n scope.args[mapIndex!] = value;\n }\n });\n }\n\n private bindMiddleware(target: any, scope: any, promise: Promise<any>): Promise<any> {\n const instance = this.injector.get(target);\n\n if (instance) {\n const handlerMetadata: SocketProviderMetadata = new SocketProviderMetadata(Store.from(instance).get(\"socketIO\"));\n\n if (handlerMetadata.type === SocketProviderTypes.MIDDLEWARE) {\n if (handlerMetadata.error) {\n return promise.catch((error: any) => this.invoke(instance, handlerMetadata.useHandler, {error, ...scope}));\n }\n\n return promise\n .then(() => this.invoke(instance, handlerMetadata.useHandler, scope))\n .then((result: any) => {\n if (result) {\n scope.args = [].concat(result);\n }\n });\n }\n }\n\n return promise;\n }\n\n private async invoke(instance: any, handlerMetadata: SocketHandlerMetadata, scope: any): Promise<any> {\n const {methodClassName, parameters} = handlerMetadata;\n\n return await instance[methodClassName](...this.buildParameters(parameters!, scope));\n }\n\n private buildParameters(parameters: {[key: number]: SocketParamMetadata}, scope: any): any[] {\n return Object.keys(parameters || []).map((index: any) => {\n const param: SocketParamMetadata = parameters[index];\n\n switch (param.filter) {\n case SocketFilters.ARGS:\n if (param.mapIndex !== undefined) {\n return scope.args[param.mapIndex];\n }\n\n return scope.args;\n\n case SocketFilters.EVENT_NAME:\n return scope.eventName;\n\n case SocketFilters.SOCKET:\n return scope.socket;\n\n case SocketFilters.NSP:\n return scope.nsp;\n\n case SocketFilters.ERR:\n return scope.error;\n\n case SocketFilters.SESSION:\n const instance = this.injector.get(this.provider.token);\n return instance._nspSession.get(scope.socket.id);\n }\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SocketHandlersBuilder.js","sourceRoot":"","sources":["../../../src/class/SocketHandlersBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import {InjectorService, Provider} from \"@tsed/di\";\nimport {Store} from \"@tsed/core\";\nimport {$log} from \"@tsed/logger\";\nimport {deserialize} from \"@tsed/json-mapper\";\nimport {Namespace, Socket} from \"socket.io\";\nimport {SocketFilters} from \"../interfaces/SocketFilters\";\nimport {SocketHandlerMetadata} from \"../interfaces/SocketHandlerMetadata\";\nimport {SocketInjectableNsp} from \"../interfaces/SocketInjectableNsp\";\nimport {SocketParamMetadata} from \"../interfaces/SocketParamMetadata\";\nimport {SocketProviderTypes} from \"../interfaces/SocketProviderTypes\";\nimport {SocketReturnsTypes} from \"../interfaces/SocketReturnsTypes\";\nimport {getNspSession} from \"../registries/NspSessionRegistry\";\nimport {SocketProviderMetadata} from \"./SocketProviderMetadata\";\n\n/**\n * @ignore\n */\nexport class SocketHandlersBuilder {\n private socketProviderMetadata: SocketProviderMetadata;\n\n constructor(private provider: Provider, private injector: InjectorService) {\n this.socketProviderMetadata = new SocketProviderMetadata(this.provider.store.get(\"socketIO\"));\n }\n\n /**\n *\n * @param {SocketHandlerMetadata} handlerMetadata\n * @param scope\n * @returns {(data) => void}\n */\n private static bindResponseMiddleware(handlerMetadata: SocketHandlerMetadata, scope: any) {\n const {returns} = handlerMetadata;\n\n return (response: any): void => {\n if (returns) {\n switch (returns.type) {\n case SocketReturnsTypes.BROADCAST:\n scope.nsp.emit(returns.eventName, response);\n break;\n case SocketReturnsTypes.BROADCAST_OTHERS:\n scope.socket.broadcast.emit(returns.eventName, response);\n break;\n case SocketReturnsTypes.EMIT:\n scope.socket.emit(returns.eventName, response);\n break;\n }\n }\n };\n }\n\n /**\n *\n * @returns {any}\n */\n public build(nsps: Map<string, Namespace>) {\n const instance = this.injector.get(this.provider.token);\n const {injectNamespaces, namespace} = this.socketProviderMetadata;\n const nsp = nsps.get(namespace);\n\n instance.$onConnection && this.socketProviderMetadata.createHook(\"$onConnection\", \"connection\");\n instance.$onDisconnect && this.socketProviderMetadata.createHook(\"$onDisconnect\", \"disconnect\");\n\n instance._nspSession = getNspSession(namespace);\n\n injectNamespaces.forEach((setting: SocketInjectableNsp) => {\n instance[setting.propertyKey] = nsps.get(setting.nsp || namespace);\n });\n\n instance[\"nsp\"] = nsp;\n\n if (instance.$onNamespaceInit) {\n instance.$onNamespaceInit(nsp);\n }\n\n return this;\n }\n\n /**\n *\n * @param {Socket} socket\n * @param {Namespace} nsp\n */\n public onConnection(socket: Socket, nsp: Namespace) {\n const {socketProviderMetadata} = this;\n const instance = this.injector.get(this.provider.token);\n\n this.buildHandlers(socket, nsp);\n this.createSession(socket);\n\n if (instance.$onConnection) {\n this.invoke(instance, socketProviderMetadata.$onConnection, {socket, nsp});\n }\n }\n\n public onDisconnect(socket: Socket, nsp: Namespace) {\n const instance = this.injector.get(this.provider.token);\n const {socketProviderMetadata} = this;\n\n if (instance.$onDisconnect) {\n this.invoke(instance, socketProviderMetadata.$onDisconnect, {socket, nsp});\n }\n\n this.destroySession(socket);\n }\n\n /**\n *\n * @param {Socket} socket\n */\n private createSession(socket: Socket) {\n const instance = this.injector.get(this.provider.token);\n instance._nspSession.set(socket.id, new Map());\n }\n\n /**\n *\n * @param {Socket} socket\n */\n private destroySession(socket: Socket) {\n const instance = this.injector.get(this.provider.token);\n instance._nspSession.delete(socket.id);\n }\n\n private buildHandlers(socket: Socket, nsp: Namespace) {\n const {socketProviderMetadata} = this;\n\n socketProviderMetadata.getHandlers().forEach((handler) => {\n const {eventName} = handler;\n\n if (eventName) {\n socket.on(eventName, (...args) => {\n this.runQueue(handler, args, socket, nsp);\n });\n }\n });\n }\n\n private async runQueue(handlerMetadata: SocketHandlerMetadata, args: any[], socket: Socket, nsp: Namespace) {\n let promise: any = Promise.resolve(args);\n const instance = this.injector.get(this.provider.token);\n const {useBefore, useAfter} = this.socketProviderMetadata;\n const scope = {\n args,\n socket,\n nsp,\n eventName: handlerMetadata.eventName\n };\n\n promise = promise.then(() => this.deserialize(handlerMetadata, scope));\n\n if (useBefore) {\n useBefore.forEach((target: any) => (promise = this.bindMiddleware(target, scope, promise)));\n }\n\n if (handlerMetadata.useBefore) {\n handlerMetadata.useBefore.forEach((target) => (promise = this.bindMiddleware(target, scope, promise)));\n }\n\n promise = promise\n .then(() => this.invoke(instance, handlerMetadata, scope))\n .then(SocketHandlersBuilder.bindResponseMiddleware(handlerMetadata, scope));\n\n if (handlerMetadata.useAfter) {\n handlerMetadata.useAfter.forEach((target) => (promise = this.bindMiddleware(target, scope, promise)));\n }\n\n if (useAfter) {\n useAfter.forEach((target: any) => (promise = this.bindMiddleware(target, scope, promise)));\n }\n\n return promise.catch((er: any) => {\n /* istanbul ignore next */\n $log.error(handlerMetadata.eventName, er);\n /* istanbul ignore next */\n process.exit(-1);\n });\n }\n\n private deserialize(handlerMetadata: SocketHandlerMetadata, scope: any) {\n const {parameters} = handlerMetadata;\n Object.keys(parameters || []).forEach((index: any) => {\n const {filter, useConverter, mapIndex, type, collectionType} = parameters![index];\n let value = scope.args[mapIndex!];\n\n if (filter === SocketFilters.ARGS && useConverter) {\n value = deserialize(value, {\n useAlias: true,\n type,\n collectionType\n });\n scope.args[mapIndex!] = value;\n }\n });\n }\n\n private bindMiddleware(target: any, scope: any, promise: Promise<any>): Promise<any> {\n const instance = this.injector.get(target);\n\n if (instance) {\n const handlerMetadata: SocketProviderMetadata = new SocketProviderMetadata(Store.from(instance).get(\"socketIO\"));\n\n if (handlerMetadata.type === SocketProviderTypes.MIDDLEWARE) {\n if (handlerMetadata.error) {\n return promise.catch((error: any) => this.invoke(instance, handlerMetadata.useHandler, {error, ...scope}));\n }\n\n return promise\n .then(() => this.invoke(instance, handlerMetadata.useHandler, scope))\n .then((result: any) => {\n if (result) {\n scope.args = [].concat(result);\n }\n });\n }\n }\n\n return promise;\n }\n\n private async invoke(instance: any, handlerMetadata: SocketHandlerMetadata, scope: any): Promise<any> {\n const {methodClassName, parameters} = handlerMetadata;\n\n return await instance[methodClassName](...this.buildParameters(parameters!, scope));\n }\n\n private buildParameters(parameters: {[key: number]: SocketParamMetadata}, scope: any): any[] {\n return Object.keys(parameters || []).map((index: any) => {\n const param: SocketParamMetadata = parameters[index];\n\n switch (param.filter) {\n case SocketFilters.ARGS:\n if (param.mapIndex !== undefined) {\n return scope.args[param.mapIndex];\n }\n\n return scope.args;\n\n case SocketFilters.EVENT_NAME:\n return scope.eventName;\n\n case SocketFilters.SOCKET:\n return scope.socket;\n\n case SocketFilters.NSP:\n return scope.nsp;\n\n case SocketFilters.ERR:\n return scope.error;\n\n case SocketFilters.SESSION:\n const instance = this.injector.get(this.provider.token);\n return instance._nspSession.get(scope.socket.id);\n }\n });\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tsed/socketio",
|
|
3
|
-
"version": "7.0.0-rc.
|
|
3
|
+
"version": "7.0.0-rc.4",
|
|
4
4
|
"description": "Socket.io package for Ts.ED framework",
|
|
5
5
|
"private": false,
|
|
6
6
|
"keywords": [
|
|
@@ -32,23 +32,23 @@
|
|
|
32
32
|
"tslib": "2.4.0"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@tsed/common": "7.0.0-rc.
|
|
36
|
-
"@tsed/core": "7.0.0-rc.
|
|
37
|
-
"@tsed/di": "7.0.0-rc.
|
|
38
|
-
"@tsed/json-mapper": "7.0.0-rc.
|
|
39
|
-
"@tsed/openspec": "7.0.0-rc.
|
|
40
|
-
"@tsed/platform-middlewares": "7.0.0-rc.
|
|
41
|
-
"@tsed/schema": "7.0.0-rc.
|
|
35
|
+
"@tsed/common": "7.0.0-rc.4",
|
|
36
|
+
"@tsed/core": "7.0.0-rc.4",
|
|
37
|
+
"@tsed/di": "7.0.0-rc.4",
|
|
38
|
+
"@tsed/json-mapper": "7.0.0-rc.4",
|
|
39
|
+
"@tsed/openspec": "7.0.0-rc.4",
|
|
40
|
+
"@tsed/platform-middlewares": "7.0.0-rc.4",
|
|
41
|
+
"@tsed/schema": "7.0.0-rc.4",
|
|
42
42
|
"express": "^4.17.1",
|
|
43
43
|
"socket.io": "4.4.1",
|
|
44
44
|
"socket.io-client": "^4.1.2"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
|
-
"@tsed/di": "^7.0.0-rc.
|
|
48
|
-
"@tsed/json-mapper": "^7.0.0-rc.
|
|
49
|
-
"@tsed/logger": ">=6.2.
|
|
50
|
-
"@tsed/platform-middlewares": "^7.0.0-rc.
|
|
51
|
-
"@tsed/schema": "^7.0.0-rc.
|
|
47
|
+
"@tsed/di": "^7.0.0-rc.4",
|
|
48
|
+
"@tsed/json-mapper": "^7.0.0-rc.4",
|
|
49
|
+
"@tsed/logger": ">=6.2.2",
|
|
50
|
+
"@tsed/platform-middlewares": "^7.0.0-rc.4",
|
|
51
|
+
"@tsed/schema": "^7.0.0-rc.4",
|
|
52
52
|
"socket.io": ">=4.0.0"
|
|
53
53
|
},
|
|
54
54
|
"peerDependenciesMeta": {
|
package/readme.md
CHANGED
|
@@ -130,7 +130,7 @@ export class MyCtrl {
|
|
|
130
130
|
|
|
131
131
|
### Declaring an Input Event
|
|
132
132
|
|
|
133
|
-
|
|
133
|
+
@Input decorator declare a method as a new handler for a specific `event`.
|
|
134
134
|
|
|
135
135
|
```typescript
|
|
136
136
|
import {SocketService, Input, Emit, Args, Socket, Nsp} from "@tsed/socketio";
|
|
@@ -144,15 +144,15 @@ export class MySocketService {
|
|
|
144
144
|
}
|
|
145
145
|
```
|
|
146
146
|
|
|
147
|
-
-
|
|
148
|
-
-
|
|
149
|
-
-
|
|
147
|
+
- @Args <any|any[]>: List of the parameters sent by the input event.
|
|
148
|
+
- @Socket <SocketIO.Socket>: Socket instance.
|
|
149
|
+
- @Nsp <[SocketIO.Namespace](https://socket.io/docs/rooms-and-namespaces/#)>: Namespace instance.
|
|
150
150
|
|
|
151
151
|
### Send a response
|
|
152
152
|
|
|
153
153
|
You have a many choice to send a response to your client. Ts.ED offer some decorators to send a response:
|
|
154
154
|
|
|
155
|
-

|
|
156
156
|
|
|
157
157
|
Example:
|
|
158
158
|
|
|
@@ -284,9 +284,9 @@ See our documentation https://tsed.io/#/api/index
|
|
|
284
284
|
|
|
285
285
|
## Contributors
|
|
286
286
|
|
|
287
|
-
Please read [contributing guidelines here](https://tsed.io/
|
|
287
|
+
Please read [contributing guidelines here](https://tsed.io/contributing.html)
|
|
288
288
|
|
|
289
|
-
<a href="https://github.com/tsedio/
|
|
289
|
+
<a href="https://github.com/tsedio/tsed/graphs/contributors"><img src="https://opencollective.com/tsed/contributors.svg?width=890" /></a>
|
|
290
290
|
|
|
291
291
|
## Backers
|
|
292
292
|
|