From: Chris Duncan Date: Tue, 12 May 2026 13:44:10 +0000 (-0700) Subject: Refactor worker termination to reject all pending promises. X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=9578c86b6c35eca76a0737af8b388c48e1a6f45f;p=libnemo.git Refactor worker termination to reject all pending promises. --- diff --git a/src/lib/vault/index.ts b/src/lib/vault/index.ts index 8f1e59c..16f4108 100644 --- a/src/lib/vault/index.ts +++ b/src/lib/vault/index.ts @@ -16,16 +16,17 @@ type Task = { const vaultWorker = VAULT_WORKER const LOCKED = 'locked' const UNLOCKED = 'unlocked' +const TERMINATED = 'Worker terminated' export class Vault { - #eventTarget = new EventTarget() + #eventTarget: EventTarget = new EventTarget() #job?: Task #isIdle: boolean = true #isLocked: boolean = true #isTerminated: boolean = false #queue: Task[] = [] #url: string - #worker: Worker | NodeWorker + #worker: NodeWorker | Worker // Compose event emission for status changes addEventListener = this.#eventTarget.addEventListener.bind(this.#eventTarget) @@ -53,7 +54,7 @@ export class Vault { request> (data: Record>): Promise> { if (this.#isTerminated) { - throw new Error('Worker terminated') + throw new Error(TERMINATED) } return new Promise((resolve, reject): void => { const task: Task = { @@ -69,9 +70,17 @@ export class Vault { } terminate (): void { - this.#job = undefined - this.#worker.terminate() this.#isTerminated = true + this.#worker.terminate() + BROWSER: URL.revokeObjectURL(this.#url) + //@ts-expect-error + NODE: this.#worker.unref() + this.#job?.reject(TERMINATED) + this.#job = undefined + for (const task of this.#queue) { + task?.reject?.(TERMINATED) + } + this.#queue = [] } #process = (): void => {