diff options
Diffstat (limited to 'node_modules/resolve/lib')
-rw-r--r-- | node_modules/resolve/lib/async.js | 203 | ||||
-rw-r--r-- | node_modules/resolve/lib/caller.js | 2 | ||||
-rw-r--r-- | node_modules/resolve/lib/core.js | 26 | ||||
-rw-r--r-- | node_modules/resolve/lib/core.json | 85 | ||||
-rw-r--r-- | node_modules/resolve/lib/node-modules-paths.js | 41 | ||||
-rw-r--r-- | node_modules/resolve/lib/sync.js | 58 |
6 files changed, 229 insertions, 186 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)); } }; diff --git a/node_modules/resolve/lib/caller.js b/node_modules/resolve/lib/caller.js index 5536549b0..b14a2804a 100644 --- a/node_modules/resolve/lib/caller.js +++ b/node_modules/resolve/lib/caller.js @@ -1,7 +1,7 @@ module.exports = function () { // see https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi var origPrepareStackTrace = Error.prepareStackTrace; - Error.prepareStackTrace = function (_, stack) { return stack }; + Error.prepareStackTrace = function (_, stack) { return stack; }; var stack = (new Error()).stack; Error.prepareStackTrace = origPrepareStackTrace; return stack[2].getFileName(); diff --git a/node_modules/resolve/lib/core.js b/node_modules/resolve/lib/core.js index ea4a6c87e..ad9efd132 100644 --- a/node_modules/resolve/lib/core.js +++ b/node_modules/resolve/lib/core.js @@ -1,4 +1,22 @@ -module.exports = require('./core.json').reduce(function (acc, x) { - acc[x] = true; - return acc; -}, {}); +var current = (process.versions && process.versions.node && process.versions.node.split('.')) || []; + +function versionIncluded(version) { + if (version === '*') return true; + var versionParts = version.split('.'); + for (var i = 0; i < 3; ++i) { + if ((current[i] || 0) >= (versionParts[i] || 0)) return true; + } + return false; +} + +var data = require('./core.json'); + +var core = {}; +for (var version in data) { // eslint-disable-line no-restricted-syntax + if (Object.prototype.hasOwnProperty.call(data, version) && versionIncluded(version)) { + for (var i = 0; i < data[version].length; ++i) { + core[data[version][i]] = true; + } + } +} +module.exports = core; diff --git a/node_modules/resolve/lib/core.json b/node_modules/resolve/lib/core.json index 28560f7ef..843844ebf 100644 --- a/node_modules/resolve/lib/core.json +++ b/node_modules/resolve/lib/core.json @@ -1,38 +1,47 @@ -[ - "assert", - "buffer_ieee754", - "buffer", - "child_process", - "cluster", - "console", - "constants", - "crypto", - "_debugger", - "dgram", - "dns", - "domain", - "events", - "freelist", - "fs", - "http", - "https", - "_linklist", - "module", - "net", - "os", - "path", - "punycode", - "querystring", - "readline", - "repl", - "stream", - "string_decoder", - "sys", - "timers", - "tls", - "tty", - "url", - "util", - "vm", - "zlib" -] +{ + "*": [ + "assert", + "buffer_ieee754", + "buffer", + "child_process", + "cluster", + "console", + "constants", + "crypto", + "_debugger", + "dgram", + "dns", + "domain", + "events", + "freelist", + "fs", + "http", + "https", + "_linklist", + "module", + "net", + "os", + "path", + "punycode", + "querystring", + "readline", + "repl", + "stream", + "string_decoder", + "sys", + "timers", + "tls", + "tty", + "url", + "util", + "vm", + "zlib" + ], + "0.11": [ + "_http_server" + ], + "1.0": [ + "process", + "v8" + ] +} diff --git a/node_modules/resolve/lib/node-modules-paths.js b/node_modules/resolve/lib/node-modules-paths.js index ce0a0d9f2..dc06199db 100644 --- a/node_modules/resolve/lib/node-modules-paths.js +++ b/node_modules/resolve/lib/node-modules-paths.js @@ -1,38 +1,35 @@ var path = require('path'); +var parse = path.parse || require('path-parse'); -module.exports = function (start, opts) { - var modules = opts.moduleDirectory +module.exports = function nodeModulesPaths(start, opts) { + var modules = opts && opts.moduleDirectory ? [].concat(opts.moduleDirectory) : ['node_modules'] ; // ensure that `start` is an absolute path at this point, // resolving against the process' current working directory - start = path.resolve(start); + var absoluteStart = path.resolve(start); var prefix = '/'; - if (/^([A-Za-z]:)/.test(start)) { + if (/^([A-Za-z]:)/.test(absoluteStart)) { prefix = ''; - } else if (/^\\\\/.test(start)) { + } else if (/^\\\\/.test(absoluteStart)) { prefix = '\\\\'; } - var splitRe = process.platform === 'win32' ? /[\/\\]/ : /\/+/; - - var parts = start.split(splitRe); + var paths = [absoluteStart]; + var parsed = parse(absoluteStart); + while (parsed.dir !== paths[paths.length - 1]) { + paths.push(parsed.dir); + parsed = parse(parsed.dir); + } - var dirs = []; - for (var i = parts.length - 1; i >= 0; i--) { - if (modules.indexOf(parts[i]) !== -1) continue; - dirs = dirs.concat(modules.map(function(module_dir) { - return prefix + path.join( - path.join.apply(path, parts.slice(0, i + 1)), - module_dir - ); + var dirs = paths.reduce(function (dirs, aPath) { + return dirs.concat(modules.map(function (moduleDir) { + return path.join(prefix, aPath, moduleDir); })); - } - if (process.platform === 'win32'){ - dirs[dirs.length-1] = dirs[dirs.length-1].replace(":", ":\\"); - } - return dirs.concat(opts.paths); -} + }, []); + + return opts && opts.paths ? dirs.concat(opts.paths) : dirs; +}; diff --git a/node_modules/resolve/lib/sync.js b/node_modules/resolve/lib/sync.js index ef91eddbb..510ca256c 100644 --- a/node_modules/resolve/lib/sync.js +++ b/node_modules/resolve/lib/sync.js @@ -4,39 +4,48 @@ var path = require('path'); var caller = require('./caller.js'); var nodeModulesPaths = require('./node-modules-paths.js'); -module.exports = function (x, opts) { - if (!opts) opts = {}; +module.exports = function (x, options) { + if (typeof x !== 'string') { + throw new TypeError('Path must be a string.'); + } + var opts = options || {}; var isFile = opts.isFile || function (file) { - try { var stat = fs.statSync(file) } - catch (err) { if (err && err.code === 'ENOENT') return false } + try { + var stat = fs.statSync(file); + } catch (e) { + if (e && (e.code === 'ENOENT' || e.code === 'ENOTDIR')) return false; + throw e; + } return stat.isFile() || stat.isFIFO(); }; var readFileSync = opts.readFileSync || fs.readFileSync; - - 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 += '/'; var m = loadAsFileSync(res) || loadAsDirectorySync(res); if (m) return m; } else { var n = loadNodeModulesSync(x, y); if (n) return n; } - + if (core[x]) return x; - - throw new Error("Cannot find module '" + x + "' from '" + y + "'"); - - function loadAsFileSync (x) { + + var err = new Error("Cannot find module '" + x + "' from '" + y + "'"); + err.code = 'MODULE_NOT_FOUND'; + throw err; + + function loadAsFileSync(x) { if (isFile(x)) { return x; } - + for (var i = 0; i < extensions.length; i++) { var file = x + extensions[i]; if (isFile(file)) { @@ -44,8 +53,8 @@ module.exports = function (x, opts) { } } } - - function loadAsDirectorySync (x) { + + function loadAsDirectorySync(x) { var pkgfile = path.join(x, '/package.json'); if (isFile(pkgfile)) { var body = readFileSync(pkgfile, 'utf8'); @@ -54,27 +63,26 @@ module.exports = function (x, opts) { if (opts.packageFilter) { pkg = opts.packageFilter(pkg, x); } - + if (pkg.main) { var m = loadAsFileSync(path.resolve(x, pkg.main)); if (m) return m; var n = loadAsDirectorySync(path.resolve(x, pkg.main)); if (n) return n; } - } - catch (err) {} + } catch (e) {} } - - return loadAsFileSync(path.join( x, '/index')); + + return loadAsFileSync(path.join(x, '/index')); } - - function loadNodeModulesSync (x, start) { + + function loadNodeModulesSync(x, start) { var dirs = nodeModulesPaths(start, opts); for (var i = 0; i < dirs.length; i++) { var dir = dirs[i]; - var m = loadAsFileSync(path.join( dir, '/', x)); + var m = loadAsFileSync(path.join(dir, '/', x)); if (m) return m; - var n = loadAsDirectorySync(path.join( dir, '/', x )); + var n = loadAsDirectorySync(path.join(dir, '/', x)); if (n) return n; } } |