@graphql-yoga/plugin-defer-stream
Version:
Defer/Stream plugin for GraphQL Yoga.
36 lines (35 loc) • 1.59 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.DeferStreamDirectiveLabelRule = void 0;
const graphql_1 = require("graphql");
const utils_1 = require("@graphql-tools/utils");
/**
* Stream directive on list field
*
* A GraphQL document is only valid if defer and stream directives' label argument is static and unique.
*/
function DeferStreamDirectiveLabelRule(context) {
const knownLabels = Object.create(null);
return {
Directive(node) {
if (node.name.value === utils_1.GraphQLDeferDirective.name ||
node.name.value === utils_1.GraphQLStreamDirective.name) {
const labelArgument = node.arguments?.find((arg) => arg.name.value === 'label');
const labelValue = labelArgument?.value;
if (!labelValue) {
return;
}
if (labelValue.kind !== graphql_1.Kind.STRING) {
context.reportError((0, utils_1.createGraphQLError)(`Directive "${node.name.value}"'s label argument must be a static string.`, { nodes: node }));
}
else if (knownLabels[labelValue.value]) {
context.reportError((0, utils_1.createGraphQLError)('Defer/Stream directive label argument must be unique.', { nodes: [knownLabels[labelValue.value], node] }));
}
else {
knownLabels[labelValue.value] = node;
}
}
},
};
}
exports.DeferStreamDirectiveLabelRule = DeferStreamDirectiveLabelRule;
;