Skip to content

Commit e935523

Browse files
authored
fix(bundle): Deno.bundle work in Worker (denoland#31316)
Currently, `Deno.bundle` throws exception in a `Worker`. ``` error: Uncaught (in worker "") (in promise) Error: default BundleProvider does not do anything ``` This PR passes the clone of BundleProvider to workers. --- minimum reproduction: ```ts #! /usr/bin/env -S deno run --allow-read=. --unstable-bundle if (typeof WorkerGlobalScope === "undefined") { const worker = new Worker(import.meta.url, { type: "module" }); worker.onmessage = () => Deno.exit(); } else { await Deno.bundle({ entrypoints: [import.meta.url], write: false }); postMessage("done"); } ```
1 parent ccc9aba commit e935523

File tree

6 files changed

+32
-1
lines changed

6 files changed

+32
-1
lines changed

cli/lib/worker.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,7 @@ impl<TSys: DenoLibSys> LibWorkerFactorySharedState<TSys> {
462462
shared.npm_process_state_provider.clone(),
463463
),
464464
permissions: args.permissions,
465+
bundle_provider: shared.bundle_provider.clone(),
465466
};
466467
let maybe_initial_cwd = shared.options.maybe_initial_cwd.clone();
467468
let options = WebWorkerOptions {

runtime/web_worker.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,7 @@ pub struct WebWorkerServiceOptions<
389389
pub permissions: PermissionsContainer,
390390
pub root_cert_store_provider: Option<Arc<dyn RootCertStoreProvider>>,
391391
pub shared_array_buffer_store: Option<SharedArrayBufferStore>,
392+
pub bundle_provider: Option<Arc<dyn deno_bundle_runtime::BundleProvider>>,
392393
}
393394

394395
pub struct WebWorkerOptions {
@@ -589,7 +590,7 @@ impl WebWorker {
589590
ops::permissions::deno_permissions::init(),
590591
ops::tty::deno_tty::init(),
591592
ops::http::deno_http_runtime::init(),
592-
deno_bundle_runtime::deno_bundle_runtime::init(None),
593+
deno_bundle_runtime::deno_bundle_runtime::init(services.bundle_provider),
593594
ops::bootstrap::deno_bootstrap::init(
594595
options.startup_snapshot.and_then(|_| Default::default()),
595596
false,
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"tempDir": true,
3+
"tests": {
4+
"bundle_in_worker": {
5+
"steps": [
6+
{
7+
"args": "run --unstable-bundle --quiet --allow-read=./worker.ts main.ts",
8+
"output": "main.ts.out"
9+
}
10+
]
11+
}
12+
}
13+
}

tests/specs/bundle/worker/main.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
const worker = new Worker(import.meta.resolve("./worker.ts"), {
2+
type: "module",
3+
});
4+
worker.onmessage = () => Deno.exit(0);
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Worker: bundling module
2+
Worker: bundle result.success: true
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// deno-lint-ignore-file no-console
2+
console.log("Worker: bundling module");
3+
const result = await Deno.bundle({
4+
entrypoints: ["./main.ts"],
5+
write: false,
6+
outputDir: "/",
7+
});
8+
console.log("Worker: bundle result.success:", result.success);
9+
10+
postMessage("done");

0 commit comments

Comments
 (0)