@graphql-eslint/eslint-plugin
Version:
GraphQL plugin for ESLint
59 lines (58 loc) • 1.82 kB
JavaScript
import { Kind } from 'graphql';
const RULE_ID = 'require-nullable-fields-with-oneof';
export const rule = {
meta: {
type: 'suggestion',
docs: {
category: 'Schema',
description: 'Require `input` or `type` fields to be non-nullable with `@oneOf` directive.',
url: `https://github.com/B2o5T/graphql-eslint/blob/master/docs/rules/${RULE_ID}.md`,
examples: [
{
title: 'Incorrect',
code: /* GraphQL */ `
input Input @oneOf {
foo: String!
b: Int
}
`,
},
{
title: 'Correct',
code: /* GraphQL */ `
input Input @oneOf {
foo: String
bar: Int
}
`,
},
],
},
messages: {
[RULE_ID]: 'Field `{{fieldName}}` must be nullable.',
},
schema: [],
},
create(context) {
return {
'Directive[name.value=oneOf]'({ parent, }) {
const isTypeOrInput = [
Kind.OBJECT_TYPE_DEFINITION,
Kind.INPUT_OBJECT_TYPE_DEFINITION,
].includes(parent.kind);
if (!isTypeOrInput) {
return;
}
for (const field of parent.fields) {
if (field.gqlType.kind === Kind.NON_NULL_TYPE) {
context.report({
node: field.name,
messageId: RULE_ID,
data: { fieldName: field.name.value },
});
}
}
},
};
},
};