fix: updating object includes unchanged keys in client response for certain key types (#8159)

This commit is contained in:
dblythy
2022-09-18 02:20:50 +10:00
committed by GitHub
parent 41e44302b4
commit 37af1d78fc
3 changed files with 160 additions and 57 deletions

View File

@@ -12,6 +12,7 @@ var passwordCrypto = require('./password');
var Parse = require('parse/node');
var triggers = require('./triggers');
var ClientSDK = require('./ClientSDK');
const util = require('util');
import RestQuery from './RestQuery';
import _ from 'lodash';
import logger from './logger';
@@ -1677,18 +1678,24 @@ RestWrite.prototype._updateResponseWithData = function (response, data) {
this.storage.fieldsChangedByTrigger.push(key);
}
}
const skipKeys = [
'objectId',
'createdAt',
'updatedAt',
...(requiredColumns.read[this.className] || []),
];
const skipKeys = [...(requiredColumns.read[this.className] || [])];
if (!this.query) {
skipKeys.push('objectId', 'createdAt');
} else {
skipKeys.push('updatedAt');
delete response.objectId;
}
for (const key in response) {
if (skipKeys.includes(key)) {
continue;
}
const value = response[key];
if (value == null || (value.__type && value.__type === 'Pointer') || data[key] === value) {
if (
value == null ||
(value.__type && value.__type === 'Pointer') ||
util.isDeepStrictEqual(data[key], value) ||
util.isDeepStrictEqual((this.originalData || {})[key], value)
) {
delete response[key];
}
}