sortValueNode.mjs 905 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { naturalCompare } from '../jsutils/naturalCompare.mjs';
  2. import { Kind } from '../language/kinds.mjs';
  3. /**
  4. * Sort ValueNode.
  5. *
  6. * This function returns a sorted copy of the given ValueNode.
  7. *
  8. * @internal
  9. */
  10. export function sortValueNode(valueNode) {
  11. switch (valueNode.kind) {
  12. case Kind.OBJECT:
  13. return { ...valueNode, fields: sortFields(valueNode.fields) };
  14. case Kind.LIST:
  15. return { ...valueNode, values: valueNode.values.map(sortValueNode) };
  16. case Kind.INT:
  17. case Kind.FLOAT:
  18. case Kind.STRING:
  19. case Kind.BOOLEAN:
  20. case Kind.NULL:
  21. case Kind.ENUM:
  22. case Kind.VARIABLE:
  23. return valueNode;
  24. }
  25. }
  26. function sortFields(fields) {
  27. return fields
  28. .map((fieldNode) => ({
  29. ...fieldNode,
  30. value: sortValueNode(fieldNode.value),
  31. }))
  32. .sort((fieldA, fieldB) =>
  33. naturalCompare(fieldA.name.value, fieldB.name.value),
  34. );
  35. }