Skip to content

Commit f08d063

Browse files
authored
Merge branch 'next' into fix-pkg-pr-new
2 parents df7d250 + 0e7395e commit f08d063

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

Diff for: packages/nuqs/src/serializer.test.ts

+11-1
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,21 @@ describe('serializer', () => {
7070
const result = serialize(url, { str: 'foo' })
7171
expect(result).toBe('https://example.com/path?bar=egg&str=foo')
7272
})
73-
test('null deletes from base', () => {
73+
test('null value deletes from base', () => {
7474
const serialize = createSerializer(parsers)
7575
const result = serialize('?str=bar&int=-1', { str: 'foo', int: null })
7676
expect(result).toBe('?str=foo')
7777
})
78+
test('null deletes all from base', () => {
79+
const serialize = createSerializer(parsers)
80+
const result = serialize('?str=bar&int=-1', null)
81+
expect(result).toBe('')
82+
})
83+
test('null keeps search params not managed by the serializer', () => {
84+
const serialize = createSerializer(parsers)
85+
const result = serialize('?str=foo&external=kept', null)
86+
expect(result).toBe('?external=kept')
87+
})
7888
test('clears value when setting the default value when `clearOnDefault` is used', () => {
7989
const serialize = createSerializer({
8090
int: parseAsInteger.withOptions({ clearOnDefault: true }).withDefault(0),

Diff for: packages/nuqs/src/serializer.ts

+9-3
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,21 @@ export function createSerializer<
2727
* - another value is given for an existing key, in which case the
2828
* search param will be updated
2929
*/
30-
function serialize(base: Base, values: Values<Parsers>): string
30+
function serialize(base: Base, values: Values<Parsers> | null): string
3131
function serialize(
32-
baseOrValues: Base | Values<Parsers>,
33-
values: Values<Parsers> = {}
32+
baseOrValues: Base | Values<Parsers> | null,
33+
values: Values<Parsers> | null = {}
3434
) {
3535
const [base, search] = isBase(baseOrValues)
3636
? splitBase(baseOrValues)
3737
: ['', new URLSearchParams()]
3838
const vals = isBase(baseOrValues) ? values : baseOrValues
39+
if (vals === null) {
40+
for (const key in parsers) {
41+
search.delete(key)
42+
}
43+
return base + renderQueryString(search)
44+
}
3945
for (const key in parsers) {
4046
const parser = parsers[key]
4147
const value = vals[key]

0 commit comments

Comments
 (0)