diff --git a/dist/eventPage.js b/dist/eventPage.js index e6f91470..92bf652a 100644 --- a/dist/eventPage.js +++ b/dist/eventPage.js @@ -6,7 +6,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -import { arrayContains } from './helper.js'; +import { arrayContains, getVersion, isVersionOlder } from './helper.js'; import Config from './config.js'; import Domain from './domain.js'; //// @@ -22,7 +22,7 @@ chrome.runtime.onInstalled.addListener(function (details) { // Open options page to show new features // chrome.runtime.openOptionsPage(); // Run any data migrations on update - updateMigrations(); + updateMigrations(details.previousVersion); // Display update notification chrome.notifications.create('extensionUpdate', { 'type': 'basic', @@ -98,33 +98,43 @@ function toggleDomain(domain, key) { Domain.domainMatch(domain, cfg[key]) ? enableDomain(cfg, domain, key) : disableDomain(cfg, domain, key); }); } -function updateMigrations() { +// This will look at the version (from before the update) and perform data migrations if necessary +// Only append so the order stays the same (oldest first). +function updateMigrations(previousVersion) { return __awaiter(this, void 0, void 0, function* () { - // [1.0.16] - Downcase and trim each word in the list (NOTE: This MAY result in losing some words) - let cfg = yield Config.build(); - cfg.sanitizeWords(); - cfg.save(); - // // [1.0.13] - updateRemoveWordsFromStorage - transition from previous words structure under the hood - // Note: Not async function - // chrome.storage.sync.get({'words': null}, function(oldWords) { - // // console.log('Old words for migration:', oldWords.words); - // if (oldWords.words) { - // chrome.storage.sync.set({'_words0': oldWords.words}, function() { - // if (!chrome.runtime.lastError) { - // chrome.storage.sync.remove('words', function() { - // // Split words if necessary - // var wordsPromise = new Promise(function(resolve, reject) { - // resolve(Config.build()); - // }); - // wordsPromise - // .then(function(response: Config) { - // response.save(); - // }); - // }); - // } - // }); - // } - // }); + let old = getVersion(previousVersion); + // let current = chrome.runtime.getManifest().version + // [1.0.13] - updateRemoveWordsFromStorage - transition from previous words structure under the hood + if (isVersionOlder(getVersion('1.0.13'), old)) { + console.log('not in herer'); + // Note: using promise instead of async/await + chrome.storage.sync.get({ 'words': null }, function (oldWords) { + // console.log('Old words for migration:', oldWords.words); + if (oldWords.words) { + chrome.storage.sync.set({ '_words0': oldWords.words }, function () { + if (!chrome.runtime.lastError) { + chrome.storage.sync.remove('words', function () { + // Split words if necessary + var wordsPromise = new Promise(function (resolve, reject) { + resolve(Config.build()); + }); + wordsPromise + .then(function (response) { + response.save(); + }); + }); + } + }); + } + }); + } + // [1.1.0] - Downcase and trim each word in the list (NOTE: This MAY result in losing some words) + if (isVersionOlder(getVersion('1.1.0'), old)) { + console.log('in version update'); + let cfg = yield Config.build(); + cfg.sanitizeWords(); + cfg.save(); + } }); } //// diff --git a/dist/filter.bundle.js b/dist/filter.bundle.js index ffdccd4e..044d617d 100644 --- a/dist/filter.bundle.js +++ b/dist/filter.bundle.js @@ -6,9 +6,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -//// -//src/helper.ts -// function arrayContains(array, element) { return (array.indexOf(element) > -1); } @@ -22,6 +19,28 @@ function dynamicList(list, selectEm, title) { } document.getElementById(selectEm).innerHTML = options; } +// /^\d+\.\d+\.\d+$/ +function getVersion(version) { + let versionValues = version.split('.'); + return { + major: parseInt(versionValues[0]), + minor: parseInt(versionValues[1]), + patch: parseInt(versionValues[2]) + }; +} +// Is the provided version lower than the minimum version? +function isVersionOlder(minimum, version) { + if (version.major < minimum.major) { + return true; + } + else if (version.major == minimum.major && version.minor < minimum.minor) { + return true; + } + else if (version.major == minimum.major && version.minor == minimum.minor && version.patch < minimum.patch) { + return true; + } + return false; +} function removeFromArray(array, element) { return array.filter(e => e !== element); } diff --git a/dist/helper.js b/dist/helper.js index f0544d14..22e00ff1 100644 --- a/dist/helper.js +++ b/dist/helper.js @@ -11,6 +11,28 @@ export function dynamicList(list, selectEm, title) { } document.getElementById(selectEm).innerHTML = options; } +// /^\d+\.\d+\.\d+$/ +export function getVersion(version) { + let versionValues = version.split('.'); + return { + major: parseInt(versionValues[0]), + minor: parseInt(versionValues[1]), + patch: parseInt(versionValues[2]) + }; +} +// Is the provided version lower than the minimum version? +export function isVersionOlder(minimum, version) { + if (version.major < minimum.major) { + return true; + } + else if (version.major == minimum.major && version.minor < minimum.minor) { + return true; + } + else if (version.major == minimum.major && version.minor == minimum.minor && version.patch < minimum.patch) { + return true; + } + return false; +} export function removeFromArray(array, element) { return array.filter(e => e !== element); } diff --git a/package.js b/package.js index 96fbf979..39f753b2 100644 --- a/package.js +++ b/package.js @@ -5,6 +5,7 @@ const path = require('path'); const AdmZip = require('adm-zip'); function buildChromeExtension(zip) { + console.log('Building ./extension-chrome.zip'); // try { fs.unlinkSync('./dist/filter.js'); } catch {}; // Remove filter.js as its only used for testing zip.deleteFile('filter.js'); // Remove filter.js as its only used for testing zip.writeZip('./extension-chrome.zip'); @@ -12,6 +13,7 @@ function buildChromeExtension(zip) { // Firefox Extension function buildFirefox(manifest, zip) { + console.log('Building ./extension-firefox.zip'); let firefoxManifest = { "applications": { "gecko": { diff --git a/src/eventPage.ts b/src/eventPage.ts index 641463d9..5168b26b 100644 --- a/src/eventPage.ts +++ b/src/eventPage.ts @@ -1,7 +1,13 @@ -import { arrayContains } from './helper.js'; +import { arrayContains, getVersion, isVersionOlder } from './helper.js'; import Config from './config.js'; import Domain from './domain.js'; +interface Version { + major: number, + minor: number, + patch: number +} + //// // Actions and messaging @@ -17,7 +23,7 @@ chrome.runtime.onInstalled.addListener(function(details){ // chrome.runtime.openOptionsPage(); // Run any data migrations on update - updateMigrations(); + updateMigrations(details.previousVersion); // Display update notification chrome.notifications.create('extensionUpdate', { @@ -89,33 +95,44 @@ async function toggleDomain(domain: string, key: string) { Domain.domainMatch(domain, cfg[key]) ? enableDomain(cfg, domain, key) : disableDomain(cfg, domain, key); } -async function updateMigrations() { - // [1.0.16] - Downcase and trim each word in the list (NOTE: This MAY result in losing some words) - let cfg = await Config.build(); - cfg.sanitizeWords(); - cfg.save(); - - // // [1.0.13] - updateRemoveWordsFromStorage - transition from previous words structure under the hood - // Note: Not async function - // chrome.storage.sync.get({'words': null}, function(oldWords) { - // // console.log('Old words for migration:', oldWords.words); - // if (oldWords.words) { - // chrome.storage.sync.set({'_words0': oldWords.words}, function() { - // if (!chrome.runtime.lastError) { - // chrome.storage.sync.remove('words', function() { - // // Split words if necessary - // var wordsPromise = new Promise(function(resolve, reject) { - // resolve(Config.build()); - // }); - // wordsPromise - // .then(function(response: Config) { - // response.save(); - // }); - // }); - // } - // }); - // } - // }); +// This will look at the version (from before the update) and perform data migrations if necessary +// Only append so the order stays the same (oldest first). +async function updateMigrations(previousVersion) { + let old = getVersion(previousVersion) as Version; + // let current = chrome.runtime.getManifest().version + + // [1.0.13] - updateRemoveWordsFromStorage - transition from previous words structure under the hood + if (isVersionOlder(getVersion('1.0.13'), old)) { + console.log('not in herer'); + // Note: using promise instead of async/await + chrome.storage.sync.get({'words': null}, function(oldWords) { + // console.log('Old words for migration:', oldWords.words); + if (oldWords.words) { + chrome.storage.sync.set({'_words0': oldWords.words}, function() { + if (!chrome.runtime.lastError) { + chrome.storage.sync.remove('words', function() { + // Split words if necessary + var wordsPromise = new Promise(function(resolve, reject) { + resolve(Config.build()); + }); + wordsPromise + .then(function(response: Config) { + response.save(); + }); + }); + } + }); + } + }); + } + + // [1.1.0] - Downcase and trim each word in the list (NOTE: This MAY result in losing some words) + if (isVersionOlder(getVersion('1.1.0'), old)) { + console.log('in version update'); + let cfg = await Config.build(); + cfg.sanitizeWords(); + cfg.save(); + } } //// diff --git a/src/helper.ts b/src/helper.ts index 4b583439..5d7b42b5 100644 --- a/src/helper.ts +++ b/src/helper.ts @@ -1,3 +1,9 @@ +interface Version { + major: number, + minor: number, + patch: number +} + export function arrayContains(array: string[], element: string) { return (array.indexOf(element) > -1); } @@ -14,6 +20,29 @@ export function dynamicList(list, selectEm, title?: string) { document.getElementById(selectEm).innerHTML = options; } +// /^\d+\.\d+\.\d+$/ +export function getVersion(version: string): Version { + let versionValues = version.split('.'); + return { + major: parseInt(versionValues[0]), + minor: parseInt(versionValues[1]), + patch: parseInt(versionValues[2]) + }; +} + +// Is the provided version lower than the minimum version? +export function isVersionOlder(minimum: Version, version: Version): boolean { + if (version.major < minimum.major) { + return true; + } else if (version.major == minimum.major && version.minor < minimum.minor) { + return true; + } else if (version.major == minimum.major && version.minor == minimum.minor && version.patch < minimum.patch) { + return true; + } + + return false; +} + export function removeFromArray(array: string[], element: string) { return array.filter(e => e !== element); -} +} \ No newline at end of file diff --git a/test/helper.spec.js b/test/helper.spec.js index 8441f481..fd7df228 100644 --- a/test/helper.spec.js +++ b/test/helper.spec.js @@ -1,5 +1,5 @@ const expect = require('chai').expect; -import { arrayContains, dynamicContains, removeFromArray } from '../dist/helper'; +import { arrayContains, dynamicContains, getVersion, isVersionOlder, removeFromArray } from '../dist/helper'; const array = ['a', 'needle', 'in', 'a', 'large', 'haystack']; @@ -30,4 +30,46 @@ describe('Helper', function() { expect(removeFromArray(array, 'pin')).to.eql(array); }); }); + + describe('isVersionOlder()', function() { + it('should return true when provided version is older than minimum', function() { + let minimum = getVersion('1.2.15'); + let version = getVersion('1.1.10'); + expect(isVersionOlder(minimum, version)).to.equal(true); + + minimum = getVersion('1.2.15'); + version = getVersion('1.1.0'); + expect(isVersionOlder(minimum, version)).to.equal(true); + + minimum = getVersion('4.6.15'); + version = getVersion('1.4.0'); + expect(isVersionOlder(minimum, version)).to.equal(true); + + minimum = getVersion('2.3.10'); + version = getVersion('1.5.15'); + expect(isVersionOlder(minimum, version)).to.equal(true); + }); + + it('should return false when provided version is not older than minimum', function() { + let minimum = getVersion('1.2.15'); + let version = getVersion('1.5.10'); + expect(isVersionOlder(minimum, version)).to.equal(false); + + minimum = getVersion('1.0.15'); + version = getVersion('1.1.0'); + expect(isVersionOlder(minimum, version)).to.equal(false); + + minimum = getVersion('1.0.13'); + version = getVersion('1.0.15'); + expect(isVersionOlder(minimum, version)).to.equal(false); + + minimum = getVersion('1.0.13'); + version = getVersion('3.2.15'); + expect(isVersionOlder(minimum, version)).to.equal(false); + + minimum = getVersion('1.2.12'); + version = getVersion('1.3.0'); + expect(isVersionOlder(minimum, version)).to.equal(false); + }); + }); }); \ No newline at end of file