From 4d013d546e4528080a4b65cbd4ef266d1f041d20 Mon Sep 17 00:00:00 2001 From: Guillaume Chau Date: Mon, 26 Feb 2024 13:01:26 +0100 Subject: [PATCH] feat: sort id fields at the top --- packages/core/src/graphql/resource.ts | 14 +++++++++++--- packages/core/src/rest/types.ts | 14 +++++++++++--- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/packages/core/src/graphql/resource.ts b/packages/core/src/graphql/resource.ts index 48c8d79..d61d60d 100644 --- a/packages/core/src/graphql/resource.ts +++ b/packages/core/src/graphql/resource.ts @@ -22,7 +22,7 @@ export async function getGraphQLResourceSchema(graphqlSchema: ResolvedGraphQLSch } if (gqlType.kind === 'OBJECT') { - const fields: Record = {} + const fields: Array = [] let inline = true for (const field of gqlType.fields) { @@ -116,7 +116,7 @@ export async function getGraphQLResourceSchema(graphqlSchema: ResolvedGraphQLSch deprecationReason: field.deprecationReason ?? undefined, } - fields[resField.name] = resField + fields.push(resField) } const isRootType = rootTypes.includes(gqlType.name) @@ -127,7 +127,15 @@ export async function getGraphQLResourceSchema(graphqlSchema: ResolvedGraphQLSch } // Sort fields - const sortedFields = Object.values(fields).sort((a, b) => a.name.localeCompare(b.name)) + const sortedFields = fields.sort((a, b) => { + if (a.name === 'id' || a.name === '_id') { + return -1 + } + if (b.name === 'id' || b.name === '_id') { + return 1 + } + return a.name.localeCompare(b.name) + }) const sortedFieldsMap: Record = {} for (const field of sortedFields) { sortedFieldsMap[field.name] = field diff --git a/packages/core/src/rest/types.ts b/packages/core/src/rest/types.ts index 4f700ce..628b700 100644 --- a/packages/core/src/rest/types.ts +++ b/packages/core/src/rest/types.ts @@ -27,7 +27,7 @@ export async function getTypesFromFile(mq: MoquerieInstance, files: string[]) { } for (const node of typeNodes) { - const fields: Record = {} + const fields: Array = [] let inline = true @@ -119,13 +119,21 @@ export async function getTypesFromFile(mq: MoquerieInstance, files: string[]) { deprecationReason, } - fields[fieldName] = resField + fields.push(resField) }) const tags = ['rest', 'object'] // Sort fields - const sortedFields = Object.values(fields).sort((a, b) => a.name.localeCompare(b.name)) + const sortedFields = fields.sort((a, b) => { + if (a.name === 'id' || a.name === '_id') { + return -1 + } + if (b.name === 'id' || b.name === '_id') { + return 1 + } + return a.name.localeCompare(b.name) + }) const sortedFieldsMap: Record = {} for (const field of sortedFields) { sortedFieldsMap[field.name] = field