UNPKG

ts-md5

Version:

TypeScript MD5 implementation

64 lines 1.99 kB
; export class ParallelHasher { constructor(workerUri, workerOptions) { this._queue = []; this._ready = true; const self = this; if (Worker) { self._hashWorker = new Worker(workerUri, workerOptions); self._hashWorker.onmessage = self._recievedMessage.bind(self); self._hashWorker.onerror = (err) => { self._ready = false; console.error('Hash worker failure', err); }; } else { self._ready = false; console.error('Web Workers are not supported in this browser'); } } /** * Hash a blob of data in the worker * @param blob Data to hash * @returns Promise of the Hashed result */ hash(blob) { const self = this; let promise; promise = new Promise((resolve, reject) => { self._queue.push({ blob, resolve, reject, }); self._processNext(); }); return promise; } /** Terminate any existing hash requests */ terminate() { this._ready = false; this._hashWorker.terminate(); } // Processes the next item in the queue _processNext() { if (this._ready && !this._processing && this._queue.length > 0) { this._processing = this._queue.pop(); this._hashWorker.postMessage(this._processing.blob); } } // Hash result is returned from the worker _recievedMessage(evt) { var _a, _b; const data = evt.data; if (data.success) { (_a = this._processing) === null || _a === void 0 ? void 0 : _a.resolve(data.result); } else { (_b = this._processing) === null || _b === void 0 ? void 0 : _b.reject(data.result); } this._processing = undefined; this._processNext(); } } //# sourceMappingURL=parallel_hasher.js.map