@@ -713,25 +713,49 @@ function transformUpdateOperator({
713
713
}
714
714
}
715
715
716
- const specialKeysForUntransform = [
717
- '_id' ,
718
- '_hashed_password' ,
719
- '_acl' ,
720
- '_email_verify_token' ,
721
- '_perishable_token' ,
722
- '_tombstone' ,
723
- '_session_token' ,
724
- 'updatedAt' ,
725
- '_updated_at' ,
726
- 'createdAt' ,
727
- '_created_at' ,
728
- 'expiresAt' ,
729
- '_expiresAt' ,
730
- ] ;
716
+ const nestedMongoObjectToNestedParseObject = mongoObject => {
717
+ switch ( typeof mongoObject ) {
718
+ case 'string' :
719
+ case 'number' :
720
+ case 'boolean' :
721
+ return mongoObject ;
722
+ case 'undefined' :
723
+ case 'symbol' :
724
+ case 'function' :
725
+ throw 'bad value in mongoObjectToParseObject' ;
726
+ case 'object' :
727
+ if ( mongoObject === null ) {
728
+ return null ;
729
+ }
730
+ if ( mongoObject instanceof Array ) {
731
+ return mongoObject . map ( nestedMongoObjectToNestedParseObject ) ;
732
+ }
733
+
734
+ if ( mongoObject instanceof Date ) {
735
+ return Parse . _encode ( mongoObject ) ;
736
+ }
737
+
738
+ if ( mongoObject instanceof mongodb . Long ) {
739
+ return mongoObject . toNumber ( ) ;
740
+ }
741
+
742
+ if ( mongoObject instanceof mongodb . Double ) {
743
+ return mongoObject . value ;
744
+ }
745
+
746
+ if ( BytesCoder . isValidDatabaseObject ( mongoObject ) ) {
747
+ return BytesCoder . databaseToJSON ( mongoObject ) ;
748
+ }
749
+
750
+ return _ . mapValues ( mongoObject , nestedMongoObjectToNestedParseObject ) ;
751
+ default :
752
+ throw 'unknown js type' ;
753
+ }
754
+ }
731
755
732
756
// Converts from a mongo-format object to a REST-format object.
733
757
// Does not strip out anything based on a lack of authentication.
734
- function untransformObject ( schema , className , mongoObject , isNestedObject = false ) {
758
+ const mongoObjectToParseObject = ( schema , className , mongoObject ) => {
735
759
switch ( typeof mongoObject ) {
736
760
case 'string' :
737
761
case 'number' :
@@ -740,15 +764,13 @@ function untransformObject(schema, className, mongoObject, isNestedObject = fals
740
764
case 'undefined' :
741
765
case 'symbol' :
742
766
case 'function' :
743
- throw 'bad value in untransformObject ' ;
767
+ throw 'bad value in mongoObjectToParseObject ' ;
744
768
case 'object' :
745
769
if ( mongoObject === null ) {
746
770
return null ;
747
771
}
748
772
if ( mongoObject instanceof Array ) {
749
- return mongoObject . map ( arrayEntry => {
750
- return untransformObject ( schema , className , arrayEntry , true ) ;
751
- } ) ;
773
+ return mongoObject . map ( nestedMongoObjectToNestedParseObject ) ;
752
774
}
753
775
754
776
if ( mongoObject instanceof Date ) {
@@ -769,10 +791,6 @@ function untransformObject(schema, className, mongoObject, isNestedObject = fals
769
791
770
792
var restObject = untransformACL ( mongoObject ) ;
771
793
for ( var key in mongoObject ) {
772
- if ( isNestedObject && _ . includes ( specialKeysForUntransform , key ) ) {
773
- restObject [ key ] = untransformObject ( schema , className , mongoObject [ key ] , true ) ;
774
- continue ;
775
- }
776
794
switch ( key ) {
777
795
case '_id' :
778
796
restObject [ 'objectId' ] = '' + mongoObject [ key ] ;
@@ -840,7 +858,7 @@ function untransformObject(schema, className, mongoObject, isNestedObject = fals
840
858
objectId : objData [ 1 ]
841
859
} ;
842
860
break ;
843
- } else if ( ! isNestedObject && key [ 0 ] == '_' && key != '__type' ) {
861
+ } else if ( key [ 0 ] == '_' && key != '__type' ) {
844
862
throw ( 'bad key in untransform: ' + key ) ;
845
863
} else {
846
864
var expectedType = schema . getExpectedType ( className , key ) ;
@@ -854,80 +872,16 @@ function untransformObject(schema, className, mongoObject, isNestedObject = fals
854
872
break ;
855
873
}
856
874
}
857
- restObject [ key ] = untransformObject ( schema , className , mongoObject [ key ] , true ) ;
875
+ restObject [ key ] = nestedMongoObjectToNestedParseObject ( mongoObject [ key ] ) ;
858
876
}
859
877
}
860
878
861
- if ( ! isNestedObject ) {
862
- let relationFields = schema . getRelationFields ( className ) ;
863
- Object . assign ( restObject , relationFields ) ;
864
- }
865
- return restObject ;
879
+ return { ...restObject , ...schema . getRelationFields ( className ) } ;
866
880
default :
867
881
throw 'unknown js type' ;
868
882
}
869
883
}
870
884
871
- function transformSelect ( selectObject , key , objects ) {
872
- var values = [ ] ;
873
- for ( var result of objects ) {
874
- values . push ( result [ key ] ) ;
875
- }
876
- delete selectObject [ '$select' ] ;
877
- if ( Array . isArray ( selectObject [ '$in' ] ) ) {
878
- selectObject [ '$in' ] = selectObject [ '$in' ] . concat ( values ) ;
879
- } else {
880
- selectObject [ '$in' ] = values ;
881
- }
882
- }
883
-
884
- function transformDontSelect ( dontSelectObject , key , objects ) {
885
- var values = [ ] ;
886
- for ( var result of objects ) {
887
- values . push ( result [ key ] ) ;
888
- }
889
- delete dontSelectObject [ '$dontSelect' ] ;
890
- if ( Array . isArray ( dontSelectObject [ '$nin' ] ) ) {
891
- dontSelectObject [ '$nin' ] = dontSelectObject [ '$nin' ] . concat ( values ) ;
892
- } else {
893
- dontSelectObject [ '$nin' ] = values ;
894
- }
895
- }
896
-
897
- function transformInQuery ( inQueryObject , className , results ) {
898
- var values = [ ] ;
899
- for ( var result of results ) {
900
- values . push ( {
901
- __type : 'Pointer' ,
902
- className : className ,
903
- objectId : result . objectId
904
- } ) ;
905
- }
906
- delete inQueryObject [ '$inQuery' ] ;
907
- if ( Array . isArray ( inQueryObject [ '$in' ] ) ) {
908
- inQueryObject [ '$in' ] = inQueryObject [ '$in' ] . concat ( values ) ;
909
- } else {
910
- inQueryObject [ '$in' ] = values ;
911
- }
912
- }
913
-
914
- function transformNotInQuery ( notInQueryObject , className , results ) {
915
- var values = [ ] ;
916
- for ( var result of results ) {
917
- values . push ( {
918
- __type : 'Pointer' ,
919
- className : className ,
920
- objectId : result . objectId
921
- } ) ;
922
- }
923
- delete notInQueryObject [ '$notInQuery' ] ;
924
- if ( Array . isArray ( notInQueryObject [ '$nin' ] ) ) {
925
- notInQueryObject [ '$nin' ] = notInQueryObject [ '$nin' ] . concat ( values ) ;
926
- } else {
927
- notInQueryObject [ '$nin' ] = values ;
928
- }
929
- }
930
-
931
885
var DateCoder = {
932
886
JSONToDatabase ( json ) {
933
887
return new Date ( json . iso ) ;
@@ -1021,9 +975,5 @@ module.exports = {
1021
975
parseObjectToMongoObjectForCreate,
1022
976
transformUpdate,
1023
977
transformWhere,
1024
- transformSelect,
1025
- transformDontSelect,
1026
- transformInQuery,
1027
- transformNotInQuery,
1028
- untransformObject
978
+ mongoObjectToParseObject,
1029
979
} ;
0 commit comments