{"version":3,"file":"CancelablePromise.mjs","names":["toStringTag","Symbol","CancelablePromiseInternal","constructor","executor","internals","defaultInternals","promise","Promise","resolve","reject","onCancel","onCancelList","push","cancel","bind","then","onfulfilled","onrejected","makeCancelable","createCallback","catch","finally","onfinally","runWhenCanceled","filter","callback","isCanceled","callbacks","err","console","error","CancelablePromise","all","iterable","makeAllCancelable","allSettled","any","race","value","cancelable","reason","isCancelablePromise","onResult","arg","result","resolvable"],"sources":["../src/CancelablePromise.ts"],"sourcesContent":["const toStringTag: typeof Symbol.toStringTag =\n  typeof Symbol !== 'undefined' ? Symbol.toStringTag : ('@@toStringTag' as any);\n\nclass CancelablePromiseInternal<T = any> {\n  #internals: Internals;\n  #promise: Promise<T>;\n\n  [toStringTag] = 'CancelablePromise';\n\n  constructor({\n    executor = () => {},\n    internals = defaultInternals(),\n    promise = new Promise<T>((resolve, reject) =>\n      executor(resolve, reject, (onCancel) => {\n        internals.onCancelList.push(onCancel);\n      })\n    ),\n  }: {\n    executor?: (\n      resolve: (value: T | PromiseLike<T>) => void,\n      reject: (reason?: any) => void,\n      onCancel: (cancelHandler: () => void) => void\n    ) => void;\n    internals?: Internals;\n    promise?: Promise<T>;\n  }) {\n    this.cancel = this.cancel.bind(this);\n    this.#internals = internals;\n    this.#promise =\n      promise ||\n      new Promise<T>((resolve, reject) =>\n        executor(resolve, reject, (onCancel) => {\n          internals.onCancelList.push(onCancel);\n        })\n      );\n  }\n\n  then<TResult1 = T, TResult2 = never>(\n    onfulfilled?:\n      | ((\n          value: T\n        ) => TResult1 | PromiseLike<TResult1> | CancelablePromise<TResult1>)\n      | undefined\n      | null,\n    onrejected?:\n      | ((\n          reason: any\n        ) => TResult2 | PromiseLike<TResult2> | CancelablePromise<TResult2>)\n      | undefined\n      | null\n  ): CancelablePromise<TResult1 | TResult2> {\n    return makeCancelable<TResult1 | TResult2>(\n      this.#promise.then(\n        createCallback(onfulfilled, this.#internals),\n        createCallback(onrejected, this.#internals)\n      ),\n      this.#internals\n    );\n  }\n\n  catch<TResult = never>(\n    onrejected?:\n      | ((\n          reason: any\n        ) => TResult | PromiseLike<TResult> | CancelablePromise<TResult>)\n      | undefined\n      | null\n  ): CancelablePromise<T | TResult> {\n    return makeCancelable<T | TResult>(\n      this.#promise.catch(createCallback(onrejected, this.#internals)),\n      this.#internals\n    );\n  }\n\n  finally(\n    onfinally?: (() => void) | undefined | null,\n    runWhenCanceled?: boolean\n  ): CancelablePromise<T> {\n    if (runWhenCanceled) {\n      this.#internals.onCancelList.push(onfinally);\n    }\n    return makeCancelable<T>(\n      this.#promise.finally(\n        createCallback(() => {\n          if (onfinally) {\n            if (runWhenCanceled) {\n              this.#internals.onCancelList =\n                this.#internals.onCancelList.filter(\n                  (callback) => callback !== onfinally\n                );\n            }\n            return onfinally();\n          }\n        }, this.#internals)\n      ),\n      this.#internals\n    );\n  }\n\n  cancel(): void {\n    this.#internals.isCanceled = true;\n    const callbacks = this.#internals.onCancelList;\n    this.#internals.onCancelList = [];\n    for (const callback of callbacks) {\n      if (typeof callback === 'function') {\n        try {\n          callback();\n        } catch (err) {\n          console.error(err);\n        }\n      }\n    }\n  }\n\n  isCanceled(): boolean {\n    return this.#internals.isCanceled === true;\n  }\n}\n\nexport class CancelablePromise<T = any> extends CancelablePromiseInternal<T> {\n  static all = function all(iterable: any) {\n    return makeAllCancelable(iterable, Promise.all(iterable));\n  } as CancelablePromiseOverloads['all'];\n\n  static allSettled = function allSettled(iterable: any) {\n    return makeAllCancelable(iterable, Promise.allSettled(iterable));\n  } as CancelablePromiseOverloads['allSettled'];\n\n  static any = function any(iterable: any) {\n    return makeAllCancelable(iterable, Promise.any(iterable));\n  } as CancelablePromiseOverloads['any'];\n\n  static race = function race(iterable) {\n    return makeAllCancelable(iterable, Promise.race(iterable));\n  } as CancelablePromiseOverloads['race'];\n\n  static resolve = function resolve(value) {\n    return cancelable(Promise.resolve(value));\n  } as CancelablePromiseOverloads['resolve'];\n\n  static reject = function reject(reason) {\n    return cancelable(Promise.reject(reason));\n  } as CancelablePromiseOverloads['reject'];\n\n  static isCancelable = isCancelablePromise;\n\n  constructor(\n    executor: (\n      resolve: (value: T | PromiseLike<T>) => void,\n      reject: (reason?: any) => void,\n      onCancel: (cancelHandler: () => void) => void\n    ) => void\n  ) {\n    super({ executor });\n  }\n}\n\nexport default CancelablePromise;\n\nexport function cancelable<T = any>(promise: Promise<T>): CancelablePromise<T> {\n  return makeCancelable(promise, defaultInternals());\n}\n\nexport function isCancelablePromise(promise: any): boolean {\n  return (\n    promise instanceof CancelablePromise ||\n    promise instanceof CancelablePromiseInternal\n  );\n}\n\nfunction createCallback(onResult: any, internals: Internals) {\n  if (onResult) {\n    return (arg?: any) => {\n      if (!internals.isCanceled) {\n        const result = onResult(arg);\n        if (isCancelablePromise(result)) {\n          internals.onCancelList.push(result.cancel);\n        }\n        return result;\n      }\n      return arg;\n    };\n  }\n}\n\nfunction makeCancelable<T>(promise: Promise<T>, internals: Internals) {\n  return new CancelablePromiseInternal<T>({\n    internals,\n    promise,\n  }) as CancelablePromise<T>;\n}\n\nfunction makeAllCancelable(iterable: any, promise: Promise<any>) {\n  const internals = defaultInternals();\n  internals.onCancelList.push(() => {\n    for (const resolvable of iterable) {\n      if (isCancelablePromise(resolvable)) {\n        resolvable.cancel();\n      }\n    }\n  });\n  return new CancelablePromiseInternal({ internals, promise });\n}\n\nfunction defaultInternals(): Internals {\n  return { isCanceled: false, onCancelList: [] };\n}\n\ninterface Internals {\n  isCanceled: boolean;\n  onCancelList: any[];\n}\n\ninterface CancelablePromiseOverloads {\n  all<T extends readonly unknown[] | []>(\n    values: T\n  ): CancelablePromise<{ -readonly [P in keyof T]: Awaited<T[P]> }>;\n\n  allSettled<T extends readonly unknown[] | []>(\n    values: T\n  ): CancelablePromise<{\n    -readonly [P in keyof T]: PromiseSettledResult<Awaited<T[P]>>;\n  }>;\n\n  allSettled<T>(\n    values: Iterable<T | PromiseLike<T> | CancelablePromise<T>>\n  ): CancelablePromise<PromiseSettledResult<Awaited<T>>[]>;\n\n  any<T extends readonly unknown[] | []>(\n    values: T\n  ): CancelablePromise<Awaited<T[number]>>;\n\n  any<T>(\n    values: Iterable<T | PromiseLike<T> | CancelablePromise<T>>\n  ): CancelablePromise<Awaited<T>>;\n\n  race<T extends readonly unknown[] | []>(\n    values: T\n  ): CancelablePromise<Awaited<T[number]>>;\n\n  resolve(): CancelablePromise<void>;\n\n  resolve<T>(\n    value: T | PromiseLike<T> | CancelablePromise<T>\n  ): CancelablePromise<T>;\n\n  reject<T = never>(reason?: any): CancelablePromise<T>;\n}\n"],"mappings":"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"}