11import { MetadataBuilder } from './metadata-builder/MetadataBuilder' ;
22import { ActionMetadata } from './metadata/ActionMetadata' ;
3- import { classToPlain , ClassTransformOptions , plainToClass } from 'class-transformer' ;
3+ import { instanceToPlain , ClassTransformOptions , plainToInstance } from 'class-transformer' ;
44import { ActionTypes } from './metadata/types/ActionTypes' ;
55import { ParamMetadata } from './metadata/ParamMetadata' ;
66import { ParameterParseJsonError } from './error/ParameterParseJsonError' ;
@@ -20,19 +20,19 @@ export class SocketControllerExecutor {
2020 * Indicates if class-transformer package should be used to perform message body serialization / deserialization.
2121 * By default its enabled.
2222 */
23- useClassTransformer : boolean ;
23+ useClassTransformer ? : boolean ;
2424
2525 /**
2626 * Global class transformer options passed to class-transformer during classToPlain operation.
2727 * This operation is being executed when server returns response to user.
2828 */
29- classToPlainTransformOptions : ClassTransformOptions ;
29+ classToPlainTransformOptions ? : ClassTransformOptions ;
3030
3131 /**
32- * Global class transformer options passed to class-transformer during plainToClass operation.
32+ * Global class transformer options passed to class-transformer during plainToInstance operation.
3333 * This operation is being executed when parsing user parameters.
3434 */
35- plainToClassTransformOptions : ClassTransformOptions ;
35+ plainToClassTransformOptions ? : ClassTransformOptions ;
3636
3737 // -------------------------------------------------------------------------
3838 // Private properties
@@ -68,7 +68,7 @@ export class SocketControllerExecutor {
6868 const middlewares = this . metadataBuilder . buildMiddlewareMetadata ( classes ) ;
6969
7070 middlewares
71- . sort ( ( middleware1 , middleware2 ) => middleware1 . priority - middleware2 . priority )
71+ . sort ( ( middleware1 , middleware2 ) => ( middleware1 . priority || 0 ) - ( middleware2 . priority || 0 ) )
7272 . forEach ( middleware => {
7373 this . io . use ( ( socket : any , next : ( err ?: any ) => any ) => {
7474 middleware . instance . use ( socket , next ) ;
@@ -91,8 +91,8 @@ export class SocketControllerExecutor {
9191
9292 // register controllers with namespaces
9393 controllersWithNamespaces . forEach ( controller => {
94- let namespace : string | RegExp = controller . namespace ;
95- if ( ! ( namespace instanceof RegExp ) ) {
94+ let namespace : string | RegExp | undefined = controller . namespace ;
95+ if ( namespace && ! ( namespace instanceof RegExp ) ) {
9696 namespace = pathToRegexp ( namespace ) ;
9797 }
9898 this . io . of ( namespace ) . on ( 'connection' , ( socket : any ) => this . handleConnection ( [ controller ] , socket ) ) ;
@@ -103,7 +103,7 @@ export class SocketControllerExecutor {
103103
104104 private handleConnection ( controllers : ControllerMetadata [ ] , socket : any ) {
105105 controllers . forEach ( controller => {
106- controller . actions . forEach ( action => {
106+ ( controller . actions || [ ] ) . forEach ( action => {
107107 if ( action . type === ActionTypes . CONNECT ) {
108108 this . handleAction ( action , { socket : socket } )
109109 . then ( result => this . handleSuccessResult ( result , action , socket ) )
@@ -128,7 +128,7 @@ export class SocketControllerExecutor {
128128
129129 private handleAction ( action : ActionMetadata , options : { socket ?: any ; data ?: any } ) : Promise < any > {
130130 // compute all parameters
131- const paramsPromises = action . params
131+ const paramsPromises = ( action . params || [ ] )
132132 . sort ( ( param1 , param2 ) => param1 . index - param2 . index )
133133 . map ( param => {
134134 if ( param . type === ParamTypes . CONNECTED_SOCKET ) {
@@ -203,7 +203,7 @@ export class SocketControllerExecutor {
203203 const parseValue = typeof value === 'string' ? JSON . parse ( value ) : value ;
204204 if ( paramMetadata . reflectedType !== Object && paramMetadata . reflectedType && this . useClassTransformer ) {
205205 const options = paramMetadata . classTransformOptions || this . plainToClassTransformOptions ;
206- return plainToClass ( paramMetadata . reflectedType , parseValue , options ) ;
206+ return plainToInstance ( paramMetadata . reflectedType as never , parseValue as never , options ) ;
207207 } else {
208208 return parseValue ;
209209 }
@@ -216,7 +216,7 @@ export class SocketControllerExecutor {
216216 if ( result !== null && result !== undefined && action . emitOnSuccess ) {
217217 const transformOptions = action . emitOnSuccess . classTransformOptions || this . classToPlainTransformOptions ;
218218 const transformedResult =
219- this . useClassTransformer && result instanceof Object ? classToPlain ( result , transformOptions ) : result ;
219+ this . useClassTransformer && result instanceof Object ? instanceToPlain ( result , transformOptions ) : result ;
220220 socket . emit ( action . emitOnSuccess . value , transformedResult ) ;
221221 } else if ( ( result === null || result === undefined ) && action . emitOnSuccess && ! action . skipEmitOnEmptyResult ) {
222222 socket . emit ( action . emitOnSuccess . value ) ;
@@ -225,10 +225,10 @@ export class SocketControllerExecutor {
225225
226226 private handleFailResult ( result : any , action : ActionMetadata , socket : any ) {
227227 if ( result !== null && result !== undefined && action . emitOnFail ) {
228- const transformOptions = action . emitOnSuccess . classTransformOptions || this . classToPlainTransformOptions ;
228+ const transformOptions = action . emitOnSuccess ? .classTransformOptions || this . classToPlainTransformOptions ;
229229 let transformedResult =
230- this . useClassTransformer && result instanceof Object ? classToPlain ( result , transformOptions ) : result ;
231- if ( result instanceof Error && ! Object . keys ( transformedResult ) . length ) {
230+ this . useClassTransformer && result instanceof Object ? instanceToPlain ( result , transformOptions ) : result ;
231+ if ( result instanceof Error && ! Object . keys ( transformedResult as never ) . length ) {
232232 transformedResult = result . toString ( ) ;
233233 }
234234 socket . emit ( action . emitOnFail . value , transformedResult ) ;
@@ -239,8 +239,8 @@ export class SocketControllerExecutor {
239239
240240 private handleNamespaceParams ( socket : any , action : ActionMetadata , param : ParamMetadata ) : any [ ] {
241241 const keys : any [ ] = [ ] ;
242- const regexp = pathToRegexp ( action . controllerMetadata . namespace , keys ) ;
243- const parts : any [ ] = regexp . exec ( socket . nsp . name ) ;
242+ const regexp = pathToRegexp ( action . controllerMetadata . namespace || '/' , keys ) ;
243+ const parts : any [ ] = regexp . exec ( socket . nsp . name as string ) || [ ] ;
244244 const params : any [ ] = [ ] ;
245245 keys . forEach ( ( key : any , index : number ) => {
246246 params [ key . name ] = this . handleParamFormat ( parts [ index + 1 ] , param ) ;
0 commit comments