UNPKG

1.77 kBJavaScriptView Raw
1"use strict";
2function 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}
48exports.shouldInclude = shouldInclude;
49//# sourceMappingURL=directives.js.map
\No newline at end of file