diff options
author | Florian Dold <florian.dold@gmail.com> | 2017-05-28 00:38:50 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2017-05-28 00:40:43 +0200 |
commit | 7fff4499fd915bcea3fa93b1aa8b35f4fe7a6027 (patch) | |
tree | 6de9a1aebd150a23b7f8c273ec657a5d0a18fe3e /node_modules/resolve/lib/async.js | |
parent | 963b7a41feb29cc4be090a2446bdfe0c1f1bcd81 (diff) |
add linting (and some initial fixes)
Diffstat (limited to 'node_modules/resolve/lib/async.js')
-rw-r--r-- | node_modules/resolve/lib/async.js | 203 |
1 files changed, 107 insertions, 96 deletions
diff --git a/node_modules/resolve/lib/async.js b/node_modules/resolve/lib/async.js index 0f0eeca56..ef1bde782 100644 --- a/node_modules/resolve/lib/async.js +++ b/node_modules/resolve/lib/async.js @@ -3,78 +3,90 @@ var fs = require('fs'); var path = require('path'); var caller = require('./caller.js'); var nodeModulesPaths = require('./node-modules-paths.js'); -var splitRe = process.platform === 'win32' ? /[\/\\]/ : /\//; -module.exports = function resolve (x, opts, cb) { +module.exports = function resolve(x, options, callback) { + var cb = callback; + var opts = options || {}; if (typeof opts === 'function') { cb = opts; opts = {}; } - if (!opts) opts = {}; if (typeof x !== 'string') { + var err = new TypeError('Path must be a string.'); return process.nextTick(function () { - cb(new Error('path must be a string')); + cb(err); }); } - + var isFile = opts.isFile || function (file, cb) { fs.stat(file, function (err, stat) { - if (err && err.code === 'ENOENT') cb(null, false) - else if (err) cb(err) - else cb(null, stat.isFile() || stat.isFIFO()) + if (!err) { + return cb(null, stat.isFile() || stat.isFIFO()); + } + if (err.code === 'ENOENT' || err.code === 'ENOTDIR') return cb(null, false); + return cb(err); }); }; var readFile = opts.readFile || fs.readFile; - - var extensions = opts.extensions || [ '.js' ]; + + var extensions = opts.extensions || ['.js']; var y = opts.basedir || path.dirname(caller()); - + opts.paths = opts.paths || []; - - if (/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[\\\/])/.test(x)) { + + if (/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[/\\])/.test(x)) { var res = path.resolve(y, x); - if (x === '..') res += '/'; + if (x === '..' || x.slice(-1) === '/') res += '/'; if (/\/$/.test(x) && res === y) { loadAsDirectory(res, opts.package, onfile); - } - else loadAsFile(res, opts.package, onfile); - } - else loadNodeModules(x, y, function (err, n, pkg) { - if (err) cb(err) - else if (n) cb(null, n, pkg) + } else loadAsFile(res, opts.package, onfile); + } else loadNodeModules(x, y, function (err, n, pkg) { + if (err) cb(err); + else if (n) cb(null, n, pkg); else if (core[x]) return cb(null, x); - else cb(new Error("Cannot find module '" + x + "' from '" + y + "'")) + else { + var moduleError = new Error("Cannot find module '" + x + "' from '" + y + "'"); + moduleError.code = 'MODULE_NOT_FOUND'; + cb(moduleError); + } }); - - function onfile (err, m, pkg) { - if (err) cb(err) - else if (m) cb(null, m, pkg) + + function onfile(err, m, pkg) { + if (err) cb(err); + else if (m) cb(null, m, pkg); else loadAsDirectory(res, function (err, d, pkg) { - if (err) cb(err) - else if (d) cb(null, d, pkg) - else cb(new Error("Cannot find module '" + x + "' from '" + y + "'")) - }) + if (err) cb(err); + else if (d) cb(null, d, pkg); + else { + var moduleError = new Error("Cannot find module '" + x + "' from '" + y + "'"); + moduleError.code = 'MODULE_NOT_FOUND'; + cb(moduleError); + } + }); } - - function loadAsFile (x, pkg, cb) { - if (typeof pkg === 'function') { - cb = pkg; - pkg = undefined; + + function loadAsFile(x, thePackage, callback) { + var loadAsFilePackage = thePackage; + var cb = callback; + if (typeof loadAsFilePackage === 'function') { + cb = loadAsFilePackage; + loadAsFilePackage = undefined; } - + var exts = [''].concat(extensions); - load(exts, x, pkg) - - function load (exts, x, pkg) { - if (exts.length === 0) return cb(null, undefined, pkg); + load(exts, x, loadAsFilePackage); + + function load(exts, x, loadPackage) { + if (exts.length === 0) return cb(null, undefined, loadPackage); var file = x + exts[0]; - - if (pkg) onpkg(null, pkg) + + var pkg = loadPackage; + if (pkg) onpkg(null, pkg); else loadpkg(path.dirname(file), onpkg); - - function onpkg (err, pkg_, dir) { + + function onpkg(err, pkg_, dir) { pkg = pkg_; - if (err) return cb(err) + if (err) return cb(err); if (dir && pkg && opts.pathFilter) { var rfile = path.relative(dir, file); var rel = rfile.slice(0, rfile.length - exts[0].length); @@ -87,33 +99,30 @@ module.exports = function resolve (x, opts, cb) { } isFile(file, onex); } - function onex (err, ex) { - if (err) cb(err) - else if (!ex) load(exts.slice(1), x, pkg) - else cb(null, file, pkg) + function onex(err, ex) { + if (err) return cb(err); + if (ex) return cb(null, file, pkg); + load(exts.slice(1), x, pkg); } } } - - function loadpkg (dir, cb) { + + function loadpkg(dir, cb) { if (dir === '' || dir === '/') return cb(null); - if (process.platform === 'win32' && /^\w:[\\\/]*$/.test(dir)) { + if (process.platform === 'win32' && (/^\w:[/\\]*$/).test(dir)) { return cb(null); } - if (/[\\\/]node_modules[\\\/]*$/.test(dir)) return cb(null); - + if (/[/\\]node_modules[/\\]*$/.test(dir)) return cb(null); + var pkgfile = path.join(dir, 'package.json'); isFile(pkgfile, function (err, ex) { // on err, ex is false - if (!ex) return loadpkg( - path.dirname(dir), cb - ); - + if (!ex) return loadpkg(path.dirname(dir), cb); + readFile(pkgfile, function (err, body) { if (err) cb(err); - try { var pkg = JSON.parse(body) } - catch (err) {} - + try { var pkg = JSON.parse(body); } catch (jsonErr) {} + if (pkg && opts.packageFilter) { pkg = opts.packageFilter(pkg, pkgfile); } @@ -121,72 +130,74 @@ module.exports = function resolve (x, opts, cb) { }); }); } - - function loadAsDirectory (x, fpkg, cb) { + + function loadAsDirectory(x, loadAsDirectoryPackage, callback) { + var cb = callback; + var fpkg = loadAsDirectoryPackage; if (typeof fpkg === 'function') { cb = fpkg; fpkg = opts.package; } - - var pkgfile = path.join(x, '/package.json'); + + var pkgfile = path.join(x, 'package.json'); isFile(pkgfile, function (err, ex) { if (err) return cb(err); - if (!ex) return loadAsFile(path.join(x, '/index'), fpkg, cb); - + if (!ex) return loadAsFile(path.join(x, 'index'), fpkg, cb); + readFile(pkgfile, function (err, body) { if (err) return cb(err); try { var pkg = JSON.parse(body); - } - catch (err) {} - + } catch (jsonErr) {} + if (opts.packageFilter) { pkg = opts.packageFilter(pkg, pkgfile); } - + if (pkg.main) { - if (pkg.main === '.' || pkg.main === './'){ - pkg.main = 'index' + if (pkg.main === '.' || pkg.main === './') { + pkg.main = 'index'; } loadAsFile(path.resolve(x, pkg.main), pkg, function (err, m, pkg) { if (err) return cb(err); if (m) return cb(null, m, pkg); - if (!pkg) return loadAsFile(path.join(x, '/index'), pkg, cb); + if (!pkg) return loadAsFile(path.join(x, 'index'), pkg, cb); var dir = path.resolve(x, pkg.main); loadAsDirectory(dir, pkg, function (err, n, pkg) { if (err) return cb(err); if (n) return cb(null, n, pkg); - loadAsFile(path.join(x, '/index'), pkg, cb); + loadAsFile(path.join(x, 'index'), pkg, cb); }); }); return; } - + loadAsFile(path.join(x, '/index'), pkg, cb); }); }); } - - function loadNodeModules (x, start, cb) { - (function process (dirs) { - if (dirs.length === 0) return cb(null, undefined); - var dir = dirs[0]; - - var file = path.join(dir, '/', x); - loadAsFile(file, undefined, onfile); - - function onfile (err, m, pkg) { - if (err) return cb(err); - if (m) return cb(null, m, pkg); - loadAsDirectory(path.join(dir, '/', x), undefined, ondir); - } - - function ondir (err, n, pkg) { - if (err) return cb(err); - if (n) return cb(null, n, pkg); - process(dirs.slice(1)); - } - })(nodeModulesPaths(start, opts)); + + function processDirs(cb, dirs) { + if (dirs.length === 0) return cb(null, undefined); + var dir = dirs[0]; + + var file = path.join(dir, x); + loadAsFile(file, undefined, onfile); + + function onfile(err, m, pkg) { + if (err) return cb(err); + if (m) return cb(null, m, pkg); + loadAsDirectory(path.join(dir, x), undefined, ondir); + } + + function ondir(err, n, pkg) { + if (err) return cb(err); + if (n) return cb(null, n, pkg); + processDirs(cb, dirs.slice(1)); + } + } + function loadNodeModules(x, start, cb) { + processDirs(cb, nodeModulesPaths(start, opts)); } }; |