diff options
author | Samy Pessé <samypesse@gmail.com> | 2016-02-11 13:58:26 +0100 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2016-02-11 13:58:26 +0100 |
commit | f47208528b28dad69391aa2e4eaccb32d11ba69d (patch) | |
tree | b509fc02f4a37b360e649a501dac4f4b21bf9f2c /lib/utils/fs.js | |
parent | 87d90a65ac6d1ceb5c1ce255d71713cff7dc9d17 (diff) | |
download | gitbook-f47208528b28dad69391aa2e4eaccb32d11ba69d.zip gitbook-f47208528b28dad69391aa2e4eaccb32d11ba69d.tar.gz gitbook-f47208528b28dad69391aa2e4eaccb32d11ba69d.tar.bz2 |
Normalize fs access
Diffstat (limited to 'lib/utils/fs.js')
-rw-r--r-- | lib/utils/fs.js | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/lib/utils/fs.js b/lib/utils/fs.js new file mode 100644 index 0000000..2fa6ff9 --- /dev/null +++ b/lib/utils/fs.js @@ -0,0 +1,66 @@ +var fs = require('graceful-fs'); +var mkdirp = require('mkdirp'); +var destroy = require('destroy'); + +var Promise = require('./promise'); + +// Write a stream to a file +function writeStream(filename, st) { + var d = Promise.defer(); + + var wstream = fs.createWriteStream(filename); + var cleanup = function() { + destroy(wstream); + wstream.removeAllListeners(); + }; + + wstream.on('finish', function () { + cleanup(); + d.resolve(); + }); + wstream.on('error', function (err) { + cleanup(); + d.reject(err); + }); + + st.on('error', function(err) { + cleanup(); + d.reject(err); + }); + + st.pipe(wstream); + + return d.promise; +} + +// Copy a file using stream +function copyFile(from, to) { + return Promise() + .then(function() { + return writeStream(to, fs.createReadStream(from)); + }); +} + +// Return a promise resolved with a boolean +function fileExists(filename) { + var d = Promise.defer(); + + fs.exists(filename, function(exists) { + d.resolve(exists); + }); + + return d.promise; +} + + +module.exports = { + exists: fileExists, + mkdirp: Promise.nfbind(mkdirp), + readFile: Promise.nfbind(fs.readFile), + writeFile: Promise.nfbind(fs.writeFile), + stat: Promise.nfbind(fs.stat), + statSync: fs.statSync, + readdir: Promise.nfbind(fs.readdir), + writeStream: writeStream, + copy: copyFile +}; |