@sussudio/platform
Version:
Internal APIs for VS Code's service injection the base services.
94 lines (92 loc) • 3.64 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 '@sussudio/base/common/event.mjs';
import { Disposable } from '@sussudio/base/common/lifecycle.mjs';
import { UriDto } from '@sussudio/base/common/uri.mjs';
import { IChannel } from '@sussudio/base/parts/ipc/common/ipc.mjs';
import {
IStorageDatabase,
IStorageItemsChangeEvent,
IUpdateRequest,
} from '@sussudio/base/parts/storage/common/storage.mjs';
import { IUserDataProfile } from '../../userDataProfile/common/userDataProfile.mjs';
import {
ISerializedSingleFolderWorkspaceIdentifier,
ISerializedWorkspaceIdentifier,
IEmptyWorkspaceIdentifier,
IAnyWorkspaceIdentifier,
} from '../../workspace/common/workspace.mjs';
export type Key = string;
export type Value = string;
export type Item = [Key, Value];
export interface IBaseSerializableStorageRequest {
/**
* Profile to correlate storage. Only used when no
* workspace is provided. Can be undefined to denote
* application scope.
*/
readonly profile: UriDto<IUserDataProfile> | undefined;
/**
* Workspace to correlate storage. Can be undefined to
* denote application or profile scope depending on profile.
*/
readonly workspace:
| ISerializedWorkspaceIdentifier
| ISerializedSingleFolderWorkspaceIdentifier
| IEmptyWorkspaceIdentifier
| undefined;
/**
* Additional payload for the request to perform.
*/
readonly payload?: unknown;
}
export interface ISerializableUpdateRequest extends IBaseSerializableStorageRequest {
insert?: Item[];
delete?: Key[];
}
export interface ISerializableItemsChangeEvent {
readonly changed?: Item[];
readonly deleted?: Key[];
}
declare abstract class BaseStorageDatabaseClient extends Disposable implements IStorageDatabase {
protected channel: IChannel;
protected profile: UriDto<IUserDataProfile> | undefined;
protected workspace: IAnyWorkspaceIdentifier | undefined;
abstract readonly onDidChangeItemsExternal: Event<IStorageItemsChangeEvent>;
constructor(
channel: IChannel,
profile: UriDto<IUserDataProfile> | undefined,
workspace: IAnyWorkspaceIdentifier | undefined,
);
getItems(): Promise<Map<string, string>>;
updateItems(request: IUpdateRequest): Promise<void>;
abstract close(): Promise<void>;
}
declare abstract class BaseProfileAwareStorageDatabaseClient extends BaseStorageDatabaseClient {
private readonly _onDidChangeItemsExternal;
readonly onDidChangeItemsExternal: Event<IStorageItemsChangeEvent>;
constructor(channel: IChannel, profile: UriDto<IUserDataProfile> | undefined);
private registerListeners;
private onDidChangeStorage;
}
export declare class ApplicationStorageDatabaseClient extends BaseProfileAwareStorageDatabaseClient {
constructor(channel: IChannel);
close(): Promise<void>;
}
export declare class ProfileStorageDatabaseClient extends BaseProfileAwareStorageDatabaseClient {
constructor(channel: IChannel, profile: UriDto<IUserDataProfile>);
close(): Promise<void>;
}
export declare class WorkspaceStorageDatabaseClient extends BaseStorageDatabaseClient implements IStorageDatabase {
readonly onDidChangeItemsExternal: Event<any>;
constructor(channel: IChannel, workspace: IAnyWorkspaceIdentifier);
close(): Promise<void>;
}
export declare class StorageClient {
private readonly channel;
constructor(channel: IChannel);
isUsed(path: string): Promise<boolean>;
}
export {};