diff --git a/src/extensions/as-legacy-globals-for-extension-api/as-legacy-global-singleton-object-for-extension-api.ts b/src/extensions/as-legacy-globals-for-extension-api/as-legacy-global-singleton-object-for-extension-api.ts new file mode 100644 index 0000000000..b9ed0f826e --- /dev/null +++ b/src/extensions/as-legacy-globals-for-extension-api/as-legacy-global-singleton-object-for-extension-api.ts @@ -0,0 +1,36 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import type { Injectable } from "@ogre-tools/injectable"; +import { asLegacyGlobalForExtensionApi } from "./as-legacy-global-object-for-extension-api"; +import { getLegacyGlobalDiForExtensionApi } from "./legacy-global-di-for-extension-api"; +import loggerInjectable from "../../common/logger.injectable"; + +export const asLegacyGlobalSingletonForExtensionApi = < + Instance, + InstantiationParameter = void, +>( + injectable: Injectable, + instantiationParameter?: InstantiationParameter, + ) => { + const instance = asLegacyGlobalForExtensionApi( + injectable, + instantiationParameter, + ); + + return { + createInstance: () => instance, + + getInstance: () => instance, + + resetInstance: () => { + const di = getLegacyGlobalDiForExtensionApi(); + const logger = di.inject(loggerInjectable); + + logger.warn( + `resetInstance() for a legacy global singleton of "${injectable.id}" does nothing.`, + ); + }, + }; +};