| 1 | 'use strict';
|
|---|
| 2 | var defineBuiltIn = require('../internals/define-built-in');
|
|---|
| 3 | var uncurryThis = require('../internals/function-uncurry-this');
|
|---|
| 4 | var toString = require('../internals/to-string');
|
|---|
| 5 | var validateArgumentsLength = require('../internals/validate-arguments-length');
|
|---|
| 6 |
|
|---|
| 7 | var $URLSearchParams = URLSearchParams;
|
|---|
| 8 | var URLSearchParamsPrototype = $URLSearchParams.prototype;
|
|---|
| 9 | var append = uncurryThis(URLSearchParamsPrototype.append);
|
|---|
| 10 | var $delete = uncurryThis(URLSearchParamsPrototype['delete']);
|
|---|
| 11 | var forEach = uncurryThis(URLSearchParamsPrototype.forEach);
|
|---|
| 12 | var push = uncurryThis([].push);
|
|---|
| 13 | var params = new $URLSearchParams('a=1&a=2&b=3');
|
|---|
| 14 |
|
|---|
| 15 | params['delete']('a', 1);
|
|---|
| 16 | // `undefined` case is a Chromium 117 bug
|
|---|
| 17 | // https://bugs.chromium.org/p/v8/issues/detail?id=14222
|
|---|
| 18 | params['delete']('b', undefined);
|
|---|
| 19 |
|
|---|
| 20 | if (params + '' !== 'a=2') {
|
|---|
| 21 | defineBuiltIn(URLSearchParamsPrototype, 'delete', function (name /* , value */) {
|
|---|
| 22 | var length = arguments.length;
|
|---|
| 23 | var $value = length < 2 ? undefined : arguments[1];
|
|---|
| 24 | if (length && $value === undefined) return $delete(this, name);
|
|---|
| 25 | var entries = [];
|
|---|
| 26 | forEach(this, function (v, k) { // also validates `this`
|
|---|
| 27 | push(entries, { key: k, value: v });
|
|---|
| 28 | });
|
|---|
| 29 | validateArgumentsLength(length, 1);
|
|---|
| 30 | var key = toString(name);
|
|---|
| 31 | var value = toString($value);
|
|---|
| 32 | var index = 0;
|
|---|
| 33 | var entriesLength = entries.length;
|
|---|
| 34 | var entry;
|
|---|
| 35 | while (index < entriesLength) {
|
|---|
| 36 | entry = entries[index];
|
|---|
| 37 | $delete(this, entry.key);
|
|---|
| 38 | index++;
|
|---|
| 39 | }
|
|---|
| 40 | index = 0;
|
|---|
| 41 | while (index < entriesLength) {
|
|---|
| 42 | entry = entries[index++];
|
|---|
| 43 | if (!(entry.key === key && entry.value === value)) append(this, entry.key, entry.value);
|
|---|
| 44 | }
|
|---|
| 45 | }, { enumerable: true, unsafe: true });
|
|---|
| 46 | }
|
|---|