@@ -10,9 +10,10 @@ import {
1010 TypeSystemExtensionNode ,
1111 ValueNode ,
1212} from 'graphql' ;
13- import { AllTypes , kindAsAllTypes , Options , ParserField } from '@/Models' ;
14- import { Instances , TypeSystemDefinition , Value , ValueDefinition } from '@/Models/Spec' ;
13+ import { kindAsValue , Options , ParserField } from '@/Models' ;
14+ import { Instances , TypeSystemDefinition , ValueDefinition } from '@/Models/Spec' ;
1515import { generateNodeId } from '@/shared' ;
16+ import { extractDefaultValueString } from '@/Parser/extractDefaultValueString' ;
1617
1718/**
1819 * Class for resolving Types to ParserFields
@@ -93,7 +94,6 @@ export class TypeResolver {
9394 * @param f
9495 */
9596 static resolveObjectField ( f : ObjectFieldNode ) : ParserField [ ] {
96- const args = TypeResolver . resolveValue ( f . value ) ;
9797 return [
9898 {
9999 name : f . name . value ,
@@ -105,106 +105,16 @@ export class TypeResolver {
105105 } ,
106106 interfaces : [ ] ,
107107 directives : [ ] ,
108- args,
109- id : generateNodeId ( f . name . value , Instances . Argument , args ) ,
108+ args : [ ] ,
109+ value : {
110+ type : kindAsValue ( f . value . kind ) ,
111+ value : extractDefaultValueString ( f . value ) ,
112+ } ,
113+ id : generateNodeId ( f . name . value , Instances . Argument , [ ] ) ,
110114 } ,
111115 ] ;
112116 }
113117
114- /**
115- * Resolve GraphQL ValueNode
116- *
117- * @param value
118- */
119- static resolveValue ( value : ValueNode ) : ParserField [ ] {
120- if ( value . kind === 'ListValue' ) {
121- const args = value . values . map ( ( f ) => TypeResolver . resolveValue ( f ) ) . reduce ( ( a , b ) => [ ...a , ...b ] , [ ] ) ;
122-
123- return [
124- {
125- name : value . kind ,
126- directives : [ ] ,
127- interfaces : [ ] ,
128- args,
129- data : {
130- type : kindAsAllTypes ( value . kind ) ,
131- } ,
132- type : {
133- fieldType : {
134- name : kindAsAllTypes ( value . kind ) ,
135- type : Options . name ,
136- } ,
137- } ,
138- id : generateNodeId ( value . kind , kindAsAllTypes ( value . kind ) , args ) ,
139- } ,
140- ] ;
141- }
142- if ( value . kind === 'ObjectValue' ) {
143- const args = value . fields . map ( ( f ) => TypeResolver . resolveObjectField ( f ) ) . reduce ( ( a , b ) => [ ...a , ...b ] , [ ] ) ;
144-
145- return [
146- {
147- args,
148- name : value . kind ,
149- directives : [ ] ,
150- interfaces : [ ] ,
151- data : {
152- type : kindAsAllTypes ( value . kind ) ,
153- } ,
154- type : {
155- fieldType : {
156- name : kindAsAllTypes ( value . kind ) ,
157- type : Options . name ,
158- } ,
159- } ,
160- id : generateNodeId ( value . kind , kindAsAllTypes ( value . kind ) , args ) ,
161- } ,
162- ] ;
163- }
164- if ( value . kind === 'EnumValue' ) {
165- return [
166- {
167- name : value . value ,
168- args : [ ] ,
169- directives : [ ] ,
170- interfaces : [ ] ,
171- data : {
172- type : kindAsAllTypes ( value . kind ) ,
173- } ,
174- type : {
175- fieldType : {
176- name : value . value as AllTypes ,
177- type : Options . name ,
178- } ,
179- } ,
180- id : generateNodeId ( value . value , kindAsAllTypes ( value . kind ) , [ ] ) ,
181- } ,
182- ] ;
183- }
184- if ( value . kind in Value ) {
185- const name = 'value' in value ? value . value . toString ( ) : 'name' in value ? value . name . value : '' ;
186- return [
187- {
188- name,
189- type : {
190- fieldType : {
191- name : value . kind ,
192- type : Options . name ,
193- } ,
194- } ,
195- args : [ ] ,
196- directives : [ ] ,
197- interfaces : [ ] ,
198- data : {
199- type : kindAsAllTypes ( value . kind ) ,
200- } ,
201- id : generateNodeId ( name , kindAsAllTypes ( value . kind ) , [ ] ) ,
202- } ,
203- ] ;
204- }
205- return [ ] ;
206- }
207-
208118 /**
209119 * Iterate directives
210120 * @param directives GraphQL Directive nodes
@@ -239,7 +149,6 @@ export class TypeResolver {
239149 */
240150 static iterateArgumentFields ( fields : ReadonlyArray < ArgumentNode > ) : ParserField [ ] {
241151 return fields . map ( ( n ) => {
242- const args = TypeResolver . resolveValue ( n . value ) ;
243152 return {
244153 name : n . name . value ,
245154 type : {
@@ -250,8 +159,12 @@ export class TypeResolver {
250159 } ,
251160 directives : [ ] ,
252161 interfaces : [ ] ,
253- args,
254- id : generateNodeId ( n . name . value , Instances . Argument , args ) ,
162+ value : {
163+ type : kindAsValue ( n . value . kind ) ,
164+ value : extractDefaultValueString ( n . value ) ,
165+ } ,
166+ args : [ ] ,
167+ id : generateNodeId ( n . name . value , Instances . Argument , [ ] ) ,
255168 } ;
256169 } ) ;
257170 }
@@ -263,7 +176,12 @@ export class TypeResolver {
263176 */
264177 static iterateInputValueFields ( fields : ReadonlyArray < InputValueDefinitionNode > ) : ParserField [ ] {
265178 return fields . map ( ( n ) => {
266- const args = n . defaultValue ? TypeResolver . resolveValue ( n . defaultValue ) : [ ] ;
179+ const value = n . defaultValue
180+ ? {
181+ type : kindAsValue ( n . defaultValue . kind ) ,
182+ value : extractDefaultValueString ( n . defaultValue ) ,
183+ }
184+ : undefined ;
267185 return {
268186 name : n . name . value ,
269187 ...( n . description ? { description : n . description . value } : { } ) ,
@@ -272,9 +190,10 @@ export class TypeResolver {
272190 data : {
273191 type : ValueDefinition . InputValueDefinition ,
274192 } ,
275- args,
193+ args : [ ] ,
276194 interfaces : [ ] ,
277- id : generateNodeId ( n . name . value , ValueDefinition . InputValueDefinition , args ) ,
195+ ...( value ? { value } : { } ) ,
196+ id : generateNodeId ( n . name . value , ValueDefinition . InputValueDefinition , [ ] ) ,
278197 } ;
279198 } ) ;
280199 }
0 commit comments