Skip to content

Commit 748d789

Browse files
committed
fix: Handle default value on missing query
1 parent 527d94e commit 748d789

2 files changed

Lines changed: 34 additions & 2 deletions

File tree

packages/nuqs/src/loader.test.ts

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { describe, expect, it } from 'vitest'
22
import { createLoader } from './loader'
3-
import { parseAsInteger } from './parsers'
3+
import { createParser, parseAsInteger } from './parsers'
44

55
describe('loader', () => {
66
describe('sync', () => {
@@ -89,6 +89,38 @@ describe('loader', () => {
8989
urlKey: 1
9090
})
9191
})
92+
it('supports default values', () => {
93+
const load = createLoader({
94+
a: parseAsInteger,
95+
b: parseAsInteger.withDefault(2)
96+
})
97+
const result = load('')
98+
expect(result).toEqual({
99+
a: null,
100+
b: 2
101+
})
102+
})
103+
it('throws errors in strict mode when the parser returns null on non-empty queries', () => {
104+
const load = createLoader({
105+
test: parseAsInteger
106+
})
107+
expect(() => load('?test=not-a-number', { strict: true })).toThrow(
108+
'[nuqs] Failed to parse query `not-a-number` for key `test` (got null)'
109+
)
110+
})
111+
it('throws errors in strict mode when the parser throws an error', () => {
112+
const load = createLoader({
113+
test: createParser({
114+
parse: (): any => {
115+
throw new Error('Boom')
116+
},
117+
serialize: () => ''
118+
})
119+
})
120+
expect(() => load('?test=will-throw', { strict: true })).toThrow(
121+
'[nuqs] Error while parsing query `will-throw` for key `test`: Error: Boom'
122+
)
123+
})
92124
})
93125

94126
describe('async', () => {

packages/nuqs/src/loader.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ export function createLoader<Parsers extends ParserMap>(
9191
const urlKey = urlKeys[key] ?? key
9292
const query = searchParams.get(urlKey)
9393
if (query === null) {
94-
result[key] = null
94+
result[key] = parser.defaultValue ?? null
9595
continue
9696
}
9797
try {

0 commit comments

Comments
 (0)