'use strict'; 
 | 
// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` 
 | 
require('../modules/es.array.iterator'); 
 | 
require('../modules/es.string.from-code-point'); 
 | 
var $ = require('../internals/export'); 
 | 
var globalThis = require('../internals/global-this'); 
 | 
var safeGetBuiltIn = require('../internals/safe-get-built-in'); 
 | 
var getBuiltIn = require('../internals/get-built-in'); 
 | 
var call = require('../internals/function-call'); 
 | 
var uncurryThis = require('../internals/function-uncurry-this'); 
 | 
var DESCRIPTORS = require('../internals/descriptors'); 
 | 
var USE_NATIVE_URL = require('../internals/url-constructor-detection'); 
 | 
var defineBuiltIn = require('../internals/define-built-in'); 
 | 
var defineBuiltInAccessor = require('../internals/define-built-in-accessor'); 
 | 
var defineBuiltIns = require('../internals/define-built-ins'); 
 | 
var setToStringTag = require('../internals/set-to-string-tag'); 
 | 
var createIteratorConstructor = require('../internals/iterator-create-constructor'); 
 | 
var InternalStateModule = require('../internals/internal-state'); 
 | 
var anInstance = require('../internals/an-instance'); 
 | 
var isCallable = require('../internals/is-callable'); 
 | 
var hasOwn = require('../internals/has-own-property'); 
 | 
var bind = require('../internals/function-bind-context'); 
 | 
var classof = require('../internals/classof'); 
 | 
var anObject = require('../internals/an-object'); 
 | 
var isObject = require('../internals/is-object'); 
 | 
var $toString = require('../internals/to-string'); 
 | 
var create = require('../internals/object-create'); 
 | 
var createPropertyDescriptor = require('../internals/create-property-descriptor'); 
 | 
var getIterator = require('../internals/get-iterator'); 
 | 
var getIteratorMethod = require('../internals/get-iterator-method'); 
 | 
var createIterResultObject = require('../internals/create-iter-result-object'); 
 | 
var validateArgumentsLength = require('../internals/validate-arguments-length'); 
 | 
var wellKnownSymbol = require('../internals/well-known-symbol'); 
 | 
var arraySort = require('../internals/array-sort'); 
 | 
  
 | 
var ITERATOR = wellKnownSymbol('iterator'); 
 | 
var URL_SEARCH_PARAMS = 'URLSearchParams'; 
 | 
var URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator'; 
 | 
var setInternalState = InternalStateModule.set; 
 | 
var getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS); 
 | 
var getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR); 
 | 
  
 | 
var nativeFetch = safeGetBuiltIn('fetch'); 
 | 
var NativeRequest = safeGetBuiltIn('Request'); 
 | 
var Headers = safeGetBuiltIn('Headers'); 
 | 
var RequestPrototype = NativeRequest && NativeRequest.prototype; 
 | 
var HeadersPrototype = Headers && Headers.prototype; 
 | 
var TypeError = globalThis.TypeError; 
 | 
var encodeURIComponent = globalThis.encodeURIComponent; 
 | 
var fromCharCode = String.fromCharCode; 
 | 
var fromCodePoint = getBuiltIn('String', 'fromCodePoint'); 
 | 
var $parseInt = parseInt; 
 | 
var charAt = uncurryThis(''.charAt); 
 | 
var join = uncurryThis([].join); 
 | 
var push = uncurryThis([].push); 
 | 
var replace = uncurryThis(''.replace); 
 | 
var shift = uncurryThis([].shift); 
 | 
var splice = uncurryThis([].splice); 
 | 
var split = uncurryThis(''.split); 
 | 
var stringSlice = uncurryThis(''.slice); 
 | 
var exec = uncurryThis(/./.exec); 
 | 
  
 | 
var plus = /\+/g; 
 | 
var FALLBACK_REPLACER = '\uFFFD'; 
 | 
var VALID_HEX = /^[0-9a-f]+$/i; 
 | 
  
 | 
var parseHexOctet = function (string, start) { 
 | 
  var substr = stringSlice(string, start, start + 2); 
 | 
  if (!exec(VALID_HEX, substr)) return NaN; 
 | 
  
 | 
  return $parseInt(substr, 16); 
 | 
}; 
 | 
  
 | 
var getLeadingOnes = function (octet) { 
 | 
  var count = 0; 
 | 
  for (var mask = 0x80; mask > 0 && (octet & mask) !== 0; mask >>= 1) { 
 | 
    count++; 
 | 
  } 
 | 
  return count; 
 | 
}; 
 | 
  
 | 
var utf8Decode = function (octets) { 
 | 
  var codePoint = null; 
 | 
  
 | 
  switch (octets.length) { 
 | 
    case 1: 
 | 
      codePoint = octets[0]; 
 | 
      break; 
 | 
    case 2: 
 | 
      codePoint = (octets[0] & 0x1F) << 6 | (octets[1] & 0x3F); 
 | 
      break; 
 | 
    case 3: 
 | 
      codePoint = (octets[0] & 0x0F) << 12 | (octets[1] & 0x3F) << 6 | (octets[2] & 0x3F); 
 | 
      break; 
 | 
    case 4: 
 | 
      codePoint = (octets[0] & 0x07) << 18 | (octets[1] & 0x3F) << 12 | (octets[2] & 0x3F) << 6 | (octets[3] & 0x3F); 
 | 
      break; 
 | 
  } 
 | 
  
 | 
  return codePoint > 0x10FFFF ? null : codePoint; 
 | 
}; 
 | 
  
 | 
var decode = function (input) { 
 | 
  input = replace(input, plus, ' '); 
 | 
  var length = input.length; 
 | 
  var result = ''; 
 | 
  var i = 0; 
 | 
  
 | 
  while (i < length) { 
 | 
    var decodedChar = charAt(input, i); 
 | 
  
 | 
    if (decodedChar === '%') { 
 | 
      if (charAt(input, i + 1) === '%' || i + 3 > length) { 
 | 
        result += '%'; 
 | 
        i++; 
 | 
        continue; 
 | 
      } 
 | 
  
 | 
      var octet = parseHexOctet(input, i + 1); 
 | 
  
 | 
      // eslint-disable-next-line no-self-compare -- NaN check 
 | 
      if (octet !== octet) { 
 | 
        result += decodedChar; 
 | 
        i++; 
 | 
        continue; 
 | 
      } 
 | 
  
 | 
      i += 2; 
 | 
      var byteSequenceLength = getLeadingOnes(octet); 
 | 
  
 | 
      if (byteSequenceLength === 0) { 
 | 
        decodedChar = fromCharCode(octet); 
 | 
      } else { 
 | 
        if (byteSequenceLength === 1 || byteSequenceLength > 4) { 
 | 
          result += FALLBACK_REPLACER; 
 | 
          i++; 
 | 
          continue; 
 | 
        } 
 | 
  
 | 
        var octets = [octet]; 
 | 
        var sequenceIndex = 1; 
 | 
  
 | 
        while (sequenceIndex < byteSequenceLength) { 
 | 
          i++; 
 | 
          if (i + 3 > length || charAt(input, i) !== '%') break; 
 | 
  
 | 
          var nextByte = parseHexOctet(input, i + 1); 
 | 
  
 | 
          // eslint-disable-next-line no-self-compare -- NaN check 
 | 
          if (nextByte !== nextByte) { 
 | 
            i += 3; 
 | 
            break; 
 | 
          } 
 | 
          if (nextByte > 191 || nextByte < 128) break; 
 | 
  
 | 
          push(octets, nextByte); 
 | 
          i += 2; 
 | 
          sequenceIndex++; 
 | 
        } 
 | 
  
 | 
        if (octets.length !== byteSequenceLength) { 
 | 
          result += FALLBACK_REPLACER; 
 | 
          continue; 
 | 
        } 
 | 
  
 | 
        var codePoint = utf8Decode(octets); 
 | 
        if (codePoint === null) { 
 | 
          result += FALLBACK_REPLACER; 
 | 
        } else { 
 | 
          decodedChar = fromCodePoint(codePoint); 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  
 | 
    result += decodedChar; 
 | 
    i++; 
 | 
  } 
 | 
  
 | 
  return result; 
 | 
}; 
 | 
  
 | 
var find = /[!'()~]|%20/g; 
 | 
  
 | 
var replacements = { 
 | 
  '!': '%21', 
 | 
  "'": '%27', 
 | 
  '(': '%28', 
 | 
  ')': '%29', 
 | 
  '~': '%7E', 
 | 
  '%20': '+' 
 | 
}; 
 | 
  
 | 
var replacer = function (match) { 
 | 
  return replacements[match]; 
 | 
}; 
 | 
  
 | 
var serialize = function (it) { 
 | 
  return replace(encodeURIComponent(it), find, replacer); 
 | 
}; 
 | 
  
 | 
var URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) { 
 | 
  setInternalState(this, { 
 | 
    type: URL_SEARCH_PARAMS_ITERATOR, 
 | 
    target: getInternalParamsState(params).entries, 
 | 
    index: 0, 
 | 
    kind: kind 
 | 
  }); 
 | 
}, URL_SEARCH_PARAMS, function next() { 
 | 
  var state = getInternalIteratorState(this); 
 | 
  var target = state.target; 
 | 
  var index = state.index++; 
 | 
  if (!target || index >= target.length) { 
 | 
    state.target = null; 
 | 
    return createIterResultObject(undefined, true); 
 | 
  } 
 | 
  var entry = target[index]; 
 | 
  switch (state.kind) { 
 | 
    case 'keys': return createIterResultObject(entry.key, false); 
 | 
    case 'values': return createIterResultObject(entry.value, false); 
 | 
  } return createIterResultObject([entry.key, entry.value], false); 
 | 
}, true); 
 | 
  
 | 
var URLSearchParamsState = function (init) { 
 | 
  this.entries = []; 
 | 
  this.url = null; 
 | 
  
 | 
  if (init !== undefined) { 
 | 
    if (isObject(init)) this.parseObject(init); 
 | 
    else this.parseQuery(typeof init == 'string' ? charAt(init, 0) === '?' ? stringSlice(init, 1) : init : $toString(init)); 
 | 
  } 
 | 
}; 
 | 
  
 | 
URLSearchParamsState.prototype = { 
 | 
  type: URL_SEARCH_PARAMS, 
 | 
  bindURL: function (url) { 
 | 
    this.url = url; 
 | 
    this.update(); 
 | 
  }, 
 | 
  parseObject: function (object) { 
 | 
    var entries = this.entries; 
 | 
    var iteratorMethod = getIteratorMethod(object); 
 | 
    var iterator, next, step, entryIterator, entryNext, first, second; 
 | 
  
 | 
    if (iteratorMethod) { 
 | 
      iterator = getIterator(object, iteratorMethod); 
 | 
      next = iterator.next; 
 | 
      while (!(step = call(next, iterator)).done) { 
 | 
        entryIterator = getIterator(anObject(step.value)); 
 | 
        entryNext = entryIterator.next; 
 | 
        if ( 
 | 
          (first = call(entryNext, entryIterator)).done || 
 | 
          (second = call(entryNext, entryIterator)).done || 
 | 
          !call(entryNext, entryIterator).done 
 | 
        ) throw new TypeError('Expected sequence with length 2'); 
 | 
        push(entries, { key: $toString(first.value), value: $toString(second.value) }); 
 | 
      } 
 | 
    } else for (var key in object) if (hasOwn(object, key)) { 
 | 
      push(entries, { key: key, value: $toString(object[key]) }); 
 | 
    } 
 | 
  }, 
 | 
  parseQuery: function (query) { 
 | 
    if (query) { 
 | 
      var entries = this.entries; 
 | 
      var attributes = split(query, '&'); 
 | 
      var index = 0; 
 | 
      var attribute, entry; 
 | 
      while (index < attributes.length) { 
 | 
        attribute = attributes[index++]; 
 | 
        if (attribute.length) { 
 | 
          entry = split(attribute, '='); 
 | 
          push(entries, { 
 | 
            key: decode(shift(entry)), 
 | 
            value: decode(join(entry, '=')) 
 | 
          }); 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  }, 
 | 
  serialize: function () { 
 | 
    var entries = this.entries; 
 | 
    var result = []; 
 | 
    var index = 0; 
 | 
    var entry; 
 | 
    while (index < entries.length) { 
 | 
      entry = entries[index++]; 
 | 
      push(result, serialize(entry.key) + '=' + serialize(entry.value)); 
 | 
    } return join(result, '&'); 
 | 
  }, 
 | 
  update: function () { 
 | 
    this.entries.length = 0; 
 | 
    this.parseQuery(this.url.query); 
 | 
  }, 
 | 
  updateURL: function () { 
 | 
    if (this.url) this.url.update(); 
 | 
  } 
 | 
}; 
 | 
  
 | 
// `URLSearchParams` constructor 
 | 
// https://url.spec.whatwg.org/#interface-urlsearchparams 
 | 
var URLSearchParamsConstructor = function URLSearchParams(/* init */) { 
 | 
  anInstance(this, URLSearchParamsPrototype); 
 | 
  var init = arguments.length > 0 ? arguments[0] : undefined; 
 | 
  var state = setInternalState(this, new URLSearchParamsState(init)); 
 | 
  if (!DESCRIPTORS) this.size = state.entries.length; 
 | 
}; 
 | 
  
 | 
var URLSearchParamsPrototype = URLSearchParamsConstructor.prototype; 
 | 
  
 | 
defineBuiltIns(URLSearchParamsPrototype, { 
 | 
  // `URLSearchParams.prototype.append` method 
 | 
  // https://url.spec.whatwg.org/#dom-urlsearchparams-append 
 | 
  append: function append(name, value) { 
 | 
    var state = getInternalParamsState(this); 
 | 
    validateArgumentsLength(arguments.length, 2); 
 | 
    push(state.entries, { key: $toString(name), value: $toString(value) }); 
 | 
    if (!DESCRIPTORS) this.length++; 
 | 
    state.updateURL(); 
 | 
  }, 
 | 
  // `URLSearchParams.prototype.delete` method 
 | 
  // https://url.spec.whatwg.org/#dom-urlsearchparams-delete 
 | 
  'delete': function (name /* , value */) { 
 | 
    var state = getInternalParamsState(this); 
 | 
    var length = validateArgumentsLength(arguments.length, 1); 
 | 
    var entries = state.entries; 
 | 
    var key = $toString(name); 
 | 
    var $value = length < 2 ? undefined : arguments[1]; 
 | 
    var value = $value === undefined ? $value : $toString($value); 
 | 
    var index = 0; 
 | 
    while (index < entries.length) { 
 | 
      var entry = entries[index]; 
 | 
      if (entry.key === key && (value === undefined || entry.value === value)) { 
 | 
        splice(entries, index, 1); 
 | 
        if (value !== undefined) break; 
 | 
      } else index++; 
 | 
    } 
 | 
    if (!DESCRIPTORS) this.size = entries.length; 
 | 
    state.updateURL(); 
 | 
  }, 
 | 
  // `URLSearchParams.prototype.get` method 
 | 
  // https://url.spec.whatwg.org/#dom-urlsearchparams-get 
 | 
  get: function get(name) { 
 | 
    var entries = getInternalParamsState(this).entries; 
 | 
    validateArgumentsLength(arguments.length, 1); 
 | 
    var key = $toString(name); 
 | 
    var index = 0; 
 | 
    for (; index < entries.length; index++) { 
 | 
      if (entries[index].key === key) return entries[index].value; 
 | 
    } 
 | 
    return null; 
 | 
  }, 
 | 
  // `URLSearchParams.prototype.getAll` method 
 | 
  // https://url.spec.whatwg.org/#dom-urlsearchparams-getall 
 | 
  getAll: function getAll(name) { 
 | 
    var entries = getInternalParamsState(this).entries; 
 | 
    validateArgumentsLength(arguments.length, 1); 
 | 
    var key = $toString(name); 
 | 
    var result = []; 
 | 
    var index = 0; 
 | 
    for (; index < entries.length; index++) { 
 | 
      if (entries[index].key === key) push(result, entries[index].value); 
 | 
    } 
 | 
    return result; 
 | 
  }, 
 | 
  // `URLSearchParams.prototype.has` method 
 | 
  // https://url.spec.whatwg.org/#dom-urlsearchparams-has 
 | 
  has: function has(name /* , value */) { 
 | 
    var entries = getInternalParamsState(this).entries; 
 | 
    var length = validateArgumentsLength(arguments.length, 1); 
 | 
    var key = $toString(name); 
 | 
    var $value = length < 2 ? undefined : arguments[1]; 
 | 
    var value = $value === undefined ? $value : $toString($value); 
 | 
    var index = 0; 
 | 
    while (index < entries.length) { 
 | 
      var entry = entries[index++]; 
 | 
      if (entry.key === key && (value === undefined || entry.value === value)) return true; 
 | 
    } 
 | 
    return false; 
 | 
  }, 
 | 
  // `URLSearchParams.prototype.set` method 
 | 
  // https://url.spec.whatwg.org/#dom-urlsearchparams-set 
 | 
  set: function set(name, value) { 
 | 
    var state = getInternalParamsState(this); 
 | 
    validateArgumentsLength(arguments.length, 1); 
 | 
    var entries = state.entries; 
 | 
    var found = false; 
 | 
    var key = $toString(name); 
 | 
    var val = $toString(value); 
 | 
    var index = 0; 
 | 
    var entry; 
 | 
    for (; index < entries.length; index++) { 
 | 
      entry = entries[index]; 
 | 
      if (entry.key === key) { 
 | 
        if (found) splice(entries, index--, 1); 
 | 
        else { 
 | 
          found = true; 
 | 
          entry.value = val; 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
    if (!found) push(entries, { key: key, value: val }); 
 | 
    if (!DESCRIPTORS) this.size = entries.length; 
 | 
    state.updateURL(); 
 | 
  }, 
 | 
  // `URLSearchParams.prototype.sort` method 
 | 
  // https://url.spec.whatwg.org/#dom-urlsearchparams-sort 
 | 
  sort: function sort() { 
 | 
    var state = getInternalParamsState(this); 
 | 
    arraySort(state.entries, function (a, b) { 
 | 
      return a.key > b.key ? 1 : -1; 
 | 
    }); 
 | 
    state.updateURL(); 
 | 
  }, 
 | 
  // `URLSearchParams.prototype.forEach` method 
 | 
  forEach: function forEach(callback /* , thisArg */) { 
 | 
    var entries = getInternalParamsState(this).entries; 
 | 
    var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined); 
 | 
    var index = 0; 
 | 
    var entry; 
 | 
    while (index < entries.length) { 
 | 
      entry = entries[index++]; 
 | 
      boundFunction(entry.value, entry.key, this); 
 | 
    } 
 | 
  }, 
 | 
  // `URLSearchParams.prototype.keys` method 
 | 
  keys: function keys() { 
 | 
    return new URLSearchParamsIterator(this, 'keys'); 
 | 
  }, 
 | 
  // `URLSearchParams.prototype.values` method 
 | 
  values: function values() { 
 | 
    return new URLSearchParamsIterator(this, 'values'); 
 | 
  }, 
 | 
  // `URLSearchParams.prototype.entries` method 
 | 
  entries: function entries() { 
 | 
    return new URLSearchParamsIterator(this, 'entries'); 
 | 
  } 
 | 
}, { enumerable: true }); 
 | 
  
 | 
// `URLSearchParams.prototype[@@iterator]` method 
 | 
defineBuiltIn(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries, { name: 'entries' }); 
 | 
  
 | 
// `URLSearchParams.prototype.toString` method 
 | 
// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior 
 | 
defineBuiltIn(URLSearchParamsPrototype, 'toString', function toString() { 
 | 
  return getInternalParamsState(this).serialize(); 
 | 
}, { enumerable: true }); 
 | 
  
 | 
// `URLSearchParams.prototype.size` getter 
 | 
// https://github.com/whatwg/url/pull/734 
 | 
if (DESCRIPTORS) defineBuiltInAccessor(URLSearchParamsPrototype, 'size', { 
 | 
  get: function size() { 
 | 
    return getInternalParamsState(this).entries.length; 
 | 
  }, 
 | 
  configurable: true, 
 | 
  enumerable: true 
 | 
}); 
 | 
  
 | 
setToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS); 
 | 
  
 | 
$({ global: true, constructor: true, forced: !USE_NATIVE_URL }, { 
 | 
  URLSearchParams: URLSearchParamsConstructor 
 | 
}); 
 | 
  
 | 
// Wrap `fetch` and `Request` for correct work with polyfilled `URLSearchParams` 
 | 
if (!USE_NATIVE_URL && isCallable(Headers)) { 
 | 
  var headersHas = uncurryThis(HeadersPrototype.has); 
 | 
  var headersSet = uncurryThis(HeadersPrototype.set); 
 | 
  
 | 
  var wrapRequestOptions = function (init) { 
 | 
    if (isObject(init)) { 
 | 
      var body = init.body; 
 | 
      var headers; 
 | 
      if (classof(body) === URL_SEARCH_PARAMS) { 
 | 
        headers = init.headers ? new Headers(init.headers) : new Headers(); 
 | 
        if (!headersHas(headers, 'content-type')) { 
 | 
          headersSet(headers, 'content-type', 'application/x-www-form-urlencoded;charset=UTF-8'); 
 | 
        } 
 | 
        return create(init, { 
 | 
          body: createPropertyDescriptor(0, $toString(body)), 
 | 
          headers: createPropertyDescriptor(0, headers) 
 | 
        }); 
 | 
      } 
 | 
    } return init; 
 | 
  }; 
 | 
  
 | 
  if (isCallable(nativeFetch)) { 
 | 
    $({ global: true, enumerable: true, dontCallGetSet: true, forced: true }, { 
 | 
      fetch: function fetch(input /* , init */) { 
 | 
        return nativeFetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {}); 
 | 
      } 
 | 
    }); 
 | 
  } 
 | 
  
 | 
  if (isCallable(NativeRequest)) { 
 | 
    var RequestConstructor = function Request(input /* , init */) { 
 | 
      anInstance(this, RequestPrototype); 
 | 
      return new NativeRequest(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {}); 
 | 
    }; 
 | 
  
 | 
    RequestPrototype.constructor = RequestConstructor; 
 | 
    RequestConstructor.prototype = RequestPrototype; 
 | 
  
 | 
    $({ global: true, constructor: true, dontCallGetSet: true, forced: true }, { 
 | 
      Request: RequestConstructor 
 | 
    }); 
 | 
  } 
 | 
} 
 | 
  
 | 
module.exports = { 
 | 
  URLSearchParams: URLSearchParamsConstructor, 
 | 
  getState: getInternalParamsState 
 | 
}; 
 |