Skip to content

Commit e0ad110

Browse files
f-elixsoedirgo
andauthored
feat(typegen): add CompositeTypes helper (#798)
* Add `CompositeTypes` helper * fix: formatting & tests * chore: update scripts * chore: prettier --------- Co-authored-by: Bobbie Soedirgo <bobbie@soedirgo.dev>
1 parent 288baa2 commit e0ad110

File tree

4 files changed

+61
-3
lines changed

4 files changed

+61
-3
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828
"start": "node dist/server/server.js",
2929
"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",
3030
"test": "run-s db:clean db:run test:run db:clean",
31-
"db:clean": "cd test/db && docker-compose down",
32-
"db:run": "cd test/db && docker-compose up --detach && sleep 5",
31+
"db:clean": "cd test/db && docker compose down",
32+
"db:run": "cd test/db && docker compose up --detach && sleep 5",
3333
"test:run": "vitest run",
3434
"test:update": "run-s db:clean db:run && vitest run --update && run-s db:clean"
3535
},

src/server/constants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ if (PG_META_DB_SSL_ROOT_CERT) {
3737
export const EXPORT_DOCS = process.env.PG_META_EXPORT_DOCS === 'true'
3838
export const GENERATE_TYPES = process.env.PG_META_GENERATE_TYPES
3939
export const GENERATE_TYPES_INCLUDED_SCHEMAS = GENERATE_TYPES
40-
? process.env.PG_META_GENERATE_TYPES_INCLUDED_SCHEMAS?.split(',') ?? []
40+
? (process.env.PG_META_GENERATE_TYPES_INCLUDED_SCHEMAS?.split(',') ?? [])
4141
: []
4242
export const GENERATE_TYPES_DETECT_ONE_TO_ONE_RELATIONSHIPS =
4343
process.env.PG_META_GENERATE_TYPES_DETECT_ONE_TO_ONE_RELATIONSHIPS === 'true'

src/server/templates/typescript.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,19 @@ export type Enums<
464464
: PublicEnumNameOrOptions extends keyof PublicSchema["Enums"]
465465
? PublicSchema["Enums"][PublicEnumNameOrOptions]
466466
: never
467+
468+
export type CompositeTypes<
469+
PublicCompositeTypeNameOrOptions extends
470+
| keyof PublicSchema['CompositeTypes']
471+
| { schema: keyof Database },
472+
CompositeTypeName extends PublicCompositeTypeNameOrOptions extends { schema: keyof Database }
473+
? keyof Database[PublicCompositeTypeNameOrOptions['schema']]['CompositeTypes']
474+
: never = never
475+
> = PublicCompositeTypeNameOrOptions extends { schema: keyof Database }
476+
? Database[PublicCompositeTypeNameOrOptions['schema']]['CompositeTypes'][CompositeTypeName]
477+
: PublicCompositeTypeNameOrOptions extends keyof PublicSchema['CompositeTypes']
478+
? PublicSchema['CompositeTypes'][PublicCompositeTypeNameOrOptions]
479+
: never;
467480
`
468481

469482
output = await prettier.format(output, {

test/server/typegen.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,21 @@ test('typegen: typescript', async () => {
509509
: PublicEnumNameOrOptions extends keyof PublicSchema["Enums"]
510510
? PublicSchema["Enums"][PublicEnumNameOrOptions]
511511
: never
512+
513+
export type CompositeTypes<
514+
PublicCompositeTypeNameOrOptions extends
515+
| keyof PublicSchema["CompositeTypes"]
516+
| { schema: keyof Database },
517+
CompositeTypeName extends PublicCompositeTypeNameOrOptions extends {
518+
schema: keyof Database
519+
}
520+
? keyof Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"]
521+
: never = never,
522+
> = PublicCompositeTypeNameOrOptions extends { schema: keyof Database }
523+
? Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName]
524+
: PublicCompositeTypeNameOrOptions extends keyof PublicSchema["CompositeTypes"]
525+
? PublicSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions]
526+
: never
512527
"
513528
`)
514529
})
@@ -1038,6 +1053,21 @@ test('typegen w/ one-to-one relationships', async () => {
10381053
: PublicEnumNameOrOptions extends keyof PublicSchema["Enums"]
10391054
? PublicSchema["Enums"][PublicEnumNameOrOptions]
10401055
: never
1056+
1057+
export type CompositeTypes<
1058+
PublicCompositeTypeNameOrOptions extends
1059+
| keyof PublicSchema["CompositeTypes"]
1060+
| { schema: keyof Database },
1061+
CompositeTypeName extends PublicCompositeTypeNameOrOptions extends {
1062+
schema: keyof Database
1063+
}
1064+
? keyof Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"]
1065+
: never = never,
1066+
> = PublicCompositeTypeNameOrOptions extends { schema: keyof Database }
1067+
? Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName]
1068+
: PublicCompositeTypeNameOrOptions extends keyof PublicSchema["CompositeTypes"]
1069+
? PublicSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions]
1070+
: never
10411071
"
10421072
`)
10431073
})
@@ -1567,6 +1597,21 @@ test('typegen: typescript w/ one-to-one relationships', async () => {
15671597
: PublicEnumNameOrOptions extends keyof PublicSchema["Enums"]
15681598
? PublicSchema["Enums"][PublicEnumNameOrOptions]
15691599
: never
1600+
1601+
export type CompositeTypes<
1602+
PublicCompositeTypeNameOrOptions extends
1603+
| keyof PublicSchema["CompositeTypes"]
1604+
| { schema: keyof Database },
1605+
CompositeTypeName extends PublicCompositeTypeNameOrOptions extends {
1606+
schema: keyof Database
1607+
}
1608+
? keyof Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"]
1609+
: never = never,
1610+
> = PublicCompositeTypeNameOrOptions extends { schema: keyof Database }
1611+
? Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName]
1612+
: PublicCompositeTypeNameOrOptions extends keyof PublicSchema["CompositeTypes"]
1613+
? PublicSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions]
1614+
: never
15701615
"
15711616
`)
15721617
})

0 commit comments

Comments
 (0)