/* IMPORT */ import {NOOP} from './constants.js'; import type {PromiseResolve, PromiseReject, Result} from './types.js'; /* MAIN */ const makeNakedPromise = (): Result => { let resolve: PromiseResolve = NOOP; let reject: PromiseReject = NOOP; let resolved = false; let rejected = false; const promise = new Promise ( ( res, rej ): void => { resolve = value => { resolved = true; return res ( value ); }; reject = value => { rejected = true; return rej ( value ); }; }); const isPending = (): boolean => !resolved && !rejected; const isResolved = (): boolean => resolved; const isRejected = (): boolean => rejected; return {promise, resolve, reject, isPending, isResolved, isRejected}; }; /* UTILITIES */ makeNakedPromise.wrap = async ( fn: ( result: Result ) => void ): Promise => { const result = makeNakedPromise (); await fn ( result ); return result.promise; }; /* EXPORT */ export default makeNakedPromise;