This commit is contained in:
2024-04-18 21:12:37 +02:00
commit 78abae13b7
76 changed files with 8565 additions and 0 deletions

53
ts/promise-make-naked/index.ts Executable file
View File

@@ -0,0 +1,53 @@
/* IMPORT */
import {NOOP} from './constants.js';
import type {PromiseResolve, PromiseReject, Result} from './types.js';
/* MAIN */
const makeNakedPromise = <T> (): Result<T> => {
let resolve: PromiseResolve<T> = NOOP;
let reject: PromiseReject = NOOP;
let resolved = false;
let rejected = false;
const promise = new Promise<T> ( ( 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 <T> ( fn: ( result: Result<T> ) => void ): Promise<T> => {
const result = makeNakedPromise<T> ();
await fn ( result );
return result.promise;
};
/* EXPORT */
export default makeNakedPromise;