parse
Version:
Parse JavaScript SDK
190 lines • 5.98 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.commitServerChanges = commitServerChanges;
exports.defaultState = defaultState;
exports.estimateAttribute = estimateAttribute;
exports.estimateAttributes = estimateAttributes;
exports.mergeFirstPendingState = mergeFirstPendingState;
exports.popPendingState = popPendingState;
exports.pushPendingState = pushPendingState;
exports.setPendingOp = setPendingOp;
exports.setServerData = setServerData;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _encode = _interopRequireDefault(require("./encode"));
var _CoreManager = _interopRequireDefault(require("./CoreManager"));
var _ParseFile = _interopRequireDefault(require("./ParseFile"));
var _ParseRelation = _interopRequireDefault(require("./ParseRelation"));
var _TaskQueue = _interopRequireDefault(require("./TaskQueue"));
var _ParseOp = require("./ParseOp");
var _isDangerousKey = require("./isDangerousKey");
function defaultState() {
return {
serverData: Object.create(null),
pendingOps: [Object.create(null)],
objectCache: Object.create(null),
tasks: new _TaskQueue.default(),
existed: false
};
}
function setServerData(serverData, attributes) {
for (var attr in attributes) {
if (!Object.prototype.hasOwnProperty.call(attributes, attr)) {
continue;
}
if ((0, _isDangerousKey.isDangerousKey)(attr)) {
continue;
}
if (typeof attributes[attr] !== "undefined") {
serverData[attr] = attributes[attr];
} else {
delete serverData[attr];
}
}
}
function setPendingOp(pendingOps, attr, op) {
if ((0, _isDangerousKey.isDangerousKey)(attr)) {
return;
}
var last = pendingOps.length - 1;
if (op) {
pendingOps[last][attr] = op;
} else {
delete pendingOps[last][attr];
}
}
function pushPendingState(pendingOps) {
pendingOps.push(Object.create(null));
}
function popPendingState(pendingOps) {
var first = pendingOps.shift();
if (!pendingOps.length) {
pendingOps[0] = Object.create(null);
}
return first;
}
function mergeFirstPendingState(pendingOps) {
var first = popPendingState(pendingOps);
var next = pendingOps[0];
for (var attr in first) {
if (!Object.prototype.hasOwnProperty.call(first, attr)) {
continue;
}
if ((0, _isDangerousKey.isDangerousKey)(attr)) {
continue;
}
if (next[attr] && first[attr]) {
var merged = next[attr].mergeWith(first[attr]);
if (merged) {
next[attr] = merged;
}
} else {
next[attr] = first[attr];
}
}
}
function estimateAttribute(serverData, pendingOps, object, attr) {
if ((0, _isDangerousKey.isDangerousKey)(attr)) {
return undefined;
}
var value = serverData[attr];
for (var i = 0; i < pendingOps.length; i++) {
if (pendingOps[i][attr]) {
if (pendingOps[i][attr] instanceof _ParseOp.RelationOp) {
if (object.id) {
value = pendingOps[i][attr].applyTo(value, object, attr);
}
} else {
value = pendingOps[i][attr].applyTo(value);
}
}
}
return value;
}
function estimateAttributes(serverData, pendingOps, object) {
var data = Object.create(null);
for (var attr in serverData) {
data[attr] = serverData[attr];
}
for (var i = 0; i < pendingOps.length; i++) {
for (attr in pendingOps[i]) {
if (!Object.prototype.hasOwnProperty.call(pendingOps[i], attr)) {
continue;
}
if ((0, _isDangerousKey.isDangerousKey)(attr)) {
continue;
}
if (pendingOps[i][attr] instanceof _ParseOp.RelationOp) {
if (object.id) {
data[attr] = pendingOps[i][attr].applyTo(data[attr], object, attr);
}
} else {
if (attr.includes('.')) {
var fields = attr.split('.');
var last = fields[fields.length - 1];
var _object = data;
for (var _i = 0; _i < fields.length - 1; _i++) {
var key = fields[_i];
if (!(key in _object)) {
var nextKey = fields[_i + 1];
if (!isNaN(nextKey)) {
_object[key] = [];
} else {
_object[key] = Object.create(null);
}
} else {
if (Array.isArray(_object[key])) {
_object[key] = (0, _toConsumableArray2.default)(_object[key]);
} else {
_object[key] = Object.assign({}, _object[key]);
}
}
_object = _object[key];
}
_object[last] = pendingOps[i][attr].applyTo(_object[last]);
} else {
data[attr] = pendingOps[i][attr].applyTo(data[attr]);
}
}
}
}
return data;
}
function nestedSet(obj, key, value) {
var paths = key.split('.');
for (var i = 0; i < paths.length - 1; i++) {
var path = paths[i];
if (!(path in obj)) {
var nextPath = paths[i + 1];
if (!isNaN(nextPath)) {
obj[path] = [];
} else {
obj[path] = Object.create(null);
}
}
obj = obj[path];
}
if (typeof value === 'undefined') {
delete obj[paths[paths.length - 1]];
} else {
obj[paths[paths.length - 1]] = value;
}
}
function commitServerChanges(serverData, objectCache, changes) {
var ParseObject = _CoreManager.default.getParseObject();
for (var attr in changes) {
if (!Object.prototype.hasOwnProperty.call(changes, attr)) {
continue;
}
if ((0, _isDangerousKey.isDangerousKey)(attr)) {
continue;
}
var val = changes[attr];
nestedSet(serverData, attr, val);
if (val && typeof val === 'object' && !(val instanceof ParseObject) && !(val instanceof _ParseFile.default) && !(val instanceof _ParseRelation.default)) {
var json = (0, _encode.default)(val, false, true);
objectCache[attr] = JSON.stringify(json);
}
}
}