mirror of
https://github.com/element-hq/element-web
synced 2024-11-26 11:15:53 +03:00
82 lines
2 KiB
JavaScript
82 lines
2 KiB
JavaScript
|
#!/usr/bin/env node
|
||
|
|
||
|
// copies the resources into the webapp directory.
|
||
|
//
|
||
|
|
||
|
// cpx includes globbed parts of the filename in the destination, but excludes
|
||
|
// common parents. Hence, "res/{a,b}/**": the output will be "dest/a/..." and
|
||
|
// "dest/b/...".
|
||
|
const COPY_LIST = [
|
||
|
["res/{media,vector-icons}/**", "webapp"],
|
||
|
["src/skins/vector/{fonts,img}/**", "webapp"],
|
||
|
["node_modules/emojione/assets/svg/*", "webapp/emojione/svg/"],
|
||
|
["./config.json", "webapp", {directwatch: 1}],
|
||
|
];
|
||
|
|
||
|
const parseArgs = require('minimist');
|
||
|
const Cpx = require('cpx');
|
||
|
const chokidar = require('chokidar');
|
||
|
|
||
|
const argv = parseArgs(
|
||
|
process.argv.slice(2), {}
|
||
|
);
|
||
|
|
||
|
var watch = argv.w;
|
||
|
var verbose = argv.v;
|
||
|
|
||
|
function errCheck(err) {
|
||
|
if (err) {
|
||
|
console.error(err.message);
|
||
|
process.exit(1);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function next(i, err) {
|
||
|
errCheck(err);
|
||
|
|
||
|
if (i >= COPY_LIST.length) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
const ent = COPY_LIST[i];
|
||
|
const source = ent[0];
|
||
|
const dest = ent[1];
|
||
|
const opts = ent[2] || {};
|
||
|
|
||
|
const cpx = new Cpx.Cpx(source, dest);
|
||
|
|
||
|
if (verbose) {
|
||
|
cpx.on("copy", (event) => {
|
||
|
console.log(`Copied: ${event.srcPath} --> ${event.dstPath}`);
|
||
|
});
|
||
|
cpx.on("remove", (event) => {
|
||
|
console.log(`Removed: ${event.path}`);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
const cb = (err) => {next(i+1, err)};
|
||
|
|
||
|
if (watch) {
|
||
|
if (opts.directwatch) {
|
||
|
// cpx -w creates a watcher for the parent of any files specified,
|
||
|
// which in the case of config.json is '.', which inevitably takes
|
||
|
// ages to crawl. So we create our own watcher on the files
|
||
|
// instead.
|
||
|
const copy = () => {cpx.copy(errCheck)};
|
||
|
chokidar.watch(source)
|
||
|
.on('add', copy)
|
||
|
.on('change', copy)
|
||
|
.on('ready', cb)
|
||
|
.on('error', errCheck);
|
||
|
} else {
|
||
|
cpx.on('watch-ready', cb);
|
||
|
cpx.on("watch-error", cb);
|
||
|
cpx.watch();
|
||
|
}
|
||
|
} else {
|
||
|
cpx.copy(cb);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
next(0);
|