12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- 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 {
- _bsontype!: 'Int32';
- value!: number;
- /**
- * Create an Int32 type
- *
- * @param value - the number we want to represent as an int32.
- */
- constructor(value: number | string) {
- if (!(this instanceof Int32)) return new Int32(value);
- 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()})`;
- }
- }
- Object.defineProperty(Int32.prototype, '_bsontype', { value: 'Int32' });
|