diff --git a/src/utilities/formatSdl.js b/src/utilities/formatSdl.js index 0d59f5f..0b0dc65 100644 --- a/src/utilities/formatSdl.js +++ b/src/utilities/formatSdl.js @@ -21,11 +21,12 @@ const sortSchema = (key, value, options: OptionsType) => { sortArguments && key === 'arguments' ) { return value.slice().sort((a, b) => { - if (a.kind === 'SchemaDefinition') { + const nonNamedKinds = ['SchemaDefinition', 'SchemaExtension']; + if (nonNamedKinds.includes(a.kind)) { return -1; } - if (b.kind === 'SchemaDefinition') { + if (nonNamedKinds.includes(b.kind)) { return 1; } diff --git a/test/format-graphql/utilities/formatSdl.js b/test/format-graphql/utilities/formatSdl.js index 3e1cef5..3529764 100644 --- a/test/format-graphql/utilities/formatSdl.js +++ b/test/format-graphql/utilities/formatSdl.js @@ -99,6 +99,29 @@ test('does not strip description', (t) => { t.is(formatSdl(input), expectedOutput); }); +test('supports schema extensions', (t) => { + const input = ` + extend schema + @link(url: "https://specs.apollo.dev/federation/v2.0", + import: ["@key", "@shareable"]) + + type GenericResponse @shareable { + success: Boolean! + message: String + } +`; + + const expectedOutput = `extend schema @link(url: "https://specs.apollo.dev/federation/v2.0", import: ["@key", "@shareable"]) + +type GenericResponse @shareable { + message: String + success: Boolean! +} +`; + + t.is(formatSdl(input), expectedOutput); +}); + // @see https://github.com/graphql/graphql-js/issues/2241#issuecomment-546711570 // eslint-disable-next-line ava/no-skip-test test.skip('does not strip comments', (t) => {