dataflux 1.8.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -311,6 +311,18 @@ var ObserverStore = /*#__PURE__*/function (_PersistentStore) {
311
311
  });
312
312
  }
313
313
  }, {
314
+ key: "mock",
315
+ value: function mock(type, objects) {
316
+ var _this3 = this;
317
+
318
+ objects = Array.isArray(objects) ? objects : [objects];
319
+ return _get(_getPrototypeOf(ObserverStore.prototype), "mock", this).call(this, type, objects).then(function (objects) {
320
+ _classPrivateMethodGet(_this3, _propagateInsertChange, _propagateInsertChange2).call(_this3, type, objects);
321
+
322
+ return objects;
323
+ });
324
+ }
325
+ }, {
314
326
  key: "delete",
315
327
  value: function _delete(typeOrObjects, filterFunction) {
316
328
  return _get(_getPrototypeOf(ObserverStore.prototype), "delete", this).call(this, typeOrObjects, filterFunction).then(_classPrivateFieldGet(this, _propagateChange));
@@ -321,12 +333,12 @@ var ObserverStore = /*#__PURE__*/function (_PersistentStore) {
321
333
  }(_PersistentStore2["default"]);
322
334
 
323
335
  function _propagateInsertChange2(type, newObjects) {
324
- var _this3 = this;
336
+ var _this4 = this;
325
337
 
326
338
  return (_classPrivateFieldGet(this, _unsubPromises).length ? Promise.all(_classPrivateFieldGet(this, _unsubPromises)) : Promise.resolve()).then(function () {
327
- if (_this3._subscribed[type]) {
339
+ if (_this4._subscribed[type]) {
328
340
  var uniqueSubs = {};
329
- var objects = Object.values(_this3._subscribed[type]);
341
+ var objects = Object.values(_this4._subscribed[type]);
330
342
 
331
343
  for (var _i2 = 0, _objects = objects; _i2 < _objects.length; _i2++) {
332
344
  var object = _objects[_i2];
@@ -357,7 +369,7 @@ function _propagateInsertChange2(type, newObjects) {
357
369
 
358
370
  if (objectsToSubscribe.length) {
359
371
  // Check if the new objects matter
360
- return _this3.find(type, filterFunction).then(function (data) {
372
+ return _this4.find(type, filterFunction).then(function (data) {
361
373
  var subKey;
362
374
 
363
375
  var _iterator6 = _createForOfIteratorHelper(data),
@@ -367,7 +379,7 @@ function _propagateInsertChange2(type, newObjects) {
367
379
  for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
368
380
  var d = _step6.value;
369
381
 
370
- var item = _this3._subscribed[d.getModel().getType()][d.getId()];
382
+ var item = _this4._subscribed[d.getModel().getType()][d.getId()];
371
383
 
372
384
  subKey = item ? item.subKey : null;
373
385
  if (subKey) break;
@@ -378,7 +390,7 @@ function _propagateInsertChange2(type, newObjects) {
378
390
  _iterator6.f();
379
391
  }
380
392
 
381
- _classPrivateFieldGet(_this3, _subscribeToObjects).call(_this3, type, objectsToSubscribe, {
393
+ _classPrivateFieldGet(_this4, _subscribeToObjects).call(_this4, type, objectsToSubscribe, {
382
394
  callback: callback,
383
395
  filterFunction: filterFunction,
384
396
  subKey: subKey
@@ -105,32 +105,42 @@ var PersistentStore = /*#__PURE__*/function (_Store) {
105
105
  var inserted = _ref2.inserted,
106
106
  updated = _ref2.updated,
107
107
  deleted = _ref2.deleted;
108
- var model = _this.models[type].model; // Operations order:
108
+ var model = _this.models[type].model; // Validate objects
109
+
110
+ var correctInserted = inserted.filter(function (object) {
111
+ return model.isObjectValid(object.object);
112
+ });
113
+ var correctUpdated = updated.filter(function (object) {
114
+ return model.isObjectValid(object.object);
115
+ });
116
+ var correctDeleted = deleted.filter(function (object) {
117
+ return model.isObjectValid(object.object);
118
+ }); // Operations order:
109
119
  // 1) insert
110
120
  // 2) update
111
121
  // 3) delete
112
122
 
113
- return model.insertObjects(inserted.map(function (i) {
123
+ return model.insertObjects(correctInserted.map(function (i) {
114
124
  return i.object;
115
125
  })).then(function () {
116
126
  return _this.applyDiff({
117
- inserted: inserted
127
+ inserted: correctInserted
118
128
  }, type);
119
129
  }).then(function () {
120
- return model.updateObjects(updated.map(function (i) {
130
+ return model.updateObjects(correctUpdated.map(function (i) {
121
131
  return i.object;
122
132
  }));
123
133
  }).then(function () {
124
134
  return _this.applyDiff({
125
- updated: updated
135
+ updated: correctUpdated
126
136
  }, type);
127
137
  }).then(function () {
128
- return model.deleteObjects(deleted.map(function (i) {
138
+ return model.deleteObjects(correctDeleted.map(function (i) {
129
139
  return i.object;
130
140
  }));
131
141
  }).then(function () {
132
142
  return _this.applyDiff({
133
- deleted: deleted
143
+ deleted: correctDeleted
134
144
  }, type);
135
145
  });
136
146
  });
@@ -186,6 +196,11 @@ var PersistentStore = /*#__PURE__*/function (_Store) {
186
196
  return data;
187
197
  });
188
198
  }
199
+ }, {
200
+ key: "mock",
201
+ value: function mock(type, objects) {
202
+ return _get(_getPrototypeOf(PersistentStore.prototype), "mock", this).call(this, type, objects);
203
+ }
189
204
  }, {
190
205
  key: "delete",
191
206
  value: function _delete(typeOrObjects, filterFunction) {
package/dist/Store.js CHANGED
@@ -9,6 +9,8 @@ var _Obj = _interopRequireDefault(require("./Obj"));
9
9
 
10
10
  var _PubSub = _interopRequireDefault(require("./PubSub"));
11
11
 
12
+ var _batchPromises = _interopRequireDefault(require("batch-promises"));
13
+
12
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
13
15
 
14
16
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
@@ -23,10 +25,10 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+
23
25
 
24
26
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
25
27
 
26
- function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
27
-
28
28
  function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
29
29
 
30
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
31
+
30
32
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
31
33
 
32
34
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@@ -39,6 +41,12 @@ function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) {
39
41
 
40
42
  function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
41
43
 
44
+ var objectStatuses = ["new", "old", "mock", "deleted"];
45
+
46
+ var _refreshObjectByType = /*#__PURE__*/new WeakMap();
47
+
48
+ var _merge = /*#__PURE__*/new WeakMap();
49
+
42
50
  var _error = /*#__PURE__*/new WeakSet();
43
51
 
44
52
  var _deleteByObject = /*#__PURE__*/new WeakMap();
@@ -53,7 +61,9 @@ var _loadObjects = /*#__PURE__*/new WeakSet();
53
61
 
54
62
  var Store = /*#__PURE__*/function () {
55
63
  function Store() {
56
- var _this = this;
64
+ var _this = this,
65
+ _options$autoSave,
66
+ _options$lazyLoad;
57
67
 
58
68
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
59
69
 
@@ -73,6 +83,93 @@ var Store = /*#__PURE__*/function () {
73
83
  return Object.keys(_this.models);
74
84
  });
75
85
 
86
+ _defineProperty(this, "refresh", function (type) {
87
+ if (type) {
88
+ return _classPrivateFieldGet(_this, _refreshObjectByType).call(_this, type);
89
+ } else {
90
+ return Promise.all(Object.keys(_this.models).map(_classPrivateFieldGet(_this, _refreshObjectByType)));
91
+ }
92
+ });
93
+
94
+ _classPrivateFieldInitSpec(this, _refreshObjectByType, {
95
+ writable: true,
96
+ value: function value(type) {
97
+ return _classPrivateMethodGet(_this, _getPromise, _getPromise2).call(_this, type).then(function () {
98
+ var item = _this.models[type];
99
+
100
+ _this.pubSub.publish("refresh", {
101
+ status: "start",
102
+ model: type
103
+ });
104
+
105
+ item.promise = item.model.retrieveAll()["catch"](function () {
106
+ var objects = Object.values(_this.models[type].storedObjects);
107
+ var list = [];
108
+ return (0, _batchPromises["default"])(4, objects, function (object) {
109
+ return item.model.factory(object.object).then(function (items) {
110
+ list = list.concat(items);
111
+ });
112
+ }).then(function () {
113
+ return list;
114
+ });
115
+ }).then(function (objects) {
116
+ var _iterator = _createForOfIteratorHelper(objects),
117
+ _step;
118
+
119
+ try {
120
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
121
+ var object = _step.value;
122
+ var wrapper = new _Obj["default"](object, item.model);
123
+ var id = wrapper.getId();
124
+ var currentObject = item === null || item === void 0 ? void 0 : item.storedObjects[id]; // console.log("currentObject", item);
125
+
126
+ if (currentObject) {
127
+ var newFingerprint = wrapper.getFingerprint();
128
+ var oldFingerprint = currentObject.fingerprint;
129
+
130
+ if (oldFingerprint !== newFingerprint) {
131
+ // Nothing to do otherwise
132
+ if (_this.hasChanged(type, currentObject.object)) {// Was the object edited locally?
133
+ // Nothing for now
134
+ } else {
135
+ // Update with the new object
136
+ // console.log("merge", wrapper);
137
+ _classPrivateFieldGet(_this, _merge).call(_this, _this.models[type].storedObjects[id].object, wrapper.toJSON());
138
+
139
+ _this.models[type].storedObjects[id].fingerprint = newFingerprint;
140
+ }
141
+ }
142
+ } else {
143
+ _classPrivateMethodGet(_this, _insertObject, _insertObject2).call(_this, type, object, "old");
144
+ }
145
+ }
146
+ } catch (err) {
147
+ _iterator.e(err);
148
+ } finally {
149
+ _iterator.f();
150
+ }
151
+
152
+ _this.pubSub.publish("refresh", {
153
+ status: "end",
154
+ model: type
155
+ });
156
+ });
157
+ return item.promise;
158
+ });
159
+ }
160
+ });
161
+
162
+ _classPrivateFieldInitSpec(this, _merge, {
163
+ writable: true,
164
+ value: function value(originalObject, newObject) {
165
+ for (var key in newObject) {
166
+ originalObject[key] = newObject[key];
167
+ }
168
+
169
+ originalObject.update();
170
+ }
171
+ });
172
+
76
173
  _classPrivateFieldInitSpec(this, _deleteByObject, {
77
174
  writable: true,
78
175
  value: function value(object) {
@@ -87,12 +184,17 @@ var Store = /*#__PURE__*/function () {
87
184
  });
88
185
 
89
186
  this.options = {
90
- autoSave: options.autoSave !== undefined ? options.autoSave : true,
187
+ autoSave: (_options$autoSave = options.autoSave) !== null && _options$autoSave !== void 0 ? _options$autoSave : true,
91
188
  saveDelay: options.saveDelay || 1000,
92
- lazyLoad: options.lazyLoad || false
189
+ lazyLoad: (_options$lazyLoad = options.lazyLoad) !== null && _options$lazyLoad !== void 0 ? _options$lazyLoad : false,
190
+ autoRefresh: options.autoRefresh === true ? 120000 : options.autoRefresh
93
191
  };
94
192
  this.models = {};
95
193
  this.pubSub = new _PubSub["default"]();
194
+
195
+ if (this.options.autoRefresh && typeof this.options.autoRefresh === "number") {
196
+ setInterval(this.refresh, this.options.autoRefresh);
197
+ }
96
198
  }
97
199
 
98
200
  _createClass(Store, [{
@@ -172,18 +274,29 @@ var Store = /*#__PURE__*/function () {
172
274
 
173
275
  return _classPrivateMethodGet(this, _getPromise, _getPromise2).call(this, type).then(function () {
174
276
  return objects.map(function (object) {
175
- return _classPrivateMethodGet(_this3, _insertObject, _insertObject2).call(_this3, type, object, true);
277
+ return _classPrivateMethodGet(_this3, _insertObject, _insertObject2).call(_this3, type, object, "new");
278
+ });
279
+ });
280
+ }
281
+ }, {
282
+ key: "mock",
283
+ value: function mock(type, objects) {
284
+ var _this4 = this;
285
+
286
+ return _classPrivateMethodGet(this, _getPromise, _getPromise2).call(this, type).then(function () {
287
+ return objects.map(function (object) {
288
+ return _classPrivateMethodGet(_this4, _insertObject, _insertObject2).call(_this4, type, object, "mock");
176
289
  });
177
290
  });
178
291
  }
179
292
  }, {
180
293
  key: "get",
181
294
  value: function get(type, id) {
182
- var _this4 = this;
295
+ var _this5 = this;
183
296
 
184
297
  return _classPrivateMethodGet(this, _getPromise, _getPromise2).call(this, type).then(function () {
185
298
  try {
186
- return _this4.models[type].storedObjects[id].object;
299
+ return _this5.models[type].storedObjects[id].object;
187
300
  } catch (error) {
188
301
  return Promise.reject("Object not found");
189
302
  }
@@ -192,17 +305,17 @@ var Store = /*#__PURE__*/function () {
192
305
  }, {
193
306
  key: "find",
194
307
  value: function find(type, filterFunction) {
195
- var _this5 = this;
308
+ var _this6 = this;
196
309
 
197
310
  return _classPrivateMethodGet(this, _getPromise, _getPromise2).call(this, type).then(function () {
198
- var all = Object.values(_this5.models[type].storedObjects).filter(function (i) {
311
+ var all = Object.values(_this6.models[type].storedObjects).filter(function (i) {
199
312
  return i.status !== "deleted";
200
313
  }).map(function (i) {
201
314
  return i.object;
202
315
  });
203
316
  return filterFunction ? all.filter(filterFunction) : all;
204
317
  })["catch"](function (error) {
205
- _this5.pubSub.publish("error", error);
318
+ _this6.pubSub.publish("error", error);
206
319
 
207
320
  return Promise.reject(error);
208
321
  });
@@ -210,7 +323,7 @@ var Store = /*#__PURE__*/function () {
210
323
  }, {
211
324
  key: "applyDiff",
212
325
  value: function applyDiff(_ref, type) {
213
- var _this6 = this;
326
+ var _this7 = this;
214
327
 
215
328
  var _ref$inserted = _ref.inserted,
216
329
  inserted = _ref$inserted === void 0 ? [] : _ref$inserted,
@@ -220,41 +333,48 @@ var Store = /*#__PURE__*/function () {
220
333
  deleted = _ref$deleted === void 0 ? [] : _ref$deleted;
221
334
  return new Promise(function (resolve, reject) {
222
335
  try {
223
- var _iterator = _createForOfIteratorHelper(inserted.concat(updated)),
224
- _step;
336
+ var _iterator2 = _createForOfIteratorHelper(inserted.concat(updated)),
337
+ _step2;
225
338
 
226
339
  try {
227
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
228
- var object = _step.value;
340
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
341
+ var object = _step2.value;
342
+ type = type || object.object.getModel().getType();
343
+ var newId = object.object.getId();
344
+ var oldId = object.id;
345
+ var item = _this7.models[type].storedObjects[object.id];
229
346
 
230
- var item = _this6.models[type || object.object.getModel().getType()].storedObjects[object.id];
347
+ if (newId !== oldId) {
348
+ _this7.models[type].storedObjects[newId] = item;
349
+ delete _this7.models[type].storedObjects[object.id];
350
+ }
231
351
 
232
352
  item.fingerprint = object.object.getFingerprint();
233
353
  item.status = "old";
234
354
  }
235
355
  } catch (err) {
236
- _iterator.e(err);
356
+ _iterator2.e(err);
237
357
  } finally {
238
- _iterator.f();
358
+ _iterator2.f();
239
359
  }
240
360
 
241
- var _iterator2 = _createForOfIteratorHelper(deleted),
242
- _step2;
361
+ var _iterator3 = _createForOfIteratorHelper(deleted),
362
+ _step3;
243
363
 
244
364
  try {
245
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
246
- var _object = _step2.value;
247
- delete _this6.models[type || _object.object.getModel().getType()].storedObjects[_object.id];
365
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
366
+ var _object = _step3.value;
367
+ delete _this7.models[type || _object.object.getModel().getType()].storedObjects[_object.id];
248
368
  }
249
369
  } catch (err) {
250
- _iterator2.e(err);
370
+ _iterator3.e(err);
251
371
  } finally {
252
- _iterator2.f();
372
+ _iterator3.f();
253
373
  }
254
374
 
255
375
  resolve();
256
376
  } catch (error) {
257
- return reject(error);
377
+ reject(error);
258
378
  }
259
379
  });
260
380
  }
@@ -272,10 +392,10 @@ var Store = /*#__PURE__*/function () {
272
392
  }, {
273
393
  key: "getDiff",
274
394
  value: function getDiff(type) {
275
- var _this7 = this;
395
+ var _this8 = this;
276
396
 
277
397
  return _classPrivateMethodGet(this, _getPromise, _getPromise2).call(this, type).then(function () {
278
- var objects = Object.values(_this7.models[type].storedObjects);
398
+ var objects = Object.values(_this8.models[type].storedObjects);
279
399
  var inserted = [];
280
400
  var updated = [];
281
401
  var deleted = [];
@@ -287,9 +407,10 @@ var Store = /*#__PURE__*/function () {
287
407
  inserted.push(object);
288
408
  } else if (object.status === "deleted") {
289
409
  deleted.push(object);
290
- } else if (_this7.hasChanged(type, object.object)) {
410
+ } else if (object.status === "old" && _this8.hasChanged(type, object.object)) {
291
411
  updated.push(object);
292
- }
412
+ } // Nothing for mock objects
413
+
293
414
  }
294
415
 
295
416
  return {
@@ -302,34 +423,35 @@ var Store = /*#__PURE__*/function () {
302
423
  }, {
303
424
  key: "factory",
304
425
  value: function factory(type, params) {
305
- var _this8 = this;
426
+ var _this9 = this;
306
427
 
307
428
  var item = this.models[type];
308
429
  this.pubSub.publish("loading", {
309
430
  status: "start",
310
431
  model: type
311
432
  });
312
- return item.promise = item.model.factory(params).then(function (items) {
313
- var _iterator3 = _createForOfIteratorHelper(items),
314
- _step3;
433
+ item.promise = item.model.factory(params).then(function (items) {
434
+ var _iterator4 = _createForOfIteratorHelper(items),
435
+ _step4;
315
436
 
316
437
  try {
317
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
318
- var _item = _step3.value;
438
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
439
+ var _item = _step4.value;
319
440
 
320
- _classPrivateMethodGet(_this8, _insertObject, _insertObject2).call(_this8, type, _item, false);
441
+ _classPrivateMethodGet(_this9, _insertObject, _insertObject2).call(_this9, type, _item, "old");
321
442
  }
322
443
  } catch (err) {
323
- _iterator3.e(err);
444
+ _iterator4.e(err);
324
445
  } finally {
325
- _iterator3.f();
446
+ _iterator4.f();
326
447
  }
327
448
 
328
- _this8.pubSub.publish("loading", {
449
+ _this9.pubSub.publish("loading", {
329
450
  status: "end",
330
451
  model: type
331
452
  });
332
453
  });
454
+ return item.promise;
333
455
  }
334
456
  }]);
335
457
 
@@ -345,25 +467,25 @@ function _error2(error) {
345
467
  }
346
468
 
347
469
  function _deleteByFilter2(type, filterFunction) {
348
- var _this9 = this;
470
+ var _this10 = this;
349
471
 
350
472
  return _classPrivateMethodGet(this, _getPromise, _getPromise2).call(this, type).then(function () {
351
- var deleted = Object.values(_this9.models[type].storedObjects).filter(function (i) {
473
+ var deleted = Object.values(_this10.models[type].storedObjects).filter(function (i) {
352
474
  return filterFunction(i.object);
353
475
  });
354
476
 
355
- var _iterator4 = _createForOfIteratorHelper(deleted),
356
- _step4;
477
+ var _iterator5 = _createForOfIteratorHelper(deleted),
478
+ _step5;
357
479
 
358
480
  try {
359
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
360
- var object = _step4.value;
481
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
482
+ var object = _step5.value;
361
483
  object.status = "deleted";
362
484
  }
363
485
  } catch (err) {
364
- _iterator4.e(err);
486
+ _iterator5.e(err);
365
487
  } finally {
366
- _iterator4.f();
488
+ _iterator5.f();
367
489
  }
368
490
 
369
491
  return deleted.map(function (i) {
@@ -373,7 +495,7 @@ function _deleteByFilter2(type, filterFunction) {
373
495
  }
374
496
 
375
497
  function _getPromise2(type) {
376
- var _this10 = this;
498
+ var _this11 = this;
377
499
 
378
500
  if (!this.models[type]) {
379
501
  return Promise.reject("The model doesn't exist");
@@ -381,15 +503,16 @@ function _getPromise2(type) {
381
503
  return Promise.reject("The model is not loaded");
382
504
  } else if (!this.models[type].promise && this.options.lazyLoad) {
383
505
  return _classPrivateMethodGet(this, _loadObjects, _loadObjects2).call(this, type).then(function () {
384
- return _this10.models[type].promise;
506
+ return _this11.models[type].promise;
385
507
  });
386
508
  } else {
387
509
  return this.models[type].promise;
388
510
  }
389
511
  }
390
512
 
391
- function _insertObject2(type, item) {
392
- var markAsNew = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
513
+ function _insertObject2(type, item, status) {
514
+ var _this12 = this;
515
+
393
516
  var model = this.models[type].model;
394
517
  var wrapper = new _Obj["default"](item, model);
395
518
  var id = wrapper.getId();
@@ -398,42 +521,57 @@ function _insertObject2(type, item) {
398
521
  throw new Error("The IDs provided for the model ".concat(type, " are not unique"));
399
522
  }
400
523
 
524
+ if (!objectStatuses.includes(status)) {
525
+ throw new Error("The provided status is not valid");
526
+ }
527
+
528
+ if (status === "mock") {
529
+ wrapper.insert = function () {
530
+ _this12.models[type].storedObjects[id].status = "new";
531
+
532
+ _this12.update([wrapper]);
533
+
534
+ delete wrapper.insert;
535
+ };
536
+ }
537
+
401
538
  this.models[type].storedObjects[id] = {
402
539
  id: id,
403
540
  fingerprint: wrapper.getFingerprint(),
404
541
  object: wrapper,
405
- status: markAsNew ? "new" : "old"
542
+ status: status
406
543
  };
407
544
  return wrapper;
408
545
  }
409
546
 
410
547
  function _loadObjects2(type) {
411
- var _this11 = this;
548
+ var _this13 = this;
412
549
 
413
550
  var item = this.models[type];
414
551
  this.pubSub.publish("loading", {
415
552
  status: "start",
416
553
  model: type
417
554
  });
418
- return item.promise = item.model.retrieveAll().then(function (items) {
419
- var _iterator5 = _createForOfIteratorHelper(items),
420
- _step5;
555
+ item.promise = item.model.retrieveAll().then(function (items) {
556
+ var _iterator6 = _createForOfIteratorHelper(items),
557
+ _step6;
421
558
 
422
559
  try {
423
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
424
- var _item2 = _step5.value;
560
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
561
+ var _item2 = _step6.value;
425
562
 
426
- _classPrivateMethodGet(_this11, _insertObject, _insertObject2).call(_this11, type, _item2, false);
563
+ _classPrivateMethodGet(_this13, _insertObject, _insertObject2).call(_this13, type, _item2, "old");
427
564
  }
428
565
  } catch (err) {
429
- _iterator5.e(err);
566
+ _iterator6.e(err);
430
567
  } finally {
431
- _iterator5.f();
568
+ _iterator6.f();
432
569
  }
433
570
 
434
- _this11.pubSub.publish("loading", {
571
+ _this13.pubSub.publish("loading", {
435
572
  status: "end",
436
573
  model: type
437
574
  });
438
575
  });
576
+ return item.promise;
439
577
  }