@@ -1118,6 +1118,77 @@ test('init hook deletion over merged defaults and input URL', async t => {
11181118 t . false ( url . searchParams . has ( 'foo' ) ) ;
11191119} ) ;
11201120
1121+ test ( 'init hook preserves merged URLSearchParams deletions' , async t => {
1122+ const server = await createHttpTestServer ( t ) ;
1123+
1124+ server . get ( '/' , ( request , response ) => {
1125+ response . end ( request . url ) ;
1126+ } ) ;
1127+
1128+ const api = ky . create ( { searchParams : new URLSearchParams ( { foo : '1' } ) } ) . extend ( {
1129+ searchParams : { foo : undefined } ,
1130+ hooks : {
1131+ init : [
1132+ ( ) => { } , // eslint-disable-line @typescript-eslint/no-empty-function
1133+ ] ,
1134+ } ,
1135+ } ) ;
1136+
1137+ const response = await api . get ( `${ server . url } ?foo=from-url&bar=2` ) ;
1138+ const url = new URL ( await response . text ( ) , server . url ) ;
1139+
1140+ t . false ( url . searchParams . has ( 'foo' ) ) ;
1141+ t . is ( url . searchParams . get ( 'bar' ) , '2' ) ;
1142+ } ) ;
1143+
1144+ test ( 'init hook preserves merged plain object deletions' , async t => {
1145+ const server = await createHttpTestServer ( t ) ;
1146+
1147+ server . get ( '/' , ( request , response ) => {
1148+ response . end ( request . url ) ;
1149+ } ) ;
1150+
1151+ const api = ky . create ( { searchParams : { foo : '1' } } ) . extend ( {
1152+ searchParams : { foo : undefined } ,
1153+ hooks : {
1154+ init : [
1155+ ( ) => { } , // eslint-disable-line @typescript-eslint/no-empty-function
1156+ ] ,
1157+ } ,
1158+ } ) ;
1159+
1160+ const response = await api . get ( `${ server . url } ?foo=from-url&bar=2` ) ;
1161+ const url = new URL ( await response . text ( ) , server . url ) ;
1162+
1163+ t . false ( url . searchParams . has ( 'foo' ) ) ;
1164+ t . is ( url . searchParams . get ( 'bar' ) , '2' ) ;
1165+ } ) ;
1166+
1167+ test ( 'init hook can re-add deleted URLSearchParams keys in place' , async t => {
1168+ const server = await createHttpTestServer ( t ) ;
1169+
1170+ server . get ( '/' , ( request , response ) => {
1171+ response . end ( request . url ) ;
1172+ } ) ;
1173+
1174+ const api = ky . create ( { searchParams : new URLSearchParams ( { foo : '1' } ) } ) . extend ( {
1175+ searchParams : { foo : undefined } ,
1176+ hooks : {
1177+ init : [
1178+ options => {
1179+ ( options . searchParams as URLSearchParams ) . append ( 'foo' , '2' ) ;
1180+ } ,
1181+ ] ,
1182+ } ,
1183+ } ) ;
1184+
1185+ const response = await api . get ( `${ server . url } ?foo=from-url&bar=2` ) ;
1186+ const url = new URL ( await response . text ( ) , server . url ) ;
1187+
1188+ t . deepEqual ( url . searchParams . getAll ( 'foo' ) , [ '2' ] ) ;
1189+ t . is ( url . searchParams . get ( 'bar' ) , '2' ) ;
1190+ } ) ;
1191+
11211192test ( 're-adding a key after an earlier deletion across merge layers' , async t => {
11221193 const server = await createHttpTestServer ( t ) ;
11231194
0 commit comments