@@ -3780,7 +3780,7 @@ Document.prototype.$__handleReject = function handleReject(err) {
3780
3780
*/
3781
3781
3782
3782
Document . prototype . $toObject = function ( options , json ) {
3783
- let defaultOptions = {
3783
+ const defaultOptions = {
3784
3784
transform : true ,
3785
3785
flattenDecimals : true
3786
3786
} ;
@@ -3793,7 +3793,7 @@ Document.prototype.$toObject = function(options, json) {
3793
3793
const schemaOptions = this . $__schema && this . $__schema . options || { } ;
3794
3794
// merge base default options with Schema's set default options if available.
3795
3795
// `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 ] ) ;
3797
3797
3798
3798
// If options do not exist or is not an object, set it to empty object
3799
3799
options = utils . isPOJO ( options ) ? { ...options } : { } ;
@@ -3830,21 +3830,18 @@ Document.prototype.$toObject = function(options, json) {
3830
3830
// `clone()` will recursively call `$toObject()` on embedded docs, so we
3831
3831
// need the original options the user passed in, plus `_isNested` and
3832
3832
// `_parentOptions` for checking whether we need to depopulate.
3833
- const cloneOptions = Object . assign ( { } , options , {
3833
+ const cloneOptions = {
3834
3834
_isNested : true ,
3835
3835
json : json ,
3836
3836
minimize : _minimize ,
3837
3837
flattenMaps : flattenMaps ,
3838
3838
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
+ } ;
3848
3845
3849
3846
const depopulate = options . depopulate ||
3850
3847
( options . _parentOptions && options . _parentOptions . depopulate || false ) ;
@@ -3855,33 +3852,35 @@ Document.prototype.$toObject = function(options, json) {
3855
3852
}
3856
3853
3857
3854
// 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
+ }
3859
3860
options . _isNested = true ;
3860
3861
options . json = json ;
3861
3862
options . minimize = _minimize ;
3862
3863
3863
3864
cloneOptions . _parentOptions = options ;
3864
- cloneOptions . _skipSingleNestedGetters = false ;
3865
-
3866
- const gettersOptions = Object . assign ( { } , cloneOptions ) ;
3867
- gettersOptions . _skipSingleNestedGetters = true ;
3868
3865
3866
+ cloneOptions . _skipSingleNestedGetters = false ;
3869
3867
// remember the root transform function
3870
3868
// to save it from being overwritten by sub-transform functions
3871
3869
const originalTransform = options . transform ;
3872
3870
3873
3871
let ret = clone ( this . _doc , cloneOptions ) || { } ;
3874
3872
3873
+ cloneOptions . _skipSingleNestedGetters = true ;
3875
3874
if ( options . getters ) {
3876
- applyGetters ( this , ret , gettersOptions ) ;
3875
+ applyGetters ( this , ret , cloneOptions ) ;
3877
3876
3878
3877
if ( options . minimize ) {
3879
3878
ret = minimize ( ret ) || { } ;
3880
3879
}
3881
3880
}
3882
3881
3883
3882
if ( options . virtuals || ( options . getters && options . virtuals !== false ) ) {
3884
- applyVirtuals ( this , ret , gettersOptions , options ) ;
3883
+ applyVirtuals ( this , ret , cloneOptions , options ) ;
3885
3884
}
3886
3885
3887
3886
if ( options . versionKey === false && this . $__schema . options . versionKey ) {
0 commit comments