Skip to content

v5.5.0

Compare
Choose a tag to compare
@W-A-James W-A-James released this 13 Sep 16:26
· 108 commits to main since this release
d4fe723

5.5.0 (2023-09-12)

The MongoDB Node.js team is pleased to announce version 5.5.0 of the bson package!

Release Notes

This release is focused on a bug fix and a new feature for our Decimal128 class.

Decimal128 constructor and Decimal128.fromString now throw when detecting loss of precision

Prior to this release, Decimal128 would round numbers with more than 34 significant digits and lose precision. Now, on detecting loss of precision, Decimal128's constructor and Decimal128.fromString will throw a BSONError. This behaviour should have been the default as the Decimal128 class was always intended to be high-precision floating point value. As such, silently performing inexact rounding is undesirable behaviour.

New Decimal128.fromStringWithRounding static method

We understand that some of our users may have depended on the rounding behaviour of Decimal128.fromString for their applications. To support these users, we have exposed this behaviour via the Decimal128.fromStringWithRounding method. Anywhere that Decimal128.fromString was used with the expectation that rounding would occur can be replaced with a call to this new method.

We also want to express our gratitude to @hconn-riparian for reporting a related rounding bug and fix in #560 which has been included in our implementation of this feature.

// pre v5.5
> let d = Decimal128.fromString('127341286781293491234791234667890123')
new Decimal128("1.273412867812934912347912346678901E+35")

// >= v5.5
> let d = Decimal128.fromString('127341286781293491234791234667890123')
Uncaught:
BSONError: "127341286781293491234791234667890123" is not a valid Decimal128 string - inexact rounding
    at invalidErr (./js-bson/lib/bson.cjs:1402:11)
    at Decimal128.fromStringInternal (./js-bson/lib/bson.cjs:1633:25)
    at Decimal128.fromString (./js-bson/lib/bson.cjs:1424:27)

> d = Decimal128.fromStringWithRounding('127341286781293491234791234667890123')
new Decimal128("1.273412867812934912347912346678901E+35")

Read more about inexact rounding and the rationale for this change in our Decimal128 specification.

Features

Bug Fixes

Documentation

We invite you to try the bson library immediately, and report any issues to the NODE project.