File tree Expand file tree Collapse file tree 5 files changed +131
-13
lines changed
Expand file tree Collapse file tree 5 files changed +131
-13
lines changed Original file line number Diff line number Diff line change 11{
22 "name" : " graphql-js-tree" ,
3- "version" : " 0.1.1 " ,
3+ "version" : " 0.1.2 " ,
44 "private" : false ,
55 "license" : " MIT" ,
66 "description" : " GraphQL Parser providing simplier structure" ,
Original file line number Diff line number Diff line change @@ -29,15 +29,19 @@ const dedent = new RegExp('\n([\t ]*)', 'gm');
2929 * @class TemplateUtils
3030 */
3131export class TemplateUtils {
32- static resolveFieldType = ( f : ParserField [ 'type' ] [ 'fieldType' ] , fn : ( x : string ) => string = ( x ) => x ) : string => {
32+ static resolveFieldType = (
33+ f : ParserField [ 'type' ] [ 'fieldType' ] ,
34+ fn : ( x : string ) => string = ( x ) => x ,
35+ required = false ,
36+ ) : string => {
3337 if ( f . type === Options . name && f . name ) {
34- return fn ( f . name ) ;
38+ return fn ( required ? ` ${ f . name } !` : f . name ) ;
3539 }
36- if ( f . type === Options . array && f . nest ) {
37- return TemplateUtils . resolveFieldType ( f . nest , ( x ) => `[${ fn ( x ) } ]` ) ;
40+ if ( f . type === Options . array ) {
41+ return TemplateUtils . resolveFieldType ( f . nest , ( x ) => ( required ? `[${ fn ( x ) } ]!` : `[ ${ fn ( x ) } ]` ) ) ;
3842 }
39- if ( f . type === Options . required && f . nest ) {
40- return TemplateUtils . resolveFieldType ( f . nest , ( x ) => ` ${ fn ( x ) } !` ) ;
43+ if ( f . type === Options . required ) {
44+ return TemplateUtils . resolveFieldType ( f . nest , fn , true ) ;
4145 }
4246 throw new Error ( 'Invalid field type:' + JSON . stringify ( f ) ) ;
4347 } ;
Original file line number Diff line number Diff line change @@ -623,4 +623,90 @@ describe('Fields tests on parser', () => {
623623 } ;
624624 expect ( tree . nodes ) . toEqual ( expect . arrayContaining ( treeMock . nodes ) ) ;
625625 } ) ;
626+ test ( `ListType fields` , ( ) => {
627+ const schema = `type Person{
628+ id: ${ ScalarTypes . ID } !
629+ name: [${ ScalarTypes . String } ]
630+ friends: [Person]!
631+ }` ;
632+ const tree = Parser . parse ( schema ) ;
633+ const treeMock : ParserTree = {
634+ nodes : [
635+ {
636+ name : 'Person' ,
637+ type : {
638+ fieldType : {
639+ name : TypeDefinitionDisplayStrings . type ,
640+ type : Options . name ,
641+ } ,
642+ } ,
643+ data : {
644+ type : TypeDefinition . ObjectTypeDefinition ,
645+ } ,
646+ interfaces : [ ] ,
647+ directives : [ ] ,
648+ args : [
649+ {
650+ name : 'id' ,
651+ type : {
652+ fieldType : {
653+ type : Options . required ,
654+ nest : {
655+ name : ScalarTypes . ID ,
656+ type : Options . name ,
657+ } ,
658+ } ,
659+ } ,
660+ data : {
661+ type : TypeSystemDefinition . FieldDefinition ,
662+ } ,
663+ directives : [ ] ,
664+ args : [ ] ,
665+ interfaces : [ ] ,
666+ } ,
667+ {
668+ name : 'name' ,
669+ type : {
670+ fieldType : {
671+ type : Options . array ,
672+ nest : {
673+ name : ScalarTypes . String ,
674+ type : Options . name ,
675+ } ,
676+ } ,
677+ } ,
678+ data : {
679+ type : TypeSystemDefinition . FieldDefinition ,
680+ } ,
681+ directives : [ ] ,
682+ args : [ ] ,
683+ interfaces : [ ] ,
684+ } ,
685+ {
686+ name : 'friends' ,
687+ type : {
688+ fieldType : {
689+ type : Options . required ,
690+ nest : {
691+ type : Options . array ,
692+ nest : {
693+ type : Options . name ,
694+ name : 'Person' ,
695+ } ,
696+ } ,
697+ } ,
698+ } ,
699+ data : {
700+ type : TypeSystemDefinition . FieldDefinition ,
701+ } ,
702+ directives : [ ] ,
703+ args : [ ] ,
704+ interfaces : [ ] ,
705+ } ,
706+ ] ,
707+ } ,
708+ ] ,
709+ } ;
710+ expect ( tree . nodes ) . toEqual ( expect . arrayContaining ( treeMock . nodes ) ) ;
711+ } ) ;
626712} ) ;
Original file line number Diff line number Diff line change @@ -553,11 +553,8 @@ describe('Fields tests on parser', () => {
553553 nest : {
554554 type : Options . array ,
555555 nest : {
556- type : Options . required ,
557- nest : {
558- type : Options . name ,
559- name : 'Person' ,
560- } ,
556+ type : Options . name ,
557+ name : 'Person' ,
561558 } ,
562559 } ,
563560 } ,
@@ -576,7 +573,7 @@ describe('Fields tests on parser', () => {
576573
577574 const graphql = TreeToGraphQL . parse ( treeMock ) ;
578575 expect ( graphql ) . toContain ( `name: [${ ScalarTypes . String } ]` ) ;
579- expect ( graphql ) . toContain ( `friends: [Person! ]!` ) ;
576+ expect ( graphql ) . toContain ( `friends: [Person]!` ) ;
580577 } ) ;
581578 test ( `ListType nested lists` , ( ) => {
582579 const treeMock : ParserTree = {
Original file line number Diff line number Diff line change 1+ import { TemplateUtils } from '@/TreeToGraphQL/templates/TemplateUtils' ;
2+ import { Options , ParserField , TypeSystemDefinition } from '../../Models' ;
3+
4+ describe ( 'TemplateUtils tests on parser' , ( ) => {
5+ test ( `ListType fields` , ( ) => {
6+ const treeMock : ParserField = {
7+ name : 'friends' ,
8+ type : {
9+ fieldType : {
10+ type : Options . required ,
11+ nest : {
12+ type : Options . array ,
13+ nest : {
14+ type : Options . name ,
15+ name : 'Person' ,
16+ } ,
17+ } ,
18+ } ,
19+ } ,
20+ data : {
21+ type : TypeSystemDefinition . FieldDefinition ,
22+ } ,
23+ directives : [ ] ,
24+ interfaces : [ ] ,
25+ args : [ ] ,
26+ } ;
27+
28+ const graphql = TemplateUtils . resolveFieldType ( treeMock . type . fieldType ) ;
29+ expect ( graphql ) . toContain ( `[Person]!` ) ;
30+ } ) ;
31+ } ) ;
You can’t perform that action at this time.
0 commit comments