@@ -713,25 +713,49 @@ function transformUpdateOperator({
713713 }
714714}
715715
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+ }
731755
732756// Converts from a mongo-format object to a REST-format object.
733757// 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 ) => {
735759 switch ( typeof mongoObject ) {
736760 case 'string' :
737761 case 'number' :
@@ -740,15 +764,13 @@ function untransformObject(schema, className, mongoObject, isNestedObject = fals
740764 case 'undefined' :
741765 case 'symbol' :
742766 case 'function' :
743- throw 'bad value in untransformObject ' ;
767+ throw 'bad value in mongoObjectToParseObject ' ;
744768 case 'object' :
745769 if ( mongoObject === null ) {
746770 return null ;
747771 }
748772 if ( mongoObject instanceof Array ) {
749- return mongoObject . map ( arrayEntry => {
750- return untransformObject ( schema , className , arrayEntry , true ) ;
751- } ) ;
773+ return mongoObject . map ( nestedMongoObjectToNestedParseObject ) ;
752774 }
753775
754776 if ( mongoObject instanceof Date ) {
@@ -769,10 +791,6 @@ function untransformObject(schema, className, mongoObject, isNestedObject = fals
769791
770792 var restObject = untransformACL ( mongoObject ) ;
771793 for ( var key in mongoObject ) {
772- if ( isNestedObject && _ . includes ( specialKeysForUntransform , key ) ) {
773- restObject [ key ] = untransformObject ( schema , className , mongoObject [ key ] , true ) ;
774- continue ;
775- }
776794 switch ( key ) {
777795 case '_id' :
778796 restObject [ 'objectId' ] = '' + mongoObject [ key ] ;
@@ -840,7 +858,7 @@ function untransformObject(schema, className, mongoObject, isNestedObject = fals
840858 objectId : objData [ 1 ]
841859 } ;
842860 break ;
843- } else if ( ! isNestedObject && key [ 0 ] == '_' && key != '__type' ) {
861+ } else if ( key [ 0 ] == '_' && key != '__type' ) {
844862 throw ( 'bad key in untransform: ' + key ) ;
845863 } else {
846864 var expectedType = schema . getExpectedType ( className , key ) ;
@@ -854,80 +872,16 @@ function untransformObject(schema, className, mongoObject, isNestedObject = fals
854872 break ;
855873 }
856874 }
857- restObject [ key ] = untransformObject ( schema , className , mongoObject [ key ] , true ) ;
875+ restObject [ key ] = nestedMongoObjectToNestedParseObject ( mongoObject [ key ] ) ;
858876 }
859877 }
860878
861- if ( ! isNestedObject ) {
862- let relationFields = schema . getRelationFields ( className ) ;
863- Object . assign ( restObject , relationFields ) ;
864- }
865- return restObject ;
879+ return { ...restObject , ...schema . getRelationFields ( className ) } ;
866880 default :
867881 throw 'unknown js type' ;
868882 }
869883}
870884
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-
931885var DateCoder = {
932886 JSONToDatabase ( json ) {
933887 return new Date ( json . iso ) ;
@@ -1021,9 +975,5 @@ module.exports = {
1021975 parseObjectToMongoObjectForCreate,
1022976 transformUpdate,
1023977 transformWhere,
1024- transformSelect,
1025- transformDontSelect,
1026- transformInQuery,
1027- transformNotInQuery,
1028- untransformObject
978+ mongoObjectToParseObject,
1029979} ;
0 commit comments