UNPKG

softkave-js-utils

Version:

JavaScript & Typescript utility functions, types, and classes

30 lines 811 B
import { isUndefined, noop } from 'lodash-es'; import { cast } from '../other/index.js'; export function singletonFn(initFn, disposeFn = noop) { let data = undefined; let refs = 0; const mainFn = () => { refs++; if (isUndefined(data)) { data = initFn(); } return data; }; const invalidateFn = async () => { if (!isUndefined(data)) { await disposeFn(data); } data = undefined; }; const releaseFn = async () => { refs--; if (refs === 0 && !isUndefined(data)) { await disposeFn(data); data = undefined; } }; cast(mainFn).invalidate = invalidateFn; cast(mainFn).release = releaseFn; return cast(mainFn); } //# sourceMappingURL=singleton.js.map