Remove Singleton from BaseStore to remove global shared state

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton committed 2022-12-06 09:18:58 -05:00
1 parent 2fa09ba10d
commit 257082e699
14 files changed
+97 -72

No files matched your search

+4 -1
View File
@@ -52,7 +52,10 @@ export function getOrInsertSet<K, SK>(map: Map<K, Set<SK>>, key: K): Set<SK> {
* Like `getOrInsert` but with delayed creation of the item. Which is useful
* if it is very expensive to create the initial value.
*/
export function getOrInsertWith<K, V>(map: Map<K, V>, key: K, builder: () => V): V {
export function getOrInsertWith<K, V>(map: Map<K, V>, key: K, builder: () => V): V;
export function getOrInsertWith<K extends object, V>(map: Map<K, V> | WeakMap<K, V>, key: K, builder: () => V): V;
export function getOrInsertWith<K extends object, V>(map: Map<K, V> | WeakMap<K, V>, key: K, builder: () => V): V {
if (!map.has(key)) {
map.set(key, builder());
}
@@ -0,0 +1,16 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import { randomBytes } from "crypto";
import { promisify } from "util";
export type RandomBytes = (size: number) => Promise<Buffer>;
const randomBytesInjectable = getInjectable({
id: "random-bytes",
instantiate: (): RandomBytes => promisify(randomBytes),
});
export default randomBytesInjectable;
+5 -2
View File
@@ -3,10 +3,13 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
interface StaticThis<T, R extends any[]> { new(...args: R): T }
export interface StaticThis<T, R extends any[]> { new(...args: R): T }
/**
* @deprecated This is a form of global shared state
*/
export class Singleton {
private static instances = new WeakMap<object, Singleton>();
private static readonly instances = new WeakMap<object, Singleton>();
private static creating = "";
constructor() {