mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
345ed9f6f2
The build type (i.e. the distribution) is now included in the Sentry environment during setup, for all builds except the "main" build. This will allow us to track Flask and beta errors separately from other errors. A constant was created for the build types. The equivalent constant in our build scripts was updated to match it more closely, for consistency. We can't use the same constant in both places because our shared constants are in modules that use ES6 exports, and our build script does not yet support ES6 exports. The singular `BuildType` was used rather than `BuildTypes` to match our naming conventions elsewhere for enums. We name them like classes or types, rather than like a collection. Relates to #11896
220 lines
5.1 KiB
JavaScript
220 lines
5.1 KiB
JavaScript
const path = require('path');
|
|
const fs = require('fs-extra');
|
|
const watch = require('gulp-watch');
|
|
const glob = require('fast-glob');
|
|
|
|
const locales = require('../../app/_locales/index.json');
|
|
|
|
const { createTask, composeSeries } = require('./task');
|
|
const { BuildType } = require('./utils');
|
|
|
|
const EMPTY_JS_FILE = './development/empty.js';
|
|
|
|
module.exports = function createStaticAssetTasks({
|
|
livereload,
|
|
browserPlatforms,
|
|
shouldIncludeLockdown = true,
|
|
buildType,
|
|
}) {
|
|
const [copyTargetsProd, copyTargetsDev] = getCopyTargets(
|
|
shouldIncludeLockdown,
|
|
);
|
|
|
|
const additionalBuildTargets = {
|
|
[BuildType.beta]: [
|
|
{
|
|
src: './app/build-types/beta/',
|
|
dest: `images`,
|
|
},
|
|
],
|
|
};
|
|
|
|
if (Object.keys(additionalBuildTargets).includes(buildType)) {
|
|
copyTargetsProd.push(...additionalBuildTargets[buildType]);
|
|
copyTargetsDev.push(...additionalBuildTargets[buildType]);
|
|
}
|
|
|
|
const prod = createTask(
|
|
'static:prod',
|
|
composeSeries(
|
|
...copyTargetsProd.map((target) => {
|
|
return async function copyStaticAssets() {
|
|
await performCopy(target);
|
|
};
|
|
}),
|
|
),
|
|
);
|
|
const dev = createTask(
|
|
'static:dev',
|
|
composeSeries(
|
|
...copyTargetsDev.map((target) => {
|
|
return async function copyStaticAssets() {
|
|
await setupLiveCopy(target);
|
|
};
|
|
}),
|
|
),
|
|
);
|
|
|
|
return { dev, prod };
|
|
|
|
async function setupLiveCopy(target) {
|
|
const pattern = target.pattern || '/**/*';
|
|
watch(target.src + pattern, (event) => {
|
|
livereload.changed(event.path);
|
|
performCopy(target);
|
|
});
|
|
await performCopy(target);
|
|
}
|
|
|
|
async function performCopy(target) {
|
|
await Promise.all(
|
|
browserPlatforms.map(async (platform) => {
|
|
if (target.pattern) {
|
|
await copyGlob(
|
|
target.src,
|
|
`${target.src}${target.pattern}`,
|
|
`./dist/${platform}/${target.dest}`,
|
|
);
|
|
} else {
|
|
await copyGlob(
|
|
target.src,
|
|
`${target.src}`,
|
|
`./dist/${platform}/${target.dest}`,
|
|
);
|
|
}
|
|
}),
|
|
);
|
|
}
|
|
|
|
async function copyGlob(baseDir, srcGlob, dest) {
|
|
const sources = await glob(srcGlob, { onlyFiles: false });
|
|
await Promise.all(
|
|
sources.map(async (src) => {
|
|
const relativePath = path.relative(baseDir, src);
|
|
await fs.copy(src, `${dest}${relativePath}`);
|
|
}),
|
|
);
|
|
}
|
|
};
|
|
|
|
function getCopyTargets(shouldIncludeLockdown) {
|
|
const allCopyTargets = [
|
|
{
|
|
src: `./app/_locales/`,
|
|
dest: `_locales`,
|
|
},
|
|
{
|
|
src: `./app/images/`,
|
|
dest: `images`,
|
|
},
|
|
{
|
|
src: `./node_modules/@metamask/contract-metadata/images/`,
|
|
dest: `images/contract`,
|
|
},
|
|
{
|
|
src: `./app/fonts/`,
|
|
dest: `fonts`,
|
|
},
|
|
{
|
|
src: `./app/vendor/`,
|
|
dest: `vendor`,
|
|
},
|
|
{
|
|
src: `./node_modules/@fortawesome/fontawesome-free/webfonts/`,
|
|
dest: `fonts/fontawesome`,
|
|
},
|
|
{
|
|
src: `./node_modules/react-responsive-carousel/lib/styles`,
|
|
dest: 'react-gallery/',
|
|
},
|
|
{
|
|
src: `./ui/css/output/`,
|
|
pattern: `*.css`,
|
|
dest: ``,
|
|
},
|
|
{
|
|
src: `./app/loading.html`,
|
|
dest: `loading.html`,
|
|
},
|
|
{
|
|
src: `./node_modules/globalthis/dist/browser.js`,
|
|
dest: `globalthis.js`,
|
|
},
|
|
{
|
|
src: shouldIncludeLockdown
|
|
? `./node_modules/ses/dist/lockdown.umd.min.js`
|
|
: EMPTY_JS_FILE,
|
|
dest: `lockdown-install.js`,
|
|
},
|
|
{
|
|
src: shouldIncludeLockdown
|
|
? `./app/scripts/lockdown-run.js`
|
|
: EMPTY_JS_FILE,
|
|
dest: `lockdown-run.js`,
|
|
},
|
|
{
|
|
src: shouldIncludeLockdown
|
|
? `./app/scripts/lockdown-more.js`
|
|
: EMPTY_JS_FILE,
|
|
dest: `lockdown-more.js`,
|
|
},
|
|
{
|
|
// eslint-disable-next-line node/no-extraneous-require
|
|
src: require.resolve('@lavamoat/lavapack/src/runtime-cjs.js'),
|
|
dest: `runtime-cjs.js`,
|
|
},
|
|
{
|
|
// eslint-disable-next-line node/no-extraneous-require
|
|
src: require.resolve('@lavamoat/lavapack/src/runtime.js'),
|
|
dest: `runtime-lavamoat.js`,
|
|
},
|
|
{
|
|
src: `./app/phishing.html`,
|
|
dest: `phishing.html`,
|
|
},
|
|
];
|
|
|
|
const languageTags = new Set();
|
|
for (const locale of locales) {
|
|
const { code } = locale;
|
|
const tag = code.split('_')[0];
|
|
languageTags.add(tag);
|
|
}
|
|
|
|
for (const tag of languageTags) {
|
|
allCopyTargets.push({
|
|
src: `./node_modules/@formatjs/intl-relativetimeformat/dist/locale-data/${tag}.json`,
|
|
dest: `intl/${tag}/relative-time-format-data.json`,
|
|
});
|
|
}
|
|
|
|
const copyTargetsDev = [
|
|
...allCopyTargets,
|
|
{
|
|
src: './development',
|
|
pattern: '/chromereload.js',
|
|
dest: ``,
|
|
},
|
|
// empty files to suppress missing file errors
|
|
{
|
|
src: EMPTY_JS_FILE,
|
|
dest: `bg-libs.js`,
|
|
},
|
|
{
|
|
src: EMPTY_JS_FILE,
|
|
dest: `ui-libs.js`,
|
|
},
|
|
];
|
|
|
|
const copyTargetsProd = [
|
|
...allCopyTargets,
|
|
// empty files to suppress missing file errors
|
|
{
|
|
src: EMPTY_JS_FILE,
|
|
dest: `chromereload.js`,
|
|
},
|
|
];
|
|
|
|
return [copyTargetsProd, copyTargetsDev];
|
|
}
|