mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-17 08:05:19 +00:00
82 lines
2.0 KiB
JavaScript
82 lines
2.0 KiB
JavaScript
var _ = require('lodash');
|
|
var util = require('util');
|
|
var path = require('path');
|
|
var fs = require('fs');
|
|
var mkdirp = require('mkdirp');
|
|
|
|
var Promise = require('../utils/promise');
|
|
var BaseFS = require('./');
|
|
|
|
function NodeFS() {
|
|
BaseFS.call(this);
|
|
}
|
|
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;
|
|
};
|
|
|
|
// Read a file and returns a promise with the content as a buffer
|
|
NodeFS.prototype.read = function(filename) {
|
|
return Promise.nfcall(fs.readFile, filename);
|
|
};
|
|
|
|
// Write a file and returns a promise
|
|
NodeFS.prototype.write = function(filename, buffer) {
|
|
var folder = path.dirname(filename);
|
|
return Promise()
|
|
.then(function() {
|
|
if (!folder) return;
|
|
return Promise.nfcall(mkdirp, folder);
|
|
})
|
|
.then(function() {
|
|
return Promise.nfcall(fs.writeFile, filename, buffer);
|
|
});
|
|
};
|
|
|
|
// List files in a directory
|
|
NodeFS.prototype.readdir = function(folder) {
|
|
return Promise.nfcall(fs.readdir, folder)
|
|
.then(function(files) {
|
|
return _.chain(files)
|
|
.map(function(file) {
|
|
if (file == '.' || file == '..') return;
|
|
|
|
var stat = fs.statSync(path.join(folder, file));
|
|
if (stat.isDirectory()) file = file + path.sep;
|
|
return file;
|
|
})
|
|
.compact()
|
|
.value();
|
|
});
|
|
};
|
|
|
|
// Load a JSON/JS file
|
|
NodeFS.prototype.loadAsObject = function(filename) {
|
|
return Promise()
|
|
.then(function() {
|
|
var jsFile;
|
|
|
|
try {
|
|
jsFile = require.resolve(filename);
|
|
|
|
// Invalidate node.js cache for livreloading
|
|
delete require.cache[jsFile];
|
|
|
|
return require(jsFile);
|
|
}
|
|
catch(err) {
|
|
return Promise.reject(err);
|
|
}
|
|
});
|
|
};
|
|
|
|
module.exports = NodeFS;
|