提交 1950d2bf 编写于 作者: S Sandeep Somavarapu

add syncedKeys to proposed API

上级 36bf345d
......@@ -2179,4 +2179,22 @@ declare module 'vscode' {
}
//#endregion
//#region Syncing Extension's Global State https://github.com/microsoft/vscode/issues/95209 @sandy081
export interface ExtensionContext {
readonly syncedGlobalState: SyncedMemento;
}
export interface SyncedMemento extends Memento {
/**
* List of keys whose values should be synced across devices when extensions synchronization is enabled .
* Set synced keys to an empty array to unset the synced state.
*/
syncedKeys: ReadonlyArray<string>;
}
//#endregion
}
......@@ -387,6 +387,7 @@ export abstract class AbstractExtHostExtensionService extends Disposable impleme
const that = this;
return Object.freeze<vscode.ExtensionContext>({
globalState,
get syncedGlobalState() { checkProposedApiEnabled(extensionDescription); return globalState; },
workspaceState,
subscriptions: [],
get extensionUri() { return extensionDescription.extensionLocation; },
......
......@@ -7,9 +7,11 @@ import type * as vscode from 'vscode';
import { IDisposable } from 'vs/base/common/lifecycle';
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.Memento {
export class ExtensionMemento implements vscode.SyncedMemento {
private readonly _extension: IExtensionDescription;
private readonly _id: string;
private readonly _version: string;
private readonly _shared: boolean;
......@@ -19,14 +21,19 @@ export class ExtensionMemento implements vscode.Memento {
private _value?: { [n: string]: any; };
private readonly _storageListener: IDisposable;
private _syncKeys: string[] = [];
get syncKeys(): ReadonlyArray<string> { return Object.freeze(this._syncKeys); }
set syncKeys(syncKeys: ReadonlyArray<string>) {
this._syncKeys = [...syncKeys];
this._storage.registerExtensionStorageKeysToSync({ id: this._id, version: this._version }, this._syncKeys);
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;
this._shared = global;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册