Server IP : 162.213.251.212 / Your IP : 3.144.230.81 [ Web Server : LiteSpeed System : Linux business55.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64 User : allssztx ( 535) PHP Version : 8.1.31 Disable Function : NONE Domains : 1 Domains MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/allssztx/clarkesmusicservices.com/node_modules/bson/src/ |
Upload File : |
import { BSONValue } from './bson_value'; import { BSON_INT32_MAX, BSON_INT32_MIN } from './constants'; import { BSONError } from './error'; import type { EJSONOptions } from './extended_json'; import { type InspectFn, defaultInspect } from './parser/utils'; import { removeLeadingZerosAndExplicitPlus } from './utils/string_utils'; /** @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; } /** * Attempt to create an Int32 type from string. * * This method will throw a BSONError on any string input that is not representable as an Int32. * Notably, this method will also throw on the following string formats: * - Strings in non-decimal formats (exponent notation, binary, hex, or octal digits) * - Strings non-numeric and non-leading sign characters (ex: '2.0', '24,000') * - Strings with leading and/or trailing whitespace * * Strings with leading zeros, however, are allowed. * * @param value - the string we want to represent as an int32. */ static fromString(value: string): Int32 { const cleanedValue = removeLeadingZerosAndExplicitPlus(value); const coercedValue = Number(value); if (BSON_INT32_MAX < coercedValue) { throw new BSONError(`Input: '${value}' is larger than the maximum value for Int32`); } else if (BSON_INT32_MIN > coercedValue) { throw new BSONError(`Input: '${value}' is smaller than the minimum value for Int32`); } else if (!Number.isSafeInteger(coercedValue)) { throw new BSONError(`Input: '${value}' is not a safe integer`); } else if (coercedValue.toString() !== cleanedValue) { // catch all case throw new BSONError(`Input: '${value}' is not a valid Int32 string`); } return new Int32(coercedValue); } /** * 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); } inspect(depth?: number, options?: unknown, inspect?: InspectFn): string { inspect ??= defaultInspect; return `new Int32(${inspect(this.value, options)})`; } }