@@ -3780,7 +3780,7 @@ Document.prototype.$__handleReject = function handleReject(err) {
37803780 */
37813781
37823782Document . prototype . $toObject = function ( options , json ) {
3783- let defaultOptions = {
3783+ const defaultOptions = {
37843784 transform : true ,
37853785 flattenDecimals : true
37863786 } ;
@@ -3793,7 +3793,7 @@ Document.prototype.$toObject = function(options, json) {
37933793 const schemaOptions = this . $__schema && this . $__schema . options || { } ;
37943794 // merge base default options with Schema's set default options if available.
37953795 // `clone` is necessary here because `utils.options` directly modifies the second input.
3796- defaultOptions = { ... defaultOptions , ... baseOptions , ... schemaOptions [ path ] } ;
3796+ Object . assign ( defaultOptions , baseOptions , schemaOptions [ path ] ) ;
37973797
37983798 // If options do not exist or is not an object, set it to empty object
37993799 options = utils . isPOJO ( options ) ? { ...options } : { } ;
@@ -3830,21 +3830,18 @@ Document.prototype.$toObject = function(options, json) {
38303830 // `clone()` will recursively call `$toObject()` on embedded docs, so we
38313831 // need the original options the user passed in, plus `_isNested` and
38323832 // `_parentOptions` for checking whether we need to depopulate.
3833- const cloneOptions = Object . assign ( { } , options , {
3833+ const cloneOptions = {
38343834 _isNested : true ,
38353835 json : json ,
38363836 minimize : _minimize ,
38373837 flattenMaps : flattenMaps ,
38383838 flattenObjectIds : flattenObjectIds ,
3839- _seen : ( options && options . _seen ) || new Map ( )
3840- } ) ;
3841-
3842- if ( utils . hasUserDefinedProperty ( options , 'getters' ) ) {
3843- cloneOptions . getters = options . getters ;
3844- }
3845- if ( utils . hasUserDefinedProperty ( options , 'virtuals' ) ) {
3846- cloneOptions . virtuals = options . virtuals ;
3847- }
3839+ _seen : ( options && options . _seen ) || new Map ( ) ,
3840+ _calledWithOptions : options . _calledWithOptions ,
3841+ virtuals : options . virtuals ,
3842+ getters : options . getters ,
3843+ depopulate : options . depopulate
3844+ } ;
38483845
38493846 const depopulate = options . depopulate ||
38503847 ( options . _parentOptions && options . _parentOptions . depopulate || false ) ;
@@ -3855,33 +3852,35 @@ Document.prototype.$toObject = function(options, json) {
38553852 }
38563853
38573854 // merge default options with input options.
3858- options = { ...defaultOptions , ...options } ;
3855+ for ( const key of Object . keys ( defaultOptions ) ) {
3856+ if ( options [ key ] == null ) {
3857+ options [ key ] = defaultOptions [ key ] ;
3858+ }
3859+ }
38593860 options . _isNested = true ;
38603861 options . json = json ;
38613862 options . minimize = _minimize ;
38623863
38633864 cloneOptions . _parentOptions = options ;
3864- cloneOptions . _skipSingleNestedGetters = false ;
3865-
3866- const gettersOptions = Object . assign ( { } , cloneOptions ) ;
3867- gettersOptions . _skipSingleNestedGetters = true ;
38683865
3866+ cloneOptions . _skipSingleNestedGetters = false ;
38693867 // remember the root transform function
38703868 // to save it from being overwritten by sub-transform functions
38713869 const originalTransform = options . transform ;
38723870
38733871 let ret = clone ( this . _doc , cloneOptions ) || { } ;
38743872
3873+ cloneOptions . _skipSingleNestedGetters = true ;
38753874 if ( options . getters ) {
3876- applyGetters ( this , ret , gettersOptions ) ;
3875+ applyGetters ( this , ret , cloneOptions ) ;
38773876
38783877 if ( options . minimize ) {
38793878 ret = minimize ( ret ) || { } ;
38803879 }
38813880 }
38823881
38833882 if ( options . virtuals || ( options . getters && options . virtuals !== false ) ) {
3884- applyVirtuals ( this , ret , gettersOptions , options ) ;
3883+ applyVirtuals ( this , ret , cloneOptions , options ) ;
38853884 }
38863885
38873886 if ( options . versionKey === false && this . $__schema . options . versionKey ) {
0 commit comments