|
10 | 10 | // value statically and permanently identifies the error. While the error |
11 | 11 | // message may change, the code should not. |
12 | 12 |
|
13 | | -const { Object } = primordials; |
| 13 | +const { Object, Math } = primordials; |
14 | 14 |
|
15 | 15 | const kCode = Symbol('code'); |
16 | 16 | const kInfo = Symbol('info'); |
@@ -574,6 +574,17 @@ function oneOf(expected, thing) { |
574 | 574 | } |
575 | 575 | } |
576 | 576 |
|
| 577 | +// Only use this for integers! Decimal numbers do not work with this function. |
| 578 | +function addNumericalSeparator(val) { |
| 579 | + let res = ''; |
| 580 | + let i = val.length; |
| 581 | + const start = val[0] === '-' ? 1 : 0; |
| 582 | + for (; i >= start + 4; i -= 3) { |
| 583 | + res = `_${val.slice(i - 3, i)}${res}`; |
| 584 | + } |
| 585 | + return `${val.slice(0, i)}${res}`; |
| 586 | +} |
| 587 | + |
577 | 588 | module.exports = { |
578 | 589 | addCodeToName, // Exported for NghttpError |
579 | 590 | codes, |
@@ -990,7 +1001,20 @@ E('ERR_OUT_OF_RANGE', |
990 | 1001 | assert(range, 'Missing "range" argument'); |
991 | 1002 | let msg = replaceDefaultBoolean ? str : |
992 | 1003 | `The value of "${str}" is out of range.`; |
993 | | - msg += ` It must be ${range}. Received ${input}`; |
| 1004 | + let received; |
| 1005 | + if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) { |
| 1006 | + received = addNumericalSeparator(String(input)); |
| 1007 | + // eslint-disable-next-line valid-typeof |
| 1008 | + } else if (typeof input === 'bigint') { |
| 1009 | + received = String(input); |
| 1010 | + if (input > 2n ** 32n || input < -(2n ** 32n)) { |
| 1011 | + received = addNumericalSeparator(received); |
| 1012 | + } |
| 1013 | + received += 'n'; |
| 1014 | + } else { |
| 1015 | + received = lazyInternalUtilInspect().inspect(input); |
| 1016 | + } |
| 1017 | + msg += ` It must be ${range}. Received ${received}`; |
994 | 1018 | return msg; |
995 | 1019 | }, RangeError); |
996 | 1020 | E('ERR_REQUIRE_ESM', 'Must use import to load ES Module: %s', Error); |
|
0 commit comments