Skip to content

Commit bc20ffe

Browse files
committed
🚑 Critical on schema definition node
1 parent 8339a95 commit bc20ffe

File tree

2 files changed

+134
-26
lines changed

2 files changed

+134
-26
lines changed

src/__tests__/Parser/Schema.spec.ts

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,110 @@ describe('Schema base operations', () => {
170170
};
171171
expect(tree.nodes).toEqual(expect.arrayContaining(treeMock.nodes));
172172
});
173+
test(`Detect Query only`, () => {
174+
const schema = `type Query{
175+
status: ${ScalarTypes.String}
176+
}
177+
type Mutation2222{
178+
updateStatus: ${ScalarTypes.String}
179+
}
180+
type Subscription333{
181+
watchStatus: ${ScalarTypes.String}
182+
}
183+
`;
184+
const tree = Parser.parse(schema);
185+
const treeMock: ParserTree = {
186+
nodes: [
187+
createParserField({
188+
name: 'Query',
189+
type: {
190+
fieldType: {
191+
name: TypeDefinitionDisplayStrings.type,
192+
type: Options.name,
193+
},
194+
},
195+
data: {
196+
type: TypeDefinition.ObjectTypeDefinition,
197+
},
198+
199+
args: [
200+
createParserField({
201+
name: 'status',
202+
type: {
203+
fieldType: {
204+
name: ScalarTypes.String,
205+
type: Options.name,
206+
},
207+
},
208+
data: {
209+
type: TypeSystemDefinition.FieldDefinition,
210+
},
211+
}),
212+
],
213+
}),
214+
createParserField({
215+
name: 'Mutation2222',
216+
type: {
217+
fieldType: {
218+
name: TypeDefinitionDisplayStrings.type,
219+
type: Options.name,
220+
},
221+
},
222+
data: {
223+
type: TypeDefinition.ObjectTypeDefinition,
224+
},
225+
226+
args: [
227+
createParserField({
228+
name: 'updateStatus',
229+
type: {
230+
fieldType: {
231+
name: ScalarTypes.String,
232+
type: Options.name,
233+
},
234+
},
235+
data: {
236+
type: TypeSystemDefinition.FieldDefinition,
237+
},
238+
}),
239+
],
240+
}),
241+
createParserField({
242+
name: 'Subscription333',
243+
type: {
244+
fieldType: {
245+
name: TypeDefinitionDisplayStrings.type,
246+
type: Options.name,
247+
},
248+
},
249+
data: {
250+
type: TypeDefinition.ObjectTypeDefinition,
251+
},
252+
253+
args: [
254+
createParserField({
255+
name: 'watchStatus',
256+
type: {
257+
fieldType: {
258+
name: ScalarTypes.String,
259+
type: Options.name,
260+
},
261+
},
262+
data: {
263+
type: TypeSystemDefinition.FieldDefinition,
264+
},
265+
}),
266+
],
267+
}),
268+
createSchemaDefinition({
269+
operations: {
270+
query: 'Query',
271+
},
272+
}),
273+
],
274+
};
275+
expect(tree.nodes).toEqual(expect.arrayContaining(treeMock.nodes));
276+
});
173277
test(`empty query`, () => {
174278
const schema = `
175279
type Query

src/shared/index.ts

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -293,20 +293,22 @@ export const createSchemaDefinition = (options: SchemaCreationProps) => {
293293
},
294294
directives: options?.directives || [],
295295
args: options?.operations
296-
? Object.entries(options?.operations).map(([k, v]) =>
297-
createParserField({
298-
name: k,
299-
data: {
300-
type: TypeSystemDefinition.FieldDefinition,
301-
},
302-
type: {
303-
fieldType: {
304-
type: Options.name,
305-
name: v,
296+
? Object.entries(options?.operations)
297+
.filter(([, v]) => !!v)
298+
.map(([k, v]) =>
299+
createParserField({
300+
name: k,
301+
data: {
302+
type: TypeSystemDefinition.FieldDefinition,
306303
},
307-
},
308-
}),
309-
)
304+
type: {
305+
fieldType: {
306+
type: Options.name,
307+
name: v,
308+
},
309+
},
310+
}),
311+
)
310312
: [],
311313
});
312314
};
@@ -325,20 +327,22 @@ export const createSchemaExtension = (options: SchemaCreationProps) => {
325327
},
326328
},
327329
args: options?.operations
328-
? Object.entries(options?.operations).map(([k, v]) =>
329-
createParserField({
330-
name: k,
331-
data: {
332-
type: TypeSystemDefinition.FieldDefinition,
333-
},
334-
type: {
335-
fieldType: {
336-
type: Options.name,
337-
name: v,
330+
? Object.entries(options?.operations)
331+
.filter(([, v]) => !!v)
332+
.map(([k, v]) =>
333+
createParserField({
334+
name: k,
335+
data: {
336+
type: TypeSystemDefinition.FieldDefinition,
337+
},
338+
type: {
339+
fieldType: {
340+
type: Options.name,
341+
name: v,
342+
},
338343
},
339-
},
340-
}),
341-
)
344+
}),
345+
)
342346
: [],
343347
});
344348
};

0 commit comments

Comments
 (0)