UNPKG

tix-react-ssr

Version:

Tiket.com React Project Scripts

96 lines (78 loc) 2.35 kB
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 };