diff options
Diffstat (limited to 'node_modules/resolve')
70 files changed, 1569 insertions, 0 deletions
diff --git a/node_modules/resolve/.travis.yml b/node_modules/resolve/.travis.yml new file mode 100644 index 000000000..895dbd362 --- /dev/null +++ b/node_modules/resolve/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: +  - 0.6 +  - 0.8 diff --git a/node_modules/resolve/LICENSE b/node_modules/resolve/LICENSE new file mode 100644 index 000000000..ee27ba4b4 --- /dev/null +++ b/node_modules/resolve/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/resolve/example/async.js b/node_modules/resolve/example/async.js new file mode 100644 index 000000000..6624ff726 --- /dev/null +++ b/node_modules/resolve/example/async.js @@ -0,0 +1,5 @@ +var resolve = require('../'); +resolve('tap', { basedir: __dirname }, function (err, res) { +    if (err) console.error(err) +    else console.log(res) +}); diff --git a/node_modules/resolve/example/sync.js b/node_modules/resolve/example/sync.js new file mode 100644 index 000000000..54b2cc100 --- /dev/null +++ b/node_modules/resolve/example/sync.js @@ -0,0 +1,3 @@ +var resolve = require('../'); +var res = resolve.sync('tap', { basedir: __dirname }); +console.log(res); diff --git a/node_modules/resolve/index.js b/node_modules/resolve/index.js new file mode 100644 index 000000000..51f194b4c --- /dev/null +++ b/node_modules/resolve/index.js @@ -0,0 +1,5 @@ +var core = require('./lib/core'); +exports = module.exports = require('./lib/async'); +exports.core = core; +exports.isCore = function (x) { return core[x] }; +exports.sync = require('./lib/sync'); diff --git a/node_modules/resolve/lib/async.js b/node_modules/resolve/lib/async.js new file mode 100644 index 000000000..0f0eeca56 --- /dev/null +++ b/node_modules/resolve/lib/async.js @@ -0,0 +1,192 @@ +var core = require('./core'); +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) { +    if (typeof opts === 'function') { +        cb = opts; +        opts = {}; +    } +    if (!opts) opts = {}; +    if (typeof x !== 'string') { +        return process.nextTick(function () { +            cb(new Error('path must be a string')); +        }); +    } +     +    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()) +        }); +    }; +    var readFile = opts.readFile || fs.readFile; +     +    var extensions = opts.extensions || [ '.js' ]; +    var y = opts.basedir || path.dirname(caller()); +     +    opts.paths = opts.paths || []; +     +    if (/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[\\\/])/.test(x)) { +        var res = path.resolve(y, x); +        if (x === '..') 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 if (core[x]) return cb(null, x); +        else cb(new Error("Cannot find module '" + x + "' from '" + y + "'")) +    }); +     +    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 + "'")) +        }) +    } +     +    function loadAsFile (x, pkg, cb) { +        if (typeof pkg === 'function') { +            cb = pkg; +            pkg = undefined; +        } +         +        var exts = [''].concat(extensions); +        load(exts, x, pkg) +		 +		function load (exts, x, pkg) { +            if (exts.length === 0) return cb(null, undefined, pkg); +            var file = x + exts[0]; +             +            if (pkg) onpkg(null, pkg) +            else loadpkg(path.dirname(file), onpkg); +             +            function onpkg (err, pkg_, dir) { +                pkg = pkg_; +                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); +                    var r = opts.pathFilter(pkg, x, rel); +                    if (r) return load( +                        [''].concat(extensions.slice()), +                        path.resolve(dir, r), +                        pkg +                    ); +                } +                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 loadpkg (dir, cb) { +        if (dir === '' || dir === '/') return cb(null); +        if (process.platform === 'win32' && /^\w:[\\\/]*$/.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 +            ); +             +            readFile(pkgfile, function (err, body) { +                if (err) cb(err); +                try { var pkg = JSON.parse(body) } +                catch (err) {} +                 +                if (pkg && opts.packageFilter) { +                    pkg = opts.packageFilter(pkg, pkgfile); +                } +                cb(null, pkg, dir); +            }); +        }); +    } +     +    function loadAsDirectory (x, fpkg, cb) { +        if (typeof fpkg === 'function') { +            cb = fpkg; +            fpkg = opts.package; +        } +         +        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); +             +            readFile(pkgfile, function (err, body) { +                if (err) return cb(err); +                try { +                    var pkg = JSON.parse(body); +                } +                catch (err) {} +                 +                if (opts.packageFilter) { +                    pkg = opts.packageFilter(pkg, pkgfile); +                } +                 +                if (pkg.main) { +                    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); + +                        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); +                        }); +                    }); +                    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)); +    } +}; diff --git a/node_modules/resolve/lib/caller.js b/node_modules/resolve/lib/caller.js new file mode 100644 index 000000000..5536549b0 --- /dev/null +++ b/node_modules/resolve/lib/caller.js @@ -0,0 +1,8 @@ +module.exports = function () { +    // see https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi +    var origPrepareStackTrace = Error.prepareStackTrace; +    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 new file mode 100644 index 000000000..ea4a6c87e --- /dev/null +++ b/node_modules/resolve/lib/core.js @@ -0,0 +1,4 @@ +module.exports = require('./core.json').reduce(function (acc, x) { +    acc[x] = true; +    return acc; +}, {}); diff --git a/node_modules/resolve/lib/core.json b/node_modules/resolve/lib/core.json new file mode 100644 index 000000000..28560f7ef --- /dev/null +++ b/node_modules/resolve/lib/core.json @@ -0,0 +1,38 @@ +[ +    "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" +] diff --git a/node_modules/resolve/lib/node-modules-paths.js b/node_modules/resolve/lib/node-modules-paths.js new file mode 100644 index 000000000..ce0a0d9f2 --- /dev/null +++ b/node_modules/resolve/lib/node-modules-paths.js @@ -0,0 +1,38 @@ +var path = require('path'); + +module.exports = function (start, opts) { +    var modules = 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 prefix = '/'; +    if (/^([A-Za-z]:)/.test(start)) { +        prefix = ''; +    } else if (/^\\\\/.test(start)) { +        prefix = '\\\\'; +    } + +    var splitRe = process.platform === 'win32' ? /[\/\\]/ : /\/+/; + +    var parts = start.split(splitRe); + +    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 +            ); +        })); +    } +    if (process.platform === 'win32'){ +        dirs[dirs.length-1] = dirs[dirs.length-1].replace(":", ":\\"); +    } +    return dirs.concat(opts.paths); +} diff --git a/node_modules/resolve/lib/sync.js b/node_modules/resolve/lib/sync.js new file mode 100644 index 000000000..ef91eddbb --- /dev/null +++ b/node_modules/resolve/lib/sync.js @@ -0,0 +1,81 @@ +var core = require('./core'); +var fs = require('fs'); +var path = require('path'); +var caller = require('./caller.js'); +var nodeModulesPaths = require('./node-modules-paths.js'); + +module.exports = function (x, opts) { +    if (!opts) opts = {}; +    var isFile = opts.isFile || function (file) { +        try { var stat = fs.statSync(file) } +        catch (err) { if (err && err.code === 'ENOENT') return false } +        return stat.isFile() || stat.isFIFO(); +    }; +    var readFileSync = opts.readFileSync || fs.readFileSync; +     +    var extensions = opts.extensions || [ '.js' ]; +    var y = opts.basedir || path.dirname(caller()); + +    opts.paths = opts.paths || []; + +    if (/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[\\\/])/.test(x)) { +        var res = path.resolve(y, x); +        if (x === '..') 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) { +        if (isFile(x)) { +            return x; +        } +         +        for (var i = 0; i < extensions.length; i++) { +            var file = x + extensions[i]; +            if (isFile(file)) { +                return file; +            } +        } +    } +     +    function loadAsDirectorySync (x) { +        var pkgfile = path.join(x, '/package.json'); +        if (isFile(pkgfile)) { +            var body = readFileSync(pkgfile, 'utf8'); +            try { +                var pkg = JSON.parse(body); +                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) {} +        } +         +        return loadAsFileSync(path.join( x, '/index')); +    } +     +    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)); +            if (m) return m; +            var n = loadAsDirectorySync(path.join( dir, '/', x )); +            if (n) return n; +        } +    } +}; diff --git a/node_modules/resolve/package.json b/node_modules/resolve/package.json new file mode 100644 index 000000000..507fe8b07 --- /dev/null +++ b/node_modules/resolve/package.json @@ -0,0 +1,29 @@ +{ +  "name": "resolve", +  "description": "resolve like require.resolve() on behalf of files asynchronously and synchronously", +  "version": "1.1.7", +  "repository": { +    "type": "git", +    "url": "git://github.com/substack/node-resolve.git" +  }, +  "main": "index.js", +  "keywords": [ +    "resolve", +    "require", +    "node", +    "module" +  ], +  "scripts": { +    "test": "tape test/*.js" +  }, +  "devDependencies": { +    "tape": "^3.5.0", +    "tap": "0.4.13" +  }, +  "license": "MIT", +  "author": { +    "name": "James Halliday", +    "email": "mail@substack.net", +    "url": "http://substack.net" +  } +} diff --git a/node_modules/resolve/readme.markdown b/node_modules/resolve/readme.markdown new file mode 100644 index 000000000..4fab9b043 --- /dev/null +++ b/node_modules/resolve/readme.markdown @@ -0,0 +1,148 @@ +# resolve + +implements the [node `require.resolve()` +algorithm](http://nodejs.org/docs/v0.4.8/api/all.html#all_Together...) +such that you can `require.resolve()` on behalf of a file asynchronously and +synchronously + +[](http://travis-ci.org/substack/node-resolve) + +# example + +asynchronously resolve: + +``` js +var resolve = require('resolve'); +resolve('tap', { basedir: __dirname }, function (err, res) { +    if (err) console.error(err) +    else console.log(res) +}); +``` + +``` +$ node example/async.js +/home/substack/projects/node-resolve/node_modules/tap/lib/main.js +``` + +synchronously resolve: + +``` js +var resolve = require('resolve'); +var res = resolve.sync('tap', { basedir: __dirname }); +console.log(res); +``` + +``` +$ node example/sync.js +/home/substack/projects/node-resolve/node_modules/tap/lib/main.js +``` + +# methods + +``` js +var resolve = require('resolve') +``` + +## resolve(id, opts={}, cb) + +Asynchronously resolve the module path string `id` into `cb(err, res [, pkg])`, where `pkg` (if defined) is the data from `package.json`. + +options are: + +* opts.basedir - directory to begin resolving from + +* opts.package - `package.json` data applicable to the module being loaded + +* opts.extensions - array of file extensions to search in order + +* opts.readFile - how to read files asynchronously + +* opts.isFile - function to asynchronously test whether a file exists + +* opts.packageFilter - transform the parsed package.json contents before looking +at the "main" field + +* opts.pathFilter(pkg, path, relativePath) - transform a path within a package +  * pkg - package data +  * path - the path being resolved +  * relativePath - the path relative from the package.json location +  * returns - a relative path that will be joined from the package.json location + +* opts.paths - require.paths array to use if nothing is found on the normal +node_modules recursive walk (probably don't use this) + +* opts.moduleDirectory - directory (or directories) in which to recursively look for modules. default: `"node_modules"` + +default `opts` values: + +``` javascript +{ +    paths: [], +    basedir: __dirname, +    extensions: [ '.js' ], +    readFile: fs.readFile, +    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()) +        }); +    }, +    moduleDirectory: 'node_modules' +} +``` + +## resolve.sync(id, opts) + +Synchronously resolve the module path string `id`, returning the result and +throwing an error when `id` can't be resolved. + +options are: + +* opts.basedir - directory to begin resolving from + +* opts.extensions - array of file extensions to search in order + +* opts.readFile - how to read files synchronously + +* opts.isFile - function to synchronously test whether a file exists + +* `opts.packageFilter(pkg, pkgfile)` - transform the parsed package.json +* contents before looking at the "main" field + +* opts.paths - require.paths array to use if nothing is found on the normal +node_modules recursive walk (probably don't use this) + +* opts.moduleDirectory - directory (or directories) in which to recursively look for modules. default: `"node_modules"` + +default `opts` values: + +``` javascript +{ +    paths: [], +    basedir: __dirname, +    extensions: [ '.js' ], +    readFileSync: fs.readFileSync, +    isFile: function (file) { +        try { return fs.statSync(file).isFile() } +        catch (e) { return false } +    }, +    moduleDirectory: 'node_modules' +} +```` + +## resolve.isCore(pkg) + +Return whether a package is in core. + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install resolve +``` + +# license + +MIT diff --git a/node_modules/resolve/test/core.js b/node_modules/resolve/test/core.js new file mode 100644 index 000000000..4a5668207 --- /dev/null +++ b/node_modules/resolve/test/core.js @@ -0,0 +1,12 @@ +var test = require('tape'); +var resolve = require('../'); + +test('core modules', function (t) { +    t.ok(resolve.isCore('fs')); +    t.ok(resolve.isCore('net')); +    t.ok(resolve.isCore('http')); +     +    t.ok(!resolve.isCore('seq')); +    t.ok(!resolve.isCore('../')); +    t.end(); +}); diff --git a/node_modules/resolve/test/dotdot.js b/node_modules/resolve/test/dotdot.js new file mode 100644 index 000000000..b87677278 --- /dev/null +++ b/node_modules/resolve/test/dotdot.js @@ -0,0 +1,29 @@ +var path = require('path'); +var test = require('tape'); +var resolve = require('../'); + +test('dotdot', function (t) { +    t.plan(4); +    var dir = __dirname + '/dotdot/abc'; +     +    resolve('..', { basedir : dir }, function (err, res, pkg) { +        t.ifError(err); +        t.equal(res, __dirname + '/dotdot/index.js'); +    }); +     +    resolve('.', { basedir : dir }, function (err, res, pkg) { +        t.ifError(err); +        t.equal(res, dir + '/index.js'); +    }); +}); + +test('dotdot sync', function (t) { +    t.plan(2); +    var dir = __dirname + '/dotdot/abc'; +     +    var a = resolve.sync('..', { basedir : dir }); +    t.equal(a, __dirname + '/dotdot/index.js'); +     +    var b = resolve.sync('.', { basedir : dir }); +    t.equal(b, dir + '/index.js'); +}); diff --git a/node_modules/resolve/test/dotdot/abc/index.js b/node_modules/resolve/test/dotdot/abc/index.js new file mode 100644 index 000000000..67f2534eb --- /dev/null +++ b/node_modules/resolve/test/dotdot/abc/index.js @@ -0,0 +1,2 @@ +var x = require('..'); +console.log(x); diff --git a/node_modules/resolve/test/dotdot/index.js b/node_modules/resolve/test/dotdot/index.js new file mode 100644 index 000000000..afec73603 --- /dev/null +++ b/node_modules/resolve/test/dotdot/index.js @@ -0,0 +1 @@ +module.exports = 'whatever' diff --git a/node_modules/resolve/test/faulty_basedir.js b/node_modules/resolve/test/faulty_basedir.js new file mode 100644 index 000000000..244081882 --- /dev/null +++ b/node_modules/resolve/test/faulty_basedir.js @@ -0,0 +1,17 @@ +var path = require('path'); +var test = require('tape'); +var resolve = require('../'); + +// not sure what's up with this test anymore +if (process.platform !== 'win32') return; + +test('faulty basedir must produce error in windows', function (t) { +    t.plan(1); + +    var resolverDir = 'C:\\a\\b\\c\\d'; + +    resolve('tape/lib/test.js', { basedir : resolverDir }, function (err, res, pkg) { +        t.equal(true, !!err); +    }); + +}); diff --git a/node_modules/resolve/test/filter.js b/node_modules/resolve/test/filter.js new file mode 100644 index 000000000..07c38f349 --- /dev/null +++ b/node_modules/resolve/test/filter.js @@ -0,0 +1,18 @@ +var test = require('tape'); +var resolve = require('../'); + +test('filter', function (t) { +    t.plan(2); +    var dir = __dirname + '/resolver'; +    resolve('./baz', { +        basedir : dir, +        packageFilter : function (pkg) { +            pkg.main = 'doom'; +            return pkg; +        } +    }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/baz/doom.js'); +        t.equal(pkg.main, 'doom'); +    }); +}); diff --git a/node_modules/resolve/test/filter_sync.js b/node_modules/resolve/test/filter_sync.js new file mode 100644 index 000000000..3f89b7942 --- /dev/null +++ b/node_modules/resolve/test/filter_sync.js @@ -0,0 +1,15 @@ +var test = require('tape'); +var resolve = require('../'); + +test('filter', function (t) { +    var dir = __dirname + '/resolver'; +    var res = resolve.sync('./baz', { +        basedir : dir, +        packageFilter : function (pkg) { +            pkg.main = 'doom' +            return pkg; +        } +    }); +    t.equal(res, dir + '/baz/doom.js'); +    t.end(); +}); diff --git a/node_modules/resolve/test/mock.js b/node_modules/resolve/test/mock.js new file mode 100644 index 000000000..1cf3b1247 --- /dev/null +++ b/node_modules/resolve/test/mock.js @@ -0,0 +1,142 @@ +var test = require('tape'); +var resolve = require('../'); + +test('mock', function (t) { +    t.plan(6); +     +    var files = { +        '/foo/bar/baz.js' : 'beep' +    }; +     +    function opts (basedir) { +        return { +            basedir : basedir, +            isFile : function (file, cb) { +                cb(null, files.hasOwnProperty(file)); +            }, +            readFile : function (file, cb) { +                cb(null, files[file]); +            } +        } +    } +     +    resolve('./baz', opts('/foo/bar'), function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, '/foo/bar/baz.js'); +        t.equal(pkg, undefined); +    }); +     +    resolve('./baz.js', opts('/foo/bar'), function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, '/foo/bar/baz.js'); +        t.equal(pkg, undefined); +    }); +     +    resolve('baz', opts('/foo/bar'), function (err, res) { +        t.equal(err.message, "Cannot find module 'baz' from '/foo/bar'"); +    }); +     +    resolve('../baz', opts('/foo/bar'), function (err, res) { +        t.equal(err.message, "Cannot find module '../baz' from '/foo/bar'"); +    }); +}); + +test('mock from package', function (t) { +    t.plan(6); +     +    var files = { +        '/foo/bar/baz.js' : 'beep' +    }; +     +    function opts (basedir) { +        return { +            basedir : basedir, +            package : { main: 'bar' }, +            isFile : function (file, cb) { +                cb(null, files.hasOwnProperty(file)); +            }, +            readFile : function (file, cb) { +                cb(null, files[file]); +            } +        } +    } +     +    resolve('./baz', opts('/foo/bar'), function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, '/foo/bar/baz.js'); +        t.equal(pkg.main, 'bar'); +    }); +     +    resolve('./baz.js', opts('/foo/bar'), function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, '/foo/bar/baz.js'); +        t.equal(pkg.main, 'bar'); +    }); +     +    resolve('baz', opts('/foo/bar'), function (err, res) { +        t.equal(err.message, "Cannot find module 'baz' from '/foo/bar'"); +    }); +     +    resolve('../baz', opts('/foo/bar'), function (err, res) { +        t.equal(err.message, "Cannot find module '../baz' from '/foo/bar'"); +    }); +}); + +test('mock package', function (t) { +    t.plan(2); +     +    var files = { +        '/foo/node_modules/bar/baz.js' : 'beep', +        '/foo/node_modules/bar/package.json' : JSON.stringify({ +            main : './baz.js' +        }) +    }; +     +    function opts (basedir) { +        return { +            basedir : basedir, +            isFile : function (file, cb) { +                cb(null, files.hasOwnProperty(file)); +            }, +            readFile : function (file, cb) { +                cb(null, files[file]); +            } +        } +    } +     +    resolve('bar', opts('/foo'), function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, '/foo/node_modules/bar/baz.js'); +        t.equal(pkg.main, './baz.js'); +    }); +}); + +test('mock package from package', function (t) { +    t.plan(2); +     +    var files = { +        '/foo/node_modules/bar/baz.js' : 'beep', +        '/foo/node_modules/bar/package.json' : JSON.stringify({ +            main : './baz.js' +        }) +    }; +     +    function opts (basedir) { +        return { +            basedir : basedir, +            package : { main: 'bar' }, +            isFile : function (file, cb) { +                cb(null, files.hasOwnProperty(file)); +            }, +            readFile : function (file, cb) { +                cb(null, files[file]); +            } +        } +    } +     +    resolve('bar', opts('/foo'), function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, '/foo/node_modules/bar/baz.js'); +        t.equal(pkg.main, './baz.js'); +    }); +}); diff --git a/node_modules/resolve/test/mock_sync.js b/node_modules/resolve/test/mock_sync.js new file mode 100644 index 000000000..abfd28935 --- /dev/null +++ b/node_modules/resolve/test/mock_sync.js @@ -0,0 +1,68 @@ +var test = require('tape'); +var resolve = require('../'); + +test('mock', function (t) { +    t.plan(4); +     +    var files = { +        '/foo/bar/baz.js' : 'beep' +    }; +     +    function opts (basedir) { +        return { +            basedir : basedir, +            isFile : function (file) { +                return files.hasOwnProperty(file) +            }, +            readFileSync : function (file) { +                return files[file] +            } +        } +    } +     +    t.equal( +        resolve.sync('./baz', opts('/foo/bar')), +        '/foo/bar/baz.js' +    ); +     +    t.equal( +        resolve.sync('./baz.js', opts('/foo/bar')), +        '/foo/bar/baz.js' +    ); +     +    t.throws(function () { +        resolve.sync('baz', opts('/foo/bar')); +    }); + +    t.throws(function () { +        resolve.sync('../baz', opts('/foo/bar')); +    }); +}); + +test('mock package', function (t) { +    t.plan(1); +     +    var files = { +        '/foo/node_modules/bar/baz.js' : 'beep', +        '/foo/node_modules/bar/package.json' : JSON.stringify({ +            main : './baz.js' +        }) +    }; +     +    function opts (basedir) { +        return { +            basedir : basedir, +            isFile : function (file) { +                return files.hasOwnProperty(file) +            }, +            readFileSync : function (file) { +                return files[file] +            } +        } +    } +     +    t.equal( +        resolve.sync('bar', opts('/foo')), +        '/foo/node_modules/bar/baz.js' +    ); +}); diff --git a/node_modules/resolve/test/module_dir.js b/node_modules/resolve/test/module_dir.js new file mode 100644 index 000000000..06395d8cb --- /dev/null +++ b/node_modules/resolve/test/module_dir.js @@ -0,0 +1,56 @@ +var path = require('path'); +var test = require('tape'); +var resolve = require('../'); + +test('moduleDirectory strings', function (t) { +    t.plan(4); +    var dir = __dirname + '/module_dir'; +    var xopts = { +        basedir : dir, +        moduleDirectory: 'xmodules' +    }; +    resolve('aaa', xopts, function (err, res, pkg) { +        t.ifError(err); +        t.equal(res, dir + '/xmodules/aaa/index.js'); +    }); +     +    var yopts = { +        basedir : dir, +        moduleDirectory: 'ymodules' +    }; +    resolve('aaa', yopts, function (err, res, pkg) { +        t.ifError(err); +        t.equal(res, dir + '/ymodules/aaa/index.js'); +    }); +}); + +test('moduleDirectory array', function (t) { +    t.plan(6); +    var dir = __dirname + '/module_dir'; +    var aopts = { +        basedir : dir, +        moduleDirectory: [ 'xmodules', 'ymodules', 'zmodules' ] +    }; +    resolve('aaa', aopts, function (err, res, pkg) { +        t.ifError(err); +        t.equal(res, dir + '/xmodules/aaa/index.js'); +    }); +     +    var bopts = { +        basedir : dir, +        moduleDirectory: [ 'zmodules', 'ymodules', 'xmodules' ] +    }; +    resolve('aaa', bopts, function (err, res, pkg) { +        t.ifError(err); +        t.equal(res, dir + '/ymodules/aaa/index.js'); +    }); +     +    var copts = { +        basedir : dir, +        moduleDirectory: [ 'xmodules', 'ymodules', 'zmodules' ] +    }; +    resolve('bbb', copts, function (err, res, pkg) { +        t.ifError(err); +        t.equal(res, dir + '/zmodules/bbb/main.js'); +    }); +}); diff --git a/node_modules/resolve/test/module_dir/xmodules/aaa/index.js b/node_modules/resolve/test/module_dir/xmodules/aaa/index.js new file mode 100644 index 000000000..55cd18ca7 --- /dev/null +++ b/node_modules/resolve/test/module_dir/xmodules/aaa/index.js @@ -0,0 +1 @@ +module.exports = function (x) { return x * 100 } diff --git a/node_modules/resolve/test/module_dir/ymodules/aaa/index.js b/node_modules/resolve/test/module_dir/ymodules/aaa/index.js new file mode 100644 index 000000000..651aca860 --- /dev/null +++ b/node_modules/resolve/test/module_dir/ymodules/aaa/index.js @@ -0,0 +1 @@ +module.exports = function (x) { return x + 100 } diff --git a/node_modules/resolve/test/module_dir/zmodules/bbb/main.js b/node_modules/resolve/test/module_dir/zmodules/bbb/main.js new file mode 100644 index 000000000..4325a0bd5 --- /dev/null +++ b/node_modules/resolve/test/module_dir/zmodules/bbb/main.js @@ -0,0 +1 @@ +module.exports = function (n) { return n * 111 } diff --git a/node_modules/resolve/test/module_dir/zmodules/bbb/package.json b/node_modules/resolve/test/module_dir/zmodules/bbb/package.json new file mode 100644 index 000000000..c13b8cf6a --- /dev/null +++ b/node_modules/resolve/test/module_dir/zmodules/bbb/package.json @@ -0,0 +1,3 @@ +{ +  "main": "main.js" +} diff --git a/node_modules/resolve/test/node_path.js b/node_modules/resolve/test/node_path.js new file mode 100644 index 000000000..2407189b8 --- /dev/null +++ b/node_modules/resolve/test/node_path.js @@ -0,0 +1,48 @@ +var path = require('path'); +var test = require('tape'); +var resolve = require('../'); + +test('$NODE_PATH', function (t) { +    t.plan(4); +     +    resolve('aaa', { +        paths: [ +            __dirname + '/node_path/x', +            __dirname + '/node_path/y' +        ], +        basedir: __dirname, +    }, function (err, res) { +        t.equal(res, __dirname + '/node_path/x/aaa/index.js'); +    }); +     +    resolve('bbb', { +        paths: [ +            __dirname + '/node_path/x', +            __dirname + '/node_path/y' +        ], +        basedir: __dirname, +    }, function (err, res) { +        t.equal(res, __dirname + '/node_path/y/bbb/index.js'); +    }); +     +    resolve('ccc', { +        paths: [ +            __dirname + '/node_path/x', +            __dirname + '/node_path/y' +        ], +        basedir: __dirname, +    }, function (err, res) { +        t.equal(res, __dirname + '/node_path/x/ccc/index.js'); +    }); + +    // ensure that relative paths still resolve against the +    // regular `node_modules` correctly +    resolve('tap', { +        paths: [ +            'node_path', +        ], +        basedir: 'node_path/x', +    }, function (err, res) { +        t.equal(res, path.resolve(__dirname, '..', 'node_modules/tap/lib/main.js')); +    }); +}); diff --git a/node_modules/resolve/test/node_path/x/aaa/index.js b/node_modules/resolve/test/node_path/x/aaa/index.js new file mode 100644 index 000000000..1ea591380 --- /dev/null +++ b/node_modules/resolve/test/node_path/x/aaa/index.js @@ -0,0 +1 @@ +module.exports = 'A' diff --git a/node_modules/resolve/test/node_path/x/ccc/index.js b/node_modules/resolve/test/node_path/x/ccc/index.js new file mode 100644 index 000000000..f186fa757 --- /dev/null +++ b/node_modules/resolve/test/node_path/x/ccc/index.js @@ -0,0 +1 @@ +module.exports = 'C' diff --git a/node_modules/resolve/test/node_path/y/bbb/index.js b/node_modules/resolve/test/node_path/y/bbb/index.js new file mode 100644 index 000000000..e22dd83c0 --- /dev/null +++ b/node_modules/resolve/test/node_path/y/bbb/index.js @@ -0,0 +1 @@ +module.exports = 'B' diff --git a/node_modules/resolve/test/node_path/y/ccc/index.js b/node_modules/resolve/test/node_path/y/ccc/index.js new file mode 100644 index 000000000..d0043d1ec --- /dev/null +++ b/node_modules/resolve/test/node_path/y/ccc/index.js @@ -0,0 +1 @@ +module.exports = 'CY' diff --git a/node_modules/resolve/test/nonstring.js b/node_modules/resolve/test/nonstring.js new file mode 100644 index 000000000..ef63c40f9 --- /dev/null +++ b/node_modules/resolve/test/nonstring.js @@ -0,0 +1,9 @@ +var test = require('tape'); +var resolve = require('../'); + +test('nonstring', function (t) { +    t.plan(1); +    resolve(555, function (err, res, pkg) { +        t.ok(err); +    }); +}); diff --git a/node_modules/resolve/test/pathfilter.js b/node_modules/resolve/test/pathfilter.js new file mode 100644 index 000000000..142f94d65 --- /dev/null +++ b/node_modules/resolve/test/pathfilter.js @@ -0,0 +1,35 @@ +var test = require('tape'); +var resolve = require('../'); + +test('#62: deep module references and the pathFilter', function(t){ +	t.plan(9); +     +	var resolverDir = __dirname + '/pathfilter/deep_ref'; +	var pathFilter = function(pkg, x, remainder){ +		t.equal(pkg.version, "1.2.3"); +		t.equal(x, resolverDir + '/node_modules/deep/ref'); +		t.equal(remainder, "ref"); +		return "alt"; +	}; +	 +	resolve('deep/ref', { basedir : resolverDir }, function (err, res, pkg) { +        if (err) t.fail(err); + +        t.equal(pkg.version, "1.2.3"); +        t.equal(res, resolverDir + '/node_modules/deep/ref.js'); +    }); + +    resolve('deep/deeper/ref', { basedir: resolverDir }, +    function(err, res, pkg) { +      if(err) t.fail(err); +      t.notEqual(pkg, undefined); +      t.equal(pkg.version, "1.2.3"); +      t.equal(res, resolverDir + '/node_modules/deep/deeper/ref.js'); +    }); +     +    resolve('deep/ref', { basedir : resolverDir, pathFilter : pathFilter }, +    function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, resolverDir + '/node_modules/deep/alt.js'); +    }); +}); diff --git a/node_modules/resolve/test/pathfilter/deep_ref/main.js b/node_modules/resolve/test/pathfilter/deep_ref/main.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/node_modules/resolve/test/pathfilter/deep_ref/main.js diff --git a/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/alt.js b/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/alt.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/alt.js diff --git a/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/deeper/ref.js b/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/deeper/ref.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/deeper/ref.js diff --git a/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/package.json b/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/package.json new file mode 100644 index 000000000..fe4b408a0 --- /dev/null +++ b/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/package.json @@ -0,0 +1,4 @@ +{ +  "name": "deep", +  "version": "1.2.3" +} diff --git a/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/ref.js b/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/ref.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/ref.js diff --git a/node_modules/resolve/test/precedence.js b/node_modules/resolve/test/precedence.js new file mode 100644 index 000000000..c716f0e9f --- /dev/null +++ b/node_modules/resolve/test/precedence.js @@ -0,0 +1,23 @@ +var path = require('path'); +var test = require('tape'); +var resolve = require('../'); + +test('precedence', function (t) { +    t.plan(3); +    var dir = path.join(__dirname, 'precedence/aaa'); +     +    resolve('./', { basedir : dir }, function (err, res, pkg) { +        t.ifError(err); +        t.equal(res, path.join(dir, 'index.js')); +        t.equal(pkg.name, 'resolve'); +    }); +}); + +test('./ should not load ${dir}.js', function (t) { +    t.plan(1); +    var dir = path.join(__dirname, 'precedence/bbb'); +     +    resolve('./', { basedir : dir }, function (err, res, pkg) { +        t.ok(err); +    }); +}); diff --git a/node_modules/resolve/test/precedence/aaa.js b/node_modules/resolve/test/precedence/aaa.js new file mode 100644 index 000000000..a182397c5 --- /dev/null +++ b/node_modules/resolve/test/precedence/aaa.js @@ -0,0 +1 @@ +module.exports = 'wtf' diff --git a/node_modules/resolve/test/precedence/aaa/index.js b/node_modules/resolve/test/precedence/aaa/index.js new file mode 100644 index 000000000..993b03c2c --- /dev/null +++ b/node_modules/resolve/test/precedence/aaa/index.js @@ -0,0 +1 @@ +module.exports = 'okok' diff --git a/node_modules/resolve/test/precedence/aaa/main.js b/node_modules/resolve/test/precedence/aaa/main.js new file mode 100644 index 000000000..db38959d7 --- /dev/null +++ b/node_modules/resolve/test/precedence/aaa/main.js @@ -0,0 +1 @@ +console.log(require('./')) diff --git a/node_modules/resolve/test/precedence/bbb.js b/node_modules/resolve/test/precedence/bbb.js new file mode 100644 index 000000000..c8a9996b3 --- /dev/null +++ b/node_modules/resolve/test/precedence/bbb.js @@ -0,0 +1 @@ +module.exports '>_<' diff --git a/node_modules/resolve/test/precedence/bbb/main.js b/node_modules/resolve/test/precedence/bbb/main.js new file mode 100644 index 000000000..716b81d4b --- /dev/null +++ b/node_modules/resolve/test/precedence/bbb/main.js @@ -0,0 +1 @@ +console.log(require('./')); // should throw diff --git a/node_modules/resolve/test/resolver.js b/node_modules/resolve/test/resolver.js new file mode 100644 index 000000000..5bbb05f90 --- /dev/null +++ b/node_modules/resolve/test/resolver.js @@ -0,0 +1,281 @@ +var path = require('path'); +var test = require('tape'); +var resolve = require('../'); + +test('async foo', function (t) { +    t.plan(9); +    var dir = __dirname + '/resolver'; +     +    resolve('./foo', { basedir : dir }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/foo.js'); +        t.equal(pkg.name, 'resolve'); +    }); +     +    resolve('./foo.js', { basedir : dir }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/foo.js'); +        t.equal(pkg.name, 'resolve'); +    }); +     +    resolve('./foo', { basedir : dir, package: { main: 'resolver' } }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/foo.js'); +        t.equal(pkg.main, 'resolver'); +    }); +     +    resolve('./foo.js', { basedir : dir, package: { main: 'resolver' } }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/foo.js'); +        t.equal(pkg.main, 'resolver'); +    }); +     +    resolve('foo', { basedir : dir }, function (err) { +        t.equal(err.message, "Cannot find module 'foo' from '" + path.resolve(dir) + "'"); +    }); +}); + +test('bar', function (t) { +    t.plan(6); +    var dir = __dirname + '/resolver'; +     +    resolve('foo', { basedir : dir + '/bar' }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/bar/node_modules/foo/index.js'); +        t.equal(pkg, undefined); +    }); +     +    resolve('foo', { basedir : dir + '/bar' }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/bar/node_modules/foo/index.js'); +        t.equal(pkg, undefined); +    }); +     +    resolve('foo', { basedir : dir + '/bar', package: { main: 'bar' } }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/bar/node_modules/foo/index.js'); +        t.equal(pkg, undefined); +    }); +}); + +test('baz', function (t) { +    t.plan(4); +    var dir = __dirname + '/resolver'; +     +    resolve('./baz', { basedir : dir }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/baz/quux.js'); +        t.equal(pkg.main, 'quux.js'); +    }); +     +    resolve('./baz', { basedir : dir, package: { main: 'resolver' } }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/baz/quux.js'); +        t.equal(pkg.main, 'quux.js'); +    }); +}); + +test('biz', function (t) { +    t.plan(24); +    var dir = __dirname + '/resolver/biz/node_modules'; +     +    resolve('./grux', { basedir : dir }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/grux/index.js'); +        t.equal(pkg, undefined); +    }); +     +    resolve('./grux', { basedir : dir, package: { main: 'biz' } }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/grux/index.js'); +        t.equal(pkg.main, 'biz'); +    }); +     +    resolve('./garply', { basedir : dir }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/garply/lib/index.js'); +        t.equal(pkg.main, './lib'); +    }); +     +    resolve('./garply', { basedir : dir, package: { main: 'biz' } }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/garply/lib/index.js'); +        t.equal(pkg.main, './lib'); +    }); +     +    resolve('tiv', { basedir : dir + '/grux' }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/tiv/index.js'); +        t.equal(pkg, undefined); +    }); +     +    resolve('tiv', { basedir : dir + '/grux', package: { main: 'grux' } }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/tiv/index.js'); +        t.equal(pkg, undefined); +    }); +     +    resolve('tiv', { basedir : dir + '/garply' }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/tiv/index.js'); +        t.equal(pkg, undefined); +    }); +     +    resolve('tiv', { basedir : dir + '/garply', package: { main: './lib' } }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/tiv/index.js'); +        t.equal(pkg, undefined); +    }); +     +    resolve('grux', { basedir : dir + '/tiv' }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/grux/index.js'); +        t.equal(pkg, undefined); +    }); +     +    resolve('grux', { basedir : dir + '/tiv', package: { main: 'tiv' }  }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/grux/index.js'); +        t.equal(pkg, undefined); +    }); +     +    resolve('garply', { basedir : dir + '/tiv' }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/garply/lib/index.js'); +        t.equal(pkg.main, './lib'); +    }); +     +    resolve('garply', { basedir : dir + '/tiv', package: { main: 'tiv' } }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/garply/lib/index.js'); +        t.equal(pkg.main, './lib'); +    }); +}); + +test('quux', function (t) { +    t.plan(2); +    var dir = __dirname + '/resolver/quux'; +     +    resolve('./foo', { basedir : dir, package: { main: 'quux' } }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/foo/index.js'); +        t.equal(pkg.main, 'quux'); +    }); +}); + +test('normalize', function (t) { +    t.plan(2); +    var dir = __dirname + '/resolver/biz/node_modules/grux'; +     +    resolve('../grux', { basedir : dir }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/index.js'); +        t.equal(pkg, undefined); +    }); +}); + +test('cup', function (t) { +    t.plan(3); +    var dir = __dirname + '/resolver'; +     +    resolve('./cup', { basedir : dir, extensions : [ '.js', '.coffee' ] }, +    function (err, res) { +        if (err) t.fail(err); +        t.equal(res, dir + '/cup.coffee'); +    }); +     +    resolve('./cup.coffee', { basedir : dir }, function (err, res) { +        if (err) t.fail(err); +        t.equal(res, dir + '/cup.coffee'); +    }); +     +    resolve('./cup', { basedir : dir, extensions : [ '.js' ] }, +    function (err, res) { +        t.equal(err.message, "Cannot find module './cup' from '" + path.resolve(dir) + "'"); +    }); +}); + +test('mug', function (t) { +    t.plan(3); +    var dir = __dirname + '/resolver'; +     +    resolve('./mug', { basedir : dir }, function (err, res) { +        if (err) t.fail(err); +        t.equal(res, dir + '/mug.js'); +    }); +     +    resolve('./mug', { basedir : dir, extensions : [ '.coffee', '.js' ] }, +    function (err, res) { +        if (err) t.fail(err); +        t.equal(res, dir + '/mug.coffee'); +    }); +     +    resolve('./mug', { basedir : dir, extensions : [ '.js', '.coffee' ] }, +    function (err, res) { +        t.equal(res, dir + '/mug.js'); +    }); +}); + +test('other path', function (t) { +    t.plan(4); +    var resolverDir = __dirname + '/resolver'; +    var dir = resolverDir + '/bar'; +    var otherDir = resolverDir + '/other_path'; +     +    resolve('root', { basedir : dir, paths: [otherDir] }, function (err, res) { +        if (err) t.fail(err); +        t.equal(res, resolverDir + '/other_path/root.js'); +    }); +     +    resolve('lib/other-lib', { basedir : dir, paths: [otherDir] }, +    function (err, res) { +        if (err) t.fail(err); +        t.equal(res, resolverDir + '/other_path/lib/other-lib.js'); +    }); +     +    resolve('root', { basedir : dir, }, function (err, res) { +        t.equal(err.message, "Cannot find module 'root' from '" + path.resolve(dir) + "'"); +    }); +     +    resolve('zzz', { basedir : dir, paths: [otherDir] }, function (err, res) { +        t.equal(err.message, "Cannot find module 'zzz' from '" + path.resolve(dir) + "'"); +    }); +}); + +test('incorrect main', function (t) { +    t.plan(1) + +    var resolverDir = __dirname + '/resolver'; +    var dir = resolverDir + '/incorrect_main'; + +    resolve('./incorrect_main', { basedir : resolverDir }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, dir + '/index.js'); +    }); +}); + +test('without basedir', function (t) { +    t.plan(1); + +    var dir = __dirname + '/resolver/without_basedir'; +    var tester = require(dir + '/main.js'); + +    tester(t, function (err, res, pkg){ +        if (err) { +	  t.fail(err); +	} else { +          t.equal(res, dir + '/node_modules/mymodule.js'); +	} +    }); +}); + +test('#25: node modules with the same name as node stdlib modules', function (t) { +    t.plan(1); + +    var resolverDir = __dirname + '/resolver/punycode'; + +    resolve('punycode', { basedir : resolverDir }, function (err, res, pkg) { +        if (err) t.fail(err); +        t.equal(res, resolverDir + '/node_modules/punycode/index.js'); +    }); +}); diff --git a/node_modules/resolve/test/resolver/bar/node_modules/foo/index.js b/node_modules/resolve/test/resolver/bar/node_modules/foo/index.js new file mode 100644 index 000000000..bd816eaba --- /dev/null +++ b/node_modules/resolve/test/resolver/bar/node_modules/foo/index.js @@ -0,0 +1 @@ +module.exports = 1; diff --git a/node_modules/resolve/test/resolver/baz/doom.js b/node_modules/resolve/test/resolver/baz/doom.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/node_modules/resolve/test/resolver/baz/doom.js diff --git a/node_modules/resolve/test/resolver/baz/package.json b/node_modules/resolve/test/resolver/baz/package.json new file mode 100644 index 000000000..6b81dcddf --- /dev/null +++ b/node_modules/resolve/test/resolver/baz/package.json @@ -0,0 +1,3 @@ +{ +    "main" : "quux.js" +} diff --git a/node_modules/resolve/test/resolver/baz/quux.js b/node_modules/resolve/test/resolver/baz/quux.js new file mode 100644 index 000000000..bd816eaba --- /dev/null +++ b/node_modules/resolve/test/resolver/baz/quux.js @@ -0,0 +1 @@ +module.exports = 1; diff --git a/node_modules/resolve/test/resolver/biz/node_modules/garply/lib/index.js b/node_modules/resolve/test/resolver/biz/node_modules/garply/lib/index.js new file mode 100644 index 000000000..0379e29f7 --- /dev/null +++ b/node_modules/resolve/test/resolver/biz/node_modules/garply/lib/index.js @@ -0,0 +1 @@ +module.exports = 'hello garply'; diff --git a/node_modules/resolve/test/resolver/biz/node_modules/garply/package.json b/node_modules/resolve/test/resolver/biz/node_modules/garply/package.json new file mode 100644 index 000000000..babaac58f --- /dev/null +++ b/node_modules/resolve/test/resolver/biz/node_modules/garply/package.json @@ -0,0 +1,3 @@ +{ +    "main" : "./lib" +} diff --git a/node_modules/resolve/test/resolver/biz/node_modules/grux/index.js b/node_modules/resolve/test/resolver/biz/node_modules/grux/index.js new file mode 100644 index 000000000..49960555a --- /dev/null +++ b/node_modules/resolve/test/resolver/biz/node_modules/grux/index.js @@ -0,0 +1 @@ +module.exports = require('tiv') * 100; diff --git a/node_modules/resolve/test/resolver/biz/node_modules/tiv/index.js b/node_modules/resolve/test/resolver/biz/node_modules/tiv/index.js new file mode 100644 index 000000000..690aad34a --- /dev/null +++ b/node_modules/resolve/test/resolver/biz/node_modules/tiv/index.js @@ -0,0 +1 @@ +module.exports = 3; diff --git a/node_modules/resolve/test/resolver/cup.coffee b/node_modules/resolve/test/resolver/cup.coffee new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/node_modules/resolve/test/resolver/cup.coffee @@ -0,0 +1 @@ + diff --git a/node_modules/resolve/test/resolver/foo.js b/node_modules/resolve/test/resolver/foo.js new file mode 100644 index 000000000..bd816eaba --- /dev/null +++ b/node_modules/resolve/test/resolver/foo.js @@ -0,0 +1 @@ +module.exports = 1; diff --git a/node_modules/resolve/test/resolver/incorrect_main/index.js b/node_modules/resolve/test/resolver/incorrect_main/index.js new file mode 100644 index 000000000..bc1fb0a6f --- /dev/null +++ b/node_modules/resolve/test/resolver/incorrect_main/index.js @@ -0,0 +1,2 @@ +// this is the actual main file 'index.js', not 'wrong.js' like the package.json would indicate +module.exports = 1; diff --git a/node_modules/resolve/test/resolver/incorrect_main/package.json b/node_modules/resolve/test/resolver/incorrect_main/package.json new file mode 100644 index 000000000..1592ed393 --- /dev/null +++ b/node_modules/resolve/test/resolver/incorrect_main/package.json @@ -0,0 +1,3 @@ +{ +    "main" : "wrong.js" +} diff --git a/node_modules/resolve/test/resolver/mug.coffee b/node_modules/resolve/test/resolver/mug.coffee new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/node_modules/resolve/test/resolver/mug.coffee diff --git a/node_modules/resolve/test/resolver/mug.js b/node_modules/resolve/test/resolver/mug.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/node_modules/resolve/test/resolver/mug.js diff --git a/node_modules/resolve/test/resolver/other_path/lib/other-lib.js b/node_modules/resolve/test/resolver/other_path/lib/other-lib.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/node_modules/resolve/test/resolver/other_path/lib/other-lib.js diff --git a/node_modules/resolve/test/resolver/other_path/root.js b/node_modules/resolve/test/resolver/other_path/root.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/node_modules/resolve/test/resolver/other_path/root.js diff --git a/node_modules/resolve/test/resolver/punycode/node_modules/punycode/index.js b/node_modules/resolve/test/resolver/punycode/node_modules/punycode/index.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/node_modules/resolve/test/resolver/punycode/node_modules/punycode/index.js diff --git a/node_modules/resolve/test/resolver/quux/foo/index.js b/node_modules/resolve/test/resolver/quux/foo/index.js new file mode 100644 index 000000000..bd816eaba --- /dev/null +++ b/node_modules/resolve/test/resolver/quux/foo/index.js @@ -0,0 +1 @@ +module.exports = 1; diff --git a/node_modules/resolve/test/resolver/without_basedir/main.js b/node_modules/resolve/test/resolver/without_basedir/main.js new file mode 100644 index 000000000..5f211e9ca --- /dev/null +++ b/node_modules/resolve/test/resolver/without_basedir/main.js @@ -0,0 +1,6 @@ +resolve = require('../../../'); + +module.exports = function(t, cb) { +  resolve('mymodule', null, cb); +} + diff --git a/node_modules/resolve/test/resolver/without_basedir/node_modules/mymodule.js b/node_modules/resolve/test/resolver/without_basedir/node_modules/mymodule.js new file mode 100644 index 000000000..2b58aa408 --- /dev/null +++ b/node_modules/resolve/test/resolver/without_basedir/node_modules/mymodule.js @@ -0,0 +1 @@ +module.exports = "The tools we use have a profound (and devious!) influence on our thinking habits, and, therefore, on our thinking abilities.- E. Dijkstra" diff --git a/node_modules/resolve/test/resolver_sync.js b/node_modules/resolve/test/resolver_sync.js new file mode 100644 index 000000000..598253171 --- /dev/null +++ b/node_modules/resolve/test/resolver_sync.js @@ -0,0 +1,180 @@ +var test = require('tape'); +var resolve = require('../'); + +test('foo', function (t) { +    var dir = __dirname + '/resolver'; +     +    t.equal( +        resolve.sync('./foo', { basedir : dir }), +        dir + '/foo.js' +    ); +     +    t.equal( +        resolve.sync('./foo.js', { basedir : dir }), +        dir + '/foo.js' +    ); +     +    t.throws(function () { +        resolve.sync('foo', { basedir : dir }); +    }); +     +    t.end(); +}); + +test('bar', function (t) { +    var dir = __dirname + '/resolver'; +     +    t.equal( +        resolve.sync('foo', { basedir : dir + '/bar' }), +        dir + '/bar/node_modules/foo/index.js' +    ); +    t.end(); +}); + +test('baz', function (t) { +    var dir = __dirname + '/resolver'; +     +    t.equal( +        resolve.sync('./baz', { basedir : dir }), +        dir + '/baz/quux.js' +    ); +    t.end(); +}); + +test('biz', function (t) { +    var dir = __dirname + '/resolver/biz/node_modules'; +    t.equal( +        resolve.sync('./grux', { basedir : dir }), +        dir + '/grux/index.js' +    ); +     +    t.equal( +        resolve.sync('tiv', { basedir : dir + '/grux' }), +        dir + '/tiv/index.js' +    ); +     +    t.equal( +        resolve.sync('grux', { basedir : dir + '/tiv' }), +        dir + '/grux/index.js' +    ); +    t.end(); +}); + +test('normalize', function (t) { +    var dir = __dirname + '/resolver/biz/node_modules/grux'; +    t.equal( +        resolve.sync('../grux', { basedir : dir }), +        dir + '/index.js' +    ); +    t.end(); +}); + +test('cup', function (t) { +    var dir = __dirname + '/resolver'; +    t.equal( +        resolve.sync('./cup', { +            basedir : dir, +            extensions : [ '.js', '.coffee' ] +        }), +        dir + '/cup.coffee' +    ); +     +    t.equal( +        resolve.sync('./cup.coffee', { +            basedir : dir +        }), +        dir + '/cup.coffee' +    ); +     +    t.throws(function () { +        resolve.sync('./cup', { +            basedir : dir, +            extensions : [ '.js' ] +        }) +    }); +     +    t.end(); +}); + +test('mug', function (t) { +    var dir = __dirname + '/resolver'; +    t.equal( +        resolve.sync('./mug', { basedir : dir }), +        dir + '/mug.js' +    ); +     +    t.equal( +        resolve.sync('./mug', { +            basedir : dir, +            extensions : [ '.coffee', '.js' ] +        }), +        dir + '/mug.coffee' +    ); +     +    t.equal( +        resolve.sync('./mug', { +            basedir : dir, +            extensions : [ '.js', '.coffee' ] +        }), +        dir + '/mug.js' +    ); +     +    t.end(); +}); + +test('other path', function (t) { +    var resolverDir = __dirname + '/resolver'; +    var dir = resolverDir + '/bar'; +    var otherDir = resolverDir + '/other_path'; + +    var path = require('path'); +     +    t.equal( +        resolve.sync('root', { +            basedir : dir, +            paths: [otherDir] }), +        resolverDir + '/other_path/root.js' +    ); +     +    t.equal( +        resolve.sync('lib/other-lib', { +            basedir : dir, +            paths: [otherDir] }), +        resolverDir + '/other_path/lib/other-lib.js' +    ); + +    t.throws(function () { +        resolve.sync('root', { basedir : dir, }); +    }); +     +    t.throws(function () { +        resolve.sync('zzz', { +            basedir : dir, +            paths: [otherDir] }); +    }); +     +    t.end(); +}); + +test('incorrect main', function (t) { +    var resolverDir = __dirname + '/resolver'; +    var dir = resolverDir + '/incorrect_main'; + +    t.equal( +        resolve.sync('./incorrect_main', { basedir : resolverDir }), +        dir + '/index.js' +    ) + +    t.end() +}); + +test('#25: node modules with the same name as node stdlib modules', function (t) { +    var resolverDir = __dirname + '/resolver/punycode'; + +    t.equal( +        resolve.sync('punycode', { basedir : resolverDir }), +        resolverDir + '/node_modules/punycode/index.js' +    ) + +    t.end() +}); diff --git a/node_modules/resolve/test/subdirs.js b/node_modules/resolve/test/subdirs.js new file mode 100644 index 000000000..957abfe0c --- /dev/null +++ b/node_modules/resolve/test/subdirs.js @@ -0,0 +1,13 @@ +var test = require('tape'); +var resolve = require('../'); +var path = require('path'); + +test('subdirs', function (t) { +    t.plan(2); +     +    var dir = path.join(__dirname, '/subdirs'); +    resolve('a/b/c/x.json', { basedir: dir }, function (err, res) { +        t.ifError(err); +        t.equal(res, path.join(dir, 'node_modules/a/b/c/x.json')); +    }); +}); diff --git a/node_modules/resolve/test/subdirs/node_modules/a/b/c/x.json b/node_modules/resolve/test/subdirs/node_modules/a/b/c/x.json new file mode 100644 index 000000000..3cc0ecbed --- /dev/null +++ b/node_modules/resolve/test/subdirs/node_modules/a/b/c/x.json @@ -0,0 +1 @@ +[1,2,3] diff --git a/node_modules/resolve/test/subdirs/node_modules/a/package.json b/node_modules/resolve/test/subdirs/node_modules/a/package.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/node_modules/resolve/test/subdirs/node_modules/a/package.json @@ -0,0 +1 @@ +{}  | 
