directives.js 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. //# sourceMappingURL=directives.js.map