sussudio
Version:
An unofficial VS Code Internal API
128 lines (127 loc) • 6.93 kB
text/typescript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { Event } from "../../../base/common/event.mjs";
import { Disposable } from "../../../base/common/lifecycle.mjs";
import { IStorage } from "../../../base/parts/storage/common/storage.mjs";
import { IEnvironmentService } from "../../environment/common/environment.mjs";
import { IFileService } from "../../files/common/files.mjs";
import { ILifecycleMainService } from "../../lifecycle/electron-main/lifecycleMainService.mjs";
import { ILogService } from "../../log/common/log.mjs";
import { AbstractStorageService, IStorageService, StorageScope, StorageTarget } from "../common/storage.mjs";
import { IStorageMain, IStorageMainOptions, IStorageChangeEvent } from "./storageMain.mjs";
import { IUserDataProfile, IUserDataProfilesService } from "../../userDataProfile/common/userDataProfile.mjs";
import { IUserDataProfilesMainService } from "../../userDataProfile/electron-main/userDataProfile.mjs";
import { IAnyWorkspaceIdentifier } from "../../workspace/common/workspace.mjs";
import { IUriIdentityService } from "../../uriIdentity/common/uriIdentity.mjs";
export declare const IStorageMainService: import("../../instantiation/common/instantiation.mjs").ServiceIdentifier<IStorageMainService>;
export interface IProfileStorageChangeEvent extends IStorageChangeEvent {
readonly storage: IStorageMain;
readonly profile: IUserDataProfile;
}
export interface IStorageMainService {
readonly _serviceBrand: undefined;
/**
* Provides access to the application storage shared across all
* windows and all profiles.
*
* Note: DO NOT use this for reading/writing from the main process!
* Rather use `IApplicationStorageMainService` for that purpose.
*/
readonly applicationStorage: IStorageMain;
/**
* Emitted whenever data is updated or deleted in profile scoped storage.
*/
readonly onDidChangeProfileStorage: Event<IProfileStorageChangeEvent>;
/**
* Provides access to the profile storage shared across all windows
* for the provided profile.
*
* Note: DO NOT use this for reading/writing from the main process!
* This is currently not supported.
*/
profileStorage(profile: IUserDataProfile): IStorageMain;
/**
* Provides access to the workspace storage specific to a single window.
*
* Note: DO NOT use this for reading/writing from the main process!
* This is currently not supported.
*/
workspaceStorage(workspace: IAnyWorkspaceIdentifier): IStorageMain;
/**
* Checks if the provided path is currently in use for a storage database.
*
* @param path the path to the storage file or parent folder
*/
isUsed(path: string): boolean;
}
export declare class StorageMainService extends Disposable implements IStorageMainService {
private readonly logService;
private readonly environmentService;
private readonly userDataProfilesService;
private readonly lifecycleMainService;
private readonly fileService;
private readonly uriIdentityService;
readonly _serviceBrand: undefined;
private shutdownReason;
private readonly _onDidChangeProfileStorage;
readonly onDidChangeProfileStorage: Event<IProfileStorageChangeEvent>;
constructor(logService: ILogService, environmentService: IEnvironmentService, userDataProfilesService: IUserDataProfilesMainService, lifecycleMainService: ILifecycleMainService, fileService: IFileService, uriIdentityService: IUriIdentityService);
protected getStorageOptions(): IStorageMainOptions;
private registerListeners;
readonly applicationStorage: IStorageMain;
private createApplicationStorage;
private readonly mapProfileToStorage;
profileStorage(profile: IUserDataProfile): IStorageMain;
private createProfileStorage;
private readonly mapWorkspaceToStorage;
workspaceStorage(workspace: IAnyWorkspaceIdentifier): IStorageMain;
private createWorkspaceStorage;
isUsed(path: string): boolean;
}
export declare const IApplicationStorageMainService: import("../../instantiation/common/instantiation.mjs").ServiceIdentifier<IStorageMainService>;
/**
* A specialized `IStorageService` interface that only allows
* access to the `StorageScope.APPLICATION` scope.
*/
export interface IApplicationStorageMainService extends IStorageService {
/**
* Important: unlike other storage services in the renderer, the
* main process does not await the storage to be ready, rather
* storage is being initialized while a window opens to reduce
* pressure on startup.
*
* As such, any client wanting to access application storage from the
* main process needs to wait for `whenReady`, otherwise there is
* a chance that the service operates on an in-memory store that
* is not backed by any persistent DB.
*/
readonly whenReady: Promise<void>;
get(key: string, scope: StorageScope.APPLICATION, fallbackValue: string): string;
get(key: string, scope: StorageScope.APPLICATION, fallbackValue?: string): string | undefined;
getBoolean(key: string, scope: StorageScope.APPLICATION, fallbackValue: boolean): boolean;
getBoolean(key: string, scope: StorageScope.APPLICATION, fallbackValue?: boolean): boolean | undefined;
getNumber(key: string, scope: StorageScope.APPLICATION, fallbackValue: number): number;
getNumber(key: string, scope: StorageScope.APPLICATION, fallbackValue?: number): number | undefined;
store(key: string, value: string | boolean | number | undefined | null, scope: StorageScope.APPLICATION, target: StorageTarget): void;
remove(key: string, scope: StorageScope.APPLICATION): void;
keys(scope: StorageScope.APPLICATION, target: StorageTarget): string[];
switch(): never;
isNew(scope: StorageScope.APPLICATION): boolean;
}
export declare class ApplicationStorageMainService extends AbstractStorageService implements IApplicationStorageMainService {
private readonly userDataProfilesService;
private readonly storageMainService;
readonly _serviceBrand: undefined;
readonly whenReady: Promise<void>;
constructor(userDataProfilesService: IUserDataProfilesService, storageMainService: IStorageMainService);
protected doInitialize(): Promise<void>;
protected getStorage(scope: StorageScope): IStorage | undefined;
protected getLogDetails(scope: StorageScope): string | undefined;
protected shouldFlushWhenIdle(): boolean;
switch(): never;
protected switchToProfile(): never;
protected switchToWorkspace(): never;
hasScope(): never;
}