@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,55 +1,66 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { v4 } from "uuid";
|
|
4
|
+
import { keyOf } from "../typeUtils.es.js";
|
|
5
|
+
import { StoreDb } from "./storeDb.es.js";
|
|
6
|
+
function* reverseMapValues(map) {
|
|
7
|
+
const keys = [...map.keys()];
|
|
8
|
+
for (let i = keys.length - 1; i >= 0; i--) {
|
|
9
|
+
yield map.get(keys[i]);
|
|
10
|
+
}
|
|
8
11
|
}
|
|
9
|
-
|
|
12
|
+
__name(reverseMapValues, "reverseMapValues");
|
|
13
|
+
const _StoreCollection = class _StoreCollection {
|
|
10
14
|
_metadata;
|
|
11
|
-
constructor(
|
|
12
|
-
this._metadata =
|
|
15
|
+
constructor(metadata) {
|
|
16
|
+
this._metadata = metadata;
|
|
13
17
|
}
|
|
14
18
|
get db() {
|
|
15
19
|
return this._metadata.db;
|
|
16
20
|
}
|
|
17
|
-
async toArray(
|
|
18
|
-
const
|
|
19
|
-
return
|
|
20
|
-
const
|
|
21
|
-
let
|
|
22
|
-
if (
|
|
23
|
-
const
|
|
24
|
-
|
|
21
|
+
async toArray(orderBy, orderDirection, transactionMode = "r") {
|
|
22
|
+
const db = this.db;
|
|
23
|
+
return db.exec(async () => {
|
|
24
|
+
const map = /* @__PURE__ */ new Map();
|
|
25
|
+
let populate = this._metadata.each.bind(this._metadata);
|
|
26
|
+
if (orderBy && orderDirection) {
|
|
27
|
+
const metadataRecords = await this._metadata.sortBy(orderBy);
|
|
28
|
+
populate = metadataRecords.forEach.bind(metadataRecords);
|
|
25
29
|
}
|
|
26
|
-
await
|
|
27
|
-
|
|
28
|
-
metadata:
|
|
30
|
+
await populate((metadataRecord) => {
|
|
31
|
+
map.set(metadataRecord.key, {
|
|
32
|
+
metadata: metadataRecord
|
|
29
33
|
// data: undefined
|
|
30
34
|
});
|
|
31
35
|
});
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
const keys = [...map.keys()];
|
|
37
|
+
const dataRecords = await db.data.bulkGet(keys);
|
|
38
|
+
for (const dataRecord of dataRecords) {
|
|
39
|
+
if (dataRecord) {
|
|
40
|
+
const item = map.get(dataRecord.key);
|
|
41
|
+
if (item) {
|
|
42
|
+
item.data = dataRecord;
|
|
43
|
+
}
|
|
37
44
|
}
|
|
38
|
-
|
|
39
|
-
|
|
45
|
+
}
|
|
46
|
+
if (orderDirection === "desc") {
|
|
47
|
+
return [...reverseMapValues(map)];
|
|
48
|
+
}
|
|
49
|
+
return [...map.values()];
|
|
50
|
+
}, transactionMode);
|
|
40
51
|
}
|
|
41
|
-
orderBy(
|
|
42
|
-
return this.toArray(
|
|
52
|
+
orderBy(field, direction, transactionMode = "r") {
|
|
53
|
+
return this.toArray(field, direction, transactionMode);
|
|
43
54
|
}
|
|
44
|
-
filter(
|
|
45
|
-
const
|
|
46
|
-
return new
|
|
55
|
+
filter(filter) {
|
|
56
|
+
const metadata = this._metadata.filter(filter);
|
|
57
|
+
return new _StoreCollection(metadata);
|
|
47
58
|
}
|
|
48
|
-
limit(
|
|
49
|
-
return new
|
|
59
|
+
limit(n) {
|
|
60
|
+
return new _StoreCollection(this._metadata.limit(n));
|
|
50
61
|
}
|
|
51
|
-
offset(
|
|
52
|
-
return new
|
|
62
|
+
offset(n) {
|
|
63
|
+
return new _StoreCollection(this._metadata.offset(n));
|
|
53
64
|
}
|
|
54
65
|
getKeys() {
|
|
55
66
|
return this._metadata.primaryKeys();
|
|
@@ -57,182 +68,255 @@ class d {
|
|
|
57
68
|
getCount() {
|
|
58
69
|
return this._metadata.count();
|
|
59
70
|
}
|
|
60
|
-
getFilterKeys(
|
|
61
|
-
|
|
71
|
+
getFilterKeys(distinct) {
|
|
72
|
+
if (distinct) {
|
|
73
|
+
return this._metadata.uniqueKeys();
|
|
74
|
+
}
|
|
75
|
+
return this._metadata.keys();
|
|
62
76
|
}
|
|
63
|
-
modifyMetadata(
|
|
64
|
-
if (!
|
|
77
|
+
modifyMetadata(callback, transactionMode = "rw") {
|
|
78
|
+
if (!callback) {
|
|
65
79
|
throw new Error("callback cannot be undefined.");
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
80
|
+
}
|
|
81
|
+
return this.db.exec(async () => {
|
|
82
|
+
return this._metadata.modify((r) => {
|
|
83
|
+
callback(r);
|
|
84
|
+
});
|
|
85
|
+
}, transactionMode);
|
|
69
86
|
}
|
|
70
|
-
modifyData(
|
|
71
|
-
if (!
|
|
87
|
+
modifyData(callback, transactionMode = "rw") {
|
|
88
|
+
if (!callback) {
|
|
72
89
|
throw new Error("callback cannot be undefined.");
|
|
90
|
+
}
|
|
73
91
|
return this.db.exec(async () => {
|
|
74
|
-
const
|
|
75
|
-
return await this.db.data.where(
|
|
76
|
-
|
|
92
|
+
const keys = await this.getKeys();
|
|
93
|
+
return await this.db.data.where(keyOf("key")).anyOf(keys).modify((r) => {
|
|
94
|
+
callback(r);
|
|
77
95
|
});
|
|
78
|
-
},
|
|
96
|
+
}, transactionMode);
|
|
79
97
|
}
|
|
80
|
-
modify(
|
|
98
|
+
modify(metadataCallback, dataCallback, transactionMode = "rw") {
|
|
81
99
|
return this.db.exec(async () => {
|
|
82
|
-
const
|
|
83
|
-
let
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
100
|
+
const keys = [];
|
|
101
|
+
let mc;
|
|
102
|
+
if (metadataCallback) {
|
|
103
|
+
mc = await this._metadata.modify((r) => {
|
|
104
|
+
keys.push(r.key);
|
|
105
|
+
metadataCallback(r);
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
if (dataCallback) {
|
|
109
|
+
await this.db.data.where(keyOf("key")).anyOf(keys).modify((r) => {
|
|
110
|
+
dataCallback(r);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return mc;
|
|
114
|
+
}, transactionMode);
|
|
90
115
|
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
116
|
+
};
|
|
117
|
+
__name(_StoreCollection, "StoreCollection");
|
|
118
|
+
let StoreCollection = _StoreCollection;
|
|
119
|
+
function createWhereFilter(source, factory) {
|
|
120
|
+
const methodCache = /* @__PURE__ */ new WeakMap();
|
|
121
|
+
return new Proxy(source, {
|
|
122
|
+
get(target, prop, receiver) {
|
|
123
|
+
const value = Reflect.get(target, prop, receiver);
|
|
124
|
+
if (typeof value === "function") {
|
|
125
|
+
if (!methodCache.has(value)) {
|
|
126
|
+
methodCache.set(value, new Proxy(value, {
|
|
127
|
+
apply(targetFn, thisArg, args) {
|
|
128
|
+
return factory(Reflect.apply(targetFn, thisArg, args));
|
|
129
|
+
}
|
|
130
|
+
}));
|
|
100
131
|
}
|
|
101
|
-
|
|
132
|
+
return methodCache.get(value);
|
|
133
|
+
}
|
|
134
|
+
return value;
|
|
102
135
|
}
|
|
103
136
|
});
|
|
104
137
|
}
|
|
105
|
-
|
|
138
|
+
__name(createWhereFilter, "createWhereFilter");
|
|
139
|
+
const _DataStore = class _DataStore {
|
|
106
140
|
_db;
|
|
107
|
-
constructor(
|
|
108
|
-
if (!
|
|
141
|
+
constructor(name, metadataFieldDefTemplate) {
|
|
142
|
+
if (!name) {
|
|
109
143
|
throw new Error("Name cannot be empty.");
|
|
110
|
-
|
|
144
|
+
}
|
|
145
|
+
this._db = new StoreDb(name, metadataFieldDefTemplate);
|
|
111
146
|
}
|
|
112
147
|
[Symbol.dispose]() {
|
|
113
|
-
this._db?.[Symbol.dispose]()
|
|
148
|
+
this._db?.[Symbol.dispose]();
|
|
149
|
+
this._db = null;
|
|
114
150
|
}
|
|
115
151
|
open() {
|
|
116
152
|
return this._db.open();
|
|
117
153
|
}
|
|
118
|
-
exec(
|
|
119
|
-
return this._db.exec(
|
|
154
|
+
exec(action, transactionMode = "r!") {
|
|
155
|
+
return this._db.exec(action, transactionMode);
|
|
120
156
|
}
|
|
121
157
|
getKeys() {
|
|
122
158
|
return this._db.getKeys();
|
|
123
159
|
}
|
|
124
|
-
contains(
|
|
125
|
-
return this._db.contains(
|
|
160
|
+
contains(key, transactionMode = "r") {
|
|
161
|
+
return this._db.contains(key, transactionMode);
|
|
126
162
|
}
|
|
127
|
-
delete(
|
|
128
|
-
return this._db.deleteOne(
|
|
163
|
+
delete(key, transactionMode = "rw") {
|
|
164
|
+
return this._db.deleteOne(key, transactionMode);
|
|
129
165
|
}
|
|
130
166
|
// deleteMany
|
|
131
|
-
bulkDelete(
|
|
132
|
-
return this._db.bulkDelete(
|
|
167
|
+
bulkDelete(keys, transactionMode = "rw") {
|
|
168
|
+
return this._db.bulkDelete(keys, transactionMode);
|
|
133
169
|
}
|
|
134
170
|
// clearAll
|
|
135
|
-
clear(
|
|
136
|
-
return this._db.clear(
|
|
171
|
+
clear(transactionMode = "rw") {
|
|
172
|
+
return this._db.clear(transactionMode);
|
|
137
173
|
}
|
|
138
|
-
async getInternal(
|
|
139
|
-
const
|
|
140
|
-
if (!
|
|
141
|
-
const
|
|
142
|
-
return { metadata:
|
|
174
|
+
async getInternal(key) {
|
|
175
|
+
const metadataRecord = await this._db.metadata.get(key);
|
|
176
|
+
if (!metadataRecord) return void 0;
|
|
177
|
+
const dataRecord = await this._db.data.get(key);
|
|
178
|
+
return { metadata: metadataRecord, data: dataRecord };
|
|
143
179
|
}
|
|
144
|
-
async setInternal(
|
|
145
|
-
|
|
146
|
-
const
|
|
147
|
-
|
|
180
|
+
async setInternal(metadataRecord, value) {
|
|
181
|
+
if (!metadataRecord.key) metadataRecord.key = v4();
|
|
182
|
+
const result = await this._db.metadata.put(metadataRecord);
|
|
183
|
+
await this._db.data.put({ key: metadataRecord.key, value });
|
|
184
|
+
return result;
|
|
148
185
|
}
|
|
149
|
-
get(
|
|
150
|
-
return this.exec(() => this.getInternal(
|
|
186
|
+
get(key, transactionMode = "r?") {
|
|
187
|
+
return this.exec(() => this.getInternal(key), transactionMode);
|
|
151
188
|
}
|
|
152
189
|
// upsert
|
|
153
|
-
async set(
|
|
154
|
-
if (
|
|
190
|
+
async set(metadataRecord, value, transactionMode = "rw") {
|
|
191
|
+
if (value === void 0) {
|
|
155
192
|
throw new Error('Invalid parameter: "value".');
|
|
156
|
-
|
|
193
|
+
}
|
|
194
|
+
return this.exec(() => this.setInternal(metadataRecord, value), transactionMode);
|
|
157
195
|
}
|
|
158
196
|
// getOrAdd
|
|
159
|
-
async getOrSet(
|
|
160
|
-
if (!
|
|
161
|
-
throw new Error(
|
|
197
|
+
async getOrSet(metadataRecord, factory, transactionMode = "rw") {
|
|
198
|
+
if (!metadataRecord.key) {
|
|
199
|
+
throw new Error(`Key cannot be empty. Parameter: "metadataRecord".`);
|
|
200
|
+
}
|
|
162
201
|
return this.exec(async () => {
|
|
163
|
-
const
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
202
|
+
const existing = await this.getInternal(metadataRecord.key);
|
|
203
|
+
if (existing) return existing;
|
|
204
|
+
await this.setInternal(metadataRecord, factory(metadataRecord));
|
|
205
|
+
return this.getInternal(metadataRecord.key);
|
|
206
|
+
}, transactionMode);
|
|
207
|
+
}
|
|
208
|
+
async update(key, metadataChanges, valueChanges, transactionMode = "rw") {
|
|
209
|
+
if (!key) {
|
|
169
210
|
throw new Error('Key cannot be empty. Parameter: "key".');
|
|
170
|
-
|
|
211
|
+
}
|
|
212
|
+
if (!metadataChanges && !valueChanges) {
|
|
171
213
|
throw new Error("No changes provided.");
|
|
214
|
+
}
|
|
172
215
|
return this.exec(async () => {
|
|
173
|
-
let
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
216
|
+
let mc;
|
|
217
|
+
if (metadataChanges) {
|
|
218
|
+
mc = await this._db.metadata.update(key, metadataChanges);
|
|
219
|
+
}
|
|
220
|
+
if (valueChanges) {
|
|
221
|
+
await this._db.data.update(key, valueChanges);
|
|
222
|
+
}
|
|
223
|
+
return mc;
|
|
224
|
+
}, transactionMode);
|
|
225
|
+
}
|
|
226
|
+
async bulkUpdate(metadataChangeSets, dataChangeSets, transactionMode = "rw") {
|
|
227
|
+
let index;
|
|
228
|
+
if (metadataChangeSets && (index = metadataChangeSets.findIndex((x) => !x.key)) >= 0) {
|
|
229
|
+
throw new Error(`Key cannot be empty. Parameter: "metadataChangeSets". Invalid item index: ${index}.`);
|
|
230
|
+
}
|
|
231
|
+
if (dataChangeSets && (index = dataChangeSets.findIndex((x) => !x.key)) >= 0) {
|
|
232
|
+
throw new Error(`Key cannot be empty. Parameter: "valueChangeSets". Invalid item index: ${index}.`);
|
|
233
|
+
}
|
|
183
234
|
return this.exec(async () => {
|
|
184
|
-
let
|
|
185
|
-
|
|
186
|
-
|
|
235
|
+
let cm;
|
|
236
|
+
if (metadataChangeSets) {
|
|
237
|
+
cm = await this._db.metadata.bulkUpdate(metadataChangeSets);
|
|
238
|
+
}
|
|
239
|
+
if (dataChangeSets) {
|
|
240
|
+
await this._db.data.bulkUpdate(dataChangeSets);
|
|
241
|
+
}
|
|
242
|
+
return cm;
|
|
243
|
+
}, transactionMode);
|
|
187
244
|
}
|
|
188
245
|
// getMany
|
|
189
|
-
bulkGet(
|
|
246
|
+
bulkGet(keys, transactionMode = "r") {
|
|
190
247
|
return this.exec(async () => {
|
|
191
|
-
const
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
if (i) {
|
|
197
|
-
const o = r.get(i.key);
|
|
198
|
-
o && (o.data = i);
|
|
248
|
+
const map = /* @__PURE__ */ new Map();
|
|
249
|
+
const metadataRecords = await this._db.metadata.bulkGet(keys);
|
|
250
|
+
for (const metadataRecord of metadataRecords) {
|
|
251
|
+
if (metadataRecord) {
|
|
252
|
+
map.set(metadataRecord.key, { metadata: metadataRecord });
|
|
199
253
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
254
|
+
}
|
|
255
|
+
const dataRecords = await this._db.data.bulkGet(keys);
|
|
256
|
+
for (const dataRecord of dataRecords) {
|
|
257
|
+
if (dataRecord) {
|
|
258
|
+
const item = map.get(dataRecord.key);
|
|
259
|
+
if (item) {
|
|
260
|
+
item.data = dataRecord;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return [...map.values()];
|
|
265
|
+
}, transactionMode);
|
|
266
|
+
}
|
|
267
|
+
async bulkSet(metadataRecords, dataRecords, transactionMode = "rw") {
|
|
268
|
+
let index;
|
|
269
|
+
if (metadataRecords && (index = metadataRecords.findIndex((x) => !x)) >= 0) {
|
|
270
|
+
throw new Error(`Invalid metadata record. Parameter: "metadataRecords". Index: ${index}.`);
|
|
271
|
+
}
|
|
272
|
+
if (dataRecords && (index = dataRecords.findIndex((x) => !x || !x.key || x.value === void 0)) >= 0) {
|
|
273
|
+
throw new Error(`Invalid data record. Parameter: "dataRecords". Index: ${index}.`);
|
|
274
|
+
}
|
|
275
|
+
if (!metadataRecords && !dataRecords) {
|
|
210
276
|
throw new Error("No data provided.");
|
|
211
|
-
|
|
212
|
-
|
|
277
|
+
}
|
|
278
|
+
for (const metadataRecord of metadataRecords) {
|
|
279
|
+
if (!metadataRecord.key) {
|
|
280
|
+
metadataRecord.key = v4();
|
|
281
|
+
}
|
|
282
|
+
}
|
|
213
283
|
return this.exec(async () => {
|
|
214
|
-
let
|
|
215
|
-
|
|
216
|
-
|
|
284
|
+
let mKeys;
|
|
285
|
+
if (metadataRecords) {
|
|
286
|
+
mKeys = await this._db.metadata.bulkPut(metadataRecords, void 0, { allKeys: true });
|
|
287
|
+
}
|
|
288
|
+
if (dataRecords) {
|
|
289
|
+
await this._db.data.bulkPut(dataRecords, void 0, { allKeys: true });
|
|
290
|
+
}
|
|
291
|
+
return mKeys;
|
|
292
|
+
}, transactionMode);
|
|
217
293
|
}
|
|
218
|
-
orderBy(
|
|
219
|
-
let
|
|
220
|
-
|
|
294
|
+
orderBy(field, direction, distinct = false) {
|
|
295
|
+
let metadata = this._db.metadata.orderBy(field);
|
|
296
|
+
if (direction === "desc") {
|
|
297
|
+
metadata = metadata.reverse();
|
|
298
|
+
}
|
|
299
|
+
if (distinct) {
|
|
300
|
+
metadata = metadata.distinct();
|
|
301
|
+
}
|
|
302
|
+
return new StoreCollection(metadata);
|
|
221
303
|
}
|
|
222
|
-
distinct(
|
|
223
|
-
const
|
|
224
|
-
return new
|
|
304
|
+
distinct(field) {
|
|
305
|
+
const metadata = this._db.metadata.orderBy(field).distinct();
|
|
306
|
+
return new StoreCollection(metadata);
|
|
225
307
|
}
|
|
226
308
|
query() {
|
|
227
|
-
return new
|
|
309
|
+
return new StoreCollection(this._db.metadata.toCollection());
|
|
228
310
|
}
|
|
229
311
|
// filter
|
|
230
|
-
where(
|
|
231
|
-
const
|
|
232
|
-
return
|
|
312
|
+
where(field) {
|
|
313
|
+
const source = this._db.metadata.where(field);
|
|
314
|
+
return createWhereFilter(source, (c) => new StoreCollection(c));
|
|
233
315
|
}
|
|
234
|
-
}
|
|
316
|
+
};
|
|
317
|
+
__name(_DataStore, "DataStore");
|
|
318
|
+
let DataStore = _DataStore;
|
|
235
319
|
export {
|
|
236
|
-
|
|
320
|
+
DataStore
|
|
237
321
|
};
|
|
238
322
|
//# sourceMappingURL=dataStore.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataStore.es.js","sources":["D:/Src/my/actdim/public/utico/src/store/dataStore.ts"],"sourcesContent":null,"names":["reverseMapValues","map","keys","i","StoreCollection","metadata","orderBy","orderDirection","transactionMode","db","populate","metadataRecords","metadataRecord","dataRecords","dataRecord","item","field","direction","filter","n","distinct","callback","keyOf","r","metadataCallback","dataCallback","mc","createWhereFilter","source","factory","methodCache","target","prop","receiver","value","targetFn","thisArg","args","DataStore","name","metadataFieldDefTemplate","StoreDb","action","key","uuid","result","existing","metadataChanges","valueChanges","metadataChangeSets","dataChangeSets","index","x","cm","mKeys","c"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dataStore.es.js","sources":["D:/Src/my/actdim/public/utico/src/store/dataStore.ts"],"sourcesContent":["import * as Dexie from \"dexie\";\r\nimport { v4 as uuid } from \"uuid\";\r\nimport { keyOf } from \"@/typeUtils\";\r\nimport { KeyPathValueMap } from \"@/typeCore\";\r\nimport {\r\n ChangeSet,\r\n DataRecord,\r\n FieldDefTemplate,\r\n IndexableType,\r\n IStoreCollection,\r\n WhereFilter,\r\n MetadataRecord,\r\n OrderDirection,\r\n StoreBase,\r\n StoreItem,\r\n TransactionMode\r\n} from \"./storeContracts\";\r\nimport { StoreDb } from \"@/store/storeDb\";\r\n\r\nfunction* reverseMapValues<K, V>(map: Map<K, V>) {\r\n const keys = [...map.keys()];\r\n for (let i = keys.length - 1; i >= 0; i--) {\r\n yield map.get(keys[i])!;\r\n }\r\n}\r\n\r\nclass StoreCollection<T extends MetadataRecord = MetadataRecord, TValue = unknown> implements IStoreCollection<T, TValue> {\r\n private _metadata: Dexie.Collection<T>;\r\n\r\n constructor(\r\n metadata: Dexie.Collection<T>\r\n ) {\r\n this._metadata = metadata;\r\n }\r\n\r\n private get db() {\r\n return this._metadata.db as StoreDb<T>;\r\n }\r\n\r\n async toArray(orderBy?: keyof T, orderDirection?: OrderDirection, transactionMode: TransactionMode = \"r\"): Promise<StoreItem<T, TValue>[]> {\r\n\r\n const db = this.db;\r\n\r\n // db.data.where(keyOf<DataRecord>(\"key\")).equals(key).first();\r\n\r\n return db.exec(async () => {\r\n const map = new Map<string, StoreItem<T, TValue>>();\r\n let populate: (callback: (metadataRecord: T) => void) => void | PromiseLike<void> = this._metadata.each.bind(this._metadata);\r\n if (orderBy && orderDirection) {\r\n const metadataRecords = await this._metadata.sortBy(orderBy as string);\r\n populate = metadataRecords.forEach.bind(metadataRecords);\r\n }\r\n await populate(metadataRecord => {\r\n map.set(metadataRecord.key, {\r\n metadata: metadataRecord,\r\n // data: undefined\r\n });\r\n });\r\n const keys = [...map.keys()];\r\n const dataRecords = await db.data.bulkGet(keys);\r\n for (const dataRecord of dataRecords) {\r\n if (dataRecord) {\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 }\r\n // abandoned/orphaned entries:\r\n // Object.defineProperty(storeItem, keyOf<StoreItem>(\"data\"), {\r\n // writable: false,\r\n // get: function () {\r\n // throw new Error(\"Not found\");\r\n // }\r\n // });\r\n // Array.from(map.values()) can be slower!\r\n if (orderDirection === \"desc\") {\r\n return [...reverseMapValues(map)];\r\n }\r\n return [...map.values()];\r\n }, transactionMode);\r\n }\r\n\r\n orderBy(field: keyof T, direction: OrderDirection, transactionMode: TransactionMode = \"r\") {\r\n return this.toArray(field, direction, transactionMode);\r\n }\r\n\r\n filter(filter: ((x: T) => boolean)): IStoreCollection<T, TValue> {\r\n const metadata = this._metadata.filter(filter);\r\n return new StoreCollection<T, TValue>(metadata);\r\n }\r\n\r\n limit(n: number): IStoreCollection<T, TValue> {\r\n return new StoreCollection<T, TValue>(this._metadata.limit(n));\r\n }\r\n\r\n offset(n: number) {\r\n return new StoreCollection<T, TValue>(this._metadata.offset(n));\r\n }\r\n\r\n getKeys() {\r\n return this._metadata.primaryKeys() as Promise<T[\"key\"][]>;\r\n }\r\n\r\n getCount() {\r\n return this._metadata.count();\r\n }\r\n\r\n getFilterKeys(distinct: boolean) {\r\n if (distinct) {\r\n return this._metadata.uniqueKeys();\r\n }\r\n return this._metadata.keys();\r\n }\r\n\r\n modifyMetadata(callback: (metadataRecord: T) => void, transactionMode: TransactionMode = \"rw\") {\r\n if (!callback) {\r\n throw new Error(\"callback cannot be undefined.\");\r\n }\r\n return this.db.exec(async () => {\r\n return this._metadata.modify(r => {\r\n callback(r);\r\n });\r\n }, transactionMode);\r\n }\r\n\r\n modifyData(callback: (dataRecord: DataRecord) => void, transactionMode: TransactionMode = \"rw\") {\r\n if (!callback) {\r\n throw new Error(\"callback cannot be undefined.\");\r\n }\r\n return this.db.exec(async () => {\r\n const keys = await this.getKeys();\r\n return await this.db.data.where(keyOf<DataRecord>(\"key\")).anyOf(keys).modify(r => {\r\n callback(r);\r\n });\r\n }, transactionMode);\r\n }\r\n\r\n modify(metadataCallback: (metadataRecord: T) => void, dataCallback: (dataRecord: DataRecord) => void, transactionMode: TransactionMode = \"rw\") {\r\n return this.db.exec(async () => {\r\n const keys: string[] = [];\r\n let mc: number, dc: number;\r\n if (metadataCallback) {\r\n mc = await this._metadata.modify(r => {\r\n keys.push(r.key);\r\n metadataCallback(r);\r\n });\r\n }\r\n if (dataCallback) {\r\n dc = await this.db.data.where(keyOf<DataRecord>(\"key\")).anyOf(keys).modify(r => {\r\n dataCallback(r);\r\n });\r\n }\r\n return mc;\r\n }, transactionMode);\r\n }\r\n}\r\n\r\nfunction createWhereFilter<T extends IndexableType, TResult = unknown>(source: Dexie.WhereClause<unknown, unknown>, factory: (source: Dexie.Collection) => TResult) {\r\n const methodCache = new WeakMap<Function, Function>();\r\n return new Proxy(source as any, {\r\n get(target, prop, receiver) {\r\n const value = Reflect.get(target, prop, receiver);\r\n if (typeof value === \"function\") {\r\n if (!methodCache.has(value)) {\r\n methodCache.set(value, new Proxy(value, {\r\n apply(targetFn, thisArg, args) {\r\n return factory(Reflect.apply(targetFn, thisArg, args));\r\n },\r\n }));\r\n }\r\n return methodCache.get(value);\r\n }\r\n return value;\r\n },\r\n }) as WhereFilter<T, TResult>;\r\n}\r\n\r\nexport class DataStore<T extends MetadataRecord> implements StoreBase {\r\n\r\n private _db: StoreDb<T> | undefined;\r\n\r\n constructor(name: string, metadataFieldDefTemplate: keyof T extends string ? FieldDefTemplate<keyof T> : never) {\r\n if (!name) {\r\n throw new Error(\"Name cannot be empty.\");\r\n }\r\n this._db = new StoreDb<T>(name, metadataFieldDefTemplate);\r\n }\r\n\r\n [Symbol.dispose]() {\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 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 // return this.query().getKeys();\r\n }\r\n\r\n contains(key: string, transactionMode: TransactionMode = \"r\") {\r\n return this._db.contains(key, transactionMode);\r\n }\r\n\r\n delete(key: string, transactionMode: TransactionMode = \"rw\") {\r\n return this._db.deleteOne(key, transactionMode);\r\n }\r\n\r\n // deleteMany\r\n bulkDelete(keys: string[], transactionMode: TransactionMode = \"rw\") {\r\n return this._db.bulkDelete(keys, transactionMode);\r\n }\r\n\r\n // clearAll\r\n clear(transactionMode: TransactionMode = \"rw\") {\r\n return this._db.clear(transactionMode);\r\n }\r\n\r\n private async getInternal<TValue>(key: string): Promise<StoreItem<T, TValue> | undefined> {\r\n const metadataRecord = await this._db.metadata.get(key);\r\n if (!metadataRecord) return undefined;\r\n const dataRecord = await this._db.data.get(key);\r\n return { metadata: metadataRecord, data: dataRecord } as StoreItem<T, TValue>;\r\n }\r\n\r\n private async setInternal<TValue>(metadataRecord: T, value: TValue): Promise<string> {\r\n if (!metadataRecord.key) metadataRecord.key = uuid();\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 get<TValue = unknown>(key: string, transactionMode: TransactionMode = \"r?\"): Promise<StoreItem<T, TValue> | undefined> {\r\n return this.exec(() => this.getInternal<TValue>(key), transactionMode);\r\n }\r\n\r\n // upsert\r\n async set<TValue = unknown>(metadataRecord: T, value: TValue, transactionMode: TransactionMode = \"rw\") {\r\n if (value === undefined) {\r\n throw new Error('Invalid parameter: \"value\".');\r\n }\r\n return this.exec(() => this.setInternal(metadataRecord, value), transactionMode);\r\n }\r\n\r\n // getOrAdd\r\n async getOrSet<TValue = unknown>(metadataRecord: T, factory: (metadataRecord: T) => TValue, transactionMode: TransactionMode = \"rw\") {\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 existing = await this.getInternal<TValue>(metadataRecord.key);\r\n if (existing) return existing;\r\n await this.setInternal(metadataRecord, factory(metadataRecord));\r\n return this.getInternal<TValue>(metadataRecord.key);\r\n }, transactionMode);\r\n }\r\n\r\n async update<TValue = unknown>(key: string, metadataChanges: KeyPathValueMap<T, false>, valueChanges?: KeyPathValueMap<TValue, false>, transactionMode: TransactionMode = \"rw\") {\r\n if (!key) {\r\n throw new Error('Key cannot be empty. Parameter: \"key\".');\r\n }\r\n if (!metadataChanges && !valueChanges) {\r\n throw new Error(\"No changes provided.\");\r\n }\r\n return this.exec(async () => {\r\n let mc: number, dc: number;\r\n if (metadataChanges) {\r\n mc = await this._db.metadata.update(key, metadataChanges as any);\r\n }\r\n if (valueChanges) {\r\n dc = await this._db.data.update(key, valueChanges);\r\n }\r\n return mc;\r\n }, transactionMode);\r\n }\r\n\r\n async bulkUpdate(metadataChangeSets: ChangeSet<T>[], dataChangeSets?: ChangeSet<DataRecord>[], transactionMode: TransactionMode = \"rw\") {\r\n let index: number;\r\n if (metadataChangeSets && (index = metadataChangeSets.findIndex((x) => !x.key)) >= 0) {\r\n throw new Error(`Key cannot be empty. Parameter: \"metadataChangeSets\". Invalid item index: ${index}.`);\r\n }\r\n if (dataChangeSets && (index = dataChangeSets.findIndex((x) => !x.key)) >= 0) {\r\n throw new Error(`Key cannot be empty. Parameter: \"valueChangeSets\". Invalid item index: ${index}.`);\r\n }\r\n return this.exec(async () => {\r\n let cm: number, dc: number;\r\n if (metadataChangeSets) {\r\n cm = await this._db.metadata.bulkUpdate(metadataChangeSets as any);\r\n }\r\n if (dataChangeSets) {\r\n dc = await this._db.data.bulkUpdate(dataChangeSets);\r\n }\r\n return cm;\r\n }, transactionMode);\r\n }\r\n\r\n // getMany\r\n bulkGet<TValue = unknown>(keys: string[], transactionMode: TransactionMode = \"r\") {\r\n return this.exec(async () => {\r\n const map = new Map<string, StoreItem<T, TValue>>();\r\n const metadataRecords = await this._db.metadata.bulkGet(keys);\r\n for (const metadataRecord of metadataRecords) {\r\n if (metadataRecord) {\r\n map.set(metadataRecord.key, { metadata: metadataRecord });\r\n }\r\n }\r\n const dataRecords = await this._db.data.bulkGet(keys);\r\n for (const dataRecord of dataRecords) {\r\n if (dataRecord) {\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 }\r\n return [...map.values()];\r\n }, transactionMode);\r\n }\r\n\r\n async bulkSet<TValue = unknown>(metadataRecords: T[], dataRecords: DataRecord<TValue>[], transactionMode: TransactionMode = \"rw\") {\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 }\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 }, transactionMode);\r\n }\r\n\r\n orderBy(field: keyof T, direction: OrderDirection, distinct = false) {\r\n let metadata = this._db.metadata.orderBy(field as string);\r\n if (direction === \"desc\") {\r\n metadata = metadata.reverse();\r\n }\r\n if (distinct) {\r\n metadata = metadata.distinct();\r\n }\r\n return new StoreCollection(metadata);\r\n }\r\n\r\n distinct(field: keyof T) {\r\n const metadata = this._db.metadata.orderBy(field as string).distinct();\r\n return new StoreCollection(metadata);\r\n }\r\n\r\n query<TValue = unknown>() {\r\n return new StoreCollection<T, TValue>(this._db.metadata.toCollection());\r\n }\r\n\r\n // filter\r\n where<K extends keyof T, TValue = unknown>(field: K extends string ? K | K[] : never) {\r\n const source = this._db.metadata.where(field);\r\n return createWhereFilter<T[K] extends IndexableType ? T[K] : never, IStoreCollection<T, TValue>>(source, c => new StoreCollection<T, TValue>(c));\r\n }\r\n}\r\n\r\n// and(filter: (x: T) => boolean): Collection<T, TKey, TInsertType>;\r\n// clone(props?: Object): Collection<T, TKey, TInsertType>;\r\n// count<R>(thenShortcut: ThenShortcut<number, R>): PromiseExtended<R>;\r\n// distinct(): Collection<T, TKey, TInsertType>;\r\n// each(callback: (obj: T, cursor: {\r\n// key: IndexableType;\r\n// primaryKey: TKey;\r\n// }) => any): PromiseExtended<void>;\r\n// eachKey(callback: (key: IndexableType, cursor: {\r\n// key: IndexableType;\r\n// primaryKey: TKey;\r\n// }) => any): PromiseExtended<void>;\r\n// eachPrimaryKey(callback: (key: TKey, cursor: {\r\n// key: IndexableType;\r\n// primaryKey: TKey;\r\n// }) => any): PromiseExtended<void>;\r\n// eachUniqueKey(callback: (key: IndexableType, cursor: {\r\n// key: IndexableType;\r\n// primaryKey: TKey;\r\n// }) => any): PromiseExtended<void>;\r\n// filter<S extends T>(filter: (x: T) => x is S): Collection<S, TKey>;\r\n// filter(filter: (x: T) => boolean): Collection<T, TKey, TInsertType>;\r\n// first(): PromiseExtended<T | undefined>;\r\n// first<R>(thenShortcut: ThenShortcut<T | undefined, R>): PromiseExtended<R>;\r\n// firstKey(): PromiseExtended<IndexableType | undefined>;\r\n// keys<R>(thenShortcut: ThenShortcut<IndexableTypeArray, R>): PromiseExtended<R>;\r\n// primaryKeys(): PromiseExtended<TKey[]>;\r\n// primaryKeys<R>(thenShortcut: ThenShortcut<TKey[], R>): PromiseExtended<R>;\r\n// last(): PromiseExtended<T | undefined>;\r\n// last<R>(thenShortcut: ThenShortcut<T | undefined, R>): PromiseExtended<R>;\r\n// lastKey(): PromiseExtended<IndexableType | undefined>;\r\n// or(indexOrPrimayKey: string): WhereClause<T, TKey, TInsertType>;\r\n// raw(): Collection<T, TKey, TInsertType>;\r\n// sortBy<R>(keyPath: string, thenShortcut: ThenShortcut<T[], R>): PromiseExtended<R>;\r\n// toArray(): PromiseExtended<Array<T>>;\r\n// toArray<R>(thenShortcut: ThenShortcut<T[], R>): PromiseExtended<R>;\r\n// uniqueKeys(): PromiseExtended<IndexableTypeArray>;\r\n// uniqueKeys<R>(thenShortcut: ThenShortcut<IndexableTypeArray, R>): PromiseExtended<R>;\r\n// until(filter: (value: T) => boolean, includeStopEntry?: boolean): Collection<T, TKey, TInsertType>;\r\n// // Mutating methods\r\n// delete(): PromiseExtended<number>;\r\n// modify(changeCallback: (obj: T, ctx: {\r\n// value: TInsertType;\r\n// }) => void | boolean): PromiseExtended<number>;\r\n// modify(changes: UpdateSpec<TInsertType>): PromiseExtended<number>;"],"names":["uuid"],"mappings":"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"}
|
|
@@ -1,26 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { DataStore } from "./dataStore.es.js";
|
|
4
|
+
import { StoreDb } from "./storeDb.es.js";
|
|
5
|
+
const defaultPersistentStoreOptions = {
|
|
6
|
+
useEncryption: false
|
|
7
|
+
};
|
|
8
|
+
const defaultMetadataFieldDefTemplate = ["&key", "createdAt", "updatedAt", "tags"];
|
|
9
|
+
const _PersistentStore = class _PersistentStore extends DataStore {
|
|
7
10
|
_options;
|
|
8
11
|
// TODO: support
|
|
9
|
-
static delete(
|
|
10
|
-
return
|
|
12
|
+
static delete(name) {
|
|
13
|
+
return StoreDb.delete(name);
|
|
11
14
|
}
|
|
12
|
-
static exists(
|
|
13
|
-
return
|
|
15
|
+
static exists(name) {
|
|
16
|
+
return StoreDb.exists(name);
|
|
14
17
|
}
|
|
15
|
-
static open(
|
|
16
|
-
return
|
|
18
|
+
static open(name, metadataFieldDefTemplate, options) {
|
|
19
|
+
return StoreDb.open(name, () => new _PersistentStore(name, metadataFieldDefTemplate, options));
|
|
17
20
|
}
|
|
18
|
-
constructor(
|
|
19
|
-
super(
|
|
21
|
+
constructor(name, metadataFieldDefTemplate, options) {
|
|
22
|
+
super(name, metadataFieldDefTemplate ?? defaultMetadataFieldDefTemplate);
|
|
23
|
+
this._options = { ...options, ...defaultPersistentStoreOptions };
|
|
20
24
|
}
|
|
21
|
-
}
|
|
25
|
+
};
|
|
26
|
+
__name(_PersistentStore, "PersistentStore");
|
|
27
|
+
let PersistentStore = _PersistentStore;
|
|
22
28
|
export {
|
|
23
|
-
|
|
24
|
-
|
|
29
|
+
PersistentStore,
|
|
30
|
+
defaultMetadataFieldDefTemplate
|
|
25
31
|
};
|
|
26
32
|
//# sourceMappingURL=persistentStore.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistentStore.es.js","sources":["D:/Src/my/actdim/public/utico/src/store/persistentStore.ts"],"sourcesContent":
|
|
1
|
+
{"version":3,"file":"persistentStore.es.js","sources":["D:/Src/my/actdim/public/utico/src/store/persistentStore.ts"],"sourcesContent":["import { DataStore } from \"./dataStore\";\r\nimport { FieldDef, FieldDefTemplate, IPersistentStore, MetadataRecord } from \"./storeContracts\";\r\nimport { StoreDb } from \"./storeDb\";\r\n\r\n// TODO: implement real encryption:\r\n// https://stackoverflow.com/questions/18279141/javascript-string-encryption-and-decryption\r\n\r\nexport type PersistentStoreOptions = {\r\n useEncryption: boolean;\r\n};\r\n\r\nconst defaultPersistentStoreOptions = {\r\n useEncryption: false\r\n} satisfies PersistentStoreOptions;\r\n\r\n// (registry/catalog)fieldNames\r\nexport const defaultMetadataFieldDefTemplate = [\"&key\", \"createdAt\", \"updatedAt\", \"tags\"] satisfies FieldDefTemplate<keyof MetadataRecord>;\r\n// T extends MetadataRecord\r\nexport class PersistentStore<TMetadataRecord extends MetadataRecord = MetadataRecord> extends DataStore<TMetadataRecord> implements IPersistentStore<TMetadataRecord> {\r\n\r\n private _options: PersistentStoreOptions; // TODO: support\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<TMetadataRecord extends MetadataRecord = MetadataRecord>(name: string, metadataFieldDefTemplate?: keyof TMetadataRecord extends string ? FieldDefTemplate<keyof TMetadataRecord> : never, options?: PersistentStoreOptions) {\r\n return StoreDb.open(name, () => new PersistentStore(name, metadataFieldDefTemplate, options));\r\n }\r\n\r\n constructor(name: string, metadataFieldDefTemplate?: keyof TMetadataRecord extends string ? FieldDefTemplate<keyof TMetadataRecord> : never, options?: PersistentStoreOptions) {\r\n super(name, (metadataFieldDefTemplate ?? defaultMetadataFieldDefTemplate) as keyof TMetadataRecord extends string ? FieldDefTemplate<keyof TMetadataRecord> : never);\r\n this._options = { ...options, ...defaultPersistentStoreOptions };\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;AAWA,MAAM,gCAAgC;AAAA,EAClC,eAAe;AACnB;AAGO,MAAM,kCAAkC,CAAC,QAAQ,aAAa,aAAa,MAAM;AAEjF,MAAM,mBAAN,MAAM,yBAAiF,UAAwE;AAAA,EAE1J;AAAA;AAAA,EAER,OAAO,OAAO,MAAc;AACxB,WAAO,QAAQ,OAAO,IAAI;AAAA,EAC9B;AAAA,EAEA,OAAO,OAAO,MAAc;AACxB,WAAO,QAAQ,OAAO,IAAI;AAAA,EAC9B;AAAA,EAEA,OAAO,KAA8D,MAAc,0BAAmH,SAAkC;AACpO,WAAO,QAAQ,KAAK,MAAM,MAAM,IAAI,iBAAgB,MAAM,0BAA0B,OAAO,CAAC;AAAA,EAChG;AAAA,EAEA,YAAY,MAAc,0BAAmH,SAAkC;AAC3K,UAAM,MAAO,4BAA4B,+BAA0H;AACnK,SAAK,WAAW,EAAE,GAAG,SAAS,GAAG,8BAAA;AAAA,EACrC;AACJ;AApBsK;AAA/J,IAAM,kBAAN;"}
|