From dbb9a0f5a8541ef5dcd39e88a0f01cec4a2ce253 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Wed, 15 Mar 2023 16:21:35 -0400 Subject: [PATCH] Clean up impl and rename to better describe intent Signed-off-by: Sebastian Malton --- .../core/src/common/base-store/base-store.ts | 148 ---------------- .../src/common/base-store/channel-prefix.ts | 11 -- .../create-base-store.injectable.ts | 37 ---- .../cluster-store/cluster-store.injectable.ts | 8 +- .../src/common/cluster-store/cluster-store.ts | 8 +- .../common/cluster-store/migration-token.ts | 2 +- .../src/common/hotbars/migrations-token.ts | 2 +- .../src/common/hotbars/store.injectable.ts | 8 +- packages/core/src/common/hotbars/store.ts | 8 +- .../persistent-storage/channel-prefix.ts | 15 ++ .../persistent-storage/create.injectable.ts | 158 ++++++++++++++++++ .../disable-sync.ts | 4 +- .../migrations.injectable.ts | 6 +- .../save-to-file.ts | 0 .../src/common/user-store/migrations-token.ts | 2 +- .../user-store/user-store.injectable.ts | 8 +- .../core/src/common/user-store/user-store.ts | 8 +- .../common/weblinks-store/migration-token.ts | 2 +- .../weblink-store.injectable.ts | 8 +- .../common/weblinks-store/weblink-store.ts | 8 +- .../src/extensions/base-extension-store.ts | 73 ++++---- .../core/src/extensions/common-api/stores.ts | 2 +- ...ystem-provisioner-store-injection-token.ts | 2 +- ...ile-system-provisioner-store.injectable.ts | 6 +- .../extensions-store.injectable.ts | 4 +- .../extensions-store/extensions-store.ts | 8 +- ...disable-sync-in-ipc-listener.injectable.ts | 4 +- .../ipc-channel-prefix.injectable.ts | 4 +- .../persist-state-to-config.injectable.ts | 2 +- ...disable-sync-in-ipc-listener.injectable.ts | 4 +- .../ipc-channel-prefix.injectable.ts | 4 +- .../persist-state-to-config.injectable.ts | 2 +- .../test-utils/get-extension-fake.ts | 6 +- 33 files changed, 277 insertions(+), 295 deletions(-) delete mode 100644 packages/core/src/common/base-store/base-store.ts delete mode 100644 packages/core/src/common/base-store/channel-prefix.ts delete mode 100644 packages/core/src/common/base-store/create-base-store.injectable.ts create mode 100644 packages/core/src/common/persistent-storage/channel-prefix.ts create mode 100644 packages/core/src/common/persistent-storage/create.injectable.ts rename packages/core/src/common/{base-store => persistent-storage}/disable-sync.ts (54%) rename packages/core/src/common/{base-store => persistent-storage}/migrations.injectable.ts (89%) rename packages/core/src/common/{base-store => persistent-storage}/save-to-file.ts (100%) diff --git a/packages/core/src/common/base-store/base-store.ts b/packages/core/src/common/base-store/base-store.ts deleted file mode 100644 index 360f284108..0000000000 --- a/packages/core/src/common/base-store/base-store.ts +++ /dev/null @@ -1,148 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import type Config from "conf"; -import type { Migrations, Options as ConfOptions } from "conf/dist/source/types"; -import type { IEqualsComparer } from "mobx"; -import { reaction } from "mobx"; -import { disposer, isPromiseLike } from "@k8slens/utilities"; -import { broadcastMessage } from "../ipc"; -import isEqual from "lodash/isEqual"; -import { kebabCase } from "lodash"; -import type { GetConfigurationFileModel } from "../get-configuration-file-model/get-configuration-file-model.injectable"; -import type { Logger } from "../logger"; -import type { PersistStateToConfig } from "./save-to-file"; -import type { GetBasenameOfPath } from "../path/get-basename.injectable"; -import type { EnlistMessageChannelListener } from "@k8slens/messaging"; -import { toJS } from "../utils"; - -export interface BaseStoreParams extends Omit, "migrations"> { - syncOptions?: { - fireImmediately?: boolean; - equals?: IEqualsComparer; - }; - readonly configName: string; - - migrations?: Migrations>; - - /** - * fromStore is called internally when a child class syncs with the file - * system. - * - * Note: This function **must** be synchronous. - * - * @param data the parsed information read from the stored JSON file - */ - fromStore(data: Partial): void; - - /** - * toJSON is called when syncing the store to the filesystem. It should - * produce a JSON serializable object representation of the current state. - * - * It is recommended that a round trip is valid. Namely, calling - * `this.fromStore(this.toJSON())` shouldn't change the state. - */ - toJSON(): T; -} - -export interface IpcChannelPrefixes { - local: string; - remote: string; -} - -export interface BaseStoreDependencies { - readonly logger: Logger; - readonly directoryForUserData: string; - readonly ipcChannelPrefixes: IpcChannelPrefixes; - readonly shouldDisableSyncInListener: boolean; - getConfigurationFileModel: GetConfigurationFileModel; - persistStateToConfig: PersistStateToConfig; - getBasenameOfPath: GetBasenameOfPath; - enlistMessageChannelListener: EnlistMessageChannelListener; -} - -/** - * Note: T should only contain base JSON serializable types. - */ -export class BaseStore { - private readonly syncDisposers = disposer(); - - readonly displayName = kebabCase(this.params.configName).toUpperCase(); - - constructor( - protected readonly dependencies: BaseStoreDependencies, - protected readonly params: BaseStoreParams, - ) { - this.dependencies = dependencies; - } - - /** - * This must be called after the last child's constructor is finished (or just before it finishes) - */ - load() { - this.dependencies.logger.info(`[${this.displayName}]: LOADING ...`); - - const config = this.dependencies.getConfigurationFileModel({ - projectName: "lens", - cwd: this.cwd(), - ...this.params as ConfOptions, - }); - - const res = this.params.fromStore(config.store); - - if (isPromiseLike(res)) { - this.dependencies.logger.error(`${this.displayName} extends BaseStore's fromStore method returns a Promise or promise-like object. This is an error and must be fixed.`); - } - - this.startSyncing(config); - this.dependencies.logger.info(`[${this.displayName}]: LOADED from ${config.path}`); - } - - protected cwd() { - return this.dependencies.directoryForUserData; - } - - private startSyncing(config: Config) { - const name = this.dependencies.getBasenameOfPath(config.path); - - const disableSync = () => this.syncDisposers(); - const enableSync = () => { - this.syncDisposers.push( - reaction( - () => toJS(this.params.toJSON()), // unwrap possible observables and react to everything - model => { - this.dependencies.persistStateToConfig(config, model); - broadcastMessage(`${this.dependencies.ipcChannelPrefixes.remote}:${config.path}`, model); - }, - this.params.syncOptions, - ), - this.dependencies.enlistMessageChannelListener({ - id: this.displayName, - channel: { - id: `${this.dependencies.ipcChannelPrefixes.local}:${config.path}`, - }, - handler: (model) => { - this.dependencies.logger.silly(`[${this.displayName}]: syncing ${name}`, { model }); - - if (this.dependencies.shouldDisableSyncInListener) { - disableSync(); - } - - // todo: use "resourceVersion" if merge required (to avoid equality checks => better performance) - if (!isEqual(this.params.toJSON(), model)) { - this.params.fromStore(model); - } - - if (this.dependencies.shouldDisableSyncInListener) { - enableSync(); - } - }, - }), - ); - }; - - enableSync(); - } -} diff --git a/packages/core/src/common/base-store/channel-prefix.ts b/packages/core/src/common/base-store/channel-prefix.ts deleted file mode 100644 index f2662c65e0..0000000000 --- a/packages/core/src/common/base-store/channel-prefix.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import { getInjectionToken } from "@ogre-tools/injectable"; -import type { IpcChannelPrefixes } from "./base-store"; - -export const baseStoreIpcChannelPrefixesInjectionToken = getInjectionToken({ - id: "base-store-ipc-channel-prefix-token", -}); diff --git a/packages/core/src/common/base-store/create-base-store.injectable.ts b/packages/core/src/common/base-store/create-base-store.injectable.ts deleted file mode 100644 index 07972575ca..0000000000 --- a/packages/core/src/common/base-store/create-base-store.injectable.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * 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 directoryForUserDataInjectable from "../app-paths/directory-for-user-data/directory-for-user-data.injectable"; -import getConfigurationFileModelInjectable from "../get-configuration-file-model/get-configuration-file-model.injectable"; -import loggerInjectable from "../logger.injectable"; -import getBasenameOfPathInjectable from "../path/get-basename.injectable"; -import { enlistMessageChannelListenerInjectionToken } from "@k8slens/messaging"; -import type { BaseStoreDependencies, BaseStoreParams } from "./base-store"; -import { BaseStore } from "./base-store"; -import { baseStoreIpcChannelPrefixesInjectionToken } from "./channel-prefix"; -import { shouldBaseStoreDisableSyncInIpcListenerInjectionToken } from "./disable-sync"; -import { persistStateToConfigInjectionToken } from "./save-to-file"; - -export type CreateBaseStore = (params: BaseStoreParams) => BaseStore; - -const createBaseStoreInjectable = getInjectable({ - id: "create-base-store", - instantiate: (di): CreateBaseStore => { - const deps: BaseStoreDependencies = { - directoryForUserData: di.inject(directoryForUserDataInjectable), - getConfigurationFileModel: di.inject(getConfigurationFileModelInjectable), - logger: di.inject(loggerInjectable), - getBasenameOfPath: di.inject(getBasenameOfPathInjectable), - ipcChannelPrefixes: di.inject(baseStoreIpcChannelPrefixesInjectionToken), - persistStateToConfig: di.inject(persistStateToConfigInjectionToken), - enlistMessageChannelListener: di.inject(enlistMessageChannelListenerInjectionToken), - shouldDisableSyncInListener: di.inject(shouldBaseStoreDisableSyncInIpcListenerInjectionToken), - }; - - return (params) => new BaseStore(deps, params); - }, -}); - -export default createBaseStoreInjectable; diff --git a/packages/core/src/common/cluster-store/cluster-store.injectable.ts b/packages/core/src/common/cluster-store/cluster-store.injectable.ts index 8d15f12725..37bc2e33ca 100644 --- a/packages/core/src/common/cluster-store/cluster-store.injectable.ts +++ b/packages/core/src/common/cluster-store/cluster-store.injectable.ts @@ -8,9 +8,9 @@ import readClusterConfigSyncInjectable from "./read-cluster-config.injectable"; import emitAppEventInjectable from "../app-event-bus/emit-event.injectable"; import loggerInjectable from "../logger.injectable"; import storeMigrationVersionInjectable from "../vars/store-migration-version.injectable"; -import storeMigrationsInjectable from "../base-store/migrations.injectable"; +import persistentStorageMigrationsInjectable from "../persistent-storage/migrations.injectable"; import { clusterStoreMigrationInjectionToken } from "./migration-token"; -import createBaseStoreInjectable from "../base-store/create-base-store.injectable"; +import createPersistentStorageInjectable from "../persistent-storage/create.injectable"; const clusterStoreInjectable = getInjectable({ id: "cluster-store", @@ -20,8 +20,8 @@ const clusterStoreInjectable = getInjectable({ emitAppEvent: di.inject(emitAppEventInjectable), logger: di.inject(loggerInjectable), storeMigrationVersion: di.inject(storeMigrationVersionInjectable), - migrations: di.inject(storeMigrationsInjectable, clusterStoreMigrationInjectionToken), - createBaseStore: di.inject(createBaseStoreInjectable), + migrations: di.inject(persistentStorageMigrationsInjectable, clusterStoreMigrationInjectionToken), + createPersistentStorage: di.inject(createPersistentStorageInjectable), }), }); diff --git a/packages/core/src/common/cluster-store/cluster-store.ts b/packages/core/src/common/cluster-store/cluster-store.ts index aa670dcafc..6e9b76e013 100644 --- a/packages/core/src/common/cluster-store/cluster-store.ts +++ b/packages/core/src/common/cluster-store/cluster-store.ts @@ -5,13 +5,13 @@ import { action, comparer, computed, observable } from "mobx"; -import type { BaseStore } from "../base-store/base-store"; +import type { BaseStore } from "../persistent-storage/base-store"; import { Cluster } from "../cluster/cluster"; import { toJS } from "../utils"; import type { ClusterModel, ClusterId } from "../cluster-types"; import type { ReadClusterConfigSync } from "./read-cluster-config.injectable"; import type { EmitAppEvent } from "../app-event-bus/emit-event.injectable"; -import type { CreateBaseStore } from "../base-store/create-base-store.injectable"; +import type { CreatePersistentStorage } from "../persistent-storage/create.injectable"; import type { Migrations } from "conf/dist/source/types"; import type { Logger } from "../logger"; @@ -22,7 +22,7 @@ export interface ClusterStoreModel { interface Dependencies { readClusterConfigSync: ReadClusterConfigSync; emitAppEvent: EmitAppEvent; - createBaseStore: CreateBaseStore; + createPersistentStorage: CreatePersistentStorage; readonly storeMigrationVersion: string; readonly migrations: Migrations>; readonly logger: Logger; @@ -33,7 +33,7 @@ export class ClusterStore { private readonly store: BaseStore; constructor(protected readonly dependencies: Dependencies) { - this.store = this.dependencies.createBaseStore({ + this.store = this.dependencies.createPersistentStorage({ configName: "lens-cluster-store", accessPropertiesByDotNotation: false, // To make dots safe in cluster context names syncOptions: { diff --git a/packages/core/src/common/cluster-store/migration-token.ts b/packages/core/src/common/cluster-store/migration-token.ts index 86489509a2..a0efa74e5a 100644 --- a/packages/core/src/common/cluster-store/migration-token.ts +++ b/packages/core/src/common/cluster-store/migration-token.ts @@ -4,7 +4,7 @@ */ import { getInjectionToken } from "@ogre-tools/injectable"; -import type { MigrationDeclaration } from "../base-store/migrations.injectable"; +import type { MigrationDeclaration } from "../persistent-storage/migrations.injectable"; export const clusterStoreMigrationInjectionToken = getInjectionToken({ id: "cluster-store-migration", diff --git a/packages/core/src/common/hotbars/migrations-token.ts b/packages/core/src/common/hotbars/migrations-token.ts index 5441844933..0d89f53a83 100644 --- a/packages/core/src/common/hotbars/migrations-token.ts +++ b/packages/core/src/common/hotbars/migrations-token.ts @@ -4,7 +4,7 @@ */ import { getInjectionToken } from "@ogre-tools/injectable"; -import type { MigrationDeclaration } from "../base-store/migrations.injectable"; +import type { MigrationDeclaration } from "../persistent-storage/migrations.injectable"; export const hotbarStoreMigrationInjectionToken = getInjectionToken({ id: "hotbar-store-migration-token", diff --git a/packages/core/src/common/hotbars/store.injectable.ts b/packages/core/src/common/hotbars/store.injectable.ts index 69e565ba68..1ffea43b69 100644 --- a/packages/core/src/common/hotbars/store.injectable.ts +++ b/packages/core/src/common/hotbars/store.injectable.ts @@ -6,9 +6,9 @@ import { getInjectable } from "@ogre-tools/injectable"; import catalogCatalogEntityInjectable from "../catalog-entities/general-catalog-entities/implementations/catalog-catalog-entity.injectable"; import { HotbarStore } from "./store"; import loggerInjectable from "../logger.injectable"; -import storeMigrationsInjectable from "../base-store/migrations.injectable"; +import persistentStorageMigrationsInjectable from "../persistent-storage/migrations.injectable"; import { hotbarStoreMigrationInjectionToken } from "./migrations-token"; -import createBaseStoreInjectable from "../base-store/create-base-store.injectable"; +import createPersistentStorageInjectable from "../persistent-storage/create.injectable"; import storeMigrationVersionInjectable from "../vars/store-migration-version.injectable"; const hotbarStoreInjectable = getInjectable({ @@ -18,8 +18,8 @@ const hotbarStoreInjectable = getInjectable({ catalogCatalogEntity: di.inject(catalogCatalogEntityInjectable), logger: di.inject(loggerInjectable), storeMigrationVersion: di.inject(storeMigrationVersionInjectable), - migrations: di.inject(storeMigrationsInjectable, hotbarStoreMigrationInjectionToken), - createBaseStore: di.inject(createBaseStoreInjectable), + migrations: di.inject(persistentStorageMigrationsInjectable, hotbarStoreMigrationInjectionToken), + createPersistentStorage: di.inject(createPersistentStorageInjectable), }), }); diff --git a/packages/core/src/common/hotbars/store.ts b/packages/core/src/common/hotbars/store.ts index e0ff3d3206..09b18438bb 100644 --- a/packages/core/src/common/hotbars/store.ts +++ b/packages/core/src/common/hotbars/store.ts @@ -5,7 +5,7 @@ import type { IObservableValue } from "mobx"; import { runInAction, action, comparer, observable } from "mobx"; -import type { BaseStore } from "../base-store/base-store"; +import type { BaseStore } from "../persistent-storage/base-store"; import type { CatalogEntity } from "../catalog"; import { broadcastMessage } from "../ipc"; import type { Hotbar, CreateHotbarData, CreateHotbarOptions } from "./types"; @@ -16,7 +16,7 @@ import type { Logger } from "../logger"; import assert from "assert"; import { getShortName } from "../catalog/helpers"; import type { Migrations } from "conf/dist/source/types"; -import type { CreateBaseStore } from "../base-store/create-base-store.injectable"; +import type { CreatePersistentStorage } from "../persistent-storage/create.injectable"; export interface HotbarStoreModel { hotbars: Hotbar[]; @@ -28,7 +28,7 @@ interface Dependencies { readonly logger: Logger; readonly storeMigrationVersion: string; readonly migrations: Migrations>; - createBaseStore: CreateBaseStore; + createPersistentStorage: CreatePersistentStorage; } export class HotbarStore { @@ -39,7 +39,7 @@ export class HotbarStore { readonly activeHotbarId = observable.box() as IObservableValue; constructor(protected readonly dependencies: Dependencies) { - this.store = this.dependencies.createBaseStore({ + this.store = this.dependencies.createPersistentStorage({ configName: "lens-hotbar-store", accessPropertiesByDotNotation: false, // To make dots safe in cluster context names syncOptions: { diff --git a/packages/core/src/common/persistent-storage/channel-prefix.ts b/packages/core/src/common/persistent-storage/channel-prefix.ts new file mode 100644 index 0000000000..aeb7da7a72 --- /dev/null +++ b/packages/core/src/common/persistent-storage/channel-prefix.ts @@ -0,0 +1,15 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import { getInjectionToken } from "@ogre-tools/injectable"; + +export interface IpcChannelPrefixes { + readonly local: string; + readonly remote: string; +} + +export const persistentStorageIpcChannelPrefixesInjectionToken = getInjectionToken({ + id: "persistent-storage-ipc-channel-prefix-token", +}); diff --git a/packages/core/src/common/persistent-storage/create.injectable.ts b/packages/core/src/common/persistent-storage/create.injectable.ts new file mode 100644 index 0000000000..98bc59f03b --- /dev/null +++ b/packages/core/src/common/persistent-storage/create.injectable.ts @@ -0,0 +1,158 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { disposer, isPromiseLike } from "@k8slens/utilities"; +import { getInjectable } from "@ogre-tools/injectable"; +import type Conf from "conf/dist/source"; +import type { Options } from "conf/dist/source"; +import type { Migrations } from "conf/dist/source/types"; +import { isEqual, kebabCase } from "lodash"; +import type { IEqualsComparer } from "mobx"; +import { reaction } from "mobx"; +import directoryForUserDataInjectable from "../app-paths/directory-for-user-data/directory-for-user-data.injectable"; +import getConfigurationFileModelInjectable from "../get-configuration-file-model/get-configuration-file-model.injectable"; +import loggerInjectable from "../logger.injectable"; +import getBasenameOfPathInjectable from "../path/get-basename.injectable"; +import { toJS } from "../utils"; +import { enlistMessageChannelListenerInjectionToken, sendMessageToChannelInjectionToken } from "@k8slens/messaging"; +import type { MessageChannel } from "@k8slens/messaging"; +import { persistentStorageIpcChannelPrefixesInjectionToken } from "./channel-prefix"; +import { shouldPersistentStorageDisableSyncInIpcListenerInjectionToken } from "./disable-sync"; +import { persistStateToConfigInjectionToken } from "./save-to-file"; + +export interface PersistentStorage { + loadAndStartSyncing: () => void; +} + +export interface PersistentStorageParams extends Omit, "migrations"> { + syncOptions?: { + fireImmediately?: boolean; + equals?: IEqualsComparer; + }; + readonly configName: string; + readonly cwd: string; + + migrations?: Migrations>; + + /** + * fromStore is called internally when a child class syncs with the file + * system. + * + * Note: This function **must** be synchronous. + * + * @param data the parsed information read from the stored JSON file + */ + fromStore(data: Partial): void; + + /** + * toJSON is called when syncing the store to the filesystem. It should + * produce a JSON serializable object representation of the current state. + * + * It is recommended that a round trip is valid. Namely, calling + * `this.fromStore(this.toJSON())` shouldn't change the state. + */ + toJSON(): T; +} + +export type CreatePersistentStorage = (params: PersistentStorageParams) => PersistentStorage; + +const createPersistentStorageInjectable = getInjectable({ + id: "create-persistent-storage", + instantiate: (di): CreatePersistentStorage => { + const directoryForUserData = di.inject(directoryForUserDataInjectable); + const getConfigurationFileModel = di.inject(getConfigurationFileModelInjectable); + const logger = di.inject(loggerInjectable); + const getBasenameOfPath = di.inject(getBasenameOfPathInjectable); + const ipcChannelPrefixes = di.inject(persistentStorageIpcChannelPrefixesInjectionToken); + const persistStateToConfig = di.inject(persistStateToConfigInjectionToken); + const enlistMessageChannelListener = di.inject(enlistMessageChannelListenerInjectionToken); + const shouldDisableSyncInListener = di.inject(shouldPersistentStorageDisableSyncInIpcListenerInjectionToken); + const sendMessageToChannel = di.inject(sendMessageToChannelInjectionToken); + + return (rawParams: PersistentStorageParams) => { + const { + fromStore, + toJSON, + syncOptions, + migrations, + cwd = directoryForUserData, + ...params + } = rawParams; + const displayName = kebabCase(params.configName).toUpperCase(); + const syncDisposers = disposer(); + + const loadAndStartSyncing = () => { + logger.info(`[${displayName}]: LOADING ...`); + + const config = getConfigurationFileModel({ + projectName: "lens", + cwd, + migrations: migrations as Migrations, + ...params, + }); + + const res = fromStore(config.store); + + if (isPromiseLike(res)) { + logger.error(`${displayName} extends BaseStore's fromStore method returns a Promise or promise-like object. This is an error and must be fixed.`); + } + + startSyncing(config); + logger.info(`[${displayName}]: LOADED from ${config.path}`); + }; + + const startSyncing = (config: Conf) => { + const sendChannel: MessageChannel = { + id: `${ipcChannelPrefixes.remote}:${config.path}`, + }; + const receiveChannel: MessageChannel = { + id: `${ipcChannelPrefixes.local}:${config.path}`, + }; + const name = getBasenameOfPath(config.path); + + const disableSync = () => syncDisposers(); + const enableSync = () => { + syncDisposers.push( + reaction( + () => toJS(toJSON()), // unwrap possible observables and react to everything + model => { + persistStateToConfig(config, model); + sendMessageToChannel(sendChannel, model); + }, + syncOptions, + ), + enlistMessageChannelListener({ + id: "persistent-storage-sync", + channel: receiveChannel, + handler: (model) => { + logger.silly(`[${displayName}]: syncing ${name}`, { model }); + + if (shouldDisableSyncInListener) { + disableSync(); + } + + // todo: use "resourceVersion" if merge required (to avoid equality checks => better performance) + if (!isEqual(toJSON(), model)) { + fromStore(model); + } + + if (shouldDisableSyncInListener) { + enableSync(); + } + }, + }), + ); + }; + + enableSync(); + }; + + return { + loadAndStartSyncing, + }; + }; + }, +}); + +export default createPersistentStorageInjectable; diff --git a/packages/core/src/common/base-store/disable-sync.ts b/packages/core/src/common/persistent-storage/disable-sync.ts similarity index 54% rename from packages/core/src/common/base-store/disable-sync.ts rename to packages/core/src/common/persistent-storage/disable-sync.ts index ce7abd16a1..db24561936 100644 --- a/packages/core/src/common/base-store/disable-sync.ts +++ b/packages/core/src/common/persistent-storage/disable-sync.ts @@ -5,6 +5,6 @@ import { getInjectionToken } from "@ogre-tools/injectable"; -export const shouldBaseStoreDisableSyncInIpcListenerInjectionToken = getInjectionToken({ - id: "should-base-store-disable-sync-in-ipc-listener-token", +export const shouldPersistentStorageDisableSyncInIpcListenerInjectionToken = getInjectionToken({ + id: "should-persistent-storage-disable-sync-in-ipc-listener-token", }); diff --git a/packages/core/src/common/base-store/migrations.injectable.ts b/packages/core/src/common/persistent-storage/migrations.injectable.ts similarity index 89% rename from packages/core/src/common/base-store/migrations.injectable.ts rename to packages/core/src/common/persistent-storage/migrations.injectable.ts index d97abee1ec..6a3aa1c42a 100644 --- a/packages/core/src/common/base-store/migrations.injectable.ts +++ b/packages/core/src/common/persistent-storage/migrations.injectable.ts @@ -14,8 +14,8 @@ export interface MigrationDeclaration { run(store: Conf>>): void; } -const storeMigrationsInjectable = getInjectable({ - id: "store-migrations", +const persistentStorageMigrationsInjectable = getInjectable({ + id: "persistent-storage-migrations", instantiate: (di, token): Migrations> => { const logger = di.inject(loggerInjectable); const declarations = di.injectMany(token); @@ -43,4 +43,4 @@ const storeMigrationsInjectable = getInjectable({ }), }); -export default storeMigrationsInjectable; +export default persistentStorageMigrationsInjectable; diff --git a/packages/core/src/common/base-store/save-to-file.ts b/packages/core/src/common/persistent-storage/save-to-file.ts similarity index 100% rename from packages/core/src/common/base-store/save-to-file.ts rename to packages/core/src/common/persistent-storage/save-to-file.ts diff --git a/packages/core/src/common/user-store/migrations-token.ts b/packages/core/src/common/user-store/migrations-token.ts index f3959beb3a..3f8cf14c9e 100644 --- a/packages/core/src/common/user-store/migrations-token.ts +++ b/packages/core/src/common/user-store/migrations-token.ts @@ -4,7 +4,7 @@ */ import { getInjectionToken } from "@ogre-tools/injectable"; -import type { MigrationDeclaration } from "../base-store/migrations.injectable"; +import type { MigrationDeclaration } from "../persistent-storage/migrations.injectable"; export const userStoreMigrationInjectionToken = getInjectionToken({ id: "user-store-migration-token", diff --git a/packages/core/src/common/user-store/user-store.injectable.ts b/packages/core/src/common/user-store/user-store.injectable.ts index 91e0f17125..87143d5867 100644 --- a/packages/core/src/common/user-store/user-store.injectable.ts +++ b/packages/core/src/common/user-store/user-store.injectable.ts @@ -8,10 +8,10 @@ import selectedUpdateChannelInjectable from "../../features/application-update/c import emitAppEventInjectable from "../app-event-bus/emit-event.injectable"; import loggerInjectable from "../logger.injectable"; import storeMigrationVersionInjectable from "../vars/store-migration-version.injectable"; -import storeMigrationsInjectable from "../base-store/migrations.injectable"; +import persistentStorageMigrationsInjectable from "../persistent-storage/migrations.injectable"; import { userStoreMigrationInjectionToken } from "./migrations-token"; import userStorePreferenceDescriptorsInjectable from "./preference-descriptors.injectable"; -import createBaseStoreInjectable from "../base-store/create-base-store.injectable"; +import createPersistentStorageInjectable from "../persistent-storage/create.injectable"; const userStoreInjectable = getInjectable({ id: "user-store", @@ -21,9 +21,9 @@ const userStoreInjectable = getInjectable({ emitAppEvent: di.inject(emitAppEventInjectable), logger: di.inject(loggerInjectable), storeMigrationVersion: di.inject(storeMigrationVersionInjectable), - migrations: di.inject(storeMigrationsInjectable, userStoreMigrationInjectionToken), + migrations: di.inject(persistentStorageMigrationsInjectable, userStoreMigrationInjectionToken), preferenceDescriptors: di.inject(userStorePreferenceDescriptorsInjectable), - createBaseStore: di.inject(createBaseStoreInjectable), + createPersistentStorage: di.inject(createPersistentStorageInjectable), }), }); diff --git a/packages/core/src/common/user-store/user-store.ts b/packages/core/src/common/user-store/user-store.ts index 0a72c2ed16..f1871930a2 100644 --- a/packages/core/src/common/user-store/user-store.ts +++ b/packages/core/src/common/user-store/user-store.ts @@ -4,7 +4,7 @@ */ import { action, observable, makeObservable, isObservableArray, isObservableSet, isObservableMap, runInAction } from "mobx"; -import type { BaseStore } from "../base-store/base-store"; +import type { BaseStore } from "../persistent-storage/base-store"; import { getOrInsertSet, toggle, object } from "@k8slens/utilities"; import type { UserPreferencesModel, StoreType } from "./preferences-helpers"; import type { EmitAppEvent } from "../app-event-bus/emit-event.injectable"; @@ -13,7 +13,7 @@ import type { EmitAppEvent } from "../app-event-bus/emit-event.injectable"; import type { SelectedUpdateChannel } from "../../features/application-update/common/selected-update-channel/selected-update-channel.injectable"; import type { ReleaseChannel } from "../../features/application-update/common/update-channels"; import type { PreferenceDescriptors } from "./preference-descriptors.injectable"; -import type { CreateBaseStore } from "../base-store/create-base-store.injectable"; +import type { CreatePersistentStorage } from "../persistent-storage/create.injectable"; import type { Logger } from "../logger"; import type { Migrations } from "conf/dist/source/types"; import { toJS } from "../utils"; @@ -29,14 +29,14 @@ interface Dependencies { readonly storeMigrationVersion: string; readonly migrations: Migrations>; emitAppEvent: EmitAppEvent; - createBaseStore: CreateBaseStore; + createPersistentStorage: CreatePersistentStorage; } export class UserStore { private readonly store: BaseStore; constructor(protected readonly dependencies: Dependencies) { - this.store = this.dependencies.createBaseStore({ + this.store = this.dependencies.createPersistentStorage({ configName: "lens-user-store", projectVersion: this.dependencies.storeMigrationVersion, migrations: this.dependencies.migrations, diff --git a/packages/core/src/common/weblinks-store/migration-token.ts b/packages/core/src/common/weblinks-store/migration-token.ts index d1cea9334b..6f63d697d6 100644 --- a/packages/core/src/common/weblinks-store/migration-token.ts +++ b/packages/core/src/common/weblinks-store/migration-token.ts @@ -4,7 +4,7 @@ */ import { getInjectionToken } from "@ogre-tools/injectable"; -import type { MigrationDeclaration } from "../base-store/migrations.injectable"; +import type { MigrationDeclaration } from "../persistent-storage/migrations.injectable"; export const weblinkStoreMigrationInjectionToken = getInjectionToken({ id: "weblink-store-migration-token", diff --git a/packages/core/src/common/weblinks-store/weblink-store.injectable.ts b/packages/core/src/common/weblinks-store/weblink-store.injectable.ts index d0e7458f61..c31531d655 100644 --- a/packages/core/src/common/weblinks-store/weblink-store.injectable.ts +++ b/packages/core/src/common/weblinks-store/weblink-store.injectable.ts @@ -3,8 +3,8 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import createBaseStoreInjectable from "../base-store/create-base-store.injectable"; -import storeMigrationsInjectable from "../base-store/migrations.injectable"; +import createPersistentStorageInjectable from "../persistent-storage/create.injectable"; +import persistentStorageMigrationsInjectable from "../persistent-storage/migrations.injectable"; import storeMigrationVersionInjectable from "../vars/store-migration-version.injectable"; import { weblinkStoreMigrationInjectionToken } from "./migration-token"; import { WeblinkStore } from "./weblink-store"; @@ -13,8 +13,8 @@ const weblinkStoreInjectable = getInjectable({ id: "weblink-store", instantiate: (di) => new WeblinkStore({ storeMigrationVersion: di.inject(storeMigrationVersionInjectable), - migrations: di.inject(storeMigrationsInjectable, weblinkStoreMigrationInjectionToken), - createBaseStore: di.inject(createBaseStoreInjectable), + migrations: di.inject(persistentStorageMigrationsInjectable, weblinkStoreMigrationInjectionToken), + createPersistentStorage: di.inject(createPersistentStorageInjectable), }), }); diff --git a/packages/core/src/common/weblinks-store/weblink-store.ts b/packages/core/src/common/weblinks-store/weblink-store.ts index 0f4b7ba0a7..4de96820f9 100644 --- a/packages/core/src/common/weblinks-store/weblink-store.ts +++ b/packages/core/src/common/weblinks-store/weblink-store.ts @@ -4,9 +4,9 @@ */ import { action, comparer, observable, runInAction } from "mobx"; -import type { BaseStore } from "../base-store/base-store"; +import type { BaseStore } from "../persistent-storage/base-store"; import * as uuid from "uuid"; -import type { CreateBaseStore } from "../base-store/create-base-store.injectable"; +import type { CreatePersistentStorage } from "../persistent-storage/create.injectable"; import type { Migrations } from "conf/dist/source/types"; export interface WeblinkData { @@ -29,7 +29,7 @@ export interface WeblinkStoreModel { interface Dependencies { readonly storeMigrationVersion: string; readonly migrations: Migrations>; - createBaseStore: CreateBaseStore; + createPersistentStorage: CreatePersistentStorage; } export class WeblinkStore { @@ -38,7 +38,7 @@ export class WeblinkStore { readonly weblinks = observable.array(); constructor(private readonly dependencies: Dependencies) { - this.store = this.dependencies.createBaseStore({ + this.store = this.dependencies.createPersistentStorage({ configName: "lens-weblink-store", accessPropertiesByDotNotation: false, // To make dots safe in cluster context names syncOptions: { diff --git a/packages/core/src/extensions/base-extension-store.ts b/packages/core/src/extensions/base-extension-store.ts index 4139ead756..d6b42c3d39 100644 --- a/packages/core/src/extensions/base-extension-store.ts +++ b/packages/core/src/extensions/base-extension-store.ts @@ -3,30 +3,23 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { BaseStoreParams } from "../common/base-store/base-store"; -import { BaseStore } from "../common/base-store/base-store"; import * as path from "path"; import type { LensExtension } from "./lens-extension"; -import assert from "assert"; import type { StaticThis } from "../common/utils/singleton"; import { getOrInsertWith } from "@k8slens/utilities"; import { getLegacyGlobalDiForExtensionApi } from "./as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; -import directoryForUserDataInjectable from "../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; -import getConfigurationFileModelInjectable from "../common/get-configuration-file-model/get-configuration-file-model.injectable"; -import loggerInjectable from "../common/logger.injectable"; -import storeMigrationVersionInjectable from "../common/vars/store-migration-version.injectable"; import type { Migrations } from "conf/dist/source/types"; -import { baseStoreIpcChannelPrefixesInjectionToken } from "../common/base-store/channel-prefix"; -import { shouldBaseStoreDisableSyncInIpcListenerInjectionToken } from "../common/base-store/disable-sync"; -import { persistStateToConfigInjectionToken } from "../common/base-store/save-to-file"; -import getBasenameOfPathInjectable from "../common/path/get-basename.injectable"; -import { enlistMessageChannelListenerInjectionToken } from "@k8slens/messaging"; +import type { PersistentStorage, PersistentStorageParams } from "../common/persistent-storage/create.injectable"; +import createPersistentStorageInjectable from "../common/persistent-storage/create.injectable"; +import directoryForUserDataInjectable from "../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; +import assert from "assert"; -export interface ExtensionStoreParams extends Omit, "migrations"> { +export interface ExtensionStoreParams extends Omit, "migrations" | "cwd" | "fromStore" | "toJSON"> { migrations?: Migrations; + cwd?: string; } -export abstract class BaseExtensionStore extends BaseStore { +export abstract class BaseExtensionStore { private static readonly instances = new WeakMap(); /** @@ -49,22 +42,17 @@ export abstract class BaseExtensionStore extends BaseStore return BaseExtensionStore.instances.get(this) as (T | undefined); } - constructor({ migrations, ...params }: ExtensionStoreParams) { + protected persistentStorage?: PersistentStorage; + private readonly dependencies = (() => { const di = getLegacyGlobalDiForExtensionApi(); - super({ + return { + createPersistentStorage: di.inject(createPersistentStorageInjectable), directoryForUserData: di.inject(directoryForUserDataInjectable), - getConfigurationFileModel: di.inject(getConfigurationFileModelInjectable), - logger: di.inject(loggerInjectable), - storeMigrationVersion: di.inject(storeMigrationVersionInjectable), - migrations: migrations as Migrations>, - getBasenameOfPath: di.inject(getBasenameOfPathInjectable), - ipcChannelPrefixes: di.inject(baseStoreIpcChannelPrefixesInjectionToken), - persistStateToConfig: di.inject(persistStateToConfigInjectionToken), - enlistMessageChannelListener: di.inject(enlistMessageChannelListenerInjectionToken), - shouldDisableSyncInListener: di.inject(shouldBaseStoreDisableSyncInIpcListenerInjectionToken), - }, params); - } + } as const; + })(); + + constructor(protected readonly rawParams: ExtensionStoreParams) { } /** * @deprecated This is a form of global shared state. Just call `new Store(...)` @@ -77,21 +65,38 @@ export abstract class BaseExtensionStore extends BaseStore loadExtension(extension: LensExtension) { this.extension = extension; + const { + projectVersion = this.extension.version, + cwd: _cwd, // This is ignored to maintain backwards compatibility + migrations = {}, + ...params + } = this.rawParams; - this.params.projectVersion ??= this.extension.version; + this.persistentStorage = this.dependencies.createPersistentStorage({ + ...params, + cwd: this.cwd(), + projectVersion, + migrations: migrations as Migrations>, + fromStore: (data) => this.fromStore(data), + toJSON: () => this.toJSON(), + }); - return super.load(); + this.persistentStorage.loadAndStartSyncing(); } + /** + * @deprecated Never use this method. Instead call {@link BaseExtensionStore.loadExtension} + */ load() { - if (!this.extension) { return; } - - return super.load(); + this.persistentStorage?.loadAndStartSyncing(); } protected cwd() { - assert(this.extension, "must call this.load() first"); + assert(this.extension, "cwd can only be called in loadExtension"); - return path.join(super.cwd(), "extension-store", this.extension.storeName); + return this.rawParams.cwd ?? path.join(this.dependencies.directoryForUserData, "extension-store", this.extension.storeName); } + + abstract fromStore(data: Partial): void; + abstract toJSON(): T; } diff --git a/packages/core/src/extensions/common-api/stores.ts b/packages/core/src/extensions/common-api/stores.ts index b48802d155..3052e09383 100644 --- a/packages/core/src/extensions/common-api/stores.ts +++ b/packages/core/src/extensions/common-api/stores.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { BaseStoreParams } from "../../common/base-store/base-store"; +import type { BaseStoreParams } from "../../common/persistent-storage/base-store"; import { BaseExtensionStore as ExtensionStore } from "../base-extension-store"; export { diff --git a/packages/core/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store-injection-token.ts b/packages/core/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store-injection-token.ts index fa30c2e792..297238787e 100644 --- a/packages/core/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store-injection-token.ts +++ b/packages/core/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store-injection-token.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectionToken } from "@ogre-tools/injectable"; -import type { MigrationDeclaration } from "../../../common/base-store/migrations.injectable"; +import type { MigrationDeclaration } from "../../../common/persistent-storage/migrations.injectable"; export const fileSystemProvisionerStoreMigrationDeclarationInjectionToken = getInjectionToken({ id: "file-system-provisioner-store-migration-declaration", diff --git a/packages/core/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.injectable.ts b/packages/core/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.injectable.ts index 5a6ac3a2e7..b6d6e3b19f 100644 --- a/packages/core/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.injectable.ts +++ b/packages/core/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { registeredExtensionsInjectable } from "./registered-extensions.injectable"; -import createBaseStoreInjectable from "../../../common/base-store/create-base-store.injectable"; +import createPersistentStorageInjectable from "../../../common/persistent-storage/create.injectable"; import { action } from "mobx"; import { object } from "@k8slens/utilities"; import storeMigrationVersionInjectable from "../../../common/vars/store-migration-version.injectable"; @@ -14,10 +14,10 @@ const fileSystemProvisionerStoreInjectable = getInjectable({ instantiate: (di) => { const registeredExtensions = di.inject(registeredExtensionsInjectable); - const createBaseStore = di.inject(createBaseStoreInjectable); + const createPersistentStorage = di.inject(createPersistentStorageInjectable); const storeMigrationVersion = di.inject(storeMigrationVersionInjectable); - const store = createBaseStore({ + const store = createPersistentStorage({ configName: "lens-filesystem-provisioner-store", accessPropertiesByDotNotation: false, // To make dots safe in cluster context names projectVersion: storeMigrationVersion, diff --git a/packages/core/src/extensions/extensions-store/extensions-store.injectable.ts b/packages/core/src/extensions/extensions-store/extensions-store.injectable.ts index 54d0e08013..6e21fb3260 100644 --- a/packages/core/src/extensions/extensions-store/extensions-store.injectable.ts +++ b/packages/core/src/extensions/extensions-store/extensions-store.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import createBaseStoreInjectable from "../../common/base-store/create-base-store.injectable"; +import createPersistentStorageInjectable from "../../common/persistent-storage/create.injectable"; import storeMigrationVersionInjectable from "../../common/vars/store-migration-version.injectable"; import { ExtensionsStore } from "./extensions-store"; @@ -11,7 +11,7 @@ const extensionsStoreInjectable = getInjectable({ id: "extensions-store", instantiate: (di) => new ExtensionsStore({ storeMigrationVersion: di.inject(storeMigrationVersionInjectable), - createBaseStore: di.inject(createBaseStoreInjectable), + createPersistentStorage: di.inject(createPersistentStorageInjectable), }), }); diff --git a/packages/core/src/extensions/extensions-store/extensions-store.ts b/packages/core/src/extensions/extensions-store/extensions-store.ts index 877dd88bd5..3a575d95cd 100644 --- a/packages/core/src/extensions/extensions-store/extensions-store.ts +++ b/packages/core/src/extensions/extensions-store/extensions-store.ts @@ -5,8 +5,8 @@ import type { LensExtensionId } from "@k8slens/legacy-extensions"; import { action, computed, observable } from "mobx"; -import type { BaseStore } from "../../common/base-store/base-store"; -import type { CreateBaseStore } from "../../common/base-store/create-base-store.injectable"; +import type { BaseStore } from "../../common/persistent-storage/base-store"; +import type { CreatePersistentStorage } from "../../common/persistent-storage/create.injectable"; export interface LensExtensionsStoreModel { extensions?: Record; @@ -23,7 +23,7 @@ export interface IsEnabledExtensionDescriptor { } export interface ExtensionsStoreDependencies { - createBaseStore: CreateBaseStore; + createPersistentStorage: CreatePersistentStorage; readonly storeMigrationVersion: string; } @@ -31,7 +31,7 @@ export class ExtensionsStore { private readonly store: BaseStore; constructor(private readonly dependencies: ExtensionsStoreDependencies) { - this.store = this.dependencies.createBaseStore({ + this.store = this.dependencies.createPersistentStorage({ configName: "lens-extensions", fromStore: action(({ extensions = {}}) => { this.state.merge(extensions); diff --git a/packages/core/src/main/base-store/disable-sync-in-ipc-listener.injectable.ts b/packages/core/src/main/base-store/disable-sync-in-ipc-listener.injectable.ts index 2e7af0c723..10c1528c57 100644 --- a/packages/core/src/main/base-store/disable-sync-in-ipc-listener.injectable.ts +++ b/packages/core/src/main/base-store/disable-sync-in-ipc-listener.injectable.ts @@ -3,12 +3,12 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { shouldBaseStoreDisableSyncInIpcListenerInjectionToken } from "../../common/base-store/disable-sync"; +import { shouldPersistentStorageDisableSyncInIpcListenerInjectionToken } from "../../common/persistent-storage/disable-sync"; const shouldBaseStoreDisableSyncInIpcListenerInjectable = getInjectable({ id: "should-base-store-disable-sync-in-ipc-listener", instantiate: () => false, - injectionToken: shouldBaseStoreDisableSyncInIpcListenerInjectionToken, + injectionToken: shouldPersistentStorageDisableSyncInIpcListenerInjectionToken, }); export default shouldBaseStoreDisableSyncInIpcListenerInjectable; diff --git a/packages/core/src/main/base-store/ipc-channel-prefix.injectable.ts b/packages/core/src/main/base-store/ipc-channel-prefix.injectable.ts index 635f857fc4..a0a96ce3af 100644 --- a/packages/core/src/main/base-store/ipc-channel-prefix.injectable.ts +++ b/packages/core/src/main/base-store/ipc-channel-prefix.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { baseStoreIpcChannelPrefixesInjectionToken } from "../../common/base-store/channel-prefix"; +import { persistentStorageIpcChannelPrefixesInjectionToken } from "../../common/persistent-storage/channel-prefix"; const baseStoreIpcChannelPrefixInjectable = getInjectable({ id: "base-store-ipc-channel-prefix", @@ -11,7 +11,7 @@ const baseStoreIpcChannelPrefixInjectable = getInjectable({ local: "store-sync-main", remote: "store-sync-renderer", }), - injectionToken: baseStoreIpcChannelPrefixesInjectionToken, + injectionToken: persistentStorageIpcChannelPrefixesInjectionToken, }); export default baseStoreIpcChannelPrefixInjectable; diff --git a/packages/core/src/main/base-store/persist-state-to-config.injectable.ts b/packages/core/src/main/base-store/persist-state-to-config.injectable.ts index f6d28982ec..7869bbd6c5 100644 --- a/packages/core/src/main/base-store/persist-state-to-config.injectable.ts +++ b/packages/core/src/main/base-store/persist-state-to-config.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { persistStateToConfigInjectionToken } from "../../common/base-store/save-to-file"; +import { persistStateToConfigInjectionToken } from "../../common/persistent-storage/save-to-file"; import loggerInjectable from "../../common/logger.injectable"; const persistStateToConfigInjectable = getInjectable({ diff --git a/packages/core/src/renderer/base-store/disable-sync-in-ipc-listener.injectable.ts b/packages/core/src/renderer/base-store/disable-sync-in-ipc-listener.injectable.ts index 82670d8e1b..a1ae454992 100644 --- a/packages/core/src/renderer/base-store/disable-sync-in-ipc-listener.injectable.ts +++ b/packages/core/src/renderer/base-store/disable-sync-in-ipc-listener.injectable.ts @@ -3,12 +3,12 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { shouldBaseStoreDisableSyncInIpcListenerInjectionToken } from "../../common/base-store/disable-sync"; +import { shouldPersistentStorageDisableSyncInIpcListenerInjectionToken } from "../../common/persistent-storage/disable-sync"; const shouldBaseStoreDisableSyncInIpcListenerInjectable = getInjectable({ id: "should-base-store-disable-sync-in-ipc-listener", instantiate: () => true, - injectionToken: shouldBaseStoreDisableSyncInIpcListenerInjectionToken, + injectionToken: shouldPersistentStorageDisableSyncInIpcListenerInjectionToken, }); export default shouldBaseStoreDisableSyncInIpcListenerInjectable; diff --git a/packages/core/src/renderer/base-store/ipc-channel-prefix.injectable.ts b/packages/core/src/renderer/base-store/ipc-channel-prefix.injectable.ts index bb2d407720..8a27bc456e 100644 --- a/packages/core/src/renderer/base-store/ipc-channel-prefix.injectable.ts +++ b/packages/core/src/renderer/base-store/ipc-channel-prefix.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { baseStoreIpcChannelPrefixesInjectionToken } from "../../common/base-store/channel-prefix"; +import { persistentStorageIpcChannelPrefixesInjectionToken } from "../../common/persistent-storage/channel-prefix"; const baseStoreIpcChannelPrefixInjectable = getInjectable({ id: "base-store-ipc-channel-prefix", @@ -11,7 +11,7 @@ const baseStoreIpcChannelPrefixInjectable = getInjectable({ local: "store-sync-renderer", remote: "store-sync-main", }), - injectionToken: baseStoreIpcChannelPrefixesInjectionToken, + injectionToken: persistentStorageIpcChannelPrefixesInjectionToken, }); export default baseStoreIpcChannelPrefixInjectable; diff --git a/packages/core/src/renderer/base-store/persist-state-to-config.injectable.ts b/packages/core/src/renderer/base-store/persist-state-to-config.injectable.ts index 0cf594062a..78d87c7fb1 100644 --- a/packages/core/src/renderer/base-store/persist-state-to-config.injectable.ts +++ b/packages/core/src/renderer/base-store/persist-state-to-config.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { persistStateToConfigInjectionToken } from "../../common/base-store/save-to-file"; +import { persistStateToConfigInjectionToken } from "../../common/persistent-storage/save-to-file"; import { noop } from "@k8slens/utilities"; const persistStateToConfigInjectable = getInjectable({ diff --git a/packages/core/src/renderer/components/test-utils/get-extension-fake.ts b/packages/core/src/renderer/components/test-utils/get-extension-fake.ts index 675b7e93e2..9da4adb019 100644 --- a/packages/core/src/renderer/components/test-utils/get-extension-fake.ts +++ b/packages/core/src/renderer/components/test-utils/get-extension-fake.ts @@ -3,7 +3,6 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import type { Writable } from "type-fest"; -import fileSystemProvisionerStoreInjectable from "../../../extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.injectable"; import { lensExtensionDependencies } from "../../../extensions/lens-extension"; import { LensMainExtension } from "../../../extensions/lens-main-extension"; import navigateForExtensionInjectable from "../../../main/start-main-application/lens-window/navigate-for-extension.injectable"; @@ -16,6 +15,7 @@ import catalogEntityRegistryForMainInjectable from "../../../main/catalog/entity import catalogEntityRegistryForRendererInjectable from "../../api/catalog/entity/registry.injectable"; import type { DiContainer } from "@ogre-tools/injectable"; import loggerInjectable from "../../../common/logger.injectable"; +import ensureHashedDirectoryForExtensionInjectable from "../../../extensions/extension-loader/file-system-provisioner-store/ensure-hashed-directory-for-extension.injectable"; export class TestExtensionMain extends LensMainExtension {} export class TestExtensionRenderer extends LensRendererExtension {} @@ -47,7 +47,7 @@ export const getMainExtensionFakeWith = (di: DiContainer) => ({ id, name, mainOp Object.assign(instance, mainOptions); (instance as Writable)[lensExtensionDependencies] = { - fileSystemProvisionerStore: di.inject(fileSystemProvisionerStoreInjectable), + ensureHashedDirectoryForExtension: di.inject(ensureHashedDirectoryForExtensionInjectable), entityRegistry: di.inject(catalogEntityRegistryForMainInjectable), navigate: di.inject(navigateForExtensionInjectable), logger: di.inject(loggerInjectable), @@ -78,7 +78,7 @@ export const getRendererExtensionFakeWith = (di: DiContainer) => ({ id, name, re (instance as Writable)[lensExtensionDependencies] = { categoryRegistry: di.inject(catalogCategoryRegistryInjectable), entityRegistry: di.inject(catalogEntityRegistryForRendererInjectable), - fileSystemProvisionerStore: di.inject(fileSystemProvisionerStoreInjectable), + ensureHashedDirectoryForExtension: di.inject(ensureHashedDirectoryForExtensionInjectable), getExtensionPageParameters: di.inject(getExtensionPageParametersInjectable), navigateToRoute: di.inject(navigateToRouteInjectable), routes: di.inject(routesInjectable),