ObjectStateMutations.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.commitServerChanges = commitServerChanges;
  6. exports.defaultState = defaultState;
  7. exports.estimateAttribute = estimateAttribute;
  8. exports.estimateAttributes = estimateAttributes;
  9. exports.mergeFirstPendingState = mergeFirstPendingState;
  10. exports.popPendingState = popPendingState;
  11. exports.pushPendingState = pushPendingState;
  12. exports.setPendingOp = setPendingOp;
  13. exports.setServerData = setServerData;
  14. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  15. var _encode = _interopRequireDefault(require("./encode"));
  16. var _ParseFile = _interopRequireDefault(require("./ParseFile"));
  17. var _ParseObject = _interopRequireDefault(require("./ParseObject"));
  18. var _ParseRelation = _interopRequireDefault(require("./ParseRelation"));
  19. var _TaskQueue = _interopRequireDefault(require("./TaskQueue"));
  20. var _ParseOp = require("./ParseOp");
  21. function defaultState() {
  22. return {
  23. serverData: {},
  24. pendingOps: [{}],
  25. objectCache: {},
  26. tasks: new _TaskQueue.default(),
  27. existed: false
  28. };
  29. }
  30. function setServerData(serverData, attributes) {
  31. for (var _attr in attributes) {
  32. if (typeof attributes[_attr] !== 'undefined') {
  33. serverData[_attr] = attributes[_attr];
  34. } else {
  35. delete serverData[_attr];
  36. }
  37. }
  38. }
  39. function setPendingOp(pendingOps, attr, op) {
  40. var last = pendingOps.length - 1;
  41. if (op) {
  42. pendingOps[last][attr] = op;
  43. } else {
  44. delete pendingOps[last][attr];
  45. }
  46. }
  47. function pushPendingState(pendingOps) {
  48. pendingOps.push({});
  49. }
  50. function popPendingState(pendingOps) {
  51. var first = pendingOps.shift();
  52. if (!pendingOps.length) {
  53. pendingOps[0] = {};
  54. }
  55. return first;
  56. }
  57. function mergeFirstPendingState(pendingOps) {
  58. var first = popPendingState(pendingOps);
  59. var next = pendingOps[0];
  60. for (var _attr2 in first) {
  61. if (next[_attr2] && first[_attr2]) {
  62. var merged = next[_attr2].mergeWith(first[_attr2]);
  63. if (merged) {
  64. next[_attr2] = merged;
  65. }
  66. } else {
  67. next[_attr2] = first[_attr2];
  68. }
  69. }
  70. }
  71. function estimateAttribute(serverData, pendingOps, className, id, attr) {
  72. var value = serverData[attr];
  73. for (var i = 0; i < pendingOps.length; i++) {
  74. if (pendingOps[i][attr]) {
  75. if (pendingOps[i][attr] instanceof _ParseOp.RelationOp) {
  76. if (id) {
  77. value = pendingOps[i][attr].applyTo(value, {
  78. className: className,
  79. id: id
  80. }, attr);
  81. }
  82. } else {
  83. value = pendingOps[i][attr].applyTo(value);
  84. }
  85. }
  86. }
  87. return value;
  88. }
  89. function estimateAttributes(serverData, pendingOps, className, id) {
  90. var data = {};
  91. for (var attr in serverData) {
  92. data[attr] = serverData[attr];
  93. }
  94. for (var i = 0; i < pendingOps.length; i++) {
  95. for (attr in pendingOps[i]) {
  96. if (pendingOps[i][attr] instanceof _ParseOp.RelationOp) {
  97. if (id) {
  98. data[attr] = pendingOps[i][attr].applyTo(data[attr], {
  99. className: className,
  100. id: id
  101. }, attr);
  102. }
  103. } else {
  104. if (attr.includes('.')) {
  105. var fields = attr.split('.');
  106. var first = fields[0];
  107. var last = fields[fields.length - 1];
  108. data[first] = (0, _extends2.default)({}, serverData[first]);
  109. var object = (0, _extends2.default)({}, data);
  110. for (var _i = 0; _i < fields.length - 1; _i++) {
  111. object = object[fields[_i]];
  112. }
  113. object[last] = pendingOps[i][attr].applyTo(object[last]);
  114. } else {
  115. data[attr] = pendingOps[i][attr].applyTo(data[attr]);
  116. }
  117. }
  118. }
  119. }
  120. return data;
  121. }
  122. function commitServerChanges(serverData, objectCache, changes) {
  123. for (var _attr3 in changes) {
  124. var val = changes[_attr3];
  125. serverData[_attr3] = val;
  126. if (val && typeof val === 'object' && !(val instanceof _ParseObject.default) && !(val instanceof _ParseFile.default) && !(val instanceof _ParseRelation.default)) {
  127. var json = (0, _encode.default)(val, false, true);
  128. objectCache[_attr3] = JSON.stringify(json);
  129. }
  130. }
  131. }