ObjectStateMutations.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. "use strict";
  2. var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
  3. var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
  4. var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
  5. var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
  6. var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
  7. var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
  8. var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
  9. var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
  10. var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
  11. _Object$defineProperty(exports, "__esModule", {
  12. value: true
  13. });
  14. exports.commitServerChanges = commitServerChanges;
  15. exports.defaultState = defaultState;
  16. exports.estimateAttribute = estimateAttribute;
  17. exports.estimateAttributes = estimateAttributes;
  18. exports.mergeFirstPendingState = mergeFirstPendingState;
  19. exports.popPendingState = popPendingState;
  20. exports.pushPendingState = pushPendingState;
  21. exports.setPendingOp = setPendingOp;
  22. exports.setServerData = setServerData;
  23. var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/typeof"));
  24. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
  25. var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
  26. var _stringify = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/json/stringify"));
  27. var _encode = _interopRequireDefault(require("./encode"));
  28. var _ParseFile = _interopRequireDefault(require("./ParseFile"));
  29. var _ParseObject = _interopRequireDefault(require("./ParseObject"));
  30. var _ParseRelation = _interopRequireDefault(require("./ParseRelation"));
  31. var _TaskQueue = _interopRequireDefault(require("./TaskQueue"));
  32. var _ParseOp = require("./ParseOp");
  33. function ownKeys(object, enumerableOnly) {
  34. var keys = _Object$keys(object);
  35. if (_Object$getOwnPropertySymbols) {
  36. var symbols = _Object$getOwnPropertySymbols(object);
  37. enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) {
  38. return _Object$getOwnPropertyDescriptor(object, sym).enumerable;
  39. })), keys.push.apply(keys, symbols);
  40. }
  41. return keys;
  42. }
  43. function _objectSpread(target) {
  44. for (var i = 1; i < arguments.length; i++) {
  45. var _context, _context2;
  46. var source = null != arguments[i] ? arguments[i] : {};
  47. i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) {
  48. (0, _defineProperty2.default)(target, key, source[key]);
  49. }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) {
  50. _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key));
  51. });
  52. }
  53. return target;
  54. }
  55. function defaultState()
  56. /*: State*/
  57. {
  58. return {
  59. serverData: {},
  60. pendingOps: [{}],
  61. objectCache: {},
  62. tasks: new _TaskQueue.default(),
  63. existed: false
  64. };
  65. }
  66. function setServerData(serverData
  67. /*: AttributeMap*/
  68. , attributes
  69. /*: AttributeMap*/
  70. ) {
  71. for (var _attr in attributes) {
  72. if (typeof attributes[_attr] !== 'undefined') {
  73. serverData[_attr] = attributes[_attr];
  74. } else {
  75. delete serverData[_attr];
  76. }
  77. }
  78. }
  79. function setPendingOp(pendingOps
  80. /*: Array<OpsMap>*/
  81. , attr
  82. /*: string*/
  83. , op
  84. /*: ?Op*/
  85. ) {
  86. var last = pendingOps.length - 1;
  87. if (op) {
  88. pendingOps[last][attr] = op;
  89. } else {
  90. delete pendingOps[last][attr];
  91. }
  92. }
  93. function pushPendingState(pendingOps
  94. /*: Array<OpsMap>*/
  95. ) {
  96. pendingOps.push({});
  97. }
  98. function popPendingState(pendingOps
  99. /*: Array<OpsMap>*/
  100. )
  101. /*: OpsMap*/
  102. {
  103. var first = pendingOps.shift();
  104. if (!pendingOps.length) {
  105. pendingOps[0] = {};
  106. }
  107. return first;
  108. }
  109. function mergeFirstPendingState(pendingOps
  110. /*: Array<OpsMap>*/
  111. ) {
  112. var first = popPendingState(pendingOps);
  113. var next = pendingOps[0];
  114. for (var _attr2 in first) {
  115. if (next[_attr2] && first[_attr2]) {
  116. var merged = next[_attr2].mergeWith(first[_attr2]);
  117. if (merged) {
  118. next[_attr2] = merged;
  119. }
  120. } else {
  121. next[_attr2] = first[_attr2];
  122. }
  123. }
  124. }
  125. function estimateAttribute(serverData
  126. /*: AttributeMap*/
  127. , pendingOps
  128. /*: Array<OpsMap>*/
  129. , className
  130. /*: string*/
  131. , id
  132. /*: ?string*/
  133. , attr
  134. /*: string*/
  135. )
  136. /*: mixed*/
  137. {
  138. var value = serverData[attr];
  139. for (var i = 0; i < pendingOps.length; i++) {
  140. if (pendingOps[i][attr]) {
  141. if (pendingOps[i][attr] instanceof _ParseOp.RelationOp) {
  142. if (id) {
  143. value = pendingOps[i][attr].applyTo(value, {
  144. className: className,
  145. id: id
  146. }, attr);
  147. }
  148. } else {
  149. value = pendingOps[i][attr].applyTo(value);
  150. }
  151. }
  152. }
  153. return value;
  154. }
  155. function estimateAttributes(serverData
  156. /*: AttributeMap*/
  157. , pendingOps
  158. /*: Array<OpsMap>*/
  159. , className
  160. /*: string*/
  161. , id
  162. /*: ?string*/
  163. )
  164. /*: AttributeMap*/
  165. {
  166. var data = {};
  167. for (var attr in serverData) {
  168. data[attr] = serverData[attr];
  169. }
  170. for (var i = 0; i < pendingOps.length; i++) {
  171. for (attr in pendingOps[i]) {
  172. if (pendingOps[i][attr] instanceof _ParseOp.RelationOp) {
  173. if (id) {
  174. data[attr] = pendingOps[i][attr].applyTo(data[attr], {
  175. className: className,
  176. id: id
  177. }, attr);
  178. }
  179. } else {
  180. if ((0, _includes.default)(attr).call(attr, '.')) {
  181. // convert a.b.c into { a: { b: { c: value } } }
  182. var fields = attr.split('.');
  183. var first = fields[0];
  184. var last = fields[fields.length - 1];
  185. data[first] = _objectSpread({}, serverData[first]);
  186. var object = _objectSpread({}, data);
  187. for (var _i = 0; _i < fields.length - 1; _i++) {
  188. object = object[fields[_i]];
  189. }
  190. object[last] = pendingOps[i][attr].applyTo(object[last]);
  191. } else {
  192. data[attr] = pendingOps[i][attr].applyTo(data[attr]);
  193. }
  194. }
  195. }
  196. }
  197. return data;
  198. }
  199. function commitServerChanges(serverData
  200. /*: AttributeMap*/
  201. , objectCache
  202. /*: ObjectCache*/
  203. , changes
  204. /*: AttributeMap*/
  205. ) {
  206. for (var _attr3 in changes) {
  207. var val = changes[_attr3];
  208. serverData[_attr3] = val;
  209. if (val && (0, _typeof2.default)(val) === 'object' && !(val instanceof _ParseObject.default) && !(val instanceof _ParseFile.default) && !(val instanceof _ParseRelation.default)) {
  210. var json = (0, _encode.default)(val, false, true);
  211. objectCache[_attr3] = (0, _stringify.default)(json);
  212. }
  213. }
  214. }