diff --git a/lib/internal/modules/cjs/helpers.js b/lib/internal/modules/cjs/helpers.js index df727ff3c88a45..b35626af603061 100644 --- a/lib/internal/modules/cjs/helpers.js +++ b/lib/internal/modules/cjs/helpers.js @@ -23,7 +23,7 @@ function makeRequireFunction(mod) { function paths(request) { validateString(request, 'request'); - return Module._resolveLookupPaths(request, mod, true); + return Module._resolveLookupPaths(request, mod); } resolve.paths = paths; diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js index 2f06d355460125..3eea4d4d2f5834 100644 --- a/lib/internal/modules/cjs/loader.js +++ b/lib/internal/modules/cjs/loader.js @@ -63,16 +63,9 @@ let ModuleJob; let createDynamicModule; const { - CHAR_UPPERCASE_A, - CHAR_LOWERCASE_A, - CHAR_UPPERCASE_Z, - CHAR_LOWERCASE_Z, CHAR_FORWARD_SLASH, CHAR_BACKWARD_SLASH, - CHAR_COLON, - CHAR_UNDERSCORE, - CHAR_0, - CHAR_9, + CHAR_COLON } = require('internal/constants'); const isWindows = process.platform === 'win32'; @@ -466,14 +459,10 @@ if (isWindows) { }; } - -// 'index.' character codes -const indexChars = [ 105, 110, 100, 101, 120, 46 ]; -const indexLen = indexChars.length; -Module._resolveLookupPaths = function(request, parent, newReturn) { +Module._resolveLookupPaths = function(request, parent) { if (NativeModule.canBeRequiredByUsers(request)) { debug('looking for %j in []', request); - return (newReturn ? null : [request, []]); + return null; } // Check for node modules paths. @@ -489,71 +478,24 @@ Module._resolveLookupPaths = function(request, parent, newReturn) { } debug('looking for %j in %j', request, paths); - return (newReturn ? (paths.length > 0 ? paths : null) : [request, paths]); + return paths.length > 0 ? paths : null; } // With --eval, parent.id is not set and parent.filename is null. if (!parent || !parent.id || !parent.filename) { // Make require('./path/to/foo') work - normally the path is taken // from realpath(__filename) but with eval there is no filename - var mainPaths = ['.'].concat(Module._nodeModulePaths('.'), modulePaths); + const mainPaths = ['.'].concat(Module._nodeModulePaths('.'), modulePaths); debug('looking for %j in %j', request, mainPaths); - return (newReturn ? mainPaths : [request, mainPaths]); - } - - // Is the parent an index module? - // We can assume the parent has a valid extension, - // as it already has been accepted as a module. - const base = path.basename(parent.filename); - var parentIdPath; - if (base.length > indexLen) { - var i = 0; - for (; i < indexLen; ++i) { - if (indexChars[i] !== base.charCodeAt(i)) - break; - } - if (i === indexLen) { - // We matched 'index.', let's validate the rest - for (; i < base.length; ++i) { - const code = base.charCodeAt(i); - if (code !== CHAR_UNDERSCORE && - (code < CHAR_0 || code > CHAR_9) && - (code < CHAR_UPPERCASE_A || code > CHAR_UPPERCASE_Z) && - (code < CHAR_LOWERCASE_A || code > CHAR_LOWERCASE_Z)) - break; - } - if (i === base.length) { - // Is an index module - parentIdPath = parent.id; - } else { - // Not an index module - parentIdPath = path.dirname(parent.id); - } - } else { - // Not an index module - parentIdPath = path.dirname(parent.id); - } - } else { - // Not an index module - parentIdPath = path.dirname(parent.id); - } - var id = path.resolve(parentIdPath, request); - - // Make sure require('./path') and require('path') get distinct ids, even - // when called from the toplevel js file - if (parentIdPath === '.' && - id.indexOf('/') === -1 && - (!isWindows || id.indexOf('\\') === -1)) { - id = './' + id; + return mainPaths; } - debug('RELATIVE: requested: %s set ID to: %s from %s', request, id, - parent.id); + debug('RELATIVE: requested: %s from parent.id %s', request, parent.id); const parentDir = [path.dirname(parent.filename)]; - debug('looking for %j in %j', id, parentDir); - return (newReturn ? parentDir : [id, parentDir]); + debug('looking for %j', parentDir); + return parentDir; }; // Check the cache for the requested file. @@ -625,7 +567,7 @@ Module._resolveFilename = function(request, parent, isMain, options) { for (var i = 0; i < options.paths.length; i++) { const path = options.paths[i]; fakeParent.paths = Module._nodeModulePaths(path); - const lookupPaths = Module._resolveLookupPaths(request, fakeParent, true); + const lookupPaths = Module._resolveLookupPaths(request, fakeParent); for (var j = 0; j < lookupPaths.length; j++) { if (!paths.includes(lookupPaths[j])) @@ -633,7 +575,7 @@ Module._resolveFilename = function(request, parent, isMain, options) { } } } else { - paths = Module._resolveLookupPaths(request, parent, true); + paths = Module._resolveLookupPaths(request, parent); } // Look up the filename first, since that's the cache key. diff --git a/lib/repl.js b/lib/repl.js index 288278687cf75a..438a1d76271db2 100644 --- a/lib/repl.js +++ b/lib/repl.js @@ -855,8 +855,7 @@ REPLServer.prototype.createContext = function() { } const module = new CJSModule(''); - module.paths = - CJSModule._resolveLookupPaths('', parentModule, true) || []; + module.paths = CJSModule._resolveLookupPaths('', parentModule) || []; Object.defineProperty(context, 'module', { configurable: true, diff --git a/test/parallel/test-module-relative-lookup.js b/test/parallel/test-module-relative-lookup.js index e9d6112da752f8..1bd505392cd968 100644 --- a/test/parallel/test-module-relative-lookup.js +++ b/test/parallel/test-module-relative-lookup.js @@ -10,12 +10,11 @@ function testFirstInPath(moduleName, isLocalModule) { assert.strictEqual : assert.notStrictEqual; - const lookupResults = _module._resolveLookupPaths(moduleName); + let paths = _module._resolveLookupPaths(moduleName); - let paths = lookupResults[1]; assertFunction(paths[0], '.'); - paths = _module._resolveLookupPaths(moduleName, null, true); + paths = _module._resolveLookupPaths(moduleName, null); assertFunction(paths && paths[0], '.'); }