blob: a2426cff73dcdd53174ddcb705abec2f57f8d064 [file] [log] [blame]
interface ClassInterface<T, Args extends unknown[]> {
new (...args: Args): T;
}
export default function makeSingleton<T, Args extends unknown[]>(
BaseClass: ClassInterface<T, Args>,
...args: Args
): () => T {
let singleton: T;
return function getInstance() {
if (!singleton) {
singleton = new BaseClass(...args);
}
return singleton;
};
}