CoolFace
Apppublic

opusdev/vector-similarity-api

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes
composeSignals.js49 linesDownload Raw Back to helpers
1import CanceledError from "../cancel/CanceledError.js";2import AxiosError from "../core/AxiosError.js";3import utils from '../utils.js';4 5const composeSignals = (signals, timeout) => {6  const {length} = (signals = signals ? signals.filter(Boolean) : []);7 8  if (timeout || length) {9    let controller = new AbortController();10 11    let aborted;12 13    const onabort = function (reason) {14      if (!aborted) {15        aborted = true;16        unsubscribe();17        const err = reason instanceof Error ? reason : this.reason;18        controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));19      }20    }21 22    let timer = timeout && setTimeout(() => {23      timer = null;24      onabort(new AxiosError(`timeout of ${timeout}ms exceeded`, AxiosError.ETIMEDOUT))25    }, timeout)26 27    const unsubscribe = () => {28      if (signals) {29        timer && clearTimeout(timer);30        timer = null;31        signals.forEach(signal => {32          signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);33        });34        signals = null;35      }36    }37 38    signals.forEach((signal) => signal.addEventListener('abort', onabort));39 40    const {signal} = controller;41 42    signal.unsubscribe = () => utils.asap(unsubscribe);43 44    return signal;45  }46}47 48export default composeSignals;49