softkave-js-utils
Version:
JavaScript & Typescript utility functions, types, and classes
30 lines • 811 B
JavaScript
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