Skip to content

Commit 206d719

Browse files
committed
🐛 corrected typename field
1 parent d57f097 commit 206d719

File tree

5 files changed

+26
-12
lines changed

5 files changed

+26
-12
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "graphql-js-tree",
3-
"version": "0.3.4",
3+
"version": "0.3.5",
44
"private": false,
55
"license": "MIT",
66
"description": "GraphQL Parser providing simplier structure",

src/GqlParser/index.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { OperationType, ParserField, TypeDefinition } from '@/Models';
33
import { GqlParserTree, VariableDefinitionWithoutLoc } from '@/Models/GqlParserTree';
44
import { Parser } from '@/Parser';
55
import { TypeResolver } from '@/Parser/typeResolver';
6-
import { compileType, createPlainField, getTypeName } from '@/shared';
6+
import { compileType, createTypeNameField, getTypeName } from '@/shared';
77
import {
88
DefinitionNode,
99
parse,
@@ -124,12 +124,7 @@ export const parseGql = (gql: string, schema: string) => {
124124

125125
const composeFieldNode = (s: FieldNode, parentNode: ParserField): GqlParserTree => {
126126
const fieldNode =
127-
s.name.value === '__typename'
128-
? createPlainField({
129-
name: '__typename',
130-
type: 'String!',
131-
})
132-
: parentNode.args.find((a) => a.name === s.name.value);
127+
s.name.value === '__typename' ? createTypeNameField() : parentNode.args.find((a) => a.name === s.name.value);
133128
if (!fieldNode) {
134129
throw new Error(`Field "${s.name.value}" does not exist in "${parentNode.name}" node`);
135130
}

src/__tests__/GqlParser/GqlParserTreeToGql.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
} from '@/GqlParser/GqlParserTreeToGql';
88
import { OperationType, TypeDefinition } from '@/Models';
99
import { GqlParserTree } from '@/Models/GqlParserTree';
10-
import { createPlainField, createPlainInputValue, createRootField } from '@/shared';
10+
import { createPlainField, createPlainInputValue, createRootField, createTypeNameField } from '@/shared';
1111
import { expectTrimmedEqual } from '@/__tests__/TestUtils';
1212

1313
const mockSchema = `
@@ -244,7 +244,7 @@ describe('Test generation of gql strings from the GqlParserTree', () => {
244244
children: [
245245
{
246246
name: '__typename',
247-
node: createPlainField({ name: '__typename', type: 'String!' }),
247+
node: createTypeNameField(),
248248
},
249249
],
250250
},

src/__tests__/GqlParser/index.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { parseGql } from '@/GqlParser';
22
import { OperationType, TypeDefinition } from '@/Models';
33
import { GqlParserTree } from '@/Models/GqlParserTree';
4-
import { createPlainField, createPlainInputValue, createRootField } from '@/shared';
4+
import { createPlainField, createPlainInputValue, createRootField, createTypeNameField } from '@/shared';
55

66
const mockSchema = `
77
type Query {
@@ -213,7 +213,7 @@ describe('Test generation of GqlParserTrees from gql', () => {
213213
children: [
214214
{
215215
name: '__typename',
216-
node: createPlainField({ name: '__typename', type: 'String!' }),
216+
node: createTypeNameField(),
217217
},
218218
],
219219
},

src/shared/index.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
Instances,
66
Options,
77
ParserField,
8+
ScalarTypes,
89
TypeDefinition,
910
TypeDefinitionDisplayMap,
1011
TypeExtension,
@@ -158,6 +159,24 @@ export const createPlainField = ({ name, type, ...props }: FieldCreation) => {
158159
},
159160
});
160161
};
162+
export const createTypeNameField = () => {
163+
return createParserField({
164+
name: '__typename',
165+
description: 'The name of the current Object type at runtime.',
166+
data: {
167+
type: TypeSystemDefinition.FieldDefinition,
168+
},
169+
type: {
170+
fieldType: {
171+
type: Options.required,
172+
nest: {
173+
type: Options.name,
174+
name: ScalarTypes.String,
175+
},
176+
},
177+
},
178+
});
179+
};
161180

162181
type InputValueCreation = Pick<ParserField, 'name'> &
163182
Partial<Omit<ParserField, 'data' | 'name' | 'type'>> & { type: string };

0 commit comments

Comments
 (0)