@funded-labs/plug-controller
Version:
Internet Computer Plug wallet's controller
90 lines (89 loc) • 3.06 kB
JavaScript
;
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;