diff --git a/lib/internal/module.js b/lib/internal/module.js index d2140411552..5fa77a11126 100644 --- a/lib/internal/module.js +++ b/lib/internal/module.js @@ -1,5 +1,7 @@ 'use strict'; +const errors = require('internal/errors'); + // Invoke with makeRequireFunction(module) where |module| is the Module object // to use as the context for the require() function. function makeRequireFunction(mod) { @@ -15,6 +17,10 @@ function makeRequireFunction(mod) { } function resolve(request, options) { + if (typeof request !== 'string') { + throw new errors.Error('ERR_INVALID_ARG_TYPE', + 'request', 'string', request); + } return Module._resolveFilename(request, mod, false, options); } diff --git a/test/parallel/test-require-resolve.js b/test/parallel/test-require-resolve.js index 4fbf697faf5..a2bc05ada4d 100644 --- a/test/parallel/test-require-resolve.js +++ b/test/parallel/test-require-resolve.js @@ -20,7 +20,7 @@ // USE OR OTHER DEALINGS IN THE SOFTWARE. 'use strict'; -require('../common'); +const common = require('../common'); const fixtures = require('../common/fixtures'); const assert = require('assert'); @@ -38,3 +38,13 @@ assert.strictEqual('path', require.resolve('path')); // Test configurable resolve() paths. require(fixtures.path('require-resolve.js')); require(fixtures.path('resolve-paths', 'default', 'verify-paths.js')); + +const re = /^The "request" argument must be of type string\. Received type \w+$/; +[1, false, null, undefined, {}].forEach((value) => { + common.expectsError( + () => { require.resolve(value); }, + { + code: 'ERR_INVALID_ARG_TYPE', + message: re + }); +});