mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-23 02:10:12 +01:00
e3420a4262
There is a SES bug that results in errors being printed to the console as `{}`[1]. The known workaround is to print the error stack rather than printing the error directly. This affects our build script when it is run with LavaMoat. We used this workaround in one place in the build script already, but not in the handler for task errors. We now use it in both places. The workaround has been moved to a function that we can use throughout the build script. [1]: https://github.com/endojs/endo/issues/944
72 lines
2.5 KiB
JavaScript
72 lines
2.5 KiB
JavaScript
const semver = require('semver');
|
|
const { BuildType } = require('../lib/build-type');
|
|
|
|
/**
|
|
* Map the current version to a format that is compatible with each browser.
|
|
*
|
|
* The given version number is assumed to be a SemVer version number. Additionally, if the version
|
|
* has a prerelease component, it is assumed to have the format "<build type>.<build version",
|
|
* where the build version is a positive integer.
|
|
*
|
|
* @param {string[]} platforms - A list of browsers to generate versions for.
|
|
* @param {string} version - The current version.
|
|
* @returns {object} An object with the browser as the key and the browser-specific version object
|
|
* as the value. For example, the version `9.6.0-beta.1` would return the object
|
|
* `{ firefox: { version: '9.6.0.beta1' }, chrome: { version: '9.6.0.1', version_name: '9.6.0-beta.1' } }`.
|
|
*/
|
|
function getBrowserVersionMap(platforms, version) {
|
|
const major = semver.major(version);
|
|
const minor = semver.minor(version);
|
|
const patch = semver.patch(version);
|
|
const prerelease = semver.prerelease(version);
|
|
|
|
let buildType;
|
|
let buildVersion;
|
|
if (prerelease) {
|
|
if (prerelease.length !== 2) {
|
|
throw new Error(`Invalid prerelease version: '${prerelease.join('.')}'`);
|
|
}
|
|
[buildType, buildVersion] = prerelease;
|
|
if (!String(buildVersion).match(/^\d+$/u)) {
|
|
throw new Error(`Invalid prerelease build version: '${buildVersion}'`);
|
|
} else if (![BuildType.beta, BuildType.flask].includes(buildType)) {
|
|
throw new Error(`Invalid prerelease build type: ${buildType}`);
|
|
}
|
|
}
|
|
|
|
return platforms.reduce((platformMap, platform) => {
|
|
const versionParts = [major, minor, patch];
|
|
const browserSpecificVersion = {};
|
|
if (prerelease) {
|
|
if (platform === 'firefox') {
|
|
versionParts[2] = `${versionParts[2]}${buildType}${buildVersion}`;
|
|
} else {
|
|
versionParts.push(buildVersion);
|
|
browserSpecificVersion.version_name = version;
|
|
}
|
|
}
|
|
browserSpecificVersion.version = versionParts.join('.');
|
|
platformMap[platform] = browserSpecificVersion;
|
|
return platformMap;
|
|
}, {});
|
|
}
|
|
|
|
/**
|
|
* Log an error to the console.
|
|
*
|
|
* This function includes a workaround for a SES bug that results in errors
|
|
* being printed to the console as `{}`. The workaround is to print the stack
|
|
* instead, which does work correctly.
|
|
*
|
|
* @see {@link https://github.com/endojs/endo/issues/944}
|
|
* @param {Error} error - The error to print
|
|
*/
|
|
function logError(error) {
|
|
console.error(error.stack || error);
|
|
}
|
|
|
|
module.exports = {
|
|
getBrowserVersionMap,
|
|
logError,
|
|
};
|