diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2022-11-25 18:29:48 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-25 18:29:48 -0500 |
commit | dcb4ffb93a380710c32cc212b937ea38db5ceacc (patch) | |
tree | 18bf860912a14b84287bb8dbafdc41c5e3cdc6ab /cli/tsc/dts/lib.deno.unstable.d.ts | |
parent | 0cc90d9246ff2c392457632d5030eaca2ca1ca6f (diff) |
refactor: move dts files, diagnostics.rs, and tsc.rs to tsc folder (#16820)
Diffstat (limited to 'cli/tsc/dts/lib.deno.unstable.d.ts')
-rw-r--r-- | cli/tsc/dts/lib.deno.unstable.d.ts | 1911 |
1 files changed, 1911 insertions, 0 deletions
diff --git a/cli/tsc/dts/lib.deno.unstable.d.ts b/cli/tsc/dts/lib.deno.unstable.d.ts new file mode 100644 index 000000000..eaa40abc5 --- /dev/null +++ b/cli/tsc/dts/lib.deno.unstable.d.ts @@ -0,0 +1,1911 @@ +// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. + +/// <reference no-default-lib="true" /> +/// <reference lib="deno.ns" /> + +declare namespace Deno { + export {}; // stop default export type behavior + + /** **UNSTABLE**: New API, yet to be vetted. + * + * Retrieve the process umask. If `mask` is provided, sets the process umask. + * This call always returns what the umask was before the call. + * + * ```ts + * console.log(Deno.umask()); // e.g. 18 (0o022) + * const prevUmaskValue = Deno.umask(0o077); // e.g. 18 (0o022) + * console.log(Deno.umask()); // e.g. 63 (0o077) + * ``` + * + * This API is under consideration to determine if permissions are required to + * call it. + * + * *Note*: This API is not implemented on Windows + * + * @category File System + */ + export function umask(mask?: number): number; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * All plain number types for interfacing with foreign functions. + * + * @category FFI + */ + type NativeNumberType = + | "u8" + | "i8" + | "u16" + | "i16" + | "u32" + | "i32" + | "f32" + | "f64"; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * All BigInt number types for interfacing with foreign functions. + * + * @category FFI + */ + type NativeBigIntType = + | "u64" + | "i64" + | "usize" + | "isize"; + + /** **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 supported types for interfacing with foreign functions. + * + * @category FFI + */ + export type NativeType = + | NativeNumberType + | NativeBigIntType + | NativeBooleanType + | NativePointerType + | NativeBufferType + | NativeFunctionType; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * @category FFI + */ + export type NativeResultType = NativeType | NativeVoidType; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * A utility type conversion for foreign symbol parameters and unsafe callback + * return types. + * + * @category FFI + */ + type ToNativeTypeMap = + & Record<NativeNumberType, number> + & Record<NativeBigIntType, PointerValue> + & Record<NativeBooleanType, boolean> + & Record<NativePointerType, PointerValue | null> + & Record<NativeFunctionType, PointerValue | null> + & Record<NativeBufferType, BufferSource | null>; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * Type conversion for foreign symbol parameters and unsafe callback return + * types. + * + * @category FFI + */ + type ToNativeType<T extends NativeType = NativeType> = ToNativeTypeMap[T]; + + /** **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>; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * Type conversion for unsafe callback return types. + * + * @category FFI + */ + type ToNativeResultType<T extends NativeResultType = NativeResultType> = + ToNativeResultTypeMap[T]; + + /** **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[]> = + // + [(T[number])[]] extends [T] ? ToNativeType<T[number]>[] + : [readonly (T[number])[]] extends [T] + ? readonly ToNativeType<T[number]>[] + : T extends readonly [...NativeType[]] ? { + [K in keyof T]: ToNativeType<T[K]>; + } + : never; + + /** **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 = + & Record<NativeNumberType, number> + & Record<NativeBigIntType, PointerValue> + & Record<NativeBooleanType, boolean> + & Record<NativePointerType, PointerValue> + & Record<NativeBufferType, PointerValue> + & Record<NativeFunctionType, PointerValue>; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * Type conversion for foreign symbol return types and unsafe callback + * parameters. + * + * @category FFI + */ + type FromNativeType<T extends NativeType = NativeType> = FromNativeTypeMap[T]; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * A utility type for conversion for foreign symbol return types. + * + * @category FFI + */ + type FromNativeResultTypeMap = + & FromNativeTypeMap + & Record<NativeVoidType, void>; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * Type conversion for foreign symbol return types. + * + * @category FFI + */ + type FromNativeResultType<T extends NativeResultType = NativeResultType> = + FromNativeResultTypeMap[T]; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * @category FFI + */ + type FromNativeParameterTypes< + T extends readonly NativeType[], + > = + // + [(T[number])[]] extends [T] ? FromNativeType<T[number]>[] + : [readonly (T[number])[]] extends [T] + ? readonly FromNativeType<T[number]>[] + : T extends readonly [...NativeType[]] ? { + [K in keyof T]: FromNativeType<T[K]>; + } + : never; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * The interface for a foreign function as defined by its parameter and result + * types. + * + * @category FFI + */ + export interface ForeignFunction< + Parameters extends readonly NativeType[] = readonly NativeType[], + Result extends NativeResultType = NativeResultType, + NonBlocking extends boolean = boolean, + > { + /** 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`. */ + nonblocking?: NonBlocking; + /** When `true`, function calls can safely callback into JavaScript or + * trigger a garbage collection event. + * + * Default is `false`. */ + callback?: boolean; + } + + /** **UNSTABLE**: New API, yet to be vetted. + * + * @category FFI + */ + 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; + } + + /** **UNSTABLE**: New API, yet to be vetted. + * + * A foreign library interface descriptor. + * + * @category FFI + */ + export interface ForeignLibraryInterface { + [name: string]: ForeignFunction | ForeignStatic; + } + + /** **UNSTABLE**: New API, yet to be vetted. + * + * A utility type that infers a foreign symbol. + * + * @category FFI + */ + type StaticForeignSymbol<T extends ForeignFunction | ForeignStatic> = + T extends ForeignFunction ? FromForeignFunction<T> + : T extends ForeignStatic ? FromNativeType<T["type"]> + : never; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * @category FFI + */ + type FromForeignFunction<T extends ForeignFunction> = T["parameters"] extends + readonly [] ? () => StaticForeignSymbolReturnType<T> + : ( + ...args: ToNativeParameterTypes<T["parameters"]> + ) => StaticForeignSymbolReturnType<T>; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * @category FFI + */ + type StaticForeignSymbolReturnType<T extends ForeignFunction> = + ConditionalAsync<T["nonblocking"], FromNativeResultType<T["result"]>>; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * @category FFI + */ + type ConditionalAsync<IsAsync extends boolean | undefined, T> = + IsAsync extends true ? Promise<T> : T; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * A utility type that infers a foreign library interface. + * + * @category FFI + */ + type StaticForeignLibraryInterface<T extends ForeignLibraryInterface> = { + [K in keyof T]: StaticForeignSymbol<T[K]>; + }; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * Pointer type depends on the architecture and actual pointer value. + * + * 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 + */ + export type PointerValue = number | bigint; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * An unsafe pointer to a memory location for passing and returning pointers + * to and from the FFI. + * + * @category FFI + */ + export class UnsafePointer { + /** 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 follows the standard built in interface + * {@linkcode DataView} for accessing the underlying types at an memory + * location (numbers, strings and raw bytes). + * + * @category FFI + */ + export class UnsafePointerView { + constructor(pointer: PointerValue); + + pointer: PointerValue; + + /** 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. */ + getUint8(offset?: number): number; + /** 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. */ + getUint16(offset?: number): number; + /** 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. */ + getUint32(offset?: number): number; + /** 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. */ + getBigUint64(offset?: number): PointerValue; + /** 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. */ + getFloat32(offset?: number): number; + /** 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. */ + getCString(offset?: number): string; + /** 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. */ + getArrayBuffer(byteLength: number, offset?: number): ArrayBuffer; + /** 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. */ + 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. */ + static copyInto( + pointer: PointerValue, + destination: BufferSource, + offset?: number, + ): void; + } + + /** **UNSTABLE**: New API, yet to be vetted. + * + * 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< + Parameters extends readonly NativeType[] = readonly NativeType[], + Result extends NativeResultType = NativeResultType, + > = Parameters extends readonly [] ? () => ToNativeResultType<Result> : ( + ...args: FromNativeParameterTypes<Parameters> + ) => ToNativeResultType<Result>; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * 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 referenced via `ref()` and dereferenced via + * `deref()` to stop Deno's process from exiting. + * + * @category FFI + */ + export class UnsafeCallback< + Definition extends UnsafeCallbackDefinition = UnsafeCallbackDefinition, + > { + constructor( + definition: Definition, + callback: UnsafeCallbackFunction< + Definition["parameters"], + Definition["result"] + >, + ); + + /** 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. + * + * 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. + * + * 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 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. + */ + close(): void; + } + + /** **UNSTABLE**: New API, yet to be vetted. + * + * 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. */ + 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 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>( + filename: string | URL, + symbols: S, + ): DynamicLibrary<S>; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * These are unstable options which can be used with {@linkcode Deno.run}. + * + * @category Sub Process + */ + 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 UnstableRunOptions = UnstableRunOptions>( + opt: T, + ): Process<T>; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * 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"); + * const client = Deno.createHttpClient({ caCerts: [ caCert ] }); + * const req = await fetch("https://myserver.com", { client }); + * ``` + * + * @category Fetch API + */ + 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 {@linkcode Deno.HttpClient}. + * + * @category Fetch API + */ + export interface CreateHttpClientOptions { + /** A list of root certificates that will be used in addition to the + * default root certificates to verify the peer's certificate. + * + * Must be in PEM format. */ + caCerts?: string[]; + /** A HTTP proxy to use for new connections. */ + proxy?: Proxy; + /** PEM formatted client certificate chain. */ + certChain?: string; + /** PEM formatted (RSA or PKCS8) private key of client certificate. */ + privateKey?: string; + } + + /** **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 {@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"); + * const client = Deno.createHttpClient({ caCerts: [ caCert ] }); + * const response = await fetch("https://myserver.com", { client }); + * ``` + * + * ```ts + * const client = Deno.createHttpClient({ + * proxy: { url: "http://myproxy.com:8080" } + * }); + * const response = await fetch("https://myserver.com", { client }); + * ``` + * + * @category Fetch API + */ + export function createHttpClient( + options: CreateHttpClientOptions, + ): HttpClient; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * A generic transport listener for message-oriented protocols. + * + * @category Network + */ + export interface DatagramConn extends AsyncIterable<[Uint8Array, Addr]> { + /** 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 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 instance. */ + readonly addr: Addr; + [Symbol.asyncIterator](): AsyncIterableIterator<[Uint8Array, Addr]>; + } + + /** + * @category Network + */ + export interface TcpListenOptions extends ListenOptions { + /** When `true` the SO_REUSEPORT flag will be set on the listener. This + * allows multiple processes to listen on the same address and port. + * + * On Linux this will cause the kernel to distribute incoming connections + * across the different processes that are listening on the same address and + * port. + * + * This flag is only supported on Linux. It is silently ignored on other + * platforms. Defaults to `false`. */ + reusePort?: boolean; + } + + /** **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. */ + 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`. */ + reuseAddress?: boolean; + } + + /** **UNSTABLE**: New API, yet to be vetted. + * + * Listen announces on the local transport address. + * + * ```ts + * const listener = Deno.listen({ path: "/foo/bar.sock", transport: "unix" }) + * ``` + * + * Requires `allow-read` and `allow-write` permission. + * + * @tags allow-read, allow-write + * @category Network + */ + export function listen( + options: UnixListenOptions & { transport: "unix" }, + ): Listener; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * Listen announces on the local transport address. + * + * ```ts + * const listener1 = Deno.listenDatagram({ + * port: 80, + * transport: "udp" + * }); + * const listener2 = Deno.listenDatagram({ + * hostname: "golang.org", + * port: 80, + * transport: "udp" + * }); + * ``` + * + * Requires `allow-net` permission. + * + * @tags allow-net + * @category Network + */ + export function listenDatagram( + options: UdpListenOptions & { transport: "udp" }, + ): DatagramConn; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * Listen announces on the local transport address. + * + * ```ts + * const listener = Deno.listenDatagram({ + * path: "/foo/bar.sock", + * transport: "unixpacket" + * }); + * ``` + * + * Requires `allow-read` and `allow-write` permission. + * + * @tags allow-read, allow-write + * @category Network + */ + export function listenDatagram( + options: UnixListenOptions & { transport: "unixpacket" }, + ): DatagramConn; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * @category Network + */ + export interface UnixConnectOptions { + transport: "unix"; + path: string; + } + + /** **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: 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. + * + * @category Network + */ + export interface ConnectTlsOptions { + /** **UNSTABLE**: New API, yet to be vetted. + * + * PEM formatted client certificate chain. + */ + certChain?: string; + /** **UNSTABLE**: New API, yet to be vetted. + * + * PEM formatted (RSA or PKCS8) private key of client certificate. + */ + privateKey?: string; + /** **UNSTABLE**: New API, yet to be vetted. + * + * Application-Layer Protocol Negotiation (ALPN) protocols supported by + * the client. If not specified, no ALPN extension will be included in the + * TLS handshake. + */ + alpnProtocols?: string[]; + } + + /** **UNSTABLE**: New API, yet to be vetted. + * + * @category Network + */ + export interface TlsHandshakeInfo { + /** **UNSTABLE**: New API, yet to be vetted. + * + * Contains the ALPN protocol selected during negotiation with the server. + * If no ALPN protocol selected, returns `null`. + */ + alpnProtocol: string | null; + } + + /** **UNSTABLE**: New API, yet to be vetted. + * + * @category Network + */ + export interface TlsConn extends Conn { + /** **UNSTABLE**: New API, yet to be vetted. + * + * Runs the client or server handshake protocol to completion if that has + * not happened yet. Calling this method is optional; the TLS handshake + * will be completed automatically as soon as data is sent or received. + */ + handshake(): Promise<TlsHandshakeInfo>; + } + + /** **UNSTABLE**: New API, yet to be vetted. + * + * Create a TLS connection with an attached client certificate. + * + * ```ts + * const conn = await Deno.connectTls({ + * hostname: "deno.land", + * port: 443, + * certChain: "---- BEGIN CERTIFICATE ----\n ...", + * privateKey: "---- BEGIN PRIVATE KEY ----\n ...", + * }); + * ``` + * + * Requires `allow-net` permission. + * + * @tags allow-net + * @category Network + */ + export function connectTls(options: ConnectTlsOptions): Promise<TlsConn>; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * @category Network + */ + export interface ListenTlsOptions { + /** **UNSTABLE**: New API, yet to be vetted. + * + * Application-Layer Protocol Negotiation (ALPN) protocols to announce to + * the client. If not specified, no ALPN extension will be included in the + * TLS handshake. + */ + alpnProtocols?: string[]; + } + + /** **UNSTABLE**: New API, yet to be vetted. + * + * @category Network + */ + export interface StartTlsOptions { + /** **UNSTABLE**: New API, yet to be vetted. + * + * Application-Layer Protocol Negotiation (ALPN) protocols to announce to + * the client. If not specified, no ALPN extension will be included in the + * TLS handshake. + */ + alpnProtocols?: string[]; + } + + /** @category Network */ + export interface Listener extends AsyncIterable<Conn> { + /** **UNSTABLE**: New API, yet to be vetted. + * + * Make the listener block the event loop from finishing. + * + * Note: the listener blocks the event loop from finishing by default. + * This method is only meaningful after `.unref()` is called. + */ + ref(): void; + /** **UNSTABLE**: New API, yet to be vetted. + * + * Make the listener not block the event loop from finishing. + */ + unref(): void; + } + + /** **UNSTABLE**: New API, yet to be vetted. + * + * Acquire an advisory file-system lock for the provided file. `exclusive` + * defaults to `false`. + * + * @category File System + */ + export function flock(rid: number, exclusive?: boolean): Promise<void>; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * Acquire an advisory file-system lock synchronously for the provided file. + * `exclusive` defaults to `false`. + * + * @category File System + */ + export function flockSync(rid: number, exclusive?: boolean): void; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * Release an advisory file-system lock for the provided file. + * + * @category File System + */ + export function funlock(rid: number): Promise<void>; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * Release an advisory file-system lock for the provided file synchronously. + * + * @category File System + */ + export function funlockSync(rid: number): void; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * A handler for HTTP requests. Consumes a request and returns a response. + * + * If a handler throws, the server calling the handler will assume the impact + * of the error is isolated to the individual request. It will catch the error + * and if necessary will close the underlying connection. + * + * @category HTTP Server + */ + export type ServeHandler = (request: Request) => Response | Promise<Response>; + + /** **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 {@linkcode AbortSignal} to close the server and all connections. */ + signal?: AbortSignal; + + /** 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 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 { + /** Server private key in PEM format */ + cert: string; + + /** Cert chain in PEM format */ + key: string; + } + + /** **UNSTABLE**: New API, yet to be vetted. + * + * @category HTTP Server + */ + export interface ServeInit { + /** The handler to invoke to process each incoming request. */ + handler: ServeHandler; + } + + /** **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( + 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. + * {@linkcode WebSocket}). + * + * The returned promise returns underlying connection and first packet + * received. The promise shouldn't be awaited before responding to the + * `request`, otherwise event loop might deadlock. + * + * ```ts + * function handler(req: Request): Response { + * Deno.upgradeHttp(req).then(([conn, firstPacket]) => { + * // ... + * }); + * return new Response(null, { status: 101 }); + * } + * ``` + * + * This method can only be called on requests originating the + * {@linkcode Deno.serveHttp} server. + * + * @category HTTP Server + */ + export function upgradeHttp( + request: Request, + ): Promise<[Deno.Conn, Uint8Array]>; + + /** **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. + * {@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 + * {@linkcode Deno.serve} server. + * + * @category HTTP Server + */ + export function upgradeHttpRaw(request: Request): [Deno.Conn, Uint8Array]; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * @deprecated Use the Deno.Command API instead. + * + * Options which can be set when calling {@linkcode Deno.spawn}, + * {@linkcode Deno.spawnSync}, and {@linkcode Deno.spawnChild}. + * + * @category Sub Process + */ + export interface SpawnOptions { + /** Arguments to pass to the process. */ + args?: string[]; + /** + * The working directory of the process. + * + * 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 `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 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 {@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; + + /** How `stdin` of the spawned process should be handled. + * + * Defaults to `"null"`. */ + stdin?: "piped" | "inherit" | "null"; + /** How `stdout` of the spawned process should be handled. + * + * Defaults to `"piped"`. */ + stdout?: "piped" | "inherit" | "null"; + /** 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`. */ + windowsRawArguments?: boolean; + } + + /** **UNSTABLE**: New API, yet to be vetted. + * + * @deprecated Use the Deno.Command API instead. + * + * Spawns a child process. + * + * 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` {@linkcode WritableStream} + * needs to be closed manually. + * + * ```ts + * const child = Deno.spawnChild(Deno.execPath(), { + * args: [ + * "eval", + * "console.log('Hello World')", + * ], + * stdin: "piped", + * }); + * + * // open a file and pipe the subprocess output to it. + * child.stdout.pipeTo(Deno.openSync("output").writable); + * + * // manually close stdin + * child.stdin.close(); + * const status = await child.status; + * ``` + * + * @category Sub Process + */ + export function spawnChild( + command: string | URL, + options?: SpawnOptions, + ): Child; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * @deprecated Use the Deno.Command API instead. + * + * The interface for handling a child process returned from + * {@linkcode Deno.spawnChild}. + * + * @category Sub Process + */ + export class Child { + get stdin(): WritableStream<Uint8Array>; + get stdout(): ReadableStream<Uint8Array>; + get stderr(): ReadableStream<Uint8Array>; + readonly pid: number; + /** Get the status of the child. */ + readonly status: Promise<ChildStatus>; + + /** Waits for the child to exit completely, returning all its output and + * status. */ + output(): Promise<SpawnOutput>; + /** 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. + * + * @deprecated Use the Deno.Command API instead. + * + * 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 + * corresponding field on `SpawnOutput` will throw a `TypeError`. + * + * ```ts + * const { code, stdout, stderr } = await Deno.spawn(Deno.execPath(), { + * args: [ + * "eval", + * "console.log('hello'); console.error('world')", + * ], + * }); + * console.assert(code === 0); + * console.assert("hello\n" === new TextDecoder().decode(stdout)); + * console.assert("world\n" === new TextDecoder().decode(stderr)); + * ``` + * + * @category Sub Process + */ + export function spawn( + command: string | URL, + options?: SpawnOptions, + ): Promise<SpawnOutput>; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * @deprecated Use the Deno.Command API instead. + * + * 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 + * corresponding field on `SpawnOutput` will throw a `TypeError`. + * + * ```ts + * const { code, stdout, stderr } = Deno.spawnSync(Deno.execPath(), { + * args: [ + * "eval", + * "console.log('hello'); console.error('world')", + * ], + * }); + * console.assert(code === 0); + * console.assert("hello\n" === new TextDecoder().decode(stdout)); + * console.assert("world\n" === new TextDecoder().decode(stderr)); + * ``` + * + * @category Sub Process + */ + export function spawnSync( + command: string | URL, + options?: SpawnOptions, + ): SpawnOutput; + + /** **UNSTABLE**: New API, yet to be vetted. + * + * @deprecated Use the Deno.Command API instead. + * + * @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. + * + * @deprecated Use the Deno.Command API instead. + * + * 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 { + /** 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. + * + * Create a child process. + * + * If any stdio options are not set to `"piped"`, accessing the corresponding + * field on the `Command` or its `CommandOutput` will throw a `TypeError`. + * + * If `stdin` is set to `"piped"`, the `stdin` {@linkcode WritableStream} + * needs to be closed manually. + * + * ```ts + * const command = new Deno.Command(Deno.execPath(), { + * args: [ + * "eval", + * "console.log('Hello World')", + * ], + * stdin: "piped", + * }); + * command.spawn(); + * + * // open a file and pipe the subprocess output to it. + * command.stdout.pipeTo(Deno.openSync("output").writable); + * + * // manually close stdin + * command.stdin.close(); + * const status = await command.status; + * ``` + * + * ```ts + * const command = new Deno.Command(Deno.execPath(), { + * args: [ + * "eval", + * "console.log('hello'); console.error('world')", + * ], + * }); + * const { code, stdout, stderr } = await command.output(); + * console.assert(code === 0); + * console.assert("hello\n" === new TextDecoder().decode(stdout)); + * console.assert("world\n" === new TextDecoder().decode(stderr)); + * ``` + * + * ```ts + * const command = new Deno.Command(Deno.execPath(), { + * args: [ + * "eval", + * "console.log('hello'); console.error('world')", + * ], + * }); + * const { code, stdout, stderr } = command.outputSync(); + * console.assert(code === 0); + * console.assert("hello\n" === new TextDecoder().decode(stdout)); + * console.assert("world\n" === new TextDecoder().decode(stderr)); + * ``` + * + * @category Sub Process + */ + export class Command { + get stdin(): WritableStream<Uint8Array>; + get stdout(): ReadableStream<Uint8Array>; + get stderr(): ReadableStream<Uint8Array>; + readonly pid: number; + /** Get the status of the child process. */ + readonly status: Promise<CommandStatus>; + + constructor(command: string | URL, options?: CommandOptions); + /** + * Executes the {@linkcode Deno.Command}, waiting for it to finish and + * collecting all of its output. + * If `spawn()` was called, calling this function will collect the remaining + * output. + * + * Will throw an error if `stdin: "piped"` is set. + * + * If options `stdout` or `stderr` are not set to `"piped"`, accessing the + * corresponding field on {@linkcode Deno.CommandOutput} will throw a `TypeError`. + */ + output(): Promise<CommandOutput>; + /** + * Synchronously executes the {@linkcode Deno.Command}, waiting for it to + * finish and collecting all of its output. + * + * Will throw an error if `stdin: "piped"` is set. + * + * If options `stdout` or `stderr` are not set to `"piped"`, accessing the + * corresponding field on {@linkcode Deno.CommandOutput} will throw a `TypeError`. + */ + outputSync(): CommandOutput; + /** + * Spawns a streamable subprocess, allowing to use the other methods. + */ + spawn(): void; + + /** 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. + * + * Options which can be set when calling {@linkcode Deno.command}. + * + * @category Sub Process + */ + export interface CommandOptions { + /** Arguments to pass to the process. */ + args?: string[]; + /** + * The working directory of the process. + * + * 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 `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 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 {@linkcode AbortSignal} that allows closing the process using the + * corresponding {@linkcode AbortController} by sending the process a + * SIGTERM signal. + * + * Ignored by {@linkcode Command.outputSync}. + */ + signal?: AbortSignal; + + /** How `stdin` of the spawned process should be handled. + * + * Defaults to `"null"`. */ + stdin?: "piped" | "inherit" | "null"; + /** How `stdout` of the spawned process should be handled. + * + * Defaults to `"piped"`. */ + stdout?: "piped" | "inherit" | "null"; + /** 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`. */ + windowsRawArguments?: boolean; + } + + /** **UNSTABLE**: New API, yet to be vetted. + * + * @category Sub Process + */ + export interface CommandStatus { + /** 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. */ + signal: Signal | null; + } + + /** **UNSTABLE**: New API, yet to be vetted. + * + * The interface returned from calling {@linkcode Command.output} or + * {@linkcode Command.outputSync} which represents the result of spawning the + * child process. + * + * @category Sub Process + */ + export interface CommandOutput extends CommandStatus { + /** The buffered output from the child process' `stdout`. */ + readonly stdout: Uint8Array; + /** The buffered output from the child process' `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 + */ +declare function fetch( + input: Request | URL | string, + init?: RequestInit & { client: Deno.HttpClient }, +): Promise<Response>; + +/** **UNSTABLE**: New API, yet to be vetted. + * + * @category Web Workers + */ +declare interface WorkerOptions { + /** **UNSTABLE**: New API, yet to be vetted. + * + * 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 + * - 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: + * + * ```ts + * // mod.ts + * const worker = new Worker( + * new URL("deno_worker.ts", import.meta.url).href, { + * type: "module", + * deno: { + * permissions: { + * read: true, + * }, + * }, + * } + * ); + * ``` + */ + deno?: { + /** Set to `"none"` to disable all the permissions in the worker. */ + permissions?: Deno.PermissionOptions; + }; +} + +/** **UNSTABLE**: New API, yet to be vetted. + * + * @category Web Sockets + */ +declare interface WebSocketStreamOptions { + protocols?: string[]; + signal?: AbortSignal; + headers?: HeadersInit; +} + +/** **UNSTABLE**: New API, yet to be vetted. + * + * @category Web Sockets + */ +declare interface WebSocketConnection { + readable: ReadableStream<string | Uint8Array>; + writable: WritableStream<string | Uint8Array>; + extensions: string; + protocol: string; +} + +/** **UNSTABLE**: New API, yet to be vetted. + * + * @category Web Sockets + */ +declare interface WebSocketCloseInfo { + code?: number; + reason?: string; +} + +/** **UNSTABLE**: New API, yet to be vetted. + * + * @tags allow-net + * @category Web Sockets + */ +declare class WebSocketStream { + constructor(url: string, options?: WebSocketStreamOptions); + url: string; + connection: Promise<WebSocketConnection>; + closed: Promise<WebSocketCloseInfo>; + close(closeInfo?: WebSocketCloseInfo): void; +} |