Skip to content

Commit fa6e6f5

Browse files
committed
[Refactor] cache default isFile functions at module level
1 parent 0f29c93 commit fa6e6f5

File tree

2 files changed

+22
-18
lines changed

2 files changed

+22
-18
lines changed

lib/async.js

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@ var path = require('path');
44
var caller = require('./caller.js');
55
var nodeModulesPaths = require('./node-modules-paths.js');
66

7+
var defaultIsFile = function isFile(file, cb) {
8+
fs.stat(file, function (err, stat) {
9+
if (!err) {
10+
return cb(null, stat.isFile() || stat.isFIFO());
11+
}
12+
if (err.code === 'ENOENT' || err.code === 'ENOTDIR') return cb(null, false);
13+
return cb(err);
14+
});
15+
};
16+
717
module.exports = function resolve(x, options, callback) {
818
var cb = callback;
919
var opts = options || {};
@@ -18,15 +28,7 @@ module.exports = function resolve(x, options, callback) {
1828
});
1929
}
2030

21-
var isFile = opts.isFile || function isFile(file, cb) {
22-
fs.stat(file, function (err, stat) {
23-
if (!err) {
24-
return cb(null, stat.isFile() || stat.isFIFO());
25-
}
26-
if (err.code === 'ENOENT' || err.code === 'ENOTDIR') return cb(null, false);
27-
return cb(err);
28-
});
29-
};
31+
var isFile = opts.isFile || defaultIsFile;
3032
var readFile = opts.readFile || fs.readFile;
3133

3234
var extensions = opts.extensions || ['.js'];

lib/sync.js

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,22 @@ var path = require('path');
44
var caller = require('./caller.js');
55
var nodeModulesPaths = require('./node-modules-paths.js');
66

7+
var defaultIsFile = function isFile(file) {
8+
try {
9+
var stat = fs.statSync(file);
10+
} catch (e) {
11+
if (e && (e.code === 'ENOENT' || e.code === 'ENOTDIR')) return false;
12+
throw e;
13+
}
14+
return stat.isFile() || stat.isFIFO();
15+
};
16+
717
module.exports = function (x, options) {
818
if (typeof x !== 'string') {
919
throw new TypeError('Path must be a string.');
1020
}
1121
var opts = options || {};
12-
var isFile = opts.isFile || function isFile(file) {
13-
try {
14-
var stat = fs.statSync(file);
15-
} catch (e) {
16-
if (e && (e.code === 'ENOENT' || e.code === 'ENOTDIR')) return false;
17-
throw e;
18-
}
19-
return stat.isFile() || stat.isFIFO();
20-
};
22+
var isFile = opts.isFile || defaultIsFile;
2123
var readFileSync = opts.readFileSync || fs.readFileSync;
2224

2325
var extensions = opts.extensions || ['.js'];

0 commit comments

Comments
 (0)