Files
Odoo-GraphQL-Subscription-C…/graphql-subscription/node_modules/graphql/validation/rules/ScalarLeafsRule.mjs
2024-06-03 20:23:50 +05:30

47 lines
1.4 KiB
JavaScript

import { inspect } from '../../jsutils/inspect.mjs';
import { GraphQLError } from '../../error/GraphQLError.mjs';
import { getNamedType, isLeafType } from '../../type/definition.mjs';
/**
* Scalar leafs
*
* A GraphQL document is valid only if all leaf fields (fields without
* sub selections) are of scalar or enum types.
*/
export function ScalarLeafsRule(context) {
return {
Field(node) {
const type = context.getType();
const selectionSet = node.selectionSet;
if (type) {
if (isLeafType(getNamedType(type))) {
if (selectionSet) {
const fieldName = node.name.value;
const typeStr = inspect(type);
context.reportError(
new GraphQLError(
`Field "${fieldName}" must not have a selection since type "${typeStr}" has no subfields.`,
{
nodes: selectionSet,
},
),
);
}
} else if (!selectionSet) {
const fieldName = node.name.value;
const typeStr = inspect(type);
context.reportError(
new GraphQLError(
`Field "${fieldName}" of type "${typeStr}" must have a selection of subfields. Did you mean "${fieldName} { ... }"?`,
{
nodes: node,
},
),
);
}
}
},
};
}