Skip to content

Commit 22d2446

Browse files
authored
fix: Nested date is incorrectly decoded as empty object {} when fetching a Parse Object (#8446)
1 parent 3f5b290 commit 22d2446

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

Diff for: spec/MongoStorageAdapter.spec.js

+4
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,10 @@ describe_only_db('mongo')('MongoStorageAdapter', () => {
248248
expect(object.date[0] instanceof Date).toBeTrue();
249249
expect(object.bar.date[0] instanceof Date).toBeTrue();
250250
expect(object.foo.test.date[0] instanceof Date).toBeTrue();
251+
const obj = await new Parse.Query('MyClass').first({useMasterKey: true});
252+
expect(obj.get('date')[0] instanceof Date).toBeTrue();
253+
expect(obj.get('bar').date[0] instanceof Date).toBeTrue();
254+
expect(obj.get('foo').test.date[0] instanceof Date).toBeTrue();
251255
});
252256

253257
it('handles updating a single object with array, object date', done => {

Diff for: src/Adapters/Storage/Mongo/MongoTransform.js

+10-3
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,16 @@ const transformInteriorValue = restValue => {
188188
// Handle atomic values
189189
var value = transformInteriorAtom(restValue);
190190
if (value !== CannotTransform) {
191+
if (value && typeof value === 'object') {
192+
if (value instanceof Date) {
193+
return value;
194+
}
195+
if (value instanceof Array) {
196+
value = value.map(transformInteriorValue);
197+
} else {
198+
value = mapValues(value, transformInteriorValue);
199+
}
200+
}
191201
return value;
192202
}
193203

@@ -1014,9 +1024,6 @@ function mapValues(object, iterator) {
10141024
const result = {};
10151025
Object.keys(object).forEach(key => {
10161026
result[key] = iterator(object[key]);
1017-
if (result[key] && JSON.stringify(result[key]).includes(`"__type"`)) {
1018-
result[key] = mapValues(object[key], iterator);
1019-
}
10201027
});
10211028
return result;
10221029
}

0 commit comments

Comments
 (0)