Skip to content

Commit

Permalink
feat(TypeMapper): add EnumTypeComposer as a valid type
Browse files Browse the repository at this point in the history
  • Loading branch information
nodkz committed Feb 1, 2018
1 parent dd958ee commit a540e70
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 9 deletions.
43 changes: 43 additions & 0 deletions src/__tests__/typeMapper-test.js
Expand Up @@ -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';

Expand Down Expand Up @@ -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',
Expand Down Expand Up @@ -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 }');

Expand Down Expand Up @@ -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);
Expand Down
4 changes: 3 additions & 1 deletion src/inputTypeComposer.d.ts
Expand Up @@ -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<ComposeInputFieldConfig>;

Expand All @@ -22,9 +23,10 @@ export type ComposeInputFieldConfigAsObject = {

export type ComposeInputType =
| InputTypeComposer
| EnumTypeComposer
| GraphQLInputType
| TypeAsString
| Array<InputTypeComposer | GraphQLInputType | TypeAsString>;
| Array<InputTypeComposer | EnumTypeComposer | GraphQLInputType | TypeAsString>;

export type ComposeInputObjectTypeConfig = {
name: string,
Expand Down
2 changes: 2 additions & 0 deletions src/inputTypeComposer.js
Expand Up @@ -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,
Expand All @@ -34,6 +35,7 @@ export type ComposeInputFieldConfigAsObject = {

export type ComposeInputType =
| InputTypeComposer
| EnumTypeComposer
| GraphQLInputType
| TypeAsString
| Array<ComposeInputType>;
Expand Down
7 changes: 5 additions & 2 deletions src/typeComposer.d.ts
Expand Up @@ -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';

Expand Down Expand Up @@ -59,16 +60,18 @@ export type ComposeFieldConfigAsObject<TSource, TContext> = {
export type ComposeOutputType =
| GraphQLOutputType
| TypeComposer
| EnumTypeComposer
| TypeAsString
| Resolver<any, any>
| Array<GraphQLOutputType | TypeComposer | TypeAsString | Resolver<any, any>>;
| Array<GraphQLOutputType | TypeComposer | EnumTypeComposer | TypeAsString | Resolver<any, any>>;

// Compose Args -----------------------------
export type ComposeArgumentType =
| GraphQLInputType
| TypeAsString
| InputTypeComposer
| Array<GraphQLInputType | TypeAsString | InputTypeComposer>;
| EnumTypeComposer
| Array<GraphQLInputType | TypeAsString | InputTypeComposer | EnumTypeComposer>;
export type ComposeArgumentConfigAsObject = {
type: Thunk<ComposeArgumentType> | GraphQLInputType,
defaultValue?: any,
Expand Down
3 changes: 3 additions & 0 deletions src/typeComposer.js
Expand Up @@ -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 {
Expand Down Expand Up @@ -89,6 +90,7 @@ export type ComposeFieldConfigAsObject<TSource, TContext> = {
export type ComposeOutputType =
| GraphQLOutputType
| TypeComposer
| EnumTypeComposer
| TypeAsString
| Resolver<any, any>
| Array<ComposeOutputType>;
Expand All @@ -98,6 +100,7 @@ export type ComposeArgumentType =
| GraphQLInputType
| TypeAsString
| InputTypeComposer
| EnumTypeComposer
| Array<ComposeArgumentType>;
export type ComposeArgumentConfigAsObject = {
type: Thunk<ComposeArgumentType> | GraphQLInputType,
Expand Down
24 changes: 18 additions & 6 deletions src/typeMapper.js
Expand Up @@ -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';
Expand Down Expand Up @@ -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(),
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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(),
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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(),
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit a540e70

Please sign in to comment.