You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
848 B
36 lines
848 B
'use strict'; |
|
|
|
const isBsonType = require('../helpers/isBsonType'); |
|
const assert = require('assert'); |
|
|
|
/** |
|
* Given a value, cast it to a Int32, or throw an `Error` if the value |
|
* cannot be casted. `null` and `undefined` are considered valid. |
|
* |
|
* @param {Any} value |
|
* @return {Number} |
|
* @throws {Error} if `value` does not represent an integer, or is outside the bounds of an 32-bit integer. |
|
* @api private |
|
*/ |
|
|
|
module.exports = function castInt32(val) { |
|
if (val == null) { |
|
return val; |
|
} |
|
if (val === '') { |
|
return null; |
|
} |
|
|
|
const coercedVal = isBsonType(val, 'Long') ? val.toNumber() : Number(val); |
|
|
|
const INT32_MAX = 0x7FFFFFFF; |
|
const INT32_MIN = -0x80000000; |
|
|
|
if (coercedVal === (coercedVal | 0) && |
|
coercedVal >= INT32_MIN && |
|
coercedVal <= INT32_MAX |
|
) { |
|
return coercedVal; |
|
} |
|
assert.ok(false); |
|
};
|
|
|