File tree 2 files changed +37
-2
lines changed
2 files changed +37
-2
lines changed Original file line number Diff line number Diff line change 1
1
import { describe , expect , test } from 'vitest'
2
- import { parseAsBoolean , parseAsInteger , parseAsString } from './parsers'
2
+ import {
3
+ parseAsBoolean ,
4
+ parseAsInteger ,
5
+ parseAsString ,
6
+ parseAsJson ,
7
+ parseAsArrayOf
8
+ } from './parsers'
3
9
import { createSerializer } from './serializer'
4
10
5
11
const parsers = {
@@ -62,4 +68,27 @@ describe('serializer', () => {
62
68
const result = serialize ( '?str=bar&int=-1' , { str : 'foo' , int : null } )
63
69
expect ( result ) . toBe ( '?str=foo' )
64
70
} )
71
+ test ( 'clears value when setting the default value when `clearOnDefault` is used' , ( ) => {
72
+ const serialize = createSerializer ( {
73
+ int : parseAsInteger . withOptions ( { clearOnDefault : true } ) . withDefault ( 0 ) ,
74
+ str : parseAsString . withOptions ( { clearOnDefault : true } ) . withDefault ( '' ) ,
75
+ bool : parseAsBoolean
76
+ . withOptions ( { clearOnDefault : true } )
77
+ . withDefault ( false ) ,
78
+ arr : parseAsArrayOf ( parseAsString )
79
+ . withOptions ( { clearOnDefault : true } )
80
+ . withDefault ( [ ] ) ,
81
+ json : parseAsJson ( )
82
+ . withOptions ( { clearOnDefault : true } )
83
+ . withDefault ( { foo : 'bar' } )
84
+ } )
85
+ const result = serialize ( {
86
+ int : 0 ,
87
+ str : '' ,
88
+ bool : false ,
89
+ arr : [ ] ,
90
+ json : { foo : 'bar' }
91
+ } )
92
+ expect ( result ) . toBe ( '' )
93
+ } )
65
94
} )
Original file line number Diff line number Diff line change @@ -41,7 +41,13 @@ export function createSerializer<
41
41
if ( ! parser || value === undefined ) {
42
42
continue
43
43
}
44
- if ( value === null ) {
44
+ const isMatchingDefault =
45
+ // @ts -expect-error
46
+ parser . defaultValue !== undefined &&
47
+ // @ts -expect-error
48
+ ( parser . eq ?? ( ( a , b ) => a === b ) ) ( value , parser . defaultValue )
49
+
50
+ if ( value === null || ( parser . clearOnDefault && isMatchingDefault ) ) {
45
51
search . delete ( key )
46
52
} else {
47
53
search . set ( key , parser . serialize ( value ) )
You can’t perform that action at this time.
0 commit comments