Skip to content

Commit 3a93c16

Browse files
committed
feat(TypeMapper): now lookup type as string in the GQC
1 parent ff40242 commit 3a93c16

File tree

2 files changed

+78
-36
lines changed

2 files changed

+78
-36
lines changed

src/__tests__/typeMapper-test.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ import typeMapper from '../typeMapper';
1616
import TypeComposer from '../typeComposer';
1717
import InputTypeComposer from '../inputTypeComposer';
1818
import Resolver from '../resolver';
19+
import GQC from '../gqc';
20+
21+
beforeEach(() => {
22+
GQC.clear();
23+
});
1924

2025
describe('TypeMapper', () => {
2126
it('should have basic mapper functions', () => {
@@ -152,6 +157,14 @@ describe('TypeMapper', () => {
152157
expect(fc.type).toBe(GraphQLString);
153158
});
154159

160+
it('should lookup type name as string in GQC', () => {
161+
const tc = TypeComposer.create(`type MyType { a: Int }`);
162+
GQC.add(tc);
163+
164+
const fc = typeMapper.convertOutputFieldConfig('MyType');
165+
expect(fc.type).toBe(tc.getType());
166+
});
167+
155168
it('should create field config from GraphQL Schema Language', () => {
156169
const fc = typeMapper.convertOutputFieldConfig(
157170
`type MyOutputType {
@@ -360,6 +373,14 @@ describe('TypeMapper', () => {
360373
expect(ic.type).toBe(GraphQLString);
361374
});
362375

376+
it('should lookup type name as string in GQC', () => {
377+
const itc = InputTypeComposer.create(`input MyInput { a: Int }`);
378+
GQC.add(itc);
379+
380+
const ic = typeMapper.convertInputFieldConfig('MyInput');
381+
expect(ic.type).toBe(itc.getType());
382+
});
383+
363384
it('should create field config from input type GraphQL Schema Language', () => {
364385
const fc: any = typeMapper.convertInputFieldConfig(
365386
`input MyInputType {
@@ -527,6 +548,14 @@ describe('TypeMapper', () => {
527548
expect(ac.type).toBe(GraphQLString);
528549
});
529550

551+
it('should lookup type name as string in GQC', () => {
552+
const itc = InputTypeComposer.create(`input MyArg { a: Int }`);
553+
GQC.add(itc);
554+
555+
const ac = typeMapper.convertArgConfig('MyArg');
556+
expect(ac.type).toBe(itc.getType());
557+
});
558+
530559
it('should create arg config from input type GraphQL Schema Language', () => {
531560
const fc: any = typeMapper.convertArgConfig(
532561
`input MyInputArg {

src/typeMapper.js

Lines changed: 49 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ import type { Thunk } from './utils/definitions';
8787
import TypeComposer from './typeComposer';
8888
import InputTypeComposer from './inputTypeComposer';
8989
import Resolver from './resolver';
90+
import GQC from './gqc';
9091

9192
export type TypeDefinitionString = string; // eg type Name { field: Int }
9293
export type TypeWrappedString = string; // eg. Int, Int!, [Int]
@@ -247,19 +248,23 @@ class TypeMapper {
247248
);
248249
}
249250

250-
const type =
251-
RegexpOutputTypeDefinition.test(composeType) || RegexpEnumTypeDefinition.test(composeType)
252-
? this.createType(composeType)
253-
: this.getWrapped(composeType);
254-
255-
if (!type) {
256-
throw new Error(
257-
`${typeName}.${fieldName} cannot convert to OutputType the following string: '${
258-
composeType
259-
}'`
260-
);
251+
if (GQC.hasInstance(composeType, TypeComposer)) {
252+
fieldConfig.type = GQC.getTC(composeType).getType();
253+
} else {
254+
const type =
255+
RegexpOutputTypeDefinition.test(composeType) || RegexpEnumTypeDefinition.test(composeType)
256+
? this.createType(composeType)
257+
: this.getWrapped(composeType);
258+
259+
if (!type) {
260+
throw new Error(
261+
`${typeName}.${fieldName} cannot convert to OutputType the following string: '${
262+
composeType
263+
}'`
264+
);
265+
}
266+
fieldConfig.type = (type: any);
261267
}
262-
fieldConfig.type = (type: any);
263268
} else if (composeType instanceof TypeComposer) {
264269
fieldConfig.type = composeType.getType();
265270
} else if (composeType instanceof Resolver) {
@@ -378,20 +383,24 @@ class TypeMapper {
378383
);
379384
}
380385

381-
const type =
382-
RegexpInputTypeDefinition.test(composeType) || RegexpEnumTypeDefinition.test(composeType)
383-
? this.createType(composeType)
384-
: this.getWrapped(composeType);
386+
if (GQC.hasInstance(composeType, InputTypeComposer)) {
387+
argConfig.type = GQC.getITC(composeType).getType();
388+
} else {
389+
const type =
390+
RegexpInputTypeDefinition.test(composeType) || RegexpEnumTypeDefinition.test(composeType)
391+
? this.createType(composeType)
392+
: this.getWrapped(composeType);
393+
394+
if (!type) {
395+
throw new Error(
396+
`${typeName}.${fieldName}@${
397+
argName
398+
} cannot convert to InputType the following string: '${composeType}'`
399+
);
400+
}
385401

386-
if (!type) {
387-
throw new Error(
388-
`${typeName}.${fieldName}@${argName} cannot convert to InputType the following string: '${
389-
composeType
390-
}'`
391-
);
402+
argConfig.type = (type: any);
392403
}
393-
394-
argConfig.type = (type: any);
395404
} else if (composeType instanceof InputTypeComposer) {
396405
argConfig.type = composeType.getType();
397406
} else {
@@ -506,20 +515,24 @@ class TypeMapper {
506515
);
507516
}
508517

509-
const type =
510-
RegexpInputTypeDefinition.test(composeType) || RegexpEnumTypeDefinition.test(composeType)
511-
? this.createType(composeType)
512-
: this.getWrapped(composeType);
518+
if (GQC.hasInstance(composeType, InputTypeComposer)) {
519+
fieldConfig.type = GQC.getITC(composeType).getType();
520+
} else {
521+
const type =
522+
RegexpInputTypeDefinition.test(composeType) || RegexpEnumTypeDefinition.test(composeType)
523+
? this.createType(composeType)
524+
: this.getWrapped(composeType);
525+
526+
if (!type) {
527+
throw new Error(
528+
`${typeName}.${fieldName} cannot convert to InputType the following string: '${
529+
composeType
530+
}'`
531+
);
532+
}
513533

514-
if (!type) {
515-
throw new Error(
516-
`${typeName}.${fieldName} cannot convert to InputType the following string: '${
517-
composeType
518-
}'`
519-
);
534+
fieldConfig.type = (type: any);
520535
}
521-
522-
fieldConfig.type = (type: any);
523536
} else if (composeType instanceof InputTypeComposer) {
524537
fieldConfig.type = composeType.getType();
525538
} else {

0 commit comments

Comments
 (0)