{"version":3,"file":"cancellablePromise.js","sourceRoot":"","sources":["../../src/execution/cancellablePromise.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,4CAA2C;AAS1E,MAAM,UAAU,gBAAgB,CAC9B,eAA2B;IAE3B,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,oBAAoB,EAAK,CAAC;IAC/D,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,MAAM,aAAa,GAAG,CAAC,KAAQ,EAAQ,EAAE;QACvC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QACD,OAAO,GAAG,IAAI,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,CAAC,KAAc,EAAQ,EAAE;QAC5C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QACD,OAAO,GAAG,IAAI,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC,CAAC;IAEF,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAElD,OAAO;QACL,OAAO;QACP,KAAK,CAAC,MAAgB;YACpB,YAAY,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC;AAGD,MAAM,UAAU,kBAAkB,CAChC,OAAmB,EACnB,WAAwB;IAExB,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAE5C,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACpC,OAAO,SAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC,CAAC;IACF,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAE/C,SAAS,CAAC,OAAO,CAAC,IAAI,CACpB,GAAG,EAAE;QACH,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC,EACD,GAAG,EAAE;QACH,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC,CACF,CAAC;IAEF,OAAO,SAAS,CAAC,OAAO,CAAC;AAC3B,CAAC","sourcesContent":["import { promiseWithResolvers } from '../jsutils/promiseWithResolvers.ts';\n\n/** @internal */\nexport interface CancellablePromise<T> {\n  promise: Promise<T>;\n  abort: (reason?: unknown) => void;\n}\n\n/** @internal */\nexport function withCancellation<T>(\n  originalPromise: Promise<T>,\n): CancellablePromise<T> {\n  const { promise, resolve, reject } = promiseWithResolvers<T>();\n  let settled = false;\n\n  const settleResolve = (value: T): void => {\n    if (settled) {\n      return;\n    }\n    settled = true;\n    resolve(value);\n  };\n  const settleReject = (error: unknown): void => {\n    if (settled) {\n      return;\n    }\n    settled = true;\n    reject(error);\n  };\n\n  originalPromise.then(settleResolve, settleReject);\n\n  return {\n    promise,\n    abort(reason?: unknown): void {\n      settleReject(reason);\n    },\n  };\n}\n\n/** @internal */\nexport function cancellablePromise<T>(\n  promise: Promise<T>,\n  abortSignal: AbortSignal,\n): Promise<T> {\n  const withAbort = withCancellation(promise);\n\n  if (abortSignal.aborted) {\n    withAbort.abort(abortSignal.reason);\n    return withAbort.promise;\n  }\n\n  const onAbort = () => {\n    abortSignal.removeEventListener('abort', onAbort);\n    withAbort.abort(abortSignal.reason);\n  };\n  abortSignal.addEventListener('abort', onAbort);\n\n  withAbort.promise.then(\n    () => {\n      abortSignal.removeEventListener('abort', onAbort);\n    },\n    () => {\n      abortSignal.removeEventListener('abort', onAbort);\n    },\n  );\n\n  return withAbort.promise;\n}\n"]}