chore: split web op crate (#9635)
This commit starts splitting out the deno_web op crate into multiple
smaller crates. This commit splits out WebIDL and URL API, but in the
future I want to split out each spec into its own crate. That means we
will have (in rough order of loading): `webidl`, `dom`, `streams`,
`console`, `encoding`, `url`, `file`, `fetch`, `websocket`, and
`webgpu` crates.
2021-03-12 10:17:18 -05:00
|
|
|
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
|
|
|
|
|
|
|
|
// deno-lint-ignore-file no-explicit-any
|
|
|
|
|
|
|
|
/// <reference no-default-lib="true" />
|
|
|
|
/// <reference lib="esnext" />
|
|
|
|
|
|
|
|
declare class URLSearchParams {
|
|
|
|
constructor(
|
|
|
|
init?: string[][] | Record<string, string> | string | URLSearchParams,
|
|
|
|
);
|
|
|
|
static toString(): string;
|
|
|
|
|
|
|
|
/** Appends a specified key/value pair as a new search parameter.
|
|
|
|
*
|
|
|
|
* ```ts
|
|
|
|
* let searchParams = new URLSearchParams();
|
|
|
|
* searchParams.append('name', 'first');
|
|
|
|
* searchParams.append('name', 'second');
|
|
|
|
* ```
|
|
|
|
*/
|
|
|
|
append(name: string, value: string): void;
|
|
|
|
|
|
|
|
/** Deletes the given search parameter and its associated value,
|
|
|
|
* from the list of all search parameters.
|
|
|
|
*
|
|
|
|
* ```ts
|
|
|
|
* let searchParams = new URLSearchParams([['name', 'value']]);
|
|
|
|
* searchParams.delete('name');
|
|
|
|
* ```
|
|
|
|
*/
|
|
|
|
delete(name: string): void;
|
|
|
|
|
|
|
|
/** Returns all the values associated with a given search parameter
|
|
|
|
* as an array.
|
|
|
|
*
|
|
|
|
* ```ts
|
|
|
|
* searchParams.getAll('name');
|
|
|
|
* ```
|
|
|
|
*/
|
|
|
|
getAll(name: string): string[];
|
|
|
|
|
|
|
|
/** Returns the first value associated to the given search parameter.
|
|
|
|
*
|
|
|
|
* ```ts
|
|
|
|
* searchParams.get('name');
|
|
|
|
* ```
|
|
|
|
*/
|
|
|
|
get(name: string): string | null;
|
|
|
|
|
|
|
|
/** Returns a Boolean that indicates whether a parameter with the
|
|
|
|
* specified name exists.
|
|
|
|
*
|
|
|
|
* ```ts
|
|
|
|
* searchParams.has('name');
|
|
|
|
* ```
|
|
|
|
*/
|
|
|
|
has(name: string): boolean;
|
|
|
|
|
|
|
|
/** Sets the value associated with a given search parameter to the
|
|
|
|
* given value. If there were several matching values, this method
|
|
|
|
* deletes the others. If the search parameter doesn't exist, this
|
|
|
|
* method creates it.
|
|
|
|
*
|
|
|
|
* ```ts
|
|
|
|
* searchParams.set('name', 'value');
|
|
|
|
* ```
|
|
|
|
*/
|
|
|
|
set(name: string, value: string): void;
|
|
|
|
|
|
|
|
/** Sort all key/value pairs contained in this object in place and
|
|
|
|
* return undefined. The sort order is according to Unicode code
|
|
|
|
* points of the keys.
|
|
|
|
*
|
|
|
|
* ```ts
|
|
|
|
* searchParams.sort();
|
|
|
|
* ```
|
|
|
|
*/
|
|
|
|
sort(): void;
|
|
|
|
|
|
|
|
/** Calls a function for each element contained in this object in
|
|
|
|
* place and return undefined. Optionally accepts an object to use
|
|
|
|
* as this when executing callback as second argument.
|
|
|
|
*
|
|
|
|
* ```ts
|
|
|
|
* const params = new URLSearchParams([["a", "b"], ["c", "d"]]);
|
|
|
|
* params.forEach((value, key, parent) => {
|
|
|
|
* console.log(value, key, parent);
|
|
|
|
* });
|
|
|
|
* ```
|
|
|
|
*/
|
|
|
|
forEach(
|
|
|
|
callbackfn: (value: string, key: string, parent: this) => void,
|
|
|
|
thisArg?: any,
|
|
|
|
): void;
|
|
|
|
|
|
|
|
/** Returns an iterator allowing to go through all keys contained
|
|
|
|
* in this object.
|
|
|
|
*
|
|
|
|
* ```ts
|
|
|
|
* const params = new URLSearchParams([["a", "b"], ["c", "d"]]);
|
|
|
|
* for (const key of params.keys()) {
|
|
|
|
* console.log(key);
|
|
|
|
* }
|
|
|
|
* ```
|
|
|
|
*/
|
|
|
|
keys(): IterableIterator<string>;
|
|
|
|
|
|
|
|
/** Returns an iterator allowing to go through all values contained
|
|
|
|
* in this object.
|
|
|
|
*
|
|
|
|
* ```ts
|
|
|
|
* const params = new URLSearchParams([["a", "b"], ["c", "d"]]);
|
|
|
|
* for (const value of params.values()) {
|
|
|
|
* console.log(value);
|
|
|
|
* }
|
|
|
|
* ```
|
|
|
|
*/
|
|
|
|
values(): IterableIterator<string>;
|
|
|
|
|
|
|
|
/** Returns an iterator allowing to go through all key/value
|
|
|
|
* pairs contained in this object.
|
|
|
|
*
|
|
|
|
* ```ts
|
|
|
|
* const params = new URLSearchParams([["a", "b"], ["c", "d"]]);
|
|
|
|
* for (const [key, value] of params.entries()) {
|
|
|
|
* console.log(key, value);
|
|
|
|
* }
|
|
|
|
* ```
|
|
|
|
*/
|
|
|
|
entries(): IterableIterator<[string, string]>;
|
|
|
|
|
|
|
|
/** Returns an iterator allowing to go through all key/value
|
|
|
|
* pairs contained in this object.
|
|
|
|
*
|
|
|
|
* ```ts
|
|
|
|
* const params = new URLSearchParams([["a", "b"], ["c", "d"]]);
|
|
|
|
* for (const [key, value] of params) {
|
|
|
|
* console.log(key, value);
|
|
|
|
* }
|
|
|
|
* ```
|
|
|
|
*/
|
|
|
|
[Symbol.iterator](): IterableIterator<[string, string]>;
|
|
|
|
|
|
|
|
/** Returns a query string suitable for use in a URL.
|
|
|
|
*
|
|
|
|
* ```ts
|
|
|
|
* searchParams.toString();
|
|
|
|
* ```
|
|
|
|
*/
|
|
|
|
toString(): string;
|
|
|
|
}
|
|
|
|
|
|
|
|
/** The URL interface represents an object providing static methods used for creating object URLs. */
|
|
|
|
declare class URL {
|
|
|
|
constructor(url: string, base?: string | URL);
|
2021-04-07 09:22:14 -04:00
|
|
|
static createObjectURL(blob: Blob): string;
|
|
|
|
static revokeObjectURL(url: string): void;
|
chore: split web op crate (#9635)
This commit starts splitting out the deno_web op crate into multiple
smaller crates. This commit splits out WebIDL and URL API, but in the
future I want to split out each spec into its own crate. That means we
will have (in rough order of loading): `webidl`, `dom`, `streams`,
`console`, `encoding`, `url`, `file`, `fetch`, `websocket`, and
`webgpu` crates.
2021-03-12 10:17:18 -05:00
|
|
|
|
|
|
|
hash: string;
|
|
|
|
host: string;
|
|
|
|
hostname: string;
|
|
|
|
href: string;
|
|
|
|
toString(): string;
|
|
|
|
readonly origin: string;
|
|
|
|
password: string;
|
|
|
|
pathname: string;
|
|
|
|
port: string;
|
|
|
|
protocol: string;
|
|
|
|
search: string;
|
|
|
|
readonly searchParams: URLSearchParams;
|
|
|
|
username: string;
|
|
|
|
toJSON(): string;
|
|
|
|
}
|
2021-09-08 05:14:29 -04:00
|
|
|
|
|
|
|
declare interface URLPatternInit {
|
|
|
|
protocol?: string;
|
|
|
|
username?: string;
|
|
|
|
password?: string;
|
|
|
|
hostname?: string;
|
|
|
|
port?: string;
|
|
|
|
pathname?: string;
|
|
|
|
search?: string;
|
|
|
|
hash?: string;
|
|
|
|
baseURL?: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
declare type URLPatternInput = string | URLPatternInit;
|
|
|
|
|
|
|
|
declare interface URLPatternComponentResult {
|
|
|
|
input: string;
|
|
|
|
groups: Record<string, string>;
|
|
|
|
}
|
|
|
|
|
2021-10-17 14:37:18 -04:00
|
|
|
/** `URLPatternResult` is the object returned from `URLPattern.exec`. */
|
2021-09-08 05:14:29 -04:00
|
|
|
declare interface URLPatternResult {
|
|
|
|
/** The inputs provided when matching. */
|
|
|
|
inputs: [URLPatternInit] | [URLPatternInit, string];
|
|
|
|
|
|
|
|
/** The matched result for the `protocol` matcher. */
|
|
|
|
protocol: URLPatternComponentResult;
|
|
|
|
/** The matched result for the `username` matcher. */
|
|
|
|
username: URLPatternComponentResult;
|
|
|
|
/** The matched result for the `password` matcher. */
|
|
|
|
password: URLPatternComponentResult;
|
|
|
|
/** The matched result for the `hostname` matcher. */
|
|
|
|
hostname: URLPatternComponentResult;
|
|
|
|
/** The matched result for the `port` matcher. */
|
|
|
|
port: URLPatternComponentResult;
|
|
|
|
/** The matched result for the `pathname` matcher. */
|
|
|
|
pathname: URLPatternComponentResult;
|
|
|
|
/** The matched result for the `search` matcher. */
|
|
|
|
search: URLPatternComponentResult;
|
|
|
|
/** The matched result for the `hash` matcher. */
|
|
|
|
hash: URLPatternComponentResult;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The URLPattern API provides a web platform primitive for matching URLs based
|
|
|
|
* on a convenient pattern syntax.
|
|
|
|
*
|
|
|
|
* The syntax is based on path-to-regexp. Wildcards, named capture groups,
|
|
|
|
* regular groups, and group modifiers are all supported.
|
|
|
|
*
|
|
|
|
* ```ts
|
|
|
|
* // Specify the pattern as structured data.
|
|
|
|
* const pattern = new URLPattern({ pathname: "/users/:user" });
|
2021-10-15 05:25:48 -04:00
|
|
|
* const match = pattern.exec("/users/joe");
|
2021-09-08 05:14:29 -04:00
|
|
|
* console.log(match.pathname.groups.user); // joe
|
|
|
|
* ```
|
|
|
|
*
|
|
|
|
* ```ts
|
|
|
|
* // Specify a fully qualified string pattern.
|
|
|
|
* const pattern = new URLPattern("https://example.com/books/:id");
|
|
|
|
* console.log(pattern.test("https://example.com/books/123")); // true
|
|
|
|
* console.log(pattern.test("https://deno.land/books/123")); // false
|
|
|
|
* ```
|
|
|
|
*
|
|
|
|
* ```ts
|
|
|
|
* // Specify a relative string pattern with a base URL.
|
|
|
|
* const pattern = new URLPattern("/:article", "https://blog.example.com");
|
|
|
|
* console.log(pattern.test("https://blog.example.com/article")); // true
|
|
|
|
* console.log(pattern.test("https://blog.example.com/article/123")); // false
|
|
|
|
* ```
|
|
|
|
*/
|
|
|
|
declare class URLPattern {
|
|
|
|
constructor(input: URLPatternInput, baseURL?: string);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test if the given input matches the stored pattern.
|
|
|
|
*
|
|
|
|
* The input can either be provided as a url string (with an optional base),
|
|
|
|
* or as individual components in the form of an object.
|
|
|
|
*
|
|
|
|
* ```ts
|
|
|
|
* const pattern = new URLPattern("https://example.com/books/:id");
|
|
|
|
*
|
|
|
|
* // Test a url string.
|
|
|
|
* console.log(pattern.test("https://example.com/books/123")); // true
|
|
|
|
*
|
|
|
|
* // Test a relative url with a base.
|
|
|
|
* console.log(pattern.test("/books/123", "https://example.com")); // true
|
|
|
|
*
|
|
|
|
* // Test an object of url components.
|
|
|
|
* console.log(pattern.test({ pathname: "/books/123" })); // true
|
|
|
|
* ```
|
|
|
|
*/
|
|
|
|
test(input: URLPatternInput, baseURL?: string): boolean;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Match the given input against the stored pattern.
|
|
|
|
*
|
|
|
|
* The input can either be provided as a url string (with an optional base),
|
|
|
|
* or as individual components in the form of an object.
|
|
|
|
*
|
|
|
|
* ```ts
|
|
|
|
* const pattern = new URLPattern("https://example.com/books/:id");
|
|
|
|
*
|
|
|
|
* // Match a url string.
|
2021-10-15 05:25:48 -04:00
|
|
|
* let match = pattern.exec("https://example.com/books/123");
|
2021-09-08 05:14:29 -04:00
|
|
|
* console.log(match.pathname.groups.id); // 123
|
|
|
|
*
|
|
|
|
* // Match a relative url with a base.
|
2021-10-15 05:25:48 -04:00
|
|
|
* match = pattern.exec("/books/123", "https://example.com");
|
2021-09-08 05:14:29 -04:00
|
|
|
* console.log(match.pathname.groups.id); // 123
|
|
|
|
*
|
|
|
|
* // Match an object of url components.
|
2021-10-15 05:25:48 -04:00
|
|
|
* match = pattern.exec({ pathname: "/books/123" });
|
2021-09-08 05:14:29 -04:00
|
|
|
* console.log(match.pathname.groups.id); // 123
|
|
|
|
* ```
|
|
|
|
*/
|
|
|
|
exec(input: URLPatternInput, baseURL?: string): URLPatternResult | null;
|
|
|
|
|
|
|
|
/** The pattern string for the `protocol`. */
|
|
|
|
readonly protocol: string;
|
|
|
|
/** The pattern string for the `username`. */
|
|
|
|
readonly username: string;
|
|
|
|
/** The pattern string for the `password`. */
|
|
|
|
readonly password: string;
|
|
|
|
/** The pattern string for the `hostname`. */
|
|
|
|
readonly hostname: string;
|
|
|
|
/** The pattern string for the `port`. */
|
|
|
|
readonly port: string;
|
|
|
|
/** The pattern string for the `pathname`. */
|
|
|
|
readonly pathname: string;
|
|
|
|
/** The pattern string for the `search`. */
|
|
|
|
readonly search: string;
|
|
|
|
/** The pattern string for the `hash`. */
|
|
|
|
readonly hash: string;
|
|
|
|
}
|