export function assertFulfilled( item: PromiseSettledResult, ): item is PromiseFulfilledResult { return item.status === 'fulfilled' } export function assertRejected( item: PromiseSettledResult, ): item is PromiseRejectedResult { return item.status === 'rejected' } export function formatSettledErrors(settled: PromiseSettledResult[]) { if (settled.every(s => s.status === 'fulfilled')) return return settled.reduce((prev, curr, i) => { if (curr.status === 'rejected') { return prev + '\n' + `[${i}]: ` + `${JSON.stringify(curr)}` } return prev }, 'errors:\n') } export function createDeferredPromise() { let resolve: (value: T) => void let reject: (reason?: unknown) => void const promise = new Promise((res, rej) => { resolve = res reject = rej }) return { promise, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion reject: reject!, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion resolve: resolve!, } }