File size: 1,530 Bytes
4888678 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | import { BSONValue } from './bson_value';
import type { EJSONOptions } from './extended_json';
/** @public */
export interface Int32Extended {
$numberInt: string;
}
/**
* A class representation of a BSON Int32 type.
* @public
* @category BSONType
*/
export class Int32 extends BSONValue {
get _bsontype(): 'Int32' {
return 'Int32';
}
value!: number;
/**
* Create an Int32 type
*
* @param value - the number we want to represent as an int32.
*/
constructor(value: number | string) {
super();
if ((value as unknown) instanceof Number) {
value = value.valueOf();
}
this.value = +value | 0;
}
/**
* Access the number value.
*
* @returns returns the wrapped int32 number.
*/
valueOf(): number {
return this.value;
}
toString(radix?: number): string {
return this.value.toString(radix);
}
toJSON(): number {
return this.value;
}
/** @internal */
toExtendedJSON(options?: EJSONOptions): number | Int32Extended {
if (options && (options.relaxed || options.legacy)) return this.value;
return { $numberInt: this.value.toString() };
}
/** @internal */
static fromExtendedJSON(doc: Int32Extended, options?: EJSONOptions): number | Int32 {
return options && options.relaxed ? parseInt(doc.$numberInt, 10) : new Int32(doc.$numberInt);
}
/** @internal */
[Symbol.for('nodejs.util.inspect.custom')](): string {
return this.inspect();
}
inspect(): string {
return `new Int32(${this.valueOf()})`;
}
}
|