import { type ColumnBaseConfig, type ColumnBuilderBaseConfig, type ColumnBuilderRuntimeConfig, type MakeColumnConfig, entityKind, } from "drizzle-orm"; import { type AnyPgTable, PgColumn, PgColumnBuilder, } from "drizzle-orm/pg-core"; export type PgHexBuilderInitial = PgHexBuilder<{ name: TName; dataType: "string"; columnType: "PgHex"; data: `0x${string}`; driverParam: string; enumValues: undefined; generated: undefined; }>; export class PgHexBuilder< T extends ColumnBuilderBaseConfig<"string", "PgHex">, > extends PgColumnBuilder { static readonly [entityKind]: string = "PgHexBuilder"; constructor(name: T["name"]) { super(name, "string", "PgHex"); } /** @internal */ // @ts-ignore override build( table: AnyPgTable<{ name: TTableName }>, ): PgHex> { return new PgHex>( table, this.config as ColumnBuilderRuntimeConfig, ); } } export class PgHex< T extends ColumnBaseConfig<"string", "PgHex">, > extends PgColumn { static readonly [entityKind]: string = "PgHex"; getSQLType(): string { return "text"; } override mapToDriverValue(value: `0x${string}`) { if (value.length % 2 === 0) return value.toLowerCase() as `0x${string}`; return `0x0${value.slice(2)}`.toLowerCase() as `0x${string}`; } }