/**
 * Copyright (c) OpenLens Maintainers. All rights reserved.
 * Licensed under MIT License. See LICENSE in root directory for more information.
 */
import type { LensExtension } from "./lens-extension";
import type { StaticThis } from "../common/utils/singleton";
import type { PersistentStorage, PersistentStorageParams } from "../common/persistent-storage/create.injectable";
import type { Options } from "conf";
export interface ExtensionStoreParams<T extends object> extends Omit<PersistentStorageParams<T>, "migrations" | "cwd" | "fromStore" | "toJSON"> {
    migrations?: Options<T>["migrations"];
    cwd?: string;
}
export declare abstract class BaseExtensionStore<T extends object> {
    protected readonly rawParams: ExtensionStoreParams<T>;
    private static readonly instances;
    /**
     * @deprecated This is a form of global shared state. Just call `new Store(...)`
     */
    static createInstance<T, R extends any[]>(this: StaticThis<T, R>, ...args: R): T;
    /**
     * @deprecated This is a form of global shared state. Just call `new Store(...)`
     */
    static getInstance<T, R extends any[]>(this: StaticThis<T, R>, strict?: true): T;
    static getInstance<T, R extends any[]>(this: StaticThis<T, R>, strict: false): T | undefined;
    protected persistentStorage?: PersistentStorage;
    private readonly dependencies;
    constructor(rawParams: ExtensionStoreParams<T>);
    /**
     * @deprecated This is a form of global shared state. Just call `new Store(...)`
     */
    static resetInstance(): void;
    protected extension?: LensExtension;
    loadExtension(extension: LensExtension): void;
    /**
     * @deprecated Never use this method. Instead call {@link Common.Store.ExtensionStore.loadExtension}
     */
    load(): void;
    protected cwd(): string;
    abstract fromStore(data: Partial<T>): void;
    abstract toJSON(): T;
}
