separate global & workspace memento

This commit is contained in:
Sandeep Somavarapu
2020-10-26 08:09:19 +00:00
committed by GitHub
parent afb0e96b66
commit e830d9f905
2 changed files with 27 additions and 23 deletions

View File

@@ -9,33 +9,18 @@ import { ExtHostStorage } from 'vs/workbench/api/common/extHostStorage';
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
import { checkProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions';
export class ExtensionMemento implements vscode.SyncedMemento {
export class ExtensionMemento implements vscode.Memento {
private readonly _extension: IExtensionDescription;
private readonly _id: string;
private readonly _version: string;
protected readonly _id: string;
private readonly _shared: boolean;
private readonly _storage: ExtHostStorage;
protected readonly _storage: ExtHostStorage;
private readonly _init: Promise<ExtensionMemento>;
private _value?: { [n: string]: any; };
private readonly _storageListener: IDisposable;
private _syncedKeys: string[] = [];
get syncedKeys(): ReadonlyArray<string> { return Object.freeze(this._syncedKeys); }
set syncedKeys(syncKeys: ReadonlyArray<string>) {
checkProposedApiEnabled(this._extension);
if (!this._shared) {
throw new Error('Only global state is synchronized');
}
this._syncedKeys = [...syncKeys];
this._storage.registerExtensionStorageKeysToSync({ id: this._id, version: this._version }, this._syncedKeys);
}
constructor(extensionDescription: IExtensionDescription, global: boolean, storage: ExtHostStorage) {
this._extension = extensionDescription;
this._id = extensionDescription.identifier.value;
this._version = extensionDescription.version;
constructor(id: string, global: boolean, storage: ExtHostStorage) {
this._id = id;
this._shared = global;
this._storage = storage;
@@ -74,3 +59,22 @@ export class ExtensionMemento implements vscode.SyncedMemento {
this._storageListener.dispose();
}
}
export class ExtensionGlobalMemento extends ExtensionMemento implements vscode.SyncedMemento {
private readonly _extension: IExtensionDescription;
private _syncedKeys: string[] = [];
get syncedKeys(): ReadonlyArray<string> { return Object.freeze(this._syncedKeys); }
set syncedKeys(syncKeys: ReadonlyArray<string>) {
checkProposedApiEnabled(this._extension);
this._syncedKeys = [...syncKeys];
this._storage.registerExtensionStorageKeysToSync({ id: this._id, version: this._extension.version }, this._syncedKeys);
}
constructor(extensionDescription: IExtensionDescription, storage: ExtHostStorage) {
super(extensionDescription.identifier.value, true, storage);
this._extension = extensionDescription;
}
}