1 | "use strict";
|
2 | function shouldInclude(selection, variables) {
|
3 | if (!variables) {
|
4 | variables = {};
|
5 | }
|
6 | if (!selection.directives) {
|
7 | return true;
|
8 | }
|
9 | var res = true;
|
10 | selection.directives.forEach(function (directive) {
|
11 | if (directive.name.value !== 'skip' && directive.name.value !== 'include') {
|
12 | return;
|
13 | }
|
14 | var directiveArguments = directive.arguments;
|
15 | var directiveName = directive.name.value;
|
16 | if (directiveArguments.length !== 1) {
|
17 | throw new Error("Incorrect number of arguments for the @" + directiveName + " directive.");
|
18 | }
|
19 | var ifArgument = directive.arguments[0];
|
20 | if (!ifArgument.name || ifArgument.name.value !== 'if') {
|
21 | throw new Error("Invalid argument for the @" + directiveName + " directive.");
|
22 | }
|
23 | var ifValue = directive.arguments[0].value;
|
24 | var evaledValue = false;
|
25 | if (!ifValue || ifValue.kind !== 'BooleanValue') {
|
26 | if (ifValue.kind !== 'Variable') {
|
27 | throw new Error("Argument for the @" + directiveName + " directive must be a variable or a bool ean value.");
|
28 | }
|
29 | else {
|
30 | evaledValue = variables[ifValue.name.value];
|
31 | if (evaledValue === undefined) {
|
32 | throw new Error("Invalid variable referenced in @" + directiveName + " directive.");
|
33 | }
|
34 | }
|
35 | }
|
36 | else {
|
37 | evaledValue = ifValue.value;
|
38 | }
|
39 | if (directiveName === 'skip') {
|
40 | evaledValue = !evaledValue;
|
41 | }
|
42 | if (!evaledValue) {
|
43 | res = false;
|
44 | }
|
45 | });
|
46 | return res;
|
47 | }
|
48 | exports.shouldInclude = shouldInclude;
|
49 |
|
\ | No newline at end of file |