Skip to content

Commit 3e44b8c

Browse files
committed
lib: extract validateNumber validator
Pulls out another common argument validator to `internal/validators` PR-URL: #22249 Reviewed-By: Bryan English <[email protected]> Reviewed-By: Richard Lau <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Trivikram Kamat <[email protected]>
1 parent 682f9b4 commit 3e44b8c

File tree

8 files changed

+34
-53
lines changed

8 files changed

+34
-53
lines changed

lib/dgram.js

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,11 @@ const {
3939
ERR_SOCKET_DGRAM_NOT_RUNNING,
4040
ERR_INVALID_FD_TYPE
4141
} = errors.codes;
42-
const { isInt32, validateString } = require('internal/validators');
42+
const {
43+
isInt32,
44+
validateString,
45+
validateNumber
46+
} = require('internal/validators');
4347
const { Buffer } = require('buffer');
4448
const util = require('util');
4549
const { isUint8Array } = require('internal/util/types');
@@ -308,18 +312,9 @@ Socket.prototype.sendto = function(buffer,
308312
port,
309313
address,
310314
callback) {
311-
if (typeof offset !== 'number') {
312-
throw new ERR_INVALID_ARG_TYPE('offset', 'number', offset);
313-
}
314-
315-
if (typeof length !== 'number') {
316-
throw new ERR_INVALID_ARG_TYPE('length', 'number', length);
317-
}
318-
319-
if (typeof port !== 'number') {
320-
throw new ERR_INVALID_ARG_TYPE('port', 'number', port);
321-
}
322-
315+
validateNumber(offset, 'offset');
316+
validateNumber(length, 'length');
317+
validateNumber(port, 'port');
323318
validateString(address, 'address');
324319

325320
this.send(buffer, offset, length, port, address, callback);
@@ -580,9 +575,7 @@ Socket.prototype.setBroadcast = function(arg) {
580575

581576

582577
Socket.prototype.setTTL = function(ttl) {
583-
if (typeof ttl !== 'number') {
584-
throw new ERR_INVALID_ARG_TYPE('ttl', 'number', ttl);
585-
}
578+
validateNumber(ttl, 'ttl');
586579

587580
var err = this[kStateSymbol].handle.setTTL(ttl);
588581
if (err) {
@@ -594,9 +587,7 @@ Socket.prototype.setTTL = function(ttl) {
594587

595588

596589
Socket.prototype.setMulticastTTL = function(ttl) {
597-
if (typeof ttl !== 'number') {
598-
throw new ERR_INVALID_ARG_TYPE('ttl', 'number', ttl);
599-
}
590+
validateNumber(ttl, 'ttl');
600591

601592
var err = this[kStateSymbol].handle.setMulticastTTL(ttl);
602593
if (err) {

lib/internal/buffer.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const {
66
ERR_INVALID_ARG_TYPE,
77
ERR_OUT_OF_RANGE
88
} = require('internal/errors').codes;
9+
const { validateNumber } = require('internal/validators');
910
const { setupBufferJS } = binding;
1011

1112
// Remove from the binding so that function is only available as exported here.
@@ -38,9 +39,7 @@ function checkInt(value, min, max, buf, offset, byteLength) {
3839
}
3940

4041
function checkNumberType(value, type) {
41-
if (typeof value !== 'number') {
42-
throw new ERR_INVALID_ARG_TYPE(type || 'offset', 'number', value);
43-
}
42+
validateNumber(value, type || 'offset');
4443
}
4544

4645
function boundsError(value, length, type) {

lib/internal/crypto/random.js

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,14 @@ const {
88
ERR_INVALID_CALLBACK,
99
ERR_OUT_OF_RANGE
1010
} = require('internal/errors').codes;
11+
const { validateNumber } = require('internal/validators');
1112
const { isArrayBufferView } = require('internal/util/types');
1213

1314
const kMaxUint32 = 2 ** 32 - 1;
1415
const kMaxPossibleLength = Math.min(kMaxLength, kMaxUint32);
1516

1617
function assertOffset(offset, elementSize, length) {
17-
if (typeof offset !== 'number') {
18-
throw new ERR_INVALID_ARG_TYPE('offset', 'number', offset);
19-
}
20-
18+
validateNumber(offset, 'offset');
2119
offset *= elementSize;
2220

2321
const maxLength = Math.min(length, kMaxPossibleLength);
@@ -29,10 +27,7 @@ function assertOffset(offset, elementSize, length) {
2927
}
3028

3129
function assertSize(size, elementSize, offset, length) {
32-
if (typeof size !== 'number') {
33-
throw new ERR_INVALID_ARG_TYPE('size', 'number', size);
34-
}
35-
30+
validateNumber(size, 'size');
3631
size *= elementSize;
3732

3833
if (Number.isNaN(size) || size > kMaxPossibleLength || size < 0) {

lib/internal/fs/streams.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const {
88
ERR_INVALID_ARG_TYPE,
99
ERR_OUT_OF_RANGE
1010
} = require('internal/errors').codes;
11+
const { validateNumber } = require('internal/validators');
1112
const fs = require('fs');
1213
const { Buffer } = require('buffer');
1314
const {
@@ -65,8 +66,7 @@ function ReadStream(path, options) {
6566

6667
if (this.start !== undefined) {
6768
if (!Number.isSafeInteger(this.start)) {
68-
if (typeof this.start !== 'number')
69-
throw new ERR_INVALID_ARG_TYPE('start', 'number', this.start);
69+
validateNumber(this.start, 'start');
7070
if (!Number.isInteger(this.start))
7171
throw new ERR_OUT_OF_RANGE('start', 'an integer', this.start);
7272
throw new ERR_OUT_OF_RANGE(

lib/internal/http2/core.js

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ const {
7676
ERR_SOCKET_CLOSED
7777
}
7878
} = require('internal/errors');
79+
const { validateNumber } = require('internal/validators');
7980
const { utcDate } = require('internal/http');
8081
const { onServerStream,
8182
Http2ServerRequest,
@@ -1002,8 +1003,7 @@ class Http2Session extends EventEmitter {
10021003
if (this.destroyed)
10031004
throw new ERR_HTTP2_INVALID_SESSION();
10041005

1005-
if (typeof id !== 'number')
1006-
throw new ERR_INVALID_ARG_TYPE('id', 'number', id);
1006+
validateNumber(id, 'id');
10071007
if (id <= 0 || id > kMaxStreams)
10081008
throw new ERR_OUT_OF_RANGE('id', `> 0 and <= ${kMaxStreams}`, id);
10091009
this[kHandle].setNextStreamID(id);
@@ -1145,12 +1145,8 @@ class Http2Session extends EventEmitter {
11451145
['Buffer', 'TypedArray', 'DataView'],
11461146
opaqueData);
11471147
}
1148-
if (typeof code !== 'number') {
1149-
throw new ERR_INVALID_ARG_TYPE('code', 'number', code);
1150-
}
1151-
if (typeof lastStreamID !== 'number') {
1152-
throw new ERR_INVALID_ARG_TYPE('lastStreamID', 'number', lastStreamID);
1153-
}
1148+
validateNumber(code, 'code');
1149+
validateNumber(lastStreamID, 'lastStreamID');
11541150

11551151
const goawayFn = submitGoaway.bind(this, code, lastStreamID, opaqueData);
11561152
if (this.connecting) {
@@ -1832,8 +1828,7 @@ class Http2Stream extends Duplex {
18321828
// close, it is still possible to queue up PRIORITY and RST_STREAM frames,
18331829
// but no DATA and HEADERS frames may be sent.
18341830
close(code = NGHTTP2_NO_ERROR, callback) {
1835-
if (typeof code !== 'number')
1836-
throw new ERR_INVALID_ARG_TYPE('code', 'number', code);
1831+
validateNumber(code, 'code');
18371832
if (code < 0 || code > kMaxInt)
18381833
throw new ERR_OUT_OF_RANGE('code', `>= 0 && <= ${kMaxInt}`, code);
18391834
if (callback !== undefined && typeof callback !== 'function')
@@ -2327,8 +2322,7 @@ class ServerHttp2Stream extends Http2Stream {
23272322
this[kState].flags |= STREAM_FLAGS_HAS_TRAILERS;
23282323
}
23292324

2330-
if (typeof fd !== 'number')
2331-
throw new ERR_INVALID_ARG_TYPE('fd', 'number', fd);
2325+
validateNumber(fd, 'fd');
23322326

23332327
debug(`Http2Stream ${this[kID]} [Http2Session ` +
23342328
`${sessionName(session[kType])}]: initiating response from fd`);

lib/internal/timers.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ const async_id_symbol = Symbol('asyncId');
1212
const trigger_async_id_symbol = Symbol('triggerId');
1313

1414
const {
15-
ERR_INVALID_ARG_TYPE,
1615
ERR_INVALID_CALLBACK,
1716
ERR_OUT_OF_RANGE
1817
} = require('internal/errors').codes;
18+
const { validateNumber } = require('internal/validators');
1919

2020
// Timeout values > TIMEOUT_MAX are set to 1.
2121
const TIMEOUT_MAX = 2 ** 31 - 1;
@@ -126,10 +126,7 @@ function setUnrefTimeout(callback, after, arg1, arg2, arg3) {
126126

127127
// Type checking used by timers.enroll() and Socket#setTimeout()
128128
function validateTimerDuration(msecs) {
129-
if (typeof msecs !== 'number') {
130-
throw new ERR_INVALID_ARG_TYPE('msecs', 'number', msecs);
131-
}
132-
129+
validateNumber(msecs, 'msecs');
133130
if (msecs < 0 || !isFinite(msecs)) {
134131
throw new ERR_OUT_OF_RANGE('msecs', 'a non-negative finite number', msecs);
135132
}

lib/internal/validators.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,18 @@ function validateString(value, name) {
125125
throw new ERR_INVALID_ARG_TYPE(name, 'string', value);
126126
}
127127

128+
function validateNumber(value, name) {
129+
if (typeof value !== 'number')
130+
throw new ERR_INVALID_ARG_TYPE(name, 'number', value);
131+
}
132+
128133
module.exports = {
129134
isInt32,
130135
isUint32,
131136
validateMode,
132137
validateInteger,
133138
validateInt32,
134139
validateUint32,
135-
validateString
140+
validateString,
141+
validateNumber
136142
};

lib/util.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ const {
2727
ERR_INVALID_ARG_TYPE,
2828
ERR_OUT_OF_RANGE
2929
} = errors.codes;
30+
const { validateNumber } = require('internal/validators');
3031
const { TextDecoder, TextEncoder } = require('internal/encoding');
3132
const { isBuffer } = require('buffer').Buffer;
3233

@@ -1455,9 +1456,7 @@ function callbackify(original) {
14551456
}
14561457

14571458
function getSystemErrorName(err) {
1458-
if (typeof err !== 'number') {
1459-
throw new ERR_INVALID_ARG_TYPE('err', 'number', err);
1460-
}
1459+
validateNumber(err, 'err');
14611460
if (err >= 0 || !Number.isSafeInteger(err)) {
14621461
throw new ERR_OUT_OF_RANGE('err', 'a negative integer', err);
14631462
}

0 commit comments

Comments
 (0)