mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-26 20:39:08 +01:00
f5d4ab1cc1
We were including the polyfill for the `Intl.RelativeTimeFormat` API, but we weren't including any locale data. This polyfill doesn't work without the locale data for whichever locale you're formatting. The data for all locales we support is now included. The locale data is loaded from disk as-needed (during app startup, and upon each change in locale).
116 lines
2.7 KiB
JavaScript
116 lines
2.7 KiB
JavaScript
const fs = require('fs-extra')
|
|
const path = require('path')
|
|
const watch = require('gulp-watch')
|
|
const glob = require('fast-glob')
|
|
|
|
const locales = require('../../app/_locales/index.json')
|
|
|
|
const { createTask, composeSeries } = require('./task')
|
|
|
|
module.exports = createStaticAssetTasks
|
|
|
|
|
|
const copyTargets = [
|
|
{
|
|
src: `./app/_locales/`,
|
|
dest: `_locales`,
|
|
},
|
|
{
|
|
src: `./app/images/`,
|
|
dest: `images`,
|
|
},
|
|
{
|
|
src: `./node_modules/eth-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: `./ui/app/css/output/`,
|
|
pattern: `*.css`,
|
|
dest: ``,
|
|
},
|
|
{
|
|
src: `./app/`,
|
|
pattern: `*.html`,
|
|
dest: ``,
|
|
},
|
|
]
|
|
|
|
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) {
|
|
copyTargets.push({
|
|
src: `./node_modules/@formatjs/intl-relativetimeformat/dist/locale-data/${tag}.json`,
|
|
dest: `intl/${tag}/relative-time-format-data.json`,
|
|
})
|
|
}
|
|
|
|
const copyTargetsDev = [
|
|
...copyTargets,
|
|
{
|
|
src: './app/scripts/',
|
|
pattern: '/chromereload.js',
|
|
dest: ``,
|
|
},
|
|
]
|
|
|
|
function createStaticAssetTasks ({ livereload, browserPlatforms }) {
|
|
|
|
const prod = createTask('static:prod', composeSeries(...copyTargets.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}`)
|
|
}))
|
|
}
|
|
|
|
}
|