summaryrefslogtreecommitdiff
path: root/cli/js/web/url_search_params.ts
diff options
context:
space:
mode:
Diffstat (limited to 'cli/js/web/url_search_params.ts')
-rw-r--r--cli/js/web/url_search_params.ts219
1 files changed, 0 insertions, 219 deletions
diff --git a/cli/js/web/url_search_params.ts b/cli/js/web/url_search_params.ts
deleted file mode 100644
index f3e247522..000000000
--- a/cli/js/web/url_search_params.ts
+++ /dev/null
@@ -1,219 +0,0 @@
-// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
-import { parts } from "./url.ts";
-import { isIterable, requiredArguments } from "./util.ts";
-
-/** @internal */
-export const urls = new WeakMap<URLSearchParams, URL | null>();
-
-export class URLSearchParamsImpl implements URLSearchParams {
- readonly #params: Array<[string, string]> = [];
-
- constructor(init: string | string[][] | Record<string, string> = "") {
- if (typeof init === "string") {
- this.#handleStringInitialization(init);
- return;
- }
-
- if (Array.isArray(init) || isIterable(init)) {
- this.#handleArrayInitialization(init);
- return;
- }
-
- if (Object(init) !== init) {
- return;
- }
-
- if (init instanceof URLSearchParamsImpl) {
- this.#params = [...init.#params];
- return;
- }
-
- // Overload: record<USVString, USVString>
- for (const key of Object.keys(init)) {
- this.#append(key, init[key]);
- }
-
- urls.set(this, null);
- }
-
- #handleStringInitialization = (init: string): void => {
- // Overload: USVString
- // If init is a string and starts with U+003F (?),
- // remove the first code point from init.
- if (init.charCodeAt(0) === 0x003f) {
- init = init.slice(1);
- }
-
- for (const pair of init.split("&")) {
- // Empty params are ignored
- if (pair.length === 0) {
- continue;
- }
- const position = pair.indexOf("=");
- const name = pair.slice(0, position === -1 ? pair.length : position);
- const value = pair.slice(name.length + 1);
- this.#append(decodeURIComponent(name), decodeURIComponent(value));
- }
- };
-
- #handleArrayInitialization = (
- init: string[][] | Iterable<[string, string]>,
- ): void => {
- // Overload: sequence<sequence<USVString>>
- for (const tuple of init) {
- // If pair does not contain exactly two items, then throw a TypeError.
- if (tuple.length !== 2) {
- throw new TypeError(
- "URLSearchParams.constructor tuple array argument must only contain pair elements",
- );
- }
- this.#append(tuple[0], tuple[1]);
- }
- };
-
- #updateSteps = (): void => {
- const url = urls.get(this);
- if (url == null) {
- return;
- }
- parts.get(url)!.query = this.toString();
- };
-
- #append = (name: string, value: string): void => {
- this.#params.push([String(name), String(value)]);
- };
-
- append(name: string, value: string): void {
- requiredArguments("URLSearchParams.append", arguments.length, 2);
- this.#append(name, value);
- this.#updateSteps();
- }
-
- delete(name: string): void {
- requiredArguments("URLSearchParams.delete", arguments.length, 1);
- name = String(name);
- let i = 0;
- while (i < this.#params.length) {
- if (this.#params[i][0] === name) {
- this.#params.splice(i, 1);
- } else {
- i++;
- }
- }
- this.#updateSteps();
- }
-
- getAll(name: string): string[] {
- requiredArguments("URLSearchParams.getAll", arguments.length, 1);
- name = String(name);
- const values = [];
- for (const entry of this.#params) {
- if (entry[0] === name) {
- values.push(entry[1]);
- }
- }
-
- return values;
- }
-
- get(name: string): string | null {
- requiredArguments("URLSearchParams.get", arguments.length, 1);
- name = String(name);
- for (const entry of this.#params) {
- if (entry[0] === name) {
- return entry[1];
- }
- }
-
- return null;
- }
-
- has(name: string): boolean {
- requiredArguments("URLSearchParams.has", arguments.length, 1);
- name = String(name);
- return this.#params.some((entry) => entry[0] === name);
- }
-
- set(name: string, value: string): void {
- requiredArguments("URLSearchParams.set", arguments.length, 2);
-
- // If there are any name-value pairs whose name is name, in list,
- // set the value of the first such name-value pair to value
- // and remove the others.
- name = String(name);
- value = String(value);
- let found = false;
- let i = 0;
- while (i < this.#params.length) {
- if (this.#params[i][0] === name) {
- if (!found) {
- this.#params[i][1] = value;
- found = true;
- i++;
- } else {
- this.#params.splice(i, 1);
- }
- } else {
- i++;
- }
- }
-
- // Otherwise, append a new name-value pair whose name is name
- // and value is value, to list.
- if (!found) {
- this.#append(name, value);
- }
-
- this.#updateSteps();
- }
-
- sort(): void {
- this.#params.sort((a, b) => (a[0] === b[0] ? 0 : a[0] > b[0] ? 1 : -1));
- this.#updateSteps();
- }
-
- forEach(
- callbackfn: (value: string, key: string, parent: this) => void,
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- thisArg?: any,
- ): void {
- requiredArguments("URLSearchParams.forEach", arguments.length, 1);
-
- if (typeof thisArg !== "undefined") {
- callbackfn = callbackfn.bind(thisArg);
- }
-
- for (const [key, value] of this.#params) {
- callbackfn(value, key, this);
- }
- }
-
- *keys(): IterableIterator<string> {
- for (const [key] of this.#params) {
- yield key;
- }
- }
-
- *values(): IterableIterator<string> {
- for (const [, value] of this.#params) {
- yield value;
- }
- }
-
- *entries(): IterableIterator<[string, string]> {
- yield* this.#params;
- }
-
- *[Symbol.iterator](): IterableIterator<[string, string]> {
- yield* this.#params;
- }
-
- toString(): string {
- return this.#params
- .map(
- (tuple) =>
- `${encodeURIComponent(tuple[0])}=${encodeURIComponent(tuple[1])}`,
- )
- .join("&");
- }
-}