import { Event } from "../../../common/event.js"; import { Disposable, IDisposable } from "../../../common/lifecycle.js"; export declare enum StorageHint { STORAGE_DOES_NOT_EXIST = 0, STORAGE_IN_MEMORY = 1 } export interface IStorageOptions { readonly hint?: StorageHint; } export interface IUpdateRequest { readonly insert?: Map; readonly delete?: Set; } export interface IStorageItemsChangeEvent { readonly changed?: Map; readonly deleted?: Set; } export declare function isStorageItemsChangeEvent(thing: unknown): thing is IStorageItemsChangeEvent; export interface IStorageDatabase { readonly onDidChangeItemsExternal: Event; getItems(): Promise>; updateItems(request: IUpdateRequest): Promise; optimize(): Promise; close(recovery?: () => Map): Promise; } export interface IStorageChangeEvent { /** * The `key` of the storage entry that was changed * or was removed. */ readonly key: string; /** * A hint how the storage change event was triggered. If * `true`, the storage change was triggered by an external * source, such as: * - another process (for example another window) * - operations such as settings sync or profiles change */ readonly external?: boolean; } export type StorageValue = string | boolean | number | undefined | null | object; export interface IStorage extends IDisposable { readonly onDidChangeStorage: Event; readonly items: Map; readonly size: number; init(): Promise; get(key: string, fallbackValue: string): string; get(key: string, fallbackValue?: string): string | undefined; getBoolean(key: string, fallbackValue: boolean): boolean; getBoolean(key: string, fallbackValue?: boolean): boolean | undefined; getNumber(key: string, fallbackValue: number): number; getNumber(key: string, fallbackValue?: number): number | undefined; getObject(key: string, fallbackValue: T): T; getObject(key: string, fallbackValue?: T): T | undefined; set(key: string, value: StorageValue, external?: boolean): Promise; delete(key: string, external?: boolean): Promise; flush(delay?: number): Promise; whenFlushed(): Promise; optimize(): Promise; close(): Promise; } export declare enum StorageState { None = 0, Initialized = 1, Closed = 2 } export declare class Storage extends Disposable implements IStorage { protected readonly database: IStorageDatabase; private readonly options; private static readonly DEFAULT_FLUSH_DELAY; private readonly _onDidChangeStorage; readonly onDidChangeStorage: Event; private state; private cache; private readonly flushDelayer; private pendingDeletes; private pendingInserts; private pendingClose; private readonly whenFlushedCallbacks; constructor(database: IStorageDatabase, options?: IStorageOptions); private registerListeners; private onDidChangeItemsExternal; private acceptExternal; get items(): Map; get size(): number; init(): Promise; get(key: string, fallbackValue: string): string; get(key: string, fallbackValue?: string): string | undefined; getBoolean(key: string, fallbackValue: boolean): boolean; getBoolean(key: string, fallbackValue?: boolean): boolean | undefined; getNumber(key: string, fallbackValue: number): number; getNumber(key: string, fallbackValue?: number): number | undefined; getObject(key: string, fallbackValue: object): object; getObject(key: string, fallbackValue?: object | undefined): object | undefined; set(key: string, value: string | boolean | number | null | undefined | object, external?: boolean): Promise; delete(key: string, external?: boolean): Promise; optimize(): Promise; close(): Promise; private doClose; private get hasPending(); private flushPending; flush(delay?: number): Promise; private doFlush; whenFlushed(): Promise; isInMemory(): boolean; } export declare class InMemoryStorageDatabase implements IStorageDatabase { readonly onDidChangeItemsExternal: Event; private readonly items; getItems(): Promise>; updateItems(request: IUpdateRequest): Promise; optimize(): Promise; close(): Promise; }