1
1
import { source , set } from '../internal/client/reactivity/sources.js' ;
2
2
import { get } from '../internal/client/runtime.js' ;
3
3
4
- const UPDATE = Symbol ( 'UPDATE' ) ;
5
- const VERSION = Symbol ( 'version' ) ;
4
+ const REPLACE = Symbol ( ) ;
6
5
7
6
export class ReactiveURL extends URL {
8
7
#url = {
@@ -16,7 +15,7 @@ export class ReactiveURL extends URL {
16
15
hash : source ( super . hash )
17
16
} ;
18
17
19
- #searchParams = new ReactiveURLSearchParams ( super . searchParams , this . #url . search ) ;
18
+ #searchParams = new ReactiveURLSearchParams ( super . searchParams ) ;
20
19
21
20
get hash ( ) {
22
21
return get ( this . #url. hash ) ;
@@ -70,7 +69,7 @@ export class ReactiveURL extends URL {
70
69
set ( this . #url. pathname , super . pathname ) ;
71
70
set ( this . #url. search , super . search ) ;
72
71
set ( this . #url. hash , super . hash ) ;
73
- this . #searchParams[ UPDATE ] ( super . searchParams ) ;
72
+ this . #searchParams[ REPLACE ] ( super . searchParams ) ;
74
73
}
75
74
76
75
get password ( ) {
@@ -110,15 +109,13 @@ export class ReactiveURL extends URL {
110
109
}
111
110
112
111
get search ( ) {
113
- get ( this . #url. search ) ;
114
- get ( this . #searchParams[ VERSION ] ) ;
115
- return super . search ;
112
+ const search = this . #searchParams. toString ( ) ;
113
+ return search ? `?${ search } ` : '' ;
116
114
}
117
115
118
116
set search ( value ) {
119
117
super . search = value ;
120
- set ( this . #url. search , super . search ) ;
121
- this . #searchParams[ UPDATE ] ( super . searchParams ) ;
118
+ this . #searchParams[ REPLACE ] ( super . searchParams ) ;
122
119
}
123
120
124
121
get username ( ) {
@@ -151,36 +148,25 @@ export class ReactiveURL extends URL {
151
148
}
152
149
153
150
export class ReactiveURLSearchParams extends URLSearchParams {
154
- #url_search_params;
155
- #search;
156
151
#version = source ( 0 ) ;
157
- [ VERSION ] = this . #version;
158
152
159
153
#increment_version( ) {
160
154
set ( this . #version, this . #version. v + 1 ) ;
161
155
}
162
156
163
- #update_search( ) {
164
- set ( this . #search, '?' + this . #url_search_params. toString ( ) ) ;
165
- }
166
-
167
157
/**
168
- *
169
- * @param {URLSearchParams } value
158
+ * @param {URLSearchParams } params
170
159
*/
171
- [ UPDATE ] ( value ) {
172
- this . #url_search_params = value ;
173
- this . #increment_version ( ) ;
174
- }
160
+ [ REPLACE ] ( params ) {
161
+ for ( const key of [ ... super . keys ( ) ] ) {
162
+ super . delete ( key ) ;
163
+ }
175
164
176
- /**
177
- * @param {URLSearchParams } url_search_params
178
- * @param {import('../internal/client/reactivity/types.js').Source<string> } search
179
- */
180
- constructor ( url_search_params , search ) {
181
- super ( ) ;
182
- this . #url_search_params = url_search_params ;
183
- this . #search = search ;
165
+ for ( const [ key , value ] of params ) {
166
+ super . append ( key , value ) ;
167
+ }
168
+
169
+ this . #increment_version( ) ;
184
170
}
185
171
186
172
/**
@@ -190,8 +176,7 @@ export class ReactiveURLSearchParams extends URLSearchParams {
190
176
*/
191
177
append ( name , value ) {
192
178
this . #increment_version( ) ;
193
- this . #update_search( ) ;
194
- return this . #url_search_params. append ( name , value ) ;
179
+ return super . append ( name , value ) ;
195
180
}
196
181
197
182
/**
@@ -201,8 +186,7 @@ export class ReactiveURLSearchParams extends URLSearchParams {
201
186
*/
202
187
delete ( name , value ) {
203
188
this . #increment_version( ) ;
204
- this . #update_search( ) ;
205
- return this . #url_search_params. delete ( name , value ) ;
189
+ return super . delete ( name , value ) ;
206
190
}
207
191
208
192
/**
@@ -211,7 +195,7 @@ export class ReactiveURLSearchParams extends URLSearchParams {
211
195
*/
212
196
get ( name ) {
213
197
get ( this . #version) ;
214
- return this . #url_search_params . get ( name ) ;
198
+ return super . get ( name ) ;
215
199
}
216
200
217
201
/**
@@ -220,7 +204,7 @@ export class ReactiveURLSearchParams extends URLSearchParams {
220
204
*/
221
205
getAll ( name ) {
222
206
get ( this . #version) ;
223
- return this . #url_search_params . getAll ( name ) ;
207
+ return super . getAll ( name ) ;
224
208
}
225
209
226
210
/**
@@ -230,12 +214,12 @@ export class ReactiveURLSearchParams extends URLSearchParams {
230
214
*/
231
215
has ( name , value ) {
232
216
get ( this . #version) ;
233
- return this . #url_search_params . has ( name , value ) ;
217
+ return super . has ( name , value ) ;
234
218
}
235
219
236
220
keys ( ) {
237
221
get ( this . #version) ;
238
- return this . #url_search_params . keys ( ) ;
222
+ return super . keys ( ) ;
239
223
}
240
224
241
225
/**
@@ -245,36 +229,35 @@ export class ReactiveURLSearchParams extends URLSearchParams {
245
229
*/
246
230
set ( name , value ) {
247
231
this . #increment_version( ) ;
248
- this . #update_search( ) ;
249
- return this . #url_search_params. set ( name , value ) ;
232
+ return super . set ( name , value ) ;
250
233
}
251
234
252
235
sort ( ) {
253
236
this . #increment_version( ) ;
254
- this . #update_search( ) ;
255
- return this . #url_search_params. sort ( ) ;
237
+ return super . sort ( ) ;
256
238
}
257
239
258
240
toString ( ) {
259
241
get ( this . #version) ;
260
- return this . #url_search_params . toString ( ) ;
242
+ return super . toString ( ) ;
261
243
}
262
244
263
245
values ( ) {
264
246
get ( this . #version) ;
265
- return this . #url_search_params . values ( ) ;
247
+ return super . values ( ) ;
266
248
}
267
249
268
250
entries ( ) {
269
251
get ( this . #version) ;
270
- return this . #url_search_params . entries ( ) ;
252
+ return super . entries ( ) ;
271
253
}
272
254
273
255
[ Symbol . iterator ] ( ) {
274
256
return this . entries ( ) ;
275
257
}
276
258
277
259
get size ( ) {
278
- return this . #url_search_params. size ;
260
+ get ( this . #version) ;
261
+ return super . size ;
279
262
}
280
263
}
0 commit comments