From 27f036cd85db679001cef5c1563df611c5405083 Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Sun, 25 Oct 2020 18:31:09 +0100 Subject: [PATCH] intrdouce ISyncExtensionWithVersion type and use it for local extensions --- .../userDataSync/common/extensionsMerge.ts | 45 +- .../userDataSync/common/extensionsSync.ts | 8 +- .../userDataSync/common/userDataSync.ts | 4 + .../test/common/extensionsMerge.test.ts | 446 +++++++++--------- 4 files changed, 258 insertions(+), 245 deletions(-) diff --git a/src/vs/platform/userDataSync/common/extensionsMerge.ts b/src/vs/platform/userDataSync/common/extensionsMerge.ts index 96f79ba99e9..23fd8cf5237 100644 --- a/src/vs/platform/userDataSync/common/extensionsMerge.ts +++ b/src/vs/platform/userDataSync/common/extensionsMerge.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ISyncExtension } from 'vs/platform/userDataSync/common/userDataSync'; +import { ISyncExtension, ISyncExtensionWithVersion } from 'vs/platform/userDataSync/common/userDataSync'; import { IExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; import { deepClone, equals } from 'vs/base/common/objects'; import { IStringDictionary } from 'vs/base/common/collections'; @@ -11,14 +11,14 @@ import { IStringDictionary } from 'vs/base/common/collections'; export interface IMergeResult { added: ISyncExtension[]; removed: IExtensionIdentifier[]; - updated: ISyncExtension[]; + updated: ISyncExtensionWithVersion[]; remote: ISyncExtension[] | null; } -export function merge(localExtensions: ISyncExtension[], remoteExtensions: ISyncExtension[] | null, lastSyncExtensions: ISyncExtension[] | null, skippedExtensions: ISyncExtension[], ignoredExtensions: string[]): IMergeResult { +export function merge(localExtensions: ISyncExtensionWithVersion[], remoteExtensions: ISyncExtension[] | null, lastSyncExtensions: ISyncExtension[] | null, skippedExtensions: ISyncExtension[], ignoredExtensions: string[]): IMergeResult { const added: ISyncExtension[] = []; const removed: IExtensionIdentifier[] = []; - const updated: ISyncExtension[] = []; + const updated: ISyncExtensionWithVersion[] = []; if (!remoteExtensions) { const remote = localExtensions.filter(({ identifier }) => ignoredExtensions.every(id => id.toLowerCase() !== identifier.id.toLowerCase())); @@ -46,17 +46,23 @@ export function merge(localExtensions: ISyncExtension[], remoteExtensions: ISync const uuid = extension.identifier.uuid || uuids.get(extension.identifier.id.toLowerCase()); return uuid ? `uuid:${uuid}` : `id:${extension.identifier.id.toLowerCase()}`; }; - const addExtensionToMap = (map: Map, extension: ISyncExtension) => { + const addExtensionToMap = (map: Map, extension: T) => { map.set(getKey(extension), extension); return map; }; - const localExtensionsMap = localExtensions.reduce(addExtensionToMap, new Map()); + const localExtensionsMap: Map = localExtensions.reduce(addExtensionToMap, new Map()); const remoteExtensionsMap = remoteExtensions.reduce(addExtensionToMap, new Map()); const newRemoteExtensionsMap = remoteExtensions.reduce((map: Map, extension: ISyncExtension) => { const key = getKey(extension); extension = deepClone(extension); - if (localExtensionsMap.get(key)?.installed) { - extension.installed = true; + const localExtension = localExtensionsMap.get(key); + if (localExtension) { + if (localExtension.installed) { + extension.installed = true; + } + if (!extension.version) { + extension.version = localExtension.version; + } } return addExtensionToMap(map, extension); }, new Map()); @@ -74,14 +80,17 @@ export function merge(localExtensions: ISyncExtension[], remoteExtensions: ISync const baseToRemote = compare(lastSyncExtensionsMap, remoteExtensionsMap, ignoredExtensionsSet); const mergeAndUpdate = (key: string): void => { - const localExtension = localExtensionsMap.get(key)!; - const remoteExtension = remoteExtensionsMap.get(key)!; - // merge extension state only when version matches and local extension has state - if (remoteExtension.version === localExtension.version && localExtension.state) { - remoteExtension.state = mergeExtensionState(localExtension.state, remoteExtension.state, lastSyncExtensionsMap?.get(key)?.state); + const localExtension = localExtensionsMap.get(key); + if (localExtension) { + const remoteExtension = remoteExtensionsMap.get(key)!; + const mergedExtension: ISyncExtensionWithVersion = { ...remoteExtension, version: localExtension.version }; + // merge extension state only when version matches and local extension has state + if (remoteExtension.version === localExtension.version && localExtension.state) { + mergedExtension.state = mergeExtensionState(localExtension.state, remoteExtension.state, lastSyncExtensionsMap?.get(key)?.state); + } + updated.push(massageOutgoingExtension(mergedExtension, key)); + newRemoteExtensionsMap.set(key, remoteExtension); } - updated.push(massageOutgoingExtension(remoteExtension, key)); - newRemoteExtensionsMap.set(key, remoteExtension); }; // Remotely removed extension. @@ -235,12 +244,12 @@ function isSameExtensionState(a: IStringDictionary = {}, b: IStringDictiona } // massage incoming extension - add optional properties -function massageIncomingExtension(extension: ISyncExtension): ISyncExtension { +function massageIncomingExtension(extension: T): T { return { ...extension, ...{ disabled: !!extension.disabled, installed: !!extension.installed } }; } // massage outgoing extension - remove optional properties -function massageOutgoingExtension(extension: ISyncExtension, key: string): ISyncExtension { +function massageOutgoingExtension(extension: T, key: string): T { const massagedExtension: ISyncExtension = { identifier: { id: extension.identifier.id, @@ -256,5 +265,5 @@ function massageOutgoingExtension(extension: ISyncExtension, key: string): ISync if (extension.version) { massagedExtension.version = extension.version; } - return massagedExtension; + return massagedExtension as T; } diff --git a/src/vs/platform/userDataSync/common/extensionsSync.ts b/src/vs/platform/userDataSync/common/extensionsSync.ts index 0db5bc4280b..6be3d095b8e 100644 --- a/src/vs/platform/userDataSync/common/extensionsSync.ts +++ b/src/vs/platform/userDataSync/common/extensionsSync.ts @@ -5,7 +5,7 @@ import { IUserDataSyncStoreService, ISyncExtension, IUserDataSyncLogService, IUserDataSynchroniser, SyncResource, IUserDataSyncResourceEnablementService, - IUserDataSyncBackupStoreService, ISyncResourceHandle, USER_DATA_SYNC_SCHEME, IRemoteUserData, ISyncData, Change + IUserDataSyncBackupStoreService, ISyncResourceHandle, USER_DATA_SYNC_SCHEME, IRemoteUserData, ISyncData, Change, ISyncExtensionWithVersion } from 'vs/platform/userDataSync/common/userDataSync'; import { Event } from 'vs/base/common/event'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; @@ -36,7 +36,7 @@ interface IExtensionResourceMergeResult extends IAcceptResult { } interface IExtensionResourcePreview extends IResourcePreview { - readonly localExtensions: ISyncExtension[]; + readonly localExtensions: ISyncExtensionWithVersion[]; readonly skippedExtensions: ISyncExtension[]; readonly previewResult: IExtensionResourceMergeResult; } @@ -441,11 +441,11 @@ export class ExtensionsSynchroniser extends AbstractSynchroniser implements IUse return JSON.parse(syncData.content); } - private getLocalExtensions(installedExtensions: ILocalExtension[]): ISyncExtension[] { + private getLocalExtensions(installedExtensions: ILocalExtension[]): ISyncExtensionWithVersion[] { const disabledExtensions = this.extensionEnablementService.getDisabledExtensions(); return installedExtensions .map(({ identifier, isBuiltin, manifest }) => { - const syncExntesion: ISyncExtension = { identifier, version: manifest.version }; + const syncExntesion: ISyncExtensionWithVersion = { identifier, version: manifest.version }; if (disabledExtensions.some(disabledExtension => areSameExtensions(disabledExtension, identifier))) { syncExntesion.disabled = true; } diff --git a/src/vs/platform/userDataSync/common/userDataSync.ts b/src/vs/platform/userDataSync/common/userDataSync.ts index 9d9b1fcede7..35a10cfd197 100644 --- a/src/vs/platform/userDataSync/common/userDataSync.ts +++ b/src/vs/platform/userDataSync/common/userDataSync.ts @@ -292,6 +292,10 @@ export interface ISyncExtension { state?: IStringDictionary; } +export interface ISyncExtensionWithVersion extends ISyncExtension { + version: string; +} + export interface IStorageValue { version: number; value: string; diff --git a/src/vs/platform/userDataSync/test/common/extensionsMerge.test.ts b/src/vs/platform/userDataSync/test/common/extensionsMerge.test.ts index a66b9d45f8c..a388892b8bc 100644 --- a/src/vs/platform/userDataSync/test/common/extensionsMerge.test.ts +++ b/src/vs/platform/userDataSync/test/common/extensionsMerge.test.ts @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import * as assert from 'assert'; -import { ISyncExtension } from 'vs/platform/userDataSync/common/userDataSync'; +import { ISyncExtension, ISyncExtensionWithVersion } from 'vs/platform/userDataSync/common/userDataSync'; import { merge } from 'vs/platform/userDataSync/common/extensionsMerge'; suite('ExtensionsMerge', () => { test('merge returns local extension if remote does not exist', () => { - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, null, null, [], []); @@ -25,14 +25,14 @@ suite('ExtensionsMerge', () => { }); test('merge returns local extension if remote does not exist with ignored extensions', () => { - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; - const expected: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const expected: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, null, null, [], ['a']); @@ -44,14 +44,14 @@ suite('ExtensionsMerge', () => { }); test('merge returns local extension if remote does not exist with ignored extensions (ignore case)', () => { - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; - const expected: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const expected: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, null, null, [], ['A']); @@ -63,18 +63,18 @@ suite('ExtensionsMerge', () => { }); test('merge returns local extension if remote does not exist with skipped extensions', () => { - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; const skippedExtension: ISyncExtension[] = [ { identifier: { id: 'b', uuid: 'b' }, installed: true }, ]; - const expected: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const expected: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, null, null, skippedExtension, []); @@ -86,17 +86,17 @@ suite('ExtensionsMerge', () => { }); test('merge returns local extension if remote does not exist with skipped and ignored extensions', () => { - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; const skippedExtension: ISyncExtension[] = [ { identifier: { id: 'b', uuid: 'b' }, installed: true }, ]; - const expected: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const expected: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, null, null, skippedExtension, ['a']); @@ -108,47 +108,47 @@ suite('ExtensionsMerge', () => { }); test('merge local and remote extensions when there is no base', () => { - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'd', uuid: 'd' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; - const expected: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'd', uuid: 'd' }, installed: true }, + const expected: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, null, [], []); - assert.deepEqual(actual.added, [{ identifier: { id: 'b', uuid: 'b' }, installed: true }, { identifier: { id: 'c', uuid: 'c' }, installed: true }]); + assert.deepEqual(actual.added, [{ identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }]); assert.deepEqual(actual.removed, []); assert.deepEqual(actual.updated, []); assert.deepEqual(actual.remote, expected); }); test('merge local and remote extensions when there is no base and with ignored extensions', () => { - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'd', uuid: 'd' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; - const expected: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, - { identifier: { id: 'd', uuid: 'd' }, installed: true }, + const expected: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, null, [], ['a']); - assert.deepEqual(actual.added, [{ identifier: { id: 'b', uuid: 'b' }, installed: true }, { identifier: { id: 'c', uuid: 'c' }, installed: true }]); + assert.deepEqual(actual.added, [{ identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }]); assert.deepEqual(actual.removed, []); assert.deepEqual(actual.updated, []); assert.deepEqual(actual.remote, expected); @@ -159,18 +159,18 @@ suite('ExtensionsMerge', () => { { identifier: { id: 'a', uuid: 'a' }, installed: true }, { identifier: { id: 'd', uuid: 'd' }, installed: true }, ]; - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'd', uuid: 'd' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, baseExtensions, [], []); - assert.deepEqual(actual.added, [{ identifier: { id: 'b', uuid: 'b' }, installed: true }, { identifier: { id: 'c', uuid: 'c' }, installed: true }]); + assert.deepEqual(actual.added, [{ identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }]); assert.deepEqual(actual.removed, [{ id: 'a', uuid: 'a' }, { id: 'd', uuid: 'd' }]); assert.deepEqual(actual.updated, []); assert.equal(actual.remote, null); @@ -181,21 +181,21 @@ suite('ExtensionsMerge', () => { { identifier: { id: 'a', uuid: 'a' }, installed: true }, { identifier: { id: 'd', uuid: 'd' }, installed: true }, ]; - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'd', uuid: 'd' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, - { identifier: { id: 'd', uuid: 'd' }, disabled: true, installed: true }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'd', uuid: 'd' }, disabled: true, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, baseExtensions, [], []); - assert.deepEqual(actual.added, [{ identifier: { id: 'b', uuid: 'b' }, installed: true }, { identifier: { id: 'c', uuid: 'c' }, installed: true }]); + assert.deepEqual(actual.added, [{ identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }]); assert.deepEqual(actual.removed, [{ id: 'a', uuid: 'a' }]); - assert.deepEqual(actual.updated, [{ identifier: { id: 'd', uuid: 'd' }, disabled: true, installed: true }]); + assert.deepEqual(actual.updated, [{ identifier: { id: 'd', uuid: 'd' }, disabled: true, installed: true, version: '1.0.0' }]); assert.equal(actual.remote, null); }); @@ -204,18 +204,18 @@ suite('ExtensionsMerge', () => { { identifier: { id: 'a', uuid: 'a' }, installed: true }, { identifier: { id: 'd', uuid: 'd' }, installed: true }, ]; - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'd', uuid: 'd' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, baseExtensions, [], ['a']); - assert.deepEqual(actual.added, [{ identifier: { id: 'b', uuid: 'b' }, installed: true }, { identifier: { id: 'c', uuid: 'c' }, installed: true }]); + assert.deepEqual(actual.added, [{ identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }]); assert.deepEqual(actual.removed, [{ id: 'd', uuid: 'd' }]); assert.deepEqual(actual.updated, []); assert.equal(actual.remote, null); @@ -226,20 +226,20 @@ suite('ExtensionsMerge', () => { { identifier: { id: 'a', uuid: 'a' }, installed: true }, { identifier: { id: 'd', uuid: 'd' }, installed: true }, ]; - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'd', uuid: 'd' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, ]; const skippedExtensions: ISyncExtension[] = [ { identifier: { id: 'a', uuid: 'a' }, installed: true }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, baseExtensions, skippedExtensions, []); - assert.deepEqual(actual.added, [{ identifier: { id: 'b', uuid: 'b' }, installed: true }, { identifier: { id: 'c', uuid: 'c' }, installed: true }]); + assert.deepEqual(actual.added, [{ identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }]); assert.deepEqual(actual.removed, [{ id: 'd', uuid: 'd' }]); assert.deepEqual(actual.updated, []); assert.equal(actual.remote, null); @@ -250,20 +250,20 @@ suite('ExtensionsMerge', () => { { identifier: { id: 'a', uuid: 'a' }, installed: true }, { identifier: { id: 'd', uuid: 'd' }, installed: true }, ]; - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'd', uuid: 'd' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, ]; const skippedExtensions: ISyncExtension[] = [ { identifier: { id: 'a', uuid: 'a' }, installed: true }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, baseExtensions, skippedExtensions, ['b']); - assert.deepEqual(actual.added, [{ identifier: { id: 'c', uuid: 'c' }, installed: true }]); + assert.deepEqual(actual.added, [{ identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }]); assert.deepEqual(actual.removed, [{ id: 'd', uuid: 'd' }]); assert.deepEqual(actual.updated, []); assert.equal(actual.remote, null); @@ -274,13 +274,13 @@ suite('ExtensionsMerge', () => { { identifier: { id: 'a', uuid: 'a' }, installed: true }, { identifier: { id: 'd', uuid: 'd' }, installed: true }, ]; - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'd', uuid: 'd' }, installed: true }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, baseExtensions, [], []); @@ -296,14 +296,14 @@ suite('ExtensionsMerge', () => { { identifier: { id: 'a', uuid: 'a' }, installed: true }, { identifier: { id: 'd', uuid: 'd' }, installed: true }, ]; - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, disabled: true, installed: true }, - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, disabled: true, installed: true, version: '1.0.0' }, + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'd', uuid: 'd' }, installed: true }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, baseExtensions, [], []); @@ -319,13 +319,13 @@ suite('ExtensionsMerge', () => { { identifier: { id: 'a', uuid: 'a' }, installed: true }, { identifier: { id: 'd', uuid: 'd' }, installed: true }, ]; - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'd', uuid: 'd' }, installed: true }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, baseExtensions, [], ['b']); @@ -334,7 +334,7 @@ suite('ExtensionsMerge', () => { assert.deepEqual(actual.removed, []); assert.deepEqual(actual.updated, []); assert.deepEqual(actual.remote, [ - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]); }); @@ -346,18 +346,18 @@ suite('ExtensionsMerge', () => { const skippedExtensions: ISyncExtension[] = [ { identifier: { id: 'd', uuid: 'd' }, installed: true }, ]; - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'd', uuid: 'd' }, installed: true }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, ]; - const expected: ISyncExtension[] = [ - { identifier: { id: 'd', uuid: 'd' }, installed: true }, - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const expected: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, baseExtensions, skippedExtensions, []); @@ -376,17 +376,17 @@ suite('ExtensionsMerge', () => { const skippedExtensions: ISyncExtension[] = [ { identifier: { id: 'd', uuid: 'd' }, installed: true }, ]; - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'd', uuid: 'd' }, installed: true }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, ]; - const expected: ISyncExtension[] = [ - { identifier: { id: 'd', uuid: 'd' }, installed: true }, - { identifier: { id: 'b', uuid: 'b' }, installed: true }, + const expected: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, baseExtensions, skippedExtensions, ['c']); @@ -402,25 +402,25 @@ suite('ExtensionsMerge', () => { { identifier: { id: 'a', uuid: 'a' }, installed: true }, { identifier: { id: 'd', uuid: 'd' }, installed: true }, ]; - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'd', uuid: 'd' }, installed: true }, - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'e', uuid: 'e' }, installed: true }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'e', uuid: 'e' }, installed: true, version: '1.0.0' }, ]; - const expected: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'e', uuid: 'e' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const expected: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'e', uuid: 'e' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, baseExtensions, [], []); - assert.deepEqual(actual.added, [{ identifier: { id: 'e', uuid: 'e' }, installed: true }]); + assert.deepEqual(actual.added, [{ identifier: { id: 'e', uuid: 'e' }, installed: true, version: '1.0.0' }]); assert.deepEqual(actual.removed, [{ id: 'a', uuid: 'a' }]); assert.deepEqual(actual.updated, []); assert.deepEqual(actual.remote, expected); @@ -431,20 +431,20 @@ suite('ExtensionsMerge', () => { { identifier: { id: 'a', uuid: 'a' }, installed: true }, { identifier: { id: 'd', uuid: 'd' }, installed: true }, ]; - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'd', uuid: 'd' }, installed: true }, - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'e', uuid: 'e' }, installed: true }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'e', uuid: 'e' }, installed: true, version: '1.0.0' }, ]; - const expected: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'e', uuid: 'e' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const expected: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'e', uuid: 'e' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, baseExtensions, [], ['a', 'e']); @@ -463,24 +463,24 @@ suite('ExtensionsMerge', () => { const skippedExtensions: ISyncExtension[] = [ { identifier: { id: 'a', uuid: 'a' }, installed: true }, ]; - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'd', uuid: 'd' }, installed: true }, - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'e', uuid: 'e' }, installed: true }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'e', uuid: 'e' }, installed: true, version: '1.0.0' }, ]; - const expected: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'e', uuid: 'e' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const expected: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'e', uuid: 'e' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, baseExtensions, skippedExtensions, []); - assert.deepEqual(actual.added, [{ identifier: { id: 'e', uuid: 'e' }, installed: true }]); + assert.deepEqual(actual.added, [{ identifier: { id: 'e', uuid: 'e' }, installed: true, version: '1.0.0' }]); assert.deepEqual(actual.removed, []); assert.deepEqual(actual.updated, []); assert.deepEqual(actual.remote, expected); @@ -494,19 +494,19 @@ suite('ExtensionsMerge', () => { const skippedExtensions: ISyncExtension[] = [ { identifier: { id: 'a', uuid: 'a' }, installed: true }, ]; - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'd', uuid: 'd' }, installed: true }, - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'e', uuid: 'e' }, installed: true }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'e', uuid: 'e' }, installed: true, version: '1.0.0' }, ]; - const expected: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'e', uuid: 'e' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const expected: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'e', uuid: 'e' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, baseExtensions, skippedExtensions, ['e']); @@ -518,37 +518,37 @@ suite('ExtensionsMerge', () => { }); test('merge when remote extension has no uuid and different extension id case', () => { - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'A' }, installed: true }, - { identifier: { id: 'd', uuid: 'd' }, installed: true }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'A' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, ]; - const expected: ISyncExtension[] = [ - { identifier: { id: 'A', uuid: 'a' }, installed: true }, - { identifier: { id: 'd', uuid: 'd' }, installed: true }, - { identifier: { id: 'b', uuid: 'b' }, installed: true }, - { identifier: { id: 'c', uuid: 'c' }, installed: true }, + const expected: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'A', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'b', uuid: 'b' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'c', uuid: 'c' }, installed: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, null, [], []); - assert.deepEqual(actual.added, [{ identifier: { id: 'd', uuid: 'd' }, installed: true }]); + assert.deepEqual(actual.added, [{ identifier: { id: 'd', uuid: 'd' }, installed: true, version: '1.0.0' }]); assert.deepEqual(actual.removed, []); assert.deepEqual(actual.updated, []); assert.deepEqual(actual.remote, expected); }); test('merge when remote extension is not an installed extension', () => { - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, - { identifier: { id: 'b', uuid: 'b' } }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, + { identifier: { id: 'b', uuid: 'b' }, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, null, [], []); @@ -560,11 +560,11 @@ suite('ExtensionsMerge', () => { }); test('merge when remote extension is not an installed extension but is an installed extension locally', () => { - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' } }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, null, [], []); @@ -576,12 +576,12 @@ suite('ExtensionsMerge', () => { }); test('merge when an extension is not an installed extension remotely and does not exist locally', () => { - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' } }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' } }, - { identifier: { id: 'b', uuid: 'b' } }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, version: '1.0.0' }, + { identifier: { id: 'b', uuid: 'b' }, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, remoteExtensions, [], []); @@ -593,14 +593,14 @@ suite('ExtensionsMerge', () => { }); test('merge when an extension is an installed extension remotely but not locally and updated locally', () => { - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, disabled: true }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, disabled: true, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, version: '1.0.0' }, ]; - const expected: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true, disabled: true }, + const expected: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, disabled: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, remoteExtensions, [], []); @@ -612,11 +612,11 @@ suite('ExtensionsMerge', () => { }); test('merge when an extension is an installed extension remotely but not locally and updated remotely', () => { - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' } }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' }, installed: true, disabled: true }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, installed: true, disabled: true, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, localExtensions, [], []); @@ -628,15 +628,15 @@ suite('ExtensionsMerge', () => { }); test('merge not installed extensions', () => { - const localExtensions: ISyncExtension[] = [ - { identifier: { id: 'a', uuid: 'a' } }, + const localExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'a', uuid: 'a' }, version: '1.0.0' }, ]; - const remoteExtensions: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' } }, + const remoteExtensions: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, version: '1.0.0' }, ]; - const expected: ISyncExtension[] = [ - { identifier: { id: 'b', uuid: 'b' } }, - { identifier: { id: 'a', uuid: 'a' } }, + const expected: ISyncExtensionWithVersion[] = [ + { identifier: { id: 'b', uuid: 'b' }, version: '1.0.0' }, + { identifier: { id: 'a', uuid: 'a' }, version: '1.0.0' }, ]; const actual = merge(localExtensions, remoteExtensions, null, [], []); -- GitLab