dataflux 1.0.4 → 1.1.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.
- package/README.md +188 -130
- package/dist/Model.js +186 -60
- package/dist/ObserverStore.js +178 -131
- package/dist/PersistentStore.js +107 -75
- package/dist/PubSub.js +59 -0
- package/dist/Store.js +283 -152
- package/dist/fingerprint.js +11 -13
- package/dist/modelHooksUtils.js +31 -14
- package/package.json +5 -5
package/dist/PubSub.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
|
|
8
|
+
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; } } }; }
|
|
9
|
+
|
|
10
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
11
|
+
|
|
12
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
13
|
+
|
|
14
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
15
|
+
|
|
16
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
17
|
+
|
|
18
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
19
|
+
|
|
20
|
+
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; }
|
|
21
|
+
|
|
22
|
+
var PubSub = /*#__PURE__*/_createClass(function PubSub() {
|
|
23
|
+
var _this = this;
|
|
24
|
+
|
|
25
|
+
_classCallCheck(this, PubSub);
|
|
26
|
+
|
|
27
|
+
_defineProperty(this, "subscribe", function (channel, callback) {
|
|
28
|
+
_this.callbacks[channel] = _this.callbacks[channel] || [];
|
|
29
|
+
|
|
30
|
+
_this.callbacks[channel].push(callback);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
_defineProperty(this, "publish", function (channel, content) {
|
|
34
|
+
var _iterator = _createForOfIteratorHelper(_this.callbacks[channel] || []),
|
|
35
|
+
_step;
|
|
36
|
+
|
|
37
|
+
try {
|
|
38
|
+
var _loop = function _loop() {
|
|
39
|
+
var clb = _step.value;
|
|
40
|
+
new Promise(function (resolve, reject) {
|
|
41
|
+
clb(content, channel);
|
|
42
|
+
resolve(true);
|
|
43
|
+
})["catch"](console.log);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
47
|
+
_loop();
|
|
48
|
+
}
|
|
49
|
+
} catch (err) {
|
|
50
|
+
_iterator.e(err);
|
|
51
|
+
} finally {
|
|
52
|
+
_iterator.f();
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
this.callbacks = {};
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
exports["default"] = PubSub;
|
package/dist/Store.js
CHANGED
|
@@ -7,202 +7,333 @@ exports["default"] = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _StoreObject = _interopRequireDefault(require("./StoreObject"));
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _PubSub = _interopRequireDefault(require("./PubSub"));
|
|
11
11
|
|
|
12
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
13
13
|
|
|
14
|
-
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
15
|
-
|
|
16
14
|
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; } } }; }
|
|
17
15
|
|
|
18
16
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
19
17
|
|
|
20
18
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
21
19
|
|
|
20
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
21
|
+
|
|
22
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
23
|
+
|
|
22
24
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
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
|
|
28
|
+
function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
|
|
27
29
|
|
|
28
|
-
function
|
|
30
|
+
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
|
29
31
|
|
|
30
|
-
|
|
31
|
-
var _this = this;
|
|
32
|
+
function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
|
|
32
33
|
|
|
33
|
-
|
|
34
|
+
var _deleteByObject = /*#__PURE__*/new WeakSet();
|
|
34
35
|
|
|
35
|
-
|
|
36
|
+
var _deleteByFilter = /*#__PURE__*/new WeakSet();
|
|
36
37
|
|
|
37
|
-
|
|
38
|
-
var type = model.getType();
|
|
38
|
+
var _getPromise = /*#__PURE__*/new WeakSet();
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
throw new Error("Not valid model object: type missing");
|
|
42
|
-
}
|
|
43
|
-
});
|
|
40
|
+
var _insertObject = /*#__PURE__*/new WeakSet();
|
|
44
41
|
|
|
45
|
-
|
|
46
|
-
_this.validateModel(model);
|
|
42
|
+
var _loadObjects = /*#__PURE__*/new WeakSet();
|
|
47
43
|
|
|
48
|
-
|
|
44
|
+
var Store = /*#__PURE__*/function () {
|
|
45
|
+
function Store() {
|
|
46
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
49
47
|
|
|
50
|
-
|
|
51
|
-
_this.models[type] = {
|
|
52
|
-
model: model,
|
|
53
|
-
storedObjects: {}
|
|
54
|
-
};
|
|
55
|
-
model.store = _this;
|
|
48
|
+
_classCallCheck(this, Store);
|
|
56
49
|
|
|
57
|
-
|
|
58
|
-
_this._loadObjects(type);
|
|
59
|
-
}
|
|
60
|
-
} else {
|
|
61
|
-
throw new Error("The model already exists");
|
|
62
|
-
}
|
|
63
|
-
});
|
|
50
|
+
_classPrivateMethodInitSpec(this, _loadObjects);
|
|
64
51
|
|
|
65
|
-
|
|
66
|
-
if (!_this.models[type]) {
|
|
67
|
-
return Promise.reject("The model doesn't exist");
|
|
68
|
-
} else if (!_this.models[type].promise && !_this.options.lazyLoad) {
|
|
69
|
-
return Promise.reject("The model is not loaded");
|
|
70
|
-
} else if (!_this.models[type].promise && _this.options.lazyLoad) {
|
|
71
|
-
return _this._loadObjects(type).then(function () {
|
|
72
|
-
return _this.models[type].promise;
|
|
73
|
-
});
|
|
74
|
-
} else {
|
|
75
|
-
return _this.models[type].promise;
|
|
76
|
-
}
|
|
77
|
-
});
|
|
52
|
+
_classPrivateMethodInitSpec(this, _insertObject);
|
|
78
53
|
|
|
79
|
-
|
|
80
|
-
var markAsNew = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
81
|
-
var model = _this.models[type].model;
|
|
82
|
-
var wrapper = new _StoreObject["default"](item, model);
|
|
83
|
-
var id = wrapper.getId();
|
|
54
|
+
_classPrivateMethodInitSpec(this, _getPromise);
|
|
84
55
|
|
|
85
|
-
|
|
86
|
-
throw new Error("The IDs provided for the model ".concat(type, " are not unique"));
|
|
87
|
-
}
|
|
56
|
+
_classPrivateMethodInitSpec(this, _deleteByFilter);
|
|
88
57
|
|
|
89
|
-
|
|
90
|
-
id: id,
|
|
91
|
-
fingerprint: wrapper.getFingerprint(),
|
|
92
|
-
object: wrapper,
|
|
93
|
-
status: markAsNew ? "new" : "old"
|
|
94
|
-
};
|
|
95
|
-
return wrapper;
|
|
96
|
-
});
|
|
58
|
+
_classPrivateMethodInitSpec(this, _deleteByObject);
|
|
97
59
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
60
|
+
this.options = {
|
|
61
|
+
autoSave: options.autoSave !== undefined ? options.autoSave : 5000,
|
|
62
|
+
saveDelay: options.saveDelay || 1000,
|
|
63
|
+
lazyLoad: options.lazyLoad || false
|
|
64
|
+
};
|
|
65
|
+
this.models = {};
|
|
66
|
+
this.pubSub = new _PubSub["default"]();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
_createClass(Store, [{
|
|
70
|
+
key: "on",
|
|
71
|
+
value: function on(channel, callback) {
|
|
72
|
+
this.pubSub.subscribe(channel, callback);
|
|
73
|
+
}
|
|
74
|
+
}, {
|
|
75
|
+
key: "validateModel",
|
|
76
|
+
value: function validateModel(model) {
|
|
77
|
+
var type = model.getType();
|
|
107
78
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
} catch (err) {
|
|
111
|
-
_iterator.e(err);
|
|
112
|
-
} finally {
|
|
113
|
-
_iterator.f();
|
|
79
|
+
if (typeof type !== "string" || type === "") {
|
|
80
|
+
throw new Error("Not valid model object: type missing");
|
|
114
81
|
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
82
|
+
}
|
|
83
|
+
}, {
|
|
84
|
+
key: "addModel",
|
|
85
|
+
value: function addModel(model) {
|
|
86
|
+
var _this = this;
|
|
87
|
+
|
|
88
|
+
return new Promise(function (resolve, reject) {
|
|
89
|
+
_this.validateModel(model);
|
|
90
|
+
|
|
91
|
+
var type = model.getType();
|
|
92
|
+
|
|
93
|
+
if (!_this.models[type]) {
|
|
94
|
+
_this.models[type] = {
|
|
95
|
+
model: model,
|
|
96
|
+
storedObjects: {}
|
|
97
|
+
};
|
|
98
|
+
model.setStore(_this);
|
|
99
|
+
|
|
100
|
+
if (!_this.options.lazyLoad) {
|
|
101
|
+
resolve(_classPrivateMethodGet(_this, _loadObjects, _loadObjects2).call(_this, type));
|
|
102
|
+
} else {
|
|
103
|
+
resolve();
|
|
104
|
+
}
|
|
105
|
+
} else {
|
|
106
|
+
reject("The model already exists");
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}, {
|
|
111
|
+
key: "update",
|
|
112
|
+
value: function update(objects) {
|
|
113
|
+
return Promise.resolve(); // Nothing to do at this level
|
|
114
|
+
}
|
|
115
|
+
}, {
|
|
116
|
+
key: "delete",
|
|
117
|
+
value: function _delete(typeOrObjects, filterFunction) {
|
|
118
|
+
if (typeof typeOrObjects === "string" && typeof filterFunction === "function") {
|
|
119
|
+
return _classPrivateMethodGet(this, _deleteByFilter, _deleteByFilter2).call(this, typeOrObjects, filterFunction);
|
|
120
|
+
} else if (_typeof(typeOrObjects) === "object" && typeOrObjects.length) {
|
|
121
|
+
return Promise.all(typeOrObjects.map(_classPrivateMethodGet(this, _deleteByObject, _deleteByObject2)));
|
|
122
|
+
} else {
|
|
123
|
+
return Promise.reject("Invalid delete request. You have to provide a list of objects or a type and a filter function");
|
|
124
124
|
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
125
|
+
}
|
|
126
|
+
}, {
|
|
127
|
+
key: "insert",
|
|
128
|
+
value: function insert(type, objects) {
|
|
129
|
+
var _this2 = this;
|
|
130
|
+
|
|
131
|
+
return _classPrivateMethodGet(this, _getPromise, _getPromise2).call(this, type).then(function () {
|
|
132
|
+
return objects.map(function (object) {
|
|
133
|
+
return _classPrivateMethodGet(_this2, _insertObject, _insertObject2).call(_this2, type, object, true);
|
|
134
|
+
});
|
|
134
135
|
});
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
return (
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
136
|
+
}
|
|
137
|
+
}, {
|
|
138
|
+
key: "get",
|
|
139
|
+
value: function get(type, id) {
|
|
140
|
+
var _this3 = this;
|
|
141
|
+
|
|
142
|
+
return _classPrivateMethodGet(this, _getPromise, _getPromise2).call(this, type).then(function () {
|
|
143
|
+
try {
|
|
144
|
+
return _this3.models[type].storedObjects[id].object;
|
|
145
|
+
} catch (error) {
|
|
146
|
+
return Promise.reject("Object not found");
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}, {
|
|
151
|
+
key: "find",
|
|
152
|
+
value: function find(type, filterFunction) {
|
|
153
|
+
var _this4 = this;
|
|
154
|
+
|
|
155
|
+
return _classPrivateMethodGet(this, _getPromise, _getPromise2).call(this, type).then(function () {
|
|
156
|
+
var all = Object.values(_this4.models[type].storedObjects).filter(function (i) {
|
|
157
|
+
return i.status !== "deleted";
|
|
158
|
+
}).map(function (i) {
|
|
159
|
+
return i.object;
|
|
160
|
+
});
|
|
161
|
+
return filterFunction ? all.filter(filterFunction) : all;
|
|
149
162
|
});
|
|
163
|
+
}
|
|
164
|
+
}, {
|
|
165
|
+
key: "applyDiff",
|
|
166
|
+
value: function applyDiff(_ref, type) {
|
|
167
|
+
var _this5 = this;
|
|
168
|
+
|
|
169
|
+
var _ref$inserted = _ref.inserted,
|
|
170
|
+
inserted = _ref$inserted === void 0 ? [] : _ref$inserted,
|
|
171
|
+
_ref$updated = _ref.updated,
|
|
172
|
+
updated = _ref$updated === void 0 ? [] : _ref$updated,
|
|
173
|
+
_ref$deleted = _ref.deleted,
|
|
174
|
+
deleted = _ref$deleted === void 0 ? [] : _ref$deleted;
|
|
175
|
+
return new Promise(function (resolve, reject) {
|
|
176
|
+
try {
|
|
177
|
+
var _iterator = _createForOfIteratorHelper(inserted.concat(updated)),
|
|
178
|
+
_step;
|
|
179
|
+
|
|
180
|
+
try {
|
|
181
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
182
|
+
var object = _step.value;
|
|
183
|
+
|
|
184
|
+
var item = _this5.models[type || object.object.getModel().getType()].storedObjects[object.id];
|
|
185
|
+
|
|
186
|
+
item.fingerprint = object.object.getFingerprint();
|
|
187
|
+
item.status = "old";
|
|
188
|
+
}
|
|
189
|
+
} catch (err) {
|
|
190
|
+
_iterator.e(err);
|
|
191
|
+
} finally {
|
|
192
|
+
_iterator.f();
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
var _iterator2 = _createForOfIteratorHelper(deleted),
|
|
196
|
+
_step2;
|
|
197
|
+
|
|
198
|
+
try {
|
|
199
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
200
|
+
var _object = _step2.value;
|
|
201
|
+
delete _this5.models[type || _object.object.getModel().getType()].storedObjects[_object.id];
|
|
202
|
+
}
|
|
203
|
+
} catch (err) {
|
|
204
|
+
_iterator2.e(err);
|
|
205
|
+
} finally {
|
|
206
|
+
_iterator2.f();
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
resolve();
|
|
210
|
+
} catch (error) {
|
|
211
|
+
return reject(error);
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
}, {
|
|
216
|
+
key: "getDiff",
|
|
217
|
+
value: function getDiff(type) {
|
|
218
|
+
var _this6 = this;
|
|
219
|
+
|
|
220
|
+
return _classPrivateMethodGet(this, _getPromise, _getPromise2).call(this, type).then(function () {
|
|
221
|
+
var objects = Object.values(_this6.models[type].storedObjects);
|
|
222
|
+
var inserted = [];
|
|
223
|
+
var updated = [];
|
|
224
|
+
var deleted = [];
|
|
225
|
+
|
|
226
|
+
for (var _i = 0, _objects = objects; _i < _objects.length; _i++) {
|
|
227
|
+
var object = _objects[_i];
|
|
228
|
+
|
|
229
|
+
if (object.status === "new") {
|
|
230
|
+
inserted.push(object);
|
|
231
|
+
} else if (object.status === "deleted") {
|
|
232
|
+
deleted.push(object);
|
|
233
|
+
} else if (object.fingerprint !== object.object.getFingerprint()) {
|
|
234
|
+
updated.push(object);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
150
237
|
|
|
151
|
-
|
|
152
|
-
|
|
238
|
+
return {
|
|
239
|
+
inserted: inserted,
|
|
240
|
+
updated: updated,
|
|
241
|
+
deleted: deleted
|
|
242
|
+
};
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
}]);
|
|
153
246
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
var object = _step2.value;
|
|
157
|
-
object.status = "deleted";
|
|
158
|
-
}
|
|
159
|
-
} catch (err) {
|
|
160
|
-
_iterator2.e(err);
|
|
161
|
-
} finally {
|
|
162
|
-
_iterator2.f();
|
|
163
|
-
}
|
|
247
|
+
return Store;
|
|
248
|
+
}();
|
|
164
249
|
|
|
165
|
-
|
|
166
|
-
return i.object;
|
|
167
|
-
}));
|
|
250
|
+
exports["default"] = Store;
|
|
168
251
|
|
|
169
|
-
|
|
170
|
-
|
|
252
|
+
function _deleteByObject2(object) {
|
|
253
|
+
return _classPrivateMethodGet(this, _deleteByFilter, _deleteByFilter2).call(this, object.getType(), function (item) {
|
|
254
|
+
return object.getId() === item.getId();
|
|
171
255
|
});
|
|
256
|
+
}
|
|
172
257
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
return _this._deleteByFilter(typeOrObjects, filterFunction);
|
|
176
|
-
} else if (_typeof(typeOrObjects) === "object" && typeOrObjects.length) {
|
|
177
|
-
return Promise.all(typeOrObjects.map(_this._deleteByObject));
|
|
178
|
-
} else {
|
|
179
|
-
throw new Error("Invalid delete request. You have to provide a list of objects or a type and a filter function");
|
|
180
|
-
}
|
|
181
|
-
});
|
|
258
|
+
function _deleteByFilter2(type, filterFunction) {
|
|
259
|
+
var _this7 = this;
|
|
182
260
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
261
|
+
return _classPrivateMethodGet(this, _getPromise, _getPromise2).call(this, type).then(function () {
|
|
262
|
+
var deleted = Object.values(_this7.models[type].storedObjects).filter(function (i) {
|
|
263
|
+
return filterFunction(i.object);
|
|
264
|
+
});
|
|
186
265
|
|
|
187
|
-
|
|
266
|
+
var _iterator3 = _createForOfIteratorHelper(deleted),
|
|
267
|
+
_step3;
|
|
188
268
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
269
|
+
try {
|
|
270
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
271
|
+
var object = _step3.value;
|
|
272
|
+
object.status = "deleted";
|
|
273
|
+
}
|
|
274
|
+
} catch (err) {
|
|
275
|
+
_iterator3.e(err);
|
|
276
|
+
} finally {
|
|
277
|
+
_iterator3.f();
|
|
278
|
+
}
|
|
192
279
|
|
|
193
|
-
|
|
194
|
-
_this.trigger("update", objects);
|
|
280
|
+
return true;
|
|
195
281
|
});
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
function _getPromise2(type) {
|
|
285
|
+
var _this8 = this;
|
|
286
|
+
|
|
287
|
+
if (!this.models[type]) {
|
|
288
|
+
return Promise.reject("The model doesn't exist");
|
|
289
|
+
} else if (!this.models[type].promise && !this.options.lazyLoad) {
|
|
290
|
+
return Promise.reject("The model is not loaded");
|
|
291
|
+
} else if (!this.models[type].promise && this.options.lazyLoad) {
|
|
292
|
+
return _classPrivateMethodGet(this, _loadObjects, _loadObjects2).call(this, type).then(function () {
|
|
293
|
+
return _this8.models[type].promise;
|
|
294
|
+
});
|
|
295
|
+
} else {
|
|
296
|
+
return this.models[type].promise;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
function _insertObject2(type, item) {
|
|
301
|
+
var markAsNew = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
302
|
+
var model = this.models[type].model;
|
|
303
|
+
var wrapper = new _StoreObject["default"](item, model);
|
|
304
|
+
var id = wrapper.getId();
|
|
305
|
+
|
|
306
|
+
if (this.models[type].storedObjects[id]) {
|
|
307
|
+
throw new Error("The IDs provided for the model ".concat(type, " are not unique"));
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
this.models[type].storedObjects[id] = {
|
|
311
|
+
id: id,
|
|
312
|
+
fingerprint: wrapper.getFingerprint(),
|
|
313
|
+
object: wrapper,
|
|
314
|
+
status: markAsNew ? "new" : "old"
|
|
315
|
+
};
|
|
316
|
+
return wrapper;
|
|
317
|
+
}
|
|
196
318
|
|
|
197
|
-
|
|
198
|
-
|
|
319
|
+
function _loadObjects2(type) {
|
|
320
|
+
var _this9 = this;
|
|
199
321
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
};
|
|
205
|
-
this.models = {};
|
|
206
|
-
});
|
|
322
|
+
var item = this.models[type];
|
|
323
|
+
return item.promise = item.model.retrieveAll().then(function (items) {
|
|
324
|
+
var _iterator4 = _createForOfIteratorHelper(items),
|
|
325
|
+
_step4;
|
|
207
326
|
|
|
208
|
-
|
|
327
|
+
try {
|
|
328
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
329
|
+
var _item = _step4.value;
|
|
330
|
+
|
|
331
|
+
_classPrivateMethodGet(_this9, _insertObject, _insertObject2).call(_this9, type, _item, false);
|
|
332
|
+
}
|
|
333
|
+
} catch (err) {
|
|
334
|
+
_iterator4.e(err);
|
|
335
|
+
} finally {
|
|
336
|
+
_iterator4.f();
|
|
337
|
+
}
|
|
338
|
+
});
|
|
339
|
+
}
|
package/dist/fingerprint.js
CHANGED
|
@@ -5,6 +5,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports["default"] = fingerprint;
|
|
7
7
|
|
|
8
|
+
var _crc = _interopRequireDefault(require("crc/crc32"));
|
|
9
|
+
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
11
|
+
|
|
8
12
|
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; } } }; }
|
|
9
13
|
|
|
10
14
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
@@ -13,34 +17,28 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
|
|
|
13
17
|
|
|
14
18
|
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
15
19
|
|
|
16
|
-
var md5 = require("md5");
|
|
17
|
-
|
|
18
20
|
var _getFingerprint = function _getFingerprint(object) {
|
|
19
21
|
switch (_typeof(object)) {
|
|
20
22
|
case "object":
|
|
21
|
-
return
|
|
23
|
+
return "o:".concat(object !== null ? getObjectFingerprint(object) : "null");
|
|
22
24
|
|
|
23
25
|
case "boolean":
|
|
24
|
-
return
|
|
26
|
+
return "b:".concat(object ? "t" : "f");
|
|
25
27
|
|
|
26
28
|
case "function":
|
|
27
29
|
throw new Error("You cannot pass a function as data item");
|
|
28
30
|
|
|
29
31
|
case "number":
|
|
30
|
-
return
|
|
32
|
+
return "n:".concat(object.toString());
|
|
31
33
|
|
|
32
34
|
case "string":
|
|
33
|
-
return
|
|
35
|
+
return "s:".concat(object);
|
|
34
36
|
|
|
35
37
|
case "undefined":
|
|
36
|
-
return
|
|
38
|
+
return "u";
|
|
37
39
|
}
|
|
38
40
|
};
|
|
39
41
|
|
|
40
|
-
var markType = function markType(object, fingerprint) {
|
|
41
|
-
return _typeof(object) + ":" + fingerprint;
|
|
42
|
-
};
|
|
43
|
-
|
|
44
42
|
var getObjectFingerprint = function getObjectFingerprint(value) {
|
|
45
43
|
var sortedKeys = Object.keys(value).sort();
|
|
46
44
|
var buff = "";
|
|
@@ -51,7 +49,7 @@ var getObjectFingerprint = function getObjectFingerprint(value) {
|
|
|
51
49
|
try {
|
|
52
50
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
53
51
|
var key = _step.value;
|
|
54
|
-
buff += key
|
|
52
|
+
buff += "".concat(key, "<").concat(fingerprint(value[key]), ">");
|
|
55
53
|
}
|
|
56
54
|
} catch (err) {
|
|
57
55
|
_iterator.e(err);
|
|
@@ -63,5 +61,5 @@ var getObjectFingerprint = function getObjectFingerprint(value) {
|
|
|
63
61
|
};
|
|
64
62
|
|
|
65
63
|
function fingerprint(object) {
|
|
66
|
-
return
|
|
64
|
+
return (0, _crc["default"])(_getFingerprint(object)).toString(16);
|
|
67
65
|
}
|