pixelplanet/scripts/copy.js
2021-01-29 02:17:51 +01:00

99 lines
2.5 KiB
JavaScript

/**
* copies files to build directory
*/
/* eslint-disable import/no-extraneous-dependencies */
import fs from 'fs';
import path from 'path';
import glob from 'glob';
import mkdirp from 'mkdirp';
const builddir = path.resolve(__dirname, '..', 'build');
const deploydir = path.resolve(__dirname, '..', 'deployment');
const publicdir = path.resolve(__dirname, '..', 'public');
const srcdir = path.resolve(__dirname, '..', 'src');
/*
* following functions are copied from
* React Starter Kit (https://www.reactstarterkit.com/)
* Copyright © 2014-present Kriasoft, LLC. All rights reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE.txt file in the root directory of this source tree.
*/
// eslint-disable-next-line max-len
const readDir = (pattern, options) => new Promise((resolve, reject) => glob(pattern, options, (err, result) => (err ? reject(err) : resolve(result))));
const copyFile = (source, target) => new Promise((resolve, reject) => {
let cbCalled = false;
function done(err) {
if (!cbCalled) {
cbCalled = true;
if (err) {
reject(err);
} else {
resolve();
}
}
}
const rd = fs.createReadStream(source);
rd.on('error', (err) => done(err));
const wr = fs.createWriteStream(target);
wr.on('error', (err) => done(err));
wr.on('close', (err) => done(err));
rd.pipe(wr);
});
const copyDir = async (source, target) => {
const dirs = await readDir('**/*.*', {
cwd: source,
nosort: true,
dot: true,
});
await Promise.all(dirs.map(async (dir) => {
const from = path.resolve(source, dir);
const to = path.resolve(target, dir);
mkdirp.sync(path.dirname(to));
await copyFile(from, to);
}));
};
/*
* ----------------------------------------------------------------------------
*/
/**
* Copies static files such as robots.txt, favicon.ico to the
* output (build) folder.
*/
async function copy() {
mkdirp.sync(`${builddir}/public/assets`);
return Promise.all([
copyDir(
`${publicdir}`,
`${builddir}/public`,
),
copyFile(
`${srcdir}/canvases.json`,
`${builddir}/canvases.json`,
),
copyFile(
`${srcdir}/proxies.json`,
`${builddir}/proxies.json`,
),
copyFile(
`${deploydir}/example-ecosystem.yml`,
`${builddir}/ecosystem.example.yml`,
),
copyFile(
`${deploydir}/example-ecosystem-backup.yml`,
`${builddir}/ecosystem-backup.example.yml`,
),
]);
}
export default copy;