mirror of
https://github.com/denoland/deno.git
synced 2024-12-21 23:04:45 -05:00
BREAKING: make Worker.deno unstable (#5128)
This commit makes "Worker.deno" option unstable. Added new manual entry "docs/runtime/workers.md". Removed stale workers tests.
This commit is contained in:
parent
2b66b8a03e
commit
aca21dad1b
13 changed files with 60 additions and 81 deletions
|
@ -184,6 +184,9 @@ fn op_create_worker(
|
|||
};
|
||||
let args_name = args.name;
|
||||
let use_deno_namespace = args.use_deno_namespace;
|
||||
if use_deno_namespace {
|
||||
state.check_unstable("Worker.deno");
|
||||
}
|
||||
let parent_state = state.clone();
|
||||
let mut state = state.borrow_mut();
|
||||
let global_state = state.global_state.clone();
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
const w1 = new Worker("./039_worker_deno_ns/has_ns.ts", { type: "module" });
|
||||
const w2 = new Worker("./039_worker_deno_ns/no_ns.ts", { type: "module" });
|
||||
let w1MsgCount = 0;
|
||||
let w2MsgCount = 0;
|
||||
w1.onmessage = (msg): void => {
|
||||
console.log(msg.data);
|
||||
w1MsgCount++;
|
||||
if (w1MsgCount === 1) {
|
||||
w1.postMessage("CONTINUE");
|
||||
} else {
|
||||
w2.postMessage("START");
|
||||
}
|
||||
};
|
||||
w2.onmessage = (msg): void => {
|
||||
console.log(msg.data);
|
||||
w2MsgCount++;
|
||||
if (w2MsgCount === 1) {
|
||||
w2.postMessage("CONTINUE");
|
||||
} else {
|
||||
Deno.exit(0);
|
||||
}
|
||||
};
|
||||
w1.postMessage("START");
|
|
@ -1,4 +0,0 @@
|
|||
has_ns.ts: is window.Deno available: true
|
||||
[SPAWNED BY has_ns.ts] maybe_ns.ts: is window.Deno available: true
|
||||
no_ns.ts: is window.Deno available: false
|
||||
[SPAWNED BY no_ns.ts] maybe_ns.ts: is window.Deno available: false
|
|
@ -1,10 +0,0 @@
|
|||
onmessage = (msg): void => {
|
||||
if (msg.data === "START") {
|
||||
postMessage("has_ns.ts: is window.Deno available: " + !!window.Deno);
|
||||
} else {
|
||||
const worker = new Worker("./maybe_ns.ts");
|
||||
worker.onmessage = (msg): void => {
|
||||
postMessage("[SPAWNED BY has_ns.ts] " + msg.data);
|
||||
};
|
||||
}
|
||||
};
|
|
@ -1 +0,0 @@
|
|||
postMessage("maybe_ns.ts: is window.Deno available: " + !!window.Deno);
|
|
@ -1,10 +0,0 @@
|
|||
onmessage = (msg): void => {
|
||||
if (msg.data === "START") {
|
||||
postMessage("no_ns.ts: is window.Deno available: " + !!window.Deno);
|
||||
} else {
|
||||
const worker = new Worker("./maybe_ns.ts");
|
||||
worker.onmessage = (msg): void => {
|
||||
postMessage("[SPAWNED BY no_ns.ts] " + msg.data);
|
||||
};
|
||||
}
|
||||
};
|
|
@ -1,6 +0,0 @@
|
|||
const b = new Blob(["console.log('code from Blob'); postMessage('DONE')"]);
|
||||
const blobURL = URL.createObjectURL(b);
|
||||
const worker = new Worker(blobURL);
|
||||
worker.onmessage = (): void => {
|
||||
Deno.exit(0);
|
||||
};
|
|
@ -1 +0,0 @@
|
|||
code from Blob
|
|
@ -1,3 +0,0 @@
|
|||
const b = new Blob(['throw new Error("hello");']);
|
||||
const blobURL = URL.createObjectURL(b);
|
||||
new Worker(blobURL);
|
|
@ -1,3 +0,0 @@
|
|||
[WILDCARD]error: Uncaught Error: hello
|
||||
[WILDCARD]__anonymous__:1:7
|
||||
at [WILDCARD]__anonymous__:1:7
|
|
@ -985,6 +985,7 @@ fn workers() {
|
|||
.arg("test")
|
||||
.arg("--reload")
|
||||
.arg("--allow-net")
|
||||
.arg("--unstable")
|
||||
.arg("workers_test.ts")
|
||||
.spawn()
|
||||
.unwrap()
|
||||
|
@ -1080,17 +1081,6 @@ itest!(_038_checkjs {
|
|||
output: "038_checkjs.js.out",
|
||||
});
|
||||
|
||||
// TODO(bartlomieju): re-enable
|
||||
itest_ignore!(_039_worker_deno_ns {
|
||||
args: "run --reload 039_worker_deno_ns.ts",
|
||||
output: "039_worker_deno_ns.ts.out",
|
||||
});
|
||||
|
||||
itest_ignore!(_040_worker_blob {
|
||||
args: "run --reload 040_worker_blob.ts",
|
||||
output: "040_worker_blob.ts.out",
|
||||
});
|
||||
|
||||
itest!(_041_dyn_import_eval {
|
||||
args: "eval import('./subdir/mod4.js').then(console.log)",
|
||||
output: "041_dyn_import_eval.out",
|
||||
|
@ -1471,14 +1461,6 @@ itest!(error_local_static_import_from_remote_js {
|
|||
output: "error_local_static_import_from_remote.js.out",
|
||||
});
|
||||
|
||||
// TODO(bartlomieju) Re-enable
|
||||
itest_ignore!(error_worker_dynamic {
|
||||
args: "run --reload error_worker_dynamic.ts",
|
||||
check_stderr: true,
|
||||
exit_code: 1,
|
||||
output: "error_worker_dynamic.ts.out",
|
||||
});
|
||||
|
||||
itest!(exit_error42 {
|
||||
exit_code: 42,
|
||||
args: "run --reload exit_error42.ts",
|
||||
|
|
54
docs/runtime/workers.md
Normal file
54
docs/runtime/workers.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
## Workers
|
||||
|
||||
Deno supports
|
||||
[`Web Worker API`](https://developer.mozilla.org/en-US/docs/Web/API/Worker/Worker).
|
||||
|
||||
Workers can be used to run code on multiple threads. Each instance of `Worker`
|
||||
is run on a separate thread, dedicated only to that worker.
|
||||
|
||||
Currently Deno supports only `module` type workers; thus it's essential to pass
|
||||
`type: "module"` option when creating new worker:
|
||||
|
||||
```ts
|
||||
// Good
|
||||
new Worker("./worker.js", { type: "module" });
|
||||
|
||||
// Bad
|
||||
new Worker("./worker.js");
|
||||
new Worker("./worker.js", { type: "classic" });
|
||||
```
|
||||
|
||||
### Using Deno in worker
|
||||
|
||||
**UNSTABLE**: This feature is unstable and requires `--unstable` flag
|
||||
|
||||
By default `Deno` namespace is not available in worker scope.
|
||||
|
||||
To add `Deno` namespace pass `deno: true` option when creating new worker:
|
||||
|
||||
```ts
|
||||
// main.js
|
||||
const worker = new Worker("./worker.js", { type: "module", deno: true });
|
||||
worker.postMessage({ filename: "./log.txt" });
|
||||
|
||||
// worker.js
|
||||
self.onmessage = async (e) => {
|
||||
const { filename } = e.data;
|
||||
const text = await Deno.readTextFile(filename);
|
||||
console.log(text);
|
||||
self.close();
|
||||
};
|
||||
|
||||
// log.txt
|
||||
hello world
|
||||
```
|
||||
|
||||
```shell
|
||||
$ deno run --allow-read --unstable main.js
|
||||
hello world
|
||||
```
|
||||
|
||||
When `Deno` namespace is available in worker scope; the worker inherits parent
|
||||
process permissions (the ones specified using `--allow-*` flags).
|
||||
|
||||
We intend to make permissions configurable for workers.
|
|
@ -18,7 +18,8 @@
|
|||
"children": {
|
||||
"program_lifecycle": "Program Lifecycle",
|
||||
"compiler_apis": "Compiler APIs",
|
||||
"unstable": "Unstable APIs"
|
||||
"unstable": "Unstable APIs",
|
||||
"workers": "Workers"
|
||||
}
|
||||
},
|
||||
"linking_to_external_code": {
|
||||
|
|
Loading…
Reference in a new issue