mirror of
https://github.com/denoland/deno.git
synced 2025-09-27 04:39:10 +00:00
Provide option to delete Deno namespace in worker (#2717)
This commit is contained in:
parent
aaa7a3eac4
commit
ddee2dff14
18 changed files with 128 additions and 17 deletions
|
@ -20,10 +20,17 @@ export function decodeMessage(dataIntArray: Uint8Array): any {
|
|||
return JSON.parse(dataJson);
|
||||
}
|
||||
|
||||
function createWorker(specifier: string): number {
|
||||
function createWorker(
|
||||
specifier: string,
|
||||
includeDenoNamespace: boolean
|
||||
): number {
|
||||
const builder = flatbuffers.createBuilder();
|
||||
const specifier_ = builder.createString(specifier);
|
||||
const inner = msg.CreateWorker.createCreateWorker(builder, specifier_);
|
||||
const inner = msg.CreateWorker.createCreateWorker(
|
||||
builder,
|
||||
specifier_,
|
||||
includeDenoNamespace
|
||||
);
|
||||
const baseRes = sendSync(builder, msg.Any.CreateWorker, inner);
|
||||
assert(baseRes != null);
|
||||
assert(
|
||||
|
@ -149,6 +156,18 @@ export interface Worker {
|
|||
closed: Promise<void>;
|
||||
}
|
||||
|
||||
// TODO(kevinkassimo): Maybe implement reasonable web worker options?
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
||||
export interface WorkerOptions {}
|
||||
|
||||
/** Extended Deno Worker initialization options.
|
||||
* `noDenoNamespace` hides global `window.Deno` namespace for
|
||||
* spawned worker and nested workers spawned by it (default: false).
|
||||
*/
|
||||
export interface DenoWorkerOptions extends WorkerOptions {
|
||||
noDenoNamespace?: boolean;
|
||||
}
|
||||
|
||||
export class WorkerImpl implements Worker {
|
||||
private readonly rid: number;
|
||||
private isClosing: boolean = false;
|
||||
|
@ -157,8 +176,12 @@ export class WorkerImpl implements Worker {
|
|||
public onmessage?: (data: any) => void;
|
||||
public onmessageerror?: () => void;
|
||||
|
||||
constructor(specifier: string) {
|
||||
this.rid = createWorker(specifier);
|
||||
constructor(specifier: string, options?: DenoWorkerOptions) {
|
||||
let includeDenoNamespace = true;
|
||||
if (options && options.noDenoNamespace) {
|
||||
includeDenoNamespace = false;
|
||||
}
|
||||
this.rid = createWorker(specifier, includeDenoNamespace);
|
||||
this.run();
|
||||
this.isClosedPromise = hostGetWorkerClosed(this.rid);
|
||||
this.isClosedPromise.then(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue