| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | "use strict";const urlencoded = require("./urlencoded");exports.implementation = class URLSearchParamsImpl {  constructor(globalObject, constructorArgs, { doNotStripQMark = false }) {    let init = constructorArgs[0];    this._list = [];    this._url = null;    if (!doNotStripQMark && typeof init === "string" && init[0] === "?") {      init = init.slice(1);    }    if (Array.isArray(init)) {      for (const pair of init) {        if (pair.length !== 2) {          throw new TypeError("Failed to construct 'URLSearchParams': parameter 1 sequence's element does not " +                              "contain exactly two elements.");        }        this._list.push([pair[0], pair[1]]);      }    } else if (typeof init === "object" && Object.getPrototypeOf(init) === null) {      for (const name of Object.keys(init)) {        const value = init[name];        this._list.push([name, value]);      }    } else {      this._list = urlencoded.parseUrlencodedString(init);    }  }  _updateSteps() {    if (this._url !== null) {      let query = urlencoded.serializeUrlencoded(this._list);      if (query === "") {        query = null;      }      this._url._url.query = query;    }  }  append(name, value) {    this._list.push([name, value]);    this._updateSteps();  }  delete(name) {    let i = 0;    while (i < this._list.length) {      if (this._list[i][0] === name) {        this._list.splice(i, 1);      } else {        i++;      }    }    this._updateSteps();  }  get(name) {    for (const tuple of this._list) {      if (tuple[0] === name) {        return tuple[1];      }    }    return null;  }  getAll(name) {    const output = [];    for (const tuple of this._list) {      if (tuple[0] === name) {        output.push(tuple[1]);      }    }    return output;  }  has(name) {    for (const tuple of this._list) {      if (tuple[0] === name) {        return true;      }    }    return false;  }  set(name, value) {    let found = false;    let i = 0;    while (i < this._list.length) {      if (this._list[i][0] === name) {        if (found) {          this._list.splice(i, 1);        } else {          found = true;          this._list[i][1] = value;          i++;        }      } else {        i++;      }    }    if (!found) {      this._list.push([name, value]);    }    this._updateSteps();  }  sort() {    this._list.sort((a, b) => {      if (a[0] < b[0]) {        return -1;      }      if (a[0] > b[0]) {        return 1;      }      return 0;    });    this._updateSteps();  }  [Symbol.iterator]() {    return this._list[Symbol.iterator]();  }  toString() {    return urlencoded.serializeUrlencoded(this._list);  }};
 |