Skip to content

Commit

Permalink
fix: Nested date is incorrectly decoded as empty object {} when fet…
Browse files Browse the repository at this point in the history
…ching a Parse Object (parse-community#8446)
  • Loading branch information
dblythy authored Mar 5, 2023
1 parent 3f5b290 commit 22d2446
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 3 deletions.
4 changes: 4 additions & 0 deletions spec/MongoStorageAdapter.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,10 @@ describe_only_db('mongo')('MongoStorageAdapter', () => {
expect(object.date[0] instanceof Date).toBeTrue();
expect(object.bar.date[0] instanceof Date).toBeTrue();
expect(object.foo.test.date[0] instanceof Date).toBeTrue();
const obj = await new Parse.Query('MyClass').first({useMasterKey: true});
expect(obj.get('date')[0] instanceof Date).toBeTrue();
expect(obj.get('bar').date[0] instanceof Date).toBeTrue();
expect(obj.get('foo').test.date[0] instanceof Date).toBeTrue();
});

it('handles updating a single object with array, object date', done => {
Expand Down
13 changes: 10 additions & 3 deletions src/Adapters/Storage/Mongo/MongoTransform.js
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,16 @@ const transformInteriorValue = restValue => {
// Handle atomic values
var value = transformInteriorAtom(restValue);
if (value !== CannotTransform) {
if (value && typeof value === 'object') {
if (value instanceof Date) {
return value;
}
if (value instanceof Array) {
value = value.map(transformInteriorValue);
} else {
value = mapValues(value, transformInteriorValue);
}
}
return value;
}

Expand Down Expand Up @@ -1014,9 +1024,6 @@ function mapValues(object, iterator) {
const result = {};
Object.keys(object).forEach(key => {
result[key] = iterator(object[key]);
if (result[key] && JSON.stringify(result[key]).includes(`"__type"`)) {
result[key] = mapValues(object[key], iterator);
}
});
return result;
}
Expand Down

0 comments on commit 22d2446

Please sign in to comment.