summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/backbone/page.js5
-rw-r--r--lib/fs/node.js21
-rw-r--r--lib/output.js32
-rw-r--r--lib/utils/fs.js66
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
+};