1 | import { invariant } from "../globals/index.js";
|
2 | import { visit, BREAK, } from 'graphql';
|
3 | export 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 | }
|
21 | export 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 | }
|
30 | export var hasAnyDirectives = function (names, root) { return hasDirectives(names, root, false); };
|
31 | export var hasAllDirectives = function (names, root) { return hasDirectives(names, root, true); };
|
32 | export 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 | }
|
45 | export function hasClientExports(document) {
|
46 | return document && hasDirectives(['client', 'export'], document, true);
|
47 | }
|
48 | function isInclusionDirective(_a) {
|
49 | var value = _a.name.value;
|
50 | return value === 'skip' || value === 'include';
|
51 | }
|
52 | export 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 |
|
\ | No newline at end of file |