@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.
Files changed (59) hide show
  1. package/README.md +73 -3
  2. package/dist/arrayExtensions.es.js +64 -38
  3. package/dist/arrayExtensions.es.js.map +1 -1
  4. package/dist/asyncLock.es.js +45 -30
  5. package/dist/asyncLock.es.js.map +1 -1
  6. package/dist/cache/cacheContracts.es.js +8 -4
  7. package/dist/cache/cacheContracts.es.js.map +1 -1
  8. package/dist/cache/memoryCache.es.js +28 -13
  9. package/dist/cache/memoryCache.es.js.map +1 -1
  10. package/dist/cache/persistentCache.es.js +174 -97
  11. package/dist/cache/persistentCache.es.js.map +1 -1
  12. package/dist/dataFormats.es.js +4 -4
  13. package/dist/dataFormats.es.js.map +1 -1
  14. package/dist/dateTimeDataFormat.es.js +211 -130
  15. package/dist/dateTimeDataFormat.es.js.map +1 -1
  16. package/dist/decorators.es.js +15 -11
  17. package/dist/decorators.es.js.map +1 -1
  18. package/dist/gfx/canvasUtils.es.js +197 -114
  19. package/dist/gfx/canvasUtils.es.js.map +1 -1
  20. package/dist/gfx/color.es.js +134 -68
  21. package/dist/gfx/color.es.js.map +1 -1
  22. package/dist/i18n/cultures.es.js +8 -8
  23. package/dist/i18n/cultures.es.js.map +1 -1
  24. package/dist/i18n/enUsCulture.es.js +2 -2
  25. package/dist/i18n/enUsCulture.es.js.map +1 -1
  26. package/dist/i18n/euCulture.es.js +2 -2
  27. package/dist/i18n/euCulture.es.js.map +1 -1
  28. package/dist/i18n/invariantCulture.es.js +2 -2
  29. package/dist/i18n/invariantCulture.es.js.map +1 -1
  30. package/dist/index.es.js.map +1 -1
  31. package/dist/math.es.js +14 -8
  32. package/dist/math.es.js.map +1 -1
  33. package/dist/metadata.es.js +53 -25
  34. package/dist/metadata.es.js.map +1 -1
  35. package/dist/patterns.es.js +5 -3
  36. package/dist/patterns.es.js.map +1 -1
  37. package/dist/store/dataStore.es.js +241 -157
  38. package/dist/store/dataStore.es.js.map +1 -1
  39. package/dist/store/persistentStore.es.js +23 -17
  40. package/dist/store/persistentStore.es.js.map +1 -1
  41. package/dist/store/storeContracts.es.js +7 -3
  42. package/dist/store/storeContracts.es.js.map +1 -1
  43. package/dist/store/storeDb.es.js +87 -50
  44. package/dist/store/storeDb.es.js.map +1 -1
  45. package/dist/stringCore.es.js +60 -22
  46. package/dist/stringCore.es.js.map +1 -1
  47. package/dist/structEvent.es.js +30 -17
  48. package/dist/structEvent.es.js.map +1 -1
  49. package/dist/typeCore.es.js +25 -11
  50. package/dist/typeCore.es.js.map +1 -1
  51. package/dist/typeUtils.es.js +292 -182
  52. package/dist/typeUtils.es.js.map +1 -1
  53. package/dist/utils.d.ts +3 -3
  54. package/dist/utils.d.ts.map +1 -1
  55. package/dist/utils.es.js +138 -81
  56. package/dist/utils.es.js.map +1 -1
  57. package/dist/watchable.es.js +50 -27
  58. package/dist/watchable.es.js.map +1 -1
  59. package/package.json +2 -2
@@ -1,168 +1,245 @@
1
- import { keyOf as u, typed as d } from "../typeUtils.es.js";
2
- import { StructEventTarget as h, StructEvent as b } from "../structEvent.es.js";
3
- import { v4 as o } from "uuid";
4
- import { StoreDb as n } from "../store/storeDb.es.js";
5
- const p = {
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
- }, c = ["&key", "createdAt", "updatedAt", "tags", "accessedAt", "expiresAt"], f = d(b);
8
- class l extends h {
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(t) {
14
- return n.delete(t);
17
+ static delete(name) {
18
+ return StoreDb.delete(name);
15
19
  }
16
- static exists(t) {
17
- return n.exists(t);
20
+ static exists(name) {
21
+ return StoreDb.exists(name);
18
22
  }
19
- static open(t, e) {
20
- return n.open(t, () => new l(t, e));
23
+ static open(name, options) {
24
+ return StoreDb.open(name, () => new _PersistentCache(name, options));
21
25
  }
22
26
  // cleanupTimeout - serviceJobTimeout
23
- constructor(t, e) {
24
- if (super(), !t)
27
+ constructor(name, options) {
28
+ super();
29
+ if (!name) {
25
30
  throw new Error("Name cannot be empty.");
26
- this._options = { ...p, ...e }, this._db = new n(t, c), this._jobTimerId = null, this.scheduleServiceJob();
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
- this._isDisposed || (this._isDisposed = !0, this._jobTimerId && (clearTimeout(this._jobTimerId), this._jobTimerId = null)), this._db?.[Symbol.dispose](), this._db = null;
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(t, e = "r!") {
35
- return this._db.exec(t, e);
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(t) {
41
- return this._db.contains(t);
57
+ contains(key) {
58
+ return this._db.contains(key);
42
59
  }
43
- delete(t) {
44
- return this._db.deleteOne(t);
60
+ delete(key) {
61
+ return this._db.deleteOne(key);
45
62
  }
46
63
  // deleteMany
47
- bulkDelete(t) {
48
- return this._db.bulkDelete(t);
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(t) {
55
- const e = Date.now();
56
- t.accessedAt = e;
57
- let i = t.expiresAt ?? t.absoluteExpiration ?? e;
58
- typeof t.slidingExpiration == "number" && t.slidingExpiration > 0 && (i = e + t.slidingExpiration), typeof t.absoluteExpiration == "number" && t.absoluteExpiration > 0 && i > t.absoluteExpiration && (i = t.absoluteExpiration), t.expiresAt = i;
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 t = async () => {
85
+ const doWork = /* @__PURE__ */ __name(async () => {
63
86
  try {
64
87
  await this.deleteExpired();
65
- } catch (e) {
66
- console.error("Cache cleanup failed:", e);
88
+ } catch (err) {
89
+ console.error("Cache cleanup failed:", err);
67
90
  } finally {
68
- this._isDisposed || (this._jobTimerId = setTimeout(t, this._options.cleanupTimeout));
91
+ if (!this._isDisposed) {
92
+ this._jobTimerId = setTimeout(doWork, this._options.cleanupTimeout);
93
+ }
69
94
  }
70
- };
71
- this._jobTimerId = setTimeout(t, this._options.cleanupTimeout);
95
+ }, "doWork");
96
+ this._jobTimerId = setTimeout(doWork, this._options.cleanupTimeout);
72
97
  }
73
98
  }
74
99
  // evictExpiredAsync/clearExpiredAsync
75
- async deleteExpired(t) {
76
- const e = [];
77
- t || (t = Date.now());
78
- let i;
79
- if (await this.exec(async () => {
80
- i = await this._db.metadata.where(u("expiresAt")).below(t).toArray();
81
- const s = i.map((a) => a.key);
82
- e.push(...s), await this._db.bulkDelete(s);
83
- }, "rw"), i?.length) {
84
- const s = new f("evict", {
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: i
115
+ records: metadataRecords
87
116
  },
88
117
  target: this,
89
- cancelable: !0
118
+ cancelable: true
90
119
  });
91
- this.dispatchEvent(s);
120
+ this.dispatchEvent(evt);
92
121
  }
93
- return e;
122
+ return result;
94
123
  }
95
- async getInternal(t) {
96
- const e = await this._db.metadata.get(t);
97
- this.onGetMetadata(e), await this._db.metadata.put(e);
98
- const i = await this._db.data.get(t);
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: e,
101
- data: i
130
+ metadata: metadataRecord,
131
+ data: dataRecord
102
132
  };
103
133
  }
104
- get(t) {
105
- return this.exec(() => this.getInternal(t), "rw");
106
- }
107
- onCreateMetadata(t, e) {
108
- const i = Date.now();
109
- t.createdAt = i, t.updatedAt = i, t.accessedAt = i, t.slidingExpiration = e.slidingExpiration, typeof e.absoluteExpiration == "number" ? t.absoluteExpiration = e.absoluteExpiration : e.absoluteExpiration instanceof Date && (t.absoluteExpiration = e.absoluteExpiration.getTime()), typeof e.ttl == "number" && (t.absoluteExpiration = i + e.ttl), t.absoluteExpiration == null && (t.absoluteExpiration = 1 / 0), this.onGetMetadata(t);
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(t, e) {
112
- const i = await this._db.metadata.put(t);
113
- return await this._db.data.put({ key: t.key, value: e }), i;
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(t, e, i) {
117
- if (e === void 0)
162
+ async set(metadataRecord, value, options) {
163
+ if (value === void 0) {
118
164
  throw new Error('Invalid parameter: "value".');
119
- return t.key || (t.key = o()), this.onCreateMetadata(t, i), this.exec(() => this.setInternal(t, e), "rw");
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(t, e, i) {
123
- if (!t.key)
124
- throw new Error('Key cannot be empty. Parameter: "metadataRecord".');
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 s = await this.getInternal(t.key);
127
- return s || (this.onCreateMetadata(t, i), await this.setInternal(t, e(t)), this.getInternal(t.key));
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(t) {
188
+ bulkGet(keys) {
132
189
  return this.exec(async () => {
133
- const e = /* @__PURE__ */ new Map(), i = await this._db.metadata.bulkGet(t);
134
- for (const a of i)
135
- this.onGetMetadata(a), e.set(a.key, {
136
- metadata: a
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
- return [...e.values()];
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(t, e, i) {
150
- let s;
151
- if (t && (s = t.findIndex((a) => !a)) >= 0)
152
- throw new Error(`Invalid metadata record. Parameter: "metadataRecords". Index: ${s}.`);
153
- if (e && (s = e.findIndex((a) => !a || !a.key || a.value === void 0)) >= 0)
154
- throw new Error(`Invalid data record. Parameter: "dataRecords". Index: ${s}.`);
155
- if (!t && !e)
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
- for (const a of t)
158
- a.key || (a.key = o()), this.onCreateMetadata(a, i(a));
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 a;
161
- return t && (a = await this._db.metadata.bulkPut(t, void 0, { allKeys: !0 })), e && await this._db.data.bulkPut(e, void 0, { allKeys: !0 }), a;
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
- l as PersistentCache
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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"}
@@ -1,10 +1,10 @@
1
- import { dateTimeTransports as t } from "./dateTimeDataFormat.es.js";
2
- const r = {
1
+ import { dateTimeTransports } from "./dateTimeDataFormat.es.js";
2
+ const dataFormats = {
3
3
  dateTime: {
4
- transports: t
4
+ transports: dateTimeTransports
5
5
  }
6
6
  };
7
7
  export {
8
- r as default
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":null,"names":["dataFormats","dateTimeTransports"],"mappings":";AAEA,MAAAA,IAAe;AAAA,EACX,UAAU;AAAA,IACN,YAAYC;AAAA,EAAA;AAEpB;"}
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;"}