@sussudio/platform
Version:
Internal APIs for VS Code's service injection the base services.
280 lines (278 loc) • 11.9 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 { CancellationToken } from '@sussudio/base/common/cancellation.mjs';
import { IStringDictionary } from '@sussudio/base/common/collections.mjs';
import { Event } from '@sussudio/base/common/event.mjs';
import { FormattingOptions } from '@sussudio/base/common/jsonFormatter.mjs';
import { Disposable } from '@sussudio/base/common/lifecycle.mjs';
import { IExtUri } from '@sussudio/base/common/resources.mjs';
import { URI } from '@sussudio/base/common/uri.mjs';
import { IHeaders } from '@sussudio/base/parts/request/common/request.mjs';
import { IConfigurationService } from '../../configuration/common/configuration.mjs';
import { IEnvironmentService } from '../../environment/common/environment.mjs';
import { IFileContent, IFileService } from '../../files/common/files.mjs';
import { ILogService } from '../../log/common/log.mjs';
import { IStorageService } from '../../storage/common/storage.mjs';
import { ITelemetryService } from '../../telemetry/common/telemetry.mjs';
import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.mjs';
import {
Change,
IRemoteUserData,
IResourcePreview as IBaseResourcePreview,
ISyncData,
IUserDataSyncResourcePreview as IBaseSyncResourcePreview,
IUserData,
IUserDataInitializer,
IUserDataSyncBackupStoreService,
IUserDataSyncConfiguration,
IUserDataSynchroniser,
IUserDataSyncLogService,
IUserDataSyncEnablementService,
IUserDataSyncStoreService,
IUserDataSyncUtilService,
MergeState,
SyncResource,
SyncStatus,
IUserDataResourceManifest,
IUserDataSyncResourceConflicts,
IUserDataSyncResource,
} from './userDataSync.mjs';
import { IUserDataProfile, IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.mjs';
export declare function isRemoteUserData(thing: any): thing is IRemoteUserData;
export declare function isSyncData(thing: any): thing is ISyncData;
export declare function getSyncResourceLogLabel(syncResource: SyncResource, profile: IUserDataProfile): string;
export interface IResourcePreview {
readonly baseResource: URI;
readonly baseContent: string | null;
readonly remoteResource: URI;
readonly remoteContent: string | null;
readonly remoteChange: Change;
readonly localResource: URI;
readonly localContent: string | null;
readonly localChange: Change;
readonly previewResource: URI;
readonly acceptedResource: URI;
}
export interface IAcceptResult {
readonly content: string | null;
readonly localChange: Change;
readonly remoteChange: Change;
}
export interface IMergeResult extends IAcceptResult {
readonly hasConflicts: boolean;
}
interface IEditableResourcePreview extends IBaseResourcePreview, IResourcePreview {
localChange: Change;
remoteChange: Change;
mergeState: MergeState;
acceptResult?: IAcceptResult;
}
interface ISyncResourcePreview extends IBaseSyncResourcePreview {
readonly remoteUserData: IRemoteUserData;
readonly lastSyncUserData: IRemoteUserData | null;
readonly resourcePreviews: IEditableResourcePreview[];
}
export declare abstract class AbstractSynchroniser extends Disposable implements IUserDataSynchroniser {
readonly syncResource: IUserDataSyncResource;
readonly collection: string | undefined;
protected readonly fileService: IFileService;
protected readonly environmentService: IEnvironmentService;
protected readonly storageService: IStorageService;
protected readonly userDataSyncStoreService: IUserDataSyncStoreService;
protected readonly userDataSyncBackupStoreService: IUserDataSyncBackupStoreService;
protected readonly userDataSyncEnablementService: IUserDataSyncEnablementService;
protected readonly telemetryService: ITelemetryService;
protected readonly logService: IUserDataSyncLogService;
protected readonly configurationService: IConfigurationService;
private syncPreviewPromise;
protected readonly syncFolder: URI;
protected readonly syncPreviewFolder: URI;
protected readonly extUri: IExtUri;
protected readonly currentMachineIdPromise: Promise<string>;
private _status;
get status(): SyncStatus;
private _onDidChangStatus;
readonly onDidChangeStatus: Event<SyncStatus>;
private _conflicts;
get conflicts(): IUserDataSyncResourceConflicts;
private _onDidChangeConflicts;
readonly onDidChangeConflicts: Event<IUserDataSyncResourceConflicts>;
private readonly localChangeTriggerThrottler;
private readonly _onDidChangeLocal;
readonly onDidChangeLocal: Event<void>;
protected readonly lastSyncResource: URI;
private readonly lastSyncUserDataStateKey;
private hasSyncResourceStateVersionChanged;
protected readonly syncResourceLogLabel: string;
protected syncHeaders: IHeaders;
readonly resource: SyncResource;
constructor(
syncResource: IUserDataSyncResource,
collection: string | undefined,
fileService: IFileService,
environmentService: IEnvironmentService,
storageService: IStorageService,
userDataSyncStoreService: IUserDataSyncStoreService,
userDataSyncBackupStoreService: IUserDataSyncBackupStoreService,
userDataSyncEnablementService: IUserDataSyncEnablementService,
telemetryService: ITelemetryService,
logService: IUserDataSyncLogService,
configurationService: IConfigurationService,
uriIdentityService: IUriIdentityService,
);
protected triggerLocalChange(): void;
protected doTriggerLocalChange(): Promise<void>;
protected setStatus(status: SyncStatus): void;
sync(manifest: IUserDataResourceManifest | null, headers?: IHeaders): Promise<void>;
preview(
manifest: IUserDataResourceManifest | null,
userDataSyncConfiguration: IUserDataSyncConfiguration,
headers?: IHeaders,
): Promise<ISyncResourcePreview | null>;
apply(force: boolean, headers?: IHeaders): Promise<ISyncResourcePreview | null>;
private _sync;
replace(content: string): Promise<boolean>;
private isRemoteDataFromCurrentMachine;
protected getLatestRemoteUserData(
manifest: IUserDataResourceManifest | null,
lastSyncUserData: IRemoteUserData | null,
): Promise<IRemoteUserData>;
private performSync;
protected doSync(
remoteUserData: IRemoteUserData,
lastSyncUserData: IRemoteUserData | null,
apply: boolean,
userDataSyncConfiguration: IUserDataSyncConfiguration,
): Promise<SyncStatus>;
merge(resource: URI): Promise<ISyncResourcePreview | null>;
accept(resource: URI, content?: string | null): Promise<ISyncResourcePreview | null>;
discard(resource: URI): Promise<ISyncResourcePreview | null>;
private updateSyncResourcePreview;
private doApply;
private clearPreviewFolder;
private updateConflicts;
hasPreviouslySynced(): Promise<boolean>;
protected resolvePreviewContent(uri: URI): Promise<string | null>;
resetLocal(): Promise<void>;
private doGenerateSyncResourcePreview;
getLastSyncUserData<
T = IRemoteUserData & {
[key: string]: any;
},
>(): Promise<T | null>;
protected updateLastSyncUserData(
lastSyncRemoteUserData: IRemoteUserData,
additionalProps?: IStringDictionary<any>,
): Promise<void>;
private getStoredLastSyncUserDataStateContent;
private readLastSyncStoredRemoteUserData;
private writeLastSyncStoredRemoteUserData;
private migrateLastSyncUserData;
getRemoteUserData(lastSyncData: IRemoteUserData | null): Promise<IRemoteUserData>;
protected parseSyncData(content: string): ISyncData;
private getUserData;
protected updateRemoteUserData(content: string, ref: string | null): Promise<IRemoteUserData>;
protected backupLocal(content: string): Promise<void>;
stop(): Promise<void>;
private getUserDataSyncConfiguration;
protected abstract readonly version: number;
protected abstract generateSyncPreview(
remoteUserData: IRemoteUserData,
lastSyncUserData: IRemoteUserData | null,
isRemoteDataFromCurrentMachine: boolean,
userDataSyncConfiguration: IUserDataSyncConfiguration,
token: CancellationToken,
): Promise<IResourcePreview[]>;
protected abstract getMergeResult(resourcePreview: IResourcePreview, token: CancellationToken): Promise<IMergeResult>;
protected abstract getAcceptResult(
resourcePreview: IResourcePreview,
resource: URI,
content: string | null | undefined,
token: CancellationToken,
): Promise<IAcceptResult>;
protected abstract applyResult(
remoteUserData: IRemoteUserData,
lastSyncUserData: IRemoteUserData | null,
result: [IResourcePreview, IAcceptResult][],
force: boolean,
): Promise<void>;
protected abstract hasRemoteChanged(lastSyncUserData: IRemoteUserData): Promise<boolean>;
abstract hasLocalData(): Promise<boolean>;
abstract resolveContent(uri: URI): Promise<string | null>;
}
export interface IFileResourcePreview extends IResourcePreview {
readonly fileContent: IFileContent | null;
}
export declare abstract class AbstractFileSynchroniser extends AbstractSynchroniser {
protected readonly file: URI;
constructor(
file: URI,
syncResource: IUserDataSyncResource,
collection: string | undefined,
fileService: IFileService,
environmentService: IEnvironmentService,
storageService: IStorageService,
userDataSyncStoreService: IUserDataSyncStoreService,
userDataSyncBackupStoreService: IUserDataSyncBackupStoreService,
userDataSyncEnablementService: IUserDataSyncEnablementService,
telemetryService: ITelemetryService,
logService: IUserDataSyncLogService,
configurationService: IConfigurationService,
uriIdentityService: IUriIdentityService,
);
protected getLocalFileContent(): Promise<IFileContent | null>;
protected updateLocalFileContent(newContent: string, oldContent: IFileContent | null, force: boolean): Promise<void>;
protected deleteLocalFile(): Promise<void>;
private onFileChanges;
}
export declare abstract class AbstractJsonFileSynchroniser extends AbstractFileSynchroniser {
protected readonly userDataSyncUtilService: IUserDataSyncUtilService;
constructor(
file: URI,
syncResource: IUserDataSyncResource,
collection: string | undefined,
fileService: IFileService,
environmentService: IEnvironmentService,
storageService: IStorageService,
userDataSyncStoreService: IUserDataSyncStoreService,
userDataSyncBackupStoreService: IUserDataSyncBackupStoreService,
userDataSyncEnablementService: IUserDataSyncEnablementService,
telemetryService: ITelemetryService,
logService: IUserDataSyncLogService,
userDataSyncUtilService: IUserDataSyncUtilService,
configurationService: IConfigurationService,
uriIdentityService: IUriIdentityService,
);
protected hasErrors(content: string, isArray: boolean): boolean;
private _formattingOptions;
protected getFormattingOptions(): Promise<FormattingOptions>;
}
export declare abstract class AbstractInitializer implements IUserDataInitializer {
readonly resource: SyncResource;
protected readonly userDataProfilesService: IUserDataProfilesService;
protected readonly environmentService: IEnvironmentService;
protected readonly logService: ILogService;
protected readonly fileService: IFileService;
protected readonly storageService: IStorageService;
protected readonly extUri: IExtUri;
private readonly lastSyncResource;
constructor(
resource: SyncResource,
userDataProfilesService: IUserDataProfilesService,
environmentService: IEnvironmentService,
logService: ILogService,
fileService: IFileService,
storageService: IStorageService,
uriIdentityService: IUriIdentityService,
);
initialize({ ref, content }: IUserData): Promise<void>;
private parseSyncData;
protected updateLastSyncUserData(
lastSyncRemoteUserData: IRemoteUserData,
additionalProps?: IStringDictionary<any>,
): Promise<void>;
protected abstract doInitialize(remoteUserData: IRemoteUserData): Promise<void>;
}
export {};