Skip to content

Commit 9f1399e

Browse files
committed
Fixed broken type inferrence of PgColumns with "strictNullChecks": false typescript option caused by updates in 1.0.0-beta.9
1 parent 150278e commit 9f1399e

File tree

6 files changed

+59
-61
lines changed

6 files changed

+59
-61
lines changed
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
- Tagged `DrizzleError`, `DrizzleQueryError`, `TransactionRollbackError` error variants for `Effect` drivers for usage with `Effect.catchTag('DrizzleQueryError', (e: TaggedDrizzleQueryError) => { ... })`
1+
- Tagged `DrizzleError`, `DrizzleQueryError`, `TransactionRollbackError` error variants for `Effect` drivers for usage with `Effect.catchTag('DrizzleQueryError', (e: TaggedDrizzleQueryError) => { ... })`
2+
- Fixed broken type inferrence of `PgColumn`s with `"strictNullChecks": false` typescript option caused by updates in `1.0.0-beta.9`

drizzle-orm/src/pg-core/columns/char.ts

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
import { entityKind } from '~/entity.ts';
22
import type { PgTable } from '~/pg-core/table.ts';
3-
import { getColumnNameAndConfig, type Writable } from '~/utils.ts';
3+
import { type Equal, getColumnNameAndConfig, type Writable } from '~/utils.ts';
44
import { PgColumn, PgColumnBuilder } from './common.ts';
55

6-
type PgCharBuilderConfig<TEnum extends [string, ...string[]] | undefined> = TEnum extends [string, ...string[]]
7-
? { dataType: 'string enum'; data: TEnum[number]; enumValues: TEnum; driverParam: string }
8-
: { dataType: 'string'; data: string; driverParam: string };
6+
type PgCharBuilderConfig<TEnum extends [string, ...string[]]> = Equal<TEnum, [string, ...string[]]> extends true
7+
? { dataType: 'string'; data: string; driverParam: string }
8+
: { dataType: 'string enum'; data: TEnum[number]; enumValues: TEnum; driverParam: string };
99

10-
export class PgCharBuilder<
11-
TEnum extends [string, ...string[]] | undefined = undefined,
12-
> extends PgColumnBuilder<
10+
export class PgCharBuilder<TEnum extends [string, ...string[]] = [string, ...string[]]> extends PgColumnBuilder<
1311
PgCharBuilderConfig<TEnum>,
1412
{ enumValues: TEnum; length: number; setLength: boolean }
1513
> {
@@ -31,8 +29,8 @@ export class PgCharBuilder<
3129
}
3230
}
3331

34-
export class PgChar<TEnum extends [string, ...string[]] | undefined = undefined>
35-
extends PgColumn<TEnum extends [string, ...string[]] ? 'string enum' : 'string'>
32+
export class PgChar<TEnum extends [string, ...string[]] = [string, ...string[]]>
33+
extends PgColumn<Equal<TEnum, [string, ...string[]]> extends true ? 'string' : 'string enum'>
3634
{
3735
static override readonly [entityKind]: string = 'PgChar';
3836

@@ -57,10 +55,10 @@ export interface PgCharConfig<
5755
length?: number;
5856
}
5957

60-
export function char(): PgCharBuilder<undefined>;
61-
export function char(name: string): PgCharBuilder<undefined>;
62-
export function char(config: { length?: number }): PgCharBuilder<undefined>;
63-
export function char(name: string, config: { length?: number }): PgCharBuilder<undefined>;
58+
export function char(): PgCharBuilder;
59+
export function char(name: string): PgCharBuilder;
60+
export function char(config: { length?: number }): PgCharBuilder;
61+
export function char(name: string, config: { length?: number }): PgCharBuilder;
6462
export function char<U extends string, T extends Readonly<[U, ...U[]]>>(
6563
config: PgCharConfig<T | Writable<T>> & { enum: T | Writable<T> },
6664
): PgCharBuilder<Writable<T>>;

drizzle-orm/src/pg-core/columns/common.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ export interface PgColumnBaseConfig<out TDataType extends ColumnType = ColumnTyp
7979
enumValues: string[] | undefined;
8080
generated: unknown;
8181
identity: undefined | 'always' | 'byDefault';
82-
insertType: unknown;
82+
// insertType: unknown;
8383
}
8484

8585
type WrapArray<T, N extends number> = N extends 1 ? T[]
@@ -130,10 +130,10 @@ export type ResolvePgColumnConfig<
130130
enumValues: T extends { enumValues: infer E extends string[] } ? E : undefined;
131131
identity: T['identity'] extends 'always' | 'byDefault' ? T['identity'] : undefined;
132132
generated: T['generated'] extends true ? true : undefined;
133-
insertType: T['generated'] extends true ? never
134-
: T['identity'] extends 'always' ? never
135-
: T['notNull'] extends true ? T['hasDefault'] extends true ? TData | undefined : TData
136-
: TData | null | undefined;
133+
// insertType: T['generated'] extends true ? never
134+
// : T['identity'] extends 'always' ? never
135+
// : T['notNull'] extends true ? T['hasDefault'] extends true ? TData | undefined : TData
136+
// : TData | null | undefined;
137137
} & {};
138138

139139
export interface AnyPgColumnBuilder {

drizzle-orm/src/pg-core/columns/text.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { entityKind } from '~/entity.ts';
22
import type { PgTable } from '~/pg-core/table.ts';
3-
import { getColumnNameAndConfig, type Writable } from '~/utils.ts';
3+
import { type Equal, getColumnNameAndConfig, type Writable } from '~/utils.ts';
44
import { PgColumn, PgColumnBuilder } from './common.ts';
55

6-
type PgTextBuilderConfig<TEnum extends [string, ...string[]] | undefined> = TEnum extends [string, ...string[]]
7-
? { dataType: 'string enum'; data: TEnum[number]; enumValues: TEnum; driverParam: string }
8-
: { dataType: 'string'; data: string; driverParam: string };
6+
type PgTextBuilderConfig<TEnum extends [string, ...string[]]> = Equal<TEnum, [string, ...string[]]> extends true
7+
? { dataType: 'string'; data: string; driverParam: string }
8+
: { dataType: 'string enum'; data: TEnum[number]; enumValues: TEnum; driverParam: string };
99

10-
export class PgTextBuilder<TEnum extends [string, ...string[]] | undefined = undefined> extends PgColumnBuilder<
10+
export class PgTextBuilder<TEnum extends [string, ...string[]] = [string, ...string[]]> extends PgColumnBuilder<
1111
PgTextBuilderConfig<TEnum>,
1212
{ enumValues: TEnum }
1313
> {
@@ -27,8 +27,8 @@ export class PgTextBuilder<TEnum extends [string, ...string[]] | undefined = und
2727
}
2828
}
2929

30-
export class PgText<TEnum extends [string, ...string[]] | undefined = undefined> extends PgColumn<
31-
TEnum extends [string, ...string[]] ? 'string enum' : 'string'
30+
export class PgText<TEnum extends [string, ...string[]] = [string, ...string[]]> extends PgColumn<
31+
Equal<TEnum, [string, ...string[]]> extends true ? 'string' : 'string enum'
3232
> {
3333
static override readonly [entityKind]: string = 'PgText';
3434
override readonly enumValues;
@@ -54,8 +54,8 @@ export interface PgTextConfig<
5454
}
5555

5656
// Original function overloads style
57-
export function text(): PgTextBuilder<undefined>;
58-
export function text(name: string): PgTextBuilder<undefined>;
57+
export function text(): PgTextBuilder;
58+
export function text(name: string): PgTextBuilder;
5959
export function text<U extends string, T extends Readonly<[U, ...U[]]>>(
6060
config: PgTextConfig<T | Writable<T>>,
6161
): PgTextBuilder<Writable<T>>;

drizzle-orm/src/pg-core/columns/varchar.ts

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
import { entityKind } from '~/entity.ts';
22
import type { PgTable } from '~/pg-core/table.ts';
3-
import { getColumnNameAndConfig, type Writable } from '~/utils.ts';
3+
import { type Equal, getColumnNameAndConfig, type Writable } from '~/utils.ts';
44
import { PgColumn, PgColumnBuilder } from './common.ts';
55

6-
type PgVarcharBuilderConfig<TEnum extends [string, ...string[]] | undefined> = TEnum extends [string, ...string[]]
7-
? { dataType: 'string enum'; data: TEnum[number]; enumValues: TEnum; driverParam: string }
8-
: { dataType: 'string'; data: string; driverParam: string };
6+
type PgVarcharBuilderConfig<TEnum extends [string, ...string[]]> = Equal<TEnum, [string, ...string[]]> extends true
7+
? { dataType: 'string'; data: string; driverParam: string }
8+
: { dataType: 'string enum'; data: TEnum[number]; enumValues: TEnum; driverParam: string };
99

10-
export class PgVarcharBuilder<
11-
TEnum extends [string, ...string[]] | undefined = undefined,
12-
> extends PgColumnBuilder<
10+
export class PgVarcharBuilder<TEnum extends [string, ...string[]] = [string, ...string[]]> extends PgColumnBuilder<
1311
PgVarcharBuilderConfig<TEnum>,
1412
{ length: number | undefined; enumValues: TEnum }
1513
> {
@@ -30,8 +28,8 @@ export class PgVarcharBuilder<
3028
}
3129
}
3230

33-
export class PgVarchar<TEnum extends [string, ...string[]] | undefined = undefined>
34-
extends PgColumn<TEnum extends [string, ...string[]] ? 'string enum' : 'string'>
31+
export class PgVarchar<TEnum extends [string, ...string[]] = [string, ...string[]]>
32+
extends PgColumn<Equal<TEnum, [string, ...string[]]> extends true ? 'string' : 'string enum'>
3533
{
3634
static override readonly [entityKind]: string = 'PgVarchar';
3735

@@ -54,10 +52,10 @@ export interface PgVarcharConfig<
5452
length?: number;
5553
}
5654

57-
export function varchar(): PgVarcharBuilder<undefined>;
58-
export function varchar(name: string): PgVarcharBuilder<undefined>;
59-
export function varchar(config: { length?: number }): PgVarcharBuilder<undefined>;
60-
export function varchar(name: string, config: { length?: number }): PgVarcharBuilder<undefined>;
55+
export function varchar(): PgVarcharBuilder;
56+
export function varchar(name: string): PgVarcharBuilder;
57+
export function varchar(config: { length?: number }): PgVarcharBuilder;
58+
export function varchar(name: string, config: { length?: number }): PgVarcharBuilder;
6159
export function varchar<U extends string, T extends Readonly<[U, ...U[]]>>(
6260
config: PgVarcharConfig<T | Writable<T>> & { enum: T | Writable<T> },
6361
): PgVarcharBuilder<Writable<T>>;

drizzle-orm/src/pg-core/table.ts

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { entityKind } from '~/entity.ts';
22
import type { InferModelFromColumns } from '~/table.ts';
33
import { Table, type TableConfig as TableConfigBase, type UpdateTableConfig } from '~/table.ts';
4-
import type { Simplify } from '~/utils.ts';
54
import type { CheckBuilder } from './checks.ts';
65
import { getPgColumnBuilders, type PgColumnsBuilders } from './columns/all.ts';
76
import type {
@@ -61,31 +60,33 @@ export class PgTable<out T extends TableConfig = TableConfig> extends Table<T> {
6160

6261
export type AnyPgTable<TPartial extends Partial<TableConfig> = {}> = PgTable<UpdateTableConfig<TableConfig, TPartial>>;
6362

64-
export type InfeInsertColumns<TColumns extends PgColumns> = Simplify<
65-
& {
66-
// Required keys: insertType does not include undefined or null
67-
[
68-
Key in keyof TColumns & string as TColumns[Key]['_']['insertType'] extends never ? never
69-
: undefined extends TColumns[Key]['_']['insertType'] ? never
70-
: Key
71-
]: TColumns[Key]['_']['insertType'];
72-
}
73-
& {
74-
// Optional keys: insertType includes undefined
75-
[
76-
Key in keyof TColumns & string as TColumns[Key]['_']['insertType'] extends never ? never
77-
: undefined extends TColumns[Key]['_']['insertType'] ? Key
78-
: never
79-
]?: TColumns[Key]['_']['insertType'];
80-
}
81-
>;
63+
// type InferInsertColumns<TColumns extends PgColumns> = Simplify<
64+
// & {
65+
// // Required keys: insertType does not include undefined or null
66+
// [
67+
// Key in keyof TColumns & string as TColumns[Key]['_']['insertType'] extends never ? never
68+
// // Check doesn't work properly with `"strictNullChecks": false`, to be reworked
69+
// : undefined extends TColumns[Key]['_']['insertType'] ? never
70+
// : Key
71+
// ]: TColumns[Key]['_']['insertType'];
72+
// }
73+
// & {
74+
// // Optional keys: insertType includes undefined
75+
// [
76+
// Key in keyof TColumns & string as TColumns[Key]['_']['insertType'] extends never ? never
77+
// // Check doesn't work properly with `"strictNullChecks": false`, to be reworked
78+
// : undefined extends TColumns[Key]['_']['insertType'] ? Key
79+
// : never
80+
// ]?: TColumns[Key]['_']['insertType'];
81+
// }
82+
// >;
8283

8384
export type PgTableWithColumns<T extends TableConfig> =
8485
& PgTable<T>
8586
& T['columns']
8687
& {
8788
readonly $inferSelect: InferModelFromColumns<T['columns'], 'select'>;
88-
readonly $inferInsert: InfeInsertColumns<T['columns']>;
89+
readonly $inferInsert: InferModelFromColumns<T['columns'], 'insert'>;
8990
}
9091
& {
9192
/** @deprecated use `pgTable.withRLS()` instead*/

0 commit comments

Comments
 (0)