diff --git a/package.json b/package.json index 45b3532a..33c101a5 100644 --- a/package.json +++ b/package.json @@ -28,8 +28,8 @@ "start": "node dist/server/server.js", "dev": "trap 'npm run db:clean' INT && run-s db:clean db:run && nodemon --exec node --loader ts-node/esm src/server/server.ts | pino-pretty --colorize", "test": "run-s db:clean db:run test:run db:clean", - "db:clean": "cd test/db && docker-compose down", - "db:run": "cd test/db && docker-compose up --detach && sleep 5", + "db:clean": "cd test/db && docker compose down", + "db:run": "cd test/db && docker compose up --detach && sleep 5", "test:run": "vitest run", "test:update": "run-s db:clean db:run && vitest run --update && run-s db:clean" }, diff --git a/src/server/constants.ts b/src/server/constants.ts index 80052e00..c87d3fbd 100644 --- a/src/server/constants.ts +++ b/src/server/constants.ts @@ -37,7 +37,7 @@ if (PG_META_DB_SSL_ROOT_CERT) { export const EXPORT_DOCS = process.env.PG_META_EXPORT_DOCS === 'true' export const GENERATE_TYPES = process.env.PG_META_GENERATE_TYPES export const GENERATE_TYPES_INCLUDED_SCHEMAS = GENERATE_TYPES - ? process.env.PG_META_GENERATE_TYPES_INCLUDED_SCHEMAS?.split(',') ?? [] + ? (process.env.PG_META_GENERATE_TYPES_INCLUDED_SCHEMAS?.split(',') ?? []) : [] export const GENERATE_TYPES_DETECT_ONE_TO_ONE_RELATIONSHIPS = process.env.PG_META_GENERATE_TYPES_DETECT_ONE_TO_ONE_RELATIONSHIPS === 'true' diff --git a/src/server/templates/typescript.ts b/src/server/templates/typescript.ts index 66557b8f..f5aa1c58 100644 --- a/src/server/templates/typescript.ts +++ b/src/server/templates/typescript.ts @@ -464,6 +464,19 @@ export type Enums< : PublicEnumNameOrOptions extends keyof PublicSchema["Enums"] ? PublicSchema["Enums"][PublicEnumNameOrOptions] : never + +export type CompositeTypes< + PublicCompositeTypeNameOrOptions extends + | keyof PublicSchema['CompositeTypes'] + | { schema: keyof Database }, + CompositeTypeName extends PublicCompositeTypeNameOrOptions extends { schema: keyof Database } + ? keyof Database[PublicCompositeTypeNameOrOptions['schema']]['CompositeTypes'] + : never = never +> = PublicCompositeTypeNameOrOptions extends { schema: keyof Database } + ? Database[PublicCompositeTypeNameOrOptions['schema']]['CompositeTypes'][CompositeTypeName] + : PublicCompositeTypeNameOrOptions extends keyof PublicSchema['CompositeTypes'] + ? PublicSchema['CompositeTypes'][PublicCompositeTypeNameOrOptions] + : never; ` output = await prettier.format(output, { diff --git a/test/server/typegen.ts b/test/server/typegen.ts index 1c0f914f..c60136d1 100644 --- a/test/server/typegen.ts +++ b/test/server/typegen.ts @@ -509,6 +509,21 @@ test('typegen: typescript', async () => { : PublicEnumNameOrOptions extends keyof PublicSchema["Enums"] ? PublicSchema["Enums"][PublicEnumNameOrOptions] : never + + export type CompositeTypes< + PublicCompositeTypeNameOrOptions extends + | keyof PublicSchema["CompositeTypes"] + | { schema: keyof Database }, + CompositeTypeName extends PublicCompositeTypeNameOrOptions extends { + schema: keyof Database + } + ? keyof Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"] + : never = never, + > = PublicCompositeTypeNameOrOptions extends { schema: keyof Database } + ? Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName] + : PublicCompositeTypeNameOrOptions extends keyof PublicSchema["CompositeTypes"] + ? PublicSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions] + : never " `) }) @@ -1038,6 +1053,21 @@ test('typegen w/ one-to-one relationships', async () => { : PublicEnumNameOrOptions extends keyof PublicSchema["Enums"] ? PublicSchema["Enums"][PublicEnumNameOrOptions] : never + + export type CompositeTypes< + PublicCompositeTypeNameOrOptions extends + | keyof PublicSchema["CompositeTypes"] + | { schema: keyof Database }, + CompositeTypeName extends PublicCompositeTypeNameOrOptions extends { + schema: keyof Database + } + ? keyof Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"] + : never = never, + > = PublicCompositeTypeNameOrOptions extends { schema: keyof Database } + ? Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName] + : PublicCompositeTypeNameOrOptions extends keyof PublicSchema["CompositeTypes"] + ? PublicSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions] + : never " `) }) @@ -1567,6 +1597,21 @@ test('typegen: typescript w/ one-to-one relationships', async () => { : PublicEnumNameOrOptions extends keyof PublicSchema["Enums"] ? PublicSchema["Enums"][PublicEnumNameOrOptions] : never + + export type CompositeTypes< + PublicCompositeTypeNameOrOptions extends + | keyof PublicSchema["CompositeTypes"] + | { schema: keyof Database }, + CompositeTypeName extends PublicCompositeTypeNameOrOptions extends { + schema: keyof Database + } + ? keyof Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"] + : never = never, + > = PublicCompositeTypeNameOrOptions extends { schema: keyof Database } + ? Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName] + : PublicCompositeTypeNameOrOptions extends keyof PublicSchema["CompositeTypes"] + ? PublicSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions] + : never " `) })