diff --git a/src/server/templates/typescript.ts b/src/server/templates/typescript.ts index bf08f4af..4b647034 100644 --- a/src/server/templates/typescript.ts +++ b/src/server/templates/typescript.ts @@ -495,6 +495,26 @@ export type CompositeTypes< : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema["CompositeTypes"] ? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions] : never + +export const Constants = { + ${schemas + .sort(({ name: a }, { name: b }) => a.localeCompare(b)) + .map((schema) => { + const schemaEnums = types + .filter((type) => type.schema === schema.name && type.enums.length > 0) + .sort(({ name: a }, { name: b }) => a.localeCompare(b)) + return `${JSON.stringify(schema.name)}: { + Enums: { + ${schemaEnums.map( + (enum_) => + `${JSON.stringify(enum_.name)}: [${enum_.enums + .map((variant) => JSON.stringify(variant)) + .join(', ')}]` + )} + } + }` + })} +} as const ` output = await prettier.format(output, { diff --git a/test/server/typegen.ts b/test/server/typegen.ts index f50d4c2e..aa8aadb5 100644 --- a/test/server/typegen.ts +++ b/test/server/typegen.ts @@ -535,6 +535,15 @@ test('typegen: typescript', async () => { : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema["CompositeTypes"] ? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions] : never + + export const Constants = { + public: { + Enums: { + meme_status: ["new", "old", "retired"], + user_status: ["ACTIVE", "INACTIVE"], + }, + }, + } as const " `) }) @@ -1090,6 +1099,15 @@ test('typegen w/ one-to-one relationships', async () => { : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema["CompositeTypes"] ? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions] : never + + export const Constants = { + public: { + Enums: { + meme_status: ["new", "old", "retired"], + user_status: ["ACTIVE", "INACTIVE"], + }, + }, + } as const " `) }) @@ -1645,6 +1663,15 @@ test('typegen: typescript w/ one-to-one relationships', async () => { : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema["CompositeTypes"] ? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions] : never + + export const Constants = { + public: { + Enums: { + meme_status: ["new", "old", "retired"], + user_status: ["ACTIVE", "INACTIVE"], + }, + }, + } as const " `) })