URL
Manipulate URLs, extract data from URLs and manage query parameters.
Eg URL
Interfaces
Iterator for the URLSearchParams class, used to iterate over key-value pairs in search parameters.
Type Aliases
interface URL
The URL interface represents an object providing static methods used for creating, parsing, and manipulating URLs in Deno.
Use the URL API for safely parsing, constructing, normalizing, and encoding URLs. This is the preferred way to work with URLs in Deno rather than manual string manipulation which can lead to errors and security issues.
Properties #
The hash property of the URL interface is a string that starts with a # and is followed by the fragment identifier of the URL.
It returns an empty string if the URL does not contain a fragment identifier.
The host property of the URL interface is a string that includes the URL.hostname and the URL.port if one is specified in the URL includes by including a : followed by the port number.
The hostname property of the URL interface is a string that represents the fully qualified domain name of the URL.
The origin property of the URL interface is a string that represents the origin of the URL, that is the URL.protocol, URL.host, and URL.port.
The password property of the URL interface is a string that represents the password specified in the URL.
The pathname property of the URL interface is a string that represents the path of the URL.
The port property of the URL interface is a string that represents the port of the URL if an explicit port has been specified in the URL.
The protocol property of the URL interface is a string that represents the protocol scheme of the URL and includes a trailing :.
The search property of the URL interface is a string that represents the search string, or the query string, of the URL.
This includes the ? character and the but excludes identifiers within the represented resource such as the URL.hash. More granular control can be found using URL.searchParams property.
#searchParams: URLSearchParams The searchParams property of the URL interface provides a direct interface to
query parameters through a URLSearchParams object.
This property offers a convenient way to:
- Parse URL query parameters
- Manipulate query strings
- Add, modify, or delete URL parameters
- Work with form data in a URL-encoded format
- Handle query string encoding/decoding automatically
Methods #
See #
variable URL
The URL interface represents an object providing static methods used for creating, parsing, and manipulating URLs.
Properties #
Methods #
Parses a URL string or URL object and returns a URL object.
Returns a boolean value indicating if a URL string is valid and can be parsed.
#createObjectURL(blob: Blob): string Creates a unique, temporary URL that represents a given Blob, File, or MediaSource object.
This method is particularly useful for:
- Creating URLs for dynamically generated content
- Working with blobs in a browser context
- Creating workers from dynamically generated code
- Setting up temporary URL references for file downloads
Note: Always call URL.revokeObjectURL() when you're done using the URL to prevent memory leaks.
#revokeObjectURL(url: string): void Revokes a previously created object URL, freeing the memory associated with it.
Important for memory management in applications that create dynamic URLs. Once an object URL is revoked:
- It can no longer be used to fetch the content it referenced
- The browser/runtime is allowed to release the memory or resources associated with it
- Workers created via the URL will continue to run, but the URL becomes invalid for new creations
For security and performance in Deno applications, always revoke object URLs as soon as they're no longer needed, especially when processing large files or generating many URLs.
See #
interface URLPattern
The URLPattern API provides a web platform primitive for matching URLs based on a convenient pattern syntax.
Common use cases for URLPattern include:
- Building routers for web applications
- Pattern-matching URLs for middleware
- Extracting parameters from URL paths
- URL-based feature toggles
- Routing in serverless and edge functions
The syntax is based on path-to-regexp, supporting wildcards, named capture groups, regular groups, and group modifiers - similar to Express.js route patterns.
Examples #
// Basic routing with URLPattern (similar to Express.js)
const routes = [
new URLPattern({ pathname: "/users" }),
new URLPattern({ pathname: "/users/:id" }),
new URLPattern({ pathname: "/products/:category/:id?" }),
];
// Check incoming request against routes
function handleRequest(req: Request) {
const url = new URL(req.url);
for (const route of routes) {
const match = route.exec(url);
if (match) {
// Extract parameters from the URL
const params = match.pathname.groups;
return new Response(`Matched: ${JSON.stringify(params)}`);
}
}
return new Response("Not found", { status: 404 });
}
// Matching different URL parts
const apiPattern = new URLPattern({
protocol: "https",
hostname: "api.example.com",
pathname: "/v:version/:resource/:id?",
search: "*", // Match any query string
});
const match = apiPattern.exec("https://api.example.com/v1/users/123?format=json");
if (match) {
console.log(match.pathname.groups.version); // "1"
console.log(match.pathname.groups.resource); // "users"
console.log(match.pathname.groups.id); // "123"
}
Properties #
#hasRegExpGroups: boolean Whether or not any of the specified groups use regexp groups.
Methods #
#test(input: URLPatternInput,baseURL?: string,): boolean Test if the given input matches the stored pattern.
The input can either be provided as an absolute URL string with an optional base,
relative URL string with a required base, or as individual components
in the form of an URLPatternInit object.
const pattern = new URLPattern("https://example.com/books/:id");
// Test an absolute 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
#exec(input: URLPatternInput,baseURL?: string,): URLPatternResult | null Match the given input against the stored pattern.
The input can either be provided as an absolute URL string with an optional base,
relative URL string with a required base, or as individual components
in the form of an URLPatternInit object.
const pattern = new URLPattern("https://example.com/books/:id");
// Match an absolute url string.
let match = pattern.exec("https://example.com/books/123");
console.log(match.pathname.groups.id); // 123
// Match a relative url with a base.
match = pattern.exec("/books/123", "https://example.com");
console.log(match.pathname.groups.id); // 123
// Match an object of url components.
match = pattern.exec({ pathname: "/books/123" });
console.log(match.pathname.groups.id); // 123
variable URLPattern
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.
// Specify the pattern as structured data.
const pattern = new URLPattern({ pathname: "/users/:user" });
const match = pattern.exec("https://blog.example.com/users/joe");
console.log(match.pathname.groups.user); // joe
// 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
// Specify a relative string pattern with a base URL.
const pattern = new URLPattern("/article/:id", "https://blog.example.com");
console.log(pattern.test("https://blog.example.com/article")); // false
console.log(pattern.test("https://blog.example.com/article/123")); // true
Properties #
#prototype: URLPattern interface URLPatternOptions
Options for the URLPattern constructor.
Properties #
#ignoreCase: boolean = false Enables case-insensitive matching.
interface URLPatternResult
URLPatternResult is the object returned from URLPattern.exec.
Properties #
#inputs: [URLPatternInit] | [URLPatternInit, string] The inputs provided when matching.
The matched result for the protocol matcher.
The matched result for the username matcher.
The matched result for the password matcher.
The matched result for the hostname matcher.
The matched result for the port matcher.
The matched result for the pathname matcher.
The matched result for the search matcher.
The matched result for the hash matcher.
interface URLSearchParams
URLSearchParams provides methods for working with the query string of a URL.
Use this interface to:
- Parse query parameters from URLs
- Build and modify query strings
- Handle form data (when used with FormData)
- Safely encode/decode URL parameter values
Properties #
Methods #
Appends a specified key/value pair as a new search parameter.
let searchParams = new URLSearchParams();
searchParams.append('name', 'first');
searchParams.append('name', 'second');
Deletes search parameters that match a name, and optional value, from the list of all search parameters.
let searchParams = new URLSearchParams([['name', 'value']]);
searchParams.delete('name');
searchParams.delete('name', 'value');
Returns all the values associated with a given search parameter as an array.
searchParams.getAll('name');
Returns the first value associated to the given search parameter.
searchParams.get('name');
Returns a boolean value indicating if a given parameter, or parameter and value pair, exists.
searchParams.has('name');
searchParams.has('name', 'value');
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.
searchParams.set('name', 'value');
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.
searchParams.sort();
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.
const params = new URLSearchParams([["a", "b"], ["c", "d"]]);
params.forEach((value, key, parent) => {
console.log(value, key, parent);
});
#keys(): URLSearchParamsIterator<string> Returns an iterator allowing to go through all keys contained in this object.
const params = new URLSearchParams([["a", "b"], ["c", "d"]]);
for (const key of params.keys()) {
console.log(key);
}
#values(): URLSearchParamsIterator<string> Returns an iterator allowing to go through all values contained in this object.
const params = new URLSearchParams([["a", "b"], ["c", "d"]]);
for (const value of params.values()) {
console.log(value);
}
#entries(): URLSearchParamsIterator<[string, string]> Returns an iterator allowing to go through all key/value pairs contained in this object.
const params = new URLSearchParams([["a", "b"], ["c", "d"]]);
for (const [key, value] of params.entries()) {
console.log(key, value);
}
#[[Symbol.iterator]](): URLSearchParamsIterator<[string, string]> Returns an iterator allowing to go through all key/value pairs contained in this object.
const params = new URLSearchParams([["a", "b"], ["c", "d"]]);
for (const [key, value] of params) {
console.log(key, value);
}
variable URLSearchParams
The URLSearchParams interface defines utility methods to work with the
query string of a URL. An object implementing URLSearchParams can directly
be used in a for...of structure to iterate over key/value pairs in the
same order as they appear in the query string.
Properties #
#prototype: URLSearchParams See #
interface URLSearchParamsIterator
Iterator for the URLSearchParams class, used to iterate over key-value pairs in search parameters.
Examples #
const url = new URL('https://example.org/path?a=1&b=2');
const queryString = url.search.substring(1); // Remove the leading '?'
const params = new URLSearchParams(queryString);
const iterator = params.entries();
console.log(iterator.next().value); // ['a', '1']
console.log(iterator.next().value); // ['b', '2']
Type Parameters #
#T Methods #
type alias URLPatternInput
Definition #
string | URLPatternInit