UNPKG

3.17 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var visitor_1 = require("graphql/language/visitor");
4var ts_invariant_1 = require("ts-invariant");
5var storeUtils_1 = require("./storeUtils");
6function 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}
16exports.getDirectiveInfoFromField = getDirectiveInfoFromField;
17function 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}
32exports.shouldInclude = shouldInclude;
33function 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}
42exports.getDirectiveNames = getDirectiveNames;
43function hasDirectives(names, doc) {
44 return getDirectiveNames(doc).some(function (name) { return names.indexOf(name) > -1; });
45}
46exports.hasDirectives = hasDirectives;
47function hasClientExports(document) {
48 return (document &&
49 hasDirectives(['client'], document) &&
50 hasDirectives(['export'], document));
51}
52exports.hasClientExports = hasClientExports;
53function isInclusionDirective(_a) {
54 var value = _a.name.value;
55 return value === 'skip' || value === 'include';
56}
57function 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}
70exports.getInclusionDirectives = getInclusionDirectives;
71//# sourceMappingURL=directives.js.map
\No newline at end of file