1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var visitor_1 = require("graphql/language/visitor");
|
4 | var ts_invariant_1 = require("ts-invariant");
|
5 | var storeUtils_1 = require("./storeUtils");
|
6 | function getDirectiveInfoFromField(field, variables) {
|
7 | if (field.directives && field.directives.length) {
|
8 | var directiveObj_1 = {};
|
9 | field.directives.forEach(function (directive) {
|
10 | directiveObj_1[directive.name.value] = storeUtils_1.argumentsObjectFromField(directive, variables);
|
11 | });
|
12 | return directiveObj_1;
|
13 | }
|
14 | return null;
|
15 | }
|
16 | exports.getDirectiveInfoFromField = getDirectiveInfoFromField;
|
17 | function shouldInclude(selection, variables) {
|
18 | if (variables === void 0) { variables = {}; }
|
19 | return getInclusionDirectives(selection.directives).every(function (_a) {
|
20 | var directive = _a.directive, ifArgument = _a.ifArgument;
|
21 | var evaledValue = false;
|
22 | if (ifArgument.value.kind === 'Variable') {
|
23 | evaledValue = variables[ifArgument.value.name.value];
|
24 | ts_invariant_1.invariant(evaledValue !== void 0, "Invalid variable referenced in @" + directive.name.value + " directive.");
|
25 | }
|
26 | else {
|
27 | evaledValue = ifArgument.value.value;
|
28 | }
|
29 | return directive.name.value === 'skip' ? !evaledValue : evaledValue;
|
30 | });
|
31 | }
|
32 | exports.shouldInclude = shouldInclude;
|
33 | function getDirectiveNames(doc) {
|
34 | var names = [];
|
35 | visitor_1.visit(doc, {
|
36 | Directive: function (node) {
|
37 | names.push(node.name.value);
|
38 | },
|
39 | });
|
40 | return names;
|
41 | }
|
42 | exports.getDirectiveNames = getDirectiveNames;
|
43 | function hasDirectives(names, doc) {
|
44 | return getDirectiveNames(doc).some(function (name) { return names.indexOf(name) > -1; });
|
45 | }
|
46 | exports.hasDirectives = hasDirectives;
|
47 | function hasClientExports(document) {
|
48 | return (document &&
|
49 | hasDirectives(['client'], document) &&
|
50 | hasDirectives(['export'], document));
|
51 | }
|
52 | exports.hasClientExports = hasClientExports;
|
53 | function isInclusionDirective(_a) {
|
54 | var value = _a.name.value;
|
55 | return value === 'skip' || value === 'include';
|
56 | }
|
57 | function getInclusionDirectives(directives) {
|
58 | return directives ? directives.filter(isInclusionDirective).map(function (directive) {
|
59 | var directiveArguments = directive.arguments;
|
60 | var directiveName = directive.name.value;
|
61 | ts_invariant_1.invariant(directiveArguments && directiveArguments.length === 1, "Incorrect number of arguments for the @" + directiveName + " directive.");
|
62 | var ifArgument = directiveArguments[0];
|
63 | ts_invariant_1.invariant(ifArgument.name && ifArgument.name.value === 'if', "Invalid argument for the @" + directiveName + " directive.");
|
64 | var ifValue = ifArgument.value;
|
65 | ts_invariant_1.invariant(ifValue &&
|
66 | (ifValue.kind === 'Variable' || ifValue.kind === 'BooleanValue'), "Argument for the @" + directiveName + " directive must be a variable or a boolean value.");
|
67 | return { directive: directive, ifArgument: ifArgument };
|
68 | }) : [];
|
69 | }
|
70 | exports.getInclusionDirectives = getInclusionDirectives;
|
71 |
|
\ | No newline at end of file |