diff options
Diffstat (limited to 'cli/dts')
-rw-r--r-- | cli/dts/lib.deno.ns.d.ts | 713 | ||||
-rw-r--r-- | cli/dts/lib.deno.unstable.d.ts | 852 |
2 files changed, 1219 insertions, 346 deletions
diff --git a/cli/dts/lib.deno.ns.d.ts b/cli/dts/lib.deno.ns.d.ts index 1d72e1438..22f0409fe 100644 --- a/cli/dts/lib.deno.ns.d.ts +++ b/cli/dts/lib.deno.ns.d.ts @@ -3669,25 +3669,60 @@ declare namespace Deno { */ export type PermissionState = "granted" | "denied" | "prompt"; - /** @category Permissions */ + /** The permission descriptor for the `allow-run` permission, which controls + * access to what sub-processes can be executed by Deno. The option `command` + * allows scoping the permission to a specific executable. + * + * **Warning, in practice, `allow-run` is effectively the same as `allow-all` + * in the sense that malicious code could execute any arbitrary code on the + * host.** + * + * @category Permissions */ export interface RunPermissionDescriptor { name: "run"; + /** The `allow-run` permission can be scoped to a specific executable, + * which would be relative to the start-up CWD of the Deno CLI. */ command?: string | URL; } - /** @category Permissions */ + /** The permission descriptor for the `allow-read` permissions, which controls + * access to reading resources from the local host. The option `path` allows + * scoping the permission to a specific path (and if the path is a directory + * any sub paths). + * + * Permission granted under `allow-read` only allows runtime code to attempt + * to read, the underlying operating system may apply additional permissions. + * + * @category Permissions */ export interface ReadPermissionDescriptor { name: "read"; + /** The `allow-read` permission can be scoped to a specific path (and if + * the path is a directory, any sub paths). */ path?: string | URL; } - /** @category Permissions */ + /** The permission descriptor for the `allow-write` permissions, which + * controls access to writing to resources from the local host. The option + * `path` allow scoping the permission to a specific path (and if the path is + * a directory any sub paths). + * + * Permission granted under `allow-write` only allows runtime code to attempt + * to write, the underlying operating system may apply additional permissions. + * + * @category Permissions */ export interface WritePermissionDescriptor { name: "write"; + /** The `allow-write` permission can be scoped to a specific path (and if + * the path is a directory, any sub paths). */ path?: string | URL; } - /** @category Permissions */ + /** The permission descriptor for the `allow-net` permissions, which controls + * access to opening network ports and connecting to remote hosts via the + * network. The option `host` allows scoping the permission for outbound + * connection to a specific host and port. + * + * @category Permissions */ export interface NetPermissionDescriptor { name: "net"; /** Optional host string of the form `"<hostname>[:<port>]"`. Examples: @@ -3698,15 +3733,28 @@ declare namespace Deno { host?: string; } - /** @category Permissions */ + /** The permission descriptor for the `allow-env` permissions, which controls + * access to being able to read and write to the process environment variables + * as well as access other information about the environment. The option + * `variable` allows scoping the permission to a specific environment + * variable. + * + * @category Permissions */ export interface EnvPermissionDescriptor { name: "env"; + /** Optional environment variable name (e.g. `PATH`). */ variable?: string; } - /** @category Permissions */ + /** The permission descriptor for the `allow-sys` permissions, which controls + * access to sensitive host system information, which malicious code might + * attempt to exploit. The option `kind` allows scoping the permission to a + * specific piece of information. + * + * @category Permissions */ export interface SysPermissionDescriptor { name: "sys"; + /** The specific information to scope the permission to. */ kind?: | "loadavg" | "hostname" @@ -3717,13 +3765,26 @@ declare namespace Deno { | "getGid"; } - /** @category Permissions */ + /** The permission descriptor for the `allow-ffi` permissions, which controls + * access to loading _foreign_ code and interfacing with it via the + * [Foreign Function Interface API](https://deno.land/manual/runtime/ffi_api) + * available in Deno. The option `path` allows scoping the permission to a + * specific path on the host. + * + * @category Permissions */ export interface FfiPermissionDescriptor { name: "ffi"; + /** Optional path on the local host to scope the permission to. */ path?: string | URL; } - /** @category Permissions */ + /** The permission descriptor for the `allow-hrtime` permission, which + * controls if the runtime code has access to high resolution time. High + * resolution time is consider sensitive information, because it can be used + * by malicious code to gain information about the host that it might + * otherwise have access to. + * + * @category Permissions */ export interface HrtimePermissionDescriptor { name: "hrtime"; } @@ -3731,6 +3792,9 @@ declare namespace Deno { /** Permission descriptors which define a permission and can be queried, * requested, or revoked. * + * View the specifics of the individual descriptors for more information about + * each permission kind. + * * @category Permissions */ export type PermissionDescriptor = @@ -3743,12 +3807,18 @@ declare namespace Deno { | FfiPermissionDescriptor | HrtimePermissionDescriptor; - /** @category Permissions */ + /** The interface which defines what event types are supported by + * {@linkcode PermissionStatus} instances. + * + * @category Permissions */ export interface PermissionStatusEventMap { "change": Event; } - /** @category Permissions */ + /** An {@linkcode EventTarget} returned from the {@linkcode Deno.permissions} + * API which can provide updates to any state changes of the permission. + * + * @category Permissions */ export class PermissionStatus extends EventTarget { // deno-lint-ignore no-explicit-any onchange: ((this: PermissionStatus, ev: Event) => any) | null; @@ -3781,10 +3851,35 @@ declare namespace Deno { ): void; } - /** @category Permissions */ + /** + * Deno's permission management API. + * + * The class which provides the interface for the {@linkcode Deno.permissions} + * global instance and is based on the web platform + * [Permissions API](https://developer.mozilla.org/en-US/docs/Web/API/Permissions_API), + * though some proposed parts of the API which are useful in a server side + * runtime context were removed or abandoned in the web platform specification + * which is why it was chosen to locate it in the {@linkcode Deno} namespace + * instead. + * + * By default, if the `stdin`/`stdout` is TTY for the Deno CLI (meaning it can + * send and receive text), then the CLI will prompt the user to grant + * permission when an un-granted permission is requested. This behavior can + * be changed by using the `--no-prompt` command at startup. When prompting + * the CLI will request the narrowest permission possible, potentially making + * it annoying to the user. The permissions APIs allow the code author to + * request a wider set of permissions at one time in order to provide a better + * user experience. + * + * @category Permissions */ export class Permissions { /** Resolves to the current status of a permission. * + * Note, if the permission is already granted, `request()` will not prompt + * the user again, therefore `query()` is only necessary if you are going + * to react differently existing permissions without wanting to modify them + * or prompt the user to modify them. + * * ```ts * const status = await Deno.permissions.query({ name: "read", path: "/etc" }); * console.log(status.state); @@ -3805,6 +3900,9 @@ declare namespace Deno { /** Requests the permission, and resolves to the state of the permission. * + * If the permission is already granted, the user will not be prompted to + * grant the permission again. + * * ```ts * const status = await Deno.permissions.request({ name: "env" }); * if (status.state === "granted") { @@ -3819,48 +3917,127 @@ declare namespace Deno { /** Deno's permission management API. * + * It is a singleton instance of the {@linkcode Permissions} object and is + * based on the web platform + * [Permissions API](https://developer.mozilla.org/en-US/docs/Web/API/Permissions_API), + * though some proposed parts of the API which are useful in a server side + * runtime context were removed or abandoned in the web platform specification + * which is why it was chosen to locate it in the {@linkcode Deno} namespace + * instead. + * + * By default, if the `stdin`/`stdout` is TTY for the Deno CLI (meaning it can + * send and receive text), then the CLI will prompt the user to grant + * permission when an un-granted permission is requested. This behavior can + * be changed by using the `--no-prompt` command at startup. When prompting + * the CLI will request the narrowest permission possible, potentially making + * it annoying to the user. The permissions APIs allow the code author to + * request a wider set of permissions at one time in order to provide a better + * user experience. + * + * Requesting already granted permissions will not prompt the user and will + * return that the permission was granted. + * + * ### Querying + * + * ```ts + * const status = await Deno.permissions.query({ name: "read", path: "/etc" }); + * console.log(status.state); + * ``` + * + * ### Revoking + * + * ```ts + * import { assert } from "https://deno.land/std/testing/asserts.ts"; + * + * const status = await Deno.permissions.revoke({ name: "run" }); + * assert(status.state !== "granted") + * ``` + * + * ### Requesting + * + * ```ts + * const status = await Deno.permissions.request({ name: "env" }); + * if (status.state === "granted") { + * console.log("'env' permission is granted."); + * } else { + * console.log("'env' permission is denied."); + * } + * ``` + * * @category Permissions */ export const permissions: Permissions; - /** Build related information. + /** Information related to the build of the current Deno runtime. + * + * Users are discouraged from code branching based on this information, as + * assumptions about what is available in what build environment might change + * over time. Developers should specifically sniff out the features they + * intend to use. + * + * The intended use for the information is for logging and debugging purposes. * * @category Runtime Environment */ export const build: { - /** The LLVM target triple */ + /** The [LLVM](https://llvm.org/) target triple, which is the combination + * of `${arch}-${vendor}-${os}` and represent the specific build target that + * the current runtime was built for. */ target: string; - /** Instruction set architecture */ + /** Instruction set architecture that the Deno CLI was built for. */ arch: "x86_64" | "aarch64"; - /** Operating system */ + /** The operating system that the Deno CLI was built for. `"darwin"` is + * also known as OSX or MacOS. */ os: "darwin" | "linux" | "windows"; - /** Computer vendor */ + /** The computer vendor that the Deno CLI was built for. */ vendor: string; - /** Optional environment */ + /** Optional environment flags that were set for this build of Deno CLI. */ env?: string; }; - /** Version related information. + /** Version information related to the current Deno CLI runtime environment. + * + * Users are discouraged from code branching based on this information, as + * assumptions about what is available in what build environment might change + * over time. Developers should specifically sniff out the features they + * intend to use. + * + * The intended use for the information is for logging and debugging purposes. * * @category Runtime Environment */ export const version: { - /** Deno's version. For example: `"1.0.0"` */ + /** Deno CLI's version. For example: `"1.26.0"`. */ deno: string; - /** The V8 version used by Deno. For example: `"8.0.0.0"` */ + /** The V8 version used by Deno. For example: `"10.7.100.0"`. + * + * V8 is the underlying JavaScript runtime platform that Deno is built on + * top of. */ v8: string; - /** The TypeScript version used by Deno. For example: `"4.0.0"` */ + /** The TypeScript version used by Deno. For example: `"4.8.3"`. + * + * A version of the TypeScript type checker and language server is built-in + * to the Deno CLI. */ typescript: string; }; - /** Returns the script arguments to the program. If for example we run a - * program: + /** Returns the script arguments to the program. + * + * Give the following command line invocation of Deno: * + * ```sh * deno run --allow-read https://deno.land/std/examples/cat.ts /etc/passwd + * ``` * * Then `Deno.args` will contain: * + * ``` * [ "/etc/passwd" ] + * ``` + * + * If you are looking for a structured way to parse arguments, there is the + * [`std/flags`](https://deno.land/std/flags) module as part of the Deno + * standard library. * * @category Runtime Environment */ @@ -3878,25 +4055,34 @@ declare namespace Deno { */ export const customInspect: unique symbol; - /** The URL of the entrypoint module entered from the command-line. + /** The URL of the entrypoint module entered from the command-line. It + * requires read permission to the CWD. + * + * Also see {@linkcode ImportMeta} for other related information. * + * @tags allow-read * @category Runtime Environment */ export const mainModule: string; - /** @category File System */ - export type SymlinkOptions = { + /** Options that can be used with {@linkcode symlink} and + * {@linkcode symlinkSync}. + * + * @category File System */ + export interface SymlinkOptions { + /** If the symbolic link should be either a file or directory. This option + * only applies to Windows and is ignored on other operating systems. */ type: "file" | "dir"; - }; + } /** * Creates `newpath` as a symbolic link to `oldpath`. * - * The options.type parameter can be set to `file` or `dir`. This argument is only - * available on Windows and ignored on other platforms. + * The `options.type` parameter can be set to `"file"` or `"dir"`. This + * argument is only available on Windows and ignored on other platforms. * * ```ts - * Deno.symlinkSync("old/name", "new/name"); + * await Deno.symlink("old/name", "new/name"); * ``` * * Requires full `allow-read` and `allow-write` permissions. @@ -3904,20 +4090,20 @@ declare namespace Deno { * @tags allow-read, allow-write * @category File System */ - export function symlinkSync( + export function symlink( oldpath: string | URL, newpath: string | URL, options?: SymlinkOptions, - ): void; + ): Promise<void>; /** * Creates `newpath` as a symbolic link to `oldpath`. * - * The options.type parameter can be set to `file` or `dir`. This argument is only - * available on Windows and ignored on other platforms. + * The `options.type` parameter can be set to `"file"` or `"dir"`. This + * argument is only available on Windows and ignored on other platforms. * * ```ts - * await Deno.symlink("old/name", "new/name"); + * Deno.symlinkSync("old/name", "new/name"); * ``` * * Requires full `allow-read` and `allow-write` permissions. @@ -3925,71 +4111,94 @@ declare namespace Deno { * @tags allow-read, allow-write * @category File System */ - export function symlink( + export function symlinkSync( oldpath: string | URL, newpath: string | URL, options?: SymlinkOptions, - ): Promise<void>; + ): void; /** - * Synchronously truncates or extends the specified file stream, to reach the - * specified `len`. + * Truncates or extends the specified file stream, to reach the specified + * `len`. * - * If `len` is not specified then the entire file contents are truncated as if len was set to 0. + * If `len` is not specified then the entire file contents are truncated as if + * `len` was set to `0`. * - * if the file previously was larger than this new length, the extra data is lost. + * If the file previously was larger than this new length, the extra data is + * lost. * - * if the file previously was shorter, it is extended, and the extended part reads as null bytes ('\0'). + * If the file previously was shorter, it is extended, and the extended part + * reads as null bytes ('\0'). + * + * ### Truncate the entire file * * ```ts - * // truncate the entire file - * const file = Deno.openSync("my_file.txt", { read: true, write: true, truncate: true, create: true }); - * Deno.ftruncateSync(file.rid); + * const file = await Deno.open( + * "my_file.txt", + * { read: true, write: true, create: true } + * ); + * await Deno.ftruncate(file.rid); * ``` * + * ### Truncate part of the file + * * ```ts - * // truncate part of the file - * const file = Deno.openSync("my_file.txt", { read: true, write: true, create: true }); - * Deno.writeSync(file.rid, new TextEncoder().encode("Hello World")); - * Deno.ftruncateSync(file.rid, 7); - * Deno.seekSync(file.rid, 0, Deno.SeekMode.Start); + * const file = await Deno.open( + * "my_file.txt", + * { read: true, write: true, create: true } + * ); + * await Deno.write(file.rid, new TextEncoder().encode("Hello World")); + * await Deno.ftruncate(file.rid, 7); * const data = new Uint8Array(32); - * Deno.readSync(file.rid, data); + * await Deno.read(file.rid, data); * console.log(new TextDecoder().decode(data)); // Hello W * ``` * * @category File System */ - export function ftruncateSync(rid: number, len?: number): void; + export function ftruncate(rid: number, len?: number): Promise<void>; /** - * Truncates or extends the specified file stream, to reach the specified `len`. + * Synchronously truncates or extends the specified file stream, to reach the + * specified `len`. * - * If `len` is not specified then the entire file contents are truncated as if len was set to 0. + * If `len` is not specified then the entire file contents are truncated as if + * `len` was set to `0`. * - * If the file previously was larger than this new length, the extra data is lost. + * If the file previously was larger than this new length, the extra data is + * lost. * - * If the file previously was shorter, it is extended, and the extended part reads as null bytes ('\0'). + * If the file previously was shorter, it is extended, and the extended part + * reads as null bytes ('\0'). + * + * ### Truncate the entire file * * ```ts - * // truncate the entire file - * const file = await Deno.open("my_file.txt", { read: true, write: true, create: true }); - * await Deno.ftruncate(file.rid); + * const file = Deno.openSync( + * "my_file.txt", + * { read: true, write: true, truncate: true, create: true } + * ); + * Deno.ftruncateSync(file.rid); * ``` * + * ### Truncate part of the file + * * ```ts - * // truncate part of the file - * const file = await Deno.open("my_file.txt", { read: true, write: true, create: true }); - * await Deno.write(file.rid, new TextEncoder().encode("Hello World")); - * await Deno.ftruncate(file.rid, 7); + * const file = Deno.openSync( + * "my_file.txt", + * { read: true, write: true, create: true } + * ); + * Deno.writeSync(file.rid, new TextEncoder().encode("Hello World")); + * Deno.ftruncateSync(file.rid, 7); + * Deno.seekSync(file.rid, 0, Deno.SeekMode.Start); * const data = new Uint8Array(32); - * await Deno.read(file.rid, data); + * Deno.readSync(file.rid, data); * console.log(new TextDecoder().decode(data)); // Hello W * ``` * * @category File System */ - export function ftruncate(rid: number, len?: number): Promise<void>; + export function ftruncateSync(rid: number, len?: number): void; /** * Synchronously changes the access (`atime`) and modification (`mtime`) times @@ -4028,32 +4237,35 @@ declare namespace Deno { ): Promise<void>; /** - * Synchronously returns a `Deno.FileInfo` for the given file stream. + * Returns a `Deno.FileInfo` for the given file stream. * * ```ts * import { assert } from "https://deno.land/std/testing/asserts.ts"; - * const file = Deno.openSync("file.txt", { read: true }); - * const fileInfo = Deno.fstatSync(file.rid); + * + * const file = await Deno.open("file.txt", { read: true }); + * const fileInfo = await Deno.fstat(file.rid); * assert(fileInfo.isFile); * ``` * * @category File System */ - export function fstatSync(rid: number): FileInfo; + export function fstat(rid: number): Promise<FileInfo>; /** - * Returns a `Deno.FileInfo` for the given file stream. + * Synchronously returns a {@linkcode Deno.FileInfo} for the given file + * stream. * * ```ts * import { assert } from "https://deno.land/std/testing/asserts.ts"; - * const file = await Deno.open("file.txt", { read: true }); - * const fileInfo = await Deno.fstat(file.rid); + * + * const file = Deno.openSync("file.txt", { read: true }); + * const fileInfo = Deno.fstatSync(file.rid); * assert(fileInfo.isFile); * ``` * * @category File System */ - export function fstat(rid: number): Promise<FileInfo>; + export function fstatSync(rid: number): FileInfo; /** * Synchronously changes the access (`atime`) and modification (`mtime`) times @@ -4095,22 +4307,52 @@ declare namespace Deno { mtime: number | Date, ): Promise<void>; - /** @category HTTP Server */ + /** The event yielded from an {@linkcode HttpConn} which represents an HTTP + * request from a remote client. + * + * @category HTTP Server */ export interface RequestEvent { + /** The request from the client in the form of the web platform + * {@linkcode Request}. */ readonly request: Request; - respondWith(r: Response | Promise<Response>): Promise<void>; + /** The method to be used to respond to the event. The response needs to + * either be an instance of {@linkcode Response} or a promise that resolves + * with an instance of `Response`. + * + * When the response is successfully processed then the promise returned + * will be resolved. If there are any issues with sending the response, + * the promise will be rejected. */ + respondWith(r: Response | PromiseLike<Response>): Promise<void>; } - /** @category HTTP Server */ + /** The async iterable that is returned from {@linkcode Deno.serveHttp} which + * yields up {@linkcode RequestEvent} events, representing individual + * requests on the HTTP server connection. + * + * @category HTTP Server */ export interface HttpConn extends AsyncIterable<RequestEvent> { + /** The resource ID associated with this connection. Generally users do not + * need to be aware of this identifier. */ readonly rid: number; + /** An alternative to the async iterable interface which provides promises + * which resolve with either a {@linkcode RequestEvent} when there is + * another request or `null` when the client has closed the connection. */ nextRequest(): Promise<RequestEvent | null>; + /** Initiate a server side closure of the connection, indicating to the + * client that you refuse to accept any more requests on this connection. + * + * Typically the client closes the connection, which will result in the + * async iterable terminating or the `nextRequest()` method returning + * `null`. */ close(): void; } /** - * Services HTTP requests given a TCP or TLS socket. + * Provides an interface to handle HTTP request and responses over TCP or TLS + * connections. The method returns an {@linkcode HttpConn} which yields up + * {@linkcode RequestEvent} events, which utilize the web platform standard + * {@linkcode Request} and {@linkcode Response} objects to handle the request. * * ```ts * const conn = Deno.listen({ port: 80 }); @@ -4121,10 +4363,7 @@ declare namespace Deno { * } * ``` * - * If `httpConn.nextRequest()` encounters an error or returns `null` - * then the underlying HttpConn resource is closed automatically. - * - * Alternatively, you can also use the Async Iterator approach: + * Alternatively, you can also use the async iterator approach: * * ```ts * async function handleHttp(conn: Deno.Conn) { @@ -4138,10 +4377,18 @@ declare namespace Deno { * } * ``` * - * Note that this function *consumes* the given connection passed to it, thus the - * original connection will be unusable after calling this. Additionally, you - * need to ensure that the connection is not being used elsewhere when calling - * this function in order for the connection to be consumed properly. + * If `httpConn.nextRequest()` encounters an error or returns `null` then the + * underlying {@linkcode HttpConn} resource is closed automatically. + * + * Also see the experimental Flash HTTP server {@linkcode Deno.serve} which + * provides a ground up rewrite of handling of HTTP requests and responses + * within the Deno CLI. + * + * Note that this function *consumes* the given connection passed to it, thus + * the original connection will be unusable after calling this. Additionally, + * you need to ensure that the connection is not being used elsewhere when + * calling this function in order for the connection to be consumed properly. + * * For instance, if there is a `Promise` that is waiting for read operation on * the connection to complete, it is considered that the connection is being * used elsewhere. In such a case, this function will fail. @@ -4150,31 +4397,45 @@ declare namespace Deno { */ export function serveHttp(conn: Conn): HttpConn; - /** @category Web Sockets */ + /** The object that is returned from a {@linkcode Deno.upgradeWebSocket} + * request. + * + * @category Web Sockets */ export interface WebSocketUpgrade { + /** The response object that represents the HTTP response to the client, + * which should be used to the {@linkcode RequestEvent} `.respondWith()` for + * the upgrade to be successful. */ response: Response; + /** The {@linkcode WebSocket} interface to communicate to the client via a + * web socket. */ socket: WebSocket; } - /** @category Web Sockets */ + /** Options which can be set when performing a + * {@linkcode Deno.upgradeWebSocket} upgrade of a {@linkcode Request} + * + * @category Web Sockets */ export interface UpgradeWebSocketOptions { + /** Sets the `.protocol` property on the client side web socket to the + * value provided here, which should be one of the strings specified in the + * `protocols` parameter when requesting the web socket. This is intended + * for clients and servers to specify sub-protocols to use to communicate to + * each other. */ protocol?: string; - /** - * If the client does not respond to this frame with a + /** If the client does not respond to this frame with a * `pong` within the timeout specified, the connection is deemed * unhealthy and is closed. The `close` and `error` event will be emitted. * - * The default is 120 seconds. Set to 0 to disable timeouts. - */ + * The default is 120 seconds. Set to `0` to disable timeouts. */ idleTimeout?: number; } /** - * Used to upgrade an incoming HTTP request to a WebSocket. + * Upgrade an incoming HTTP request to a WebSocket. * - * Given a request, returns a pair of WebSocket and Response. The original - * request must be responded to with the returned response for the websocket - * upgrade to be successful. + * Given a {@linkcode Request}, returns a pair of {@linkcode WebSocket} and + * {@linkcode Response} instances. The original request must be responded to + * with the returned response for the websocket upgrade to be successful. * * ```ts * const conn = Deno.listen({ port: 80 }); @@ -4199,7 +4460,7 @@ declare namespace Deno { * completed, upgrading fails. * * This operation does not yet consume the request or open the websocket. This - * only happens once the returned response has been passed to `respondWith`. + * only happens once the returned response has been passed to `respondWith()`. * * @category Web Sockets */ @@ -4208,11 +4469,16 @@ declare namespace Deno { options?: UpgradeWebSocketOptions, ): WebSocketUpgrade; - /** Send a signal to process under given `pid`. + /** Send a signal to process under given `pid`. The value and meaning of the + * `signal` to the process is operating system and process dependant. + * {@linkcode Signal} provides the most common signals. + * + * The term `kill` is adopted from the UNIX-like command line command `kill` + * which also signals processes. * * If `pid` is negative, the signal will be sent to the process group - * identified by `pid`. An error will be thrown if a negative - * `pid` is used on Windows. + * identified by `pid`. An error will be thrown if a negative `pid` is used on + * Windows. * * ```ts * const p = Deno.run({ @@ -4227,9 +4493,11 @@ declare namespace Deno { * @tags allow-run * @category Sub Process */ - export function kill(pid: number, signo: Signal): void; + export function kill(pid: number, signal: Signal): void; - /** The type of the resource record. + /** The type of the resource record to resolve via DNS using + * {@linkcode Deno.resolveDns}. + * * Only the listed types are supported currently. * * @category Network @@ -4248,45 +4516,62 @@ declare namespace Deno { | "SRV" | "TXT"; - /** @category Network */ + /** + * Options which can be set when using {@linkcode Deno.resolveDns}. + * + * @category Network */ export interface ResolveDnsOptions { /** The name server to be used for lookups. - * If not specified, defaults to the system configuration e.g. `/etc/resolv.conf` on Unix. */ + * + * If not specified, defaults to the system configuration. For example + * `/etc/resolv.conf` on Unix-like systems. */ nameServer?: { - /** The IP address of the name server */ + /** The IP address of the name server. */ ipAddr: string; /** The port number the query will be sent to. - * If not specified, defaults to 53. */ + * + * If not specified, defaults to `53`. */ port?: number; }; } - /** If `resolveDns` is called with "CAA" record type specified, it will return - * an array of this interface. + /** If {@linkcode Deno.resolveDns} is called with `"CAA"` record type + * specified, it will resolve with an array of objects with this interface. * * @category Network */ export interface CAARecord { + /** If `true`, indicates that the corresponding property tag **must** be + * understood if the semantics of the CAA record are to be correctly + * interpreted by an issuer. + * + * Issuers **must not** issue certificates for a domain if the relevant CAA + * Resource Record set contains unknown property tags that have `critical` + * set. */ critical: boolean; + /** An string that represents the identifier of the property represented by + * the record. */ tag: string; + /** The value associated with the tag. */ value: string; } - /** If `resolveDns` is called with "MX" record type specified, it will return - * an array of this interface. + /** If {@linkcode Deno.resolveDns} is called with `"MX"` record type + * specified, it will return an array of objects with this interface. * - * @category Network - */ + * @category Network */ export interface MXRecord { + /** A priority value, which is a relative value compared to the other + * preferences of MX records for the domain. */ preference: number; + /** The server that mail should be delivered to. */ exchange: string; } - /** If `resolveDns` is called with "NAPTR" record type specified, it will - * return an array of this interface. + /** If {@linkcode Deno.resolveDns} is called with `"NAPTR"` record type + * specified, it will return an array of objects with this interface. * - * @category Network - */ + * @category Network */ export interface NAPTRRecord { order: number; preference: number; @@ -4296,11 +4581,10 @@ declare namespace Deno { replacement: string; } - /** If `resolveDns` is called with "SOA" record type specified, it will return - * an array of this interface. + /** If {@linkcode Deno.resolveDns} is called with `"SOA"` record type + * specified, it will return an array of objects with this interface. * - * @category Network - */ + * @category Network */ export interface SOARecord { mname: string; rname: string; @@ -4311,8 +4595,8 @@ declare namespace Deno { minimum: number; } - /** If `resolveDns` is called with "SRV" record type specified, it will return - * an array of this interface. + /** If {@linkcode Deno.resolveDns} is called with `"SRV"` record type + * specified, it will return an array of objects with this interface. * * @category Network */ @@ -4323,49 +4607,210 @@ declare namespace Deno { target: string; } - /** @category Network */ + /** + * Performs DNS resolution against the given query, returning resolved + * records. + * + * Fails in the cases such as: + * + * - the query is in invalid format. + * - the options have an invalid parameter. For example `nameServer.port` is + * beyond the range of 16-bit unsigned integer. + * - the request timed out. + * + * ```ts + * const a = await Deno.resolveDns("example.com", "A"); + * + * const aaaa = await Deno.resolveDns("example.com", "AAAA", { + * nameServer: { ipAddr: "8.8.8.8", port: 53 }, + * }); + * ``` + * + * Requires `allow-net` permission. + * + * @tags allow-net + * @category Network + */ export function resolveDns( query: string, recordType: "A" | "AAAA" | "ANAME" | "CNAME" | "NS" | "PTR", options?: ResolveDnsOptions, ): Promise<string[]>; - /** @category Network */ + /** + * Performs DNS resolution against the given query, returning resolved + * records. + * + * Fails in the cases such as: + * + * - the query is in invalid format. + * - the options have an invalid parameter. For example `nameServer.port` is + * beyond the range of 16-bit unsigned integer. + * - the request timed out. + * + * ```ts + * const a = await Deno.resolveDns("example.com", "A"); + * + * const aaaa = await Deno.resolveDns("example.com", "AAAA", { + * nameServer: { ipAddr: "8.8.8.8", port: 53 }, + * }); + * ``` + * + * Requires `allow-net` permission. + * + * @tags allow-net + * @category Network + */ export function resolveDns( query: string, recordType: "CAA", options?: ResolveDnsOptions, ): Promise<CAARecord[]>; - /** @category Network */ + /** + * Performs DNS resolution against the given query, returning resolved + * records. + * + * Fails in the cases such as: + * + * - the query is in invalid format. + * - the options have an invalid parameter. For example `nameServer.port` is + * beyond the range of 16-bit unsigned integer. + * - the request timed out. + * + * ```ts + * const a = await Deno.resolveDns("example.com", "A"); + * + * const aaaa = await Deno.resolveDns("example.com", "AAAA", { + * nameServer: { ipAddr: "8.8.8.8", port: 53 }, + * }); + * ``` + * + * Requires `allow-net` permission. + * + * @tags allow-net + * @category Network + */ export function resolveDns( query: string, recordType: "MX", options?: ResolveDnsOptions, ): Promise<MXRecord[]>; - /** @category Network */ + /** + * Performs DNS resolution against the given query, returning resolved + * records. + * + * Fails in the cases such as: + * + * - the query is in invalid format. + * - the options have an invalid parameter. For example `nameServer.port` is + * beyond the range of 16-bit unsigned integer. + * - the request timed out. + * + * ```ts + * const a = await Deno.resolveDns("example.com", "A"); + * + * const aaaa = await Deno.resolveDns("example.com", "AAAA", { + * nameServer: { ipAddr: "8.8.8.8", port: 53 }, + * }); + * ``` + * + * Requires `allow-net` permission. + * + * @tags allow-net + * @category Network + */ export function resolveDns( query: string, recordType: "NAPTR", options?: ResolveDnsOptions, ): Promise<NAPTRRecord[]>; - /** @category Network */ + /** + * Performs DNS resolution against the given query, returning resolved + * records. + * + * Fails in the cases such as: + * + * - the query is in invalid format. + * - the options have an invalid parameter. For example `nameServer.port` is + * beyond the range of 16-bit unsigned integer. + * - the request timed out. + * + * ```ts + * const a = await Deno.resolveDns("example.com", "A"); + * + * const aaaa = await Deno.resolveDns("example.com", "AAAA", { + * nameServer: { ipAddr: "8.8.8.8", port: 53 }, + * }); + * ``` + * + * Requires `allow-net` permission. + * + * @tags allow-net + * @category Network + */ export function resolveDns( query: string, recordType: "SOA", options?: ResolveDnsOptions, ): Promise<SOARecord[]>; - /** @category Network */ + /** + * Performs DNS resolution against the given query, returning resolved + * records. + * + * Fails in the cases such as: + * + * - the query is in invalid format. + * - the options have an invalid parameter. For example `nameServer.port` is + * beyond the range of 16-bit unsigned integer. + * - the request timed out. + * + * ```ts + * const a = await Deno.resolveDns("example.com", "A"); + * + * const aaaa = await Deno.resolveDns("example.com", "AAAA", { + * nameServer: { ipAddr: "8.8.8.8", port: 53 }, + * }); + * ``` + * + * Requires `allow-net` permission. + * + * @tags allow-net + * @category Network + */ export function resolveDns( query: string, recordType: "SRV", options?: ResolveDnsOptions, ): Promise<SRVRecord[]>; - /** @category Network */ + /** + * Performs DNS resolution against the given query, returning resolved + * records. + * + * Fails in the cases such as: + * + * - the query is in invalid format. + * - the options have an invalid parameter. For example `nameServer.port` is + * beyond the range of 16-bit unsigned integer. + * - the request timed out. + * + * ```ts + * const a = await Deno.resolveDns("example.com", "A"); + * + * const aaaa = await Deno.resolveDns("example.com", "AAAA", { + * nameServer: { ipAddr: "8.8.8.8", port: 53 }, + * }); + * ``` + * + * Requires `allow-net` permission. + * + * @tags allow-net + * @category Network + */ export function resolveDns( query: string, recordType: "TXT", @@ -4373,11 +4818,15 @@ declare namespace Deno { ): Promise<string[][]>; /** - * Performs DNS resolution against the given query, returning resolved records. + * Performs DNS resolution against the given query, returning resolved + * records. + * * Fails in the cases such as: - * - the query is in invalid format - * - the options have an invalid parameter, e.g. `nameServer.port` is beyond the range of 16-bit unsigned integer - * - timed out + * + * - the query is in invalid format. + * - the options have an invalid parameter. For example `nameServer.port` is + * beyond the range of 16-bit unsigned integer. + * - the request timed out. * * ```ts * const a = await Deno.resolveDns("example.com", "A"); diff --git a/cli/dts/lib.deno.unstable.d.ts b/cli/dts/lib.deno.unstable.d.ts index ba6d03c7e..cde76d4d8 100644 --- a/cli/dts/lib.deno.unstable.d.ts +++ b/cli/dts/lib.deno.unstable.d.ts @@ -8,28 +8,38 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * + * The interface for defining a benchmark test using {@linkcode Deno.bench}. + * * @category Testing */ export interface BenchDefinition { + /** The test function which will be benchmarked. */ fn: () => void | Promise<void>; + /** The name of the test, which will be used in displaying the results. */ name: string; + /** If truthy, the benchmark test will be ignored/skipped. */ ignore?: boolean; /** Group name for the benchmark. - * Grouped benchmarks produce a time summary */ + * + * Grouped benchmarks produce a group time summary, where the difference + * in performance between each test of the group is compared. */ group?: string; - /** Benchmark should be used as the baseline for other benchmarks - * If there are multiple baselines in a group, the first one is used as the baseline */ + /** Benchmark should be used as the baseline for other benchmarks. + * + * If there are multiple baselines in a group, the first one is used as the + * baseline. */ baseline?: boolean; /** If at least one bench has `only` set to true, only run benches that have - * `only` set to true and fail the bench suite. */ + * `only` set to `true` and fail the bench suite. */ only?: boolean; /** Ensure the bench case does not prematurely cause the process to exit, - * for example via a call to `Deno.exit`. Defaults to true. */ + * for example via a call to {@linkcode Deno.exit}. Defaults to `true`. */ sanitizeExit?: boolean; - /** Specifies the permissions that should be used to run the bench. - * Set this to "inherit" to keep the calling thread's permissions. - * Set this to "none" to revoke all permissions. + * + * Set this to `"inherit"` to keep the calling thread's permissions. + * + * Set this to `"none"` to revoke all permissions. * * Defaults to "inherit". */ @@ -38,15 +48,18 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * - * Register a bench which will be run when `deno bench` is used on the command - * line and the containing module looks like a bench module. - * `fn` can be async if required. + * Register a benchmark test which will be run when `deno bench` is used on + * the command line and the containing module looks like a bench module. + * + * If the test function (`fn`) returns a promise or is async, the test runner + * will await resolution to consider the test complete. + * * ```ts - * import {assert, fail, assertEquals} from "https://deno.land/std/testing/asserts.ts"; + * import { assertEquals } from "https://deno.land/std/testing/asserts.ts"; * * Deno.bench({ * name: "example test", - * fn(): void { + * fn() { * assertEquals("world", "world"); * }, * }); @@ -54,7 +67,7 @@ declare namespace Deno { * Deno.bench({ * name: "example ignored test", * ignore: Deno.build.os === "windows", - * fn(): void { + * fn() { * // This test is ignored only on Windows machines * }, * }); @@ -75,18 +88,20 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * - * Register a bench which will be run when `deno bench` is used on the command - * line and the containing module looks like a bench module. - * `fn` can be async if required. + * Register a benchmark test which will be run when `deno bench` is used on + * the command line and the containing module looks like a bench module. + * + * If the test function (`fn`) returns a promise or is async, the test runner + * will await resolution to consider the test complete. * * ```ts - * import {assert, fail, assertEquals} from "https://deno.land/std/testing/asserts.ts"; + * import { assertEquals } from "https://deno.land/std/testing/asserts.ts"; * - * Deno.bench("My test description", (): void => { + * Deno.bench("My test description", () => { * assertEquals("hello", "hello"); * }); * - * Deno.bench("My async test description", async (): Promise<void> => { + * Deno.bench("My async test description", async () => { * const decoder = new TextDecoder("utf-8"); * const data = await Deno.readFile("hello_world.txt"); * assertEquals(decoder.decode(data), "Hello world"); @@ -102,18 +117,20 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * - * Register a bench which will be run when `deno bench` is used on the command - * line and the containing module looks like a bench module. - * `fn` can be async if required. Declared function must have a name. + * Register a benchmark test which will be run when `deno bench` is used on + * the command line and the containing module looks like a bench module. + * + * If the test function (`fn`) returns a promise or is async, the test runner + * will await resolution to consider the test complete. * * ```ts - * import {assert, fail, assertEquals} from "https://deno.land/std/testing/asserts.ts"; + * import { assertEquals } from "https://deno.land/std/testing/asserts.ts"; * - * Deno.bench(function myTestName(): void { + * Deno.bench(function myTestName() { * assertEquals("hello", "hello"); * }); * - * Deno.bench(async function myOtherTestName(): Promise<void> { + * Deno.bench(async function myOtherTestName() { * const decoder = new TextDecoder("utf-8"); * const data = await Deno.readFile("hello_world.txt"); * assertEquals(decoder.decode(data), "Hello world"); @@ -126,22 +143,32 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * - * Register a bench which will be run when `deno bench` is used on the command - * line and the containing module looks like a bench module. - * `fn` can be async if required. + * Register a benchmark test which will be run when `deno bench` is used on + * the command line and the containing module looks like a bench module. + * + * If the test function (`fn`) returns a promise or is async, the test runner + * will await resolution to consider the test complete. * * ```ts - * import {assert, fail, assertEquals} from "https://deno.land/std/testing/asserts.ts"; + * import { assertEquals } from "https://deno.land/std/testing/asserts.ts"; * - * Deno.bench("My test description", { permissions: { read: true } }, (): void => { - * assertEquals("hello", "hello"); - * }); + * Deno.bench( + * "My test description", + * { permissions: { read: true } }, + * () => { + * assertEquals("hello", "hello"); + * } + * ); * - * Deno.bench("My async test description", { permissions: { read: false } }, async (): Promise<void> => { - * const decoder = new TextDecoder("utf-8"); - * const data = await Deno.readFile("hello_world.txt"); - * assertEquals(decoder.decode(data), "Hello world"); - * }); + * Deno.bench( + * "My async test description", + * { permissions: { read: false } }, + * async () => { + * const decoder = new TextDecoder("utf-8"); + * const data = await Deno.readFile("hello_world.txt"); + * assertEquals(decoder.decode(data), "Hello world"); + * } + * ); * ``` * * @category Testing @@ -154,22 +181,30 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * - * Register a bench which will be run when `deno bench` is used on the command - * line and the containing module looks like a bench module. - * `fn` can be async if required. + * Register a benchmark test which will be run when `deno bench` is used on + * the command line and the containing module looks like a bench module. + * + * If the test function (`fn`) returns a promise or is async, the test runner + * will await resolution to consider the test complete. * * ```ts - * import {assert, fail, assertEquals} from "https://deno.land/std/testing/asserts.ts"; + * import { assertEquals } from "https://deno.land/std/testing/asserts.ts"; * - * Deno.bench({ name: "My test description", permissions: { read: true } }, (): void => { - * assertEquals("hello", "hello"); - * }); + * Deno.bench( + * { name: "My test description", permissions: { read: true } }, + * () => { + * assertEquals("hello", "hello"); + * } + * ); * - * Deno.bench({ name: "My async test description", permissions: { read: false } }, async (): Promise<void> => { - * const decoder = new TextDecoder("utf-8"); - * const data = await Deno.readFile("hello_world.txt"); - * assertEquals(decoder.decode(data), "Hello world"); - * }); + * Deno.bench( + * { name: "My async test description", permissions: { read: false } }, + * async () => { + * const decoder = new TextDecoder("utf-8"); + * const data = await Deno.readFile("hello_world.txt"); + * assertEquals(decoder.decode(data), "Hello world"); + * } + * ); * ``` * * @category Testing @@ -181,22 +216,30 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * - * Register a bench which will be run when `deno bench` is used on the command - * line and the containing module looks like a bench module. - * `fn` can be async if required. Declared function must have a name. + * Register a benchmark test which will be run when `deno bench` is used on + * the command line and the containing module looks like a bench module. + * + * If the test function (`fn`) returns a promise or is async, the test runner + * will await resolution to consider the test complete. * * ```ts - * import {assert, fail, assertEquals} from "https://deno.land/std/testing/asserts.ts"; + * import { assertEquals } from "https://deno.land/std/testing/asserts.ts"; * - * Deno.bench({ permissions: { read: true } }, function myTestName(): void { - * assertEquals("hello", "hello"); - * }); + * Deno.bench( + * { permissions: { read: true } }, + * function myTestName() { + * assertEquals("hello", "hello"); + * } + * ); * - * Deno.bench({ permissions: { read: false } }, async function myOtherTestName(): Promise<void> { - * const decoder = new TextDecoder("utf-8"); - * const data = await Deno.readFile("hello_world.txt"); - * assertEquals(decoder.decode(data), "Hello world"); - * }); + * Deno.bench( + * { permissions: { read: false } }, + * async function myOtherTestName() { + * const decoder = new TextDecoder("utf-8"); + * const data = await Deno.readFile("hello_world.txt"); + * assertEquals(decoder.decode(data), "Hello world"); + * } + * ); * ``` * * @category Testing @@ -220,7 +263,7 @@ declare namespace Deno { * This API is under consideration to determine if permissions are required to * call it. * - * NOTE: This API is not implemented on Windows + * *Note*: This API is not implemented on Windows * * @category File System */ @@ -246,49 +289,52 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * + * Information returned from a call to {@linkcode Deno.systemMemoryInfo}. + * * @category Runtime Environment */ export interface SystemMemoryInfo { - /** Total installed memory */ + /** Total installed memory in bytes. */ total: number; - /** Unused memory */ + /** Unused memory in bytes. */ free: number; - /** Estimation of how much memory is available for starting new - * applications, without swapping. Unlike the data provided by the cache or + /** Estimation of how much memory, in bytes, is available for starting new + * applications, without swapping. Unlike the data provided by the cache or * free fields, this field takes into account page cache and also that not - * all reclaimable memory slabs will be reclaimed due to items being in use + * all reclaimable memory will be reclaimed due to items being in use. */ available: number; - /** Memory used by kernel buffers */ + /** Memory used by kernel buffers. */ buffers: number; - /** Memory used by the page cache and slabs */ + /** Memory used by the page cache and slabs. */ cached: number; - /** Total swap memory */ + /** Total swap memory. */ swapTotal: number; - /** Unused swap memory */ + /** Unused swap memory. */ swapFree: number; } /** **UNSTABLE**: New API, yet to be vetted. * - * The information of the network interface. + * The information for a network interface returned from a call to + * {@linkcode Deno.networkInterfaces}. * * @category Network */ export interface NetworkInterfaceInfo { - /** The network interface name */ + /** The network interface name. */ name: string; - /** The IP protocol version */ + /** The IP protocol version. */ family: "IPv4" | "IPv6"; - /** The IP address */ + /** The IP address bound to the interface. */ address: string; - /** The netmask */ + /** The netmask applied to the interface. */ netmask: string; - /** The IPv6 scope id or null */ + /** The IPv6 scope id or `null`. */ scopeid: number | null; - /** The CIDR range */ + /** The CIDR range. */ cidr: string; - /** The MAC address */ + /** The MAC address. */ mac: string; } @@ -309,7 +355,8 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * - * Returns the user id of the process on POSIX platforms. Returns null on Windows. + * Returns the user id of the Deno process on POSIX platforms. Returns `null` + * on Windows. * * ```ts * console.log(Deno.getUid()); @@ -324,7 +371,8 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * - * Returns the group id of the process on POSIX platforms. Returns null on windows. + * Returns the group id of the process on POSIX platforms. Returns `null` on + * Windows. * * ```ts * console.log(Deno.getGid()); @@ -367,37 +415,47 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * + * The native boolean type for interfacing to foreign functions. + * * @category FFI */ type NativeBooleanType = "bool"; /** **UNSTABLE**: New API, yet to be vetted. * + * The native pointer type for interfacing to foreign functions. + * * @category FFI */ type NativePointerType = "pointer"; /** **UNSTABLE**: New API, yet to be vetted. * + * The native buffer type for interfacing to foreign functions. + * * @category FFI */ type NativeBufferType = "buffer"; /** **UNSTABLE**: New API, yet to be vetted. * + * The native function type for interfacing with foreign functions. + * * @category FFI */ type NativeFunctionType = "function"; /** **UNSTABLE**: New API, yet to be vetted. * + * The native void type for interfacing with foreign functions. + * * @category FFI */ type NativeVoidType = "void"; /** **UNSTABLE**: New API, yet to be vetted. * - * All possible types for interfacing with foreign functions. + * All supported types for interfacing with foreign functions. * * @category FFI */ @@ -417,6 +475,9 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * + * A utility type conversion for foreign symbol parameters and unsafe callback + * return types. + * * @category FFI */ type ToNativeTypeMap = @@ -438,6 +499,8 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * + * A utility type for conversion for unsafe callback return types. + * * @category FFI */ type ToNativeResultTypeMap = ToNativeTypeMap & Record<NativeVoidType, void>; @@ -453,6 +516,8 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * + * A utility type for conversion of parameter types of foreign functions. + * * @category FFI */ type ToNativeParameterTypes<T extends readonly NativeType[]> = @@ -467,6 +532,9 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * + * A utility type for conversion of foreign symbol return types and unsafe + * callback parameters. + * * @category FFI */ type FromNativeTypeMap = @@ -488,6 +556,8 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * + * A utility type for conversion for foreign symbol return types. + * * @category FFI */ type FromNativeResultTypeMap = @@ -521,7 +591,8 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * - * A foreign function as defined by its parameter and result types. + * The interface for a foreign function as defined by its parameter and result + * types. * * @category FFI */ @@ -530,13 +601,21 @@ declare namespace Deno { Result extends NativeResultType = NativeResultType, NonBlocking extends boolean = boolean, > { - /** Name of the symbol, defaults to the key name in symbols object. */ + /** Name of the symbol. + * + * Defaults to the key name in symbols object. */ name?: string; + /** The parameters of the foreign function. */ parameters: Parameters; + /** The result (return value) of the foreign function. */ result: Result; - /** When true, function calls will run on a dedicated blocking thread and will return a Promise resolving to the `result`. */ + /** When `true`, function calls will run on a dedicated blocking thread and + * will return a `Promise` resolving to the `result`. */ nonblocking?: NonBlocking; - /** When true, function calls can safely callback into JS or trigger a GC event. Default is `false`. */ + /** When `true`, function calls can safely callback into JavaScript or + * trigger a garbage collection event. + * + * Default is `false`. */ callback?: boolean; } @@ -547,6 +626,7 @@ declare namespace Deno { export interface ForeignStatic<Type extends NativeType = NativeType> { /** Name of the symbol, defaults to the key name in symbols object. */ name?: string; + /** The type of the foreign static value. */ type: Type; } @@ -562,7 +642,7 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * - * Infers a foreign symbol. + * A utility type that infers a foreign symbol. * * @category FFI */ @@ -597,7 +677,7 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * - * Infers a foreign library interface. + * A utility type that infers a foreign library interface. * * @category FFI */ @@ -609,9 +689,9 @@ declare namespace Deno { * * Pointer type depends on the architecture and actual pointer value. * - * On a 32 bit system all pointer values are plain numbers. On a 64 bit - * system pointer values are represented as numbers if the value is below - * `Number.MAX_SAFE_INTEGER`. + * On a 32 bit host system all pointer values are plain numbers. On a 64 bit + * host system pointer values are represented as numbers if the value is below + * `Number.MAX_SAFE_INTEGER`, otherwise they are provided as bigints. * * @category FFI */ @@ -625,18 +705,16 @@ declare namespace Deno { * @category FFI */ export class UnsafePointer { - /** - * Return the direct memory pointer to the typed array in memory - */ + /** Return the direct memory pointer to the typed array in memory. */ static of(value: Deno.UnsafeCallback | BufferSource): PointerValue; } /** **UNSTABLE**: New API, yet to be vetted. * * An unsafe pointer view to a memory location as specified by the `pointer` - * value. The `UnsafePointerView` API mimics the standard built in interface - * `DataView` for accessing the underlying types at an memory location - * (numbers, strings and raw bytes). + * value. The `UnsafePointerView` API follows the standard built in interface + * {@linkcode DataView} for accessing the underlying types at an memory + * location (numbers, strings and raw bytes). * * @category FFI */ @@ -647,41 +725,63 @@ declare namespace Deno { /** Gets a boolean at the specified byte offset from the pointer. */ getBool(offset?: number): boolean; - /** Gets an unsigned 8-bit integer at the specified byte offset from the pointer. */ + /** Gets an unsigned 8-bit integer at the specified byte offset from the + * pointer. */ getUint8(offset?: number): number; - /** Gets a signed 8-bit integer at the specified byte offset from the pointer. */ + /** Gets a signed 8-bit integer at the specified byte offset from the + * pointer. */ getInt8(offset?: number): number; - /** Gets an unsigned 16-bit integer at the specified byte offset from the pointer. */ + /** Gets an unsigned 16-bit integer at the specified byte offset from the + * pointer. */ getUint16(offset?: number): number; - /** Gets a signed 16-bit integer at the specified byte offset from the pointer. */ + /** Gets a signed 16-bit integer at the specified byte offset from the + * pointer. */ getInt16(offset?: number): number; - /** Gets an unsigned 32-bit integer at the specified byte offset from the pointer. */ + /** Gets an unsigned 32-bit integer at the specified byte offset from the + * pointer. */ getUint32(offset?: number): number; - /** Gets a signed 32-bit integer at the specified byte offset from the pointer. */ + /** Gets a signed 32-bit integer at the specified byte offset from the + * pointer. */ getInt32(offset?: number): number; - /** Gets an unsigned 64-bit integer at the specified byte offset from the pointer. */ + /** Gets an unsigned 64-bit integer at the specified byte offset from the + * pointer. */ getBigUint64(offset?: number): PointerValue; - /** Gets a signed 64-bit integer at the specified byte offset from the pointer. */ + /** Gets a signed 64-bit integer at the specified byte offset from the + * pointer. */ getBigInt64(offset?: number): PointerValue; - /** Gets a signed 32-bit float at the specified byte offset from the pointer. */ + /** Gets a signed 32-bit float at the specified byte offset from the + * pointer. */ getFloat32(offset?: number): number; - /** Gets a signed 64-bit float at the specified byte offset from the pointer. */ + /** Gets a signed 64-bit float at the specified byte offset from the + * pointer. */ getFloat64(offset?: number): number; - /** Gets a C string (null terminated string) at the specified byte offset from the pointer. */ + /** Gets a C string (`null` terminated string) at the specified byte offset + * from the pointer. */ getCString(offset?: number): string; - /** Gets a C string (null terminated string) at the specified byte offset from the specified pointer. */ + /** Gets a C string (`null` terminated string) at the specified byte offset + * from the specified pointer. */ static getCString(pointer: PointerValue, offset?: number): string; - /** Gets an ArrayBuffer of length `byteLength` at the specified byte offset from the pointer. */ + /** Gets an `ArrayBuffer` of length `byteLength` at the specified byte + * offset from the pointer. */ getArrayBuffer(byteLength: number, offset?: number): ArrayBuffer; - /** Gets an ArrayBuffer of length `byteLength` at the specified byte offset from the specified pointer. */ + /** Gets an `ArrayBuffer` of length `byteLength` at the specified byte + * offset from the specified pointer. */ static getArrayBuffer( pointer: PointerValue, byteLength: number, offset?: number, ): ArrayBuffer; - /** Copies the memory of the pointer into a typed array. Length is determined from the typed array's `byteLength`. Also takes optional byte offset from the pointer. */ + /** Copies the memory of the pointer into a typed array. + * + * Length is determined from the typed array's `byteLength`. + * + * Also takes optional byte offset from the pointer. */ copyInto(destination: BufferSource, offset?: number): void; - /** Copies the memory of the specified pointer into a typed array. Length is determined from the typed array's `byteLength`. Also takes optional byte offset from the pointer. */ + /** Copies the memory of the specified pointer into a typed array. + * + * Length is determined from the typed array's `byteLength`. + * + * Also takes optional byte offset from the pointer. */ static copyInto( pointer: PointerValue, destination: BufferSource, @@ -691,34 +791,43 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * - * An unsafe pointer to a function, for calling functions that are not - * present as symbols. + * An unsafe pointer to a function, for calling functions that are not present + * as symbols. * * @category FFI */ export class UnsafeFnPointer<Fn extends ForeignFunction> { + /** The pointer to the function. */ pointer: PointerValue; + /** The definition of the function. */ definition: Fn; constructor(pointer: PointerValue, definition: Fn); + /** Call the foreign function. */ call: FromForeignFunction<Fn>; } /** **UNSTABLE**: New API, yet to be vetted. * + * Definition of a unsafe callback function. + * * @category FFI */ export interface UnsafeCallbackDefinition< Parameters extends readonly NativeType[] = readonly NativeType[], Result extends NativeResultType = NativeResultType, > { + /** The parameters of the callbacks. */ parameters: Parameters; + /** The current result of the callback. */ result: Result; } /** **UNSTABLE**: New API, yet to be vetted. * + * An unsafe callback function. + * * @category FFI */ type UnsafeCallbackFunction< @@ -730,13 +839,13 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * - * An unsafe function pointer for passing JavaScript functions - * as C function pointers to ffi calls. + * An unsafe function pointer for passing JavaScript functions as C function + * pointers to foreign function calls. * * The function pointer remains valid until the `close()` method is called. * - * The callback can be explicitly ref'ed and deref'ed to stop Deno's - * process from exiting. + * The callback can be explicitly referenced via `ref()` and dereferenced via + * `deref()` to stop Deno's process from exiting. * * @category FFI */ @@ -751,35 +860,39 @@ declare namespace Deno { >, ); + /** The pointer to the unsafe callback. */ pointer: PointerValue; + /** The definition of the unsafe callback. */ definition: Definition; + /** The callback function. */ callback: UnsafeCallbackFunction< Definition["parameters"], Definition["result"] >; /** - * Adds one to this callback's reference counting and returns the - * new reference count. + * Adds one to this callback's reference counting and returns the new + * reference count. * - * If the callback's reference count becomes non-zero, it will keep - * Deno's process from exiting. + * If the callback's reference count is non-zero, it will keep Deno's + * process from exiting. */ ref(): number; /** - * Removes one from this callback's reference counting and returns - * the new reference count. + * Removes one from this callback's reference counting and returns the new + * reference count. * - * If the callback's reference counter becomes zero, it will no longer - * keep Deno's process from exiting. + * If the callback's reference counter is zero, it will no longer keep + * Deno's process from exiting. */ unref(): number; /** - * Removes the C function pointer associated with the UnsafeCallback. - * Continuing to use the instance after calling this object will lead to errors - * and crashes. + * Removes the C function pointer associated with this instance. + * + * Continuing to use the instance after calling this object will lead to + * errors and crashes. * * Calling this method will also immediately set the callback's reference * counting to zero and it will no longer keep Deno's process from exiting. @@ -789,20 +902,70 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * - * A dynamic library resource + * A dynamic library resource. Use {@linkcode Deno.dlopen} to load a dynamic + * library and return this interface. * * @category FFI */ export interface DynamicLibrary<S extends ForeignLibraryInterface> { - /** All of the registered library along with functions for calling them */ + /** All of the registered library along with functions for calling them. */ symbols: StaticForeignLibraryInterface<S>; + /** Removes the pointers associated with the library symbols. + * + * Continuing to use symbols that are part of the library will lead to + * errors and crashes. + * + * Calling this method will also immediately set any references to zero and + * will no longer keep Deno's process from exiting. + */ close(): void; } /** **UNSTABLE**: New API, yet to be vetted. * - * Opens a dynamic library and registers symbols + * Opens an external dynamic library and registers symbols, making foreign + * functions available to be called. + * + * Requires `allow-ffi` permission. Loading foreign dynamic libraries can in + * theory bypass all of the sandbox permissions. While it is a separate + * permission users should acknowledge in practice that is effectively the + * same as running with the `allow-all` permission. * + * An example, given a C library which exports a foreign function named + * `add()`: + * + * ```ts + * // Determine library extension based on + * // your OS. + * let libSuffix = ""; + * switch (Deno.build.os) { + * case "windows": + * libSuffix = "dll"; + * break; + * case "darwin": + * libSuffix = "dylib"; + * break; + * default: + * libSuffix = "so"; + * break; + * } + * + * const libName = `./libadd.${libSuffix}`; + * // Open library and define exported symbols + * const dylib = Deno.dlopen( + * libName, + * { + * "add": { parameters: ["isize", "isize"], result: "isize" }, + * } as const, + * ); + * + * // Call the symbol `add` + * const result = dylib.symbols.add(35, 34); // 69 + * + * console.log(`Result from external addition of 35 and 34: ${result}`); + * ``` + * + * @tags allow-ffi * @category FFI */ export function dlopen<S extends ForeignLibraryInterface>( @@ -812,23 +975,76 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * + * These are unstable options which can be used with {@linkcode Deno.run}. + */ + interface UnstableRunOptions extends RunOptions { + /** If `true`, clears the environment variables before executing the + * sub-process. Defaults to `false`. */ + clearEnv?: boolean; + /** For POSIX systems, sets the group ID for the sub process. */ + gid?: number; + /** For POSIX systems, sets the user ID for the sub process. */ + uid?: number; + } + + /** **UNSTABLE**: New API, yet to be vetted. + * + * Spawns new subprocess. RunOptions must contain at a minimum the `opt.cmd`, + * an array of program arguments, the first of which is the binary. + * + * ```ts + * const p = Deno.run({ + * cmd: ["curl", "https://example.com"], + * }); + * const status = await p.status(); + * ``` + * + * Subprocess uses same working directory as parent process unless `opt.cwd` + * is specified. + * + * Environmental variables from parent process can be cleared using `opt.clearEnv`. + * Doesn't guarantee that only `opt.env` variables are present, + * as the OS may set environmental variables for processes. + * + * Environmental variables for subprocess can be specified using `opt.env` + * mapping. + * + * `opt.uid` sets the child process’s user ID. This translates to a setuid call + * in the child process. Failure in the setuid call will cause the spawn to fail. + * + * `opt.gid` is similar to `opt.uid`, but sets the group ID of the child process. + * This has the same semantics as the uid field. + * + * By default subprocess inherits stdio of parent process. To change + * this this, `opt.stdin`, `opt.stdout`, and `opt.stderr` can be set + * independently to a resource ID (_rid_) of an open file, `"inherit"`, + * `"piped"`, or `"null"`: + * + * - _number_: the resource ID of an open file/resource. This allows you to + * read or write to a file. + * - `"inherit"`: The default if unspecified. The subprocess inherits from the + * parent. + * - `"piped"`: A new pipe should be arranged to connect the parent and child + * sub-process. + * - `"null"`: This stream will be ignored. This is the equivalent of attaching + * the stream to `/dev/null`. + * + * Details of the spawned process are returned as an instance of + * {@linkcode Deno.Process}. + * + * Requires `allow-run` permission. + * + * @tags allow-run * @category Sub Process */ - export function run< - T extends RunOptions & { - clearEnv?: boolean; - gid?: number; - uid?: number; - } = RunOptions & { - clearEnv?: boolean; - gid?: number; - uid?: number; - }, - >(opt: T): Process<T>; + export function run<T extends UnstableRunOptions = UnstableRunOptions>( + opt: T, + ): Process<T>; /** **UNSTABLE**: New API, yet to be vetted. * - * A custom HttpClient for use with `fetch`. + * A custom `HttpClient` for use with {@linkcode fetch} function. This is + * designed to allow custom certificates or proxies to be used with `fetch()`. * * ```ts * const caCert = await Deno.readTextFile("./ca.pem"); @@ -838,14 +1054,16 @@ declare namespace Deno { * * @category Fetch API */ - export class HttpClient { + export interface HttpClient { + /** The resource ID associated with the client. */ rid: number; + /** Close the HTTP client. */ close(): void; } /** **UNSTABLE**: New API, yet to be vetted. * - * The options used when creating a [HttpClient]. + * The options used when creating a {@linkcode Deno.HttpClient}. * * @category Fetch API */ @@ -865,25 +1083,37 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * + * The definition of a proxy when specifying + * {@linkcode Deno.CreateHttpClientOptions}. + * * @category Fetch API */ export interface Proxy { + /** The string URL of the proxy server to use. */ url: string; + /** The basic auth credentials to be used against the proxy server. */ basicAuth?: BasicAuth; } /** **UNSTABLE**: New API, yet to be vetted. * + * Basic authentication credentials to be used with a {@linkcode Deno.Proxy} + * server when specifying {@linkcode Deno.CreateHttpClientOptions}. + * * @category Fetch API */ export interface BasicAuth { + /** The username to be used against the proxy server. */ username: string; + /** The password to be used against the proxy server. */ password: string; } /** **UNSTABLE**: New API, yet to be vetted. * - * Create a custom HttpClient for to use with `fetch`. + * Create a custom HttpClient for to use with {@linkcode fetch}. This is an + * extension of the web platform Fetch API which allows Deno to use custom + * TLS certificates and connect via a proxy while using `fetch()`. * * ```ts * const caCert = await Deno.readTextFile("./ca.pem"); @@ -892,7 +1122,9 @@ declare namespace Deno { * ``` * * ```ts - * const client = Deno.createHttpClient({ proxy: { url: "http://myproxy.com:8080" } }); + * const client = Deno.createHttpClient({ + * proxy: { url: "http://myproxy.com:8080" } + * }); * const response = await fetch("https://myserver.com", { client }); * ``` * @@ -909,35 +1141,48 @@ declare namespace Deno { * @category Network */ export interface DatagramConn extends AsyncIterable<[Uint8Array, Addr]> { - /** Waits for and resolves to the next message to the `UDPConn`. */ + /** Waits for and resolves to the next message to the instance. + * + * Messages are received in the format of a tuple containing the data array + * and the address information. + */ receive(p?: Uint8Array): Promise<[Uint8Array, Addr]>; - /** Sends a message to the target. */ + /** Sends a message to the target via the connection. The method resolves + * with the number of bytes sent. */ send(p: Uint8Array, addr: Addr): Promise<number>; /** Close closes the socket. Any pending message promises will be rejected * with errors. */ close(): void; - /** Return the address of the `UDPConn`. */ + /** Return the address of the instance. */ readonly addr: Addr; [Symbol.asyncIterator](): AsyncIterableIterator<[Uint8Array, Addr]>; } /** **UNSTABLE**: New API, yet to be vetted. * + * Unstable options which can be set when opening a Unix listener via + * {@linkcode Deno.listen} or {@linkcode Deno.listenDatagram}. + * * @category Network */ export interface UnixListenOptions { - /** A Path to the Unix Socket. */ + /** A path to the Unix Socket. */ path: string; } /** **UNSTABLE**: New API, yet to be vetted. * + * Unstable options which can be set when opening a datagram listener via + * {@linkcode Deno.listenDatagram}. + * * @category Network */ export interface UdpListenOptions extends ListenOptions { /** When `true` the specified address will be reused, even if another * process has already bound a socket on it. This effectively steals the - * socket from the listener. Defaults to `false`. */ + * socket from the listener. + * + * Defaults to `false`. */ reuseAddress?: boolean; } @@ -1030,12 +1275,26 @@ declare namespace Deno { * @tags allow-net, allow-read * @category Network */ - export function connect( - options: ConnectOptions, - ): Promise<TcpConn>; - export function connect( - options: UnixConnectOptions, - ): Promise<UnixConn>; + export function connect(options: ConnectOptions): Promise<TcpConn>; + /** **UNSTABLE**: New API, yet to be vetted. + * + * Connects to the hostname (default is "127.0.0.1") and port on the named + * transport (default is "tcp"), and resolves to the connection (`Conn`). + * + * ```ts + * const conn1 = await Deno.connect({ port: 80 }); + * const conn2 = await Deno.connect({ hostname: "192.0.2.1", port: 80 }); + * const conn3 = await Deno.connect({ hostname: "[2001:db8::1]", port: 80 }); + * const conn4 = await Deno.connect({ hostname: "golang.org", port: 80, transport: "tcp" }); + * const conn5 = await Deno.connect({ path: "/foo/bar.sock", transport: "unix" }); + * ``` + * + * Requires `allow-net` permission for "tcp" and `allow-read` for "unix". + * + * @tags allow-net, allow-read + * @category Network + */ + export function connect(options: UnixConnectOptions): Promise<UnixConn>; /** **UNSTABLE**: New API, yet to be vetted. * @@ -1164,8 +1423,8 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * - * Acquire an advisory file-system lock for the provided file. `exclusive` - * defaults to `false`. + * Acquire an advisory file-system lock synchronously for the provided file. + * `exclusive` defaults to `false`. * * @category File System */ @@ -1181,7 +1440,7 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * - * Release an advisory file-system lock for the provided file. + * Release an advisory file-system lock for the provided file synchronously. * * @category File System */ @@ -1201,24 +1460,28 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * + * Options which can be set when calling {@linkcode Deno.serve}. + * * @category HTTP Server */ export interface ServeOptions extends Partial<Deno.ListenOptions> { - /** An AbortSignal to close the server and all connections. */ + /** An {@linkcode AbortSignal} to close the server and all connections. */ signal?: AbortSignal; - /** Sets SO_REUSEPORT on Linux. */ + /** Sets `SO_REUSEPORT` on POSIX systems. */ reusePort?: boolean; /** The handler to invoke when route handlers throw an error. */ onError?: (error: unknown) => Response | Promise<Response>; - /** The callback which is called when the server started listening */ + /** The callback which is called when the server starts listening. */ onListen?: (params: { hostname: string; port: number }) => void; } /** **UNSTABLE**: New API, yet to be vetted. * + * Additional options which are used when opening a TLS (HTTPS) server. + * * @category HTTP Server */ export interface ServeTlsOptions extends ServeOptions { @@ -1243,25 +1506,25 @@ declare namespace Deno { * Serves HTTP requests with the given handler. * * You can specify an object with a port and hostname option, which is the - * address to listen on. The default is port 9000 on hostname "127.0.0.1". + * address to listen on. The default is port `9000` on hostname `"127.0.0.1"`. * - * The below example serves with the port 9000. + * The below example serves with the port `9000`. * * ```ts * Deno.serve((_req) => new Response("Hello, world")); * ``` * * You can change the address to listen on using the `hostname` and `port` - * options. The below example serves on port 3000. + * options. The below example serves on port `3000`. * * ```ts * Deno.serve({ port: 3000 }, (_req) => new Response("Hello, world")); * ``` * - * You can stop the server with an AbortSignal. The abort signal needs to be - * passed as the `signal` option in the options bag. The server aborts when - * the abort signal is aborted. To wait for the server to close, await the - * promise returned from the `Deno.serve` API. + * You can stop the server with an {@linkcode AbortSignal}. The abort signal + * needs to be passed as the `signal` option in the options bag. The server + * aborts when the abort signal is aborted. To wait for the server to close, + * await the promise returned from the `Deno.serve` API. * * ```ts * const ac = new AbortController(); @@ -1273,9 +1536,9 @@ declare namespace Deno { * ac.abort(); * ``` * - * By default `Deno.serve` prints the message `Listening on http://<hostname>:<port>/` - * on start up. If you like to change this behaviour, you can specify a custom - * `onListen` callback. + * By default `Deno.serve` prints the message + * `Listening on http://<hostname>:<port>/` on listening. If you like to + * change this behavior, you can specify a custom `onListen` callback. * * ```ts * Deno.serve({ @@ -1301,19 +1564,137 @@ declare namespace Deno { handler: ServeHandler, options?: ServeOptions | ServeTlsOptions, ): Promise<void>; + /** **UNSTABLE**: New API, yet to be vetted. + * + * Serves HTTP requests with the given handler. + * + * You can specify an object with a port and hostname option, which is the + * address to listen on. The default is port `9000` on hostname `"127.0.0.1"`. + * + * The below example serves with the port `9000`. + * + * ```ts + * Deno.serve((_req) => new Response("Hello, world")); + * ``` + * + * You can change the address to listen on using the `hostname` and `port` + * options. The below example serves on port `3000`. + * + * ```ts + * Deno.serve({ port: 3000 }, (_req) => new Response("Hello, world")); + * ``` + * + * You can stop the server with an {@linkcode AbortSignal}. The abort signal + * needs to be passed as the `signal` option in the options bag. The server + * aborts when the abort signal is aborted. To wait for the server to close, + * await the promise returned from the `Deno.serve` API. + * + * ```ts + * const ac = new AbortController(); + * + * Deno.serve({ signal: ac.signal }, (_req) => new Response("Hello, world")) + * .then(() => console.log("Server closed")); + * + * console.log("Closing server..."); + * ac.abort(); + * ``` + * + * By default `Deno.serve` prints the message + * `Listening on http://<hostname>:<port>/` on listening. If you like to + * change this behavior, you can specify a custom `onListen` callback. + * + * ```ts + * Deno.serve({ + * onListen({ port, hostname }) { + * console.log(`Server started at http://${hostname}:${port}`); + * // ... more info specific to your server .. + * }, + * handler: (_req) => new Response("Hello, world"), + * }); + * ``` + * + * To enable TLS you must specify the `key` and `cert` options. + * + * ```ts + * const cert = "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n"; + * const key = "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"; + * Deno.serve({ cert, key }, (_req) => new Response("Hello, world")); + * ``` + * + * @category HTTP Server + */ export function serve( options: ServeOptions | ServeTlsOptions, handler: ServeHandler, ): Promise<void>; + /** **UNSTABLE**: New API, yet to be vetted. + * + * Serves HTTP requests with the given handler. + * + * You can specify an object with a port and hostname option, which is the + * address to listen on. The default is port `9000` on hostname `"127.0.0.1"`. + * + * The below example serves with the port `9000`. + * + * ```ts + * Deno.serve((_req) => new Response("Hello, world")); + * ``` + * + * You can change the address to listen on using the `hostname` and `port` + * options. The below example serves on port `3000`. + * + * ```ts + * Deno.serve({ port: 3000 }, (_req) => new Response("Hello, world")); + * ``` + * + * You can stop the server with an {@linkcode AbortSignal}. The abort signal + * needs to be passed as the `signal` option in the options bag. The server + * aborts when the abort signal is aborted. To wait for the server to close, + * await the promise returned from the `Deno.serve` API. + * + * ```ts + * const ac = new AbortController(); + * + * Deno.serve({ signal: ac.signal }, (_req) => new Response("Hello, world")) + * .then(() => console.log("Server closed")); + * + * console.log("Closing server..."); + * ac.abort(); + * ``` + * + * By default `Deno.serve` prints the message + * `Listening on http://<hostname>:<port>/` on listening. If you like to + * change this behavior, you can specify a custom `onListen` callback. + * + * ```ts + * Deno.serve({ + * onListen({ port, hostname }) { + * console.log(`Server started at http://${hostname}:${port}`); + * // ... more info specific to your server .. + * }, + * handler: (_req) => new Response("Hello, world"), + * }); + * ``` + * + * To enable TLS you must specify the `key` and `cert` options. + * + * ```ts + * const cert = "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n"; + * const key = "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"; + * Deno.serve({ cert, key }, (_req) => new Response("Hello, world")); + * ``` + * + * @category HTTP Server + */ export function serve( options: ServeInit & (ServeOptions | ServeTlsOptions), ): Promise<void>; /** **UNSTABLE**: New API, yet to be vetted. * - * Allows "hijacking" the connection that the request is associated with. - * This can be used to implement protocols that build on top of HTTP (eg. - * WebSockets). + * Allows "hijacking" the connection that the request is associated with. This + * can be used to implement protocols that build on top of HTTP (eg. + * {@linkcode WebSocket}). * * The returned promise returns underlying connection and first packet * received. The promise shouldn't be awaited before responding to the @@ -1328,8 +1709,8 @@ declare namespace Deno { * } * ``` * - * This method can only be called on requests originating the `Deno.serveHttp` - * server. + * This method can only be called on requests originating the + * {@linkcode Deno.serveHttp} server. * * @category HTTP Server */ @@ -1341,15 +1722,16 @@ declare namespace Deno { * * Allows "hijacking" the connection that the request is associated with. * This can be used to implement protocols that build on top of HTTP (eg. - * WebSockets). - - * Unlike `Deno.upgradeHttp` this function does not require that you respond - * to the request with a `Response` object. Instead this function returns - * the underlying connection and first packet received immediately, and then - * the caller is responsible for writing the response to the connection. + * {@linkcode WebSocket}). + * + * Unlike {@linkcode Deno.upgradeHttp} this function does not require that you + * respond to the request with a {@linkcode Response} object. Instead this + * function returns the underlying connection and first packet received + * immediately, and then the caller is responsible for writing the response to + * the connection. * - * This method can only be called on requests originating the `Deno.serve` - * server. + * This method can only be called on requests originating the + * {@linkcode Deno.serve} server. * * @category HTTP Server */ @@ -1357,6 +1739,9 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * + * Options which can be set when calling {@linkcode Deno.spawn}, + * {@linkcode Deno.spawnSync}, and {@linkcode Deno.spawnChild}. + * * @category Sub Process */ export interface SpawnOptions { @@ -1364,40 +1749,50 @@ declare namespace Deno { args?: string[]; /** * The working directory of the process. - * If not specified, the cwd of the parent process is used. + * + * If not specified, the `cwd` of the parent process is used. */ cwd?: string | URL; /** * Clear environmental variables from parent process. - * Doesn't guarantee that only `opt.env` variables are present, - * as the OS may set environmental variables for processes. + * + * Doesn't guarantee that only `env` variables are present, as the OS may + * set environmental variables for processes. */ clearEnv?: boolean; /** Environmental variables to pass to the subprocess. */ env?: Record<string, string>; /** - * Sets the child process’s user ID. This translates to a setuid call - * in the child process. Failure in the setuid call will cause the spawn to fail. + * Sets the child process’s user ID. This translates to a setuid call in the + * child process. Failure in the set uid call will cause the spawn to fail. */ uid?: number; /** Similar to `uid`, but sets the group ID of the child process. */ gid?: number; /** - * An AbortSignal that allows closing the process using the corresponding - * AbortController by sending the process a SIGTERM signal. - * Not supported in spawnSync. + * An {@linkcode AbortSignal} that allows closing the process using the + * corresponding {@linkcode AbortController} by sending the process a + * SIGTERM signal. + * + * Not supported in {@linkcode Deno.spawnSync}. */ signal?: AbortSignal; - /** Defaults to "null". */ + /** How `stdin` of the spawned process should be handled. + * + * Defaults to `"null"`. */ stdin?: "piped" | "inherit" | "null"; - /** Defaults to "piped". */ + /** How `stdout` of the spawned process should be handled. + * + * Defaults to `"piped"`. */ stdout?: "piped" | "inherit" | "null"; - /** Defaults to "piped". */ + /** How `stderr` of the spawned process should be handled. + * + * Defaults to "piped". */ stderr?: "piped" | "inherit" | "null"; /** Skips quoting and escaping of the arguments on windows. This option - * is ignored on non-windows platforms. Defaults to "false". */ + * is ignored on non-windows platforms. Defaults to `false`. */ windowsRawArguments?: boolean; } @@ -1408,8 +1803,8 @@ declare namespace Deno { * If any stdio options are not set to `"piped"`, accessing the corresponding * field on the `Child` or its `SpawnOutput` will throw a `TypeError`. * - * If stdin is set to `"piped"`, the stdin WritableStream needs to be closed - * manually. + * If `stdin` is set to `"piped"`, the `stdin` {@linkcode WritableStream} + * needs to be closed manually. * * ```ts * const child = Deno.spawnChild(Deno.execPath(), { @@ -1437,6 +1832,9 @@ declare namespace Deno { /** **UNSTABLE**: New API, yet to be vetted. * + * The interface for handling a child process returned from + * {@linkcode Deno.spawnChild}. + * * @category Sub Process */ export class Child { @@ -1447,19 +1845,26 @@ declare namespace Deno { /** Get the status of the child. */ readonly status: Promise<ChildStatus>; - /** Waits for the child to exit completely, returning all its output and status. */ + /** Waits for the child to exit completely, returning all its output and + * status. */ output(): Promise<SpawnOutput>; - /** Kills the process with given Signal. Defaults to SIGTERM. */ + /** Kills the process with given {@linkcode Deno.Signal}. Defaults to + * `"SIGTERM"`. */ kill(signo?: Signal): void; + /** Ensure that the status of the child process prevents the Deno process + * from exiting. */ ref(): void; + /** Ensure that the status of the child process does not block the Deno + * process from exiting. */ unref(): void; } /** **UNSTABLE**: New API, yet to be vetted. * - * Executes a subprocess, waiting for it to finish and - * collecting all of its output. + * Executes a subprocess, waiting for it to finish and collecting all of its + * output. + * * Will throw an error if `stdin: "piped"` is passed. * * If options `stdout` or `stderr` are not set to `"piped"`, accessing the @@ -1488,6 +1893,7 @@ declare namespace Deno { * * Synchronously executes a subprocess, waiting for it to finish and * collecting all of its output. + * * Will throw an error if `stdin: "piped"` is passed. * * If options `stdout` or `stderr` are not set to `"piped"`, accessing the @@ -1517,23 +1923,38 @@ declare namespace Deno { * @category Sub Process */ export interface ChildStatus { + /** If the child process exits with a 0 status code, `success` will be set + * to `true`, otherwise `false`. */ success: boolean; + /** The exit code of the child process. */ code: number; + /** The signal associated with the child process, present if + * {@linkcode Deno.spawn} was called. */ signal: Signal | null; } /** **UNSTABLE**: New API, yet to be vetted. * + * The interface returned from calling {@linkcode Deno.spawn} or + * {@linkcode Deno.spawnSync} which represents the result of spawning the + * child process. + * * @category Sub Process */ export interface SpawnOutput extends ChildStatus { - get stdout(): Uint8Array; - get stderr(): Uint8Array; + /** The buffered output from the child processes `stdout`. */ + readonly stdout: Uint8Array; + /** The buffered output from the child processes `stderr`. */ + readonly stderr: Uint8Array; } } /** **UNSTABLE**: New API, yet to be vetted. * + * The [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) + * which also supports setting a {@linkcode Deno.HttpClient} which provides a + * way to connect via proxies and use custom TLS certificates. + * * @tags allow-net, allow-read * @category Fetch API */ @@ -1552,10 +1973,13 @@ declare interface WorkerOptions { * Configure permissions options to change the level of access the worker will * have. By default it will have no permissions. Note that the permissions * of a worker can't be extended beyond its parent's permissions reach. - * - "inherit" will take the permissions of the thread the worker is created in - * - "none" will use the default behavior and have no permission - * - You can provide a list of routes relative to the file the worker - * is created in to limit the access of the worker (read/write permissions only) + * + * - `"inherit"` will take the permissions of the thread the worker is created + * in. + * - `"none"` will use the default behavior and have no permission + * - A list of routes can be provided that are relative to the file the worker + * is created in to limit the access of the worker (read/write permissions + * only) * * Example: * |