diff options
Diffstat (limited to 'js/workers.ts')
-rw-r--r-- | js/workers.ts | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/js/workers.ts b/js/workers.ts index 1531b960b..f008ccecf 100644 --- a/js/workers.ts +++ b/js/workers.ts @@ -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( |