updateArgument.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { Kind } from 'graphql';
  2. import { astFromType } from './astFromType.js';
  3. export function updateArgument(argumentNodes, variableDefinitionsMap, variableValues, argName, varName, type, value) {
  4. argumentNodes[argName] = {
  5. kind: Kind.ARGUMENT,
  6. name: {
  7. kind: Kind.NAME,
  8. value: argName,
  9. },
  10. value: {
  11. kind: Kind.VARIABLE,
  12. name: {
  13. kind: Kind.NAME,
  14. value: varName,
  15. },
  16. },
  17. };
  18. variableDefinitionsMap[varName] = {
  19. kind: Kind.VARIABLE_DEFINITION,
  20. variable: {
  21. kind: Kind.VARIABLE,
  22. name: {
  23. kind: Kind.NAME,
  24. value: varName,
  25. },
  26. },
  27. type: astFromType(type),
  28. };
  29. if (value !== undefined) {
  30. variableValues[varName] = value;
  31. return;
  32. }
  33. // including the variable in the map with value of `undefined`
  34. // will actually be translated by graphql-js into `null`
  35. // see https://github.com/graphql/graphql-js/issues/2533
  36. if (varName in variableValues) {
  37. delete variableValues[varName];
  38. }
  39. }
  40. export function createVariableNameGenerator(variableDefinitionMap) {
  41. let varCounter = 0;
  42. return (argName) => {
  43. let varName;
  44. do {
  45. varName = `_v${(varCounter++).toString()}_${argName}`;
  46. } while (varName in variableDefinitionMap);
  47. return varName;
  48. };
  49. }