UNPKG

905 BJavaScriptView Raw
1import { naturalCompare } from '../jsutils/naturalCompare.mjs';
2import { 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
11export function sortValueNode(valueNode) {
12 switch (valueNode.kind) {
13 case Kind.OBJECT:
14 return { ...valueNode, fields: sortFields(valueNode.fields) };
15
16 case Kind.LIST:
17 return { ...valueNode, values: valueNode.values.map(sortValueNode) };
18
19 case Kind.INT:
20 case Kind.FLOAT:
21 case Kind.STRING:
22 case Kind.BOOLEAN:
23 case Kind.NULL:
24 case Kind.ENUM:
25 case Kind.VARIABLE:
26 return valueNode;
27 }
28}
29
30function sortFields(fields) {
31 return fields
32 .map((fieldNode) => ({
33 ...fieldNode,
34 value: sortValueNode(fieldNode.value),
35 }))
36 .sort((fieldA, fieldB) =>
37 naturalCompare(fieldA.name.value, fieldB.name.value),
38 );
39}