Skip to content

Commit 1403ffb

Browse files
committed
fix(getSchemaTypes): deep clone everything since graphql returns readonly results
1 parent 2f439f1 commit 1403ffb

File tree

1 file changed

+25
-9
lines changed

1 file changed

+25
-9
lines changed

src/getSchemaTypes.js

+25-9
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,35 @@ export type Types = {[name: string]: Type}
3333

3434
let promise: ?Promise<Types>
3535

36+
37+
function convertRawField({name, type}: RawField): Field {
38+
return ({name, type: convertRawType(type)}: any)
39+
}
40+
41+
function convertRawFields(fields: Array<RawField>): {[name: string]: Field} {
42+
const convertedFields = {}
43+
for (let field of fields) {
44+
convertedFields[field.name] = (convertRawField(field): any)
45+
}
46+
return convertedFields
47+
}
48+
49+
function convertRawType({name, kind, ofType, fields}: RawType): Type {
50+
return {
51+
name,
52+
kind,
53+
ofType: ofType ? convertRawType(ofType) : null,
54+
fields: fields ? convertRawFields(fields) : null,
55+
}
56+
}
57+
3658
export function linkTypes(rawTypes: Array<RawType>): Types {
3759
const types: Types = {}
60+
3861
for (let rawType of rawTypes) {
39-
const {name, kind, ofType, fields} = rawType
62+
const {name} = rawType
4063
if (name) {
41-
const type = types[name] = {name, kind}
42-
if (ofType) type.ofType = (ofType: any)
43-
if (fields) {
44-
type.fields = {}
45-
for (let field of fields) {
46-
type.fields[field.name] = field
47-
}
48-
}
64+
types[name] = convertRawType(rawType)
4965
}
5066
}
5167
function resolveType(type: Type, parent: ?Field): Type {

0 commit comments

Comments
 (0)