UNPKG

3.32 kBJavaScriptView Raw
1import { invariant } from "../globals/index.js";
2import { visit, BREAK, } from 'graphql';
3export function shouldInclude(_a, variables) {
4 var directives = _a.directives;
5 if (!directives || !directives.length) {
6 return true;
7 }
8 return getInclusionDirectives(directives).every(function (_a) {
9 var directive = _a.directive, ifArgument = _a.ifArgument;
10 var evaledValue = false;
11 if (ifArgument.value.kind === 'Variable') {
12 evaledValue = variables && variables[ifArgument.value.name.value];
13 __DEV__ ? invariant(evaledValue !== void 0, "Invalid variable referenced in @".concat(directive.name.value, " directive.")) : invariant(evaledValue !== void 0, 39);
14 }
15 else {
16 evaledValue = ifArgument.value.value;
17 }
18 return directive.name.value === 'skip' ? !evaledValue : evaledValue;
19 });
20}
21export function getDirectiveNames(root) {
22 var names = [];
23 visit(root, {
24 Directive: function (node) {
25 names.push(node.name.value);
26 },
27 });
28 return names;
29}
30export var hasAnyDirectives = function (names, root) { return hasDirectives(names, root, false); };
31export var hasAllDirectives = function (names, root) { return hasDirectives(names, root, true); };
32export function hasDirectives(names, root, all) {
33 var nameSet = new Set(names);
34 var uniqueCount = nameSet.size;
35 visit(root, {
36 Directive: function (node) {
37 if (nameSet.delete(node.name.value) &&
38 (!all || !nameSet.size)) {
39 return BREAK;
40 }
41 },
42 });
43 return all ? !nameSet.size : nameSet.size < uniqueCount;
44}
45export function hasClientExports(document) {
46 return document && hasDirectives(['client', 'export'], document, true);
47}
48function isInclusionDirective(_a) {
49 var value = _a.name.value;
50 return value === 'skip' || value === 'include';
51}
52export function getInclusionDirectives(directives) {
53 var result = [];
54 if (directives && directives.length) {
55 directives.forEach(function (directive) {
56 if (!isInclusionDirective(directive))
57 return;
58 var directiveArguments = directive.arguments;
59 var directiveName = directive.name.value;
60 __DEV__ ? invariant(directiveArguments && directiveArguments.length === 1, "Incorrect number of arguments for the @".concat(directiveName, " directive.")) : invariant(directiveArguments && directiveArguments.length === 1, 40);
61 var ifArgument = directiveArguments[0];
62 __DEV__ ? invariant(ifArgument.name && ifArgument.name.value === 'if', "Invalid argument for the @".concat(directiveName, " directive.")) : invariant(ifArgument.name && ifArgument.name.value === 'if', 41);
63 var ifValue = ifArgument.value;
64 __DEV__ ? invariant(ifValue &&
65 (ifValue.kind === 'Variable' || ifValue.kind === 'BooleanValue'), "Argument for the @".concat(directiveName, " directive must be a variable or a boolean value.")) : invariant(ifValue &&
66 (ifValue.kind === 'Variable' || ifValue.kind === 'BooleanValue'), 42);
67 result.push({ directive: directive, ifArgument: ifArgument });
68 });
69 }
70 return result;
71}
72//# sourceMappingURL=directives.js.map
\No newline at end of file