@@ -12,7 +12,7 @@ import type { ColumnsSelection, Query, SQL, SQLWrapper } from '~/sql/sql.ts';
1212import type { Subquery } from '~/subquery.ts' ;
1313import { getTableName , Table } from '~/table.ts' ;
1414import { tracer } from '~/tracing.ts' ;
15- import { type NeonAuthToken , orderSelectedFields } from '~/utils.ts' ;
15+ import { type Assume , type NeonAuthToken , orderSelectedFields } from '~/utils.ts' ;
1616import type { PgAsyncPreparedQuery , PgAsyncSession } from '../async/session.ts' ;
1717import type { PgColumn } from '../columns/common.ts' ;
1818import { extractUsedTable } from '../utils.ts' ;
@@ -24,7 +24,8 @@ export type PgDeleteWithout<
2424 K extends keyof T & string ,
2525> = TDynamic extends true ? T
2626 : Omit <
27- PgDeleteBase <
27+ PgDeleteKind <
28+ T [ '_' ] [ 'hkt' ] ,
2829 T [ '_' ] [ 'table' ] ,
2930 T [ '_' ] [ 'queryResult' ] ,
3031 T [ '_' ] [ 'selectedFields' ] ,
@@ -40,7 +41,7 @@ export type PgDelete<
4041 TQueryResult extends PgQueryResultHKT = PgQueryResultHKT ,
4142 TSelectedFields extends ColumnsSelection | undefined = undefined ,
4243 TReturning extends Record < string , unknown > | undefined = Record < string , unknown > | undefined ,
43- > = PgDeleteBase < TTable , TQueryResult , TSelectedFields , TReturning , true , never > ;
44+ > = PgDeleteBase < PgDeleteHKT , TTable , TQueryResult , TSelectedFields , TReturning , true , never > ;
4445
4546export interface PgDeleteConfig {
4647 where ?: SQL | undefined ;
@@ -53,35 +54,39 @@ export interface PgDeleteConfig {
5354export type PgDeleteReturningAll <
5455 T extends AnyPgDeleteBase ,
5556 TDynamic extends boolean ,
56- > = PgDeleteWithout <
57- PgDeleteBase <
58- T [ '_' ] [ 'table' ] ,
59- T [ '_' ] [ 'queryResult' ] ,
60- T [ '_' ] [ 'table' ] [ '_' ] [ 'columns' ] ,
61- T [ '_' ] [ 'table' ] [ '$inferSelect' ] ,
57+ > = T extends any ? PgDeleteWithout <
58+ PgDeleteKind <
59+ T [ '_' ] [ 'hkt' ] ,
60+ T [ '_' ] [ 'table' ] ,
61+ T [ '_' ] [ 'queryResult' ] ,
62+ T [ '_' ] [ 'table' ] [ '_' ] [ 'columns' ] ,
63+ T [ '_' ] [ 'table' ] [ '$inferSelect' ] ,
64+ TDynamic ,
65+ T [ '_' ] [ 'excludedMethods' ]
66+ > ,
6267 TDynamic ,
63- T [ '_' ] [ 'excludedMethods' ]
64- > ,
65- TDynamic ,
66- 'returning'
67- > ;
68+ 'returning'
69+ >
70+ : never ;
6871
6972export type PgDeleteReturning <
7073 T extends AnyPgDeleteBase ,
7174 TDynamic extends boolean ,
7275 TSelectedFields extends SelectedFieldsFlat ,
73- > = PgDeleteWithout <
74- PgDeleteBase <
75- T [ '_' ] [ 'table' ] ,
76- T [ '_' ] [ 'queryResult' ] ,
77- TSelectedFields ,
78- SelectResultFields < TSelectedFields > ,
76+ > = T extends any ? PgDeleteWithout <
77+ PgDeleteKind <
78+ T [ '_' ] [ 'hkt' ] ,
79+ T [ '_' ] [ 'table' ] ,
80+ T [ '_' ] [ 'queryResult' ] ,
81+ TSelectedFields ,
82+ SelectResultFields < TSelectedFields > ,
83+ TDynamic ,
84+ T [ '_' ] [ 'excludedMethods' ]
85+ > ,
7986 TDynamic ,
80- T [ '_' ] [ 'excludedMethods' ]
81- > ,
82- TDynamic ,
83- 'returning'
84- > ;
87+ 'returning'
88+ >
89+ : never ;
8590
8691export type PgDeletePrepare < T extends AnyPgDeleteBase > = PgAsyncPreparedQuery <
8792 PreparedQueryConfig & {
@@ -90,16 +95,59 @@ export type PgDeletePrepare<T extends AnyPgDeleteBase> = PgAsyncPreparedQuery<
9095 }
9196> ;
9297
93- export type PgDeleteDynamic < T extends AnyPgDeleteBase > = PgDelete <
98+ export type PgDeleteDynamic < T extends AnyPgDeleteBase > = PgDeleteKind <
99+ T [ '_' ] [ 'hkt' ] ,
94100 T [ '_' ] [ 'table' ] ,
95101 T [ '_' ] [ 'queryResult' ] ,
96102 T [ '_' ] [ 'selectedFields' ] ,
97- T [ '_' ] [ 'returning' ]
103+ T [ '_' ] [ 'returning' ] ,
104+ true ,
105+ never
98106> ;
99107
100- export type AnyPgDeleteBase = PgDeleteBase < any , any , any , any , any , any > ;
108+ export type AnyPgDeleteBase = PgDeleteBase < any , any , any , any , any , any , any > ;
109+
110+ export interface PgDeleteHKTBase {
111+ table : unknown ;
112+ queryResult : unknown ;
113+ selectedFields : unknown ;
114+ returning : unknown ;
115+ dynamic : boolean ;
116+ excludedMethods : string ;
117+ _type : unknown ;
118+ }
119+
120+ export interface PgDeleteHKT extends PgDeleteHKTBase {
121+ _type : PgDeleteBase <
122+ PgDeleteHKT ,
123+ Assume < this[ 'table' ] , PgTable > ,
124+ Assume < this[ 'queryResult' ] , PgQueryResultHKT > ,
125+ Assume < this[ 'selectedFields' ] , ColumnsSelection | undefined > ,
126+ Assume < this[ 'returning' ] , Record < string , unknown > | undefined > ,
127+ this[ 'dynamic' ] ,
128+ this[ 'excludedMethods' ]
129+ > ;
130+ }
131+
132+ export type PgDeleteKind <
133+ T extends PgDeleteHKTBase ,
134+ TTable extends PgTable ,
135+ TQueryResult extends PgQueryResultHKT ,
136+ TSelectedFields extends ColumnsSelection | undefined = undefined ,
137+ TReturning extends Record < string , unknown > | undefined = undefined ,
138+ TDynamic extends boolean = false ,
139+ TExcludedMethods extends string = never ,
140+ > = ( T & {
141+ table : TTable ;
142+ queryResult : TQueryResult ;
143+ selectedFields : TSelectedFields ;
144+ returning : TReturning ;
145+ dynamic : TDynamic ;
146+ excludedMethods : TExcludedMethods ;
147+ } ) [ '_type' ] ;
101148
102149export interface PgDeleteBase <
150+ THKT extends PgDeleteHKTBase ,
103151 TTable extends PgTable ,
104152 TQueryResult extends PgQueryResultHKT ,
105153 TSelectedFields extends ColumnsSelection | undefined = undefined ,
@@ -117,6 +165,7 @@ export interface PgDeleteBase<
117165{
118166 readonly _ : {
119167 readonly dialect : 'pg' ;
168+ readonly hkt : THKT ;
120169 readonly table : TTable ;
121170 readonly queryResult : TQueryResult ;
122171 readonly selectedFields : TSelectedFields ;
@@ -128,6 +177,8 @@ export interface PgDeleteBase<
128177}
129178
130179export class PgDeleteBase <
180+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
181+ THKT extends PgDeleteHKTBase ,
131182 TTable extends PgTable ,
132183 TQueryResult extends PgQueryResultHKT ,
133184 TSelectedFields extends ColumnsSelection | undefined = undefined ,
0 commit comments