Skip to content

Comments

fix(NODE-7436): EJSON.stringify type signature#870

Open
chdanielmueller wants to merge 4 commits intomongodb:mainfrom
chdanielmueller:fix-NODE-7436
Open

fix(NODE-7436): EJSON.stringify type signature#870
chdanielmueller wants to merge 4 commits intomongodb:mainfrom
chdanielmueller:fix-NODE-7436

Conversation

@chdanielmueller
Copy link

@chdanielmueller chdanielmueller commented Feb 10, 2026

Description

Summary of Changes

This pull request enhances the flexibility and robustness of the EJSON.stringify function by supporting multiple parameter signature combinations, similar to JSON.stringify.
It introduces a new internal type guard to accurately distinguish between options and replacer parameters, and adds comprehensive tests to ensure correct behavior across all supported overloads.
It supports a previously advertised function signature which was not implemented. EJSON.stringify(object, { relaxed: false }, 2)

Notes for Reviewers

The tests should contain every previously possible and also previously advertised but not working combination of inputs.
The changes within the function have to do with the previous typescript signature which has been used but did not work. See

bson.EJSON.stringify(singleField, { relaxed: false }, 2)

Off Topic: Documented within NODE-7437

I noticed that the array replacement signature for JSON.stringify replaces the serialized keys.

const testDoc = {
  objectId: ObjectId.createFromHexString('111111111111111111111111')
};

const result = EJSON.stringify(testDoc, ['objectId', '$oid']) // {"objectId":{"$oid":"111111111111111111111111"}}
const result2 = EJSON.stringify(testDoc, ['objectId']) // {"objectId":{}}

Maybe if the replacer is an Array it should add the data types to the array.

Release Highlight

Release notes highlight

Double check the following

  • Lint is passing (npm run check:lint)
  • Self-review completed using the steps outlined here
  • PR title follows the correct format: type(NODE-xxxx)[!]: description
    • Example: feat(NODE-1234)!: rewriting everything in coffeescript
  • Changes are covered by tests
  • New TODOs have a related JIRA ticket

@chdanielmueller chdanielmueller requested a review from a team as a code owner February 10, 2026 10:28
@PavelSafronov PavelSafronov added tracked-in-jira There is a ticket in Mongo's Jira instance tracking this issue/PR External Submission labels Feb 10, 2026
@PavelSafronov
Copy link
Contributor

@chdanielmueller , thanks so much for your contribution! The team is going to prioritize this PR and NODE-7436 at our next triage session.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

External Submission tracked-in-jira There is a ticket in Mongo's Jira instance tracking this issue/PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants