UNPKG

@funded-labs/plug-controller

Version:

Internet Computer Plug wallet's controller

90 lines (89 loc) 3.06 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.handleStorageUpdate = exports.checkForError = exports.isEmpty = void 0; const extensionizer_1 = __importDefault(require("extensionizer")); const v0_14_5_1 = __importDefault(require("./update_handlers/v0.14.5")); const v0_16_8_1 = __importDefault(require("./update_handlers/v0.16.8")); const v0_19_3_1 = __importDefault(require("./update_handlers/v0.19.3")); const v0_20_0_1 = __importDefault(require("./update_handlers/v0.20.0")); const v0_21_0_1 = __importDefault(require("./update_handlers/v0.21.0")); const isEmpty = (obj) => Object.keys(obj).length === 0; exports.isEmpty = isEmpty; /** * Returns an Error if extension.runtime.lastError is present * this is a workaround for the non-standard error object that's used * @returns {Error|undefined} */ const checkForError = () => { const { lastError } = extensionizer_1.default.runtime; if (!lastError) { return undefined; } // if it quacks like an Error, its an Error if (lastError.stack && lastError.message) { return lastError; } // repair incomplete error object (eg chromium v77) return new Error(lastError.message); }; exports.checkForError = checkForError; const VERSION_PATH = [ '0.14.1', '0.14.5', '0.16.8', '0.19.3', '0.20.0', '0.21.0', ]; const VERSION_HANDLER = { '0.14.1': (storage) => { return storage; }, '0.14.5': v0_14_5_1.default, '0.16.8': v0_16_8_1.default, '0.19.3': v0_19_3_1.default, '0.20.0': v0_20_0_1.default, '0.21.0': v0_21_0_1.default, }; const compareVersion = (a, b) => { const arrA = a.split('.'); const arrB = b.split('.'); if (arrA.length !== 3 || arrB.length !== 3) throw Error('Storage Hande Update: invalid version'); for (let index = 0; index < 3; index++) { const numbA = parseInt(arrA[index]); const numbB = parseInt(arrB[index]); if (numbA > numbB) return -1; else if (numbA < numbB) return 1; } return 0; }; const getVersionIndex = (version) => { if (!version) return 0; for (let index = 0; index < VERSION_PATH.length; index++) { const comparison = compareVersion(version, VERSION_PATH[index]); if (comparison === 1) return index; if (comparison === 0) return index + 1; } return VERSION_PATH.length; }; const handleStorageUpdate = (storageVersion, storage) => { const index = getVersionIndex(storageVersion); if (index === VERSION_PATH.length) return storage; let newStorage = storage; VERSION_PATH.slice(index).forEach(version => { console.log(`APPLYING STORAGE UPDATE V${version}...`); newStorage = VERSION_HANDLER[version](newStorage); }); return newStorage; }; exports.handleStorageUpdate = handleStorageUpdate;