UNPKG

parse

Version:
190 lines 5.98 kB
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); } } }