You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.8 KiB
50 lines
1.8 KiB
4 weeks ago
|
'use strict';
|
||
|
var defineBuiltIn = require('../internals/define-built-in');
|
||
|
var uncurryThis = require('../internals/function-uncurry-this');
|
||
|
var toString = require('../internals/to-string');
|
||
|
var validateArgumentsLength = require('../internals/validate-arguments-length');
|
||
|
|
||
|
var $URLSearchParams = URLSearchParams;
|
||
|
var URLSearchParamsPrototype = $URLSearchParams.prototype;
|
||
|
var append = uncurryThis(URLSearchParamsPrototype.append);
|
||
|
var $delete = uncurryThis(URLSearchParamsPrototype['delete']);
|
||
|
var forEach = uncurryThis(URLSearchParamsPrototype.forEach);
|
||
|
var push = uncurryThis([].push);
|
||
|
var params = new $URLSearchParams('a=1&a=2&b=3');
|
||
|
|
||
|
params['delete']('a', 1);
|
||
|
// `undefined` case is a Chromium 117 bug
|
||
|
// https://bugs.chromium.org/p/v8/issues/detail?id=14222
|
||
|
params['delete']('b', undefined);
|
||
|
|
||
|
if (params + '' !== 'a=2') {
|
||
|
defineBuiltIn(URLSearchParamsPrototype, 'delete', function (name /* , value */) {
|
||
|
var length = arguments.length;
|
||
|
var $value = length < 2 ? undefined : arguments[1];
|
||
|
if (length && $value === undefined) return $delete(this, name);
|
||
|
var entries = [];
|
||
|
forEach(this, function (v, k) { // also validates `this`
|
||
|
push(entries, { key: k, value: v });
|
||
|
});
|
||
|
validateArgumentsLength(length, 1);
|
||
|
var key = toString(name);
|
||
|
var value = toString($value);
|
||
|
var index = 0;
|
||
|
var dindex = 0;
|
||
|
var found = false;
|
||
|
var entriesLength = entries.length;
|
||
|
var entry;
|
||
|
while (index < entriesLength) {
|
||
|
entry = entries[index++];
|
||
|
if (found || entry.key === key) {
|
||
|
found = true;
|
||
|
$delete(this, entry.key);
|
||
|
} else dindex++;
|
||
|
}
|
||
|
while (dindex < entriesLength) {
|
||
|
entry = entries[dindex++];
|
||
|
if (!(entry.key === key && entry.value === value)) append(this, entry.key, entry.value);
|
||
|
}
|
||
|
}, { enumerable: true, unsafe: true });
|
||
|
}
|