Releases: mongodb/js-bson
v4.4.1
The MongoDB Node.js team is pleased to announce version 4.4.1 of the bson package!
Release Highlights
This patch addresses the bugs listed below. Most notably our EJSON API now correctly stringifies Infinity
and NaN
doubles in relaxed mode. Relaxed mode is intended for human readable JSON while non-relaxed or canonical mode can be used for data serialization since it will preserve the original BSON type. Double check you are using the correct format for your use case.
Bug Fixes
- NODE-3247: DBRef special handling (#443) (f5d984d)
- NODE-3282: BSONRegExp options not alphabetized (#441) (18c3512)
- NODE-3376: use standard JS methods for copying Buffers (#444) (804050d)
- NODE-3390: serialize non-finite doubles correctly in EJSON (#445) (7eb7998)
Documentation
- API: https://github.com/mongodb/js-bson#readme
- Changelog: https://github.com/mongodb/js-bson/blob/master/HISTORY.md#change-log
We invite you to try the bson library immediately, and report any issues to the NODE project.
v4.4.0
The MongoDB Node.js team is pleased to announce version 4.4.0 of the bson module!
Release Highlights
This release of the BSON library brings some additional convenience to our Decimal128
and Long
classes.
Users can now specify the construction of these types as shown below:
const longFromBigInt = new Long(23n)
const d128FromString = new Decimal128('4.23')
Here is the new API specification:
[new] Decimal128(string)
[new] Long(string[, unsigned])
[new] Long(bigint[, unsigned])
Thanks so much to @addaleax to contributing a number of the fixes listed below! 🚀
Features
- NODE-3264: allow Decimal128(string), Long(string), Long(bigint) (#437) (392c1bc)
- NODE-3226: make circular input errors for EJSON expressive (#433) (7b351cc)
Bug Fixes
- NODE-3256: make Long inspect result evaluable (3a2eff1)
- NODE-3153: correctly deserialize
__proto__
properties (#431) (f34cabc) - NODE-3223, NODE-2963: accept Uint8Array where Buffer is accepted (#432) (4613763)
- NODE-3208: clean up instanceof usage (9b6d52a)
- NODE-3195: improve ArrayBuffer brand check in ensureBuffer (#429) (99722f6)
Documentation
- API: https://github.com/mongodb/js-bson#readme
- Changelog: https://github.com/mongodb/js-bson/blob/master/HISTORY.md#change-log
We invite you to try the bson library immediately, and report any issues to the NODE project.
4.3.0
The MongoDB Node.js team is pleased to announce version 4.3.0 of the bson module!
Release Highlight
UUID Support
With this feature release we are introducing improved support for UUID usage in BSON.
UUIDs in BSON are still a subset of Binary so there is a translation that must occur to use UUIDs in BSON documents.
For example:
// import { UUID, serialize, deserialize } from 'bson'
const { UUID, serialize, deserialize } = require('bson')
const myId = new UUID();
const bsonBuffer = serialize({ myId: myId.toBinary() })
const bsonResult = deserialize(bsonBuffer)
myId.equals(bsonResult.myId.toUUID()) // true!
Full API documentation for the new class will be available here soon after this release.
Documentation
- API: https://github.com/mongodb/js-bson#readme
- Changelog: https://github.com/mongodb/js-bson/blob/master/HISTORY.md#change-log
We invite you to try the bson library immediately, and report any issues to the NODE project. A special thanks to @steffenagger for his contribution to the library!
1.1.6
The MongoDB Node.js team is pleased to announce version 1.1.6 of the bson module!
The BSON library was written prior to the invention of the BigInt type in Javascript ecosystem.
As a result the library was not able to serialize the type properly and silently failed to correctly maintain the bigint value.
With this update, the library will now throw an error if it detects a bigint value.
However, we've also added to/fromBigInt helper methods to the long class, please note that numbers will be clamped to int64 bit width.
const bytes = BSON.serialize({ myBigNumber: Long.fromBigInt(23n) })
const doc = BSON.deserialize(bytes)
doc.myBigNumber.toBigInt() === 23n // true
New Feature
- [NODE-2378] - Return error when failing to serialize bigint type and add Long class helpers
Documentation
- API: https://github.com/mongodb/js-bson#readme
- Changelog: https://github.com/mongodb/js-bson/blob/master/HISTORY.md#change-log
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!
4.2.3
The MongoDB Node.js team is pleased to announce version 4.2.3 of the bson module!
With this version, inspecting BSON objects produces the exact code to instantiate them.
Bug Fixes
- [NODE-2947] - Inspection method for Binary does not yield same result when evaluated
- [NODE-3064] - Fix BSON type classes being called without new
- [NODE-3069] - Cannot use bson package in a webworker.
Documentation
- API: https://github.com/mongodb/js-bson#readme
- Changelog: https://github.com/mongodb/js-bson/blob/master/HISTORY.md#change-log
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!
v4.2.2
The MongoDB Node.js team is pleased to announce version 4.2.2 of the bson module!
This patch fixes a critical bug in the 4.2.1 release we recommend all users of 4.2.1 upgrade to this version immediately. There was an unintended dependency published on tslib
without tslib
being specified in our package.json.
This patch includes additional 'inspect' methods on each BSON type class that makes printing out values consistent and readable.
Bug
- remove tslib usage and fix Long method alias
- NODE-2846 - Missing function overload type for
EJSON.stringify
- NODE-2847 - bson does not expose a default export
- NODE-2848 - bson@4.2.0 breaks serialization with bson@1.x
Task
- NODE-2844 - Add downlevel-dts to our BSON type definitions pipeline
- NODE-2875 - Add correct inspect methods for BSON Types
- NODE-2845 - Make Long class alias methods into methods rather than properties
Documentation
- API: https://github.com/mongodb/js-bson#readme
- Changelog: https://github.com/mongodb/js-bson/blob/master/HISTORY.md#change-log
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!
v4.2.1
Deprecated
This version has a critical bug that prevents it from importing correctly. There was an unintended dependcy on tslib published without tslib being specified in our package.json. A workaround is installing tslib manually but we highly recommend users of this version should update to v4.2.2 instead.
The MongoDB Node.js team is pleased to announce version 4.2.1 of the bson module!
This patch includes additional 'inspect' methods on each BSON type class that makes printing out values consistent and readable.
Bug
- NODE-2846 - Missing function overload type for
EJSON.stringify
- NODE-2847 - bson does not expose a default export
- NODE-2848 - bson@4.2.0 breaks serialization with bson@1.x
Task
- NODE-2844 - Add downlevel-dts to our BSON type definitions pipeline
- NODE-2875 - Add correct inspect methods for BSON Types
- NODE-2845 - Make Long class alias methods into methods rather than properties
Documentation
- API: https://github.com/mongodb/js-bson#readme
- Changelog: https://github.com/mongodb/js-bson/blob/master/HISTORY.md#change-log
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!
v4.2.0
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
- API: https://github.com/mongodb/js-bson#readme
- Changelog: https://github.com/mongodb/js-bson/blob/master/HISTORY.md#change-log
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
- [NODE-2647] - Typescript BSON
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
v4.0.4
The MongoDB Node.js team is pleased to announce version 4.0.4 of the bson
module!
This patch release fixes a regression introduced in v2 of the module, preventing round tripping of the deprecated BSON symbol
type. We don't expect any users are actually using this value, but it is something used in internal testing of the driver and as such was deemed high priority to fix.
Release Notes
Bug
- [NODE-2518] - BSON loses type information when automatically upgrading symbols to strings
v1.1.4
The MongoDB Node.js team is pleased to announce version 1.1.4 of the bson
module!
This patch release resolves an issue with BSON serialization with invalid _bsontype
, originally reported by @xiaofen9. MongoDB will be issuing a CVE for this vulnerability, and we recommend that all users pin their version of the bson
module to 1.1.4 or higher.
Release Notes
Bug
- [NODE-2514] - BSON serialization ignores unknown _bsontype