bruce-models 2.1.0 → 2.1.1
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/dist/bruce-models.es5.js +81 -201
- package/dist/bruce-models.es5.js.map +1 -1
- package/dist/bruce-models.umd.js +80 -200
- package/dist/bruce-models.umd.js.map +1 -1
- package/dist/lib/common/cache.js +66 -187
- package/dist/lib/common/cache.js.map +1 -1
- package/dist/types/common/cache.d.ts +0 -2
- package/package.json +1 -1
package/dist/lib/common/cache.js
CHANGED
|
@@ -11,246 +11,125 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.CacheControl = void 0;
|
|
13
13
|
const localforage_1 = require("localforage");
|
|
14
|
-
const
|
|
15
|
-
class
|
|
14
|
+
const CACHE_VERSION_PREFIX = "v2_";
|
|
15
|
+
class CacheUtil {
|
|
16
16
|
constructor(id) {
|
|
17
|
-
this.memory = Object.create(null);
|
|
18
|
-
if (!id) {
|
|
19
|
-
id = "BRUCE_UI_MODELS_CACHE_DICT_" + object_utils_1.ObjectUtils.UId();
|
|
20
|
-
}
|
|
21
|
-
this.id = id;
|
|
22
17
|
this.store = localforage_1.default.createInstance({
|
|
23
|
-
name: id
|
|
18
|
+
name: CACHE_VERSION_PREFIX + id,
|
|
24
19
|
});
|
|
20
|
+
this.inMemoryPromises = {};
|
|
21
|
+
this.keyVersions = {};
|
|
25
22
|
}
|
|
26
|
-
|
|
27
|
-
return this.id;
|
|
28
|
-
}
|
|
29
|
-
GetItems() {
|
|
23
|
+
Set(key, value, duration = 300000) {
|
|
30
24
|
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
-
if (
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
// We can clean this every first time we load.
|
|
39
|
-
const now = new Date().getTime();
|
|
40
|
-
for (const item of raw) {
|
|
41
|
-
if (item.duration > -1 && (now - item.created) / 1000 > item.duration) {
|
|
42
|
-
if (item.inMemory) {
|
|
43
|
-
this.memory[item.key] = null;
|
|
44
|
-
delete this.memory[item.key];
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
yield this.store.removeItem(item.key);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
25
|
+
if (value instanceof Promise) {
|
|
26
|
+
this.inMemoryPromises[key] = value;
|
|
27
|
+
const currentVersion = (this.keyVersions[key] = (this.keyVersions[key] || 0) + 1);
|
|
28
|
+
value
|
|
29
|
+
.then((resolvedValue) => {
|
|
30
|
+
if (this.keyVersions[key] === currentVersion) {
|
|
31
|
+
this.Set(key, resolvedValue, duration);
|
|
50
32
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
GetKeys() {
|
|
58
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
59
|
-
return (yield this.GetItems()).map(x => "" + x.key);
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
Set(key, value, duration) {
|
|
63
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
-
key = "" + key;
|
|
65
|
-
const items = yield this.GetItems();
|
|
66
|
-
const itemIndex = items.findIndex(x => x.key == key);
|
|
67
|
-
if (itemIndex > -1) {
|
|
68
|
-
const item = items[itemIndex];
|
|
69
|
-
if (item.inMemory) {
|
|
70
|
-
this.memory[item.key] = null;
|
|
71
|
-
delete this.memory[item.key];
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
yield this.store.removeItem(item.key);
|
|
75
|
-
}
|
|
76
|
-
items.splice(itemIndex, 1);
|
|
77
|
-
}
|
|
78
|
-
const item = {
|
|
79
|
-
key: key,
|
|
80
|
-
duration: duration,
|
|
81
|
-
created: new Date().getTime(),
|
|
82
|
-
inMemory: false
|
|
83
|
-
};
|
|
84
|
-
// Short duration, keep in memory.
|
|
85
|
-
if (duration < 60) {
|
|
86
|
-
item.inMemory = true;
|
|
87
|
-
this.memory[item.key] = value;
|
|
88
|
-
}
|
|
89
|
-
// Let's resolve and store the value in local-storage.
|
|
90
|
-
// If resolution crashes then we'll keep retaining that in memory.
|
|
91
|
-
else if (value instanceof Promise) {
|
|
92
|
-
value.then((x) => __awaiter(this, void 0, void 0, function* () {
|
|
93
|
-
try {
|
|
94
|
-
const items = yield this.GetItems();
|
|
95
|
-
const item = items.find(x => x.key == key);
|
|
96
|
-
if (!item) {
|
|
97
|
-
console.log("Item was removed from cache before promise resolved.", key, items);
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
try {
|
|
101
|
-
yield this.store.setItem(item.key, x);
|
|
102
|
-
item.inMemory = false;
|
|
103
|
-
this.memory[item.key] = null;
|
|
104
|
-
delete this.memory[item.key];
|
|
105
|
-
yield this.store.setItem(this.id, items);
|
|
106
|
-
}
|
|
107
|
-
catch (e) {
|
|
108
|
-
console.warn(e);
|
|
109
|
-
}
|
|
33
|
+
})
|
|
34
|
+
.catch((error) => {
|
|
35
|
+
if (this.keyVersions[key] === currentVersion) {
|
|
36
|
+
this.Set(key, error, duration);
|
|
110
37
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
})
|
|
115
|
-
item.inMemory = true;
|
|
116
|
-
this.memory[item.key] = value;
|
|
38
|
+
})
|
|
39
|
+
.finally(() => {
|
|
40
|
+
delete this.inMemoryPromises[key];
|
|
41
|
+
});
|
|
117
42
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
this.memory[item.key] = value;
|
|
125
|
-
console.warn(e);
|
|
126
|
-
}
|
|
43
|
+
else {
|
|
44
|
+
const item = {
|
|
45
|
+
value,
|
|
46
|
+
expiry: Date.now() + duration,
|
|
47
|
+
};
|
|
48
|
+
yield this.store.setItem(key, item);
|
|
127
49
|
}
|
|
128
|
-
items.push(item);
|
|
129
|
-
yield this.store.setItem(this.id, items);
|
|
130
|
-
this.items = items;
|
|
131
50
|
});
|
|
132
51
|
}
|
|
133
|
-
|
|
52
|
+
Get(key) {
|
|
134
53
|
return __awaiter(this, void 0, void 0, function* () {
|
|
135
|
-
key
|
|
136
|
-
|
|
137
|
-
const index = items.findIndex(x => x.key == key);
|
|
138
|
-
if (index >= 0) {
|
|
139
|
-
const item = items[index];
|
|
140
|
-
if (item.inMemory) {
|
|
141
|
-
this.memory[item.key] = null;
|
|
142
|
-
delete this.memory[item.key];
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
this.store.removeItem(item.key);
|
|
146
|
-
}
|
|
147
|
-
items.splice(index, 1);
|
|
148
|
-
this.store.setItem(this.id, items);
|
|
54
|
+
if (this.inMemoryPromises[key]) {
|
|
55
|
+
return this.inMemoryPromises[key];
|
|
149
56
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
Clear() {
|
|
154
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
155
|
-
const items = yield this.GetItems();
|
|
156
|
-
for (const item of items) {
|
|
157
|
-
if (item.inMemory) {
|
|
158
|
-
this.store.removeItem(item.key);
|
|
159
|
-
}
|
|
57
|
+
const item = (yield this.store.getItem(key));
|
|
58
|
+
if (!item) {
|
|
59
|
+
return null;
|
|
160
60
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
61
|
+
if (Date.now() > item.expiry) {
|
|
62
|
+
yield this.store.removeItem(key);
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
return item.value;
|
|
164
66
|
});
|
|
165
67
|
}
|
|
166
|
-
|
|
68
|
+
ClearCache(pattern, mode = "equals") {
|
|
167
69
|
return __awaiter(this, void 0, void 0, function* () {
|
|
168
|
-
|
|
169
|
-
const
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
70
|
+
const keys = yield this.store.keys();
|
|
71
|
+
const checkFuncs = {
|
|
72
|
+
equals: (key) => key === pattern,
|
|
73
|
+
contains: (key) => key.includes(pattern),
|
|
74
|
+
startswith: (key) => key.startsWith(pattern),
|
|
75
|
+
};
|
|
76
|
+
const check = checkFuncs[mode];
|
|
77
|
+
if (!check) {
|
|
78
|
+
throw new Error("Invalid mode");
|
|
174
79
|
}
|
|
175
|
-
|
|
176
|
-
|
|
80
|
+
for (const key of keys) {
|
|
81
|
+
if (check(key)) {
|
|
82
|
+
yield this.store.removeItem(key);
|
|
83
|
+
}
|
|
177
84
|
}
|
|
178
|
-
const
|
|
179
|
-
|
|
180
|
-
|
|
85
|
+
for (const key in this.inMemoryPromises) {
|
|
86
|
+
if (check(key)) {
|
|
87
|
+
delete this.inMemoryPromises[key];
|
|
88
|
+
this.keyVersions[key]++;
|
|
89
|
+
}
|
|
181
90
|
}
|
|
182
|
-
return raw;
|
|
183
91
|
});
|
|
184
92
|
}
|
|
185
93
|
}
|
|
186
94
|
class CacheControl {
|
|
187
95
|
constructor(id) {
|
|
188
96
|
this.Disabled = false;
|
|
189
|
-
this.data = new
|
|
97
|
+
this.data = new CacheUtil(id);
|
|
190
98
|
}
|
|
191
99
|
/**
|
|
192
100
|
* @param id
|
|
193
101
|
* @param data
|
|
194
102
|
* @param duration seconds to keep the data in cache. -1 for infinite.
|
|
195
103
|
*/
|
|
196
|
-
Set(id, data, duration =
|
|
104
|
+
Set(id, data, duration = 300) {
|
|
197
105
|
return __awaiter(this, void 0, void 0, function* () {
|
|
198
|
-
|
|
106
|
+
const durationMs = duration === -1 ? undefined : duration * 1000;
|
|
107
|
+
return this.data.Set(String(id), data, durationMs);
|
|
199
108
|
});
|
|
200
109
|
}
|
|
201
110
|
Get(id) {
|
|
202
111
|
return __awaiter(this, void 0, void 0, function* () {
|
|
203
|
-
return this.data.
|
|
112
|
+
return (yield this.data.Get(String(id)));
|
|
204
113
|
});
|
|
205
114
|
}
|
|
206
115
|
Clear() {
|
|
207
116
|
return __awaiter(this, void 0, void 0, function* () {
|
|
208
|
-
return this.data.
|
|
117
|
+
return this.data.ClearCache("");
|
|
209
118
|
});
|
|
210
119
|
}
|
|
211
120
|
Remove(id) {
|
|
212
121
|
return __awaiter(this, void 0, void 0, function* () {
|
|
213
|
-
return this.data.
|
|
122
|
+
return this.data.ClearCache(String(id), "equals");
|
|
214
123
|
});
|
|
215
124
|
}
|
|
216
125
|
RemoveByStartsWith(text) {
|
|
217
126
|
return __awaiter(this, void 0, void 0, function* () {
|
|
218
|
-
|
|
219
|
-
for (const item of items) {
|
|
220
|
-
if (item.key.startsWith(text)) {
|
|
221
|
-
yield this.data.Remove(item.key);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
127
|
+
return this.data.ClearCache(text, "startswith");
|
|
224
128
|
});
|
|
225
129
|
}
|
|
226
130
|
RemoveByContains(text) {
|
|
227
131
|
return __awaiter(this, void 0, void 0, function* () {
|
|
228
|
-
|
|
229
|
-
for (const item of items) {
|
|
230
|
-
if (item.key.includes(text)) {
|
|
231
|
-
yield this.data.Remove(item.key);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
GetKeys() {
|
|
237
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
238
|
-
if (this.Disabled) {
|
|
239
|
-
return [];
|
|
240
|
-
}
|
|
241
|
-
const items = yield this.data.GetItems();
|
|
242
|
-
return items.map(x => x.key);
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
GetValues() {
|
|
246
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
247
|
-
if (this.Disabled) {
|
|
248
|
-
return [];
|
|
249
|
-
}
|
|
250
|
-
const items = yield this.data.GetItems();
|
|
251
|
-
const keys = items.map(x => x.key);
|
|
252
|
-
const values = yield Promise.all(keys.map(key => this.data.GetData(key)));
|
|
253
|
-
return values.filter(x => x != null);
|
|
132
|
+
return this.data.ClearCache(text, "contains");
|
|
254
133
|
});
|
|
255
134
|
}
|
|
256
135
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/common/cache.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAsC;
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/common/cache.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAsC;AAEtC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAQnC,MAAM,SAAS;IAKX,YAAY,EAAU;QAClB,IAAI,CAAC,KAAK,GAAG,qBAAW,CAAC,cAAc,CAAC;YACpC,IAAI,EAAE,oBAAoB,GAAG,EAAE;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IAC1B,CAAC;IAEK,GAAG,CAAC,GAAW,EAAE,KAAU,EAAE,WAAmB,MAAM;;YACxD,IAAI,KAAK,YAAY,OAAO,EAAE;gBAC1B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACnC,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAElF,KAAK;qBACJ,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE;oBACpB,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,cAAc,EAAE;wBAC1C,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;qBAC1C;gBACL,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;oBACb,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,cAAc,EAAE;wBAC1C,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;qBAClC;gBACL,CAAC,CAAC;qBACD,OAAO,CAAC,GAAG,EAAE;oBACV,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBACtC,CAAC,CAAC,CAAC;aACN;iBACI;gBACD,MAAM,IAAI,GAAe;oBACrB,KAAK;oBACL,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ;iBAChC,CAAC;gBACF,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;aACvC;QACL,CAAC;KAAA;IAEK,GAAG,CAAC,GAAW;;YACjB,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE;gBAC5B,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;aACrC;YACD,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAsB,CAAC;YAClE,IAAI,CAAC,IAAI,EAAE;gBACP,OAAO,IAAI,CAAC;aACf;YACD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;gBAC1B,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBACjC,OAAO,IAAI,CAAC;aACf;YACD,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;KAAA;IAEK,UAAU,CAAC,OAAe,EAAE,OAA6C,QAAQ;;YACnF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACrC,MAAM,UAAU,GAAkD;gBAC9D,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,OAAO;gBAChC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACxC,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;aAC/C,CAAC;YACF,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,EAAE;gBACR,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;aACnC;YACD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;gBACpB,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;oBACZ,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;iBACpC;aACJ;YACD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACrC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;oBACZ,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;oBAClC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;iBAC3B;aACJ;QACL,CAAC;KAAA;CACJ;AAED,MAAa,YAAY;IAIrB,YAAmB,EAAW;QAFvB,aAAQ,GAAY,KAAK,CAAC;QAG7B,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACU,GAAG,CAAC,EAAO,EAAE,IAAO,EAAE,WAAmB,GAAG;;YACrD,MAAM,UAAU,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;YACjE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QACvD,CAAC;KAAA;IAEY,GAAG,CAAC,EAAO;;YACpB,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAM,CAAC;QAClD,CAAC;KAAA;IAEY,KAAK;;YACd,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;KAAA;IAEY,MAAM,CAAC,EAAO;;YACvB,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QACtD,CAAC;KAAA;IAEY,kBAAkB,CAAC,IAAY;;YACxC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACpD,CAAC;KAAA;IAEY,gBAAgB,CAAC,IAAY;;YACtC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAClD,CAAC;KAAA;CACJ;AArCD,oCAqCC"}
|