Skip to content
This repository was archived by the owner on Oct 9, 2025. It is now read-only.

Commit 381319f

Browse files
committed
feat(types): fallback columns to string & values to unknown
1 parent 13eef66 commit 381319f

File tree

2 files changed

+84
-29
lines changed

2 files changed

+84
-29
lines changed

src/PostgrestFilterBuilder.ts

Lines changed: 75 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@ export default class PostgrestFilterBuilder<
4343
column: ColumnName,
4444
operator: FilterOperator,
4545
value: Table[ColumnName]
46-
): this {
46+
): this
47+
not(column: string, operator: string, value: unknown): this
48+
not(column: string, operator: string, value: unknown): this {
4749
this.url.searchParams.append(column, `not.${operator}.${value}`)
4850
return this
4951
}
@@ -55,7 +57,7 @@ export default class PostgrestFilterBuilder<
5557
* @param foreignTable The foreign table to use (if `column` is a foreign column).
5658
*/
5759
or(filters: string, { foreignTable }: { foreignTable?: string } = {}): this {
58-
const key = typeof foreignTable === 'undefined' ? 'or' : `${foreignTable}.or`
60+
const key = foreignTable ? `${foreignTable}.or` : 'or'
5961
this.url.searchParams.append(key, `(${filters})`)
6062
return this
6163
}
@@ -67,7 +69,9 @@ export default class PostgrestFilterBuilder<
6769
* @param column The column to filter on.
6870
* @param value The value to filter with.
6971
*/
70-
eq<ColumnName extends string & keyof Table>(column: ColumnName, value: Table[ColumnName]): this {
72+
eq<ColumnName extends string & keyof Table>(column: ColumnName, value: Table[ColumnName]): this
73+
eq(column: string, value: unknown): this
74+
eq(column: string, value: unknown): this {
7175
this.url.searchParams.append(column, `eq.${value}`)
7276
return this
7377
}
@@ -79,7 +83,9 @@ export default class PostgrestFilterBuilder<
7983
* @param column The column to filter on.
8084
* @param value The value to filter with.
8185
*/
82-
neq<ColumnName extends string & keyof Table>(column: ColumnName, value: Table[ColumnName]): this {
86+
neq<ColumnName extends string & keyof Table>(column: ColumnName, value: Table[ColumnName]): this
87+
neq(column: string, value: unknown): this
88+
neq(column: string, value: unknown): this {
8389
this.url.searchParams.append(column, `neq.${value}`)
8490
return this
8591
}
@@ -91,7 +97,9 @@ export default class PostgrestFilterBuilder<
9197
* @param column The column to filter on.
9298
* @param value The value to filter with.
9399
*/
94-
gt<ColumnName extends string & keyof Table>(column: ColumnName, value: Table[ColumnName]): this {
100+
gt<ColumnName extends string & keyof Table>(column: ColumnName, value: Table[ColumnName]): this
101+
gt(column: string, value: unknown): this
102+
gt(column: string, value: unknown): this {
95103
this.url.searchParams.append(column, `gt.${value}`)
96104
return this
97105
}
@@ -103,7 +111,9 @@ export default class PostgrestFilterBuilder<
103111
* @param column The column to filter on.
104112
* @param value The value to filter with.
105113
*/
106-
gte<ColumnName extends string & keyof Table>(column: ColumnName, value: Table[ColumnName]): this {
114+
gte<ColumnName extends string & keyof Table>(column: ColumnName, value: Table[ColumnName]): this
115+
gte(column: string, value: unknown): this
116+
gte(column: string, value: unknown): this {
107117
this.url.searchParams.append(column, `gte.${value}`)
108118
return this
109119
}
@@ -115,7 +125,9 @@ export default class PostgrestFilterBuilder<
115125
* @param column The column to filter on.
116126
* @param value The value to filter with.
117127
*/
118-
lt<ColumnName extends string & keyof Table>(column: ColumnName, value: Table[ColumnName]): this {
128+
lt<ColumnName extends string & keyof Table>(column: ColumnName, value: Table[ColumnName]): this
129+
lt(column: string, value: unknown): this
130+
lt(column: string, value: unknown): this {
119131
this.url.searchParams.append(column, `lt.${value}`)
120132
return this
121133
}
@@ -127,7 +139,9 @@ export default class PostgrestFilterBuilder<
127139
* @param column The column to filter on.
128140
* @param value The value to filter with.
129141
*/
130-
lte<ColumnName extends string & keyof Table>(column: ColumnName, value: Table[ColumnName]): this {
142+
lte<ColumnName extends string & keyof Table>(column: ColumnName, value: Table[ColumnName]): this
143+
lte(column: string, value: unknown): this
144+
lte(column: string, value: unknown): this {
131145
this.url.searchParams.append(column, `lte.${value}`)
132146
return this
133147
}
@@ -139,7 +153,9 @@ export default class PostgrestFilterBuilder<
139153
* @param column The column to filter on.
140154
* @param pattern The pattern to filter with.
141155
*/
142-
like<ColumnName extends string & keyof Table>(column: ColumnName, pattern: string): this {
156+
like<ColumnName extends string & keyof Table>(column: ColumnName, pattern: string): this
157+
like(column: string, pattern: string): this
158+
like(column: string, pattern: string): this {
143159
this.url.searchParams.append(column, `like.${pattern}`)
144160
return this
145161
}
@@ -151,7 +167,9 @@ export default class PostgrestFilterBuilder<
151167
* @param column The column to filter on.
152168
* @param pattern The pattern to filter with.
153169
*/
154-
ilike<ColumnName extends string & keyof Table>(column: ColumnName, pattern: string): this {
170+
ilike<ColumnName extends string & keyof Table>(column: ColumnName, pattern: string): this
171+
ilike(column: string, pattern: string): this
172+
ilike(column: string, pattern: string): this {
155173
this.url.searchParams.append(column, `ilike.${pattern}`)
156174
return this
157175
}
@@ -166,7 +184,9 @@ export default class PostgrestFilterBuilder<
166184
is<ColumnName extends string & keyof Table>(
167185
column: ColumnName,
168186
value: Table[ColumnName] & (boolean | null)
169-
): this {
187+
): this
188+
is(column: string, value: boolean | null): this
189+
is(column: string, value: boolean | null): this {
170190
this.url.searchParams.append(column, `is.${value}`)
171191
return this
172192
}
@@ -178,10 +198,9 @@ export default class PostgrestFilterBuilder<
178198
* @param column The column to filter on.
179199
* @param values The values to filter with.
180200
*/
181-
in<ColumnName extends string & keyof Table>(
182-
column: ColumnName,
183-
values: Table[ColumnName][]
184-
): this {
201+
in<ColumnName extends string & keyof Table>(column: ColumnName, values: Table[ColumnName][]): this
202+
in(column: string, values: unknown[]): this
203+
in(column: string, values: unknown[]): this {
185204
const cleanedValues = values
186205
.map((s) => {
187206
// handle postgrest reserved characters
@@ -204,7 +223,9 @@ export default class PostgrestFilterBuilder<
204223
contains<ColumnName extends string & keyof Table>(
205224
column: ColumnName,
206225
value: string | Table[ColumnName][] | Record<string, unknown>
207-
): this {
226+
): this
227+
contains(column: string, value: string | unknown[] | Record<string, unknown>): this
228+
contains(column: string, value: string | unknown[] | Record<string, unknown>): this {
208229
if (typeof value === 'string') {
209230
// range types can be inclusive '[', ']' or exclusive '(', ')' so just
210231
// keep it simple and accept a string
@@ -229,7 +250,9 @@ export default class PostgrestFilterBuilder<
229250
containedBy<ColumnName extends string & keyof Table>(
230251
column: ColumnName,
231252
value: string | Table[ColumnName][] | Record<string, unknown>
232-
): this {
253+
): this
254+
containedBy(column: string, value: string | unknown[] | Record<string, unknown>): this
255+
containedBy(column: string, value: string | unknown[] | Record<string, unknown>): this {
233256
if (typeof value === 'string') {
234257
// range
235258
this.url.searchParams.append(column, `cd.${value}`)
@@ -250,7 +273,9 @@ export default class PostgrestFilterBuilder<
250273
* @param column The column to filter on.
251274
* @param range The range to filter with.
252275
*/
253-
rangeLt<ColumnName extends string & keyof Table>(column: ColumnName, range: string): this {
276+
rangeLt<ColumnName extends string & keyof Table>(column: ColumnName, range: string): this
277+
rangeLt(column: string, range: string): this
278+
rangeLt(column: string, range: string): this {
254279
this.url.searchParams.append(column, `sl.${range}`)
255280
return this
256281
}
@@ -262,7 +287,9 @@ export default class PostgrestFilterBuilder<
262287
* @param column The column to filter on.
263288
* @param range The range to filter with.
264289
*/
265-
rangeGt<ColumnName extends string & keyof Table>(column: ColumnName, range: string): this {
290+
rangeGt<ColumnName extends string & keyof Table>(column: ColumnName, range: string): this
291+
rangeGt(column: string, range: string): this
292+
rangeGt(column: string, range: string): this {
266293
this.url.searchParams.append(column, `sr.${range}`)
267294
return this
268295
}
@@ -274,7 +301,9 @@ export default class PostgrestFilterBuilder<
274301
* @param column The column to filter on.
275302
* @param range The range to filter with.
276303
*/
277-
rangeGte<ColumnName extends string & keyof Table>(column: ColumnName, range: string): this {
304+
rangeGte<ColumnName extends string & keyof Table>(column: ColumnName, range: string): this
305+
rangeGte(column: string, range: string): this
306+
rangeGte(column: string, range: string): this {
278307
this.url.searchParams.append(column, `nxl.${range}`)
279308
return this
280309
}
@@ -286,7 +315,9 @@ export default class PostgrestFilterBuilder<
286315
* @param column The column to filter on.
287316
* @param range The range to filter with.
288317
*/
289-
rangeLte<ColumnName extends string & keyof Table>(column: ColumnName, range: string): this {
318+
rangeLte<ColumnName extends string & keyof Table>(column: ColumnName, range: string): this
319+
rangeLte(column: string, range: string): this
320+
rangeLte(column: string, range: string): this {
290321
this.url.searchParams.append(column, `nxr.${range}`)
291322
return this
292323
}
@@ -298,7 +329,9 @@ export default class PostgrestFilterBuilder<
298329
* @param column The column to filter on.
299330
* @param range The range to filter with.
300331
*/
301-
rangeAdjacent<ColumnName extends string & keyof Table>(column: ColumnName, range: string): this {
332+
rangeAdjacent<ColumnName extends string & keyof Table>(column: ColumnName, range: string): this
333+
rangeAdjacent(column: string, range: string): this
334+
rangeAdjacent(column: string, range: string): this {
302335
this.url.searchParams.append(column, `adj.${range}`)
303336
return this
304337
}
@@ -313,7 +346,9 @@ export default class PostgrestFilterBuilder<
313346
overlaps<ColumnName extends string & keyof Table>(
314347
column: ColumnName,
315348
value: string | Table[ColumnName][]
316-
): this {
349+
): this
350+
overlaps(column: string, value: string | unknown[]): this
351+
overlaps(column: string, value: string | unknown[]): this {
317352
if (typeof value === 'string') {
318353
// range
319354
this.url.searchParams.append(column, `ov.${value}`)
@@ -336,6 +371,16 @@ export default class PostgrestFilterBuilder<
336371
textSearch<ColumnName extends string & keyof Table>(
337372
column: ColumnName,
338373
query: string,
374+
options?: { config?: string; type?: 'plain' | 'phrase' | 'websearch' }
375+
): this
376+
textSearch(
377+
column: string,
378+
query: string,
379+
options?: { config?: string; type?: 'plain' | 'phrase' | 'websearch' }
380+
): this
381+
textSearch(
382+
column: string,
383+
query: string,
339384
{ config, type }: { config?: string; type?: 'plain' | 'phrase' | 'websearch' } = {}
340385
): this {
341386
let typePart = ''
@@ -361,8 +406,10 @@ export default class PostgrestFilterBuilder<
361406
filter<ColumnName extends string & keyof Table>(
362407
column: ColumnName,
363408
operator: `${'' | 'not.'}${FilterOperator}`,
364-
value: any
365-
): this {
409+
value: unknown
410+
): this
411+
filter(column: string, operator: string, value: unknown): this
412+
filter(column: string, operator: string, value: unknown): this {
366413
this.url.searchParams.append(column, `${operator}.${value}`)
367414
return this
368415
}
@@ -373,9 +420,9 @@ export default class PostgrestFilterBuilder<
373420
* @param query The object to filter with, with column names as keys mapped
374421
* to their filter values.
375422
*/
376-
match<ColumnName extends string & keyof Table>(
377-
query: Record<ColumnName, Table[ColumnName]>
378-
): this {
423+
match<ColumnName extends string & keyof Table>(query: Record<ColumnName, Table[ColumnName]>): this
424+
match(query: Record<string, unknown>): this
425+
match(query: Record<string, unknown>): this {
379426
Object.entries(query).forEach(([column, value]) => {
380427
this.url.searchParams.append(column, `eq.${value}`)
381428
})

src/PostgrestTransformBuilder.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,21 @@ export default class PostgrestTransformBuilder<
5050
*/
5151
order<ColumnName extends string & keyof Table>(
5252
column: ColumnName,
53+
options?: { ascending?: boolean; nullsFirst?: boolean; foreignTable?: undefined }
54+
): this
55+
order(
56+
column: string,
57+
options?: { ascending?: boolean; nullsFirst?: boolean; foreignTable: string }
58+
): this
59+
order(
60+
column: string,
5361
{
5462
ascending = true,
5563
nullsFirst = true,
5664
foreignTable,
5765
}: { ascending?: boolean; nullsFirst?: boolean; foreignTable?: string } = {}
5866
): this {
59-
const key = typeof foreignTable === 'undefined' ? 'order' : `${foreignTable}.order`
67+
const key = foreignTable ? `${foreignTable}.order` : 'order'
6068
const existingOrder = this.url.searchParams.get(key)
6169

6270
this.url.searchParams.set(

0 commit comments

Comments
 (0)