// Copyright 2021 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only export type ExplodePromiseResultType = Readonly<{ promise: Promise; resolve: (value: T) => void; reject: (error: Error) => void; }>; export function explodePromise(): ExplodePromiseResultType { let resolve: (value: T) => void; let reject: (error: Error) => void; const promise = new Promise((innerResolve, innerReject) => { resolve = innerResolve; reject = innerReject; }); return { promise, // Typescript thinks that resolve and reject can be undefined here. // eslint-disable-next-line @typescript-eslint/no-non-null-assertion resolve: resolve!, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion reject: reject!, }; }