11import  {  GraphQLFieldConfig ,  GraphQLSchema  }  from  'graphql' ; 
2+ import  {  asArray  }  from  './helpers.js' ; 
23import  {  MapperKind  }  from  './Interfaces.js' ; 
34import  {  mapSchema  }  from  './mapSchema.js' ; 
45import  { 
@@ -8,25 +9,30 @@ import {
89  SchemaExtensions , 
910}  from  './types.js' ; 
1011
11- function  handleDirectiveExtensions ( extensions : any  =  { } )  { 
12+ function  handleDirectiveExtensions ( extensions : any ,  removeDirectives : boolean )  { 
13+   extensions  =  extensions  ||  { } ; 
14+   const  {  directives : existingDirectives ,  ...rest  }  =  extensions ; 
1215  const  finalExtensions : any  =  { 
13-     ...extensions , 
16+     ...rest , 
1417  } ; 
15-   const  directives  =  finalExtensions . directives ; 
16-   if  ( directives  !=  null )  { 
17-     for  ( const  directiveName  in  directives )  { 
18-       const  directiveObj  =  directives [ directiveName ] ; 
19-       if  ( ! Array . isArray ( directiveObj ) )  { 
20-         directives [ directiveName ]  =  [ directiveObj ] ; 
18+   if  ( ! removeDirectives )  { 
19+     if  ( existingDirectives  !=  null )  { 
20+       const  directives  =  { } ; 
21+       for  ( const  directiveName  in  existingDirectives )  { 
22+         directives [ directiveName ]  =  [ ...asArray ( existingDirectives [ directiveName ] ) ] ; 
2123      } 
24+       finalExtensions . directives  =  directives ; 
2225    } 
2326  } 
2427  return  finalExtensions ; 
2528} 
2629
27- export  function  extractExtensionsFromSchema ( schema : GraphQLSchema ) : SchemaExtensions  { 
30+ export  function  extractExtensionsFromSchema ( 
31+   schema : GraphQLSchema , 
32+   removeDirectives  =  false , 
33+ ) : SchemaExtensions  { 
2834  const  result : SchemaExtensions  =  { 
29-     schemaExtensions : handleDirectiveExtensions ( schema . extensions ) , 
35+     schemaExtensions : handleDirectiveExtensions ( schema . extensions ,   removeDirectives ) , 
3036    types : { } , 
3137  } ; 
3238
@@ -35,28 +41,28 @@ export function extractExtensionsFromSchema(schema: GraphQLSchema): SchemaExtens
3541      result . types [ type . name ]  =  { 
3642        fields : { } , 
3743        type : 'object' , 
38-         extensions : handleDirectiveExtensions ( type . extensions ) , 
44+         extensions : handleDirectiveExtensions ( type . extensions ,   removeDirectives ) , 
3945      } ; 
4046      return  type ; 
4147    } , 
4248    [ MapperKind . INTERFACE_TYPE ] : type  =>  { 
4349      result . types [ type . name ]  =  { 
4450        fields : { } , 
4551        type : 'interface' , 
46-         extensions : handleDirectiveExtensions ( type . extensions ) , 
52+         extensions : handleDirectiveExtensions ( type . extensions ,   removeDirectives ) , 
4753      } ; 
4854      return  type ; 
4955    } , 
5056    [ MapperKind . FIELD ] : ( field ,  fieldName ,  typeName )  =>  { 
5157      ( result . types [ typeName ]  as  ObjectTypeExtensions ) . fields [ fieldName ]  =  { 
5258        arguments : { } , 
53-         extensions : handleDirectiveExtensions ( field . extensions ) , 
59+         extensions : handleDirectiveExtensions ( field . extensions ,   removeDirectives ) , 
5460      } ; 
5561      const  args  =  ( field  as  GraphQLFieldConfig < any ,  any > ) . args ; 
5662      if  ( args  !=  null )  { 
5763        for  ( const  argName  in  args )  { 
5864          ( result . types [ typeName ]  as  ObjectTypeExtensions ) . fields [ fieldName ] . arguments [ argName ]  = 
59-             handleDirectiveExtensions ( args [ argName ] . extensions ) ; 
65+             handleDirectiveExtensions ( args [ argName ] . extensions ,   removeDirectives ) ; 
6066        } 
6167      } 
6268      return  field ; 
@@ -65,41 +71,42 @@ export function extractExtensionsFromSchema(schema: GraphQLSchema): SchemaExtens
6571      result . types [ type . name ]  =  { 
6672        values : { } , 
6773        type : 'enum' , 
68-         extensions : handleDirectiveExtensions ( type . extensions ) , 
74+         extensions : handleDirectiveExtensions ( type . extensions ,   removeDirectives ) , 
6975      } ; 
7076      return  type ; 
7177    } , 
7278    [ MapperKind . ENUM_VALUE ] : ( value ,  typeName ,  _schema ,  valueName )  =>  { 
7379      ( result . types [ typeName ]  as  EnumTypeExtensions ) . values [ valueName ]  =  handleDirectiveExtensions ( 
7480        value . extensions , 
81+         removeDirectives , 
7582      ) ; 
7683      return  value ; 
7784    } , 
7885    [ MapperKind . SCALAR_TYPE ] : type  =>  { 
7986      result . types [ type . name ]  =  { 
8087        type : 'scalar' , 
81-         extensions : handleDirectiveExtensions ( type . extensions ) , 
88+         extensions : handleDirectiveExtensions ( type . extensions ,   removeDirectives ) , 
8289      } ; 
8390      return  type ; 
8491    } , 
8592    [ MapperKind . UNION_TYPE ] : type  =>  { 
8693      result . types [ type . name ]  =  { 
8794        type : 'union' , 
88-         extensions : handleDirectiveExtensions ( type . extensions ) , 
95+         extensions : handleDirectiveExtensions ( type . extensions ,   removeDirectives ) , 
8996      } ; 
9097      return  type ; 
9198    } , 
9299    [ MapperKind . INPUT_OBJECT_TYPE ] : type  =>  { 
93100      result . types [ type . name ]  =  { 
94101        fields : { } , 
95102        type : 'input' , 
96-         extensions : handleDirectiveExtensions ( type . extensions ) , 
103+         extensions : handleDirectiveExtensions ( type . extensions ,   removeDirectives ) , 
97104      } ; 
98105      return  type ; 
99106    } , 
100107    [ MapperKind . INPUT_OBJECT_FIELD ] : ( field ,  fieldName ,  typeName )  =>  { 
101108      ( result . types [ typeName ]  as  InputTypeExtensions ) . fields [ fieldName ]  =  { 
102-         extensions : handleDirectiveExtensions ( field . extensions ) , 
109+         extensions : handleDirectiveExtensions ( field . extensions ,   removeDirectives ) , 
103110      } ; 
104111      return  field ; 
105112    } , 
0 commit comments