diff --git a/src/server/templates/typescript.ts b/src/server/templates/typescript.ts index ec503d4c..c5f6e076 100644 --- a/src/server/templates/typescript.ts +++ b/src/server/templates/typescript.ts @@ -419,85 +419,98 @@ export type Database = { })} } -export type Tables< - PublicTableNameOrOptions extends - | keyof (Database["public"]["Tables"] & Database["public"]["Views"]) - | { schema: keyof Database }, - TableName extends PublicTableNameOrOptions extends { schema: keyof Database } - ? keyof (Database[PublicTableNameOrOptions["schema"]]["Tables"] & - Database[PublicTableNameOrOptions["schema"]]["Views"]) - : never = never -> = PublicTableNameOrOptions extends { schema: keyof Database } - ? (Database[PublicTableNameOrOptions["schema"]]["Tables"] & - Database[PublicTableNameOrOptions["schema"]]["Views"])[TableName] extends { - Row: infer R - } - ? R - : never - : PublicTableNameOrOptions extends keyof (Database["public"]["Tables"] & - Database["public"]["Views"]) - ? (Database["public"]["Tables"] & - Database["public"]["Views"])[PublicTableNameOrOptions] extends { - Row: infer R - } - ? R - : never - : never - -export type TablesInsert< - PublicTableNameOrOptions extends - | keyof Database["public"]["Tables"] - | { schema: keyof Database }, - TableName extends PublicTableNameOrOptions extends { schema: keyof Database } - ? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"] - : never = never -> = PublicTableNameOrOptions extends { schema: keyof Database } - ? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends { - Insert: infer I - } - ? I - : never - : PublicTableNameOrOptions extends keyof Database["public"]["Tables"] - ? Database["public"]["Tables"][PublicTableNameOrOptions] extends { - Insert: infer I - } - ? I - : never - : never - -export type TablesUpdate< - PublicTableNameOrOptions extends - | keyof Database["public"]["Tables"] - | { schema: keyof Database }, - TableName extends PublicTableNameOrOptions extends { schema: keyof Database } - ? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"] - : never = never -> = PublicTableNameOrOptions extends { schema: keyof Database } - ? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends { - Update: infer U - } - ? U - : never - : PublicTableNameOrOptions extends keyof Database["public"]["Tables"] - ? Database["public"]["Tables"][PublicTableNameOrOptions] extends { - Update: infer U - } - ? U - : never - : never - -export type Enums< - PublicEnumNameOrOptions extends - | keyof Database["public"]["Enums"] - | { schema: keyof Database }, - EnumName extends PublicEnumNameOrOptions extends { schema: keyof Database } - ? keyof Database[PublicEnumNameOrOptions["schema"]]["Enums"] - : never = never -> = PublicEnumNameOrOptions extends { schema: keyof Database } - ? Database[PublicEnumNameOrOptions["schema"]]["Enums"][EnumName] - : PublicEnumNameOrOptions extends keyof Database["public"]["Enums"] - ? Database["public"]["Enums"][PublicEnumNameOrOptions] - : never +${schemas + .sort(({ name: a }, { name: b }) => a.localeCompare(b)) + .map((schema) => { + + const schemaName = schema.name; + const schemaNameWithQuotes = `"${schemaName}"` + const pascalCaseSchemaName = schemaName.replace(/^./, (match) => match.toUpperCase()); + + return ` + + export type ${pascalCaseSchemaName}Tables< + ${pascalCaseSchemaName}TableNameOrOptions extends + | keyof (Database[${schemaNameWithQuotes}]["Tables"] & Database[${schemaNameWithQuotes}]["Views"]) + | { schema: keyof Database }, + TableName extends ${pascalCaseSchemaName}TableNameOrOptions extends { schema: keyof Database } + ? keyof (Database[${pascalCaseSchemaName}TableNameOrOptions["schema"]]["Tables"] & + Database[${pascalCaseSchemaName}TableNameOrOptions["schema"]]["Views"]) + : never = never, + > = ${pascalCaseSchemaName}TableNameOrOptions extends { schema: keyof Database } + ? (Database[${pascalCaseSchemaName}TableNameOrOptions["schema"]]["Tables"] & + Database[${pascalCaseSchemaName}TableNameOrOptions["schema"]]["Views"])[TableName] extends { + Row: infer R + } + ? R + : never + : ${pascalCaseSchemaName}TableNameOrOptions extends keyof (Database[${schemaNameWithQuotes}]["Tables"] & + Database[${schemaNameWithQuotes}]["Views"]) + ? (Database[${schemaNameWithQuotes}]["Tables"] & + Database[${schemaNameWithQuotes}]["Views"])[${pascalCaseSchemaName}TableNameOrOptions] extends { + Row: infer R + } + ? R + : never + : never + + export type ${pascalCaseSchemaName}TablesInsert< + ${pascalCaseSchemaName}TableNameOrOptions extends + | keyof Database[${schemaNameWithQuotes}]["Tables"] + | { schema: keyof Database }, + TableName extends ${pascalCaseSchemaName}TableNameOrOptions extends { schema: keyof Database } + ? keyof Database[${pascalCaseSchemaName}TableNameOrOptions["schema"]]["Tables"] + : never = never, + > = ${pascalCaseSchemaName}TableNameOrOptions extends { schema: keyof Database } + ? Database[${pascalCaseSchemaName}TableNameOrOptions["schema"]]["Tables"][TableName] extends { + Insert: infer I + } + ? I + : never + : ${pascalCaseSchemaName}TableNameOrOptions extends keyof Database[${schemaNameWithQuotes}]["Tables"] + ? Database[${schemaNameWithQuotes}]["Tables"][${pascalCaseSchemaName}TableNameOrOptions] extends { + Insert: infer I + } + ? I + : never + : never + + export type ${pascalCaseSchemaName}TablesUpdate< + ${pascalCaseSchemaName}TableNameOrOptions extends + | keyof Database[${schemaNameWithQuotes}]["Tables"] + | { schema: keyof Database }, + TableName extends ${pascalCaseSchemaName}TableNameOrOptions extends { schema: keyof Database } + ? keyof Database[${pascalCaseSchemaName}TableNameOrOptions["schema"]]["Tables"] + : never = never, + > = ${pascalCaseSchemaName}TableNameOrOptions extends { schema: keyof Database } + ? Database[${pascalCaseSchemaName}TableNameOrOptions["schema"]]["Tables"][TableName] extends { + Update: infer U + } + ? U + : never + : ${pascalCaseSchemaName}TableNameOrOptions extends keyof Database[${schemaNameWithQuotes}]["Tables"] + ? Database[${schemaNameWithQuotes}]["Tables"][${pascalCaseSchemaName}TableNameOrOptions] extends { + Update: infer U + } + ? U + : never + : never + + export type ${pascalCaseSchemaName}Enums< + ${pascalCaseSchemaName}EnumNameOrOptions extends + | keyof Database[${schemaNameWithQuotes}]["Enums"] + | { schema: keyof Database }, + EnumName extends ${pascalCaseSchemaName}EnumNameOrOptions extends { schema: keyof Database } + ? keyof Database[${pascalCaseSchemaName}EnumNameOrOptions["schema"]]["Enums"] + : never = never, + > = ${pascalCaseSchemaName}EnumNameOrOptions extends { schema: keyof Database } + ? Database[${pascalCaseSchemaName}EnumNameOrOptions["schema"]]["Enums"][EnumName] + : ${pascalCaseSchemaName}EnumNameOrOptions extends keyof Database[${schemaNameWithQuotes}]["Enums"] + ? Database[${schemaNameWithQuotes}]["Enums"][${pascalCaseSchemaName}EnumNameOrOptions] + : never + + + `})} ` output = await prettier.format(output, { diff --git a/test/server/typegen.ts b/test/server/typegen.ts index ed88fa87..73d6e67a 100644 --- a/test/server/typegen.ts +++ b/test/server/typegen.ts @@ -365,7 +365,7 @@ test('typegen', async () => { } } - export type Tables< + export type PublicTables< PublicTableNameOrOptions extends | keyof (Database["public"]["Tables"] & Database["public"]["Views"]) | { schema: keyof Database }, @@ -390,7 +390,7 @@ test('typegen', async () => { : never : never - export type TablesInsert< + export type PublicTablesInsert< PublicTableNameOrOptions extends | keyof Database["public"]["Tables"] | { schema: keyof Database }, @@ -411,7 +411,7 @@ test('typegen', async () => { : never : never - export type TablesUpdate< + export type PublicTablesUpdate< PublicTableNameOrOptions extends | keyof Database["public"]["Tables"] | { schema: keyof Database }, @@ -432,7 +432,7 @@ test('typegen', async () => { : never : never - export type Enums< + export type PublicEnums< PublicEnumNameOrOptions extends | keyof Database["public"]["Enums"] | { schema: keyof Database }, @@ -829,7 +829,7 @@ test('typegen w/ one-to-one relationships', async () => { } } - export type Tables< + export type PublicTables< PublicTableNameOrOptions extends | keyof (Database["public"]["Tables"] & Database["public"]["Views"]) | { schema: keyof Database }, @@ -854,7 +854,7 @@ test('typegen w/ one-to-one relationships', async () => { : never : never - export type TablesInsert< + export type PublicTablesInsert< PublicTableNameOrOptions extends | keyof Database["public"]["Tables"] | { schema: keyof Database }, @@ -875,7 +875,7 @@ test('typegen w/ one-to-one relationships', async () => { : never : never - export type TablesUpdate< + export type PublicTablesUpdate< PublicTableNameOrOptions extends | keyof Database["public"]["Tables"] | { schema: keyof Database }, @@ -896,7 +896,7 @@ test('typegen w/ one-to-one relationships', async () => { : never : never - export type Enums< + export type PublicEnums< PublicEnumNameOrOptions extends | keyof Database["public"]["Enums"] | { schema: keyof Database },