@actdim/utico 1.2.5 → 1.2.7
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 +73 -3
- package/dist/arrayExtensions.es.js +64 -38
- package/dist/arrayExtensions.es.js.map +1 -1
- package/dist/asyncLock.es.js +45 -30
- package/dist/asyncLock.es.js.map +1 -1
- package/dist/cache/cacheContracts.es.js +8 -4
- package/dist/cache/cacheContracts.es.js.map +1 -1
- package/dist/cache/memoryCache.es.js +28 -13
- package/dist/cache/memoryCache.es.js.map +1 -1
- package/dist/cache/persistentCache.es.js +174 -97
- package/dist/cache/persistentCache.es.js.map +1 -1
- package/dist/dataFormats.es.js +4 -4
- package/dist/dataFormats.es.js.map +1 -1
- package/dist/dateTimeDataFormat.es.js +211 -130
- package/dist/dateTimeDataFormat.es.js.map +1 -1
- package/dist/decorators.es.js +15 -11
- package/dist/decorators.es.js.map +1 -1
- package/dist/gfx/canvasUtils.es.js +197 -114
- package/dist/gfx/canvasUtils.es.js.map +1 -1
- package/dist/gfx/color.es.js +134 -68
- package/dist/gfx/color.es.js.map +1 -1
- package/dist/i18n/cultures.es.js +8 -8
- package/dist/i18n/cultures.es.js.map +1 -1
- package/dist/i18n/enUsCulture.es.js +2 -2
- package/dist/i18n/enUsCulture.es.js.map +1 -1
- package/dist/i18n/euCulture.es.js +2 -2
- package/dist/i18n/euCulture.es.js.map +1 -1
- package/dist/i18n/invariantCulture.es.js +2 -2
- package/dist/i18n/invariantCulture.es.js.map +1 -1
- package/dist/index.es.js.map +1 -1
- package/dist/math.es.js +14 -8
- package/dist/math.es.js.map +1 -1
- package/dist/metadata.es.js +53 -25
- package/dist/metadata.es.js.map +1 -1
- package/dist/patterns.es.js +5 -3
- package/dist/patterns.es.js.map +1 -1
- package/dist/store/dataStore.es.js +241 -157
- package/dist/store/dataStore.es.js.map +1 -1
- package/dist/store/persistentStore.es.js +23 -17
- package/dist/store/persistentStore.es.js.map +1 -1
- package/dist/store/storeContracts.es.js +7 -3
- package/dist/store/storeContracts.es.js.map +1 -1
- package/dist/store/storeDb.es.js +87 -50
- package/dist/store/storeDb.es.js.map +1 -1
- package/dist/stringCore.es.js +60 -22
- package/dist/stringCore.es.js.map +1 -1
- package/dist/structEvent.es.js +30 -17
- package/dist/structEvent.es.js.map +1 -1
- package/dist/typeCore.es.js +25 -11
- package/dist/typeCore.es.js.map +1 -1
- package/dist/typeUtils.es.js +292 -182
- package/dist/typeUtils.es.js.map +1 -1
- package/dist/utils.d.ts +3 -3
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.es.js +138 -81
- package/dist/utils.es.js.map +1 -1
- package/dist/watchable.es.js +50 -27
- package/dist/watchable.es.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,168 +1,245 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { keyOf, typed } from "../typeUtils.es.js";
|
|
4
|
+
import { StructEventTarget, StructEvent } from "../structEvent.es.js";
|
|
5
|
+
import { v4 } from "uuid";
|
|
6
|
+
import { StoreDb } from "../store/storeDb.es.js";
|
|
7
|
+
const defaultPersistentCacheOptions = {
|
|
6
8
|
cleanupTimeout: 1e3
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
+
};
|
|
10
|
+
const metadataFieldDefTemplate = ["&key", "createdAt", "updatedAt", "tags", "accessedAt", "expiresAt"];
|
|
11
|
+
const PersistentCacheEvent = typed(StructEvent);
|
|
12
|
+
const _PersistentCache = class _PersistentCache extends StructEventTarget {
|
|
9
13
|
_db;
|
|
10
14
|
_isDisposed;
|
|
11
15
|
_jobTimerId;
|
|
12
16
|
_options;
|
|
13
|
-
static delete(
|
|
14
|
-
return
|
|
17
|
+
static delete(name) {
|
|
18
|
+
return StoreDb.delete(name);
|
|
15
19
|
}
|
|
16
|
-
static exists(
|
|
17
|
-
return
|
|
20
|
+
static exists(name) {
|
|
21
|
+
return StoreDb.exists(name);
|
|
18
22
|
}
|
|
19
|
-
static open(
|
|
20
|
-
return
|
|
23
|
+
static open(name, options) {
|
|
24
|
+
return StoreDb.open(name, () => new _PersistentCache(name, options));
|
|
21
25
|
}
|
|
22
26
|
// cleanupTimeout - serviceJobTimeout
|
|
23
|
-
constructor(
|
|
24
|
-
|
|
27
|
+
constructor(name, options) {
|
|
28
|
+
super();
|
|
29
|
+
if (!name) {
|
|
25
30
|
throw new Error("Name cannot be empty.");
|
|
26
|
-
|
|
31
|
+
}
|
|
32
|
+
this._options = { ...defaultPersistentCacheOptions, ...options };
|
|
33
|
+
this._db = new StoreDb(name, metadataFieldDefTemplate);
|
|
34
|
+
this._jobTimerId = null;
|
|
35
|
+
this.scheduleServiceJob();
|
|
27
36
|
}
|
|
28
37
|
[Symbol.dispose]() {
|
|
29
|
-
|
|
38
|
+
if (!this._isDisposed) {
|
|
39
|
+
this._isDisposed = true;
|
|
40
|
+
if (this._jobTimerId) {
|
|
41
|
+
clearTimeout(this._jobTimerId);
|
|
42
|
+
this._jobTimerId = null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
this._db?.[Symbol.dispose]();
|
|
46
|
+
this._db = null;
|
|
30
47
|
}
|
|
31
48
|
open() {
|
|
32
49
|
return this._db.open();
|
|
33
50
|
}
|
|
34
|
-
exec(
|
|
35
|
-
return this._db.exec(
|
|
51
|
+
exec(action, transactionMode = "r!") {
|
|
52
|
+
return this._db.exec(action, transactionMode);
|
|
36
53
|
}
|
|
37
54
|
getKeys() {
|
|
38
55
|
return this._db.getKeys();
|
|
39
56
|
}
|
|
40
|
-
contains(
|
|
41
|
-
return this._db.contains(
|
|
57
|
+
contains(key) {
|
|
58
|
+
return this._db.contains(key);
|
|
42
59
|
}
|
|
43
|
-
delete(
|
|
44
|
-
return this._db.deleteOne(
|
|
60
|
+
delete(key) {
|
|
61
|
+
return this._db.deleteOne(key);
|
|
45
62
|
}
|
|
46
63
|
// deleteMany
|
|
47
|
-
bulkDelete(
|
|
48
|
-
return this._db.bulkDelete(
|
|
64
|
+
bulkDelete(keys) {
|
|
65
|
+
return this._db.bulkDelete(keys);
|
|
49
66
|
}
|
|
50
67
|
// clearAllAsync
|
|
51
68
|
clear() {
|
|
52
69
|
return this._db.clear();
|
|
53
70
|
}
|
|
54
|
-
onGetMetadata(
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
let
|
|
58
|
-
typeof
|
|
71
|
+
onGetMetadata(record) {
|
|
72
|
+
const now = Date.now();
|
|
73
|
+
record.accessedAt = now;
|
|
74
|
+
let newExpiresAt = record.expiresAt ?? record.absoluteExpiration ?? now;
|
|
75
|
+
if (typeof record.slidingExpiration === "number" && record.slidingExpiration > 0) {
|
|
76
|
+
newExpiresAt = now + record.slidingExpiration;
|
|
77
|
+
}
|
|
78
|
+
if (typeof record.absoluteExpiration === "number" && record.absoluteExpiration > 0 && newExpiresAt > record.absoluteExpiration) {
|
|
79
|
+
newExpiresAt = record.absoluteExpiration;
|
|
80
|
+
}
|
|
81
|
+
record.expiresAt = newExpiresAt;
|
|
59
82
|
}
|
|
60
83
|
scheduleServiceJob() {
|
|
61
84
|
if (this._options.cleanupTimeout) {
|
|
62
|
-
const
|
|
85
|
+
const doWork = /* @__PURE__ */ __name(async () => {
|
|
63
86
|
try {
|
|
64
87
|
await this.deleteExpired();
|
|
65
|
-
} catch (
|
|
66
|
-
console.error("Cache cleanup failed:",
|
|
88
|
+
} catch (err) {
|
|
89
|
+
console.error("Cache cleanup failed:", err);
|
|
67
90
|
} finally {
|
|
68
|
-
|
|
91
|
+
if (!this._isDisposed) {
|
|
92
|
+
this._jobTimerId = setTimeout(doWork, this._options.cleanupTimeout);
|
|
93
|
+
}
|
|
69
94
|
}
|
|
70
|
-
};
|
|
71
|
-
this._jobTimerId = setTimeout(
|
|
95
|
+
}, "doWork");
|
|
96
|
+
this._jobTimerId = setTimeout(doWork, this._options.cleanupTimeout);
|
|
72
97
|
}
|
|
73
98
|
}
|
|
74
99
|
// evictExpiredAsync/clearExpiredAsync
|
|
75
|
-
async deleteExpired(
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
100
|
+
async deleteExpired(ts) {
|
|
101
|
+
const result = [];
|
|
102
|
+
if (!ts) {
|
|
103
|
+
ts = Date.now();
|
|
104
|
+
}
|
|
105
|
+
let metadataRecords;
|
|
106
|
+
await this.exec(async () => {
|
|
107
|
+
metadataRecords = await this._db.metadata.where(keyOf("expiresAt")).below(ts).toArray();
|
|
108
|
+
const keys = metadataRecords.map((x) => x.key);
|
|
109
|
+
result.push(...keys);
|
|
110
|
+
await this._db.bulkDelete(keys);
|
|
111
|
+
}, "rw");
|
|
112
|
+
if (metadataRecords?.length) {
|
|
113
|
+
const evt = new PersistentCacheEvent("evict", {
|
|
85
114
|
detail: {
|
|
86
|
-
records:
|
|
115
|
+
records: metadataRecords
|
|
87
116
|
},
|
|
88
117
|
target: this,
|
|
89
|
-
cancelable:
|
|
118
|
+
cancelable: true
|
|
90
119
|
});
|
|
91
|
-
this.dispatchEvent(
|
|
120
|
+
this.dispatchEvent(evt);
|
|
92
121
|
}
|
|
93
|
-
return
|
|
122
|
+
return result;
|
|
94
123
|
}
|
|
95
|
-
async getInternal(
|
|
96
|
-
const
|
|
97
|
-
this.onGetMetadata(
|
|
98
|
-
|
|
124
|
+
async getInternal(key) {
|
|
125
|
+
const metadataRecord = await this._db.metadata.get(key);
|
|
126
|
+
this.onGetMetadata(metadataRecord);
|
|
127
|
+
await this._db.metadata.put(metadataRecord);
|
|
128
|
+
const dataRecord = await this._db.data.get(key);
|
|
99
129
|
return {
|
|
100
|
-
metadata:
|
|
101
|
-
data:
|
|
130
|
+
metadata: metadataRecord,
|
|
131
|
+
data: dataRecord
|
|
102
132
|
};
|
|
103
133
|
}
|
|
104
|
-
get(
|
|
105
|
-
return this.exec(() => this.getInternal(
|
|
106
|
-
}
|
|
107
|
-
onCreateMetadata(
|
|
108
|
-
const
|
|
109
|
-
|
|
134
|
+
get(key) {
|
|
135
|
+
return this.exec(() => this.getInternal(key), "rw");
|
|
136
|
+
}
|
|
137
|
+
onCreateMetadata(record, options) {
|
|
138
|
+
const now = Date.now();
|
|
139
|
+
record.createdAt = now;
|
|
140
|
+
record.updatedAt = now;
|
|
141
|
+
record.accessedAt = now;
|
|
142
|
+
record.slidingExpiration = options.slidingExpiration;
|
|
143
|
+
if (typeof options.absoluteExpiration === "number") {
|
|
144
|
+
record.absoluteExpiration = options.absoluteExpiration;
|
|
145
|
+
} else if (options.absoluteExpiration instanceof Date) {
|
|
146
|
+
record.absoluteExpiration = options.absoluteExpiration.getTime();
|
|
147
|
+
}
|
|
148
|
+
if (typeof options.ttl === "number") {
|
|
149
|
+
record.absoluteExpiration = now + options.ttl;
|
|
150
|
+
}
|
|
151
|
+
if (record.absoluteExpiration == void 0) {
|
|
152
|
+
record.absoluteExpiration = Infinity;
|
|
153
|
+
}
|
|
154
|
+
this.onGetMetadata(record);
|
|
110
155
|
}
|
|
111
|
-
async setInternal(
|
|
112
|
-
const
|
|
113
|
-
|
|
156
|
+
async setInternal(metadataRecord, value) {
|
|
157
|
+
const result = await this._db.metadata.put(metadataRecord);
|
|
158
|
+
await this._db.data.put({ key: metadataRecord.key, value });
|
|
159
|
+
return result;
|
|
114
160
|
}
|
|
115
161
|
// upsert
|
|
116
|
-
async set(
|
|
117
|
-
if (
|
|
162
|
+
async set(metadataRecord, value, options) {
|
|
163
|
+
if (value === void 0) {
|
|
118
164
|
throw new Error('Invalid parameter: "value".');
|
|
119
|
-
|
|
165
|
+
}
|
|
166
|
+
if (!metadataRecord.key) {
|
|
167
|
+
metadataRecord.key = v4();
|
|
168
|
+
}
|
|
169
|
+
this.onCreateMetadata(metadataRecord, options);
|
|
170
|
+
return this.exec(() => this.setInternal(metadataRecord, value), "rw");
|
|
120
171
|
}
|
|
121
172
|
// getOrAdd
|
|
122
|
-
async getOrSet(
|
|
123
|
-
if (!
|
|
124
|
-
throw new Error(
|
|
173
|
+
async getOrSet(metadataRecord, factory, options) {
|
|
174
|
+
if (!metadataRecord.key) {
|
|
175
|
+
throw new Error(`Key cannot be empty. Parameter: "metadataRecord".`);
|
|
176
|
+
}
|
|
125
177
|
return this.exec(async () => {
|
|
126
|
-
const
|
|
127
|
-
|
|
178
|
+
const existingStoreItem = await this.getInternal(metadataRecord.key);
|
|
179
|
+
if (existingStoreItem) {
|
|
180
|
+
return existingStoreItem;
|
|
181
|
+
}
|
|
182
|
+
this.onCreateMetadata(metadataRecord, options);
|
|
183
|
+
await this.setInternal(metadataRecord, factory(metadataRecord));
|
|
184
|
+
return this.getInternal(metadataRecord.key);
|
|
128
185
|
}, "rw");
|
|
129
186
|
}
|
|
130
187
|
// getMany
|
|
131
|
-
bulkGet(
|
|
188
|
+
bulkGet(keys) {
|
|
132
189
|
return this.exec(async () => {
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
190
|
+
const map = /* @__PURE__ */ new Map();
|
|
191
|
+
const metadataRecords = await this._db.metadata.bulkGet(keys);
|
|
192
|
+
for (const metadataRecord of metadataRecords) {
|
|
193
|
+
this.onGetMetadata(metadataRecord);
|
|
194
|
+
map.set(metadataRecord.key, {
|
|
195
|
+
metadata: metadataRecord
|
|
137
196
|
// data: undefined
|
|
138
197
|
});
|
|
139
|
-
await this._db.metadata.bulkPut(i);
|
|
140
|
-
const s = await this._db.data.bulkGet(t);
|
|
141
|
-
for (const a of s) {
|
|
142
|
-
const r = e.get(a.key);
|
|
143
|
-
r && (r.data = a);
|
|
144
198
|
}
|
|
145
|
-
|
|
199
|
+
await this._db.metadata.bulkPut(metadataRecords);
|
|
200
|
+
const dataRecords = await this._db.data.bulkGet(keys);
|
|
201
|
+
for (const dataRecord of dataRecords) {
|
|
202
|
+
const item = map.get(dataRecord.key);
|
|
203
|
+
if (item) {
|
|
204
|
+
item.data = dataRecord;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return [...map.values()];
|
|
146
208
|
}, "rw");
|
|
147
209
|
}
|
|
148
210
|
// setMeny
|
|
149
|
-
async bulkSet(
|
|
150
|
-
let
|
|
151
|
-
if (
|
|
152
|
-
throw new Error(`Invalid metadata record. Parameter: "metadataRecords". Index: ${
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
211
|
+
async bulkSet(metadataRecords, dataRecords, optionsProvider) {
|
|
212
|
+
let index;
|
|
213
|
+
if (metadataRecords && (index = metadataRecords.findIndex((x) => !x)) >= 0) {
|
|
214
|
+
throw new Error(`Invalid metadata record. Parameter: "metadataRecords". Index: ${index}.`);
|
|
215
|
+
}
|
|
216
|
+
if (dataRecords && (index = dataRecords.findIndex((x) => !x || !x.key || x.value === void 0)) >= 0) {
|
|
217
|
+
throw new Error(`Invalid data record. Parameter: "dataRecords". Index: ${index}.`);
|
|
218
|
+
}
|
|
219
|
+
if (!metadataRecords && !dataRecords) {
|
|
156
220
|
throw new Error("No data provided.");
|
|
157
|
-
|
|
158
|
-
|
|
221
|
+
}
|
|
222
|
+
for (const metadataRecord of metadataRecords) {
|
|
223
|
+
if (!metadataRecord.key) {
|
|
224
|
+
metadataRecord.key = v4();
|
|
225
|
+
}
|
|
226
|
+
this.onCreateMetadata(metadataRecord, optionsProvider(metadataRecord));
|
|
227
|
+
}
|
|
159
228
|
return this.exec(async () => {
|
|
160
|
-
let
|
|
161
|
-
|
|
229
|
+
let mKeys;
|
|
230
|
+
if (metadataRecords) {
|
|
231
|
+
mKeys = await this._db.metadata.bulkPut(metadataRecords, void 0, { allKeys: true });
|
|
232
|
+
}
|
|
233
|
+
if (dataRecords) {
|
|
234
|
+
await this._db.data.bulkPut(dataRecords, void 0, { allKeys: true });
|
|
235
|
+
}
|
|
236
|
+
return mKeys;
|
|
162
237
|
}, "rw");
|
|
163
238
|
}
|
|
164
|
-
}
|
|
239
|
+
};
|
|
240
|
+
__name(_PersistentCache, "PersistentCache");
|
|
241
|
+
let PersistentCache = _PersistentCache;
|
|
165
242
|
export {
|
|
166
|
-
|
|
243
|
+
PersistentCache
|
|
167
244
|
};
|
|
168
245
|
//# sourceMappingURL=persistentCache.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistentCache.es.js","sources":["D:/Src/my/actdim/public/utico/src/cache/persistentCache.ts"],"sourcesContent":null,"names":["defaultPersistentCacheOptions","metadataFieldDefTemplate","PersistentCacheEvent","typed","StructEvent","PersistentCache","StructEventTarget","name","StoreDb","options","action","transactionMode","key","keys","record","now","newExpiresAt","doWork","err","ts","result","metadataRecords","keyOf","x","evt","metadataRecord","dataRecord","value","uuid","factory","existingStoreItem","map","dataRecords","item","optionsProvider","index","mKeys"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"persistentCache.es.js","sources":["D:/Src/my/actdim/public/utico/src/cache/persistentCache.ts"],"sourcesContent":["import { keyOf, typed } from \"@/typeUtils\";\r\nimport { StructEvent, StructEventTarget } from \"@/structEvent\";\r\nimport { v4 as uuid } from \"uuid\";\r\nimport { DataRecord, FieldDef, MetadataRecord, StoreItem, TransactionMode } from \"@/store/storeContracts\";\r\nimport { CacheMetadataRecord } from \"./cacheContracts\";\r\nimport { StoreDb } from \"@/store/storeDb\";\r\n\r\ntype Duration = number | { seconds?: number; minutes?: number; hours?: number };\r\n\r\nexport type PersistentCacheOptions = {\r\n cleanupTimeout: number;\r\n};\r\n\r\nconst defaultPersistentCacheOptions = {\r\n cleanupTimeout: 1000\r\n} satisfies PersistentCacheOptions;\r\n\r\nexport type CacheOptions = {\r\n absoluteExpiration?: Date | number;\r\n ttl?: Duration;\r\n slidingExpiration?: number; // \"autoRenewOnUse\" pattern\r\n};\r\n\r\n// CacheEntryEvictionEvent\r\nexport type CacheEvictionEvent = {\r\n records: CacheMetadataRecord[];\r\n};\r\n\r\ntype PersistentCacheEventStruct = {\r\n evict: CacheEvictionEvent;\r\n};\r\n\r\n// (registry/catalog)fieldNames\r\nconst metadataFieldDefTemplate = [\"&key\", \"createdAt\", \"updatedAt\", \"tags\", \"accessedAt\", \"expiresAt\"] satisfies (FieldDef<keyof CacheMetadataRecord>)[];\r\n\r\n// ways to create StructEvent<PersistentCacheEventStruct, PersistentCache> type alias:\r\n\r\n// 1st:\r\n// class PersistentCacheEvent extends StructEvent<PersistentCacheEventStruct, PersistentCache> { }\r\n// 2nd:\r\n// type PersistentCacheEvent = StructEvent<PersistentCacheEventStruct, PersistentCache>;\r\n// const PersistentCacheEvent = StructEvent as new (\r\n// ...args: ConstructorParameters<typeof StructEvent<PersistentCacheEventStruct, PersistentCache>>\r\n// ) => PersistentCacheEvent;\r\n\r\n// 3rd:\r\nconst PersistentCacheEvent = typed(StructEvent<PersistentCacheEventStruct, PersistentCache>);\r\n\r\n// 4th:\r\n// const PersistentCacheEvent = createConstructor(StructEvent<PersistentCacheEventStruct, PersistentCache>);\r\n\r\n// implements Struct<StructEventTarget<PersistentCacheEventStruct>>\r\n// PersistentCacheManager\r\nexport class PersistentCache extends StructEventTarget<PersistentCacheEventStruct> {\r\n\r\n protected _db: StoreDb<CacheMetadataRecord>;\r\n\r\n protected _isDisposed: boolean;\r\n\r\n private _jobTimerId: number;\r\n\r\n private readonly _options: PersistentCacheOptions;\r\n\r\n static delete(name: string) {\r\n return StoreDb.delete(name);\r\n }\r\n\r\n static exists(name: string) {\r\n return StoreDb.exists(name);\r\n }\r\n\r\n static open(name: string, options?: PersistentCacheOptions) {\r\n return StoreDb.open(name, () => new PersistentCache(name, options));\r\n }\r\n\r\n // cleanupTimeout - serviceJobTimeout\r\n constructor(name: string, options: PersistentCacheOptions) {\r\n super();\r\n if (!name) {\r\n throw new Error(\"Name cannot be empty.\");\r\n }\r\n this._options = { ...defaultPersistentCacheOptions, ...options };\r\n\r\n this._db = new StoreDb<CacheMetadataRecord>(name, metadataFieldDefTemplate);\r\n\r\n this._jobTimerId = null;\r\n\r\n // https://docs.nestjs.com/techniques/task-scheduling\r\n this.scheduleServiceJob();\r\n }\r\n\r\n [Symbol.dispose]() {\r\n if (!this._isDisposed) {\r\n this._isDisposed = true;\r\n if (this._jobTimerId) {\r\n clearTimeout(this._jobTimerId);\r\n this._jobTimerId = null;\r\n }\r\n }\r\n this._db?.[Symbol.dispose]();\r\n this._db = null;\r\n }\r\n\r\n open() {\r\n return this._db.open()\r\n }\r\n\r\n private exec<T>(\r\n action: () => Promise<T>, // scope\r\n transactionMode: TransactionMode = \"r!\") {\r\n return this._db.exec(action, transactionMode);\r\n }\r\n\r\n getKeys() {\r\n return this._db.getKeys();\r\n }\r\n\r\n contains(key: string) {\r\n return this._db.contains(key);\r\n }\r\n\r\n delete(key: string) {\r\n return this._db.deleteOne(key);\r\n }\r\n\r\n // deleteMany\r\n bulkDelete(keys: string[]) {\r\n return this._db.bulkDelete(keys);\r\n }\r\n\r\n // clearAllAsync\r\n clear() {\r\n return this._db.clear();\r\n }\r\n\r\n private onGetMetadata(record: CacheMetadataRecord) {\r\n const now = Date.now();\r\n record.accessedAt = now;\r\n\r\n let newExpiresAt = record.expiresAt ?? record.absoluteExpiration ?? now;\r\n\r\n if (typeof record.slidingExpiration === 'number' && record.slidingExpiration > 0) {\r\n newExpiresAt = now + record.slidingExpiration;\r\n }\r\n\r\n if (\r\n typeof record.absoluteExpiration === 'number' &&\r\n record.absoluteExpiration > 0 &&\r\n newExpiresAt > record.absoluteExpiration\r\n ) {\r\n newExpiresAt = record.absoluteExpiration;\r\n }\r\n\r\n record.expiresAt = newExpiresAt;\r\n }\r\n\r\n private scheduleServiceJob() {\r\n if (this._options.cleanupTimeout) {\r\n const doWork = async () => {\r\n try {\r\n // purge expired entries\r\n await this.deleteExpired();\r\n } catch (err) {\r\n console.error(\"Cache cleanup failed:\", err);\r\n } finally {\r\n if (!this._isDisposed) {\r\n this._jobTimerId = setTimeout(doWork, this._options.cleanupTimeout) as unknown as number;\r\n }\r\n }\r\n };\r\n this._jobTimerId = setTimeout(doWork, this._options.cleanupTimeout) as unknown as number;\r\n }\r\n }\r\n\r\n // evictExpiredAsync/clearExpiredAsync\r\n async deleteExpired(ts?: number) {\r\n const result: string[] = []; // output keys\r\n if (!ts) {\r\n ts = Date.now();\r\n }\r\n let metadataRecords: MetadataRecord[];\r\n await this.exec(async () => {\r\n metadataRecords = await this._db.metadata.where(keyOf<CacheMetadataRecord>(\"expiresAt\")).below(ts).toArray();\r\n const keys = metadataRecords.map(x => x.key);\r\n result.push(...keys);\r\n await this._db.bulkDelete(keys);\r\n }, \"rw\");\r\n if (metadataRecords?.length) {\r\n // or new StructEvent<PersistentCacheEventStruct, this>\r\n const evt = new PersistentCacheEvent(\"evict\", {\r\n detail: {\r\n records: metadataRecords\r\n },\r\n target: this,\r\n cancelable: true\r\n });\r\n this.dispatchEvent(evt);\r\n }\r\n return result;\r\n }\r\n\r\n private async getInternal<TValue = any>(key: string): Promise<StoreItem<CacheMetadataRecord, TValue>> {\r\n const metadataRecord = await this._db.metadata.get(key);\r\n this.onGetMetadata(metadataRecord);\r\n await this._db.metadata.put(metadataRecord);\r\n const dataRecord = await this._db.data.get(key);\r\n return {\r\n metadata: metadataRecord,\r\n data: dataRecord\r\n } as StoreItem<CacheMetadataRecord, TValue>;\r\n }\r\n\r\n get<TValue = any>(key: string): Promise<StoreItem<CacheMetadataRecord, TValue>> {\r\n return this.exec(() => this.getInternal<TValue>(key), \"rw\");\r\n }\r\n\r\n private onCreateMetadata(record: CacheMetadataRecord, options: CacheOptions) {\r\n const now = Date.now();\r\n\r\n record.createdAt = now;\r\n record.updatedAt = now;\r\n record.accessedAt = now;\r\n\r\n record.slidingExpiration = options.slidingExpiration;\r\n if (typeof options.absoluteExpiration === \"number\") {\r\n record.absoluteExpiration = options.absoluteExpiration;\r\n } else if (options.absoluteExpiration instanceof Date) {\r\n record.absoluteExpiration = options.absoluteExpiration.getTime();\r\n }\r\n if (typeof options.ttl === \"number\") {\r\n record.absoluteExpiration = now + options.ttl;\r\n }\r\n if (record.absoluteExpiration == undefined) {\r\n record.absoluteExpiration = Infinity\r\n }\r\n\r\n this.onGetMetadata(record);\r\n\r\n }\r\n private async setInternal<TValue = any>(metadataRecord: CacheMetadataRecord, value: TValue) {\r\n const result = await this._db.metadata.put(metadataRecord);\r\n await this._db.data.put({ key: metadataRecord.key, value });\r\n return result;\r\n }\r\n\r\n // upsert\r\n async set<TValue = any>(metadataRecord: CacheMetadataRecord, value: TValue, options: CacheOptions) {\r\n if (value === undefined) {\r\n throw new Error('Invalid parameter: \"value\".');\r\n }\r\n if (!metadataRecord.key) {\r\n metadataRecord.key = uuid();\r\n }\r\n this.onCreateMetadata(metadataRecord, options);\r\n return this.exec(() => this.setInternal(metadataRecord, value), \"rw\");\r\n }\r\n\r\n // getOrAdd\r\n async getOrSet<TValue = any>(metadataRecord: CacheMetadataRecord, factory: (metadataRecord: CacheMetadataRecord) => TValue, options: CacheOptions) {\r\n if (!metadataRecord.key) {\r\n throw new Error(`Key cannot be empty. Parameter: \"metadataRecord\".`);\r\n }\r\n return this.exec(async () => {\r\n const existingStoreItem = await this.getInternal<TValue>(metadataRecord.key);\r\n if (existingStoreItem) {\r\n return existingStoreItem;\r\n }\r\n this.onCreateMetadata(metadataRecord, options);\r\n await this.setInternal(metadataRecord, factory(metadataRecord));\r\n return this.getInternal<TValue>(metadataRecord.key);\r\n }, \"rw\");\r\n }\r\n\r\n // getMany\r\n bulkGet<TValue = any>(keys: string[]) {\r\n return this.exec(async () => {\r\n const map = new Map<string, StoreItem<CacheMetadataRecord, TValue>>();\r\n const metadataRecords = await this._db.metadata.bulkGet(keys);\r\n for (const metadataRecord of metadataRecords) {\r\n this.onGetMetadata(metadataRecord);\r\n map.set(metadataRecord.key, {\r\n metadata: metadataRecord,\r\n // data: undefined\r\n });\r\n }\r\n await this._db.metadata.bulkPut(metadataRecords);\r\n const dataRecords = await this._db.data.bulkGet(keys);\r\n for (const dataRecord of dataRecords) {\r\n const item = map.get(dataRecord.key);\r\n if (item) {\r\n item.data = dataRecord as DataRecord<TValue>;\r\n }\r\n }\r\n return [...map.values()];\r\n }, \"rw\");\r\n }\r\n\r\n // setMeny\r\n async bulkSet<TValue = any>(metadataRecords: CacheMetadataRecord[], dataRecords: DataRecord<TValue>[], optionsProvider: (record: MetadataRecord) => CacheOptions) {\r\n let index: number;\r\n if (metadataRecords && (index = metadataRecords.findIndex(x => !x)) >= 0) {\r\n throw new Error(`Invalid metadata record. Parameter: \"metadataRecords\". Index: ${index}.`);\r\n }\r\n if (dataRecords && (index = dataRecords.findIndex(x => (!x || !x.key || x.value === undefined))) >= 0) {\r\n throw new Error(`Invalid data record. Parameter: \"dataRecords\". Index: ${index}.`);\r\n }\r\n if (!metadataRecords && !dataRecords) {\r\n throw new Error(\"No data provided.\");\r\n }\r\n for (const metadataRecord of metadataRecords) {\r\n if (!metadataRecord.key) {\r\n metadataRecord.key = uuid();\r\n }\r\n this.onCreateMetadata(metadataRecord, optionsProvider(metadataRecord));\r\n }\r\n return this.exec(async () => {\r\n let mKeys: string[], dKeys: string[];\r\n if (metadataRecords) {\r\n mKeys = await this._db.metadata.bulkPut(metadataRecords, undefined, { allKeys: true });\r\n }\r\n if (dataRecords) {\r\n dKeys = await this._db.data.bulkPut(dataRecords, undefined, { allKeys: true });\r\n }\r\n return mKeys;\r\n }, \"rw\");\r\n }\r\n}\r\n\r\n// extra links:\r\n// https://demo.agektmr.com/storage/\r\n// https://www.html5rocks.com/en/tutorials/offline/quota-research/\r\n// https://www.raymondcamden.com/2015/04/17/indexeddb-and-limits\r\n// https://github.com/jonnysmith1981/getIndexedDbSize/blob/master/getIndexedDbSize.js\r\n// https://developer.chrome.com/apps/offline_storage#query\r\n// https://golb.hplar.ch/2018/01/IndexedDB-programming-with-Dexie-js.html\r\n// http://www.forerunnerdb.com/licensing.html\r\n// https://github.com/ignasbernotas/dexie-relationships\r\n// https://medium.com/square-corner-blog/useful-tools-headless-chrome-puppeteer-for-browser-automation-testing-1ac7707bad40\r\n// https://developers.google.com/web/updates/2017/06/headless-karma-mocha-chai?hl=ru\r\n// https://github.com/puppeteer/puppeteer\r\n// https://medium.com/web-standards/puppeteer-crawl-to-markdown-7752dff36b68\r\n\r\n/*\r\n(async () => {\r\n const alreadyPersisted = await window.navigator.storage?.persisted()\r\n\r\n if (alreadyPersisted) {\r\n return;\r\n }\r\n\r\n const persistentModeEnabled = await window.navigator.storage?.persist()\r\n\r\n if (!persistentModeEnabled) { \r\n // Storage may be cleared by the UA under storage pressure\r\n } else {\r\n // Storage will be persistent\r\n // Storage will not be cleared except by explicit user action\r\n }\r\n})();\r\n*/\r\n"],"names":["uuid"],"mappings":"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"}
|
package/dist/dataFormats.es.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { dateTimeTransports
|
|
2
|
-
const
|
|
1
|
+
import { dateTimeTransports } from "./dateTimeDataFormat.es.js";
|
|
2
|
+
const dataFormats = {
|
|
3
3
|
dateTime: {
|
|
4
|
-
transports:
|
|
4
|
+
transports: dateTimeTransports
|
|
5
5
|
}
|
|
6
6
|
};
|
|
7
7
|
export {
|
|
8
|
-
|
|
8
|
+
dataFormats as default
|
|
9
9
|
};
|
|
10
10
|
//# sourceMappingURL=dataFormats.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataFormats.es.js","sources":["D:/Src/my/actdim/public/utico/src/dataFormats.ts"],"sourcesContent":
|
|
1
|
+
{"version":3,"file":"dataFormats.es.js","sources":["D:/Src/my/actdim/public/utico/src/dataFormats.ts"],"sourcesContent":["import { dateTimeTransports } from \"./dateTimeDataFormat\";\r\n\r\nexport default {\r\n dateTime: {\r\n transports: dateTimeTransports\r\n }\r\n};"],"names":[],"mappings":";AAEA,MAAA,cAAe;AAAA,EACX,UAAU;AAAA,IACN,YAAY;AAAA,EAAA;AAEpB;"}
|