40
localExtensions = localExtensions.map(massageIncomingExtension) as ILocalSyncExtension[];
41
remoteExtensions = remoteExtensions.map(massageIncomingExtension);
42
>
lastSyncExtensions = lastSyncExtensions ? lastSyncExtensions.map(massageIncomingExtension) : null;
extensionsMerge.ts
43
>
44
>
const uuids: Map<string, string> = new Map<string, string>();
45
>
const addUUID = (identifier: IExtensionIdentifier) => { if (identifier.uuid) { uuids.set(identifier.id.toLowerCase(), identifier.uuid); } };
46
>
localExtensions.forEach(({ identifier }) => addUUID(identifier));
47
>
remoteExtensions.forEach(({ identifier }) => addUUID(identifier));
48
>
lastSyncExtensions?.forEach(({ identifier }) => addUUID(identifier));
49
>
skippedExtensions?.forEach(({ identifier }) => addUUID(identifier));
50
>
lastSyncBuiltinExtensions?.forEach(identifier => addUUID(identifier));
51
>
52
>
const getKey = (extension: ISyncExtension): string => {
53
const uuid = extension.identifier.uuid || uuids.get(extension.identifier.id.toLowerCase());
54
return uuid ? `uuid:${uuid}` : `id:${extension.identifier.id.toLowerCase()}`;
55
};
56
>
const addExtensionToMap = (map: Map<string, ISyncExtension>, extension: ISyncExtension) => {
extensionsMerge.ts
57
map.set(getKey(extension), extension);
58
return map;
59
};
60
>
const localExtensionsMap: Map<string, ISyncExtension> = localExtensions.reduce(addExtensionToMap, new Map<string, ISyncExtension>());
extensionsMerge.ts
61
>
const remoteExtensionsMap = remoteExtensions.reduce(addExtensionToMap, new Map<string, ISyncExtension>());
62
>
const newRemoteExtensionsMap = remoteExtensions.reduce((map: Map<string, ISyncExtension>, extension: ISyncExtension) => addExtensionToMap(map, deepClone(extension)), new Map<string, ISyncExtension>());
63
>
const lastSyncExtensionsMap = lastSyncExtensions ? lastSyncExtensions.reduce(addExtensionToMap, new Map<string, ISyncExtension>()) : null;
64
>
const skippedExtensionsMap = skippedExtensions.reduce(addExtensionToMap, new Map<string, ISyncExtension>());
65
>
const ignoredExtensionsSet = ignoredExtensions.reduce((set, id) => {
66
const uuid = uuids.get(id.toLowerCase());
67
return set.add(uuid ? `uuid:${uuid}` : `id:${id.toLowerCase()}`);
69
>
const lastSyncBuiltinExtensionsSet = lastSyncBuiltinExtensions ? lastSyncBuiltinExtensions.reduce((set, { id, uuid }) => {
70
uuid = uuid ?? uuids.get(id.toLowerCase());
71
return set.add(uuid ? `uuid:${uuid}` : `id:${id.toLowerCase()}`);
73
>
74
>
const localToRemote = compare(localExtensionsMap, remoteExtensionsMap, ignoredExtensionsSet, false);
75
>
if (localToRemote.added.size > 0 || localToRemote.removed.size > 0 || localToRemote.updated.size > 0) {
76
77
const baseToLocal = compare(lastSyncExtensionsMap, localExtensionsMap, ignoredExtensionsSet, false);