// Copyright 2018-2025 the Deno authors. MIT license. /// /// /// /// /// /** * Event map for WorkerGlobalScope event handlers. * * @category Workers */ declare interface WorkerGlobalScopeEventMap { "error": ErrorEvent; "unhandledrejection": PromiseRejectionEvent; } /** * The WorkerGlobalScope interface represents the global execution context of a worker. * It serves as the base interface for specific worker contexts like DedicatedWorkerGlobalScope. * * @example * ```ts * // Inside a worker script * console.log(self.location.href); // Logs the worker's location URL * * self.addEventListener("error", (event) => { * console.error("Error in worker:", event.message); * }); * ``` * * @category Workers */ declare interface WorkerGlobalScope extends EventTarget { /** The location of the worker's script, represented by a WorkerLocation object. */ readonly location: WorkerLocation; /** The navigator object for the worker context. */ readonly navigator: WorkerNavigator; /** Event handler for error events that occur in the worker. */ onerror: ((this: WorkerGlobalScope, ev: ErrorEvent) => any) | null; /** * Event handler for unhandled promise rejections in the worker. */ onunhandledrejection: | ((this: WorkerGlobalScope, ev: PromiseRejectionEvent) => any) | null; /** Reference to the worker's global scope, which is the worker itself. */ readonly self: WorkerGlobalScope & typeof globalThis; /** Adds an event listener for events of a specific type on the worker. */ addEventListener( type: K, listener: ( this: WorkerGlobalScope, ev: WorkerGlobalScopeEventMap[K], ) => any, options?: boolean | AddEventListenerOptions, ): void; /** Adds an event listener for events of a specific type on the worker. */ addEventListener( type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions, ): void; /** Removes an event listener previously registered with addEventListener. */ removeEventListener( type: K, listener: ( this: WorkerGlobalScope, ev: WorkerGlobalScopeEventMap[K], ) => any, options?: boolean | EventListenerOptions, ): void; /** Removes an event listener previously registered with addEventListener. */ removeEventListener( type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions, ): void; /** The Deno namespace containing runtime APIs. */ Deno: typeof Deno; /** The cache storage object for the worker. */ caches: CacheStorage; } /** * The WorkerGlobalScope interface constructor. * * @category Workers */ declare var WorkerGlobalScope: { readonly prototype: WorkerGlobalScope; new (): never; }; /** * The WorkerNavigator interface represents the identity and state of the user agent * (browser) in a worker context. * * @example * ```ts * // Inside a worker * console.log(navigator.userAgent); // Logs the user agent string * console.log(navigator.hardwareConcurrency); // Logs the number of logical processors * ``` * * @category Platform */ declare interface WorkerNavigator { /** Provides access to the WebGPU API. */ readonly gpu: GPU; /** Returns the number of logical processors available to run threads on the user's computer. */ readonly hardwareConcurrency: number; /** Returns the user agent string for the current browser. */ readonly userAgent: string; /** Returns the preferred language of the user, as a string. */ readonly language: string; /** Returns an array of strings representing the languages known to the user. */ readonly languages: string[]; } /** * The WorkerNavigator interface constructor. * * @category Platform */ declare var WorkerNavigator: { readonly prototype: WorkerNavigator; new (): never; }; /** * The navigator object for the worker context. * * @category Platform */ declare var navigator: WorkerNavigator; /** * Event map for DedicatedWorkerGlobalScope event handlers. * Extends WorkerGlobalScopeEventMap with worker-specific events. * * @category Workers */ declare interface DedicatedWorkerGlobalScopeEventMap extends WorkerGlobalScopeEventMap { "message": MessageEvent; "messageerror": MessageEvent; } /** * The DedicatedWorkerGlobalScope interface represents the global execution context of a * dedicated worker, which is a worker that is utilized by a single script. * * @example * ```ts * // Inside a dedicated worker * self.addEventListener("message", (e) => { * const receivedData = e.data; * console.log("Worker received:", receivedData); * * // Process the data and send a response back * const result = processData(receivedData); * self.postMessage(result); * }); * * function processData(data) { * return data.toUpperCase(); * } * ``` * * @category Platform */ declare interface DedicatedWorkerGlobalScope extends WorkerGlobalScope { /** The name given to the worker when it was created. */ readonly name: string; /** Event handler for message events received from the parent context. */ onmessage: | ((this: DedicatedWorkerGlobalScope, ev: MessageEvent) => any) | null; /** Event handler for messageerror events that occur when a message cannot be deserialized. */ onmessageerror: | ((this: DedicatedWorkerGlobalScope, ev: MessageEvent) => any) | null; /** * Closes the worker thread. * * @example * ```ts * // Inside a worker * self.addEventListener("message", (e) => { * if (e.data === "terminate") { * self.close(); // Terminates the worker * } * }); * ``` */ close(): void; /** * Sends a message to the main thread that spawned the worker. * * @example * ```ts * // Inside a worker * const result = { status: "complete", data: [1, 2, 3] }; * self.postMessage(result); * ``` */ postMessage(message: any, transfer: Transferable[]): void; /** * Sends a message to the main thread that spawned the worker. * * @example * ```ts * // Inside a worker, transferring an ArrayBuffer * const buffer = new ArrayBuffer(1024); * self.postMessage({ result: "data processed", buffer }, { transfer: [buffer] }); * ``` */ postMessage(message: any, options?: StructuredSerializeOptions): void; /** Adds an event listener for events of a specific type on the dedicated worker. */ addEventListener( type: K, listener: ( this: DedicatedWorkerGlobalScope, ev: DedicatedWorkerGlobalScopeEventMap[K], ) => any, options?: boolean | AddEventListenerOptions, ): void; /** Adds an event listener for events of a specific type on the dedicated worker. */ addEventListener( type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions, ): void; /** Removes an event listener previously registered with addEventListener. */ removeEventListener( type: K, listener: ( this: DedicatedWorkerGlobalScope, ev: DedicatedWorkerGlobalScopeEventMap[K], ) => any, options?: boolean | EventListenerOptions, ): void; /** Removes an event listener previously registered with addEventListener. */ removeEventListener( type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions, ): void; } /** * The DedicatedWorkerGlobalScope interface constructor. * * @category Platform */ declare var DedicatedWorkerGlobalScope: { readonly prototype: DedicatedWorkerGlobalScope; new (): never; }; /** * The name given to the worker when it was created. * * @category Workers */ declare var name: string; /** * Event handler for message events received from the parent context. * * @category Workers */ declare var onmessage: | ((this: DedicatedWorkerGlobalScope, ev: MessageEvent) => any) | null; /** * Event handler for messageerror events that occur when a message cannot be deserialized. * * @category Workers */ declare var onmessageerror: | ((this: DedicatedWorkerGlobalScope, ev: MessageEvent) => any) | null; /** * Closes the worker thread. * * @category Workers */ declare function close(): void; /** * Sends a message to the main thread that spawned the worker. * * @category Workers */ declare function postMessage(message: any, transfer: Transferable[]): void; /** * Sends a message to the main thread that spawned the worker. * * @category Workers */ declare function postMessage( message: any, options?: StructuredSerializeOptions, ): void; /** * The navigator object for the worker context. * * @category Platform */ declare var navigator: WorkerNavigator; /** * Event handler for error events that occur in the worker. * * @category Platform */ declare var onerror: | ((this: DedicatedWorkerGlobalScope, ev: ErrorEvent) => any) | null; /** * Event handler for unhandled promise rejections in the worker. * * @category Observability */ declare var onunhandledrejection: | ((this: DedicatedWorkerGlobalScope, ev: PromiseRejectionEvent) => any) | null; /** * Reference to the worker's global scope, which is the worker itself. * * @category Workers */ declare var self: WorkerGlobalScope & typeof globalThis; /** * Adds an event listener for events of a specific type on the worker. * * @category Events */ declare function addEventListener< K extends keyof DedicatedWorkerGlobalScopeEventMap, >( type: K, listener: ( this: DedicatedWorkerGlobalScope, ev: DedicatedWorkerGlobalScopeEventMap[K], ) => any, options?: boolean | AddEventListenerOptions, ): void; /** * Adds an event listener for events of a specific type on the worker. * * @category Events */ declare function addEventListener( type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions, ): void; /** * Removes an event listener previously registered with addEventListener. * * @category Events */ declare function removeEventListener< K extends keyof DedicatedWorkerGlobalScopeEventMap, >( type: K, listener: ( this: DedicatedWorkerGlobalScope, ev: DedicatedWorkerGlobalScopeEventMap[K], ) => any, options?: boolean | EventListenerOptions, ): void; /** * Removes an event listener previously registered with addEventListener. * * @category Events */ declare function removeEventListener( type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions, ): void; // TODO(nayeemrmn): Move this to `extensions/web` where its implementation is. // The types there must first be split into window, worker and global types. /** * The absolute location of the script executed by the Worker. Such an object * is initialized for each worker and is available via the * WorkerGlobalScope.location property obtained by calling self.location. * * @category Platform */ declare interface WorkerLocation { /** The fragment identifier of the worker's URL, including the leading '#' character or an empty string if there is no fragment identifier. */ readonly hash: string; /** The host and port of the worker's URL. */ readonly host: string; /** The domain of the worker's URL. */ readonly hostname: string; /** The complete URL of the worker script. */ readonly href: string; /** Returns a string containing the serialized URL of the worker script. */ toString(): string; /** The origin of the worker's URL, which is the scheme, domain, and port. */ readonly origin: string; /** The path component of the worker's URL, including the leading slash. */ readonly pathname: string; /** The port component of the worker's URL, or an empty string if the port is not specified. */ readonly port: string; /** The protocol scheme of the worker's URL, including the trailing colon. */ readonly protocol: string; /** The search (query) component of the worker's URL, including the leading '?' character or an empty string if there is no search component. */ readonly search: string; } // TODO(nayeemrmn): Move this to `extensions/web` where its implementation is. // The types there must first be split into window, worker and global types. /** The absolute location of the script executed by the Worker. Such an object * is initialized for each worker and is available via the * WorkerGlobalScope.location property obtained by calling self.location. * * @category Platform */ declare var WorkerLocation: { readonly prototype: WorkerLocation; new (): never; }; // TODO(nayeemrmn): Move this to `extensions/web` where its implementation is. // The types there must first be split into window, worker and global types. /** * The location object for the worker script. * * @category Platform */ declare var location: WorkerLocation;