import type { InferEnum, InferSelectModel, InferInsertModel, AnySchemas, AnyRelations, } from "../orm/index.ts" import type { PgUnionDatabase } from "./database.ts" import type { PgEnum, PgTable, TableConfig } from "./pgcore.ts" export type AnyTableSchema = PgTable export type AnyTableSchemas = Record type RemoveNeverValue = { [K in keyof T as T[K] extends never ? never : K]: T[K] } export type SchemaToData = T extends PgTable ? InferSelectModel : T extends PgEnum ? InferEnum : never export type SchemasToData = RemoveNeverValue<{ [K in keyof T]: SchemaToData }> export type TableSchemaToSelect = T extends PgTable ? InferSelectModel : never export type TableSchemasToSelect = RemoveNeverValue<{ [K in keyof T]: TableSchemaToSelect }> export type TableSchemaToInsert = T extends PgTable ? InferInsertModel : never export type TableSchemasToInsert = RemoveNeverValue<{ [K in keyof T]: TableSchemaToInsert }> export type TableSchemaToUpdate = T extends PgTable ? Partial> : never export type TableSchemasToUpdate = RemoveNeverValue<{ [K in keyof T]: TableSchemaToUpdate }> export type TableSchemaToUpsert = T extends PgTable ? InferInsertModel : never export type TableSchemasToUpsert = RemoveNeverValue<{ [K in keyof T]: TableSchemaToUpsert }> type TableSchemasToQuery< Schemas extends AnyTableSchemas, Relations extends AnyRelations, > = PgUnionDatabase["query"] type TableSchemasToFindConfig = { [K in keyof TableSchemasToQuery]: NonNullable< Parameters[K]["findMany"]>[0] > } export type TableSchemasToQueryColumns< Schemas extends AnyTableSchemas, Relations extends AnyRelations, > = { [K in keyof TableSchemasToFindConfig]: TableSchemasToFindConfig< Schemas, Relations >[K] extends { columns?: infer Columns } ? NonNullable : never } export type TableSchemasToQueryWhere< Schemas extends AnyTableSchemas, Relations extends AnyRelations, > = { [K in keyof TableSchemasToFindConfig]: TableSchemasToFindConfig< Schemas, Relations >[K] extends { where?: infer Where } ? NonNullable : never } export type TableSchemasToQueryWith< Schemas extends AnyTableSchemas, Relations extends AnyRelations, > = { [K in keyof TableSchemasToFindConfig]: TableSchemasToFindConfig< Schemas, Relations >[K] extends { with?: infer With } ? NonNullable : never } export type TableSchemasToQueryOrderBy< Schemas extends AnyTableSchemas, Relations extends AnyRelations, > = { [K in keyof TableSchemasToFindConfig]: TableSchemasToFindConfig< Schemas, Relations >[K] extends { orderBy?: infer OrderBy } ? NonNullable : never }