UNPKG

@handfish/drizzle-effect

Version:

Generate `effect` schemas from Drizzle ORM schemas

46 lines (45 loc) 4.17 kB
import * as Drizzle from 'drizzle-orm'; import { Schema } from 'effect'; type Columns<TTable extends Drizzle.Table> = TTable['_']['columns']; type ColumnSchema<TColumn extends Drizzle.Column> = TColumn['dataType'] extends 'custom' ? Schema.Schema<any> : TColumn['dataType'] extends 'json' ? Schema.Schema<JsonValue> : TColumn extends { enumValues: [string, ...string[]]; } ? Drizzle.Equal<TColumn['enumValues'], [string, ...string[]]> extends true ? Schema.Schema<string> : Schema.Schema<TColumn['enumValues'][number]> : TColumn['dataType'] extends 'bigint' ? Schema.Schema<bigint, bigint> : TColumn['dataType'] extends 'number' ? TColumn['columnType'] extends `PgBigInt${number}` ? Schema.Schema<bigint, number> : Schema.Schema<number, number> : TColumn['columnType'] extends 'PgNumeric' ? Schema.Schema<number, string> : TColumn['columnType'] extends 'PgUUID' ? Schema.Schema<string> : TColumn['columnType'] extends 'PgDate' ? TColumn extends { mode: 'string'; } ? Schema.Schema<string, string> : Schema.Schema<Date, string> : TColumn['columnType'] extends 'PgTimestamp' ? TColumn extends { mode: 'string'; } ? Schema.Schema<string, string> : Schema.Schema<Date, string> : TColumn['dataType'] extends 'string' ? Schema.Schema<string, string> : TColumn['dataType'] extends 'boolean' ? Schema.Schema<boolean> : TColumn['dataType'] extends 'date' ? TColumn extends { mode: 'string'; } ? Schema.Schema<string> : Schema.Schema<Date> : Schema.Schema<any>; type JsonPrimitive = string | number | boolean | null; type JsonObject = { readonly [key: string]: unknown; }; type JsonArray = readonly unknown[]; type JsonValue = JsonPrimitive | JsonObject | JsonArray; type StrictJsonObject = { readonly [key: string]: StrictJsonValue; }; type StrictJsonArray = readonly StrictJsonValue[]; type StrictJsonValue = JsonPrimitive | StrictJsonObject | StrictJsonArray; export declare const JsonValue: Schema.Union<[typeof Schema.String, typeof Schema.Number, typeof Schema.Boolean, typeof Schema.Null, Schema.Record$<typeof Schema.String, typeof Schema.Unknown>, Schema.Array$<typeof Schema.Unknown>]>; export declare const StrictJsonValue: Schema.suspend<StrictJsonValue, StrictJsonValue, never>; type RefineFunction<TTable extends Drizzle.Table> = (schemas: { [K in keyof Columns<TTable>]: Schema.Schema<any>; }) => Schema.Schema<any>; type RefineArg<TTable extends Drizzle.Table> = Schema.Schema<any> | RefineFunction<TTable>; type TableRefine<TTable extends Drizzle.Table> = { [K in keyof Columns<TTable>]?: RefineArg<TTable>; }; type InsertProperty<TColumn extends Drizzle.Column, TKey extends string> = TColumn['_']['notNull'] extends false ? Schema.PropertySignature<'?:', Schema.Schema.Type<ColumnSchema<TColumn>> | null | undefined, TKey, '?:', Schema.Schema.Encoded<ColumnSchema<TColumn>> | null | undefined, false, never> : TColumn['_']['hasDefault'] extends true ? Schema.PropertySignature<'?:', Schema.Schema.Type<ColumnSchema<TColumn>> | undefined, TKey, '?:', Schema.Schema.Encoded<ColumnSchema<TColumn>> | undefined, true, never> : ColumnSchema<TColumn>; type SelectProperty<TColumn extends Drizzle.Column> = TColumn['_']['notNull'] extends false ? Schema.Schema<Schema.Schema.Type<ColumnSchema<TColumn>> | null> : ColumnSchema<TColumn>; type InsertColumnSchemas<TTable extends Drizzle.Table> = { [K in keyof Columns<TTable>]: InsertProperty<Columns<TTable>[K], K & string>; }; type SelectColumnSchemas<TTable extends Drizzle.Table> = { [K in keyof Columns<TTable>]: SelectProperty<Columns<TTable>[K]>; }; type BuildInsertSchema<TTable extends Drizzle.Table, TRefine = {}> = Schema.Struct<InsertColumnSchemas<TTable> & TRefine>; type BuildSelectSchema<TTable extends Drizzle.Table, TRefine = {}> = Schema.Struct<SelectColumnSchemas<TTable> & TRefine>; export declare function createInsertSchema<TTable extends Drizzle.Table, TRefine extends TableRefine<TTable> = {}>(table: TTable, refine?: TRefine): BuildInsertSchema<TTable, TRefine>; export declare function createSelectSchema<TTable extends Drizzle.Table, TRefine extends TableRefine<TTable> = {}>(table: TTable, refine?: TRefine): BuildSelectSchema<TTable, TRefine>; export {};