mirror of
https://github.com/denoland/deno.git
synced 2024-12-22 15:24:46 -05:00
feat: Add WorkerOptions interface to type declarations (#9147)
This commit is contained in:
parent
f43855cead
commit
b12afdb89a
2 changed files with 85 additions and 82 deletions
164
cli/dts/lib.deno.shared_globals.d.ts
vendored
164
cli/dts/lib.deno.shared_globals.d.ts
vendored
|
@ -653,93 +653,95 @@ interface WorkerEventMap extends AbstractWorkerEventMap {
|
||||||
"messageerror": MessageEvent;
|
"messageerror": MessageEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface WorkerOptions {
|
||||||
|
type?: "classic" | "module";
|
||||||
|
name?: string;
|
||||||
|
/** UNSTABLE: New API.
|
||||||
|
*
|
||||||
|
* Set deno.namespace to `true` to make `Deno` namespace and all of its methods
|
||||||
|
* available to worker thread. The namespace is disabled by default.
|
||||||
|
*
|
||||||
|
* Configure deno.permissions options to change the level of access the worker will
|
||||||
|
* have. By default it will inherit the permissions of its parent thread. 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
|
||||||
|
* - You can disable/enable permissions all together by passing a boolean
|
||||||
|
* - 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)
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
*
|
||||||
|
* ```ts
|
||||||
|
* // mod.ts
|
||||||
|
* const worker = new Worker(
|
||||||
|
* new URL("deno_worker.ts", import.meta.url).href, {
|
||||||
|
* type: "module",
|
||||||
|
* deno: {
|
||||||
|
* namespace: true,
|
||||||
|
* permissions: {
|
||||||
|
* read: true,
|
||||||
|
* },
|
||||||
|
* },
|
||||||
|
* }
|
||||||
|
* );
|
||||||
|
* worker.postMessage({ cmd: "readFile", fileName: "./log.txt" });
|
||||||
|
*
|
||||||
|
* // deno_worker.ts
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* self.onmessage = async function (e) {
|
||||||
|
* const { cmd, fileName } = e.data;
|
||||||
|
* if (cmd !== "readFile") {
|
||||||
|
* throw new Error("Invalid command");
|
||||||
|
* }
|
||||||
|
* const buf = await Deno.readFile(fileName);
|
||||||
|
* const fileContents = new TextDecoder().decode(buf);
|
||||||
|
* console.log(fileContents);
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* // log.txt
|
||||||
|
* hello world
|
||||||
|
* hello world 2
|
||||||
|
*
|
||||||
|
* // run program
|
||||||
|
* $ deno run --allow-read mod.ts
|
||||||
|
* hello world
|
||||||
|
* hello world2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
// TODO(Soremwar)
|
||||||
|
// `deno: true` is kept for backwards compatibility with the previous worker
|
||||||
|
// options implementation. Remove for 2.0.
|
||||||
|
deno?: true | {
|
||||||
|
namespace?: boolean;
|
||||||
|
/** Set to `"none"` to disable all the permissions in the worker. */
|
||||||
|
permissions?: "inherit" | "none" | {
|
||||||
|
env?: "inherit" | boolean;
|
||||||
|
hrtime?: "inherit" | boolean;
|
||||||
|
/** The format of the net access list must be `hostname[:port]`
|
||||||
|
* in order to be resolved.
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
* net: ["https://deno.land", "localhost:8080"],
|
||||||
|
* ```
|
||||||
|
* */
|
||||||
|
net?: "inherit" | boolean | string[];
|
||||||
|
plugin?: "inherit" | boolean;
|
||||||
|
read?: "inherit" | boolean | Array<string | URL>;
|
||||||
|
run?: "inherit" | boolean;
|
||||||
|
write?: "inherit" | boolean | Array<string | URL>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
declare class Worker extends EventTarget {
|
declare class Worker extends EventTarget {
|
||||||
onerror?: (e: ErrorEvent) => void;
|
onerror?: (e: ErrorEvent) => void;
|
||||||
onmessage?: (e: MessageEvent) => void;
|
onmessage?: (e: MessageEvent) => void;
|
||||||
onmessageerror?: (e: MessageEvent) => void;
|
onmessageerror?: (e: MessageEvent) => void;
|
||||||
constructor(
|
constructor(
|
||||||
specifier: string,
|
specifier: string,
|
||||||
options?: {
|
options?: WorkerOptions,
|
||||||
type?: "classic" | "module";
|
|
||||||
name?: string;
|
|
||||||
/** UNSTABLE: New API.
|
|
||||||
*
|
|
||||||
* Set deno.namespace to `true` to make `Deno` namespace and all of its methods
|
|
||||||
* available to worker thread. The namespace is disabled by default.
|
|
||||||
*
|
|
||||||
* Configure deno.permissions options to change the level of access the worker will
|
|
||||||
* have. By default it will inherit the permissions of its parent thread. 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
|
|
||||||
* - You can disable/enable permissions all together by passing a boolean
|
|
||||||
* - 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)
|
|
||||||
*
|
|
||||||
* Example:
|
|
||||||
*
|
|
||||||
* ```ts
|
|
||||||
* // mod.ts
|
|
||||||
* const worker = new Worker(
|
|
||||||
* new URL("deno_worker.ts", import.meta.url).href, {
|
|
||||||
* type: "module",
|
|
||||||
* deno: {
|
|
||||||
* namespace: true,
|
|
||||||
* permissions: {
|
|
||||||
* read: true,
|
|
||||||
* },
|
|
||||||
* },
|
|
||||||
* }
|
|
||||||
* );
|
|
||||||
* worker.postMessage({ cmd: "readFile", fileName: "./log.txt" });
|
|
||||||
*
|
|
||||||
* // deno_worker.ts
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* self.onmessage = async function (e) {
|
|
||||||
* const { cmd, fileName } = e.data;
|
|
||||||
* if (cmd !== "readFile") {
|
|
||||||
* throw new Error("Invalid command");
|
|
||||||
* }
|
|
||||||
* const buf = await Deno.readFile(fileName);
|
|
||||||
* const fileContents = new TextDecoder().decode(buf);
|
|
||||||
* console.log(fileContents);
|
|
||||||
* }
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* // log.txt
|
|
||||||
* hello world
|
|
||||||
* hello world 2
|
|
||||||
*
|
|
||||||
* // run program
|
|
||||||
* $ deno run --allow-read mod.ts
|
|
||||||
* hello world
|
|
||||||
* hello world2
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
// TODO(Soremwar)
|
|
||||||
// `deno: true` is kept for backwards compatibility with the previous worker
|
|
||||||
// options implementation. Remove for 2.0.
|
|
||||||
deno?: true | {
|
|
||||||
namespace?: boolean;
|
|
||||||
/** Set to `"none"` to disable all the permissions in the worker. */
|
|
||||||
permissions?: "inherit" | "none" | {
|
|
||||||
env?: "inherit" | boolean;
|
|
||||||
hrtime?: "inherit" | boolean;
|
|
||||||
/** The format of the net access list must be `hostname[:port]`
|
|
||||||
* in order to be resolved.
|
|
||||||
*
|
|
||||||
* ```
|
|
||||||
* net: ["https://deno.land", "localhost:8080"],
|
|
||||||
* ```
|
|
||||||
* */
|
|
||||||
net?: "inherit" | boolean | string[];
|
|
||||||
plugin?: "inherit" | boolean;
|
|
||||||
read?: "inherit" | boolean | Array<string | URL>;
|
|
||||||
run?: "inherit" | boolean;
|
|
||||||
write?: "inherit" | boolean | Array<string | URL>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
postMessage(message: any, transfer: ArrayBuffer[]): void;
|
postMessage(message: any, transfer: ArrayBuffer[]): void;
|
||||||
postMessage(message: any, options?: PostMessageOptions): void;
|
postMessage(message: any, options?: PostMessageOptions): void;
|
||||||
|
|
|
@ -113,9 +113,10 @@ Deno.test({
|
||||||
name: "worker globals",
|
name: "worker globals",
|
||||||
fn: async function (): Promise<void> {
|
fn: async function (): Promise<void> {
|
||||||
const promise = deferred();
|
const promise = deferred();
|
||||||
|
const workerOptions: WorkerOptions = { type: "module" };
|
||||||
const w = new Worker(
|
const w = new Worker(
|
||||||
new URL("workers/worker_globals.ts", import.meta.url).href,
|
new URL("workers/worker_globals.ts", import.meta.url).href,
|
||||||
{ type: "module" },
|
workerOptions,
|
||||||
);
|
);
|
||||||
w.onmessage = (e): void => {
|
w.onmessage = (e): void => {
|
||||||
assertEquals(e.data, "true, true, true");
|
assertEquals(e.data, "true, true, true");
|
||||||
|
|
Loading…
Reference in a new issue