@tsed/socketio 7.0.0-rc.1 → 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":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AACjC,OAAO,EAAC,IAAI,EAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAI1D,OAAO,EAAC,mBAAmB,EAAC,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAC,kBAAkB,EAAC,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAC,aAAa,EAAC,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAEhE;;GAEG;AACH,MAAM,OAAO,qBAAqB;IAGZ;IAA4B;IAFxC,sBAAsB,CAAyB;IAEvD,YAAoB,QAAkB,EAAU,QAAyB;QAArD,aAAQ,GAAR,QAAQ,CAAU;QAAU,aAAQ,GAAR,QAAQ,CAAiB;QACvE,IAAI,CAAC,sBAAsB,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IAChG,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,sBAAsB,CAAC,eAAsC,EAAE,KAAU;QACtF,MAAM,EAAC,OAAO,EAAC,GAAG,eAAe,CAAC;QAElC,OAAO,CAAC,QAAa,EAAQ,EAAE;YAC7B,IAAI,OAAO,EAAE;gBACX,QAAQ,OAAO,CAAC,IAAI,EAAE;oBACpB,KAAK,kBAAkB,CAAC,SAAS;wBAC/B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAC5C,MAAM;oBACR,KAAK,kBAAkB,CAAC,gBAAgB;wBACtC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;wBACzD,MAAM;oBACR,KAAK,kBAAkB,CAAC,IAAI;wBAC1B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAC/C,MAAM;iBACT;aACF;QACH,CAAC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,IAA4B;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,EAAC,gBAAgB,EAAE,SAAS,EAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC;QAClE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAEhC,QAAQ,CAAC,aAAa,IAAI,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAChG,QAAQ,CAAC,aAAa,IAAI,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAEhG,QAAQ,CAAC,WAAW,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QAEhD,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAA4B,EAAE,EAAE;YACxD,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;QAEtB,IAAI,QAAQ,CAAC,gBAAgB,EAAE;YAC7B,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;SAChC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,MAAc,EAAE,GAAc;QAChD,MAAM,EAAC,sBAAsB,EAAC,GAAG,IAAI,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAExD,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAE3B,IAAI,QAAQ,CAAC,aAAa,EAAE;YAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,sBAAsB,CAAC,aAAa,EAAE,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC,CAAC;SAC5E;IACH,CAAC;IAEM,YAAY,CAAC,MAAc,EAAE,GAAc;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,EAAC,sBAAsB,EAAC,GAAG,IAAI,CAAC;QAEtC,IAAI,QAAQ,CAAC,aAAa,EAAE;YAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,sBAAsB,CAAC,aAAa,EAAE,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC,CAAC;SAC5E;QAED,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACK,aAAa,CAAC,MAAc;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxD,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IACjD,CAAC;IAED;;;OAGG;IACK,cAAc,CAAC,MAAc;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxD,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC;IAEO,aAAa,CAAC,MAAc,EAAE,GAAc;QAClD,MAAM,EAAC,sBAAsB,EAAC,GAAG,IAAI,CAAC;QAEtC,sBAAsB,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACvD,MAAM,EAAC,SAAS,EAAC,GAAG,OAAO,CAAC;YAE5B,IAAI,SAAS,EAAE;gBACb,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE;oBAC/B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;gBAC5C,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,eAAsC,EAAE,IAAW,EAAE,MAAc,EAAE,GAAc;QACxG,IAAI,OAAO,GAAQ,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,EAAC,SAAS,EAAE,QAAQ,EAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC;QAC1D,MAAM,KAAK,GAAG;YACZ,IAAI;YACJ,MAAM;YACN,GAAG;YACH,SAAS,EAAE,eAAe,CAAC,SAAS;SACrC,CAAC;QAEF,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;QAEvE,IAAI,SAAS,EAAE;YACb,SAAS,CAAC,OAAO,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;SAC7F;QAED,IAAI,eAAe,CAAC,SAAS,EAAE;YAC7B,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;SACxG;QAED,OAAO,GAAG,OAAO;aACd,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;aACzD,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;QAE9E,IAAI,eAAe,CAAC,QAAQ,EAAE;YAC5B,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;SACvG;QAED,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;SAC5F;QAED,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAO,EAAE,EAAE;YAC/B,0BAA0B;YAC1B,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC1C,0BAA0B;YAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,WAAW,CAAC,eAAsC,EAAE,KAAU;QACpE,MAAM,EAAC,UAAU,EAAC,GAAG,eAAe,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;YACnD,MAAM,EAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAC,GAAG,UAAW,CAAC,KAAK,CAAC,CAAC;YAClF,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAS,CAAC,CAAC;YAElC,IAAI,MAAM,KAAK,aAAa,CAAC,IAAI,IAAI,YAAY,EAAE;gBACjD,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE;oBACzB,QAAQ,EAAE,IAAI;oBACd,IAAI;oBACJ,cAAc;iBACf,CAAC,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC,QAAS,CAAC,GAAG,KAAK,CAAC;aAC/B;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,MAAW,EAAE,KAAU,EAAE,OAAqB;QACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE3C,IAAI,QAAQ,EAAE;YACZ,MAAM,eAAe,GAA2B,IAAI,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;YAEjH,IAAI,eAAe,CAAC,IAAI,KAAK,mBAAmB,CAAC,UAAU,EAAE;gBAC3D,IAAI,eAAe,CAAC,KAAK,EAAE;oBACzB,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,UAAU,EAAE,EAAC,KAAK,EAAE,GAAG,KAAK,EAAC,CAAC,CAAC,CAAC;iBAC5G;gBAED,OAAO,OAAO;qBACX,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;qBACpE,IAAI,CAAC,CAAC,MAAW,EAAE,EAAE;oBACpB,IAAI,MAAM,EAAE;wBACV,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;qBAChC;gBACH,CAAC,CAAC,CAAC;aACN;SACF;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,QAAa,EAAE,eAAsC,EAAE,KAAU;QACpF,MAAM,EAAC,eAAe,EAAE,UAAU,EAAC,GAAG,eAAe,CAAC;QAEtD,OAAO,MAAM,QAAQ,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,UAAW,EAAE,KAAK,CAAC,CAAC,CAAC;IACtF,CAAC;IAEO,eAAe,CAAC,UAAgD,EAAE,KAAU;QAClF,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE;YACtD,MAAM,KAAK,GAAwB,UAAU,CAAC,KAAK,CAAC,CAAC;YAErD,QAAQ,KAAK,CAAC,MAAM,EAAE;gBACpB,KAAK,aAAa,CAAC,IAAI;oBACrB,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE;wBAChC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;qBACnC;oBAED,OAAO,KAAK,CAAC,IAAI,CAAC;gBAEpB,KAAK,aAAa,CAAC,UAAU;oBAC3B,OAAO,KAAK,CAAC,SAAS,CAAC;gBAEzB,KAAK,aAAa,CAAC,MAAM;oBACvB,OAAO,KAAK,CAAC,MAAM,CAAC;gBAEtB,KAAK,aAAa,CAAC,GAAG;oBACpB,OAAO,KAAK,CAAC,GAAG,CAAC;gBAEnB,KAAK,aAAa,CAAC,GAAG;oBACpB,OAAO,KAAK,CAAC,KAAK,CAAC;gBAErB,KAAK,aAAa,CAAC,OAAO;oBACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACxD,OAAO,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;aACpD;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF","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.1",
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.1",
36
- "@tsed/core": "7.0.0-rc.1",
37
- "@tsed/di": "7.0.0-rc.1",
38
- "@tsed/json-mapper": "7.0.0-rc.1",
39
- "@tsed/openspec": "7.0.0-rc.1",
40
- "@tsed/platform-middlewares": "7.0.0-rc.1",
41
- "@tsed/schema": "7.0.0-rc.1",
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.1",
48
- "@tsed/json-mapper": "^7.0.0-rc.1",
49
- "@tsed/logger": ">=6.2.0",
50
- "@tsed/platform-middlewares": "^7.0.0-rc.1",
51
- "@tsed/schema": "^7.0.0-rc.1",
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
- [@Input](https://tsed.io/api/socketio/decorators/Input.html) decorator declare a method as a new handler for a specific `event`.
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
- - [@Args](https://tsed.io/api/socketio/args.html) &lt;any|any[]&gt;: List of the parameters sent by the input event.
148
- - [@Socket](https://tsed.io/api/socketio/socket.html) &lt;SocketIO.Socket&gt;: Socket instance.
149
- - [@Nsp](https://tsed.io/api/socketio/nsp.html) &lt;[SocketIO.Namespace](https://socket.io/docs/rooms-and-namespaces/#)&gt;: Namespace instance.
147
+ - @Args &lt;any|any[]&gt;: List of the parameters sent by the input event.
148
+ - @Socket &lt;SocketIO.Socket&gt;: Socket instance.
149
+ - @Nsp &lt;[SocketIO.Namespace](https://socket.io/docs/rooms-and-namespaces/#)&gt;: 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
- ![socketio](https://tsed.io/_media/socketio.png)
155
+ ![socketio](https://tsed.io/socketio.png)
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/CONTRIBUTING.html)
287
+ Please read [contributing guidelines here](https://tsed.io/contributing.html)
288
288
 
289
- <a href="https://github.com/tsedio/ts-express-decorators/graphs/contributors"><img src="https://opencollective.com/tsed/contributors.svg?width=890" /></a>
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