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

Commit aa223b4

Browse files
Bhavinsoedirgo
authored andcommitted
feat: support for custom prefer headers #243
1 parent eab227d commit aa223b4

File tree

2 files changed

+39
-2
lines changed

2 files changed

+39
-2
lines changed

src/lib/PostgrestQueryBuilder.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,9 @@ export default class PostgrestQueryBuilder<T> extends PostgrestBuilder<T> {
108108
if (count) {
109109
prefersHeaders.push(`count=${count}`)
110110
}
111-
111+
if (this.headers['Prefer']) {
112+
prefersHeaders.unshift(this.headers['Prefer'])
113+
}
112114
this.headers['Prefer'] = prefersHeaders.join(',')
113115

114116
if (Array.isArray(values)) {
@@ -157,7 +159,9 @@ export default class PostgrestQueryBuilder<T> extends PostgrestBuilder<T> {
157159
if (count) {
158160
prefersHeaders.push(`count=${count}`)
159161
}
160-
162+
if (this.headers['Prefer']) {
163+
prefersHeaders.unshift(this.headers['Prefer'])
164+
}
161165
this.headers['Prefer'] = prefersHeaders.join(',')
162166

163167
return new PostgrestFilterBuilder(this)
@@ -186,6 +190,9 @@ export default class PostgrestQueryBuilder<T> extends PostgrestBuilder<T> {
186190
if (count) {
187191
prefersHeaders.push(`count=${count}`)
188192
}
193+
if (this.headers['Prefer']) {
194+
prefersHeaders.unshift(this.headers['Prefer'])
195+
}
189196
this.headers['Prefer'] = prefersHeaders.join(',')
190197
return new PostgrestFilterBuilder(this)
191198
}
@@ -208,6 +215,9 @@ export default class PostgrestQueryBuilder<T> extends PostgrestBuilder<T> {
208215
if (count) {
209216
prefersHeaders.push(`count=${count}`)
210217
}
218+
if (this.headers['Prefer']) {
219+
prefersHeaders.unshift(this.headers['Prefer'])
220+
}
211221
this.headers['Prefer'] = prefersHeaders.join(',')
212222
return new PostgrestFilterBuilder(this)
213223
}

test/basic.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,33 @@ test('custom headers', async () => {
2323
expect((postgrest.from('users').select() as any).headers['apikey']).toEqual('foo')
2424
})
2525

26+
describe('custom prefer headers with ', () => {
27+
test('insert', async () => {
28+
const postgrest = new PostgrestClient(REST_URL, { headers: { Prefer: 'tx=rollback' } })
29+
const postgrestFilterBuilder = postgrest.from('users').insert({ username: 'dragarcia' }) as any
30+
expect(postgrestFilterBuilder.headers['Prefer']).toContain('tx=rollback')
31+
expect(postgrestFilterBuilder.headers['Prefer']).toContain('return=')
32+
})
33+
test('update', async () => {
34+
const postgrest = new PostgrestClient(REST_URL, { headers: { Prefer: 'tx=rollback' } })
35+
const postgrestFilterBuilder = postgrest.from('users').update({ username: 'dragarcia' }) as any
36+
expect(postgrestFilterBuilder.headers['Prefer']).toContain('tx=rollback')
37+
expect(postgrestFilterBuilder.headers['Prefer']).toContain('return=')
38+
})
39+
test('upsert', async () => {
40+
const postgrest = new PostgrestClient(REST_URL, { headers: { Prefer: 'tx=rollback' } })
41+
const postgrestFilterBuilder = postgrest.from('users').upsert({ username: 'dragarcia' }) as any
42+
expect(postgrestFilterBuilder.headers['Prefer']).toContain('tx=rollback')
43+
expect(postgrestFilterBuilder.headers['Prefer']).toContain('return=')
44+
})
45+
test('delete', async () => {
46+
const postgrest = new PostgrestClient(REST_URL, { headers: { Prefer: 'tx=rollback' } })
47+
const postgrestFilterBuilder = postgrest.from('users').delete() as any
48+
expect(postgrestFilterBuilder.headers['Prefer']).toContain('tx=rollback')
49+
expect(postgrestFilterBuilder.headers['Prefer']).toContain('return=')
50+
})
51+
})
52+
2653
test('auth', async () => {
2754
const postgrest = new PostgrestClient(REST_URL).auth('foo')
2855
expect((postgrest.from('users').select() as any).headers['Authorization']).toEqual('Bearer foo')

0 commit comments

Comments
 (0)