tix-react-ssr
Version:
Tiket.com React Project Scripts
96 lines (78 loc) • 2.35 kB
JavaScript
const fs = require('fs');
const path = require('path');
const glob = require('glob');
const mkDirP = require('mkdirp');
const rimRaf = require('rimraf');
const readFile = file => new Promise((resolve, reject) => {
fs.readFile(file, 'utf8', (err, data) => (err ? reject(err) : resolve(data)));
});
const writeFile = (file, contents) => new Promise((resolve, reject) => {
fs.writeFile(file, contents, 'utf8', err => (err ? reject(err) : resolve()));
});
const renameFile = (source, target) => new Promise((resolve, reject) => {
fs.rename(source, target, err => (err ? reject(err) : resolve()));
});
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 readDir = (pattern, options) => new Promise((resolve, reject) =>
glob(pattern, options, (err, result) => (err ? reject(err) : resolve(result))),
);
const makeDir = name => new Promise((resolve, reject) => {
mkDirP(name, err => (err ? reject(err) : resolve()));
});
const moveDir = 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);
await makeDir(path.dirname(to));
await renameFile(from, to);
}));
};
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);
await makeDir(path.dirname(to));
await copyFile(from, to);
}));
};
const cleanDir = (pattern, options) => new Promise((resolve, reject) =>
rimRaf(pattern, { glob: options }, (err, result) => (err ? reject(err) : resolve(result))),
);
module.exports = {
makeDir,
cleanDir,
copyDir,
moveDir,
copyFile,
writeFile,
renameFile,
readFile
};