1
- import { GraphQLError , parse } from 'graphql' ;
2
1
import { batchDelegateToSchema } from '@graphql-tools/batch-delegate' ;
3
2
import { delegateToSchema } from '@graphql-tools/delegate' ;
3
+ import { normalizedExecutor } from '@graphql-tools/executor' ;
4
4
import { makeExecutableSchema } from '@graphql-tools/schema' ;
5
5
import { stitchSchemas } from '@graphql-tools/stitch' ;
6
+ import { GraphQLError , parse } from 'graphql' ;
6
7
import { beforeEach , describe , expect , test , vi } from 'vitest' ;
7
- import { normalizedExecutor } from '@graphql-tools/executor' ;
8
8
9
9
class NotFoundError extends GraphQLError {
10
- constructor ( id : unknown ) {
11
- super ( 'Not Found' , {
12
- extensions : { id } ,
13
- } )
14
- }
10
+ constructor ( id : unknown ) {
11
+ super ( 'Not Found' , {
12
+ extensions : { id } ,
13
+ } ) ;
14
+ }
15
15
}
16
16
17
17
describe ( 'preserves error path indices' , ( ) => {
18
- const getProperty = vi . fn ( ( id : unknown ) => {
19
- return new NotFoundError ( id ) ;
20
- } ) ;
18
+ const getProperty = vi . fn ( ( id : unknown ) => {
19
+ return new NotFoundError ( id ) ;
20
+ } ) ;
21
21
22
- beforeEach ( ( ) => {
23
- getProperty . mockClear ( ) ;
24
- } ) ;
22
+ beforeEach ( ( ) => {
23
+ getProperty . mockClear ( ) ;
24
+ } ) ;
25
25
26
- const subschema = makeExecutableSchema ( {
27
- typeDefs : /* GraphQL */ `
26
+ const subschema = makeExecutableSchema ( {
27
+ typeDefs : /* GraphQL */ `
28
28
type Property {
29
29
id: ID!
30
30
}
@@ -40,28 +40,28 @@ describe('preserves error path indices', () => {
40
40
propertiesByIds(ids: [ID!]!): [Property]!
41
41
}
42
42
` ,
43
- resolvers : {
44
- Query : {
45
- objects : ( ) => {
46
- return [
47
- { id : '1' , propertyId : '1' } ,
48
- { id : '2' , propertyId : '1' } ,
49
- ] ;
50
- } ,
51
- propertyById : ( _ , args ) => getProperty ( args . id ) ,
52
- propertiesByIds : ( _ , args ) => args . ids . map ( getProperty ) ,
53
- } ,
43
+ resolvers : {
44
+ Query : {
45
+ objects : ( ) => {
46
+ return [
47
+ { id : '1' , propertyId : '1' } ,
48
+ { id : '2' , propertyId : '1' } ,
49
+ ] ;
54
50
} ,
55
- } ) ;
56
-
57
- const subschemas = [ subschema ] ;
58
- const typeDefs = /* GraphQL */ `
51
+ propertyById : ( _ , args ) => getProperty ( args . id ) ,
52
+ propertiesByIds : ( _ , args ) => args . ids . map ( getProperty ) ,
53
+ } ,
54
+ } ,
55
+ } ) ;
56
+
57
+ const subschemas = [ subschema ] ;
58
+ const typeDefs = /* GraphQL */ `
59
59
extend type Object {
60
60
property: Property
61
61
}
62
62
` ;
63
63
64
- const query = /* GraphQL */ `
64
+ const query = /* GraphQL */ `
65
65
query {
66
66
objects {
67
67
id
@@ -72,91 +72,91 @@ describe('preserves error path indices', () => {
72
72
}
73
73
` ;
74
74
75
- const expected = {
76
- errors : [
77
- {
78
- message : 'Not Found' ,
79
- extensions : { id : '1' } ,
80
- path : [ 'objects' , 0 , 'property' ] ,
81
- } ,
82
- {
83
- message : 'Not Found' ,
84
- extensions : { id : '1' } ,
85
- path : [ 'objects' , 1 , 'property' ] ,
86
- } ,
87
- ] ,
88
- data : {
89
- objects : [
90
- {
91
- id : '1' ,
92
- property : null ,
93
- } ,
94
- {
95
- id : '2' ,
96
- property : null ,
97
- } ,
98
- ] ,
75
+ const expected = {
76
+ errors : [
77
+ {
78
+ message : 'Not Found' ,
79
+ extensions : { id : '1' } ,
80
+ path : [ 'objects' , 0 , 'property' ] ,
81
+ } ,
82
+ {
83
+ message : 'Not Found' ,
84
+ extensions : { id : '1' } ,
85
+ path : [ 'objects' , 1 , 'property' ] ,
86
+ } ,
87
+ ] ,
88
+ data : {
89
+ objects : [
90
+ {
91
+ id : '1' ,
92
+ property : null as null ,
99
93
} ,
100
- } ;
101
-
102
- test ( 'using delegateToSchema' , async ( ) => {
103
- const schema = stitchSchemas ( {
104
- subschemas,
105
- typeDefs,
106
- resolvers : {
107
- Object : {
108
- property : {
109
- selectionSet : '{ propertyId }' ,
110
- resolve : ( source , _ , context , info ) => {
111
- return delegateToSchema ( {
112
- schema : subschema ,
113
- fieldName : 'propertyById' ,
114
- args : { id : source . propertyId } ,
115
- context,
116
- info,
117
- } ) ;
118
- } ,
119
- } ,
120
- } ,
94
+ {
95
+ id : '2' ,
96
+ property : null as null ,
97
+ } ,
98
+ ] ,
99
+ } ,
100
+ } ;
101
+
102
+ test ( 'using delegateToSchema' , async ( ) => {
103
+ const schema = stitchSchemas ( {
104
+ subschemas,
105
+ typeDefs,
106
+ resolvers : {
107
+ Object : {
108
+ property : {
109
+ selectionSet : '{ propertyId }' ,
110
+ resolve : ( source , _ , context , info ) => {
111
+ return delegateToSchema ( {
112
+ schema : subschema ,
113
+ fieldName : 'propertyById' ,
114
+ args : { id : source . propertyId } ,
115
+ context,
116
+ info,
117
+ } ) ;
121
118
} ,
122
- } ) ;
123
-
124
-
125
- const result = await normalizedExecutor ( {
126
- schema,
127
- document : parse ( query ) ,
128
- } )
129
-
130
- expect ( getProperty ) . toBeCalledTimes ( 2 ) ;
131
- expect ( result ) . toMatchObject ( expected ) ;
119
+ } ,
120
+ } ,
121
+ } ,
132
122
} ) ;
133
123
134
- test ( 'using batchDelegateToSchema' , async ( ) => {
135
- const schema = stitchSchemas ( {
136
- subschemas,
137
- typeDefs,
138
- resolvers : {
139
- Object : {
140
- property : {
141
- selectionSet : '{ propertyId }' ,
142
- resolve : ( source , _ , context , info ) => batchDelegateToSchema ( {
143
- schema : subschema ,
144
- fieldName : 'propertiesByIds' ,
145
- key : source . propertyId ,
146
- context,
147
- info,
148
- } ) ,
149
- } ,
150
- } ,
151
- } ,
152
- } ) ;
124
+ const result = await normalizedExecutor ( {
125
+ schema,
126
+ document : parse ( query ) ,
127
+ } ) ;
153
128
154
- const result = await normalizedExecutor ( {
155
- schema,
156
- document : parse ( query ) ,
157
- } )
129
+ expect ( getProperty ) . toBeCalledTimes ( 2 ) ;
130
+ expect ( result ) . toMatchObject ( expected ) ;
131
+ } ) ;
132
+
133
+ test ( 'using batchDelegateToSchema' , async ( ) => {
134
+ const schema = stitchSchemas ( {
135
+ subschemas,
136
+ typeDefs,
137
+ resolvers : {
138
+ Object : {
139
+ property : {
140
+ selectionSet : '{ propertyId }' ,
141
+ resolve : ( source , _ , context , info ) =>
142
+ batchDelegateToSchema ( {
143
+ schema : subschema ,
144
+ fieldName : 'propertiesByIds' ,
145
+ key : source . propertyId ,
146
+ context,
147
+ info,
148
+ } ) ,
149
+ } ,
150
+ } ,
151
+ } ,
152
+ } ) ;
158
153
159
- expect ( getProperty ) . toBeCalledTimes ( 1 ) ;
160
- expect ( result ) . toMatchObject ( expected ) ;
154
+ const result = await normalizedExecutor ( {
155
+ schema,
156
+ document : parse ( query ) ,
161
157
} ) ;
162
- } ) ;
158
+
159
+ expect ( getProperty ) . toBeCalledTimes ( 1 ) ;
160
+ expect ( result ) . toMatchObject ( expected ) ;
161
+ } ) ;
162
+ } ) ;
0 commit comments