drop.chapril.org-firefoxsend/build/android_index_plugin.js
2018-11-14 21:13:38 -08:00

62 lines
1.7 KiB
JavaScript

const path = require('path');
const html = require('choo/html');
const NAME = 'AndroidIndexPlugin';
function chunkFileNames(compilation) {
const names = {};
for (const chunk of compilation.chunks) {
for (const file of chunk.files) {
if (!/\.map$/.test(file)) {
names[`${chunk.name}${path.extname(file)}`] = file;
}
}
}
return names;
}
class AndroidIndexPlugin {
apply(compiler) {
const assets = {};
compiler.hooks.compilation.tap(NAME, compilation => {
compilation.hooks.moduleAsset.tap(NAME, (mod, file) => {
if (mod.userRequest) {
assets[
path.join(path.dirname(file), path.basename(mod.userRequest))
] = file;
}
});
});
compiler.hooks.emit.tap(NAME, compilation => {
const files = chunkFileNames(compilation);
const page = html`
<html lang="en-US">
<head>
<title>Firefox Send</title>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1"
/>
<link href="${files['app.css']}" rel="stylesheet" />
<script src="${files['vendor.js']}"></script>
<script src="${assets['public/locales/en-US/send.ftl']}"></script>
<script src="${files['android.js']}"></script>
</head>
<body></body>
</html>
`
.toString()
.replace(/\n\s{6}/g, '\n');
compilation.assets['android.html'] = {
source() {
return page;
},
size() {
return page.length;
}
};
});
}
}
module.exports = AndroidIndexPlugin;