diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/dts/lib.deno.shared_globals.d.ts | 2 | ||||
-rw-r--r-- | cli/dts/lib.deno.worker.d.ts | 6 | ||||
-rw-r--r-- | cli/main.rs | 4 | ||||
-rw-r--r-- | cli/tests/workers/message_port.ts | 14 | ||||
-rw-r--r-- | cli/tests/workers/nonexistent_worker.out | 2 | ||||
-rw-r--r-- | cli/tests/workers/permissions_blob_local.ts.out | 2 | ||||
-rw-r--r-- | cli/tests/workers/permissions_blob_remote.ts.out | 2 | ||||
-rw-r--r-- | cli/tests/workers/permissions_data_local.ts.out | 2 | ||||
-rw-r--r-- | cli/tests/workers/permissions_data_remote.ts.out | 2 | ||||
-rw-r--r-- | cli/tests/workers/permissions_dynamic_remote.ts.out | 2 | ||||
-rw-r--r-- | cli/tests/workers/permissions_remote_remote.ts.out | 2 | ||||
-rw-r--r-- | cli/tests/workers/test.ts | 53 | ||||
-rw-r--r-- | cli/tests/workers/worker_error.ts.out | 2 | ||||
-rw-r--r-- | cli/tests/workers/worker_nested_error.ts.out | 2 |
14 files changed, 83 insertions, 14 deletions
diff --git a/cli/dts/lib.deno.shared_globals.d.ts b/cli/dts/lib.deno.shared_globals.d.ts index 46154c64e..be35fae01 100644 --- a/cli/dts/lib.deno.shared_globals.d.ts +++ b/cli/dts/lib.deno.shared_globals.d.ts @@ -386,7 +386,7 @@ declare class Worker extends EventTarget { specifier: string | URL, options?: WorkerOptions, ); - postMessage(message: any, transfer: ArrayBuffer[]): void; + postMessage(message: any, transfer: Transferable[]): void; postMessage(message: any, options?: PostMessageOptions): void; addEventListener<K extends keyof WorkerEventMap>( type: K, diff --git a/cli/dts/lib.deno.worker.d.ts b/cli/dts/lib.deno.worker.d.ts index eb8f6ebf1..7d8f6078b 100644 --- a/cli/dts/lib.deno.worker.d.ts +++ b/cli/dts/lib.deno.worker.d.ts @@ -68,7 +68,8 @@ declare class DedicatedWorkerGlobalScope extends WorkerGlobalScope { | ((this: DedicatedWorkerGlobalScope, ev: MessageEvent) => any) | null; close(): void; - postMessage(message: any): void; + postMessage(message: any, transfer: Transferable[]): void; + postMessage(message: any, options?: PostMessageOptions): void; addEventListener<K extends keyof DedicatedWorkerGlobalScopeEventMap>( type: K, listener: ( @@ -105,7 +106,8 @@ declare var onmessageerror: | ((this: DedicatedWorkerGlobalScope, ev: MessageEvent) => any) | null; declare function close(): void; -declare function postMessage(message: any): void; +declare function postMessage(message: any, transfer: Transferable[]): void; +declare function postMessage(message: any, options?: PostMessageOptions): void; declare var navigator: WorkerNavigator; declare var onerror: | ((this: DedicatedWorkerGlobalScope, ev: ErrorEvent) => any) diff --git a/cli/main.rs b/cli/main.rs index 2586e9b60..29151f14b 100644 --- a/cli/main.rs +++ b/cli/main.rs @@ -125,7 +125,7 @@ fn create_web_worker_callback( broadcast_channel: program_state.broadcast_channel.clone(), }; - let mut worker = WebWorker::from_options( + let (mut worker, external_handle) = WebWorker::from_options( args.name, args.permissions, args.main_module, @@ -151,7 +151,7 @@ fn create_web_worker_callback( } worker.bootstrap(&options); - worker + (worker, external_handle) }) } diff --git a/cli/tests/workers/message_port.ts b/cli/tests/workers/message_port.ts new file mode 100644 index 000000000..d78304a39 --- /dev/null +++ b/cli/tests/workers/message_port.ts @@ -0,0 +1,14 @@ +const channel = new MessageChannel(); + +channel.port2.onmessage = (e) => { + channel.port2.postMessage(e.data === "2"); + channel.port2.close(); +}; + +self.postMessage("1", [channel.port1]); + +self.onmessage = (e) => { + const port1 = e.ports[0]; + port1.postMessage(e.data === "3"); + port1.close(); +}; diff --git a/cli/tests/workers/nonexistent_worker.out b/cli/tests/workers/nonexistent_worker.out index e43b81c5f..04b9f801d 100644 --- a/cli/tests/workers/nonexistent_worker.out +++ b/cli/tests/workers/nonexistent_worker.out @@ -1,3 +1,3 @@ [WILDCARD]error: Uncaught (in worker "") Cannot resolve module "file:///[WILDCARD]cli/tests/workers/doesnt_exist.js". error: Uncaught (in promise) Error: Unhandled error event reached main worker. - at Worker.#poll ([WILDCARD]) + at Worker.#pollControl ([WILDCARD]) diff --git a/cli/tests/workers/permissions_blob_local.ts.out b/cli/tests/workers/permissions_blob_local.ts.out index a6a34e3a2..0835777ec 100644 --- a/cli/tests/workers/permissions_blob_local.ts.out +++ b/cli/tests/workers/permissions_blob_local.ts.out @@ -1,4 +1,4 @@ error: Uncaught (in worker "") Requires read access to "[WILDCARD]local_file.ts", run again with the --allow-read flag at blob:null/[WILDCARD]:1:0 error: Uncaught (in promise) Error: Unhandled error event reached main worker. - at Worker.#poll (deno:runtime/js/11_workers.js:243:23) + at Worker.#pollControl ([WILDCARD]) diff --git a/cli/tests/workers/permissions_blob_remote.ts.out b/cli/tests/workers/permissions_blob_remote.ts.out index 8bd277361..2d01458ca 100644 --- a/cli/tests/workers/permissions_blob_remote.ts.out +++ b/cli/tests/workers/permissions_blob_remote.ts.out @@ -1,4 +1,4 @@ error: Uncaught (in worker "") Requires net access to "example.com", run again with the --allow-net flag at blob:null/[WILDCARD]:1:0 error: Uncaught (in promise) Error: Unhandled error event reached main worker. - at Worker.#poll (deno:runtime/js/11_workers.js:243:23) + at Worker.#pollControl ([WILDCARD]) diff --git a/cli/tests/workers/permissions_data_local.ts.out b/cli/tests/workers/permissions_data_local.ts.out index 302ab99c8..2a6be2b57 100644 --- a/cli/tests/workers/permissions_data_local.ts.out +++ b/cli/tests/workers/permissions_data_local.ts.out @@ -1,4 +1,4 @@ error: Uncaught (in worker "") Requires read access to "[WILDCARD]local_file.ts", run again with the --allow-read flag at data:application/javascript;base64,[WILDCARD]:1:0 error: Uncaught (in promise) Error: Unhandled error event reached main worker. - at Worker.#poll (deno:runtime/js/11_workers.js:243:23) + at Worker.#pollControl ([WILDCARD]) diff --git a/cli/tests/workers/permissions_data_remote.ts.out b/cli/tests/workers/permissions_data_remote.ts.out index 9b0ae44cc..90677892a 100644 --- a/cli/tests/workers/permissions_data_remote.ts.out +++ b/cli/tests/workers/permissions_data_remote.ts.out @@ -1,4 +1,4 @@ error: Uncaught (in worker "") Requires net access to "example.com", run again with the --allow-net flag at data:application/javascript;base64,aW1wb3J0ICJodHRwczovL2V4YW1wbGUuY29tL3NvbWUvZmlsZS50cyI7:1:0 error: Uncaught (in promise) Error: Unhandled error event reached main worker. - at Worker.#poll (deno:runtime/js/11_workers.js:243:23) + at Worker.#pollControl ([WILDCARD]) diff --git a/cli/tests/workers/permissions_dynamic_remote.ts.out b/cli/tests/workers/permissions_dynamic_remote.ts.out index e2c671c34..e68c96df1 100644 --- a/cli/tests/workers/permissions_dynamic_remote.ts.out +++ b/cli/tests/workers/permissions_dynamic_remote.ts.out @@ -3,4 +3,4 @@ await import("https://example.com/some/file.ts"); ^ at async http://localhost:4545/cli/tests/workers/dynamic_remote.ts:2:1 [WILDCARD]error: Uncaught (in promise) Error: Unhandled error event reached main worker. - at Worker.#poll (deno:runtime/js/11_workers.js:243:23) + at Worker.#pollControl ([WILDCARD]) diff --git a/cli/tests/workers/permissions_remote_remote.ts.out b/cli/tests/workers/permissions_remote_remote.ts.out index 8b8820c7d..5656b75a1 100644 --- a/cli/tests/workers/permissions_remote_remote.ts.out +++ b/cli/tests/workers/permissions_remote_remote.ts.out @@ -1,4 +1,4 @@ error: Uncaught (in worker "") Requires net access to "example.com", run again with the --allow-net flag at http://localhost:4545/cli/tests/workers/static_remote.ts:2:0 error: Uncaught (in promise) Error: Unhandled error event reached main worker. - at Worker.#poll (deno:runtime/js/11_workers.js:243:23) + at Worker.#pollControl ([WILDCARD]) diff --git a/cli/tests/workers/test.ts b/cli/tests/workers/test.ts index 6a572b92f..b37b7aeb1 100644 --- a/cli/tests/workers/test.ts +++ b/cli/tests/workers/test.ts @@ -769,3 +769,56 @@ Deno.test({ worker.terminate(); }, }); + +Deno.test({ + name: "worker with relative specifier", + fn: async function (): Promise<void> { + assertEquals(location.href, "http://127.0.0.1:4545/cli/tests/"); + const promise = deferred(); + const w = new Worker( + "./workers/test_worker.ts", + { type: "module", name: "tsWorker" }, + ); + w.onmessage = (e): void => { + assertEquals(e.data, "Hello, world!"); + promise.resolve(); + }; + w.postMessage("Hello, world!"); + await promise; + w.terminate(); + }, +}); + +Deno.test({ + name: "Send MessagePorts from / to workers", + fn: async function (): Promise<void> { + const result = deferred(); + const worker = new Worker( + new URL("message_port.ts", import.meta.url).href, + { type: "module" }, + ); + + const channel = new MessageChannel(); + + worker.onmessage = (e) => { + assertEquals(e.data, "1"); + assertEquals(e.ports.length, 1); + const port1 = e.ports[0]; + port1.onmessage = (e) => { + assertEquals(e.data, true); + port1.close(); + worker.postMessage("3", [channel.port1]); + }; + port1.postMessage("2"); + }; + + channel.port2.onmessage = (e) => { + assertEquals(e.data, true); + channel.port2.close(); + result.resolve(); + }; + + await result; + worker.terminate(); + }, +}); diff --git a/cli/tests/workers/worker_error.ts.out b/cli/tests/workers/worker_error.ts.out index 244e56417..4a8e92f00 100644 --- a/cli/tests/workers/worker_error.ts.out +++ b/cli/tests/workers/worker_error.ts.out @@ -2,4 +2,4 @@ at foo ([WILDCARD]) at [WILDCARD] error: Uncaught (in promise) Error: Unhandled error event reached main worker. - at Worker.#poll ([WILDCARD]) + at Worker.#pollControl ([WILDCARD]) diff --git a/cli/tests/workers/worker_nested_error.ts.out b/cli/tests/workers/worker_nested_error.ts.out index 244e56417..4a8e92f00 100644 --- a/cli/tests/workers/worker_nested_error.ts.out +++ b/cli/tests/workers/worker_nested_error.ts.out @@ -2,4 +2,4 @@ at foo ([WILDCARD]) at [WILDCARD] error: Uncaught (in promise) Error: Unhandled error event reached main worker. - at Worker.#poll ([WILDCARD]) + at Worker.#pollControl ([WILDCARD]) |