bson
Version:
A bson parser for node.js and the browser
1,347 lines (1,294 loc) • 62.8 kB
TypeScript
/**
* A class representation of the BSON Binary type.
* @public
* @category BSONType
*/
export declare class Binary extends BSONValue {
get _bsontype(): 'Binary';
/* Excluded from this release type: BSON_BINARY_SUBTYPE_DEFAULT */
/** Initial buffer default size */
static readonly BUFFER_SIZE = 256;
/** Default BSON type */
static readonly SUBTYPE_DEFAULT = 0;
/** Function BSON type */
static readonly SUBTYPE_FUNCTION = 1;
/** Byte Array BSON type */
static readonly SUBTYPE_BYTE_ARRAY = 2;
/** Deprecated UUID BSON type @deprecated Please use SUBTYPE_UUID */
static readonly SUBTYPE_UUID_OLD = 3;
/** UUID BSON type */
static readonly SUBTYPE_UUID = 4;
/** MD5 BSON type */
static readonly SUBTYPE_MD5 = 5;
/** Encrypted BSON type */
static readonly SUBTYPE_ENCRYPTED = 6;
/** Column BSON type */
static readonly SUBTYPE_COLUMN = 7;
/** Sensitive BSON type */
static readonly SUBTYPE_SENSITIVE = 8;
/** Vector BSON type */
static readonly SUBTYPE_VECTOR = 9;
/** User BSON type */
static readonly SUBTYPE_USER_DEFINED = 128;
/** datatype of a Binary Vector (subtype: 9) */
static readonly VECTOR_TYPE: Readonly<{
readonly Int8: 3;
readonly Float32: 39;
readonly PackedBit: 16;
}>;
/**
* The bytes of the Binary value.
*
* The format of a Binary value in BSON is defined as:
* ```txt
* binary ::= int32 subtype (byte*)
* ```
*
* This `buffer` is the "(byte*)" segment.
*
* Unless the value is subtype 2, then deserialize will read the first 4 bytes as an int32 and set this to the remaining bytes.
*
* ```txt
* binary ::= int32 unsigned_byte(2) int32 (byte*)
* ```
*
* @see https://bsonspec.org/spec.html
*/
buffer: Uint8Array;
/**
* The binary subtype.
*
* Current defined values are:
*
* - `unsigned_byte(0)` Generic binary subtype
* - `unsigned_byte(1)` Function
* - `unsigned_byte(2)` Binary (Deprecated)
* - `unsigned_byte(3)` UUID (Deprecated)
* - `unsigned_byte(4)` UUID
* - `unsigned_byte(5)` MD5
* - `unsigned_byte(6)` Encrypted BSON value
* - `unsigned_byte(7)` Compressed BSON column
* - `unsigned_byte(8)` Sensitive
* - `unsigned_byte(9)` Vector
* - `unsigned_byte(128)` - `unsigned_byte(255)` User defined
*/
sub_type: number;
/**
* The Binary's `buffer` can be larger than the Binary's content.
* This property is used to determine where the content ends in the buffer.
*/
position: number;
/**
* Create a new Binary instance.
* @param buffer - a buffer object containing the binary data.
* @param subType - the option binary type.
*/
constructor(buffer?: BinarySequence, subType?: number);
/**
* Updates this binary with byte_value.
*
* @param byteValue - a single byte we wish to write.
*/
put(byteValue: string | number | Uint8Array | number[]): void;
/**
* Writes a buffer to the binary.
*
* @param sequence - a string or buffer to be written to the Binary BSON object.
* @param offset - specify the binary of where to write the content.
*/
write(sequence: BinarySequence, offset: number): void;
/**
* Returns a view of **length** bytes starting at **position**.
*
* @param position - read from the given position in the Binary.
* @param length - the number of bytes to read.
*/
read(position: number, length: number): Uint8Array;
/** returns a view of the binary value as a Uint8Array */
value(): Uint8Array;
/** the length of the binary sequence */
length(): number;
toJSON(): string;
toString(encoding?: 'hex' | 'base64' | 'utf8' | 'utf-8'): string;
/* Excluded from this release type: toExtendedJSON */
toUUID(): UUID;
/** Creates an Binary instance from a hex digit string */
static createFromHexString(hex: string, subType?: number): Binary;
/** Creates an Binary instance from a base64 string */
static createFromBase64(base64: string, subType?: number): Binary;
/* Excluded from this release type: fromExtendedJSON */
inspect(depth?: number, options?: unknown, inspect?: InspectFn): string;
/**
* If this Binary represents a Int8 Vector (`binary.buffer[0] === Binary.VECTOR_TYPE.Int8`),
* returns a copy of the bytes in a new Int8Array.
*
* If the Binary is not a Vector, or the datatype is not Int8, an error is thrown.
*/
toInt8Array(): Int8Array;
/**
* If this Binary represents a Float32 Vector (`binary.buffer[0] === Binary.VECTOR_TYPE.Float32`),
* returns a copy of the bytes in a new Float32Array.
*
* If the Binary is not a Vector, or the datatype is not Float32, an error is thrown.
*/
toFloat32Array(): Float32Array;
/**
* If this Binary represents packed bit Vector (`binary.buffer[0] === Binary.VECTOR_TYPE.PackedBit`),
* returns a copy of the bytes that are packed bits.
*
* Use `toBits` to get the unpacked bits.
*
* If the Binary is not a Vector, or the datatype is not PackedBit, an error is thrown.
*/
toPackedBits(): Uint8Array;
/**
* If this Binary represents a Packed bit Vector (`binary.buffer[0] === Binary.VECTOR_TYPE.PackedBit`),
* returns a copy of the bit unpacked into a new Int8Array.
*
* Use `toPackedBits` to get the bits still in packed form.
*
* If the Binary is not a Vector, or the datatype is not PackedBit, an error is thrown.
*/
toBits(): Int8Array;
/**
* Constructs a Binary representing an Int8 Vector.
* @param array - The array to store as a view on the Binary class
*/
static fromInt8Array(array: Int8Array): Binary;
/** Constructs a Binary representing an Float32 Vector. */
static fromFloat32Array(array: Float32Array): Binary;
/**
* Constructs a Binary representing a packed bit Vector.
*
* Use `fromBits` to pack an array of 1s and 0s.
*/
static fromPackedBits(array: Uint8Array, padding?: number): Binary;
/**
* Constructs a Binary representing an Packed Bit Vector.
* @param array - The array of 1s and 0s to pack into the Binary instance
*/
static fromBits(bits: ArrayLike<number>): Binary;
}
/** @public */
export declare interface BinaryExtended {
$binary: {
subType: string;
base64: string;
};
}
/** @public */
export declare interface BinaryExtendedLegacy {
$type: string;
$binary: string;
}
/** @public */
export declare type BinarySequence = Uint8Array | number[];
declare namespace BSON {
export {
setInternalBufferSize,
serialize,
serializeWithBufferAndIndex,
deserialize,
calculateObjectSize,
deserializeStream,
UUIDExtended,
BinaryExtended,
BinaryExtendedLegacy,
BinarySequence,
CodeExtended,
DBRefLike,
Decimal128Extended,
DoubleExtended,
EJSONOptions,
Int32Extended,
LongExtended,
MaxKeyExtended,
MinKeyExtended,
ObjectIdExtended,
ObjectIdLike,
BSONRegExpExtended,
BSONRegExpExtendedLegacy,
BSONSymbolExtended,
LongWithoutOverrides,
TimestampExtended,
TimestampOverrides,
LongWithoutOverridesClass,
SerializeOptions,
DeserializeOptions,
Code,
BSONSymbol,
DBRef,
Binary,
ObjectId,
UUID,
Long,
Timestamp,
Double,
Int32,
MinKey,
MaxKey,
BSONRegExp,
Decimal128,
BSONValue,
BSONError,
BSONVersionError,
BSONRuntimeError,
BSONOffsetError,
BSONType,
EJSON,
onDemand,
OnDemand,
Document,
CalculateObjectSizeOptions
}
}
export { BSON }
/* Excluded from this release type: BSON_MAJOR_VERSION */
/* Excluded from this release type: BSON_VERSION_SYMBOL */
/**
* @public
* @experimental
*/
declare type BSONElement = [
type: number,
nameOffset: number,
nameLength: number,
offset: number,
length: number
];
/**
* @public
* @category Error
*
* `BSONError` objects are thrown when BSON encounters an error.
*
* This is the parent class for all the other errors thrown by this library.
*/
export declare class BSONError extends Error {
/* Excluded from this release type: bsonError */
get name(): string;
constructor(message: string, options?: {
cause?: unknown;
});
/**
* @public
*
* All errors thrown from the BSON library inherit from `BSONError`.
* This method can assist with determining if an error originates from the BSON library
* even if it does not pass an `instanceof` check against this class' constructor.
*
* @param value - any javascript value that needs type checking
*/
static isBSONError(value: unknown): value is BSONError;
}
/**
* @public
* @category Error
*
* @experimental
*
* An error generated when BSON bytes are invalid.
* Reports the offset the parser was able to reach before encountering the error.
*/
export declare class BSONOffsetError extends BSONError {
get name(): 'BSONOffsetError';
offset: number;
constructor(message: string, offset: number, options?: {
cause?: unknown;
});
}
/**
* A class representation of the BSON RegExp type.
* @public
* @category BSONType
*/
export declare class BSONRegExp extends BSONValue {
get _bsontype(): 'BSONRegExp';
pattern: string;
options: string;
/**
* @param pattern - The regular expression pattern to match
* @param options - The regular expression options
*/
constructor(pattern: string, options?: string);
static parseOptions(options?: string): string;
/* Excluded from this release type: toExtendedJSON */
/* Excluded from this release type: fromExtendedJSON */
inspect(depth?: number, options?: unknown, inspect?: InspectFn): string;
}
/** @public */
export declare interface BSONRegExpExtended {
$regularExpression: {
pattern: string;
options: string;
};
}
/** @public */
export declare interface BSONRegExpExtendedLegacy {
$regex: string | BSONRegExp;
$options: string;
}
/**
* @public
* @category Error
*
* An error generated when BSON functions encounter an unexpected input
* or reaches an unexpected/invalid internal state
*
*/
export declare class BSONRuntimeError extends BSONError {
get name(): 'BSONRuntimeError';
constructor(message: string);
}
/**
* A class representation of the BSON Symbol type.
* @public
* @category BSONType
*/
export declare class BSONSymbol extends BSONValue {
get _bsontype(): 'BSONSymbol';
value: string;
/**
* @param value - the string representing the symbol.
*/
constructor(value: string);
/** Access the wrapped string value. */
valueOf(): string;
toString(): string;
toJSON(): string;
/* Excluded from this release type: toExtendedJSON */
/* Excluded from this release type: fromExtendedJSON */
inspect(depth?: number, options?: unknown, inspect?: InspectFn): string;
}
/** @public */
export declare interface BSONSymbolExtended {
$symbol: string;
}
/** @public */
export declare const BSONType: Readonly<{
readonly double: 1;
readonly string: 2;
readonly object: 3;
readonly array: 4;
readonly binData: 5;
readonly undefined: 6;
readonly objectId: 7;
readonly bool: 8;
readonly date: 9;
readonly null: 10;
readonly regex: 11;
readonly dbPointer: 12;
readonly javascript: 13;
readonly symbol: 14;
readonly javascriptWithScope: 15;
readonly int: 16;
readonly timestamp: 17;
readonly long: 18;
readonly decimal: 19;
readonly minKey: -1;
readonly maxKey: 127;
}>;
/** @public */
export declare type BSONType = (typeof BSONType)[keyof typeof BSONType];
/** @public */
export declare abstract class BSONValue {
/** @public */
abstract get _bsontype(): string;
/* Excluded from this release type: [BSON_VERSION_SYMBOL] */
/**
* @public
* Prints a human-readable string of BSON value information
* If invoked manually without node.js.inspect function, this will default to a modified JSON.stringify
*/
abstract inspect(depth?: number, options?: unknown, inspect?: InspectFn): string;
/* Excluded from this release type: toExtendedJSON */
}
/**
* @public
* @category Error
*/
export declare class BSONVersionError extends BSONError {
get name(): 'BSONVersionError';
constructor();
}
/**
* @public
* @experimental
*
* A collection of functions that help work with data in a Uint8Array.
* ByteUtils is configured at load time to use Node.js or Web based APIs for the internal implementations.
*/
declare type ByteUtils = {
/** Transforms the input to an instance of Buffer if running on node, otherwise Uint8Array */
toLocalBufferType: (buffer: Uint8Array | ArrayBufferView | ArrayBuffer) => Uint8Array;
/** Create empty space of size */
allocate: (size: number) => Uint8Array;
/** Create empty space of size, use pooled memory when available */
allocateUnsafe: (size: number) => Uint8Array;
/** Check if two Uint8Arrays are deep equal */
equals: (a: Uint8Array, b: Uint8Array) => boolean;
/** Check if two Uint8Arrays are deep equal */
fromNumberArray: (array: number[]) => Uint8Array;
/** Create a Uint8Array from a base64 string */
fromBase64: (base64: string) => Uint8Array;
/** Create a base64 string from bytes */
toBase64: (buffer: Uint8Array) => string;
/** **Legacy** binary strings are an outdated method of data transfer. Do not add public API support for interpreting this format */
fromISO88591: (codePoints: string) => Uint8Array;
/** **Legacy** binary strings are an outdated method of data transfer. Do not add public API support for interpreting this format */
toISO88591: (buffer: Uint8Array) => string;
/** Create a Uint8Array from a hex string */
fromHex: (hex: string) => Uint8Array;
/** Create a lowercase hex string from bytes */
toHex: (buffer: Uint8Array) => string;
/** Create a string from utf8 code units, fatal=true will throw an error if UTF-8 bytes are invalid, fatal=false will insert replacement characters */
toUTF8: (buffer: Uint8Array, start: number, end: number, fatal: boolean) => string;
/** Get the utf8 code unit count from a string if it were to be transformed to utf8 */
utf8ByteLength: (input: string) => number;
/** Encode UTF8 bytes generated from `source` string into `destination` at byteOffset. Returns the number of bytes encoded. */
encodeUTF8Into: (destination: Uint8Array, source: string, byteOffset: number) => number;
/** Generate a Uint8Array filled with random bytes with byteLength */
randomBytes: (byteLength: number) => Uint8Array;
/** Interprets `buffer` as an array of 32-bit values and swaps the byte order in-place. */
swap32: (buffer: Uint8Array) => Uint8Array;
};
/* Excluded declaration from this release type: ByteUtils */
/**
* Calculate the bson size for a passed in Javascript object.
*
* @param object - the Javascript object to calculate the BSON byte size for
* @returns size of BSON object in bytes
* @public
*/
export declare function calculateObjectSize(object: Document, options?: CalculateObjectSizeOptions): number;
/** @public */
export declare type CalculateObjectSizeOptions = Pick<SerializeOptions, 'serializeFunctions' | 'ignoreUndefined'>;
/**
* A class representation of the BSON Code type.
* @public
* @category BSONType
*/
export declare class Code extends BSONValue {
get _bsontype(): 'Code';
code: string;
scope: Document | null;
/**
* @param code - a string or function.
* @param scope - an optional scope for the function.
*/
constructor(code: string | Function, scope?: Document | null);
toJSON(): {
code: string;
scope?: Document;
};
/* Excluded from this release type: toExtendedJSON */
/* Excluded from this release type: fromExtendedJSON */
inspect(depth?: number, options?: unknown, inspect?: InspectFn): string;
}
/** @public */
export declare interface CodeExtended {
$code: string;
$scope?: Document;
}
/**
* A class representation of the BSON DBRef type.
* @public
* @category BSONType
*/
export declare class DBRef extends BSONValue {
get _bsontype(): 'DBRef';
collection: string;
oid: ObjectId;
db?: string;
fields: Document;
/**
* @param collection - the collection name.
* @param oid - the reference ObjectId.
* @param db - optional db name, if omitted the reference is local to the current db.
*/
constructor(collection: string, oid: ObjectId, db?: string, fields?: Document);
/* Excluded from this release type: namespace */
/* Excluded from this release type: namespace */
toJSON(): DBRefLike & Document;
/* Excluded from this release type: toExtendedJSON */
/* Excluded from this release type: fromExtendedJSON */
inspect(depth?: number, options?: unknown, inspect?: InspectFn): string;
}
/** @public */
export declare interface DBRefLike {
$ref: string;
$id: ObjectId;
$db?: string;
}
/**
* A class representation of the BSON Decimal128 type.
* @public
* @category BSONType
*/
export declare class Decimal128 extends BSONValue {
get _bsontype(): 'Decimal128';
readonly bytes: Uint8Array;
/**
* @param bytes - a buffer containing the raw Decimal128 bytes in little endian order,
* or a string representation as returned by .toString()
*/
constructor(bytes: Uint8Array | string);
/**
* Create a Decimal128 instance from a string representation
*
* @param representation - a numeric string representation.
*/
static fromString(representation: string): Decimal128;
/**
* Create a Decimal128 instance from a string representation, allowing for rounding to 34
* significant digits
*
* @example Example of a number that will be rounded
* ```ts
* > let d = Decimal128.fromString('37.499999999999999196428571428571375')
* Uncaught:
* BSONError: "37.499999999999999196428571428571375" is not a valid Decimal128 string - inexact rounding
* at invalidErr (/home/wajames/js-bson/lib/bson.cjs:1402:11)
* at Decimal128.fromStringInternal (/home/wajames/js-bson/lib/bson.cjs:1633:25)
* at Decimal128.fromString (/home/wajames/js-bson/lib/bson.cjs:1424:27)
*
* > d = Decimal128.fromStringWithRounding('37.499999999999999196428571428571375')
* new Decimal128("37.49999999999999919642857142857138")
* ```
* @param representation - a numeric string representation.
*/
static fromStringWithRounding(representation: string): Decimal128;
private static _fromString;
/** Create a string representation of the raw Decimal128 value */
toString(): string;
toJSON(): Decimal128Extended;
/* Excluded from this release type: toExtendedJSON */
/* Excluded from this release type: fromExtendedJSON */
inspect(depth?: number, options?: unknown, inspect?: InspectFn): string;
}
/** @public */
export declare interface Decimal128Extended {
$numberDecimal: string;
}
/**
* Deserialize data as BSON.
*
* @param buffer - the buffer containing the serialized set of BSON documents.
* @returns returns the deserialized Javascript Object.
* @public
*/
export declare function deserialize(buffer: Uint8Array, options?: DeserializeOptions): Document;
/** @public */
export declare interface DeserializeOptions {
/**
* when deserializing a Long return as a BigInt.
* @defaultValue `false`
*/
useBigInt64?: boolean;
/**
* when deserializing a Long will fit it into a Number if it's smaller than 53 bits.
* @defaultValue `true`
*/
promoteLongs?: boolean;
/**
* when deserializing a Binary will return it as a node.js Buffer instance.
* @defaultValue `false`
*/
promoteBuffers?: boolean;
/**
* when deserializing will promote BSON values to their Node.js closest equivalent types.
* @defaultValue `true`
*/
promoteValues?: boolean;
/**
* allow to specify if there what fields we wish to return as unserialized raw buffer.
* @defaultValue `null`
*/
fieldsAsRaw?: Document;
/**
* return BSON regular expressions as BSONRegExp instances.
* @defaultValue `false`
*/
bsonRegExp?: boolean;
/**
* allows the buffer to be larger than the parsed BSON object.
* @defaultValue `false`
*/
allowObjectSmallerThanBufferSize?: boolean;
/**
* Offset into buffer to begin reading document from
* @defaultValue `0`
*/
index?: number;
raw?: boolean;
/** Allows for opt-out utf-8 validation for all keys or
* specified keys. Must be all true or all false.
*
* @example
* ```js
* // disables validation on all keys
* validation: { utf8: false }
*
* // enables validation only on specified keys a, b, and c
* validation: { utf8: { a: true, b: true, c: true } }
*
* // disables validation only on specified keys a, b
* validation: { utf8: { a: false, b: false } }
* ```
*/
validation?: {
utf8: boolean | Record<string, true> | Record<string, false>;
};
}
/**
* Deserialize stream data as BSON documents.
*
* @param data - the buffer containing the serialized set of BSON documents.
* @param startIndex - the start index in the data Buffer where the deserialization is to start.
* @param numberOfDocuments - number of documents to deserialize.
* @param documents - an array where to store the deserialized documents.
* @param docStartIndex - the index in the documents array from where to start inserting documents.
* @param options - additional options used for the deserialization.
* @returns next index in the buffer after deserialization **x** numbers of documents.
* @public
*/
export declare function deserializeStream(data: Uint8Array | ArrayBuffer, startIndex: number, numberOfDocuments: number, documents: Document[], docStartIndex: number, options: DeserializeOptions): number;
/** @public */
export declare interface Document {
[key: string]: any;
}
/**
* A class representation of the BSON Double type.
* @public
* @category BSONType
*/
export declare class Double extends BSONValue {
get _bsontype(): 'Double';
value: number;
/**
* Create a Double type
*
* @param value - the number we want to represent as a double.
*/
constructor(value: number);
/**
* Attempt to create an double type from string.
*
* This method will throw a BSONError on any string input that is not representable as a IEEE-754 64-bit double.
* Notably, this method will also throw on the following string formats:
* - Strings in non-decimal and non-exponential formats (binary, hex, or octal digits)
* - Strings with characters other than numeric, floating point, or leading sign characters (Note: 'Infinity', '-Infinity', and 'NaN' input strings are still allowed)
* - Strings with leading and/or trailing whitespace
*
* Strings with leading zeros, however, are also allowed
*
* @param value - the string we want to represent as a double.
*/
static fromString(value: string): Double;
/**
* Access the number value.
*
* @returns returns the wrapped double number.
*/
valueOf(): number;
toJSON(): number;
toString(radix?: number): string;
/* Excluded from this release type: toExtendedJSON */
/* Excluded from this release type: fromExtendedJSON */
inspect(depth?: number, options?: unknown, inspect?: InspectFn): string;
}
/** @public */
export declare interface DoubleExtended {
$numberDouble: string;
}
/** @public */
export declare const EJSON: {
parse: typeof parse;
stringify: typeof stringify;
serialize: typeof EJSONserialize;
deserialize: typeof EJSONdeserialize;
};
/**
* Deserializes an Extended JSON object into a plain JavaScript object with native/BSON types
*
* @param ejson - The Extended JSON object to deserialize
* @param options - Optional settings passed to the parse method
*/
declare function EJSONdeserialize(ejson: Document, options?: EJSONOptions): any;
/** @public */
export declare type EJSONOptions = {
/**
* Output using the Extended JSON v1 spec
* @defaultValue `false`
*/
legacy?: boolean;
/**
* Enable Extended JSON's `relaxed` mode, which attempts to return native JS types where possible, rather than BSON types
* @defaultValue `false` */
relaxed?: boolean;
/**
* Enable native bigint support
* @defaultValue `false`
*/
useBigInt64?: boolean;
};
/**
* Serializes an object to an Extended JSON string, and reparse it as a JavaScript object.
*
* @param value - The object to serialize
* @param options - Optional settings passed to the `stringify` function
*/
declare function EJSONserialize(value: any, options?: EJSONOptions): Document;
declare type InspectFn = (x: unknown, options?: unknown) => string;
/**
* A class representation of a BSON Int32 type.
* @public
* @category BSONType
*/
export declare class Int32 extends BSONValue {
get _bsontype(): 'Int32';
value: number;
/**
* Create an Int32 type
*
* @param value - the number we want to represent as an int32.
*/
constructor(value: number | string);
/**
* 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;
/**
* Access the number value.
*
* @returns returns the wrapped int32 number.
*/
valueOf(): number;
toString(radix?: number): string;
toJSON(): number;
/* Excluded from this release type: toExtendedJSON */
/* Excluded from this release type: fromExtendedJSON */
inspect(depth?: number, options?: unknown, inspect?: InspectFn): string;
}
/** @public */
export declare interface Int32Extended {
$numberInt: string;
}
/**
* A class representing a 64-bit integer
* @public
* @category BSONType
* @remarks
* The internal representation of a long is the two given signed, 32-bit values.
* We use 32-bit pieces because these are the size of integers on which
* Javascript performs bit-operations. For operations like addition and
* multiplication, we split each number into 16 bit pieces, which can easily be
* multiplied within Javascript's floating-point representation without overflow
* or change in sign.
* In the algorithms below, we frequently reduce the negative case to the
* positive case by negating the input(s) and then post-processing the result.
* Note that we must ALWAYS check specially whether those values are MIN_VALUE
* (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as
* a positive number, it overflows back into a negative). Not handling this
* case would often result in infinite recursion.
* Common constant values ZERO, ONE, NEG_ONE, etc. are found as static properties on this class.
*/
export declare class Long extends BSONValue {
get _bsontype(): 'Long';
/** An indicator used to reliably determine if an object is a Long or not. */
get __isLong__(): boolean;
/**
* The high 32 bits as a signed value.
*/
high: number;
/**
* The low 32 bits as a signed value.
*/
low: number;
/**
* Whether unsigned or not.
*/
unsigned: boolean;
/**
* Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.
*
* @param low - The low (signed) 32 bits of the long
* @param high - The high (signed) 32 bits of the long
* @param unsigned - Whether unsigned or not, defaults to signed
*/
constructor(low: number, high?: number, unsigned?: boolean);
/**
* Constructs a 64 bit two's-complement integer, given a bigint representation.
*
* @param value - BigInt representation of the long value
* @param unsigned - Whether unsigned or not, defaults to signed
*/
constructor(value: bigint, unsigned?: boolean);
/**
* Constructs a 64 bit two's-complement integer, given a string representation.
*
* @param value - String representation of the long value
* @param unsigned - Whether unsigned or not, defaults to signed
*/
constructor(value: string, unsigned?: boolean);
static TWO_PWR_24: Long;
/** Maximum unsigned value. */
static MAX_UNSIGNED_VALUE: Long;
/** Signed zero */
static ZERO: Long;
/** Unsigned zero. */
static UZERO: Long;
/** Signed one. */
static ONE: Long;
/** Unsigned one. */
static UONE: Long;
/** Signed negative one. */
static NEG_ONE: Long;
/** Maximum signed value. */
static MAX_VALUE: Long;
/** Minimum signed value. */
static MIN_VALUE: Long;
/**
* Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits.
* Each is assumed to use 32 bits.
* @param lowBits - The low 32 bits
* @param highBits - The high 32 bits
* @param unsigned - Whether unsigned or not, defaults to signed
* @returns The corresponding Long value
*/
static fromBits(lowBits: number, highBits: number, unsigned?: boolean): Long;
/**
* Returns a Long representing the given 32 bit integer value.
* @param value - The 32 bit integer in question
* @param unsigned - Whether unsigned or not, defaults to signed
* @returns The corresponding Long value
*/
static fromInt(value: number, unsigned?: boolean): Long;
/**
* Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.
* @param value - The number in question
* @param unsigned - Whether unsigned or not, defaults to signed
* @returns The corresponding Long value
*/
static fromNumber(value: number, unsigned?: boolean): Long;
/**
* Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.
* @param value - The number in question
* @param unsigned - Whether unsigned or not, defaults to signed
* @returns The corresponding Long value
*/
static fromBigInt(value: bigint, unsigned?: boolean): Long;
/* Excluded from this release type: _fromString */
/**
* Returns a signed Long representation of the given string, written using radix 10.
* Will throw an error if the given text is not exactly representable as a Long.
* Throws an error if any of the following conditions are true:
* - the string contains invalid characters for the radix 10
* - the string contains whitespace
* - the value the string represents is too large or too small to be a Long
* Unlike Long.fromString, this method does not coerce '+/-Infinity' and 'NaN' to Long.Zero
* @param str - The textual representation of the Long
* @returns The corresponding Long value
*/
static fromStringStrict(str: string): Long;
/**
* Returns a Long representation of the given string, written using the radix 10.
* Will throw an error if the given parameters are not exactly representable as a Long.
* Throws an error if any of the following conditions are true:
* - the string contains invalid characters for the given radix
* - the string contains whitespace
* - the value the string represents is too large or too small to be a Long
* Unlike Long.fromString, this method does not coerce '+/-Infinity' and 'NaN' to Long.Zero
* @param str - The textual representation of the Long
* @param unsigned - Whether unsigned or not, defaults to signed
* @returns The corresponding Long value
*/
static fromStringStrict(str: string, unsigned?: boolean): Long;
/**
* Returns a signed Long representation of the given string, written using the specified radix.
* Will throw an error if the given parameters are not exactly representable as a Long.
* Throws an error if any of the following conditions are true:
* - the string contains invalid characters for the given radix
* - the string contains whitespace
* - the value the string represents is too large or too small to be a Long
* Unlike Long.fromString, this method does not coerce '+/-Infinity' and 'NaN' to Long.Zero
* @param str - The textual representation of the Long
* @param radix - The radix in which the text is written (2-36), defaults to 10
* @returns The corresponding Long value
*/
static fromStringStrict(str: string, radix?: boolean): Long;
/**
* Returns a Long representation of the given string, written using the specified radix.
* Will throw an error if the given parameters are not exactly representable as a Long.
* Throws an error if any of the following conditions are true:
* - the string contains invalid characters for the given radix
* - the string contains whitespace
* - the value the string represents is too large or too small to be a Long
* Unlike Long.fromString, this method does not coerce '+/-Infinity' and 'NaN' to Long.Zero
* @param str - The textual representation of the Long
* @param unsigned - Whether unsigned or not, defaults to signed
* @param radix - The radix in which the text is written (2-36), defaults to 10
* @returns The corresponding Long value
*/
static fromStringStrict(str: string, unsigned?: boolean, radix?: number): Long;
/**
* Returns a signed Long representation of the given string, written using radix 10.
*
* If the input string is empty, this function will throw a BSONError.
*
* If input string does not have valid signed 64-bit Long representation, this method will return a coerced value:
* - inputs that overflow 64-bit signed long will be coerced to Long.MAX_VALUE and Long.MIN_VALUE respectively
* - 'NaN' or '+/-Infinity' are coerced to Long.ZERO
* - other invalid characters sequences have variable behavior
*
* @param str - The textual representation of the Long
* @returns The corresponding Long value
*/
static fromString(str: string): Long;
/**
* Returns a signed Long representation of the given string, written using the provided radix.
*
* If the input string is empty or a provided radix is not within (2-36), this function will throw a BSONError.
*
* If input parameters do not have valid signed 64-bit Long representation, this method will return a coerced value:
* - inputs that overflow 64-bit signed long will be coerced to Long.MAX_VALUE and Long.MIN_VALUE respectively
* - if the radix is less than 24, 'NaN' is coerced to Long.ZERO
* - if the radix is less than 35, '+/-Infinity' inputs are coerced to Long.ZERO
* - other invalid characters sequences have variable behavior
* @param str - The textual representation of the Long
* @param radix - The radix in which the text is written (2-36), defaults to 10
* @returns The corresponding Long value
*/
static fromString(str: string, radix?: number): Long;
/**
* Returns a Long representation of the given string, written using radix 10.
*
* If the input string is empty, this function will throw a BSONError.
*
* If input parameters do not have a valid 64-bit Long representation, this method will return a coerced value:
* - inputs that overflow 64-bit long will be coerced to max or min (if signed) values
* - if the radix is less than 24, 'NaN' is coerced to Long.ZERO
* - if the radix is less than 35, '+/-Infinity' inputs are coerced to Long.ZERO
* - other invalid characters sequences have variable behavior
* @param str - The textual representation of the Long
* @param unsigned - Whether unsigned or not, defaults to signed
* @returns The corresponding Long value
*/
static fromString(str: string, unsigned?: boolean): Long;
/**
* Returns a Long representation of the given string, written using the specified radix.
*
* If the input string is empty or a provided radix is not within (2-36), this function will throw a BSONError.
*
* If input parameters do not have a valid 64-bit Long representation, this method will return a coerced value:
* - inputs that overflow 64-bit long will be coerced to max or min (if signed) values
* - if the radix is less than 24, 'NaN' is coerced to Long.ZERO
* - if the radix is less than 35, '+/-Infinity' inputs are coerced to Long.ZERO
* - other invalid characters sequences have variable behavior
* @param str - The textual representation of the Long
* @param unsigned - Whether unsigned or not, defaults to signed
* @param radix - The radix in which the text is written (2-36), defaults to 10
* @returns The corresponding Long value
*/
static fromString(str: string, unsigned?: boolean, radix?: number): Long;
/**
* Creates a Long from its byte representation.
* @param bytes - Byte representation
* @param unsigned - Whether unsigned or not, defaults to signed
* @param le - Whether little or big endian, defaults to big endian
* @returns The corresponding Long value
*/
static fromBytes(bytes: number[], unsigned?: boolean, le?: boolean): Long;
/**
* Creates a Long from its little endian byte representation.
* @param bytes - Little endian byte representation
* @param unsigned - Whether unsigned or not, defaults to signed
* @returns The corresponding Long value
*/
static fromBytesLE(bytes: number[], unsigned?: boolean): Long;
/**
* Creates a Long from its big endian byte representation.
* @param bytes - Big endian byte representation
* @param unsigned - Whether unsigned or not, defaults to signed
* @returns The corresponding Long value
*/
static fromBytesBE(bytes: number[], unsigned?: boolean): Long;
/**
* Tests if the specified object is a Long.
*/
static isLong(value: unknown): value is Long;
/**
* Converts the specified value to a Long.
* @param unsigned - Whether unsigned or not, defaults to signed
*/
static fromValue(val: number | string | {
low: number;
high: number;
unsigned?: boolean;
}, unsigned?: boolean): Long;
/** Returns the sum of this and the specified Long. */
add(addend: string | number | Long | Timestamp): Long;
/**
* Returns the sum of this and the specified Long.
* @returns Sum
*/
and(other: string | number | Long | Timestamp): Long;
/**
* Compares this Long's value with the specified's.
* @returns 0 if they are the same, 1 if the this is greater and -1 if the given one is greater
*/
compare(other: string | number | Long | Timestamp): 0 | 1 | -1;
/** This is an alias of {@link Long.compare} */
comp(other: string | number | Long | Timestamp): 0 | 1 | -1;
/**
* Returns this Long divided by the specified. The result is signed if this Long is signed or unsigned if this Long is unsigned.
* @returns Quotient
*/
divide(divisor: string | number | Long | Timestamp): Long;
/**This is an alias of {@link Long.divide} */
div(divisor: string | number | Long | Timestamp): Long;
/**
* Tests if this Long's value equals the specified's.
* @param other - Other value
*/
equals(other: string | number | Long | Timestamp): boolean;
/** This is an alias of {@link Long.equals} */
eq(other: string | number | Long | Timestamp): boolean;
/** Gets the high 32 bits as a signed integer. */
getHighBits(): number;
/** Gets the high 32 bits as an unsigned integer. */
getHighBitsUnsigned(): number;
/** Gets the low 32 bits as a signed integer. */
getLowBits(): number;
/** Gets the low 32 bits as an unsigned integer. */
getLowBitsUnsigned(): number;
/** Gets the number of bits needed to represent the absolute value of this Long. */
getNumBitsAbs(): number;
/** Tests if this Long's value is greater than the specified's. */
greaterThan(other: string | number | Long | Timestamp): boolean;
/** This is an alias of {@link Long.greaterThan} */
gt(other: string | number | Long | Timestamp): boolean;
/** Tests if this Long's value is greater than or equal the specified's. */
greaterThanOrEqual(other: string | number | Long | Timestamp): boolean;
/** This is an alias of {@link Long.greaterThanOrEqual} */
gte(other: string | number | Long | Timestamp): boolean;
/** This is an alias of {@link Long.greaterThanOrEqual} */
ge(other: string | number | Long | Timestamp): boolean;
/** Tests if this Long's value is even. */
isEven(): boolean;
/** Tests if this Long's value is negative. */
isNegative(): boolean;
/** Tests if this Long's value is odd. */
isOdd(): boolean;
/** Tests if this Long's value is positive. */
isPositive(): boolean;
/** Tests if this Long's value equals zero. */
isZero(): boolean;
/** Tests if this Long's value is less than the specified's. */
lessThan(other: string | number | Long | Timestamp): boolean;
/** This is an alias of {@link Long#lessThan}. */
lt(other: string | number | Long | Timestamp): boolean;
/** Tests if this Long's value is less than or equal the specified's. */
lessThanOrEqual(other: string | number | Long | Timestamp): boolean;
/** This is an alias of {@link Long.lessThanOrEqual} */
lte(other: string | number | Long | Timestamp): boolean;
/** Returns this Long modulo the specified. */
modulo(divisor: string | number | Long | Timestamp): Long;
/** This is an alias of {@link Long.modulo} */
mod(divisor: string | number | Long | Timestamp): Long;
/** This is an alias of {@link Long.modulo} */
rem(divisor: string | number | Long | Timestamp): Long;
/**
* Returns the product of this and the specified Long.
* @param multiplier - Multiplier
* @returns Product
*/
multiply(multiplier: string | number | Long | Timestamp): Long;
/** This is an alias of {@link Long.multiply} */
mul(multiplier: string | number | Long | Timestamp): Long;
/** Returns the Negation of this Long's value. */
negate(): Long;
/** This is an alias of {@link Long.negate} */
neg(): Long;
/** Returns the bitwise NOT of this Long. */
not(): Long;
/** Tests if this Long's value differs from the specified's. */
notEquals(other: string | number | Long | Timestamp): boolean;
/** This is an alias of {@link Long.notEquals} */
neq(other: string | number | Long | Timestamp): boolean;
/** This is an alias of {@link Long.notEquals} */
ne(other: string | number | Long | Timestamp): boolean;
/**
* Returns the bitwise OR of this Long and the specified.
*/
or(other: number | string | Long): Long;
/**
* Returns this Long with bits shifted to the left by the given amount.
* @param numBits - Number of bits
* @returns Shifted Long
*/
shiftLeft(numBits: number | Long): Long;
/** This is an alias of {@link Long.shiftLeft} */
shl(numBits: number | Long): Long;
/**
* Returns this Long with bits arithmetically shifted to the right by the given amount.
* @param numBits - Number of bits
* @returns Shifted Long
*/
shiftRight(numBits: number | Long): Long;
/** This is an alias of {@link Long.shiftRight} */
shr(numBits: number | Long): Long;
/**
* Returns this Long with bits logically shifted to the right by the given amount.
* @param numBits - Number of bits
* @returns Shifted Long
*/
shiftRightUnsigned(numBits: Long | number): Long;
/** This is an alias of {@link Long.shiftRightUnsigned} */
shr_u(numBits: number | Long): Long;
/** This is an alias of {@link Long.shiftRightUnsigned} */
shru(numBits: number | Long): Long;
/**
* Returns the difference of this and the specified Long.
* @param subtrahend - Subtrahend
* @returns Difference
*/
subtract(subtrahend: string | number | Long | Timestamp): Long;
/** This is an alias of {@link Long.subtract} */
sub(subtrahend: string | number | Long | Timestamp): Long;
/** Converts the Long to a 32 bit integer, assuming it is a 32 bit integer. */
toInt(): number;
/** Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa). */
toNumber(): number;
/** Converts the Long to a BigInt (arbitrary precision). */
toBigInt(): bigint;
/**
* Converts this Long to its byte representation.
* @param le - Whether little or big endian, defaults to big endian
* @returns Byte representation
*/
toBytes(le?: boolean): number[];
/**
* Converts this Long to its little endian byte representation.
* @returns Little endian byte representation
*/
toBytesLE(): number[];
/**
* Converts this Long to its big endian byte representation.
* @returns Big endian byte representation
*/
toBytesBE(): number[];
/**
* Converts this Long to signed.
*/
toSigned(): Long;
/**
* Converts the Long to a string written in the specified radix.
* @param radix - Radix (2-36), defaults to 10
* @throws RangeError If `radix` is out of range
*/
toString(radix?: number): string;
/** Converts this Long to unsigned. */
toUnsigned(): Long;
/** Returns the bitwise XOR of this Long and the given one. */
xor(other: Long | number | string): Long;
/** This is an alias of {@link Long.isZero} */
eqz(): boolean;
/** This is an alias of {@link Long.lessThanOrEqual} */
le(other: string | number | Long | Timestamp): boolean;
toExtendedJSON(options?: EJSONOptions): number | LongExtended;
static fromExtendedJSON(doc: {
$numberLong: string;
}, options?: EJSONOptions): number | Long | bigint;
inspect(depth?: number, options?: unknown, inspect?: InspectFn): string;
}
/** @public */
export declare interface LongExtended {
$numberLong: string;
}
/** @public */
export declare type LongWithoutOverrides = new (low: unknown, high?: number | boolean, unsigned?: boolean) => {
[P in Exclude<keyof Long, TimestampOverrides>]: Long[P];
};
/** @public */
export declare const LongWithoutOverridesClass: LongWithoutOverrides;
/**
* A class representation of the BSON MaxKey type.
* @public
* @category BSONType
*/
export declare class MaxKey extends BSONValue {
get _bsontype(): 'MaxKey';
/* Excluded from this release type: toExtendedJSON */
/* Excluded from this release type: fromExtendedJSON */
inspect(): string;
}
/** @public */
export declare interface MaxKeyExtended {
$maxKey: 1;
}
/**
* A class representation of the BSON MinKey type.
* @public
* @category BSONType
*/
export declare class MinKey extends BSONValue {
get _bsontype(): 'MinKey';
/* Excluded from this release type: toExtendedJSON */
/* Excluded from this release type: fromExtendedJSON */
inspect(): string;
}
/** @public */
export declare interface MinKeyExtended {
$minKey: 1;
}
/**
* @experimental
* @public
*
* A collection of functions that get or set various numeric types and bit widths from a Uint8Array.
*/
declare type NumberUtils = {
/** Is true if the current system is big endian. */
isBigEndian: boolean;
/**
* Parses a signed int32 at offset. Throws a `RangeError` if value is negative.
*/
getNonnegativeInt32LE: (source: Uint8Array, offset: number) => number;
getInt32LE: (source: Uint8Array, offset: number) => number;
getUint32LE: (source: Uint8Array, offset: number) => number;
getUint32BE: (source: Uint8Array, offset: number) => number;
getBigInt64LE: (source: Uint8Array, offset: number) => bigint;
getFloat64LE: (source: Uint8Array, offset: number) => number;
setInt32BE: (destination: Uint8Array, offset: number, value: number) => 4;
setInt32LE: (destination: Uint8Array, offset: number, value: number) => 4;
setBigInt64LE: (destination: Uint8Array, offset: number, value: bigint) => 8;
setFloat64LE: (destination: Uint8Array, offset: number, value: number) => 8;
};
/**
* Number parsing and serializing utilities.
*
* @experimental
* @public
*/
declare const NumberUtils: NumberUtils;
/**
* A class representation of the BSON ObjectId type.
* @public
* @category BSONType
*/
export declare class ObjectId extends BSONValue {
get _bsontype(): 'ObjectId';
/* Excluded from this release type: index */
static cacheHexString: boolean;
/