diff --git a/lib/file-ext.js b/lib/file-ext.js index 679f04e..d575fa6 100644 --- a/lib/file-ext.js +++ b/lib/file-ext.js @@ -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](); + } + } + } +});