Skip to content

v4.2.0

Compare
Choose a tag to compare
@nbbeeken nbbeeken released this 13 Oct 19:55
d685aa5

The MongoDB Node.js team is pleased to announce version 4.2.0 of the bson module!

Release Highlights

Convert code base to Typescript

Before this release we have converted the codebase to Typescript and you can find our bundled type definitions in the release.
Converting to Typescript gave us an opportunity to fine tune our build pipeline, you should expect proper web bundle support with sourcemaps.
If you were to ever encounter an issue or just want to get insight into the inner workings of the BSON library these sourcemaps will allow you to debug the original source code that is in typescript.

If you’re curious about Typescript take a look here.

A primary reason for converting to typescript is the first in class developer experience the language offers.
It enables us to communicate APIs more succinctly to you the user and for you the user to benefit from excellent autocompletion and code intellisence while working with the BSON library.

BigInt support

BigInt is a new primitive type added to the ECMAScript specification, with this release you can use these new Long helpers to serialize BigInt(s) to BSON.

class 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;
  /** Converts the Long to a BigInt (arbitrary precision). */
  toBigInt(): bigint;
  // ...
}

It is important to note that BigInt supports arbitrary precision values while Long’s are clamped to maximum and minimum 64-bit integer values.
We do have an investigation into supporting BigInt directly as well as helpers for Decimal128 interop but for now this is a great stepping stone to get started using BigInt in your code today!

FNV1A Hashing Removed

A previous iteration of the ObjectId class utilized a Fowler–Noll–Vo hash function to generate a portion of the Id created on the client side.
This had been unused for sometime and here we were able to remove this code improving bundle sizes but without any breaking changes.

Documentation

We invite you to try the bson library immediately, and report any issues to the NODE project.
Thanks very much to all the community members who contributed to this release!

Release Notes

Epic

Bug

  • [NODE-2240] - Following the "Browser (no bundling)" in the README leads to missing "global"
  • [NODE-2712] - Incorrect imports in ESM bundle
  • [NODE-2769] - Long integers serialize as doubles
  • [NODE-2770] - Fix crc32 function caching​

Improvement

  • [NODE-1738] - Remove fnv1a from ObjectId
  • [NODE-2529] - Add support for BigInt
  • [NODE-2805] - Support parsing $uuid as extended JSON representation for subtype 4 binary