@@ -70,11 +70,11 @@ export class MetadataStorage {
7070
7171 middlewares : MiddlewareMetadata [ ] = [ ] ;
7272
73- middlewaresByTargetAndFieldCache = new Map < string , MiddlewareMetadata [ ] > ( ) ;
73+ middlewaresByTargetAndFieldCache = new Map < string , Set < MiddlewareMetadata > > ( ) ;
7474
7575 resolverMiddlewares : ResolverMiddlewareMetadata [ ] = [ ] ;
7676
77- resolverMiddlewaresByTargetCache = new Map < Function , ResolverMiddlewareMetadata [ ] > ( ) ;
77+ resolverMiddlewaresByTargetCache = new Map < Function , Set < ResolverMiddlewareMetadata > > ( ) ;
7878
7979 classDirectives : DirectiveClassMetadata [ ] = [ ] ;
8080
@@ -218,19 +218,25 @@ export class MetadataStorage {
218218 this . middlewares . forEach ( middleware => {
219219 const key = `${ middleware . target } -${ middleware . fieldName } ` ;
220220 if ( ! this . middlewaresByTargetAndFieldCache . has ( key ) ) {
221- this . middlewaresByTargetAndFieldCache . set ( key , [ ] ) ;
221+ this . middlewaresByTargetAndFieldCache . set ( key , new Set ( ) ) ;
222+ }
223+
224+ if ( ! this . middlewaresByTargetAndFieldCache . get ( key ) ?. has ( middleware ) ) {
225+ this . middlewaresByTargetAndFieldCache . get ( key ) ?. add ( middleware ) ;
222226 }
223- this . middlewaresByTargetAndFieldCache . get ( key ) ?. push ( middleware ) ;
224227 } ) ;
225228 }
226229
227230 if ( this . resolverMiddlewares ?. length ) {
228231 this . resolverMiddlewares . forEach ( middleware => {
229232 const key = middleware . target ;
230233 if ( ! this . resolverMiddlewaresByTargetCache . has ( key ) ) {
231- this . resolverMiddlewaresByTargetCache . set ( key , [ ] ) ;
234+ this . resolverMiddlewaresByTargetCache . set ( key , new Set ( ) ) ;
235+ }
236+
237+ if ( ! this . resolverMiddlewaresByTargetCache . get ( key ) ?. has ( middleware ) ) {
238+ this . resolverMiddlewaresByTargetCache . get ( key ) ?. add ( middleware ) ;
232239 }
233- this . resolverMiddlewaresByTargetCache . get ( key ) ?. push ( middleware ) ;
234240 } ) ;
235241 }
236242
@@ -338,6 +344,19 @@ export class MetadataStorage {
338344 this . classExtensions = [ ] ;
339345 this . fieldExtensions = [ ] ;
340346
347+ // clear map caches
348+ this . fieldsCache = new Map ( ) ;
349+ this . objectTypesCache = new Map ( ) ;
350+ this . interfaceTypesCache = new Map ( ) ;
351+ this . middlewaresByTargetAndFieldCache = new Map ( ) ;
352+ this . resolverMiddlewaresByTargetCache = new Map ( ) ;
353+ this . paramsCache = new Map ( ) ;
354+ this . fieldDirectivesByTargetAndFieldCache = new Map ( ) ;
355+ this . classDirectivesByTargetCache = new Map ( ) ;
356+ this . authorizedFieldsByTargetAndFieldCache = new Map ( ) ;
357+ this . authorizedResolverByTargetCache = new Map ( ) ;
358+ this . resolverClassesCache = new Map ( ) ;
359+
341360 this . resolverClasses = [ ] ;
342361 this . fields = [ ] ;
343362 this . params = [ ] ;
@@ -350,20 +369,20 @@ export class MetadataStorage {
350369 fields . forEach ( field => {
351370 field . roles = this . findFieldRoles ( field . target , field . name ) ;
352371
353- const paramKey = `${ field . target . name } -${ field . name } ` ;
372+ const paramKey = `${ field . target } -${ field . name } ` ;
354373 field . params = this . paramsCache . get ( paramKey ) || [ ] ;
355374
356- const middlewares1 = this . resolverMiddlewaresByTargetCache . get ( field . target ) || [ ] ;
357- const middlewaresKey = `${ field . target . name } -${ field . name } ` ;
358- const middlewares2 = this . middlewaresByTargetAndFieldCache . get ( middlewaresKey ) || [ ] ;
375+ const resolverMiddlewares = this . resolverMiddlewaresByTargetCache . get ( field . target ) || [ ] ;
376+ const middlewaresKey = `${ field . target } -${ field . name } ` ;
377+ const fieldMiddlewares = this . middlewaresByTargetAndFieldCache . get ( middlewaresKey ) || [ ] ;
359378
360- field . middlewares = mapMiddlewareMetadataToArray ( middlewares1 ) . concat (
361- mapMiddlewareMetadataToArray ( middlewares2 ) ,
362- ) ;
379+ field . middlewares = [
380+ ...mapMiddlewareMetadataToArray ( Array . from ( resolverMiddlewares ) ) ,
381+ ...mapMiddlewareMetadataToArray ( Array . from ( fieldMiddlewares ) ) ,
382+ ] ;
363383
364384 const directives =
365- this . fieldDirectivesByTargetAndFieldCache . get ( `${ field . target . name } -${ field . name } ` ) ||
366- [ ] ;
385+ this . fieldDirectivesByTargetAndFieldCache . get ( `${ field . target } -${ field . name } ` ) || [ ] ;
367386 field . directives = directives . map ( it => it . directive ) ;
368387
369388 field . extensions = this . findExtensions ( field . target , field . name ) ;
@@ -386,13 +405,13 @@ export class MetadataStorage {
386405 def . params = this . paramsCache . get ( `${ def . target } -${ def . methodName } ` ) || [ ] ;
387406 def . roles = this . findFieldRoles ( def . target , def . methodName ) ;
388407
389- def . middlewares = mapMiddlewareMetadataToArray (
390- this . resolverMiddlewaresByTargetCache . get ( def . target ) || [ ] ,
391- ) . concat (
392- mapMiddlewareMetadataToArray (
393- this . middlewaresByTargetAndFieldCache . get ( ` ${ def . target } - ${ def . methodName } ` ) || [ ] ,
394- ) ,
395- ) ;
408+ const resolverMiddlewares = this . resolverMiddlewaresByTargetCache . get ( def . target ) || [ ] ;
409+ const fieldMiddlewares =
410+ this . middlewaresByTargetAndFieldCache . get ( ` ${ def . target } - ${ def . methodName } ` ) || [ ] ;
411+ def . middlewares = [
412+ ... mapMiddlewareMetadataToArray ( Array . from ( resolverMiddlewares ) ) ,
413+ ... mapMiddlewareMetadataToArray ( Array . from ( fieldMiddlewares ) ) ,
414+ ] ;
396415
397416 def . directives = (
398417 this . fieldDirectivesByTargetAndFieldCache . get ( `${ def . target } -${ def . methodName } ` ) || [ ]
0 commit comments