mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
3f577700c6
This is a refactor to replace the `isBeta` boolean with `buildType` throughout the build system. This will allow us to modify the behaviour of each step of the build process for Flask as well. This should result in no functional changes.
126 lines
3.6 KiB
JavaScript
126 lines
3.6 KiB
JavaScript
const { promises: fs } = require('fs');
|
|
const path = require('path');
|
|
const { merge, cloneDeep } = require('lodash');
|
|
|
|
const baseManifest = require('../../app/manifest/_base.json');
|
|
const { version } = require('../../package.json');
|
|
const betaManifestModifications = require('../../app/manifest/_beta_modifications.json');
|
|
|
|
const { createTask, composeSeries } = require('./task');
|
|
const { BuildTypes } = require('./utils');
|
|
|
|
module.exports = createManifestTasks;
|
|
|
|
function createManifestTasks({ betaVersionsMap, browserPlatforms, buildType }) {
|
|
// merge base manifest with per-platform manifests
|
|
const prepPlatforms = async () => {
|
|
return Promise.all(
|
|
browserPlatforms.map(async (platform) => {
|
|
const platformModifications = await readJson(
|
|
path.join(
|
|
__dirname,
|
|
'..',
|
|
'..',
|
|
'app',
|
|
'manifest',
|
|
`${platform}.json`,
|
|
),
|
|
);
|
|
const result = merge(
|
|
cloneDeep(baseManifest),
|
|
platformModifications,
|
|
buildType === BuildTypes.beta
|
|
? getBetaModifications(platform, betaVersionsMap)
|
|
: { version },
|
|
);
|
|
const dir = path.join('.', 'dist', platform);
|
|
await fs.mkdir(dir, { recursive: true });
|
|
await writeJson(result, path.join(dir, 'manifest.json'));
|
|
}),
|
|
);
|
|
};
|
|
|
|
// dev: add perms
|
|
const envDev = createTaskForModifyManifestForEnvironment((manifest) => {
|
|
manifest.permissions = [...manifest.permissions, 'webRequestBlocking'];
|
|
});
|
|
|
|
// testDev: add perms
|
|
const envTestDev = createTaskForModifyManifestForEnvironment((manifest) => {
|
|
manifest.permissions = [
|
|
...manifest.permissions,
|
|
'webRequestBlocking',
|
|
'http://localhost/*',
|
|
];
|
|
});
|
|
|
|
// test: add permissions
|
|
const envTest = createTaskForModifyManifestForEnvironment((manifest) => {
|
|
manifest.permissions = [
|
|
...manifest.permissions,
|
|
'webRequestBlocking',
|
|
'http://localhost/*',
|
|
];
|
|
});
|
|
|
|
// high level manifest tasks
|
|
const dev = createTask('manifest:dev', composeSeries(prepPlatforms, envDev));
|
|
|
|
const testDev = createTask(
|
|
'manifest:testDev',
|
|
composeSeries(prepPlatforms, envTestDev),
|
|
);
|
|
|
|
const test = createTask(
|
|
'manifest:test',
|
|
composeSeries(prepPlatforms, envTest),
|
|
);
|
|
|
|
const prod = createTask('manifest:prod', prepPlatforms);
|
|
|
|
return { prod, dev, testDev, test };
|
|
|
|
// helper for modifying each platform's manifest.json in place
|
|
function createTaskForModifyManifestForEnvironment(transformFn) {
|
|
return () => {
|
|
return Promise.all(
|
|
browserPlatforms.map(async (platform) => {
|
|
const manifestPath = path.join(
|
|
'.',
|
|
'dist',
|
|
platform,
|
|
'manifest.json',
|
|
);
|
|
const manifest = await readJson(manifestPath);
|
|
transformFn(manifest);
|
|
await writeJson(manifest, manifestPath);
|
|
}),
|
|
);
|
|
};
|
|
}
|
|
}
|
|
|
|
// helper for reading and deserializing json from fs
|
|
async function readJson(file) {
|
|
return JSON.parse(await fs.readFile(file, 'utf8'));
|
|
}
|
|
|
|
// helper for serializing and writing json to fs
|
|
async function writeJson(obj, file) {
|
|
return fs.writeFile(file, JSON.stringify(obj, null, 2));
|
|
}
|
|
|
|
function getBetaModifications(platform, betaVersionsMap) {
|
|
if (!betaVersionsMap || typeof betaVersionsMap !== 'object') {
|
|
throw new Error('MetaMask build: Expected object beta versions map.');
|
|
}
|
|
|
|
const betaVersion = betaVersionsMap[platform];
|
|
|
|
return {
|
|
...betaManifestModifications,
|
|
version: betaVersion,
|
|
...(platform === 'firefox' ? {} : { version_name: 'beta' }),
|
|
};
|
|
}
|