Uploaded image for project: 'Compass '
  1. Compass
  2. COMPASS-6254

Investigate changes in NODE-4440: Update tsconfig compile target to more modern JS for bson V5

    • Type: Icon: Investigation Investigation
    • Resolution: Done
    • Priority: Icon: Major - P3 Major - P3
    • No version
    • Affects Version/s: None
    • Component/s: None
    • Not Needed

      Use Case

      As a node engineer
      I want remove manual prototype manipulation and function constructor logic.
      So that we can use modern JS features, offering a better user experience 

      User Impact

      • JS emitted from TS will use class syntax for-of loops will be unmodified etc.

      Dependencies

      • The driver type logic.

      Unknowns

      • The _bsontype property determines serialization
        • Our driver relies on {{extends { _bsontype: string }}} type logic for preventing BSON type from having their keys be suggested in nested documents, will that still work?
        • _bsontype was defined on the prototype of the function, we cannot maintain that since in newer JS emit syntax the _bsontype will be defined as an instance class property.
          • Will moving it to a getter impact users? Doubtful, it will still be defined on the prototype, non-enumerable, and implicitly readonly since only a getter will be defined.

      Acceptance Criteria

      Implementation Requirements

      • Change all _bsontype defineProperty calls to get _bsontype() syntax.
        • Consider adding get [Symbol.toStringTag]() that calls the _bsontype getter
      • Remove the this instanceof X logic at the top of each BSON type constructor (it handles when the class is called without "new" which will now be impossible)
      • Timestamp class type info might be cleaned up here, it can override the getter instead of the current manual TS logic to remove the _bsontype from the Long super class

      Testing Requirements

      • Verify _bsontype getters are on all type classes

      Documentation Requirements

      • DOCSP ticket, API docs, etc

      Follow Up Requirements

      • additional tickets to file, required releases, etc

            Assignee:
            Unassigned Unassigned
            Reporter:
            dbeng-pm-bot PM Bot
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: