sortValueNode.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', {
  3. value: true,
  4. });
  5. exports.sortValueNode = sortValueNode;
  6. var _naturalCompare = require('../jsutils/naturalCompare.js');
  7. var _kinds = require('../language/kinds.js');
  8. /**
  9. * Sort ValueNode.
  10. *
  11. * This function returns a sorted copy of the given ValueNode.
  12. *
  13. * @internal
  14. */
  15. function sortValueNode(valueNode) {
  16. switch (valueNode.kind) {
  17. case _kinds.Kind.OBJECT:
  18. return { ...valueNode, fields: sortFields(valueNode.fields) };
  19. case _kinds.Kind.LIST:
  20. return { ...valueNode, values: valueNode.values.map(sortValueNode) };
  21. case _kinds.Kind.INT:
  22. case _kinds.Kind.FLOAT:
  23. case _kinds.Kind.STRING:
  24. case _kinds.Kind.BOOLEAN:
  25. case _kinds.Kind.NULL:
  26. case _kinds.Kind.ENUM:
  27. case _kinds.Kind.VARIABLE:
  28. return valueNode;
  29. }
  30. }
  31. function sortFields(fields) {
  32. return fields
  33. .map((fieldNode) => ({
  34. ...fieldNode,
  35. value: sortValueNode(fieldNode.value),
  36. }))
  37. .sort((fieldA, fieldB) =>
  38. (0, _naturalCompare.naturalCompare)(fieldA.name.value, fieldB.name.value),
  39. );
  40. }