Skip to content

Commit 2465870

Browse files
committed
Also add isRequiredInput()
1 parent 920fc67 commit 2465870

File tree

11 files changed

+40
-41
lines changed

11 files changed

+40
-41
lines changed

src/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ export {
9494
isWrappingType,
9595
isNullableType,
9696
isNamedType,
97+
isRequiredInput,
9798
isRequiredArgument,
9899
isRequiredInputField,
99100
isSpecifiedScalarType,

src/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ export {
9393
isWrappingType,
9494
isNullableType,
9595
isNamedType,
96+
isRequiredInput,
9697
isRequiredArgument,
9798
isRequiredInputField,
9899
isSpecifiedScalarType,

src/type/__tests__/predicate-test.js

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@ import {
4949
isWrappingType,
5050
isNullableType,
5151
isNamedType,
52-
isRequiredArgument,
53-
isRequiredInputField,
52+
isRequiredInput,
5453
assertType,
5554
assertScalarType,
5655
assertObjectType,
@@ -562,7 +561,7 @@ describe('Type predicates', () => {
562561
});
563562
});
564563

565-
describe('isRequiredArgument', () => {
564+
describe('isRequiredInput', () => {
566565
function buildArg(config: {|
567566
type: GraphQLInputType,
568567
defaultValue?: mixed,
@@ -582,35 +581,33 @@ describe('Type predicates', () => {
582581
const requiredArg = buildArg({
583582
type: new GraphQLNonNull(GraphQLString),
584583
});
585-
expect(isRequiredArgument(requiredArg)).to.equal(true);
584+
expect(isRequiredInput(requiredArg)).to.equal(true);
586585
});
587586

588587
it('returns false for optional arguments', () => {
589588
const optArg1 = buildArg({
590589
type: GraphQLString,
591590
});
592-
expect(isRequiredArgument(optArg1)).to.equal(false);
591+
expect(isRequiredInput(optArg1)).to.equal(false);
593592

594593
const optArg2 = buildArg({
595594
type: GraphQLString,
596595
defaultValue: null,
597596
});
598-
expect(isRequiredArgument(optArg2)).to.equal(false);
597+
expect(isRequiredInput(optArg2)).to.equal(false);
599598

600599
const optArg3 = buildArg({
601600
type: new GraphQLList(new GraphQLNonNull(GraphQLString)),
602601
});
603-
expect(isRequiredArgument(optArg3)).to.equal(false);
602+
expect(isRequiredInput(optArg3)).to.equal(false);
604603

605604
const optArg4 = buildArg({
606605
type: new GraphQLNonNull(GraphQLString),
607606
defaultValue: 'default',
608607
});
609-
expect(isRequiredArgument(optArg4)).to.equal(false);
608+
expect(isRequiredInput(optArg4)).to.equal(false);
610609
});
611-
});
612610

613-
describe('isRequiredInputField', () => {
614611
function buildInputField(config: {|
615612
type: GraphQLInputType,
616613
defaultValue?: mixed,
@@ -630,31 +627,31 @@ describe('Type predicates', () => {
630627
const requiredField = buildInputField({
631628
type: new GraphQLNonNull(GraphQLString),
632629
});
633-
expect(isRequiredInputField(requiredField)).to.equal(true);
630+
expect(isRequiredInput(requiredField)).to.equal(true);
634631
});
635632

636633
it('returns false for optional input field', () => {
637634
const optField1 = buildInputField({
638635
type: GraphQLString,
639636
});
640-
expect(isRequiredInputField(optField1)).to.equal(false);
637+
expect(isRequiredInput(optField1)).to.equal(false);
641638

642639
const optField2 = buildInputField({
643640
type: GraphQLString,
644641
defaultValue: null,
645642
});
646-
expect(isRequiredInputField(optField2)).to.equal(false);
643+
expect(isRequiredInput(optField2)).to.equal(false);
647644

648645
const optField3 = buildInputField({
649646
type: new GraphQLList(new GraphQLNonNull(GraphQLString)),
650647
});
651-
expect(isRequiredInputField(optField3)).to.equal(false);
648+
expect(isRequiredInput(optField3)).to.equal(false);
652649

653650
const optField4 = buildInputField({
654651
type: new GraphQLNonNull(GraphQLString),
655652
defaultValue: 'default',
656653
});
657-
expect(isRequiredInputField(optField4)).to.equal(false);
654+
expect(isRequiredInput(optField4)).to.equal(false);
658655
});
659656
});
660657
});

src/type/definition.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,6 +571,8 @@ export type GraphQLFieldMap<TSource, TContext> = ObjMap<
571571
GraphQLField<TSource, TContext>
572572
>;
573573

574+
export function isRequiredInput(input: GraphQLInputValue<any>): boolean;
575+
574576
export interface GraphQLInputValue<Extensions> {
575577
name: string;
576578
description: Maybe<string>;

src/type/definition.js

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -952,14 +952,16 @@ export type GraphQLField<
952952

953953
export type GraphQLArgument = GraphQLInputValue;
954954

955-
export function isRequiredArgument(arg: GraphQLArgument): boolean %checks {
956-
return isNonNullType(arg.type) && arg.defaultValue === undefined;
957-
}
955+
export const isRequiredArgument = isRequiredInput;
958956

959957
export type GraphQLFieldMap<TSource, TContext> = ObjMap<
960958
GraphQLField<TSource, TContext>,
961959
>;
962960

961+
export function isRequiredInput(input: GraphQLInputValue): boolean %checks {
962+
return isNonNullType(input.type) && input.defaultValue === undefined;
963+
}
964+
963965
/**
964966
* @internal
965967
*/
@@ -1570,10 +1572,6 @@ export type GraphQLInputFieldConfigMap = ObjMap<GraphQLInputFieldConfig>;
15701572

15711573
export type GraphQLInputField = GraphQLInputValue;
15721574

1573-
export function isRequiredInputField(
1574-
field: GraphQLInputField,
1575-
): boolean %checks {
1576-
return isNonNullType(field.type) && field.defaultValue === undefined;
1577-
}
1575+
export const isRequiredInputField = isRequiredInput;
15781576

15791577
export type GraphQLInputFieldMap = ObjMap<GraphQLInputField>;

src/type/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export {
3030
isWrappingType,
3131
isNullableType,
3232
isNamedType,
33+
isRequiredInput,
3334
isRequiredArgument,
3435
isRequiredInputField,
3536
// Assertions

src/type/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export {
2929
isWrappingType,
3030
isNullableType,
3131
isNamedType,
32+
isRequiredInput,
3233
isRequiredArgument,
3334
isRequiredInputField,
3435
// Assertions

src/type/validate.js

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,7 @@ import {
3434
isNonNullType,
3535
isInputType,
3636
isOutputType,
37-
isRequiredArgument,
38-
isRequiredInputField,
37+
isRequiredInput,
3938
} from './definition';
4039

4140
/**
@@ -180,7 +179,7 @@ function validateDirectives(context: SchemaValidationContext): void {
180179
);
181180
}
182181

183-
if (isRequiredArgument(arg) && arg.deprecationReason != null) {
182+
if (isRequiredInput(arg) && arg.deprecationReason != null) {
184183
context.reportError(
185184
`Required argument @${directive.name}(${arg.name}:) cannot be deprecated.`,
186185
[
@@ -296,7 +295,7 @@ function validateFields(
296295
);
297296
}
298297

299-
if (isRequiredArgument(arg) && arg.deprecationReason != null) {
298+
if (isRequiredInput(arg) && arg.deprecationReason != null) {
300299
context.reportError(
301300
`Required argument ${type.name}.${field.name}(${argName}:) cannot be deprecated.`,
302301
[
@@ -424,7 +423,7 @@ function validateTypeImplementsInterface(
424423
for (const typeArg of typeField.args) {
425424
const argName = typeArg.name;
426425
const ifaceArg = ifaceField.args.find((arg) => arg.name === argName);
427-
if (!ifaceArg && isRequiredArgument(typeArg)) {
426+
if (!ifaceArg && isRequiredInput(typeArg)) {
428427
context.reportError(
429428
`Object field ${type.name}.${fieldName} includes required argument ${argName} that is missing from the Interface field ${iface.name}.${fieldName}.`,
430429
[typeArg.astNode, ifaceField.astNode],
@@ -542,7 +541,7 @@ function validateInputFields(
542541
);
543542
}
544543

545-
if (isRequiredInputField(field) && field.deprecationReason != null) {
544+
if (isRequiredInput(field) && field.deprecationReason != null) {
546545
context.reportError(
547546
`Required input field ${inputObj.name}.${field.name} cannot be deprecated.`,
548547
[

src/utilities/findBreakingChanges.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@ import {
2929
isNonNullType,
3030
isListType,
3131
isNamedType,
32-
isRequiredArgument,
33-
isRequiredInputField,
32+
isRequiredInput,
3433
} from '../type/definition';
3534

3635
import { astFromValue } from './astFromValue';
@@ -133,7 +132,7 @@ function findDirectiveChanges(
133132
const argsDiff = diff(oldDirective.args, newDirective.args);
134133

135134
for (const newArg of argsDiff.added) {
136-
if (isRequiredArgument(newArg)) {
135+
if (isRequiredInput(newArg)) {
137136
schemaChanges.push({
138137
type: BreakingChangeType.REQUIRED_DIRECTIVE_ARG_ADDED,
139138
description: `A required arg ${newArg.name} on directive ${oldDirective.name} was added.`,
@@ -229,7 +228,7 @@ function findInputObjectTypeChanges(
229228
);
230229

231230
for (const newField of fieldsDiff.added) {
232-
if (isRequiredInputField(newField)) {
231+
if (isRequiredInput(newField)) {
233232
schemaChanges.push({
234233
type: BreakingChangeType.REQUIRED_INPUT_FIELD_ADDED,
235234
description: `A required field ${newField.name} on input type ${oldType.name} was added.`,
@@ -427,7 +426,7 @@ function findArgChanges(
427426
}
428427

429428
for (const newArg of argsDiff.added) {
430-
if (isRequiredArgument(newArg)) {
429+
if (isRequiredInput(newArg)) {
431430
schemaChanges.push({
432431
type: BreakingChangeType.REQUIRED_ARG_ADDED,
433432
description: `A required arg ${newArg.name} on ${oldType.name}.${oldField.name} was added.`,

src/validation/rules/ProvidedRequiredArgumentsRule.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { Kind } from '../../language/kinds';
99
import { print } from '../../language/printer';
1010

1111
import { specifiedDirectives } from '../../type/directives';
12-
import { isType, isRequiredArgument } from '../../type/definition';
12+
import { isType, isRequiredInput } from '../../type/definition';
1313

1414
import type {
1515
ValidationContext,
@@ -41,7 +41,7 @@ export function ProvidedRequiredArgumentsRule(
4141
fieldNode.arguments?.map((arg) => arg.name.value),
4242
);
4343
for (const argDef of fieldDef.args) {
44-
if (!providedArgs.has(argDef.name) && isRequiredArgument(argDef)) {
44+
if (!providedArgs.has(argDef.name) && isRequiredInput(argDef)) {
4545
const argTypeStr = inspect(argDef.type);
4646
context.reportError(
4747
new GraphQLError(
@@ -68,7 +68,7 @@ export function ProvidedRequiredArgumentsOnDirectivesRule(
6868
const definedDirectives = schema?.getDirectives() ?? specifiedDirectives;
6969
for (const directive of definedDirectives) {
7070
requiredArgsMap[directive.name] = keyMap(
71-
directive.args.filter(isRequiredArgument),
71+
directive.args.filter(isRequiredInput),
7272
(arg) => arg.name,
7373
);
7474
}
@@ -80,7 +80,7 @@ export function ProvidedRequiredArgumentsOnDirectivesRule(
8080
const argNodes = def.arguments ?? [];
8181

8282
requiredArgsMap[def.name.value] = keyMap(
83-
argNodes.filter(isRequiredArgumentNode),
83+
argNodes.filter(isRequiredInputNode),
8484
(arg) => arg.name.value,
8585
);
8686
}
@@ -115,6 +115,6 @@ export function ProvidedRequiredArgumentsOnDirectivesRule(
115115
};
116116
}
117117

118-
function isRequiredArgumentNode(arg: InputValueDefinitionNode): boolean {
118+
function isRequiredInputNode(arg: InputValueDefinitionNode): boolean {
119119
return arg.type.kind === Kind.NON_NULL_TYPE && arg.defaultValue == null;
120120
}

src/validation/rules/ValuesOfCorrectTypeRule.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
isInputObjectType,
1515
isListType,
1616
isNonNullType,
17-
isRequiredInputField,
17+
isRequiredInput,
1818
getNullableType,
1919
getNamedType,
2020
} from '../../type/definition';
@@ -50,7 +50,7 @@ export function ValuesOfCorrectTypeRule(
5050
const fieldNodeMap = keyMap(node.fields, (field) => field.name.value);
5151
for (const fieldDef of Object.values(type.getFields())) {
5252
const fieldNode = fieldNodeMap[fieldDef.name];
53-
if (!fieldNode && isRequiredInputField(fieldDef)) {
53+
if (!fieldNode && isRequiredInput(fieldDef)) {
5454
const typeStr = inspect(fieldDef.type);
5555
context.reportError(
5656
new GraphQLError(

0 commit comments

Comments
 (0)