UNPKG

@sussudio/platform

Version:

Internal APIs for VS Code's service injection the base services.

168 lines (166 loc) 5.95 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { Emitter, Event } from '@sussudio/base/common/event.mjs'; import { Disposable, IDisposable } from '@sussudio/base/common/lifecycle.mjs'; import { IStorage, Storage } from '@sussudio/base/parts/storage/common/storage.mjs'; import { ISQLiteStorageDatabaseLoggingOptions } from '@sussudio/base/parts/storage/node/storage.mjs'; import { IEnvironmentService } from '../../environment/common/environment.mjs'; import { IFileService } from '../../files/common/files.mjs'; import { ILogService } from '../../log/common/log.mjs'; import { IUserDataProfile, IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.mjs'; import { IAnyWorkspaceIdentifier } from '../../workspace/common/workspace.mjs'; export interface IStorageMainOptions { /** * If enabled, storage will not persist to disk * but into memory. */ readonly useInMemoryStorage?: boolean; } /** * Provides access to application, profile and workspace storage from * the electron-main side that is the owner of all storage connections. */ export interface IStorageMain extends IDisposable { /** * Emitted whenever data is updated or deleted. */ readonly onDidChangeStorage: Event<IStorageChangeEvent>; /** * Emitted when the storage is closed. */ readonly onDidCloseStorage: Event<void>; /** * Access to all cached items of this storage service. */ readonly items: Map<string, string>; /** * Allows to join on the `init` call having completed * to be able to safely use the storage. */ readonly whenInit: Promise<void>; /** * Provides access to the `IStorage` implementation which will be * in-memory for as long as the storage has not been initialized. */ readonly storage: IStorage; /** * The file path of the underlying storage file if any. */ readonly path: string | undefined; /** * Required call to ensure the service can be used. */ init(): Promise<void>; /** * Retrieve an element stored with the given key from storage. Use * the provided defaultValue if the element is null or undefined. */ get(key: string, fallbackValue: string): string; get(key: string, fallbackValue?: string): string | undefined; /** * Store a string value under the given key to storage. The value will * be converted to a string. */ set(key: string, value: string | boolean | number | undefined | null): void; /** * Delete an element stored under the provided key from storage. */ delete(key: string): void; /** * Whether the storage is using in-memory persistence or not. */ isInMemory(): boolean; /** * Close the storage connection. */ close(): Promise<void>; } export interface IStorageChangeEvent { readonly key: string; } declare abstract class BaseStorageMain extends Disposable implements IStorageMain { protected readonly logService: ILogService; private readonly fileService; private static readonly LOG_SLOW_CLOSE_THRESHOLD; protected readonly _onDidChangeStorage: Emitter<IStorageChangeEvent>; readonly onDidChangeStorage: Event<IStorageChangeEvent>; private readonly _onDidCloseStorage; readonly onDidCloseStorage: Event<void>; private _storage; get storage(): IStorage; abstract get path(): string | undefined; private initializePromise; private readonly whenInitPromise; readonly whenInit: Promise<void>; private state; constructor(logService: ILogService, fileService: IFileService); isInMemory(): boolean; init(): Promise<void>; protected createLoggingOptions(): ISQLiteStorageDatabaseLoggingOptions; protected doInit(storage: IStorage): Promise<void>; protected abstract doCreate(): Promise<Storage>; get items(): Map<string, string>; get(key: string, fallbackValue: string): string; get(key: string, fallbackValue?: string): string | undefined; set(key: string, value: string | boolean | number | undefined | null): Promise<void>; delete(key: string): Promise<void>; close(): Promise<void>; private logSlowClose; private doClose; } declare class BaseProfileAwareStorageMain extends BaseStorageMain { private readonly profile; private readonly options; private static readonly STORAGE_NAME; get path(): string | undefined; constructor( profile: IUserDataProfile, options: IStorageMainOptions, logService: ILogService, fileService: IFileService, ); protected doCreate(): Promise<Storage>; } export declare class ProfileStorageMain extends BaseProfileAwareStorageMain { constructor( profile: IUserDataProfile, options: IStorageMainOptions, logService: ILogService, fileService: IFileService, ); } export declare class ApplicationStorageMain extends BaseProfileAwareStorageMain { constructor( options: IStorageMainOptions, userDataProfileService: IUserDataProfilesService, logService: ILogService, fileService: IFileService, ); protected doInit(storage: IStorage): Promise<void>; private updateTelemetryState; } export declare class WorkspaceStorageMain extends BaseStorageMain { private workspace; private readonly options; private readonly environmentService; private static readonly WORKSPACE_STORAGE_NAME; private static readonly WORKSPACE_META_NAME; get path(): string | undefined; constructor( workspace: IAnyWorkspaceIdentifier, options: IStorageMainOptions, logService: ILogService, environmentService: IEnvironmentService, fileService: IFileService, ); protected doCreate(): Promise<Storage>; private prepareWorkspaceStorageFolder; private ensureWorkspaceStorageFolderMeta; } export declare class InMemoryStorageMain extends BaseStorageMain { get path(): string | undefined; protected doCreate(): Promise<Storage>; } export {};