From 72fe5c6c97eeb20d5409bc4060bb1dbdf1924dfd Mon Sep 17 00:00:00 2001 From: Bobbie Soedirgo Date: Tue, 31 Oct 2023 20:36:39 +0800 Subject: [PATCH] fix(typegen): sort relationships by (fkey name, referenced table) --- src/server/templates/typescript.ts | 6 +++-- test/db/00-init.sql | 2 ++ test/server/typegen.ts | 40 ++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/server/templates/typescript.ts b/src/server/templates/typescript.ts index 992a4004..d90d72b2 100644 --- a/src/server/templates/typescript.ts +++ b/src/server/templates/typescript.ts @@ -160,8 +160,10 @@ export interface Database { relationship.schema === table.schema && relationship.relation === table.name ) - .sort(({ foreign_key_name: a }, { foreign_key_name: b }) => - a.localeCompare(b) + .sort( + (a, b) => + a.foreign_key_name.localeCompare(b.foreign_key_name) || + a.referenced_relation.localeCompare(b.referenced_relation) ) .map( (relationship) => `{ diff --git a/test/db/00-init.sql b/test/db/00-init.sql index 33a85958..8497da49 100644 --- a/test/db/00-init.sql +++ b/test/db/00-init.sql @@ -101,3 +101,5 @@ create table user_details ( user_id int8 references users(id) primary key, details text ); + +create view a_view as select id from users; diff --git a/test/server/typegen.ts b/test/server/typegen.ts index c9c04a0b..e10ae6cb 100644 --- a/test/server/typegen.ts +++ b/test/server/typegen.ts @@ -85,6 +85,13 @@ test('typegen', async () => { "user-id"?: number } Relationships: [ + { + foreignKeyName: "todos_user-id_fkey" + columns: ["user-id"] + isOneToOne: false + referencedRelation: "a_view" + referencedColumns: ["id"] + }, { foreignKeyName: "todos_user-id_fkey" columns: ["user-id"] @@ -115,6 +122,13 @@ test('typegen', async () => { user_id?: number } Relationships: [ + { + foreignKeyName: "user_details_user_id_fkey" + columns: ["user_id"] + isOneToOne: true + referencedRelation: "a_view" + referencedColumns: ["id"] + }, { foreignKeyName: "user_details_user_id_fkey" columns: ["user_id"] @@ -172,6 +186,18 @@ test('typegen', async () => { } } Views: { + a_view: { + Row: { + id: number | null + } + Insert: { + id?: number | null + } + Update: { + id?: number | null + } + Relationships: [] + } todos_matview: { Row: { details: string | null @@ -186,6 +212,13 @@ test('typegen', async () => { referencedRelation: "users" referencedColumns: ["id"] }, + { + foreignKeyName: "todos_user-id_fkey" + columns: ["user-id"] + isOneToOne: false + referencedRelation: "a_view" + referencedColumns: ["id"] + }, { foreignKeyName: "todos_user-id_fkey" columns: ["user-id"] @@ -219,6 +252,13 @@ test('typegen', async () => { referencedRelation: "users" referencedColumns: ["id"] }, + { + foreignKeyName: "todos_user-id_fkey" + columns: ["user-id"] + isOneToOne: false + referencedRelation: "a_view" + referencedColumns: ["id"] + }, { foreignKeyName: "todos_user-id_fkey" columns: ["user-id"]