diff --git a/src/utilities/findBreakingChanges.js b/src/utilities/findBreakingChanges.js index 999f93feb91..757531e640c 100644 --- a/src/utilities/findBreakingChanges.js +++ b/src/utilities/findBreakingChanges.js @@ -4,6 +4,7 @@ import keyMap from '../jsutils/keyMap'; import inspect from '../jsutils/inspect'; import invariant from '../jsutils/invariant'; +import type { ObjectFieldNode } from '../language/ast'; import { print } from '../language/printer'; import { visit } from '../language/visitor'; @@ -541,9 +542,10 @@ function stringifyValue(value: mixed, type: GraphQLInputType): string { const sortedAST = visit(ast, { ObjectValue(objectNode) { - const fields = [...objectNode.fields].sort((fieldA, fieldB) => - fieldA.name.value.localeCompare(fieldB.name.value), - ); + // Make a copy since sort mutates array + const fields = [...objectNode.fields]; + + fields.sort(compareFieldNames); return { ...objectNode, fields }; }, }); @@ -551,6 +553,22 @@ function stringifyValue(value: mixed, type: GraphQLInputType): string { return print(sortedAST); } +function compareFieldNames( + fieldA: ObjectFieldNode, + fieldB: ObjectFieldNode, +): number { + const nameA = fieldA.name.value; + const nameB = fieldB.name.value; + + if (nameA < nameB) { + return -1; + } + if (nameA > nameB) { + return 1; + } + return 0; +} + function diff( oldArray: $ReadOnlyArray, newArray: $ReadOnlyArray,