@codingame/monaco-vscode-api 1.85.1 → 1.85.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -5
- package/missing-services.js +305 -63
- package/monaco-editor-treemending.patch +946 -946
- package/package.json +8 -7
- package/service-override/tools/editor.js +1 -1
- package/services.js +10 -6
- package/vscode/src/vs/base/browser/ui/tree/treeDefaults.js +14 -0
- package/vscode/src/vs/platform/extensionManagement/common/extensionEnablementService.js +140 -0
- package/vscode/src/vs/platform/extensions/common/extensions.d.ts +1062 -93
- package/vscode/src/vs/platform/files/common/inMemoryFilesystemProvider.js +220 -0
- package/vscode/src/vs/platform/quickinput/browser/quickPickPin.js +102 -0
- package/vscode/src/vs/platform/userDataSync/common/content.js +9 -0
- package/vscode/src/vs/platform/userDataSync/common/settingsMerge.js +514 -0
- package/vscode/src/vs/platform/userDataSync/common/userDataSync.js +154 -2
- package/vscode/src/vs/platform/userDataSync/common/userDataSyncAccount.js +43 -1
- package/vscode/src/vs/platform/userDataSync/common/userDataSyncMachines.js +177 -0
- package/vscode/src/vs/workbench/api/common/extHostApiCommands.js +1 -1
- package/vscode/src/vs/workbench/api/common/extHostTypeConverters.js +1 -1
- package/vscode/src/vs/workbench/api/common/extHostWebview.js +2 -2
- package/vscode/src/vs/workbench/browser/parts/views/checkbox.js +105 -0
- package/vscode/src/vs/workbench/browser/parts/views/media/views.css.js +4 -0
- package/vscode/src/vs/workbench/browser/parts/views/treeView.js +1614 -0
- package/vscode/src/vs/workbench/contrib/codeEditor/browser/languageConfigurationExtensionPoint.js +7 -7
- package/vscode/src/vs/workbench/contrib/files/browser/explorerViewlet.js +73 -2
- package/vscode/src/vs/workbench/contrib/tasks/common/taskDefinitionRegistry.js +6 -6
- package/vscode/src/vs/workbench/contrib/tasks/common/taskService.js +12 -2
- package/vscode/src/vs/workbench/contrib/tasks/common/tasks.js +712 -0
- package/vscode/src/vs/workbench/contrib/terminal/browser/terminalProcessExtHostProxy.js +130 -0
- package/vscode/src/vs/workbench/services/authentication/browser/authenticationService.js +20 -1
- package/vscode/src/vs/workbench/services/configurationResolver/common/configurationResolverSchema.js +205 -0
- package/vscode/src/vs/workbench/services/configurationResolver/common/configurationResolverUtils.js +11 -0
- package/vscode/src/vs/workbench/services/configurationResolver/common/variableResolver.js +9 -9
- package/vscode/src/vs/workbench/services/extensionManagement/browser/extensionBisect.js +1 -1
- package/vscode/src/vs/workbench/services/keybinding/common/keybindingEditing.js +2 -2
- package/vscode/src/vs/workbench/services/languageStatus/common/languageStatusService.js +24 -1
- package/vscode/src/vs/workbench/services/preferences/browser/keybindingsEditorInput.js +41 -0
- package/vscode/src/vs/workbench/services/preferences/browser/keybindingsEditorModel.js +588 -0
- package/vscode/src/vs/workbench/services/preferences/common/preferencesEditorInput.js +43 -0
- package/vscode/src/vs/workbench/services/search/common/search.js +3 -3
- package/vscode/src/vs/workbench/services/terminal/common/embedderTerminalService.js +75 -1
- package/vscode/src/vs/workbench/services/timer/browser/timerService.js +240 -1
- package/vscode/src/vs/workbench/services/userData/browser/userDataInit.js +31 -1
- package/vscode/src/vs/workbench/services/userDataProfile/common/userDataProfile.js +25 -1
- package/vscode/src/vs/workbench/services/userDataProfile/common/userDataProfileIcons.js +75 -1
- package/vscode/src/vs/workbench/services/userDataSync/common/userDataSync.js +74 -4
- package/vscode/src/vs/base/parts/request/browser/request.js +0 -60
- package/vscode/src/vs/platform/request/browser/requestService.js +0 -28
- package/vscode/src/vs/platform/request/common/requestIpc.js +0 -17
- package/vscode/src/vs/platform/url/common/urlService.js +0 -17
- package/vscode/src/vs/workbench/services/configuration/common/jsonEditingService.js +0 -120
- package/vscode/src/vs/workbench/services/decorations/browser/decorationsService.js +0 -319
- package/vscode/src/vs/workbench/services/files/browser/elevatedFileService.js +0 -9
- package/vscode/src/vs/workbench/services/host/browser/browserHostService.js +0 -408
- package/vscode/src/vs/workbench/services/request/browser/requestService.js +0 -48
- package/vscode/src/vs/workbench/services/textfile/browser/browserTextFileService.js +0 -56
- package/vscode/src/vs/workbench/services/textfile/browser/textFileService.js +0 -639
- package/vscode/src/vs/workbench/services/textfile/common/textFileEditorModelManager.js +0 -402
- package/vscode/src/vs/workbench/services/textfile/common/textFileSaveParticipant.js +0 -62
- package/vscode/src/vs/workbench/services/themes/browser/browserHostColorSchemeService.js +0 -38
- package/vscode/src/vs/workbench/services/themes/common/tokenClassificationExtensionPoint.js +0 -295
- package/vscode/src/vs/workbench/services/url/browser/urlService.js +0 -47
- package/vscode/src/vs/workbench/services/views/common/treeViewsService.js +0 -20
- package/vscode/src/vs/workbench/services/workspaces/common/canonicalUriService.js +0 -19
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { VSBuffer } from 'monaco-editor/esm/vs/base/common/buffer.js';
|
|
2
|
+
import { Emitter } from 'monaco-editor/esm/vs/base/common/event.js';
|
|
3
|
+
import { Disposable } from 'monaco-editor/esm/vs/base/common/lifecycle.js';
|
|
4
|
+
import * as resources from 'monaco-editor/esm/vs/base/common/resources.js';
|
|
5
|
+
import { newWriteableStream } from 'monaco-editor/esm/vs/base/common/stream.js';
|
|
6
|
+
import { createFileSystemProviderError, FileSystemProviderErrorCode, FileType } from 'monaco-editor/esm/vs/platform/files/common/files.js';
|
|
7
|
+
class File {
|
|
8
|
+
constructor(name) {
|
|
9
|
+
this.type = FileType.File;
|
|
10
|
+
this.ctime = Date.now();
|
|
11
|
+
this.mtime = Date.now();
|
|
12
|
+
this.size = 0;
|
|
13
|
+
this.name = name;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
class Directory {
|
|
17
|
+
constructor(name) {
|
|
18
|
+
this.type = FileType.Directory;
|
|
19
|
+
this.ctime = Date.now();
|
|
20
|
+
this.mtime = Date.now();
|
|
21
|
+
this.size = 0;
|
|
22
|
+
this.name = name;
|
|
23
|
+
this.entries = ( new Map());
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
class InMemoryFileSystemProvider extends Disposable {
|
|
27
|
+
constructor() {
|
|
28
|
+
super(...arguments);
|
|
29
|
+
this.memoryFdCounter = 0;
|
|
30
|
+
this.fdMemory = ( new Map());
|
|
31
|
+
this._onDidChangeCapabilities = this._register(( new Emitter()));
|
|
32
|
+
this.onDidChangeCapabilities = this._onDidChangeCapabilities.event;
|
|
33
|
+
this._capabilities = 2 | 1024 ;
|
|
34
|
+
this.root = ( new Directory(''));
|
|
35
|
+
this._onDidChangeFile = this._register(( new Emitter()));
|
|
36
|
+
this.onDidChangeFile = this._onDidChangeFile.event;
|
|
37
|
+
this._bufferedChanges = [];
|
|
38
|
+
}
|
|
39
|
+
get capabilities() { return this._capabilities; }
|
|
40
|
+
setReadOnly(readonly) {
|
|
41
|
+
const isReadonly = !!((this._capabilities & 2048) );
|
|
42
|
+
if (readonly !== isReadonly) {
|
|
43
|
+
this._capabilities = readonly ? 2048 | 1024 | 2
|
|
44
|
+
: 2 | 1024 ;
|
|
45
|
+
this._onDidChangeCapabilities.fire();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async stat(resource) {
|
|
49
|
+
return this._lookup(resource, false);
|
|
50
|
+
}
|
|
51
|
+
async readdir(resource) {
|
|
52
|
+
const entry = this._lookupAsDirectory(resource, false);
|
|
53
|
+
const result = [];
|
|
54
|
+
entry.entries.forEach((child, name) => result.push([name, child.type]));
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
async readFile(resource) {
|
|
58
|
+
const data = this._lookupAsFile(resource, false).data;
|
|
59
|
+
if (data) {
|
|
60
|
+
return data;
|
|
61
|
+
}
|
|
62
|
+
throw createFileSystemProviderError('file not found', FileSystemProviderErrorCode.FileNotFound);
|
|
63
|
+
}
|
|
64
|
+
readFileStream(resource) {
|
|
65
|
+
const data = this._lookupAsFile(resource, false).data;
|
|
66
|
+
const stream = newWriteableStream(data => VSBuffer.concat(( data.map(data => VSBuffer.wrap(data)))).buffer);
|
|
67
|
+
stream.end(data);
|
|
68
|
+
return stream;
|
|
69
|
+
}
|
|
70
|
+
async writeFile(resource, content, opts) {
|
|
71
|
+
const basename = resources.basename(resource);
|
|
72
|
+
const parent = this._lookupParentDirectory(resource);
|
|
73
|
+
let entry = parent.entries.get(basename);
|
|
74
|
+
if (entry instanceof Directory) {
|
|
75
|
+
throw createFileSystemProviderError('file is directory', FileSystemProviderErrorCode.FileIsADirectory);
|
|
76
|
+
}
|
|
77
|
+
if (!entry && !opts.create) {
|
|
78
|
+
throw createFileSystemProviderError('file not found', FileSystemProviderErrorCode.FileNotFound);
|
|
79
|
+
}
|
|
80
|
+
if (entry && opts.create && !opts.overwrite) {
|
|
81
|
+
throw createFileSystemProviderError('file exists already', FileSystemProviderErrorCode.FileExists);
|
|
82
|
+
}
|
|
83
|
+
if (!entry) {
|
|
84
|
+
entry = ( new File(basename));
|
|
85
|
+
parent.entries.set(basename, entry);
|
|
86
|
+
this._fireSoon({ type: 1 , resource });
|
|
87
|
+
}
|
|
88
|
+
entry.mtime = Date.now();
|
|
89
|
+
entry.size = content.byteLength;
|
|
90
|
+
entry.data = content;
|
|
91
|
+
this._fireSoon({ type: 0 , resource });
|
|
92
|
+
}
|
|
93
|
+
open(resource, opts) {
|
|
94
|
+
const data = this._lookupAsFile(resource, false).data;
|
|
95
|
+
if (data) {
|
|
96
|
+
const fd = this.memoryFdCounter++;
|
|
97
|
+
this.fdMemory.set(fd, data);
|
|
98
|
+
return Promise.resolve(fd);
|
|
99
|
+
}
|
|
100
|
+
throw createFileSystemProviderError('file not found', FileSystemProviderErrorCode.FileNotFound);
|
|
101
|
+
}
|
|
102
|
+
close(fd) {
|
|
103
|
+
this.fdMemory.delete(fd);
|
|
104
|
+
return Promise.resolve();
|
|
105
|
+
}
|
|
106
|
+
read(fd, pos, data, offset, length) {
|
|
107
|
+
const memory = this.fdMemory.get(fd);
|
|
108
|
+
if (!memory) {
|
|
109
|
+
throw createFileSystemProviderError(`No file with that descriptor open`, FileSystemProviderErrorCode.Unavailable);
|
|
110
|
+
}
|
|
111
|
+
const toWrite = VSBuffer.wrap(memory).slice(pos, pos + length);
|
|
112
|
+
data.set(toWrite.buffer, offset);
|
|
113
|
+
return Promise.resolve(toWrite.byteLength);
|
|
114
|
+
}
|
|
115
|
+
write(fd, pos, data, offset, length) {
|
|
116
|
+
const memory = this.fdMemory.get(fd);
|
|
117
|
+
if (!memory) {
|
|
118
|
+
throw createFileSystemProviderError(`No file with that descriptor open`, FileSystemProviderErrorCode.Unavailable);
|
|
119
|
+
}
|
|
120
|
+
const toWrite = VSBuffer.wrap(data).slice(offset, offset + length);
|
|
121
|
+
memory.set(toWrite.buffer, pos);
|
|
122
|
+
return Promise.resolve(toWrite.byteLength);
|
|
123
|
+
}
|
|
124
|
+
async rename(from, to, opts) {
|
|
125
|
+
if (!opts.overwrite && this._lookup(to, true)) {
|
|
126
|
+
throw createFileSystemProviderError('file exists already', FileSystemProviderErrorCode.FileExists);
|
|
127
|
+
}
|
|
128
|
+
const entry = this._lookup(from, false);
|
|
129
|
+
const oldParent = this._lookupParentDirectory(from);
|
|
130
|
+
const newParent = this._lookupParentDirectory(to);
|
|
131
|
+
const newName = resources.basename(to);
|
|
132
|
+
oldParent.entries.delete(entry.name);
|
|
133
|
+
entry.name = newName;
|
|
134
|
+
newParent.entries.set(newName, entry);
|
|
135
|
+
this._fireSoon({ type: 2 , resource: from }, { type: 1 , resource: to });
|
|
136
|
+
}
|
|
137
|
+
async delete(resource, opts) {
|
|
138
|
+
const dirname = resources.dirname(resource);
|
|
139
|
+
const basename = resources.basename(resource);
|
|
140
|
+
const parent = this._lookupAsDirectory(dirname, false);
|
|
141
|
+
if (( parent.entries.has(basename))) {
|
|
142
|
+
parent.entries.delete(basename);
|
|
143
|
+
parent.mtime = Date.now();
|
|
144
|
+
parent.size -= 1;
|
|
145
|
+
this._fireSoon({ type: 0 , resource: dirname }, { resource, type: 2 });
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
async mkdir(resource) {
|
|
149
|
+
if (this._lookup(resource, true)) {
|
|
150
|
+
throw createFileSystemProviderError('file exists already', FileSystemProviderErrorCode.FileExists);
|
|
151
|
+
}
|
|
152
|
+
const basename = resources.basename(resource);
|
|
153
|
+
const dirname = resources.dirname(resource);
|
|
154
|
+
const parent = this._lookupAsDirectory(dirname, false);
|
|
155
|
+
const entry = ( new Directory(basename));
|
|
156
|
+
parent.entries.set(entry.name, entry);
|
|
157
|
+
parent.mtime = Date.now();
|
|
158
|
+
parent.size += 1;
|
|
159
|
+
this._fireSoon({ type: 0 , resource: dirname }, { type: 1 , resource });
|
|
160
|
+
}
|
|
161
|
+
_lookup(uri, silent) {
|
|
162
|
+
const parts = uri.path.split('/');
|
|
163
|
+
let entry = this.root;
|
|
164
|
+
for (const part of parts) {
|
|
165
|
+
if (!part) {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
let child;
|
|
169
|
+
if (entry instanceof Directory) {
|
|
170
|
+
child = entry.entries.get(part);
|
|
171
|
+
}
|
|
172
|
+
if (!child) {
|
|
173
|
+
if (!silent) {
|
|
174
|
+
throw createFileSystemProviderError('file not found', FileSystemProviderErrorCode.FileNotFound);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
return undefined;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
entry = child;
|
|
181
|
+
}
|
|
182
|
+
return entry;
|
|
183
|
+
}
|
|
184
|
+
_lookupAsDirectory(uri, silent) {
|
|
185
|
+
const entry = this._lookup(uri, silent);
|
|
186
|
+
if (entry instanceof Directory) {
|
|
187
|
+
return entry;
|
|
188
|
+
}
|
|
189
|
+
throw createFileSystemProviderError('file not a directory', FileSystemProviderErrorCode.FileNotADirectory);
|
|
190
|
+
}
|
|
191
|
+
_lookupAsFile(uri, silent) {
|
|
192
|
+
const entry = this._lookup(uri, silent);
|
|
193
|
+
if (entry instanceof File) {
|
|
194
|
+
return entry;
|
|
195
|
+
}
|
|
196
|
+
throw createFileSystemProviderError('file is a directory', FileSystemProviderErrorCode.FileIsADirectory);
|
|
197
|
+
}
|
|
198
|
+
_lookupParentDirectory(uri) {
|
|
199
|
+
const dirname = resources.dirname(uri);
|
|
200
|
+
return this._lookupAsDirectory(dirname, false);
|
|
201
|
+
}
|
|
202
|
+
watch(resource, opts) {
|
|
203
|
+
return Disposable.None;
|
|
204
|
+
}
|
|
205
|
+
_fireSoon(...changes) {
|
|
206
|
+
this._bufferedChanges.push(...changes);
|
|
207
|
+
if (this._fireSoonHandle) {
|
|
208
|
+
clearTimeout(this._fireSoonHandle);
|
|
209
|
+
}
|
|
210
|
+
this._fireSoonHandle = setTimeout(() => {
|
|
211
|
+
this._onDidChangeFile.fire(this._bufferedChanges);
|
|
212
|
+
this._bufferedChanges.length = 0;
|
|
213
|
+
}, 5);
|
|
214
|
+
}
|
|
215
|
+
dispose() {
|
|
216
|
+
super.dispose();
|
|
217
|
+
this.fdMemory.clear();
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
export { InMemoryFileSystemProvider };
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { Codicon } from 'monaco-editor/esm/vs/base/common/codicons.js';
|
|
2
|
+
import { localizeWithPath } from 'monaco-editor/esm/vs/nls.js';
|
|
3
|
+
import { ThemeIcon } from 'monaco-editor/esm/vs/base/common/themables.js';
|
|
4
|
+
const pinButtonClass = ThemeIcon.asClassName(Codicon.pin);
|
|
5
|
+
const pinnedButtonClass = ThemeIcon.asClassName(Codicon.pinned);
|
|
6
|
+
const buttonClasses = [pinButtonClass, pinnedButtonClass];
|
|
7
|
+
async function showWithPinnedItems(storageService, storageKey, quickPick, filterDuplicates) {
|
|
8
|
+
const itemsWithoutPinned = quickPick.items;
|
|
9
|
+
let itemsWithPinned = _formatPinnedItems(storageKey, quickPick, storageService, undefined, filterDuplicates);
|
|
10
|
+
quickPick.onDidTriggerItemButton(async (buttonEvent) => {
|
|
11
|
+
const expectedButton = buttonEvent.button.iconClass && buttonClasses.includes(buttonEvent.button.iconClass);
|
|
12
|
+
if (expectedButton) {
|
|
13
|
+
quickPick.items = itemsWithoutPinned;
|
|
14
|
+
itemsWithPinned = _formatPinnedItems(storageKey, quickPick, storageService, buttonEvent.item, filterDuplicates);
|
|
15
|
+
quickPick.items = quickPick.value ? itemsWithoutPinned : itemsWithPinned;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
quickPick.onDidChangeValue(async (value) => {
|
|
19
|
+
if (quickPick.items === itemsWithPinned && value) {
|
|
20
|
+
quickPick.items = itemsWithoutPinned;
|
|
21
|
+
}
|
|
22
|
+
else if (quickPick.items === itemsWithoutPinned && !value) {
|
|
23
|
+
quickPick.items = itemsWithPinned;
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
quickPick.items = quickPick.value ? itemsWithoutPinned : itemsWithPinned;
|
|
27
|
+
quickPick.show();
|
|
28
|
+
}
|
|
29
|
+
function _formatPinnedItems(storageKey, quickPick, storageService, changedItem, filterDuplicates) {
|
|
30
|
+
const formattedItems = [];
|
|
31
|
+
let pinnedItems;
|
|
32
|
+
if (changedItem) {
|
|
33
|
+
pinnedItems = updatePinnedItems(storageKey, changedItem, storageService);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
pinnedItems = getPinnedItems(storageKey, storageService);
|
|
37
|
+
}
|
|
38
|
+
if (pinnedItems.length) {
|
|
39
|
+
formattedItems.push({ type: 'separator', label: ( localizeWithPath(
|
|
40
|
+
'vs/platform/quickinput/browser/quickPickPin',
|
|
41
|
+
"terminal.commands.pinned",
|
|
42
|
+
'pinned'
|
|
43
|
+
)) });
|
|
44
|
+
}
|
|
45
|
+
const pinnedIds = ( new Set());
|
|
46
|
+
for (const itemToFind of pinnedItems) {
|
|
47
|
+
const itemToPin = quickPick.items.find(item => itemsMatch(item, itemToFind));
|
|
48
|
+
if (itemToPin) {
|
|
49
|
+
const pinnedItemId = getItemIdentifier(itemToPin);
|
|
50
|
+
const pinnedItem = Object.assign({}, itemToPin);
|
|
51
|
+
if (!filterDuplicates || !( pinnedIds.has(pinnedItemId))) {
|
|
52
|
+
pinnedIds.add(pinnedItemId);
|
|
53
|
+
updateButtons(pinnedItem, false);
|
|
54
|
+
formattedItems.push(pinnedItem);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
for (const item of quickPick.items) {
|
|
59
|
+
updateButtons(item, true);
|
|
60
|
+
formattedItems.push(item);
|
|
61
|
+
}
|
|
62
|
+
return formattedItems;
|
|
63
|
+
}
|
|
64
|
+
function getItemIdentifier(item) {
|
|
65
|
+
return item.type === 'separator' ? '' : item.id || `${item.label}${item.description}${item.detail}}`;
|
|
66
|
+
}
|
|
67
|
+
function updateButtons(item, removePin) {
|
|
68
|
+
if (item.type === 'separator') {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const newButtons = item.buttons?.filter(button => button.iconClass && !buttonClasses.includes(button.iconClass)) ?? [];
|
|
72
|
+
newButtons.unshift({
|
|
73
|
+
iconClass: removePin ? pinButtonClass : pinnedButtonClass,
|
|
74
|
+
tooltip: removePin ? ( localizeWithPath('vs/platform/quickinput/browser/quickPickPin', 'pinCommand', "Pin command")) : ( localizeWithPath(
|
|
75
|
+
'vs/platform/quickinput/browser/quickPickPin',
|
|
76
|
+
'pinnedCommand',
|
|
77
|
+
"Pinned command"
|
|
78
|
+
)),
|
|
79
|
+
alwaysVisible: false
|
|
80
|
+
});
|
|
81
|
+
item.buttons = newButtons;
|
|
82
|
+
}
|
|
83
|
+
function itemsMatch(itemA, itemB) {
|
|
84
|
+
return getItemIdentifier(itemA) === getItemIdentifier(itemB);
|
|
85
|
+
}
|
|
86
|
+
function updatePinnedItems(storageKey, changedItem, storageService) {
|
|
87
|
+
const removePin = changedItem.buttons?.find(b => b.iconClass === pinnedButtonClass);
|
|
88
|
+
let items = getPinnedItems(storageKey, storageService);
|
|
89
|
+
if (removePin) {
|
|
90
|
+
items = items.filter(item => getItemIdentifier(item) !== getItemIdentifier(changedItem));
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
items.push(changedItem);
|
|
94
|
+
}
|
|
95
|
+
storageService.store(storageKey, JSON.stringify(items), 1 , 1 );
|
|
96
|
+
return items;
|
|
97
|
+
}
|
|
98
|
+
function getPinnedItems(storageKey, storageService) {
|
|
99
|
+
const items = storageService.get(storageKey, 1 );
|
|
100
|
+
return items ? JSON.parse(items) : [];
|
|
101
|
+
}
|
|
102
|
+
export { showWithPinnedItems };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { setProperty } from '../../../base/common/jsonEdit.js';
|
|
2
|
+
function edit(content, originalPath, value, formattingOptions) {
|
|
3
|
+
const edit = setProperty(content, originalPath, value, formattingOptions)[0];
|
|
4
|
+
if (edit) {
|
|
5
|
+
content = content.substring(0, edit.offset) + edit.content + content.substring(edit.offset + edit.length);
|
|
6
|
+
}
|
|
7
|
+
return content;
|
|
8
|
+
}
|
|
9
|
+
export { edit };
|