|
|
import { BSONValue } from './bson_value'; |
|
|
import type { EJSONOptions } from './extended_json'; |
|
|
|
|
|
|
|
|
export interface Int32Extended { |
|
|
$numberInt: string; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export class Int32 extends BSONValue { |
|
|
get _bsontype(): 'Int32' { |
|
|
return 'Int32'; |
|
|
} |
|
|
|
|
|
value!: number; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
constructor(value: number | string) { |
|
|
super(); |
|
|
if ((value as unknown) instanceof Number) { |
|
|
value = value.valueOf(); |
|
|
} |
|
|
|
|
|
this.value = +value | 0; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
valueOf(): number { |
|
|
return this.value; |
|
|
} |
|
|
|
|
|
toString(radix?: number): string { |
|
|
return this.value.toString(radix); |
|
|
} |
|
|
|
|
|
toJSON(): number { |
|
|
return this.value; |
|
|
} |
|
|
|
|
|
|
|
|
toExtendedJSON(options?: EJSONOptions): number | Int32Extended { |
|
|
if (options && (options.relaxed || options.legacy)) return this.value; |
|
|
return { $numberInt: this.value.toString() }; |
|
|
} |
|
|
|
|
|
|
|
|
static fromExtendedJSON(doc: Int32Extended, options?: EJSONOptions): number | Int32 { |
|
|
return options && options.relaxed ? parseInt(doc.$numberInt, 10) : new Int32(doc.$numberInt); |
|
|
} |
|
|
|
|
|
|
|
|
[Symbol.for('nodejs.util.inspect.custom')](): string { |
|
|
return this.inspect(); |
|
|
} |
|
|
|
|
|
inspect(): string { |
|
|
return `new Int32(${this.valueOf()})`; |
|
|
} |
|
|
} |
|
|
|