Skip to content

Commit

Permalink
feat(InputTypeComposer): add makeFieldNonNull and `makeFieldNullabl…
Browse files Browse the repository at this point in the history
…e` methods

This methods have such names due similar naming with TypeComposer. Old
methods `makeRequired` and `makeOptional` made as aliases and will
continue to work.
  • Loading branch information
nodkz committed Apr 27, 2018
1 parent 8867567 commit a08152f
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 5 deletions.
9 changes: 9 additions & 0 deletions src/InputTypeComposer.d.ts
Expand Up @@ -83,6 +83,9 @@ export class InputTypeComposer {

public reorderFields(names: string[]): this;

public isFieldNonNull(fieldName: string): boolean ;

// alias for isFieldNonNull
public isRequired(fieldName: string): boolean;

public getFieldConfig(fieldName: string): GraphQLInputFieldConfig;
Expand All @@ -91,8 +94,14 @@ export class InputTypeComposer {

public getFieldTC(fieldName: string): InputTypeComposer;

public makeFieldNonNull(fieldNameOrArray: string | string[]): this;

// alias for makeFieldNonNull
public makeRequired(fieldNameOrArray: string | string[]): this;

public makeFieldNullable(fieldNameOrArray: string | string[]): this;

// alias for makeFieldNullable
public makeOptional(fieldNameOrArray: string | string[]): this;

public clone(newTypeName: string): InputTypeComposer;
Expand Down
20 changes: 17 additions & 3 deletions src/InputTypeComposer.js
Expand Up @@ -246,10 +246,15 @@ export class InputTypeComposer {
return this;
}

isRequired(fieldName: string): boolean {
isFieldNonNull(fieldName: string): boolean {
return this.getFieldType(fieldName) instanceof GraphQLNonNull;
}

// alias for isFieldNonNull
isRequired(fieldName: string): boolean {
return this.isFieldNonNull(fieldName);
}

getFieldConfig(fieldName: string): GraphQLInputFieldConfig {
const fc = this.getField(fieldName);
if (!fc) {
Expand Down Expand Up @@ -279,7 +284,7 @@ export class InputTypeComposer {
return this.constructor.schemaComposer.InputTypeComposer.createTemp(fieldType);
}

makeRequired(fieldNameOrArray: string | Array<string>): InputTypeComposer {
makeFieldNonNull(fieldNameOrArray: string | Array<string>): InputTypeComposer {
const fieldNames = Array.isArray(fieldNameOrArray) ? fieldNameOrArray : [fieldNameOrArray];
fieldNames.forEach(fieldName => {
if (this.hasField(fieldName)) {
Expand All @@ -292,7 +297,12 @@ export class InputTypeComposer {
return this;
}

makeOptional(fieldNameOrArray: string | Array<string>): InputTypeComposer {
// alias for makeFieldNonNull
makeRequired(fieldNameOrArray: string | Array<string>): InputTypeComposer {
return this.makeFieldNonNull(fieldNameOrArray);
}

makeFieldNullable(fieldNameOrArray: string | Array<string>): InputTypeComposer {
const fieldNames = Array.isArray(fieldNameOrArray) ? fieldNameOrArray : [fieldNameOrArray];
fieldNames.forEach(fieldName => {
if (this.hasField(fieldName)) {
Expand All @@ -305,6 +315,10 @@ export class InputTypeComposer {
return this;
}

makeOptional(fieldNameOrArray: string | Array<string>): InputTypeComposer {
return this.makeFieldNullable(fieldNameOrArray);
}

clone(newTypeName: string): InputTypeComposer {
if (!newTypeName) {
throw new Error('You should provide new type name for clone() method');
Expand Down
28 changes: 26 additions & 2 deletions src/__tests__/InputTypeComposer-test.js
Expand Up @@ -193,16 +193,40 @@ describe('InputTypeComposer', () => {
});

it('isRequired()', () => {
itc.setField('input1', 'String');
expect(itc.isRequired('input1')).toBe(false);
itc.setField('input1', 'String!');
expect(itc.isRequired('input1')).toBe(true);
});

it('makeRequired()', () => {
itc.makeRequired('input1');
it('isFieldNonNull()', () => {
itc.setField('input1', 'String');
expect(itc.isFieldNonNull('input1')).toBe(false);
itc.setField('input1', 'String!');
expect(itc.isFieldNonNull('input1')).toBe(true);
});

it('makeFieldNonNull()', () => {
itc.makeFieldNonNull('input1');
expect(itc.getFieldType('input1')).toBeInstanceOf(GraphQLNonNull);
expect((itc.getFieldType('input1'): any).ofType).toBe(GraphQLString);
expect(itc.isFieldNonNull('input1')).toBe(true);
expect(itc.isRequired('input1')).toBe(true);
});

it('makeRequired()', () => {
itc.setField('input1', 'String');
itc.makeRequired('input1');
expect(itc.isFieldNonNull('input1')).toBe(true);
});

it('makeFieldNullable()', () => {
itc.makeFieldNonNull('input1');
expect(itc.isFieldNonNull('input1')).toBe(true);
itc.makeFieldNullable('input1');
expect(itc.isFieldNonNull('input1')).toBe(false);
});

it('makeOptional()', () => {
itc.makeRequired('input1');
expect(itc.isRequired('input1')).toBe(true);
Expand Down

0 comments on commit a08152f

Please sign in to comment.