@@ -8,62 +8,98 @@ import {
88 SchemaExtensions ,
99} from './types.js' ;
1010
11+ function handleDirectiveExtensions ( extensions : any = { } ) {
12+ const finalExtensions : any = {
13+ ...extensions ,
14+ } ;
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 ] ;
21+ }
22+ }
23+ }
24+ return finalExtensions ;
25+ }
26+
1127export function extractExtensionsFromSchema ( schema : GraphQLSchema ) : SchemaExtensions {
1228 const result : SchemaExtensions = {
13- schemaExtensions : schema . extensions || { } ,
29+ schemaExtensions : handleDirectiveExtensions ( schema . extensions ) ,
1430 types : { } ,
1531 } ;
1632
1733 mapSchema ( schema , {
1834 [ MapperKind . OBJECT_TYPE ] : type => {
19- result . types [ type . name ] = { fields : { } , type : 'object' , extensions : type . extensions || { } } ;
35+ result . types [ type . name ] = {
36+ fields : { } ,
37+ type : 'object' ,
38+ extensions : handleDirectiveExtensions ( type . extensions ) ,
39+ } ;
2040 return type ;
2141 } ,
2242 [ MapperKind . INTERFACE_TYPE ] : type => {
2343 result . types [ type . name ] = {
2444 fields : { } ,
2545 type : 'interface' ,
26- extensions : type . extensions || { } ,
46+ extensions : handleDirectiveExtensions ( type . extensions ) ,
2747 } ;
2848 return type ;
2949 } ,
3050 [ MapperKind . FIELD ] : ( field , fieldName , typeName ) => {
3151 ( result . types [ typeName ] as ObjectTypeExtensions ) . fields [ fieldName ] = {
3252 arguments : { } ,
33- extensions : field . extensions || { } ,
53+ extensions : handleDirectiveExtensions ( field . extensions ) ,
3454 } ;
3555 const args = ( field as GraphQLFieldConfig < any , any > ) . args ;
3656 if ( args != null ) {
3757 for ( const argName in args ) {
3858 ( result . types [ typeName ] as ObjectTypeExtensions ) . fields [ fieldName ] . arguments [ argName ] =
39- args [ argName ] . extensions || { } ;
59+ handleDirectiveExtensions ( args [ argName ] . extensions ) ;
4060 }
4161 }
4262 return field ;
4363 } ,
4464 [ MapperKind . ENUM_TYPE ] : type => {
45- result . types [ type . name ] = { values : { } , type : 'enum' , extensions : type . extensions || { } } ;
65+ result . types [ type . name ] = {
66+ values : { } ,
67+ type : 'enum' ,
68+ extensions : handleDirectiveExtensions ( type . extensions ) ,
69+ } ;
4670 return type ;
4771 } ,
4872 [ MapperKind . ENUM_VALUE ] : ( value , typeName , _schema , valueName ) => {
49- ( result . types [ typeName ] as EnumTypeExtensions ) . values [ valueName ] = value . extensions || { } ;
73+ ( result . types [ typeName ] as EnumTypeExtensions ) . values [ valueName ] = handleDirectiveExtensions (
74+ value . extensions ,
75+ ) ;
5076 return value ;
5177 } ,
5278 [ MapperKind . SCALAR_TYPE ] : type => {
53- result . types [ type . name ] = { type : 'scalar' , extensions : type . extensions || { } } ;
79+ result . types [ type . name ] = {
80+ type : 'scalar' ,
81+ extensions : handleDirectiveExtensions ( type . extensions ) ,
82+ } ;
5483 return type ;
5584 } ,
5685 [ MapperKind . UNION_TYPE ] : type => {
57- result . types [ type . name ] = { type : 'union' , extensions : type . extensions || { } } ;
86+ result . types [ type . name ] = {
87+ type : 'union' ,
88+ extensions : handleDirectiveExtensions ( type . extensions ) ,
89+ } ;
5890 return type ;
5991 } ,
6092 [ MapperKind . INPUT_OBJECT_TYPE ] : type => {
61- result . types [ type . name ] = { fields : { } , type : 'input' , extensions : type . extensions || { } } ;
93+ result . types [ type . name ] = {
94+ fields : { } ,
95+ type : 'input' ,
96+ extensions : handleDirectiveExtensions ( type . extensions ) ,
97+ } ;
6298 return type ;
6399 } ,
64100 [ MapperKind . INPUT_OBJECT_FIELD ] : ( field , fieldName , typeName ) => {
65101 ( result . types [ typeName ] as InputTypeExtensions ) . fields [ fieldName ] = {
66- extensions : field . extensions || { } ,
102+ extensions : handleDirectiveExtensions ( field . extensions ) ,
67103 } ;
68104 return field ;
69105 } ,
0 commit comments