From 28e4e43e513ae90e8a4236dbae7f3442ab8dbb4f Mon Sep 17 00:00:00 2001 From: Ruben Bridgewater Date: Mon, 19 Mar 2018 14:21:27 +0100 Subject: [PATCH] errors: make input mandatory Using ERR_INVALID_ARG_TYPE will now require the received value as well. This makes sure the errors are always expressive. It also drops support for using an array as name argument. PR-URL: https://github.com/nodejs/node/pull/19445 Reviewed-By: James M Snell Reviewed-By: Matteo Collina Reviewed-By: Joyee Cheung Reviewed-By: Anna Henningsen --- lib/internal/errors.js | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/lib/internal/errors.js b/lib/internal/errors.js index 7c87dd57d26..a8c4bfb3c33 100644 --- a/lib/internal/errors.js +++ b/lib/internal/errors.js @@ -936,7 +936,8 @@ function sysError(code, syscall, path, dest, messages.set('ERR_SYSTEM_ERROR', sysError); function invalidArgType(name, expected, actual) { - internalAssert(name, 'name is required'); + internalAssert(typeof name === 'string'); + internalAssert(arguments.length === 3); // determiner: 'must be' or 'must not be' let determiner; @@ -948,21 +949,16 @@ function invalidArgType(name, expected, actual) { } let msg; - if (Array.isArray(name)) { - var names = name.map((val) => `"${val}"`).join(', '); - msg = `The ${names} arguments ${determiner} ${oneOf(expected, 'type')}`; - } else if (name.endsWith(' argument')) { - // for the case like 'first argument' + if (name.endsWith(' argument')) { + // For cases like 'first argument' msg = `The ${name} ${determiner} ${oneOf(expected, 'type')}`; } else { const type = name.includes('.') ? 'property' : 'argument'; msg = `The "${name}" ${type} ${determiner} ${oneOf(expected, 'type')}`; } - // If actual value received, output it // TODO(BridgeAR): Improve the output by showing `null` and similar. - if (arguments.length === 3) - msg += `. Received type ${typeof actual}`; + msg += `. Received type ${typeof actual}`; return msg; }