@codingame/monaco-vscode-user-data-profile-service-override 10.1.4 → 11.0.1
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/package.json +3 -2
- package/vscode/src/vs/platform/userDataProfile/browser/userDataProfile.js +1 -8
- package/vscode/src/vs/workbench/contrib/userDataProfile/browser/userDataProfile.js +84 -27
- package/vscode/src/vs/workbench/contrib/userDataProfile/browser/userDataProfileActions.js +4 -7
- package/vscode/src/vs/workbench/contrib/userDataProfile/browser/userDataProfilesEditor.js +101 -85
- package/vscode/src/vs/workbench/contrib/userDataProfile/browser/userDataProfilesEditorModel.js +27 -27
- package/vscode/src/vs/workbench/services/userDataProfile/browser/extensionsResource.js +5 -5
- package/vscode/src/vs/workbench/services/userDataProfile/browser/globalStateResource.js +1 -1
- package/vscode/src/vs/workbench/services/userDataProfile/browser/keybindingsResource.js +1 -1
- package/vscode/src/vs/workbench/services/userDataProfile/browser/settingsResource.js +1 -1
- package/vscode/src/vs/workbench/services/userDataProfile/browser/snippetsResource.js +2 -2
- package/vscode/src/vs/workbench/services/userDataProfile/browser/tasksResource.js +1 -1
- package/vscode/src/vs/workbench/services/userDataProfile/browser/userDataProfileImportExportService.js +40 -41
- package/vscode/src/vs/workbench/services/userDataProfile/browser/userDataProfileManagement.js +8 -8
- package/vscode/src/vs/workbench/services/userDataSync/browser/userDataSyncInit.js +6 -6
- package/_virtual/semver.js +0 -5
- package/vscode/src/vs/platform/userDataSync/common/extensionsMerge.js +0 -331
- package/vscode/src/vs/platform/userDataSync/common/extensionsSync.js +0 -546
- package/vscode/src/vs/platform/userDataSync/common/globalStateMerge.js +0 -102
- package/vscode/src/vs/platform/userDataSync/common/globalStateSync.js +0 -431
- package/vscode/src/vs/platform/userDataSync/common/keybindingsMerge.js +0 -277
- package/vscode/src/vs/platform/userDataSync/common/keybindingsSync.js +0 -325
- package/vscode/src/vs/platform/userDataSync/common/settingsSync.js +0 -338
- package/vscode/src/vs/platform/userDataSync/common/snippetsMerge.js +0 -126
- package/vscode/src/vs/platform/userDataSync/common/snippetsSync.js +0 -478
- package/vscode/src/vs/platform/userDataSync/common/tasksSync.js +0 -245
|
@@ -1,331 +0,0 @@
|
|
|
1
|
-
import { deepClone, equals } from 'vscode/vscode/vs/base/common/objects';
|
|
2
|
-
import { semverExports } from '../../../../../../_virtual/semver.js';
|
|
3
|
-
import { assertIsDefined } from 'vscode/vscode/vs/base/common/types';
|
|
4
|
-
|
|
5
|
-
function merge(localExtensions, remoteExtensions, lastSyncExtensions, skippedExtensions, ignoredExtensions, lastSyncBuiltinExtensions) {
|
|
6
|
-
const added = [];
|
|
7
|
-
const removed = [];
|
|
8
|
-
const updated = [];
|
|
9
|
-
if (!remoteExtensions) {
|
|
10
|
-
const remote = localExtensions.filter(({ identifier }) => ignoredExtensions.every(id => id.toLowerCase() !== identifier.id.toLowerCase()));
|
|
11
|
-
return {
|
|
12
|
-
local: {
|
|
13
|
-
added,
|
|
14
|
-
removed,
|
|
15
|
-
updated,
|
|
16
|
-
},
|
|
17
|
-
remote: remote.length > 0 ? {
|
|
18
|
-
added: remote,
|
|
19
|
-
updated: [],
|
|
20
|
-
removed: [],
|
|
21
|
-
all: remote
|
|
22
|
-
} : null
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
localExtensions = ( localExtensions.map(massageIncomingExtension));
|
|
26
|
-
remoteExtensions = ( remoteExtensions.map(massageIncomingExtension));
|
|
27
|
-
lastSyncExtensions = lastSyncExtensions ? ( lastSyncExtensions.map(massageIncomingExtension)) : null;
|
|
28
|
-
const uuids = ( new Map());
|
|
29
|
-
const addUUID = (identifier) => { if (identifier.uuid) {
|
|
30
|
-
uuids.set(identifier.id.toLowerCase(), identifier.uuid);
|
|
31
|
-
} };
|
|
32
|
-
localExtensions.forEach(({ identifier }) => addUUID(identifier));
|
|
33
|
-
remoteExtensions.forEach(({ identifier }) => addUUID(identifier));
|
|
34
|
-
lastSyncExtensions?.forEach(({ identifier }) => addUUID(identifier));
|
|
35
|
-
skippedExtensions?.forEach(({ identifier }) => addUUID(identifier));
|
|
36
|
-
lastSyncBuiltinExtensions?.forEach(identifier => addUUID(identifier));
|
|
37
|
-
const getKey = (extension) => {
|
|
38
|
-
const uuid = extension.identifier.uuid || uuids.get(extension.identifier.id.toLowerCase());
|
|
39
|
-
return uuid ? `uuid:${uuid}` : `id:${extension.identifier.id.toLowerCase()}`;
|
|
40
|
-
};
|
|
41
|
-
const addExtensionToMap = (map, extension) => {
|
|
42
|
-
map.set(getKey(extension), extension);
|
|
43
|
-
return map;
|
|
44
|
-
};
|
|
45
|
-
const localExtensionsMap = localExtensions.reduce(addExtensionToMap, ( new Map()));
|
|
46
|
-
const remoteExtensionsMap = remoteExtensions.reduce(addExtensionToMap, ( new Map()));
|
|
47
|
-
const newRemoteExtensionsMap = remoteExtensions.reduce((map, extension) => addExtensionToMap(map, deepClone(extension)), ( new Map()));
|
|
48
|
-
const lastSyncExtensionsMap = lastSyncExtensions ? lastSyncExtensions.reduce(addExtensionToMap, ( new Map())) : null;
|
|
49
|
-
const skippedExtensionsMap = skippedExtensions.reduce(addExtensionToMap, ( new Map()));
|
|
50
|
-
const ignoredExtensionsSet = ignoredExtensions.reduce((set, id) => {
|
|
51
|
-
const uuid = uuids.get(id.toLowerCase());
|
|
52
|
-
return set.add(uuid ? `uuid:${uuid}` : `id:${id.toLowerCase()}`);
|
|
53
|
-
}, ( new Set()));
|
|
54
|
-
const lastSyncBuiltinExtensionsSet = lastSyncBuiltinExtensions ? lastSyncBuiltinExtensions.reduce((set, { id, uuid }) => {
|
|
55
|
-
uuid = uuid ?? uuids.get(id.toLowerCase());
|
|
56
|
-
return set.add(uuid ? `uuid:${uuid}` : `id:${id.toLowerCase()}`);
|
|
57
|
-
}, ( new Set())) : null;
|
|
58
|
-
const localToRemote = compare(localExtensionsMap, remoteExtensionsMap, ignoredExtensionsSet, false);
|
|
59
|
-
if (localToRemote.added.size > 0 || localToRemote.removed.size > 0 || localToRemote.updated.size > 0) {
|
|
60
|
-
const baseToLocal = compare(lastSyncExtensionsMap, localExtensionsMap, ignoredExtensionsSet, false);
|
|
61
|
-
const baseToRemote = compare(lastSyncExtensionsMap, remoteExtensionsMap, ignoredExtensionsSet, true);
|
|
62
|
-
const merge = (key, localExtension, remoteExtension, preferred) => {
|
|
63
|
-
let pinned, version, preRelease;
|
|
64
|
-
if (localExtension.installed) {
|
|
65
|
-
pinned = preferred.pinned;
|
|
66
|
-
preRelease = preferred.preRelease;
|
|
67
|
-
if (pinned) {
|
|
68
|
-
version = preferred.version;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
pinned = remoteExtension.pinned;
|
|
73
|
-
preRelease = remoteExtension.preRelease;
|
|
74
|
-
if (pinned) {
|
|
75
|
-
version = remoteExtension.version;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
if (pinned === undefined ) {
|
|
79
|
-
pinned = localExtension.pinned;
|
|
80
|
-
if (pinned) {
|
|
81
|
-
version = localExtension.version;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
if (preRelease === undefined ) {
|
|
85
|
-
preRelease = localExtension.preRelease;
|
|
86
|
-
}
|
|
87
|
-
return {
|
|
88
|
-
...preferred,
|
|
89
|
-
installed: localExtension.installed || remoteExtension.installed,
|
|
90
|
-
pinned,
|
|
91
|
-
preRelease,
|
|
92
|
-
version: version ?? (remoteExtension.version && (!localExtension.installed || semverExports.gt(remoteExtension.version, localExtension.version)) ? remoteExtension.version : localExtension.version),
|
|
93
|
-
state: mergeExtensionState(localExtension, remoteExtension, lastSyncExtensionsMap?.get(key)),
|
|
94
|
-
};
|
|
95
|
-
};
|
|
96
|
-
for (const key of ( baseToRemote.removed.values())) {
|
|
97
|
-
const localExtension = localExtensionsMap.get(key);
|
|
98
|
-
if (!localExtension) {
|
|
99
|
-
continue;
|
|
100
|
-
}
|
|
101
|
-
const baseExtension = assertIsDefined(lastSyncExtensionsMap?.get(key));
|
|
102
|
-
const wasAnInstalledExtensionDuringLastSync = lastSyncBuiltinExtensionsSet && !( lastSyncBuiltinExtensionsSet.has(key)) && baseExtension.installed;
|
|
103
|
-
if (localExtension.installed && wasAnInstalledExtensionDuringLastSync ) {
|
|
104
|
-
removed.push(localExtension.identifier);
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
newRemoteExtensionsMap.set(key, localExtension);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
for (const key of ( baseToRemote.added.values())) {
|
|
111
|
-
const remoteExtension = assertIsDefined(remoteExtensionsMap.get(key));
|
|
112
|
-
const localExtension = localExtensionsMap.get(key);
|
|
113
|
-
if (localExtension) {
|
|
114
|
-
if (( localToRemote.updated.has(key))) {
|
|
115
|
-
const mergedExtension = merge(key, localExtension, remoteExtension, remoteExtension);
|
|
116
|
-
if (!areSame(localExtension, remoteExtension, false, false)) {
|
|
117
|
-
updated.push(massageOutgoingExtension(mergedExtension, key));
|
|
118
|
-
}
|
|
119
|
-
newRemoteExtensionsMap.set(key, mergedExtension);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
if (remoteExtension.installed) {
|
|
124
|
-
added.push(massageOutgoingExtension(remoteExtension, key));
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
for (const key of ( baseToRemote.updated.values())) {
|
|
129
|
-
const remoteExtension = assertIsDefined(remoteExtensionsMap.get(key));
|
|
130
|
-
const baseExtension = assertIsDefined(lastSyncExtensionsMap?.get(key));
|
|
131
|
-
const localExtension = localExtensionsMap.get(key);
|
|
132
|
-
if (localExtension) {
|
|
133
|
-
const wasAnInstalledExtensionDuringLastSync = lastSyncBuiltinExtensionsSet && !( lastSyncBuiltinExtensionsSet.has(key)) && baseExtension.installed;
|
|
134
|
-
if (wasAnInstalledExtensionDuringLastSync && localExtension.installed && !remoteExtension.installed) {
|
|
135
|
-
removed.push(localExtension.identifier);
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
const mergedExtension = merge(key, localExtension, remoteExtension, remoteExtension);
|
|
139
|
-
updated.push(massageOutgoingExtension(mergedExtension, key));
|
|
140
|
-
newRemoteExtensionsMap.set(key, mergedExtension);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
else if (remoteExtension.installed) {
|
|
144
|
-
added.push(massageOutgoingExtension(remoteExtension, key));
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
for (const key of ( baseToLocal.added.values())) {
|
|
148
|
-
if (( baseToRemote.added.has(key))) {
|
|
149
|
-
continue;
|
|
150
|
-
}
|
|
151
|
-
newRemoteExtensionsMap.set(key, assertIsDefined(localExtensionsMap.get(key)));
|
|
152
|
-
}
|
|
153
|
-
for (const key of ( baseToLocal.updated.values())) {
|
|
154
|
-
if (( baseToRemote.removed.has(key))) {
|
|
155
|
-
continue;
|
|
156
|
-
}
|
|
157
|
-
if (( baseToRemote.updated.has(key))) {
|
|
158
|
-
continue;
|
|
159
|
-
}
|
|
160
|
-
const localExtension = assertIsDefined(localExtensionsMap.get(key));
|
|
161
|
-
const remoteExtension = assertIsDefined(remoteExtensionsMap.get(key));
|
|
162
|
-
newRemoteExtensionsMap.set(key, merge(key, localExtension, remoteExtension, localExtension));
|
|
163
|
-
}
|
|
164
|
-
for (const key of ( baseToLocal.removed.values())) {
|
|
165
|
-
if (( baseToRemote.updated.has(key))) {
|
|
166
|
-
continue;
|
|
167
|
-
}
|
|
168
|
-
if (( baseToRemote.removed.has(key))) {
|
|
169
|
-
continue;
|
|
170
|
-
}
|
|
171
|
-
if (( skippedExtensionsMap.has(key))) {
|
|
172
|
-
continue;
|
|
173
|
-
}
|
|
174
|
-
if (!assertIsDefined(remoteExtensionsMap.get(key)).installed) {
|
|
175
|
-
continue;
|
|
176
|
-
}
|
|
177
|
-
if (!lastSyncBuiltinExtensionsSet) {
|
|
178
|
-
continue;
|
|
179
|
-
}
|
|
180
|
-
if (( lastSyncBuiltinExtensionsSet.has(key)) || !assertIsDefined(lastSyncExtensionsMap?.get(key)).installed) {
|
|
181
|
-
continue;
|
|
182
|
-
}
|
|
183
|
-
newRemoteExtensionsMap.delete(key);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
const remote = [];
|
|
187
|
-
const remoteChanges = compare(remoteExtensionsMap, newRemoteExtensionsMap, ( new Set()), true);
|
|
188
|
-
const hasRemoteChanges = remoteChanges.added.size > 0 || remoteChanges.updated.size > 0 || remoteChanges.removed.size > 0;
|
|
189
|
-
if (hasRemoteChanges) {
|
|
190
|
-
newRemoteExtensionsMap.forEach((value, key) => remote.push(massageOutgoingExtension(value, key)));
|
|
191
|
-
}
|
|
192
|
-
return {
|
|
193
|
-
local: { added, removed, updated },
|
|
194
|
-
remote: hasRemoteChanges ? {
|
|
195
|
-
added: ( [...remoteChanges.added].map(id => newRemoteExtensionsMap.get(id))),
|
|
196
|
-
updated: ( [...remoteChanges.updated].map(id => newRemoteExtensionsMap.get(id))),
|
|
197
|
-
removed: ( [...remoteChanges.removed].map(id => remoteExtensionsMap.get(id))),
|
|
198
|
-
all: remote
|
|
199
|
-
} : null
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
function compare(from, to, ignoredExtensions, checkVersionProperty) {
|
|
203
|
-
const fromKeys = from ? [...( from.keys())].filter(key => !( ignoredExtensions.has(key))) : [];
|
|
204
|
-
const toKeys = [...( to.keys())].filter(key => !( ignoredExtensions.has(key)));
|
|
205
|
-
const added = toKeys.filter(key => !fromKeys.includes(key)).reduce((r, key) => { r.add(key); return r; }, ( new Set()));
|
|
206
|
-
const removed = fromKeys.filter(key => !toKeys.includes(key)).reduce((r, key) => { r.add(key); return r; }, ( new Set()));
|
|
207
|
-
const updated = ( new Set());
|
|
208
|
-
for (const key of fromKeys) {
|
|
209
|
-
if (( removed.has(key))) {
|
|
210
|
-
continue;
|
|
211
|
-
}
|
|
212
|
-
const fromExtension = from.get(key);
|
|
213
|
-
const toExtension = to.get(key);
|
|
214
|
-
if (!toExtension || !areSame(fromExtension, toExtension, checkVersionProperty, true)) {
|
|
215
|
-
updated.add(key);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
return { added, removed, updated };
|
|
219
|
-
}
|
|
220
|
-
function areSame(fromExtension, toExtension, checkVersionProperty, checkInstalledProperty) {
|
|
221
|
-
if (fromExtension.disabled !== toExtension.disabled) {
|
|
222
|
-
return false;
|
|
223
|
-
}
|
|
224
|
-
if (!!fromExtension.isApplicationScoped !== !!toExtension.isApplicationScoped) {
|
|
225
|
-
return false;
|
|
226
|
-
}
|
|
227
|
-
if (checkInstalledProperty && fromExtension.installed !== toExtension.installed) {
|
|
228
|
-
return false;
|
|
229
|
-
}
|
|
230
|
-
if (fromExtension.installed && toExtension.installed) {
|
|
231
|
-
if (fromExtension.preRelease !== toExtension.preRelease) {
|
|
232
|
-
return false;
|
|
233
|
-
}
|
|
234
|
-
if (fromExtension.pinned !== toExtension.pinned) {
|
|
235
|
-
return false;
|
|
236
|
-
}
|
|
237
|
-
if (toExtension.pinned && fromExtension.version !== toExtension.version) {
|
|
238
|
-
return false;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
if (!isSameExtensionState(fromExtension.state, toExtension.state)) {
|
|
242
|
-
return false;
|
|
243
|
-
}
|
|
244
|
-
if ((checkVersionProperty && fromExtension.version !== toExtension.version)) {
|
|
245
|
-
return false;
|
|
246
|
-
}
|
|
247
|
-
return true;
|
|
248
|
-
}
|
|
249
|
-
function mergeExtensionState(localExtension, remoteExtension, lastSyncExtension) {
|
|
250
|
-
const localState = localExtension.state;
|
|
251
|
-
const remoteState = remoteExtension.state;
|
|
252
|
-
const baseState = lastSyncExtension?.state;
|
|
253
|
-
if (!remoteExtension.version) {
|
|
254
|
-
return localState;
|
|
255
|
-
}
|
|
256
|
-
if (localState && semverExports.gt(localExtension.version, remoteExtension.version)) {
|
|
257
|
-
return localState;
|
|
258
|
-
}
|
|
259
|
-
if (remoteState && semverExports.gt(remoteExtension.version, localExtension.version)) {
|
|
260
|
-
return remoteState;
|
|
261
|
-
}
|
|
262
|
-
if (!localState) {
|
|
263
|
-
return remoteState;
|
|
264
|
-
}
|
|
265
|
-
if (!remoteState) {
|
|
266
|
-
return localState;
|
|
267
|
-
}
|
|
268
|
-
const mergedState = deepClone(localState);
|
|
269
|
-
const baseToRemote = baseState ? compareExtensionState(baseState, remoteState) : { added: ( Object.keys(remoteState)).reduce((r, k) => { r.add(k); return r; }, ( new Set())), removed: ( new Set()), updated: ( new Set()) };
|
|
270
|
-
const baseToLocal = baseState ? compareExtensionState(baseState, localState) : { added: ( Object.keys(localState)).reduce((r, k) => { r.add(k); return r; }, ( new Set())), removed: ( new Set()), updated: ( new Set()) };
|
|
271
|
-
for (const key of [...( baseToRemote.added.values()), ...( baseToRemote.updated.values())]) {
|
|
272
|
-
mergedState[key] = remoteState[key];
|
|
273
|
-
}
|
|
274
|
-
for (const key of ( baseToRemote.removed.values())) {
|
|
275
|
-
if (!( baseToLocal.updated.has(key))) {
|
|
276
|
-
delete mergedState[key];
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
return mergedState;
|
|
280
|
-
}
|
|
281
|
-
function compareExtensionState(from, to) {
|
|
282
|
-
const fromKeys = ( Object.keys(from));
|
|
283
|
-
const toKeys = ( Object.keys(to));
|
|
284
|
-
const added = toKeys.filter(key => !fromKeys.includes(key)).reduce((r, key) => { r.add(key); return r; }, ( new Set()));
|
|
285
|
-
const removed = fromKeys.filter(key => !toKeys.includes(key)).reduce((r, key) => { r.add(key); return r; }, ( new Set()));
|
|
286
|
-
const updated = ( new Set());
|
|
287
|
-
for (const key of fromKeys) {
|
|
288
|
-
if (( removed.has(key))) {
|
|
289
|
-
continue;
|
|
290
|
-
}
|
|
291
|
-
const value1 = from[key];
|
|
292
|
-
const value2 = to[key];
|
|
293
|
-
if (!equals(value1, value2)) {
|
|
294
|
-
updated.add(key);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
return { added, removed, updated };
|
|
298
|
-
}
|
|
299
|
-
function isSameExtensionState(a = {}, b = {}) {
|
|
300
|
-
const { added, removed, updated } = compareExtensionState(a, b);
|
|
301
|
-
return added.size === 0 && removed.size === 0 && updated.size === 0;
|
|
302
|
-
}
|
|
303
|
-
function massageIncomingExtension(extension) {
|
|
304
|
-
return { ...extension, ...{ disabled: !!extension.disabled, installed: !!extension.installed } };
|
|
305
|
-
}
|
|
306
|
-
function massageOutgoingExtension(extension, key) {
|
|
307
|
-
const massagedExtension = {
|
|
308
|
-
...extension,
|
|
309
|
-
identifier: {
|
|
310
|
-
id: extension.identifier.id,
|
|
311
|
-
uuid: key.startsWith('uuid:') ? key.substring('uuid:'.length) : undefined
|
|
312
|
-
},
|
|
313
|
-
preRelease: !!extension.preRelease,
|
|
314
|
-
pinned: !!extension.pinned,
|
|
315
|
-
};
|
|
316
|
-
if (!extension.disabled) {
|
|
317
|
-
delete massagedExtension.disabled;
|
|
318
|
-
}
|
|
319
|
-
if (!extension.installed) {
|
|
320
|
-
delete massagedExtension.installed;
|
|
321
|
-
}
|
|
322
|
-
if (!extension.state) {
|
|
323
|
-
delete massagedExtension.state;
|
|
324
|
-
}
|
|
325
|
-
if (!extension.isApplicationScoped) {
|
|
326
|
-
delete massagedExtension.isApplicationScoped;
|
|
327
|
-
}
|
|
328
|
-
return massagedExtension;
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
export { merge };
|