From a540e706e5f1c5adbb1a4958e8a39b0992ca26c3 Mon Sep 17 00:00:00 2001 From: nodkz Date: Sun, 24 Dec 2017 02:54:29 +0600 Subject: [PATCH] feat(TypeMapper): add EnumTypeComposer as a valid type --- src/__tests__/typeMapper-test.js | 43 ++++++++++++++++++++++++++++++++ src/inputTypeComposer.d.ts | 4 ++- src/inputTypeComposer.js | 2 ++ src/typeComposer.d.ts | 7 ++++-- src/typeComposer.js | 3 +++ src/typeMapper.js | 24 +++++++++++++----- 6 files changed, 74 insertions(+), 9 deletions(-) diff --git a/src/__tests__/typeMapper-test.js b/src/__tests__/typeMapper-test.js index 3ca7d074..22ee7b76 100644 --- a/src/__tests__/typeMapper-test.js +++ b/src/__tests__/typeMapper-test.js @@ -15,6 +15,7 @@ import { import typeMapper from '../typeMapper'; import TypeComposer from '../typeComposer'; import InputTypeComposer from '../inputTypeComposer'; +import EnumTypeComposer from '../enumTypeComposer'; import Resolver from '../resolver'; import GQC from '../gqc'; @@ -208,6 +209,20 @@ describe('TypeMapper', () => { expect(fc2.description).toBe('Description'); }); + it('should accept EnumTypeComposer', () => { + const etc = EnumTypeComposer.create('enum MyEnum { V1 V2 V3 }'); + etc.setDescription('Description'); + const fc = typeMapper.convertOutputFieldConfig({ + type: etc, + }); + expect(fc.type).toBe(etc.getType()); + expect(fc.description).toBe(undefined); + + const fc2 = typeMapper.convertOutputFieldConfig(etc); + expect(fc2.type).toBe(etc.getType()); + expect(fc2.description).toBe('Description'); + }); + it('should accept Resolver', () => { const resolver = new Resolver({ name: 'find', @@ -424,6 +439,20 @@ describe('TypeMapper', () => { expect(ic2.description).toBe('Description'); }); + it('should accept EnumTypeComposer', () => { + const etc = EnumTypeComposer.create('enum MyEnum { V1 V2 }'); + etc.setDescription('Description'); + const ic = typeMapper.convertInputFieldConfig({ + type: etc, + }); + expect(ic.type).toBe(etc.getType()); + expect(ic.description).toBe(undefined); + + const ic2 = typeMapper.convertInputFieldConfig(etc); + expect(ic2.type).toBe(etc.getType()); + expect(ic2.description).toBe('Description'); + }); + it('should throw error if provided TypeComposer', () => { const tc = TypeComposer.create('type LonLat { lon: Float, lat: Float }'); @@ -599,6 +628,20 @@ describe('TypeMapper', () => { expect(ac2.description).toBe('Description'); }); + it('should accept EnumTypeComposer', () => { + const etc = EnumTypeComposer.create('enum MyEnum { V1 V2 }'); + etc.setDescription('Description'); + const ac = typeMapper.convertArgConfig({ + type: etc, + }); + expect(ac.type).toBe(etc.getType()); + expect(ac.description).toBe(undefined); + + const ac2 = typeMapper.convertArgConfig(etc); + expect(ac2.type).toBe(etc.getType()); + expect(ac2.description).toBe('Description'); + }); + it('should pass unchanged thunk', () => { const myTypeThunk = () => 'Int'; const ac = typeMapper.convertArgConfig(myTypeThunk); diff --git a/src/inputTypeComposer.d.ts b/src/inputTypeComposer.d.ts index ebc58d50..8dd48058 100644 --- a/src/inputTypeComposer.d.ts +++ b/src/inputTypeComposer.d.ts @@ -4,6 +4,7 @@ import { } from './graphql'; import { Thunk, ObjMap } from './utils/definitions'; import { TypeAsString } from './typeMapper'; +import EnumTypeComposer from './enumTypeComposer'; export type ComposeInputFieldConfigMap = ObjMap; @@ -22,9 +23,10 @@ export type ComposeInputFieldConfigAsObject = { export type ComposeInputType = | InputTypeComposer + | EnumTypeComposer | GraphQLInputType | TypeAsString - | Array; + | Array; export type ComposeInputObjectTypeConfig = { name: string, diff --git a/src/inputTypeComposer.js b/src/inputTypeComposer.js index 8095e5ca..714f6daf 100644 --- a/src/inputTypeComposer.js +++ b/src/inputTypeComposer.js @@ -9,6 +9,7 @@ import { resolveInputConfigsAsThunk, keepConfigsAsThunk } from './utils/configAs import TypeMapper from './typeMapper'; import { typeByPath } from './typeByPath'; import type { Thunk, ObjMap } from './utils/definitions'; +import type EnumTypeComposer from './enumTypeComposer'; import type { TypeAsString } from './typeMapper'; import type { // GraphQLInputFieldConfig, @@ -34,6 +35,7 @@ export type ComposeInputFieldConfigAsObject = { export type ComposeInputType = | InputTypeComposer + | EnumTypeComposer | GraphQLInputType | TypeAsString | Array; diff --git a/src/typeComposer.d.ts b/src/typeComposer.d.ts index c936d0c7..c7d80c21 100644 --- a/src/typeComposer.d.ts +++ b/src/typeComposer.d.ts @@ -8,6 +8,7 @@ import { TypeAsString } from './typeMapper'; import { ResolverOpts, ResolverNextRpCb, ResolverWrapCb } from './resolver'; import { ProjectionType } from './projection'; import InputTypeComposer from './inputTypeComposer'; +import EnumTypeComposer from './enumTypeComposer'; import Resolver from './resolver'; import { GenericMap, ObjMap, Thunk } from './utils/definitions'; @@ -59,16 +60,18 @@ export type ComposeFieldConfigAsObject = { export type ComposeOutputType = | GraphQLOutputType | TypeComposer + | EnumTypeComposer | TypeAsString | Resolver - | Array>; + | Array>; // Compose Args ----------------------------- export type ComposeArgumentType = | GraphQLInputType | TypeAsString | InputTypeComposer - | Array; + | EnumTypeComposer + | Array; export type ComposeArgumentConfigAsObject = { type: Thunk | GraphQLInputType, defaultValue?: any, diff --git a/src/typeComposer.js b/src/typeComposer.js index a307c5fb..86d154af 100644 --- a/src/typeComposer.js +++ b/src/typeComposer.js @@ -8,6 +8,7 @@ import { deprecate } from './utils/debug'; import Resolver from './resolver'; import { toInputObjectType } from './toInputObjectType'; import InputTypeComposer from './inputTypeComposer'; +import EnumTypeComposer from './enumTypeComposer'; import TypeMapper from './typeMapper'; import { typeByPath } from './typeByPath'; import { @@ -89,6 +90,7 @@ export type ComposeFieldConfigAsObject = { export type ComposeOutputType = | GraphQLOutputType | TypeComposer + | EnumTypeComposer | TypeAsString | Resolver | Array; @@ -98,6 +100,7 @@ export type ComposeArgumentType = | GraphQLInputType | TypeAsString | InputTypeComposer + | EnumTypeComposer | Array; export type ComposeArgumentConfigAsObject = { type: Thunk | GraphQLInputType, diff --git a/src/typeMapper.js b/src/typeMapper.js index f37585ad..be3dbeef 100644 --- a/src/typeMapper.js +++ b/src/typeMapper.js @@ -73,6 +73,7 @@ import type { Thunk } from './utils/definitions'; import TypeComposer from './typeComposer'; import InputTypeComposer from './inputTypeComposer'; +import EnumTypeComposer from './enumTypeComposer'; import Resolver from './resolver'; import TypeStorage from './typeStorage'; import GQC from './gqc'; @@ -212,7 +213,7 @@ class TypeMapper { return (composeFC: any); } else if (composeFC instanceof Resolver) { return composeFC.getFieldConfig(); - } else if (composeFC instanceof TypeComposer) { + } else if (composeFC instanceof TypeComposer || composeFC instanceof EnumTypeComposer) { return { type: composeFC.getType(), description: composeFC.getDescription(), @@ -270,7 +271,8 @@ class TypeMapper { } fieldConfig.type = (type: any); } - } else if (composeType instanceof TypeComposer) { + fieldConfig.type = (type: any); + } else if (composeType instanceof TypeComposer || composeType instanceof EnumTypeComposer) { fieldConfig.type = composeType.getType(); } else if (composeType instanceof Resolver) { fieldConfig.type = composeType.getType(); @@ -340,7 +342,7 @@ class TypeMapper { if (composeAC instanceof GraphQLList || composeAC instanceof GraphQLNonNull) { return { type: composeAC }; - } else if (composeAC instanceof InputTypeComposer) { + } else if (composeAC instanceof InputTypeComposer || composeAC instanceof EnumTypeComposer) { return { type: composeAC.getType(), description: composeAC.getDescription(), @@ -400,7 +402,12 @@ class TypeMapper { argConfig.type = (type: any); } - } else if (composeType instanceof InputTypeComposer) { + + argConfig.type = (type: any); + } else if ( + composeType instanceof InputTypeComposer || + composeType instanceof EnumTypeComposer + ) { argConfig.type = composeType.getType(); } else { argConfig.type = (composeType: any); @@ -468,7 +475,7 @@ class TypeMapper { if (composeIFC instanceof GraphQLList || composeIFC instanceof GraphQLNonNull) { return { type: composeIFC }; - } else if (composeIFC instanceof InputTypeComposer) { + } else if (composeIFC instanceof InputTypeComposer || composeIFC instanceof EnumTypeComposer) { return { type: composeIFC.getType(), description: composeIFC.getDescription(), @@ -528,7 +535,12 @@ class TypeMapper { fieldConfig.type = (type: any); } - } else if (composeType instanceof InputTypeComposer) { + + fieldConfig.type = (type: any); + } else if ( + composeType instanceof InputTypeComposer || + composeType instanceof EnumTypeComposer + ) { fieldConfig.type = composeType.getType(); } else { fieldConfig.type = (composeType: any);