graphql
Version:
A Query Language and Runtime which can target any service.
1 lines • 3.02 kB
Source Map (JSON)
{"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"]}