ff-stream-web

git clone git://archive.git.mtrnord.blog/MTRNord/ff-stream-web.git
Log | Files | Refs | README | LICENSE

fs.js (2656B)


      1 /**
      2  * React Starter Kit (https://www.reactstarterkit.com/)
      3  *
      4  * Copyright © 2014-present Kriasoft, LLC. All rights reserved.
      5  *
      6  * This source code is licensed under the MIT license found in the
      7  * LICENSE.txt file in the root directory of this source tree.
      8  */
      9 
     10 import fs from 'fs';
     11 import path from 'path';
     12 import glob from 'glob';
     13 import mkdirp from 'mkdirp';
     14 import rimraf from 'rimraf';
     15 
     16 export const readFile = file => new Promise((resolve, reject) => {
     17   fs.readFile(file, 'utf8', (err, data) => (err ? reject(err) : resolve(data)));
     18 });
     19 
     20 export const writeFile = (file, contents) => new Promise((resolve, reject) => {
     21   fs.writeFile(file, contents, 'utf8', err => (err ? reject(err) : resolve()));
     22 });
     23 
     24 export const renameFile = (source, target) => new Promise((resolve, reject) => {
     25   fs.rename(source, target, err => (err ? reject(err) : resolve()));
     26 });
     27 
     28 export const copyFile = (source, target) => new Promise((resolve, reject) => {
     29   let cbCalled = false;
     30   function done(err) {
     31     if (!cbCalled) {
     32       cbCalled = true;
     33       if (err) {
     34         reject(err);
     35       } else {
     36         resolve();
     37       }
     38     }
     39   }
     40 
     41   const rd = fs.createReadStream(source);
     42   rd.on('error', err => done(err));
     43   const wr = fs.createWriteStream(target);
     44   wr.on('error', err => done(err));
     45   wr.on('close', err => done(err));
     46   rd.pipe(wr);
     47 });
     48 
     49 export const readDir = (pattern, options) => new Promise((resolve, reject) =>
     50   glob(pattern, options, (err, result) => (err ? reject(err) : resolve(result))),
     51 );
     52 
     53 export const makeDir = name => new Promise((resolve, reject) => {
     54   mkdirp(name, err => (err ? reject(err) : resolve()));
     55 });
     56 
     57 export const moveDir = async (source, target) => {
     58   const dirs = await readDir('**/*.*', {
     59     cwd: source,
     60     nosort: true,
     61     dot: true,
     62   });
     63   await Promise.all(dirs.map(async (dir) => {
     64     const from = path.resolve(source, dir);
     65     const to = path.resolve(target, dir);
     66     await makeDir(path.dirname(to));
     67     await renameFile(from, to);
     68   }));
     69 };
     70 
     71 export const copyDir = async (source, target) => {
     72   const dirs = await readDir('**/*.*', {
     73     cwd: source,
     74     nosort: true,
     75     dot: true,
     76   });
     77   await Promise.all(dirs.map(async (dir) => {
     78     const from = path.resolve(source, dir);
     79     const to = path.resolve(target, dir);
     80     await makeDir(path.dirname(to));
     81     await copyFile(from, to);
     82   }));
     83 };
     84 
     85 export const cleanDir = (pattern, options) => new Promise((resolve, reject) =>
     86   rimraf(pattern, { glob: options }, (err, result) => (err ? reject(err) : resolve(result))),
     87 );
     88 
     89 export default {
     90   readFile,
     91   writeFile,
     92   renameFile,
     93   copyFile,
     94   readDir,
     95   makeDir,
     96   copyDir,
     97   moveDir,
     98   cleanDir,
     99 };