[NEW] FileExt: exists, isFile, isDirectory, etc.

This commit is contained in:
Sami Samhuri 2010-11-21 20:05:49 -08:00
parent 2793046b7f
commit 9f2533e22f

View file

@ -1,7 +1,9 @@
var fs = require('fs')
var constants = require('constants')
, fs = require('fs')
, ArrayExt = require('./array-ext').ArrayExt
, LineEmitter = require('./line-emitter').LineEmitter
, ext = require('./ext')
, ENOENT = constants.ENOENT
;
exports.extend = function(obj) {
@ -24,6 +26,16 @@ var FileExt = exports.FileExt = {
le.on('end', function() { options.end(); });
}
, exists: function(f) {
try {
fs.statSync(f)
return true
} catch (e) {
if (e.errno === ENOENT) return false
throw e
}
}
, grep: function(regex, f, callback) {
if (!callback) throw new Error('grep requires a callback');
var results = [];
@ -34,6 +46,11 @@ var FileExt = exports.FileExt = {
}
, home: function(user, callback) {
// user is optional so the first param may be a callback
if (typeof user === 'function') {
callback = user;
user = null;
}
if (user && callback && user !== process.env['USER']) {
FileExt.grep(new RegExp('^' + user + ':'), '/etc/passwd', function(line) {
callback(line && line.split(':')[4]);
@ -55,3 +72,19 @@ var FileExt = exports.FileExt = {
}
};
// isDirectory, isFile, isSymbolicLink, etc.
var s = fs.statSync(__dirname);
Object.keys(Object.getPrototypeOf(s)).forEach(function(k) {
if (k.match(/^is/) && typeof s[k] === 'function') {
FileExt[k] = function(f, cb) {
if (cb) {
fs.stat(f, function(err, stat) {
cb(err, err ? null : stat[k]());
});
} else {
return fs.statSync(f)[k]();
}
}
}
});