diff --git a/lib/internal/validators.js b/lib/internal/validators.js index 3cc9c2820a1b09..9ee4090e4be2b7 100644 --- a/lib/internal/validators.js +++ b/lib/internal/validators.js @@ -5,12 +5,14 @@ const { codes: { ERR_INVALID_ARG_TYPE, ERR_INVALID_ARG_VALUE, - ERR_OUT_OF_RANGE + ERR_OUT_OF_RANGE, + ERR_UNKNOWN_SIGNAL } } = require('internal/errors'); const { isArrayBufferView } = require('internal/util/types'); +const { signals } = internalBinding('constants').os; function isInt32(value) { return value === (value | 0); @@ -110,6 +112,20 @@ function validateNumber(value, name) { throw new ERR_INVALID_ARG_TYPE(name, 'number', value); } +function validateSignalName(signal, name = 'signal') { + if (typeof signal !== 'string') + throw new ERR_INVALID_ARG_TYPE(name, 'string', signal); + + if (signals[signal] === undefined) { + if (signals[signal.toUpperCase()] !== undefined) { + throw new ERR_UNKNOWN_SIGNAL(signal + + ' (signals must use all capital letters)'); + } + + throw new ERR_UNKNOWN_SIGNAL(signal); + } +} + // TODO(BridgeAR): We have multiple validation functions that call // `require('internal/utils').toBuf()` before validating for array buffer views. // Those should likely also be consolidated in here. @@ -130,5 +146,6 @@ module.exports = { validateInt32, validateUint32, validateString, - validateNumber + validateNumber, + validateSignalName };