diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/backbone/page.js | 5 | ||||
-rw-r--r-- | lib/fs/node.js | 21 | ||||
-rw-r--r-- | lib/output.js | 32 | ||||
-rw-r--r-- | lib/utils/fs.js | 66 |
4 files changed, 100 insertions, 24 deletions
diff --git a/lib/backbone/page.js b/lib/backbone/page.js index c75c434..94812d9 100644 --- a/lib/backbone/page.js +++ b/lib/backbone/page.js @@ -89,9 +89,10 @@ Page.prototype.parse = function() { .then(that.update); }) - // Render markup + // Render markup using the parser .then(function() { - return that.parser.page(that.content); + return that.parser.page(that.content) + .then(that.update); }); }; diff --git a/lib/fs/node.js b/lib/fs/node.js index f9a885d..330391a 100644 --- a/lib/fs/node.js +++ b/lib/fs/node.js @@ -1,9 +1,8 @@ var _ = require('lodash'); var util = require('util'); var path = require('path'); -var fs = require('graceful-fs'); -var mkdirp = require('mkdirp'); +var fs = require('../utils/fs'); var Promise = require('../utils/promise'); var BaseFS = require('./'); @@ -14,23 +13,17 @@ util.inherits(NodeFS, BaseFS); // Check if a file exists, run a Promise(true) if that's the case, Promise(false) otherwise NodeFS.prototype.exists = function(filename) { - var d = Promise.defer(); - - fs.exists(filename, function(exists) { - d.resolve(exists); - }); - - return d.promise; + return fs.exists(filename); }; // Read a file and returns a promise with the content as a buffer NodeFS.prototype.read = function(filename) { - return Promise.nfcall(fs.readFile, filename); + return fs.readFile(filename); }; // Read stat infos about a file NodeFS.prototype.stat = function(filename) { - return Promise.nfcall(fs.stat, filename); + return fs.stat(filename); }; // Write a file and returns a promise @@ -39,16 +32,16 @@ NodeFS.prototype.write = function(filename, buffer) { return Promise() .then(function() { if (!folder) return; - return Promise.nfcall(mkdirp, folder); + return fs.mkdirp(folder); }) .then(function() { - return Promise.nfcall(fs.writeFile, filename, buffer); + return fs.writeFile(filename, buffer); }); }; // List files in a directory NodeFS.prototype.readdir = function(folder) { - return Promise.nfcall(fs.readdir, folder) + return fs.readdir(folder) .then(function(files) { return _.chain(files) .map(function(file) { diff --git a/lib/output.js b/lib/output.js index 5c28ca1..b787edc 100644 --- a/lib/output.js +++ b/lib/output.js @@ -1,12 +1,11 @@ var _ = require('lodash'); -var fs = require('graceful-fs'); -var mkdirp = require('mkdirp'); var Ignore = require('ignore'); var path = require('path'); var Promise = require('./utils/promise'); var pathUtil = require('./utils/path'); var error = require('./utils/error'); +var fs = require('./utils/fs'); var generators = require('./generators'); var PluginsManager = require('./plugins'); @@ -44,15 +43,32 @@ Output.prototype.resolve = function(filename) { // Write a file/buffer to the output folder Output.prototype.writeFile = function(filename, buf) { - filename = this.resolve(filename); - var folder = path.dirname(filename); + var that = this; - // Ensure fodler exists - return Promise.nfcall(mkdirp, folder) + return Promise() + .then(function() { + filename = that.resolve(filename); + var folder = path.dirname(filename); + + // Ensure fodler exists + return fs.mkdirp(folder); + }) // Write the file .then(function() { - return Promise.nfcall(fs.writeFile, filename, buf); + return fs.writeFile(filename, buf); + }); +}; + +// Copy a file to the output +Output.prototype.copyFile = function(from, to) { + var that = this; + + return Promise() + .then(function() { + to = that.resolve(to); + + return fs.copy(from, to); }); }; @@ -74,7 +90,7 @@ Output.prototype.generate = function() { // Create the output folder .then(function() { - return Promise.nfcall(mkdirp, that.root()); + return fs.mkdirp(that.root()); }) // Initialize the generation 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 +}; |