44 lines
695 B
TypeScript
44 lines
695 B
TypeScript
|
|
/* IMPORT */
|
|
|
|
import makeNakedPromise from '../promise-make-naked/index.js';
|
|
import type {Callback} from './types.js';
|
|
|
|
/* MAIN */
|
|
|
|
const isFunction = ( value: unknown ): value is Function => {
|
|
|
|
return ( typeof value === 'function' );
|
|
|
|
};
|
|
|
|
const makeCounterPromise = (): { promise: Promise<void>, increment: Callback, decrement: Callback } => {
|
|
|
|
const {promise, resolve} = makeNakedPromise<void> ();
|
|
|
|
let counter = 0;
|
|
|
|
const increment = (): void => {
|
|
|
|
counter += 1;
|
|
|
|
};
|
|
|
|
const decrement = (): void => {
|
|
|
|
counter -= 1;
|
|
|
|
if ( counter ) return;
|
|
|
|
resolve ();
|
|
|
|
};
|
|
|
|
return { promise, increment, decrement };
|
|
|
|
};
|
|
|
|
/* EXPORT */
|
|
|
|
export {isFunction, makeCounterPromise};
|