dexie 4.0.1-alpha.8 → 4.0.1-beta.2
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 +1 -1
- package/browserstack.err +1 -0
- package/dist/dexie.d.ts +150 -89
- package/dist/dexie.js +976 -437
- package/dist/dexie.js.map +1 -1
- package/dist/dexie.min.js +1 -1
- package/dist/dexie.min.js.map +1 -1
- package/dist/dexie.mjs +976 -437
- package/dist/dexie.mjs.map +1 -1
- package/dist/modern/dexie.min.mjs +1 -1
- package/dist/modern/dexie.min.mjs.map +1 -1
- package/dist/modern/dexie.mjs +973 -423
- package/dist/modern/dexie.mjs.map +1 -1
- package/import-wrapper-prod.d.mts +2 -0
- package/import-wrapper.d.mts +2 -0
- package/package.json +7 -4
- package/pnpm-workspace.yaml +2 -0
package/dist/dexie.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* By David Fahlander, david.fahlander@gmail.com
|
|
6
6
|
*
|
|
7
|
-
* Version 4.0.1-
|
|
7
|
+
* Version 4.0.1-beta.2, Wed Nov 29 2023
|
|
8
8
|
*
|
|
9
9
|
* https://dexie.org
|
|
10
10
|
*
|
|
@@ -149,7 +149,7 @@
|
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
151
|
function getByKeyPath(obj, keyPath) {
|
|
152
|
-
if (hasOwn(obj, keyPath))
|
|
152
|
+
if (typeof keyPath === 'string' && hasOwn(obj, keyPath))
|
|
153
153
|
return obj[keyPath];
|
|
154
154
|
if (!keyPath)
|
|
155
155
|
return obj;
|
|
@@ -232,40 +232,54 @@
|
|
|
232
232
|
function flatten(a) {
|
|
233
233
|
return concat.apply([], a);
|
|
234
234
|
}
|
|
235
|
-
var intrinsicTypeNames = "Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,FileSystemDirectoryHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKey"
|
|
235
|
+
var intrinsicTypeNames = "Array,Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,FileSystemDirectoryHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKey"
|
|
236
236
|
.split(',').concat(flatten([8, 16, 32, 64].map(function (num) { return ["Int", "Uint", "Float"].map(function (t) { return t + num + "Array"; }); }))).filter(function (t) { return _global[t]; });
|
|
237
|
-
var intrinsicTypes = intrinsicTypeNames.map(function (t) { return _global[t]; });
|
|
238
|
-
|
|
237
|
+
var intrinsicTypes = new Set(intrinsicTypeNames.map(function (t) { return _global[t]; }));
|
|
238
|
+
function cloneSimpleObjectTree(o) {
|
|
239
|
+
var rv = {};
|
|
240
|
+
for (var k in o)
|
|
241
|
+
if (hasOwn(o, k)) {
|
|
242
|
+
var v = o[k];
|
|
243
|
+
rv[k] = !v || typeof v !== 'object' || intrinsicTypes.has(v.constructor) ? v : cloneSimpleObjectTree(v);
|
|
244
|
+
}
|
|
245
|
+
return rv;
|
|
246
|
+
}
|
|
247
|
+
function objectIsEmpty(o) {
|
|
248
|
+
for (var k in o)
|
|
249
|
+
if (hasOwn(o, k))
|
|
250
|
+
return false;
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
239
253
|
var circularRefs = null;
|
|
240
254
|
function deepClone(any) {
|
|
241
|
-
circularRefs =
|
|
255
|
+
circularRefs = new WeakMap();
|
|
242
256
|
var rv = innerDeepClone(any);
|
|
243
257
|
circularRefs = null;
|
|
244
258
|
return rv;
|
|
245
259
|
}
|
|
246
|
-
function innerDeepClone(
|
|
247
|
-
if (!
|
|
248
|
-
return
|
|
249
|
-
var rv = circularRefs
|
|
260
|
+
function innerDeepClone(x) {
|
|
261
|
+
if (!x || typeof x !== 'object')
|
|
262
|
+
return x;
|
|
263
|
+
var rv = circularRefs.get(x);
|
|
250
264
|
if (rv)
|
|
251
265
|
return rv;
|
|
252
|
-
if (isArray(
|
|
266
|
+
if (isArray(x)) {
|
|
253
267
|
rv = [];
|
|
254
|
-
circularRefs
|
|
255
|
-
for (var i = 0, l =
|
|
256
|
-
rv.push(innerDeepClone(
|
|
268
|
+
circularRefs.set(x, rv);
|
|
269
|
+
for (var i = 0, l = x.length; i < l; ++i) {
|
|
270
|
+
rv.push(innerDeepClone(x[i]));
|
|
257
271
|
}
|
|
258
272
|
}
|
|
259
|
-
else if (intrinsicTypes.
|
|
260
|
-
rv =
|
|
273
|
+
else if (intrinsicTypes.has(x.constructor)) {
|
|
274
|
+
rv = x;
|
|
261
275
|
}
|
|
262
276
|
else {
|
|
263
|
-
var proto = getProto(
|
|
277
|
+
var proto = getProto(x);
|
|
264
278
|
rv = proto === Object.prototype ? {} : Object.create(proto);
|
|
265
|
-
circularRefs
|
|
266
|
-
for (var prop in
|
|
267
|
-
if (hasOwn(
|
|
268
|
-
rv[prop] = innerDeepClone(
|
|
279
|
+
circularRefs.set(x, rv);
|
|
280
|
+
for (var prop in x) {
|
|
281
|
+
if (hasOwn(x, prop)) {
|
|
282
|
+
rv[prop] = innerDeepClone(x[prop]);
|
|
269
283
|
}
|
|
270
284
|
}
|
|
271
285
|
}
|
|
@@ -282,6 +296,12 @@
|
|
|
282
296
|
var i;
|
|
283
297
|
return x != null && (i = x[iteratorSymbol]) && i.apply(x);
|
|
284
298
|
} : function () { return null; };
|
|
299
|
+
function delArrayItem(a, x) {
|
|
300
|
+
var i = a.indexOf(x);
|
|
301
|
+
if (i >= 0)
|
|
302
|
+
a.splice(i, 1);
|
|
303
|
+
return i >= 0;
|
|
304
|
+
}
|
|
285
305
|
var NO_CHAR_ARRAY = {};
|
|
286
306
|
function getArrayOf(arrayLike) {
|
|
287
307
|
var i, a, x, it;
|
|
@@ -592,21 +612,9 @@
|
|
|
592
612
|
var NativePromise = resolvedNativePromise && resolvedNativePromise.constructor;
|
|
593
613
|
var patchGlobalPromise = !!resolvedGlobalPromise;
|
|
594
614
|
var stack_being_generated = false;
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
_global.setImmediate ?
|
|
599
|
-
setImmediate.bind(null, physicalTick) :
|
|
600
|
-
_global.MutationObserver ?
|
|
601
|
-
function () {
|
|
602
|
-
var hiddenDiv = document.createElement("div");
|
|
603
|
-
(new MutationObserver(function () {
|
|
604
|
-
physicalTick();
|
|
605
|
-
hiddenDiv = null;
|
|
606
|
-
})).observe(hiddenDiv, { attributes: true });
|
|
607
|
-
hiddenDiv.setAttribute('i', '1');
|
|
608
|
-
} :
|
|
609
|
-
function () { setTimeout(physicalTick, 0); };
|
|
615
|
+
function schedulePhysicalTick() {
|
|
616
|
+
queueMicrotask(physicalTick);
|
|
617
|
+
}
|
|
610
618
|
var asap = function (callback, args) {
|
|
611
619
|
microtickQueue.push([callback, args]);
|
|
612
620
|
if (needsNewPhysicalTick) {
|
|
@@ -624,17 +632,10 @@
|
|
|
624
632
|
global: true,
|
|
625
633
|
ref: 0,
|
|
626
634
|
unhandleds: [],
|
|
627
|
-
onunhandled:
|
|
635
|
+
onunhandled: nop,
|
|
628
636
|
pgp: false,
|
|
629
637
|
env: {},
|
|
630
|
-
finalize:
|
|
631
|
-
this.unhandleds.forEach(function (uh) {
|
|
632
|
-
try {
|
|
633
|
-
globalError(uh[0], uh[1]);
|
|
634
|
-
}
|
|
635
|
-
catch (e) { }
|
|
636
|
-
});
|
|
637
|
-
}
|
|
638
|
+
finalize: nop
|
|
638
639
|
};
|
|
639
640
|
var PSD = globalPSD;
|
|
640
641
|
var microtickQueue = [];
|
|
@@ -644,7 +645,6 @@
|
|
|
644
645
|
if (typeof this !== 'object')
|
|
645
646
|
throw new TypeError('Promises must be constructed via new');
|
|
646
647
|
this._listeners = [];
|
|
647
|
-
this.onuncatched = nop;
|
|
648
648
|
this._lib = false;
|
|
649
649
|
var psd = (this._PSD = PSD);
|
|
650
650
|
if (debug) {
|
|
@@ -711,11 +711,9 @@
|
|
|
711
711
|
},
|
|
712
712
|
finally: function (onFinally) {
|
|
713
713
|
return this.then(function (value) {
|
|
714
|
-
onFinally();
|
|
715
|
-
return value;
|
|
714
|
+
return DexiePromise.resolve(onFinally()).then(function () { return value; });
|
|
716
715
|
}, function (err) {
|
|
717
|
-
onFinally();
|
|
718
|
-
return PromiseReject(err);
|
|
716
|
+
return DexiePromise.resolve(onFinally()).then(function () { return PromiseReject(err); });
|
|
719
717
|
});
|
|
720
718
|
},
|
|
721
719
|
stack: {
|
|
@@ -991,7 +989,9 @@
|
|
|
991
989
|
}
|
|
992
990
|
}
|
|
993
991
|
function physicalTick() {
|
|
994
|
-
|
|
992
|
+
usePSD(globalPSD, function () {
|
|
993
|
+
beginMicroTickScope() && endMicroTickScope();
|
|
994
|
+
});
|
|
995
995
|
}
|
|
996
996
|
function beginMicroTickScope() {
|
|
997
997
|
var wasRootExec = isOutsideMicroTick;
|
|
@@ -1154,7 +1154,7 @@
|
|
|
1154
1154
|
function switchToZone(targetZone, bEnteringZone) {
|
|
1155
1155
|
var currentZone = PSD;
|
|
1156
1156
|
if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) {
|
|
1157
|
-
|
|
1157
|
+
queueMicrotask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho);
|
|
1158
1158
|
}
|
|
1159
1159
|
if (targetZone === PSD)
|
|
1160
1160
|
return;
|
|
@@ -1204,9 +1204,6 @@
|
|
|
1204
1204
|
switchToZone(outerScope, false);
|
|
1205
1205
|
}
|
|
1206
1206
|
}
|
|
1207
|
-
function enqueueNativeMicroTask(job) {
|
|
1208
|
-
nativePromiseThen.call(resolvedNativePromise, job);
|
|
1209
|
-
}
|
|
1210
1207
|
function nativeAwaitCompatibleWrap(fn, zone, possibleAwait, cleanup) {
|
|
1211
1208
|
return typeof fn !== 'function' ? fn : function () {
|
|
1212
1209
|
var outerZone = PSD;
|
|
@@ -1219,7 +1216,7 @@
|
|
|
1219
1216
|
finally {
|
|
1220
1217
|
switchToZone(outerZone, false);
|
|
1221
1218
|
if (cleanup)
|
|
1222
|
-
|
|
1219
|
+
queueMicrotask(decrementExpectedAwaits);
|
|
1223
1220
|
}
|
|
1224
1221
|
};
|
|
1225
1222
|
}
|
|
@@ -1228,39 +1225,6 @@
|
|
|
1228
1225
|
return origThen.call(this, nativeAwaitCompatibleWrap(onResolved, zone), nativeAwaitCompatibleWrap(onRejected, zone));
|
|
1229
1226
|
};
|
|
1230
1227
|
}
|
|
1231
|
-
var UNHANDLEDREJECTION = "unhandledrejection";
|
|
1232
|
-
function globalError(err, promise) {
|
|
1233
|
-
var rv;
|
|
1234
|
-
try {
|
|
1235
|
-
rv = promise.onuncatched(err);
|
|
1236
|
-
}
|
|
1237
|
-
catch (e) { }
|
|
1238
|
-
if (rv !== false)
|
|
1239
|
-
try {
|
|
1240
|
-
var event, eventData = { promise: promise, reason: err };
|
|
1241
|
-
if (_global.document && document.createEvent) {
|
|
1242
|
-
event = document.createEvent('Event');
|
|
1243
|
-
event.initEvent(UNHANDLEDREJECTION, true, true);
|
|
1244
|
-
extend(event, eventData);
|
|
1245
|
-
}
|
|
1246
|
-
else if (_global.CustomEvent) {
|
|
1247
|
-
event = new CustomEvent(UNHANDLEDREJECTION, { detail: eventData });
|
|
1248
|
-
extend(event, eventData);
|
|
1249
|
-
}
|
|
1250
|
-
if (event && _global.dispatchEvent) {
|
|
1251
|
-
dispatchEvent(event);
|
|
1252
|
-
if (!_global.PromiseRejectionEvent && _global.onunhandledrejection)
|
|
1253
|
-
try {
|
|
1254
|
-
_global.onunhandledrejection(event);
|
|
1255
|
-
}
|
|
1256
|
-
catch (_) { }
|
|
1257
|
-
}
|
|
1258
|
-
if (debug && event && !event.defaultPrevented) {
|
|
1259
|
-
console.warn("Unhandled rejection: ".concat(err.stack || err));
|
|
1260
|
-
}
|
|
1261
|
-
}
|
|
1262
|
-
catch (e) { }
|
|
1263
|
-
}
|
|
1264
1228
|
var rejection = DexiePromise.reject;
|
|
1265
1229
|
|
|
1266
1230
|
function tempTransaction(db, mode, storeNames, fn) {
|
|
@@ -1295,12 +1259,17 @@
|
|
|
1295
1259
|
return fn(resolve, reject, trans);
|
|
1296
1260
|
});
|
|
1297
1261
|
}).then(function (result) {
|
|
1298
|
-
|
|
1262
|
+
if (mode === 'readwrite')
|
|
1263
|
+
try {
|
|
1264
|
+
trans.idbtrans.commit();
|
|
1265
|
+
}
|
|
1266
|
+
catch (_a) { }
|
|
1267
|
+
return mode === 'readonly' ? result : trans._completion.then(function () { return result; });
|
|
1299
1268
|
});
|
|
1300
1269
|
}
|
|
1301
1270
|
}
|
|
1302
1271
|
|
|
1303
|
-
var DEXIE_VERSION = '4.0.1-
|
|
1272
|
+
var DEXIE_VERSION = '4.0.1-beta.2';
|
|
1304
1273
|
var maxString = String.fromCharCode(65535);
|
|
1305
1274
|
var minKey = -Infinity;
|
|
1306
1275
|
var INVALID_KEY_ARGUMENT = "Invalid key provided. Keys must be of type string, number, Date or Array<string | number | Date>.";
|
|
@@ -1435,7 +1404,7 @@
|
|
|
1435
1404
|
}
|
|
1436
1405
|
var wasRootExec = beginMicroTickScope();
|
|
1437
1406
|
try {
|
|
1438
|
-
return trans && trans.db === this.db ?
|
|
1407
|
+
return trans && trans.db._novip === this.db._novip ?
|
|
1439
1408
|
trans === PSD.trans ?
|
|
1440
1409
|
trans._promise(mode, checkTableInTransaction, writeLocked) :
|
|
1441
1410
|
newScope(function () { return trans._promise(mode, checkTableInTransaction, writeLocked); }, { trans: trans, transless: PSD.transless || PSD }) :
|
|
@@ -1466,14 +1435,22 @@
|
|
|
1466
1435
|
.where(keyPaths[0])
|
|
1467
1436
|
.equals(indexOrCrit[keyPaths[0]]);
|
|
1468
1437
|
var compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(function (ix) {
|
|
1469
|
-
|
|
1470
|
-
keyPaths.every(function (keyPath) { return ix.keyPath.indexOf(keyPath) >= 0; })
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1438
|
+
if (ix.compound &&
|
|
1439
|
+
keyPaths.every(function (keyPath) { return ix.keyPath.indexOf(keyPath) >= 0; })) {
|
|
1440
|
+
for (var i = 0; i < keyPaths.length; ++i) {
|
|
1441
|
+
if (keyPaths.indexOf(ix.keyPath[i]) === -1)
|
|
1442
|
+
return false;
|
|
1443
|
+
}
|
|
1444
|
+
return true;
|
|
1445
|
+
}
|
|
1446
|
+
return false;
|
|
1447
|
+
}).sort(function (a, b) { return a.keyPath.length - b.keyPath.length; })[0];
|
|
1448
|
+
if (compoundIndex && this.db._maxKey !== maxString) {
|
|
1449
|
+
var keyPathsInValidOrder = compoundIndex.keyPath.slice(0, keyPaths.length);
|
|
1474
1450
|
return this
|
|
1475
|
-
.where(
|
|
1476
|
-
.equals(
|
|
1451
|
+
.where(keyPathsInValidOrder)
|
|
1452
|
+
.equals(keyPathsInValidOrder.map(function (kp) { return indexOrCrit[kp]; }));
|
|
1453
|
+
}
|
|
1477
1454
|
if (!compoundIndex && debug)
|
|
1478
1455
|
console.warn("The query ".concat(JSON.stringify(indexOrCrit), " on ").concat(this.name, " would benefit of a ") +
|
|
1479
1456
|
"compound index [".concat(keyPaths.join('+'), "]"));
|
|
@@ -1605,18 +1582,6 @@
|
|
|
1605
1582
|
var key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath);
|
|
1606
1583
|
if (key === undefined)
|
|
1607
1584
|
return rejection(new exceptions.InvalidArgument("Given object does not contain its primary key"));
|
|
1608
|
-
try {
|
|
1609
|
-
if (typeof modifications !== "function") {
|
|
1610
|
-
keys(modifications).forEach(function (keyPath) {
|
|
1611
|
-
setByKeyPath(keyOrObject, keyPath, modifications[keyPath]);
|
|
1612
|
-
});
|
|
1613
|
-
}
|
|
1614
|
-
else {
|
|
1615
|
-
modifications(keyOrObject, { value: keyOrObject, primKey: key });
|
|
1616
|
-
}
|
|
1617
|
-
}
|
|
1618
|
-
catch (_a) {
|
|
1619
|
-
}
|
|
1620
1585
|
return this.where(":id").equals(key).modify(modifications);
|
|
1621
1586
|
}
|
|
1622
1587
|
else {
|
|
@@ -3394,8 +3359,7 @@
|
|
|
3394
3359
|
dbcore: dbcore
|
|
3395
3360
|
};
|
|
3396
3361
|
}
|
|
3397
|
-
function generateMiddlewareStacks(
|
|
3398
|
-
var db = _a._novip;
|
|
3362
|
+
function generateMiddlewareStacks(db, tmpTrans) {
|
|
3399
3363
|
var idbdb = tmpTrans.db;
|
|
3400
3364
|
var stacks = createMiddlewareStacks(db._middlewares, idbdb, db._deps, tmpTrans);
|
|
3401
3365
|
db.core = stacks.dbcore;
|
|
@@ -3410,8 +3374,7 @@
|
|
|
3410
3374
|
});
|
|
3411
3375
|
}
|
|
3412
3376
|
|
|
3413
|
-
function setApiOnPlace(
|
|
3414
|
-
var db = _a._novip;
|
|
3377
|
+
function setApiOnPlace(db, objs, tableNames, dbschema) {
|
|
3415
3378
|
tableNames.forEach(function (tableName) {
|
|
3416
3379
|
var schema = dbschema[tableName];
|
|
3417
3380
|
objs.forEach(function (obj) {
|
|
@@ -3432,8 +3395,7 @@
|
|
|
3432
3395
|
});
|
|
3433
3396
|
});
|
|
3434
3397
|
}
|
|
3435
|
-
function removeTablesApi(
|
|
3436
|
-
var db = _a._novip;
|
|
3398
|
+
function removeTablesApi(db, objs) {
|
|
3437
3399
|
objs.forEach(function (obj) {
|
|
3438
3400
|
for (var key in obj) {
|
|
3439
3401
|
if (obj[key] instanceof db.Table)
|
|
@@ -3465,8 +3427,7 @@
|
|
|
3465
3427
|
updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans).catch(rejectTransaction);
|
|
3466
3428
|
});
|
|
3467
3429
|
}
|
|
3468
|
-
function updateTablesAndIndexes(
|
|
3469
|
-
var db = _a._novip;
|
|
3430
|
+
function updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans) {
|
|
3470
3431
|
var queue = [];
|
|
3471
3432
|
var versions = db._versions;
|
|
3472
3433
|
var globalSchema = db._dbSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans);
|
|
@@ -3640,8 +3601,7 @@
|
|
|
3640
3601
|
});
|
|
3641
3602
|
return globalSchema;
|
|
3642
3603
|
}
|
|
3643
|
-
function readGlobalSchema(
|
|
3644
|
-
var db = _a._novip;
|
|
3604
|
+
function readGlobalSchema(db, idbdb, tmpTrans) {
|
|
3645
3605
|
db.verno = idbdb.version / 10;
|
|
3646
3606
|
var globalSchema = db._dbSchema = buildGlobalSchema(db, idbdb, tmpTrans);
|
|
3647
3607
|
db._storeNames = slice(idbdb.objectStoreNames, 0);
|
|
@@ -3652,8 +3612,7 @@
|
|
|
3652
3612
|
var diff = getSchemaDiff(installedSchema, db._dbSchema);
|
|
3653
3613
|
return !(diff.add.length || diff.change.some(function (ch) { return ch.add.length || ch.change.length; }));
|
|
3654
3614
|
}
|
|
3655
|
-
function adjustToExistingIndexNames(
|
|
3656
|
-
var db = _a._novip;
|
|
3615
|
+
function adjustToExistingIndexNames(db, schema, idbtrans) {
|
|
3657
3616
|
var storeNames = idbtrans.db.objectStoreNames;
|
|
3658
3617
|
for (var i = 0; i < storeNames.length; ++i) {
|
|
3659
3618
|
var storeName = storeNames[i];
|
|
@@ -3807,6 +3766,237 @@
|
|
|
3807
3766
|
}).finally(function () { return clearInterval(intervalId); });
|
|
3808
3767
|
}
|
|
3809
3768
|
|
|
3769
|
+
var _a;
|
|
3770
|
+
function isEmptyRange(node) {
|
|
3771
|
+
return !("from" in node);
|
|
3772
|
+
}
|
|
3773
|
+
var RangeSet = function (fromOrTree, to) {
|
|
3774
|
+
if (this) {
|
|
3775
|
+
extend(this, arguments.length ? { d: 1, from: fromOrTree, to: arguments.length > 1 ? to : fromOrTree } : { d: 0 });
|
|
3776
|
+
}
|
|
3777
|
+
else {
|
|
3778
|
+
var rv = new RangeSet();
|
|
3779
|
+
if (fromOrTree && ("d" in fromOrTree)) {
|
|
3780
|
+
extend(rv, fromOrTree);
|
|
3781
|
+
}
|
|
3782
|
+
return rv;
|
|
3783
|
+
}
|
|
3784
|
+
};
|
|
3785
|
+
props(RangeSet.prototype, (_a = {
|
|
3786
|
+
add: function (rangeSet) {
|
|
3787
|
+
mergeRanges(this, rangeSet);
|
|
3788
|
+
return this;
|
|
3789
|
+
},
|
|
3790
|
+
addKey: function (key) {
|
|
3791
|
+
addRange(this, key, key);
|
|
3792
|
+
return this;
|
|
3793
|
+
},
|
|
3794
|
+
addKeys: function (keys) {
|
|
3795
|
+
var _this = this;
|
|
3796
|
+
keys.forEach(function (key) { return addRange(_this, key, key); });
|
|
3797
|
+
return this;
|
|
3798
|
+
}
|
|
3799
|
+
},
|
|
3800
|
+
_a[iteratorSymbol] = function () {
|
|
3801
|
+
return getRangeSetIterator(this);
|
|
3802
|
+
},
|
|
3803
|
+
_a));
|
|
3804
|
+
function addRange(target, from, to) {
|
|
3805
|
+
var diff = cmp(from, to);
|
|
3806
|
+
if (isNaN(diff))
|
|
3807
|
+
return;
|
|
3808
|
+
if (diff > 0)
|
|
3809
|
+
throw RangeError();
|
|
3810
|
+
if (isEmptyRange(target))
|
|
3811
|
+
return extend(target, { from: from, to: to, d: 1 });
|
|
3812
|
+
var left = target.l;
|
|
3813
|
+
var right = target.r;
|
|
3814
|
+
if (cmp(to, target.from) < 0) {
|
|
3815
|
+
left
|
|
3816
|
+
? addRange(left, from, to)
|
|
3817
|
+
: (target.l = { from: from, to: to, d: 1, l: null, r: null });
|
|
3818
|
+
return rebalance(target);
|
|
3819
|
+
}
|
|
3820
|
+
if (cmp(from, target.to) > 0) {
|
|
3821
|
+
right
|
|
3822
|
+
? addRange(right, from, to)
|
|
3823
|
+
: (target.r = { from: from, to: to, d: 1, l: null, r: null });
|
|
3824
|
+
return rebalance(target);
|
|
3825
|
+
}
|
|
3826
|
+
if (cmp(from, target.from) < 0) {
|
|
3827
|
+
target.from = from;
|
|
3828
|
+
target.l = null;
|
|
3829
|
+
target.d = right ? right.d + 1 : 1;
|
|
3830
|
+
}
|
|
3831
|
+
if (cmp(to, target.to) > 0) {
|
|
3832
|
+
target.to = to;
|
|
3833
|
+
target.r = null;
|
|
3834
|
+
target.d = target.l ? target.l.d + 1 : 1;
|
|
3835
|
+
}
|
|
3836
|
+
var rightWasCutOff = !target.r;
|
|
3837
|
+
if (left && !target.l) {
|
|
3838
|
+
mergeRanges(target, left);
|
|
3839
|
+
}
|
|
3840
|
+
if (right && rightWasCutOff) {
|
|
3841
|
+
mergeRanges(target, right);
|
|
3842
|
+
}
|
|
3843
|
+
}
|
|
3844
|
+
function mergeRanges(target, newSet) {
|
|
3845
|
+
function _addRangeSet(target, _a) {
|
|
3846
|
+
var from = _a.from, to = _a.to, l = _a.l, r = _a.r;
|
|
3847
|
+
addRange(target, from, to);
|
|
3848
|
+
if (l)
|
|
3849
|
+
_addRangeSet(target, l);
|
|
3850
|
+
if (r)
|
|
3851
|
+
_addRangeSet(target, r);
|
|
3852
|
+
}
|
|
3853
|
+
if (!isEmptyRange(newSet))
|
|
3854
|
+
_addRangeSet(target, newSet);
|
|
3855
|
+
}
|
|
3856
|
+
function rangesOverlap(rangeSet1, rangeSet2) {
|
|
3857
|
+
var i1 = getRangeSetIterator(rangeSet2);
|
|
3858
|
+
var nextResult1 = i1.next();
|
|
3859
|
+
if (nextResult1.done)
|
|
3860
|
+
return false;
|
|
3861
|
+
var a = nextResult1.value;
|
|
3862
|
+
var i2 = getRangeSetIterator(rangeSet1);
|
|
3863
|
+
var nextResult2 = i2.next(a.from);
|
|
3864
|
+
var b = nextResult2.value;
|
|
3865
|
+
while (!nextResult1.done && !nextResult2.done) {
|
|
3866
|
+
if (cmp(b.from, a.to) <= 0 && cmp(b.to, a.from) >= 0)
|
|
3867
|
+
return true;
|
|
3868
|
+
cmp(a.from, b.from) < 0
|
|
3869
|
+
? (a = (nextResult1 = i1.next(b.from)).value)
|
|
3870
|
+
: (b = (nextResult2 = i2.next(a.from)).value);
|
|
3871
|
+
}
|
|
3872
|
+
return false;
|
|
3873
|
+
}
|
|
3874
|
+
function getRangeSetIterator(node) {
|
|
3875
|
+
var state = isEmptyRange(node) ? null : { s: 0, n: node };
|
|
3876
|
+
return {
|
|
3877
|
+
next: function (key) {
|
|
3878
|
+
var keyProvided = arguments.length > 0;
|
|
3879
|
+
while (state) {
|
|
3880
|
+
switch (state.s) {
|
|
3881
|
+
case 0:
|
|
3882
|
+
state.s = 1;
|
|
3883
|
+
if (keyProvided) {
|
|
3884
|
+
while (state.n.l && cmp(key, state.n.from) < 0)
|
|
3885
|
+
state = { up: state, n: state.n.l, s: 1 };
|
|
3886
|
+
}
|
|
3887
|
+
else {
|
|
3888
|
+
while (state.n.l)
|
|
3889
|
+
state = { up: state, n: state.n.l, s: 1 };
|
|
3890
|
+
}
|
|
3891
|
+
case 1:
|
|
3892
|
+
state.s = 2;
|
|
3893
|
+
if (!keyProvided || cmp(key, state.n.to) <= 0)
|
|
3894
|
+
return { value: state.n, done: false };
|
|
3895
|
+
case 2:
|
|
3896
|
+
if (state.n.r) {
|
|
3897
|
+
state.s = 3;
|
|
3898
|
+
state = { up: state, n: state.n.r, s: 0 };
|
|
3899
|
+
continue;
|
|
3900
|
+
}
|
|
3901
|
+
case 3:
|
|
3902
|
+
state = state.up;
|
|
3903
|
+
}
|
|
3904
|
+
}
|
|
3905
|
+
return { done: true };
|
|
3906
|
+
},
|
|
3907
|
+
};
|
|
3908
|
+
}
|
|
3909
|
+
function rebalance(target) {
|
|
3910
|
+
var _a, _b;
|
|
3911
|
+
var diff = (((_a = target.r) === null || _a === void 0 ? void 0 : _a.d) || 0) - (((_b = target.l) === null || _b === void 0 ? void 0 : _b.d) || 0);
|
|
3912
|
+
var r = diff > 1 ? "r" : diff < -1 ? "l" : "";
|
|
3913
|
+
if (r) {
|
|
3914
|
+
var l = r === "r" ? "l" : "r";
|
|
3915
|
+
var rootClone = __assign({}, target);
|
|
3916
|
+
var oldRootRight = target[r];
|
|
3917
|
+
target.from = oldRootRight.from;
|
|
3918
|
+
target.to = oldRootRight.to;
|
|
3919
|
+
target[r] = oldRootRight[r];
|
|
3920
|
+
rootClone[r] = oldRootRight[l];
|
|
3921
|
+
target[l] = rootClone;
|
|
3922
|
+
rootClone.d = computeDepth(rootClone);
|
|
3923
|
+
}
|
|
3924
|
+
target.d = computeDepth(target);
|
|
3925
|
+
}
|
|
3926
|
+
function computeDepth(_a) {
|
|
3927
|
+
var r = _a.r, l = _a.l;
|
|
3928
|
+
return (r ? (l ? Math.max(r.d, l.d) : r.d) : l ? l.d : 0) + 1;
|
|
3929
|
+
}
|
|
3930
|
+
|
|
3931
|
+
function extendObservabilitySet(target, newSet) {
|
|
3932
|
+
keys(newSet).forEach(function (part) {
|
|
3933
|
+
if (target[part])
|
|
3934
|
+
mergeRanges(target[part], newSet[part]);
|
|
3935
|
+
else
|
|
3936
|
+
target[part] = cloneSimpleObjectTree(newSet[part]);
|
|
3937
|
+
});
|
|
3938
|
+
return target;
|
|
3939
|
+
}
|
|
3940
|
+
|
|
3941
|
+
function obsSetsOverlap(os1, os2) {
|
|
3942
|
+
return Object.keys(os1).some(function (key) { return os2[key] && rangesOverlap(os2[key], os1[key]); });
|
|
3943
|
+
}
|
|
3944
|
+
|
|
3945
|
+
var cache = {};
|
|
3946
|
+
|
|
3947
|
+
var unsignaledParts = {};
|
|
3948
|
+
var isTaskEnqueued = false;
|
|
3949
|
+
function signalSubscribersLazily(part) {
|
|
3950
|
+
extendObservabilitySet(unsignaledParts, part);
|
|
3951
|
+
if (!isTaskEnqueued) {
|
|
3952
|
+
isTaskEnqueued = true;
|
|
3953
|
+
setTimeout(function () {
|
|
3954
|
+
isTaskEnqueued = false;
|
|
3955
|
+
var parts = unsignaledParts;
|
|
3956
|
+
unsignaledParts = {};
|
|
3957
|
+
signalSubscribersNow(parts);
|
|
3958
|
+
}, 0);
|
|
3959
|
+
}
|
|
3960
|
+
}
|
|
3961
|
+
function signalSubscribersNow(updatedParts, deleteAffectedCacheEntries) {
|
|
3962
|
+
if (deleteAffectedCacheEntries === void 0) { deleteAffectedCacheEntries = false; }
|
|
3963
|
+
var queriesToSignal = new Set();
|
|
3964
|
+
for (var key in updatedParts) {
|
|
3965
|
+
var parts = /^idb\:\/\/(.*)\/(.*)\//.exec(key);
|
|
3966
|
+
if (parts) {
|
|
3967
|
+
var dbName = parts[1], tableName = parts[2];
|
|
3968
|
+
var tblCache = cache["idb://".concat(dbName, "/").concat(tableName)];
|
|
3969
|
+
if (tblCache)
|
|
3970
|
+
signalTableSubscribersNow(tblCache, updatedParts, queriesToSignal, deleteAffectedCacheEntries);
|
|
3971
|
+
}
|
|
3972
|
+
}
|
|
3973
|
+
queriesToSignal.forEach(function (requery) { return requery(); });
|
|
3974
|
+
}
|
|
3975
|
+
function signalTableSubscribersNow(tblCache, updatedParts, outQueriesToSignal, deleteAffectedCacheEntries) {
|
|
3976
|
+
var updatedEntryLists = deleteAffectedCacheEntries && [];
|
|
3977
|
+
for (var _i = 0, _a = Object.entries(tblCache.queries.query); _i < _a.length; _i++) {
|
|
3978
|
+
var _b = _a[_i], indexName = _b[0], entries = _b[1];
|
|
3979
|
+
var filteredEntries = deleteAffectedCacheEntries && [];
|
|
3980
|
+
for (var _c = 0, entries_1 = entries; _c < entries_1.length; _c++) {
|
|
3981
|
+
var entry = entries_1[_c];
|
|
3982
|
+
if (entry.obsSet && obsSetsOverlap(updatedParts, entry.obsSet)) {
|
|
3983
|
+
entry.subscribers.forEach(function (requery) { return outQueriesToSignal.add(requery); });
|
|
3984
|
+
}
|
|
3985
|
+
else if (deleteAffectedCacheEntries) {
|
|
3986
|
+
filteredEntries.push(entry);
|
|
3987
|
+
}
|
|
3988
|
+
}
|
|
3989
|
+
if (deleteAffectedCacheEntries)
|
|
3990
|
+
updatedEntryLists.push([indexName, filteredEntries]);
|
|
3991
|
+
}
|
|
3992
|
+
if (deleteAffectedCacheEntries) {
|
|
3993
|
+
for (var _d = 0, updatedEntryLists_1 = updatedEntryLists; _d < updatedEntryLists_1.length; _d++) {
|
|
3994
|
+
var _e = updatedEntryLists_1[_d], indexName = _e[0], filteredEntries = _e[1];
|
|
3995
|
+
tblCache.queries.query[indexName] = filteredEntries;
|
|
3996
|
+
}
|
|
3997
|
+
}
|
|
3998
|
+
}
|
|
3999
|
+
|
|
3810
4000
|
function dexieOpen(db) {
|
|
3811
4001
|
var state = db._state;
|
|
3812
4002
|
var indexedDB = db._deps.indexedDB;
|
|
@@ -3825,69 +4015,82 @@
|
|
|
3825
4015
|
}
|
|
3826
4016
|
var resolveDbReady = state.dbReadyResolve,
|
|
3827
4017
|
upgradeTransaction = null, wasCreated = false;
|
|
3828
|
-
|
|
3829
|
-
|
|
3830
|
-
|
|
3831
|
-
|
|
3832
|
-
|
|
3833
|
-
|
|
3834
|
-
|
|
3835
|
-
|
|
3836
|
-
|
|
3837
|
-
|
|
3838
|
-
|
|
3839
|
-
|
|
3840
|
-
|
|
3841
|
-
|
|
3842
|
-
|
|
3843
|
-
|
|
3844
|
-
|
|
3845
|
-
|
|
3846
|
-
|
|
3847
|
-
|
|
3848
|
-
|
|
3849
|
-
|
|
3850
|
-
|
|
3851
|
-
|
|
3852
|
-
|
|
3853
|
-
|
|
3854
|
-
|
|
3855
|
-
|
|
3856
|
-
|
|
3857
|
-
|
|
3858
|
-
|
|
3859
|
-
|
|
3860
|
-
|
|
3861
|
-
|
|
3862
|
-
|
|
3863
|
-
|
|
3864
|
-
|
|
3865
|
-
|
|
3866
|
-
|
|
3867
|
-
|
|
3868
|
-
|
|
3869
|
-
|
|
3870
|
-
|
|
3871
|
-
|
|
3872
|
-
}
|
|
4018
|
+
var tryOpenDB = function () { return new DexiePromise(function (resolve, reject) {
|
|
4019
|
+
throwIfCancelled();
|
|
4020
|
+
if (!indexedDB)
|
|
4021
|
+
throw new exceptions.MissingAPI();
|
|
4022
|
+
var dbName = db.name;
|
|
4023
|
+
var req = state.autoSchema ?
|
|
4024
|
+
indexedDB.open(dbName) :
|
|
4025
|
+
indexedDB.open(dbName, Math.round(db.verno * 10));
|
|
4026
|
+
if (!req)
|
|
4027
|
+
throw new exceptions.MissingAPI();
|
|
4028
|
+
req.onerror = eventRejectHandler(reject);
|
|
4029
|
+
req.onblocked = wrap(db._fireOnBlocked);
|
|
4030
|
+
req.onupgradeneeded = wrap(function (e) {
|
|
4031
|
+
upgradeTransaction = req.transaction;
|
|
4032
|
+
if (state.autoSchema && !db._options.allowEmptyDB) {
|
|
4033
|
+
req.onerror = preventDefault;
|
|
4034
|
+
upgradeTransaction.abort();
|
|
4035
|
+
req.result.close();
|
|
4036
|
+
var delreq = indexedDB.deleteDatabase(dbName);
|
|
4037
|
+
delreq.onsuccess = delreq.onerror = wrap(function () {
|
|
4038
|
+
reject(new exceptions.NoSuchDatabase("Database ".concat(dbName, " doesnt exist")));
|
|
4039
|
+
});
|
|
4040
|
+
}
|
|
4041
|
+
else {
|
|
4042
|
+
upgradeTransaction.onerror = eventRejectHandler(reject);
|
|
4043
|
+
var oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion;
|
|
4044
|
+
wasCreated = oldVer < 1;
|
|
4045
|
+
db.idbdb = req.result;
|
|
4046
|
+
runUpgraders(db, oldVer / 10, upgradeTransaction, reject);
|
|
4047
|
+
}
|
|
4048
|
+
}, reject);
|
|
4049
|
+
req.onsuccess = wrap(function () {
|
|
4050
|
+
upgradeTransaction = null;
|
|
4051
|
+
var idbdb = db.idbdb = req.result;
|
|
4052
|
+
var objectStoreNames = slice(idbdb.objectStoreNames);
|
|
4053
|
+
if (objectStoreNames.length > 0)
|
|
4054
|
+
try {
|
|
4055
|
+
var tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), 'readonly');
|
|
4056
|
+
if (state.autoSchema)
|
|
4057
|
+
readGlobalSchema(db, idbdb, tmpTrans);
|
|
4058
|
+
else {
|
|
4059
|
+
adjustToExistingIndexNames(db, db._dbSchema, tmpTrans);
|
|
4060
|
+
if (!verifyInstalledSchema(db, tmpTrans)) {
|
|
4061
|
+
console.warn("Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Some queries may fail.");
|
|
3873
4062
|
}
|
|
3874
|
-
generateMiddlewareStacks(db, tmpTrans);
|
|
3875
4063
|
}
|
|
3876
|
-
|
|
3877
|
-
|
|
3878
|
-
|
|
3879
|
-
|
|
3880
|
-
|
|
3881
|
-
|
|
3882
|
-
|
|
3883
|
-
|
|
3884
|
-
|
|
3885
|
-
|
|
3886
|
-
|
|
3887
|
-
|
|
3888
|
-
|
|
3889
|
-
|
|
3890
|
-
|
|
4064
|
+
generateMiddlewareStacks(db, tmpTrans);
|
|
4065
|
+
}
|
|
4066
|
+
catch (e) {
|
|
4067
|
+
}
|
|
4068
|
+
connections.push(db);
|
|
4069
|
+
idbdb.onversionchange = wrap(function (ev) {
|
|
4070
|
+
state.vcFired = true;
|
|
4071
|
+
db.on("versionchange").fire(ev);
|
|
4072
|
+
});
|
|
4073
|
+
idbdb.onclose = wrap(function (ev) {
|
|
4074
|
+
db.on("close").fire(ev);
|
|
4075
|
+
});
|
|
4076
|
+
if (wasCreated)
|
|
4077
|
+
_onDatabaseCreated(db._deps, dbName);
|
|
4078
|
+
resolve();
|
|
4079
|
+
}, reject);
|
|
4080
|
+
}).catch(function (err) {
|
|
4081
|
+
if (err && err.name === 'UnknownError' && state.PR1398_maxLoop > 0) {
|
|
4082
|
+
state.PR1398_maxLoop--;
|
|
4083
|
+
console.warn('Dexie: Workaround for Chrome UnknownError on open()');
|
|
4084
|
+
return tryOpenDB();
|
|
4085
|
+
}
|
|
4086
|
+
else {
|
|
4087
|
+
return DexiePromise.reject(err);
|
|
4088
|
+
}
|
|
4089
|
+
}); };
|
|
4090
|
+
return DexiePromise.race([
|
|
4091
|
+
openCanceller,
|
|
4092
|
+
(typeof navigator === 'undefined' ? DexiePromise.resolve() : idbReady()).then(tryOpenDB)
|
|
4093
|
+
]).then(function () {
|
|
3891
4094
|
throwIfCancelled();
|
|
3892
4095
|
state.onReadyBeingFired = [];
|
|
3893
4096
|
return DexiePromise.resolve(vip(function () { return db.on.ready.fire(db.vip); })).then(function fireRemainders() {
|
|
@@ -3898,10 +4101,10 @@
|
|
|
3898
4101
|
}
|
|
3899
4102
|
});
|
|
3900
4103
|
}).finally(function () {
|
|
3901
|
-
state.
|
|
3902
|
-
|
|
3903
|
-
|
|
3904
|
-
|
|
4104
|
+
if (state.openCanceller === openCanceller) {
|
|
4105
|
+
state.onReadyBeingFired = null;
|
|
4106
|
+
state.isBeingOpened = false;
|
|
4107
|
+
}
|
|
3905
4108
|
}).catch(function (err) {
|
|
3906
4109
|
state.dbOpenError = err;
|
|
3907
4110
|
try {
|
|
@@ -3915,6 +4118,20 @@
|
|
|
3915
4118
|
}).finally(function () {
|
|
3916
4119
|
state.openComplete = true;
|
|
3917
4120
|
resolveDbReady();
|
|
4121
|
+
}).then(function () {
|
|
4122
|
+
if (wasCreated) {
|
|
4123
|
+
var everything_1 = {};
|
|
4124
|
+
db.tables.forEach(function (table) {
|
|
4125
|
+
table.schema.indexes.forEach(function (idx) {
|
|
4126
|
+
if (idx.name)
|
|
4127
|
+
everything_1["idb://".concat(db.name, "/").concat(table.name, "/").concat(idx.name)] = new RangeSet(-Infinity, [[[]]]);
|
|
4128
|
+
});
|
|
4129
|
+
everything_1["idb://".concat(db.name, "/").concat(table.name, "/")] = everything_1["idb://".concat(db.name, "/").concat(table.name, "/:dels")] = new RangeSet(-Infinity, [[[]]]);
|
|
4130
|
+
});
|
|
4131
|
+
globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME).fire(everything_1);
|
|
4132
|
+
signalSubscribersNow(everything_1, true);
|
|
4133
|
+
}
|
|
4134
|
+
return db;
|
|
3918
4135
|
});
|
|
3919
4136
|
}
|
|
3920
4137
|
|
|
@@ -3947,6 +4164,7 @@
|
|
|
3947
4164
|
return DexiePromise.resolve().then(function () {
|
|
3948
4165
|
var transless = PSD.transless || PSD;
|
|
3949
4166
|
var trans = db._createTransaction(mode, storeNames, db._dbSchema, parentTransaction);
|
|
4167
|
+
trans.explicit = true;
|
|
3950
4168
|
var zoneProps = {
|
|
3951
4169
|
trans: trans,
|
|
3952
4170
|
transless: transless
|
|
@@ -4017,7 +4235,9 @@
|
|
|
4017
4235
|
var indexList = (indexLookup[keyPathAlias] = indexLookup[keyPathAlias] || []);
|
|
4018
4236
|
var keyLength = keyPath == null ? 0 : typeof keyPath === 'string' ? 1 : keyPath.length;
|
|
4019
4237
|
var isVirtual = keyTail > 0;
|
|
4020
|
-
var virtualIndex = __assign(__assign({}, lowLevelIndex), {
|
|
4238
|
+
var virtualIndex = __assign(__assign({}, lowLevelIndex), { name: isVirtual
|
|
4239
|
+
? "".concat(keyPathAlias, "(virtual-from:").concat(lowLevelIndex.name, ")")
|
|
4240
|
+
: lowLevelIndex.name, lowLevelIndex: lowLevelIndex, isVirtual: isVirtual, keyTail: keyTail, keyLength: keyLength, extractKey: getKeyExtractor(keyPath), unique: !isVirtual && lowLevelIndex.unique });
|
|
4021
4241
|
indexList.push(virtualIndex);
|
|
4022
4242
|
if (!virtualIndex.isPrimaryKey) {
|
|
4023
4243
|
allVirtualIndexes.push(virtualIndex);
|
|
@@ -4055,7 +4275,7 @@
|
|
|
4055
4275
|
function translateRequest(req) {
|
|
4056
4276
|
var index = req.query.index;
|
|
4057
4277
|
return index.isVirtual ? __assign(__assign({}, req), { query: {
|
|
4058
|
-
index: index,
|
|
4278
|
+
index: index.lowLevelIndex,
|
|
4059
4279
|
range: translateRange(req.query.range, index.keyTail)
|
|
4060
4280
|
} }) : req;
|
|
4061
4281
|
}
|
|
@@ -4334,182 +4554,49 @@
|
|
|
4334
4554
|
},
|
|
4335
4555
|
};
|
|
4336
4556
|
|
|
4337
|
-
|
|
4338
|
-
|
|
4339
|
-
|
|
4340
|
-
|
|
4341
|
-
|
|
4342
|
-
|
|
4343
|
-
extend(this, arguments.length ? { d: 1, from: fromOrTree, to: arguments.length > 1 ? to : fromOrTree } : { d: 0 });
|
|
4344
|
-
}
|
|
4345
|
-
else {
|
|
4346
|
-
var rv = new RangeSet();
|
|
4347
|
-
if (fromOrTree && ("d" in fromOrTree)) {
|
|
4348
|
-
extend(rv, fromOrTree);
|
|
4349
|
-
}
|
|
4350
|
-
return rv;
|
|
4351
|
-
}
|
|
4352
|
-
};
|
|
4353
|
-
props(RangeSet.prototype, (_a = {
|
|
4354
|
-
add: function (rangeSet) {
|
|
4355
|
-
mergeRanges(this, rangeSet);
|
|
4356
|
-
return this;
|
|
4357
|
-
},
|
|
4358
|
-
addKey: function (key) {
|
|
4359
|
-
addRange(this, key, key);
|
|
4360
|
-
return this;
|
|
4361
|
-
},
|
|
4362
|
-
addKeys: function (keys) {
|
|
4363
|
-
var _this = this;
|
|
4364
|
-
keys.forEach(function (key) { return addRange(_this, key, key); });
|
|
4365
|
-
return this;
|
|
4366
|
-
}
|
|
4367
|
-
},
|
|
4368
|
-
_a[iteratorSymbol] = function () {
|
|
4369
|
-
return getRangeSetIterator(this);
|
|
4370
|
-
},
|
|
4371
|
-
_a));
|
|
4372
|
-
function addRange(target, from, to) {
|
|
4373
|
-
var diff = cmp(from, to);
|
|
4374
|
-
if (isNaN(diff))
|
|
4375
|
-
return;
|
|
4376
|
-
if (diff > 0)
|
|
4377
|
-
throw RangeError();
|
|
4378
|
-
if (isEmptyRange(target))
|
|
4379
|
-
return extend(target, { from: from, to: to, d: 1 });
|
|
4380
|
-
var left = target.l;
|
|
4381
|
-
var right = target.r;
|
|
4382
|
-
if (cmp(to, target.from) < 0) {
|
|
4383
|
-
left
|
|
4384
|
-
? addRange(left, from, to)
|
|
4385
|
-
: (target.l = { from: from, to: to, d: 1, l: null, r: null });
|
|
4386
|
-
return rebalance(target);
|
|
4387
|
-
}
|
|
4388
|
-
if (cmp(from, target.to) > 0) {
|
|
4389
|
-
right
|
|
4390
|
-
? addRange(right, from, to)
|
|
4391
|
-
: (target.r = { from: from, to: to, d: 1, l: null, r: null });
|
|
4392
|
-
return rebalance(target);
|
|
4393
|
-
}
|
|
4394
|
-
if (cmp(from, target.from) < 0) {
|
|
4395
|
-
target.from = from;
|
|
4396
|
-
target.l = null;
|
|
4397
|
-
target.d = right ? right.d + 1 : 1;
|
|
4398
|
-
}
|
|
4399
|
-
if (cmp(to, target.to) > 0) {
|
|
4400
|
-
target.to = to;
|
|
4401
|
-
target.r = null;
|
|
4402
|
-
target.d = target.l ? target.l.d + 1 : 1;
|
|
4403
|
-
}
|
|
4404
|
-
var rightWasCutOff = !target.r;
|
|
4405
|
-
if (left && !target.l) {
|
|
4406
|
-
mergeRanges(target, left);
|
|
4407
|
-
}
|
|
4408
|
-
if (right && rightWasCutOff) {
|
|
4409
|
-
mergeRanges(target, right);
|
|
4410
|
-
}
|
|
4557
|
+
function isCachableContext(ctx, table) {
|
|
4558
|
+
return (ctx.trans.mode === 'readonly' &&
|
|
4559
|
+
!!ctx.subscr &&
|
|
4560
|
+
!ctx.trans.explicit &&
|
|
4561
|
+
ctx.trans.db._options.cache !== 'disabled' &&
|
|
4562
|
+
!table.schema.primaryKey.outbound);
|
|
4411
4563
|
}
|
|
4412
|
-
|
|
4413
|
-
|
|
4414
|
-
|
|
4415
|
-
|
|
4416
|
-
|
|
4417
|
-
|
|
4418
|
-
|
|
4419
|
-
|
|
4420
|
-
|
|
4421
|
-
|
|
4422
|
-
|
|
4423
|
-
|
|
4424
|
-
|
|
4425
|
-
var i1 = getRangeSetIterator(rangeSet2);
|
|
4426
|
-
var nextResult1 = i1.next();
|
|
4427
|
-
if (nextResult1.done)
|
|
4428
|
-
return false;
|
|
4429
|
-
var a = nextResult1.value;
|
|
4430
|
-
var i2 = getRangeSetIterator(rangeSet1);
|
|
4431
|
-
var nextResult2 = i2.next(a.from);
|
|
4432
|
-
var b = nextResult2.value;
|
|
4433
|
-
while (!nextResult1.done && !nextResult2.done) {
|
|
4434
|
-
if (cmp(b.from, a.to) <= 0 && cmp(b.to, a.from) >= 0)
|
|
4435
|
-
return true;
|
|
4436
|
-
cmp(a.from, b.from) < 0
|
|
4437
|
-
? (a = (nextResult1 = i1.next(b.from)).value)
|
|
4438
|
-
: (b = (nextResult2 = i2.next(a.from)).value);
|
|
4439
|
-
}
|
|
4440
|
-
return false;
|
|
4441
|
-
}
|
|
4442
|
-
function getRangeSetIterator(node) {
|
|
4443
|
-
var state = isEmptyRange(node) ? null : { s: 0, n: node };
|
|
4444
|
-
return {
|
|
4445
|
-
next: function (key) {
|
|
4446
|
-
var keyProvided = arguments.length > 0;
|
|
4447
|
-
while (state) {
|
|
4448
|
-
switch (state.s) {
|
|
4449
|
-
case 0:
|
|
4450
|
-
state.s = 1;
|
|
4451
|
-
if (keyProvided) {
|
|
4452
|
-
while (state.n.l && cmp(key, state.n.from) < 0)
|
|
4453
|
-
state = { up: state, n: state.n.l, s: 1 };
|
|
4454
|
-
}
|
|
4455
|
-
else {
|
|
4456
|
-
while (state.n.l)
|
|
4457
|
-
state = { up: state, n: state.n.l, s: 1 };
|
|
4458
|
-
}
|
|
4459
|
-
case 1:
|
|
4460
|
-
state.s = 2;
|
|
4461
|
-
if (!keyProvided || cmp(key, state.n.to) <= 0)
|
|
4462
|
-
return { value: state.n, done: false };
|
|
4463
|
-
case 2:
|
|
4464
|
-
if (state.n.r) {
|
|
4465
|
-
state.s = 3;
|
|
4466
|
-
state = { up: state, n: state.n.r, s: 0 };
|
|
4467
|
-
continue;
|
|
4468
|
-
}
|
|
4469
|
-
case 3:
|
|
4470
|
-
state = state.up;
|
|
4471
|
-
}
|
|
4472
|
-
}
|
|
4473
|
-
return { done: true };
|
|
4474
|
-
},
|
|
4475
|
-
};
|
|
4476
|
-
}
|
|
4477
|
-
function rebalance(target) {
|
|
4478
|
-
var _a, _b;
|
|
4479
|
-
var diff = (((_a = target.r) === null || _a === void 0 ? void 0 : _a.d) || 0) - (((_b = target.l) === null || _b === void 0 ? void 0 : _b.d) || 0);
|
|
4480
|
-
var r = diff > 1 ? "r" : diff < -1 ? "l" : "";
|
|
4481
|
-
if (r) {
|
|
4482
|
-
var l = r === "r" ? "l" : "r";
|
|
4483
|
-
var rootClone = __assign({}, target);
|
|
4484
|
-
var oldRootRight = target[r];
|
|
4485
|
-
target.from = oldRootRight.from;
|
|
4486
|
-
target.to = oldRootRight.to;
|
|
4487
|
-
target[r] = oldRootRight[r];
|
|
4488
|
-
rootClone[r] = oldRootRight[l];
|
|
4489
|
-
target[l] = rootClone;
|
|
4490
|
-
rootClone.d = computeDepth(rootClone);
|
|
4564
|
+
|
|
4565
|
+
function isCachableRequest(type, req) {
|
|
4566
|
+
switch (type) {
|
|
4567
|
+
case 'query':
|
|
4568
|
+
return req.values && !req.unique;
|
|
4569
|
+
case 'get':
|
|
4570
|
+
return false;
|
|
4571
|
+
case 'getMany':
|
|
4572
|
+
return false;
|
|
4573
|
+
case 'count':
|
|
4574
|
+
return false;
|
|
4575
|
+
case 'openCursor':
|
|
4576
|
+
return false;
|
|
4491
4577
|
}
|
|
4492
|
-
target.d = computeDepth(target);
|
|
4493
|
-
}
|
|
4494
|
-
function computeDepth(_a) {
|
|
4495
|
-
var r = _a.r, l = _a.l;
|
|
4496
|
-
return (r ? (l ? Math.max(r.d, l.d) : r.d) : l ? l.d : 0) + 1;
|
|
4497
4578
|
}
|
|
4498
4579
|
|
|
4499
4580
|
var observabilityMiddleware = {
|
|
4500
4581
|
stack: "dbcore",
|
|
4501
4582
|
level: 0,
|
|
4583
|
+
name: "Observability",
|
|
4502
4584
|
create: function (core) {
|
|
4503
4585
|
var dbName = core.schema.name;
|
|
4504
4586
|
var FULL_RANGE = new RangeSet(core.MIN_KEY, core.MAX_KEY);
|
|
4505
|
-
return __assign(__assign({}, core), {
|
|
4587
|
+
return __assign(__assign({}, core), { transaction: function (stores, mode, options) {
|
|
4588
|
+
if (PSD.subscr && mode !== 'readonly') {
|
|
4589
|
+
throw new exceptions.ReadOnly("Readwrite transaction in liveQuery context. Querier source: ".concat(PSD.querier));
|
|
4590
|
+
}
|
|
4591
|
+
return core.transaction(stores, mode, options);
|
|
4592
|
+
}, table: function (tableName) {
|
|
4506
4593
|
var table = core.table(tableName);
|
|
4507
4594
|
var schema = table.schema;
|
|
4508
4595
|
var primaryKey = schema.primaryKey;
|
|
4509
4596
|
var extractKey = primaryKey.extractKey, outbound = primaryKey.outbound;
|
|
4510
4597
|
var tableClone = __assign(__assign({}, table), { mutate: function (req) {
|
|
4511
4598
|
var trans = req.trans;
|
|
4512
|
-
var mutatedParts =
|
|
4599
|
+
var mutatedParts = req.mutatedParts || (req.mutatedParts = {});
|
|
4513
4600
|
var getRangeSet = function (indexName) {
|
|
4514
4601
|
var part = "idb://".concat(dbName, "/").concat(tableName, "/").concat(indexName);
|
|
4515
4602
|
return (mutatedParts[part] ||
|
|
@@ -4523,32 +4610,34 @@
|
|
|
4523
4610
|
: req.type === "delete"
|
|
4524
4611
|
? [req.keys]
|
|
4525
4612
|
: req.values.length < 50
|
|
4526
|
-
? [
|
|
4613
|
+
? [getEffectiveKeys(primaryKey, req).filter(function (id) { return id; }), req.values]
|
|
4527
4614
|
: [], keys = _a[0], newObjs = _a[1];
|
|
4528
4615
|
var oldCache = req.trans["_cache"];
|
|
4529
|
-
|
|
4530
|
-
|
|
4531
|
-
|
|
4532
|
-
|
|
4533
|
-
|
|
4534
|
-
var oldObjs = getFromTransactionCache(keys, oldCache);
|
|
4535
|
-
if (!oldObjs && type !== "add") {
|
|
4536
|
-
delsRangeSet.addKeys(keys);
|
|
4537
|
-
}
|
|
4538
|
-
if (oldObjs || newObjs) {
|
|
4539
|
-
trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs);
|
|
4540
|
-
}
|
|
4616
|
+
if (isArray(keys)) {
|
|
4617
|
+
pkRangeSet.addKeys(keys);
|
|
4618
|
+
var oldObjs = type === 'delete' || keys.length === newObjs.length ? getFromTransactionCache(keys, oldCache) : null;
|
|
4619
|
+
if (!oldObjs && type !== "add") {
|
|
4620
|
+
delsRangeSet.addKeys(keys);
|
|
4541
4621
|
}
|
|
4542
|
-
|
|
4543
|
-
|
|
4544
|
-
delsRangeSet.add(range);
|
|
4545
|
-
pkRangeSet.add(range);
|
|
4622
|
+
if (oldObjs || newObjs) {
|
|
4623
|
+
trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs);
|
|
4546
4624
|
}
|
|
4547
|
-
|
|
4548
|
-
|
|
4549
|
-
|
|
4550
|
-
|
|
4625
|
+
}
|
|
4626
|
+
else if (keys) {
|
|
4627
|
+
var range = { from: keys.lower, to: keys.upper };
|
|
4628
|
+
delsRangeSet.add(range);
|
|
4629
|
+
pkRangeSet.add(range);
|
|
4630
|
+
}
|
|
4631
|
+
else {
|
|
4632
|
+
pkRangeSet.add(FULL_RANGE);
|
|
4633
|
+
delsRangeSet.add(FULL_RANGE);
|
|
4634
|
+
schema.indexes.forEach(function (idx) { return getRangeSet(idx.name).add(FULL_RANGE); });
|
|
4635
|
+
}
|
|
4636
|
+
return table.mutate(req).then(function (res) {
|
|
4637
|
+
if (keys && (req.type === 'add' || req.type === 'put')) {
|
|
4638
|
+
pkRangeSet.addKeys(res.results);
|
|
4551
4639
|
}
|
|
4640
|
+
trans.mutatedParts = extendObservabilitySet(trans.mutatedParts || {}, mutatedParts);
|
|
4552
4641
|
return res;
|
|
4553
4642
|
});
|
|
4554
4643
|
} });
|
|
@@ -4570,11 +4659,16 @@
|
|
|
4570
4659
|
keys(readSubscribers).forEach(function (method) {
|
|
4571
4660
|
tableClone[method] = function (req) {
|
|
4572
4661
|
var subscr = PSD.subscr;
|
|
4573
|
-
|
|
4662
|
+
var isLiveQuery = !!subscr;
|
|
4663
|
+
var cachable = isCachableContext(PSD, table) && isCachableRequest(method, req);
|
|
4664
|
+
var obsSet = cachable
|
|
4665
|
+
? req.obsSet = {}
|
|
4666
|
+
: subscr;
|
|
4667
|
+
if (isLiveQuery) {
|
|
4574
4668
|
var getRangeSet = function (indexName) {
|
|
4575
4669
|
var part = "idb://".concat(dbName, "/").concat(tableName, "/").concat(indexName);
|
|
4576
|
-
return (
|
|
4577
|
-
(
|
|
4670
|
+
return (obsSet[part] ||
|
|
4671
|
+
(obsSet[part] = new RangeSet()));
|
|
4578
4672
|
};
|
|
4579
4673
|
var pkRangeSet_1 = getRangeSet("");
|
|
4580
4674
|
var delsRangeSet_1 = getRangeSet(":dels");
|
|
@@ -4669,6 +4763,409 @@
|
|
|
4669
4763
|
schema.indexes.forEach(addAffectedIndex);
|
|
4670
4764
|
}
|
|
4671
4765
|
|
|
4766
|
+
function adjustOptimisticFromFailures(tblCache, req, res) {
|
|
4767
|
+
if (res.numFailures === 0)
|
|
4768
|
+
return req;
|
|
4769
|
+
if (req.type === 'deleteRange') {
|
|
4770
|
+
return null;
|
|
4771
|
+
}
|
|
4772
|
+
var numBulkOps = req.keys
|
|
4773
|
+
? req.keys.length
|
|
4774
|
+
: 'values' in req && req.values
|
|
4775
|
+
? req.values.length
|
|
4776
|
+
: 1;
|
|
4777
|
+
if (res.numFailures === numBulkOps) {
|
|
4778
|
+
return null;
|
|
4779
|
+
}
|
|
4780
|
+
var clone = __assign({}, req);
|
|
4781
|
+
if (isArray(clone.keys)) {
|
|
4782
|
+
clone.keys = clone.keys.filter(function (_, i) { return !(i in res.failures); });
|
|
4783
|
+
}
|
|
4784
|
+
if ('values' in clone && isArray(clone.values)) {
|
|
4785
|
+
clone.values = clone.values.filter(function (_, i) { return !(i in res.failures); });
|
|
4786
|
+
}
|
|
4787
|
+
return clone;
|
|
4788
|
+
}
|
|
4789
|
+
|
|
4790
|
+
function isAboveLower(key, range) {
|
|
4791
|
+
return range.lower === undefined
|
|
4792
|
+
? true
|
|
4793
|
+
: range.lowerOpen
|
|
4794
|
+
? cmp(key, range.lower) > 0
|
|
4795
|
+
: cmp(key, range.lower) >= 0;
|
|
4796
|
+
}
|
|
4797
|
+
function isBelowUpper(key, range) {
|
|
4798
|
+
return range.upper === undefined
|
|
4799
|
+
? true
|
|
4800
|
+
: range.upperOpen
|
|
4801
|
+
? cmp(key, range.upper) < 0
|
|
4802
|
+
: cmp(key, range.upper) <= 0;
|
|
4803
|
+
}
|
|
4804
|
+
function isWithinRange(key, range) {
|
|
4805
|
+
return isAboveLower(key, range) && isBelowUpper(key, range);
|
|
4806
|
+
}
|
|
4807
|
+
|
|
4808
|
+
function applyOptimisticOps(result, req, ops, table, cacheEntry, immutable) {
|
|
4809
|
+
if (!ops || ops.length === 0)
|
|
4810
|
+
return result;
|
|
4811
|
+
var index = req.query.index;
|
|
4812
|
+
var primaryKey = table.schema.primaryKey;
|
|
4813
|
+
var extractPrimKey = primaryKey.extractKey;
|
|
4814
|
+
var extractIndex = index.extractKey;
|
|
4815
|
+
var extractLowLevelIndex = (index.lowLevelIndex || index).extractKey;
|
|
4816
|
+
var finalResult = ops.reduce(function (result, op) {
|
|
4817
|
+
var modifedResult = result;
|
|
4818
|
+
var includedValues = op.type === 'add' || op.type === 'put'
|
|
4819
|
+
? op.values.filter(function (v) {
|
|
4820
|
+
return isWithinRange(extractIndex(v), req.query.range);
|
|
4821
|
+
}).map(function (v) {
|
|
4822
|
+
v = deepClone(v);
|
|
4823
|
+
if (immutable)
|
|
4824
|
+
Object.freeze(v);
|
|
4825
|
+
return v;
|
|
4826
|
+
})
|
|
4827
|
+
: [];
|
|
4828
|
+
switch (op.type) {
|
|
4829
|
+
case 'add':
|
|
4830
|
+
modifedResult = result.concat(req.values
|
|
4831
|
+
? includedValues
|
|
4832
|
+
: includedValues.map(function (v) { return extractPrimKey(v); }));
|
|
4833
|
+
break;
|
|
4834
|
+
case 'put':
|
|
4835
|
+
var keySet_1 = new RangeSet().addKeys(op.values.map(function (v) { return extractPrimKey(v); }));
|
|
4836
|
+
modifedResult = result
|
|
4837
|
+
.filter(function (item) {
|
|
4838
|
+
var key = req.values ? extractPrimKey(item) : item;
|
|
4839
|
+
return !rangesOverlap(new RangeSet(key), keySet_1);
|
|
4840
|
+
})
|
|
4841
|
+
.concat(req.values
|
|
4842
|
+
? includedValues
|
|
4843
|
+
: includedValues.map(function (v) { return extractPrimKey(v); }));
|
|
4844
|
+
break;
|
|
4845
|
+
case 'delete':
|
|
4846
|
+
var keysToDelete_1 = new RangeSet().addKeys(op.keys);
|
|
4847
|
+
modifedResult = result.filter(function (item) {
|
|
4848
|
+
var key = req.values ? extractPrimKey(item) : item;
|
|
4849
|
+
return !rangesOverlap(new RangeSet(key), keysToDelete_1);
|
|
4850
|
+
});
|
|
4851
|
+
break;
|
|
4852
|
+
case 'deleteRange':
|
|
4853
|
+
var range_1 = op.range;
|
|
4854
|
+
modifedResult = result.filter(function (item) { return !isWithinRange(extractPrimKey(item), range_1); });
|
|
4855
|
+
break;
|
|
4856
|
+
}
|
|
4857
|
+
return modifedResult;
|
|
4858
|
+
}, result);
|
|
4859
|
+
if (finalResult === result)
|
|
4860
|
+
return result;
|
|
4861
|
+
finalResult.sort(function (a, b) {
|
|
4862
|
+
return cmp(extractLowLevelIndex(a), extractLowLevelIndex(b)) ||
|
|
4863
|
+
cmp(extractPrimKey(a), extractPrimKey(b));
|
|
4864
|
+
});
|
|
4865
|
+
if (req.limit && req.limit < Infinity) {
|
|
4866
|
+
if (finalResult.length > req.limit) {
|
|
4867
|
+
finalResult.length = req.limit;
|
|
4868
|
+
}
|
|
4869
|
+
else if (result.length === req.limit && finalResult.length < req.limit) {
|
|
4870
|
+
cacheEntry.dirty = true;
|
|
4871
|
+
}
|
|
4872
|
+
}
|
|
4873
|
+
return immutable ? Object.freeze(finalResult) : finalResult;
|
|
4874
|
+
}
|
|
4875
|
+
|
|
4876
|
+
function areRangesEqual(r1, r2) {
|
|
4877
|
+
return (cmp(r1.lower, r2.lower) === 0 &&
|
|
4878
|
+
cmp(r1.upper, r2.upper) === 0 &&
|
|
4879
|
+
!!r1.lowerOpen === !!r2.lowerOpen &&
|
|
4880
|
+
!!r1.upperOpen === !!r2.upperOpen);
|
|
4881
|
+
}
|
|
4882
|
+
|
|
4883
|
+
function compareLowers(lower1, lower2, lowerOpen1, lowerOpen2) {
|
|
4884
|
+
if (lower1 === undefined)
|
|
4885
|
+
return lower2 !== undefined ? -1 : 0;
|
|
4886
|
+
if (lower2 === undefined)
|
|
4887
|
+
return 1;
|
|
4888
|
+
var c = cmp(lower1, lower2);
|
|
4889
|
+
if (c === 0) {
|
|
4890
|
+
if (lowerOpen1 && lowerOpen2)
|
|
4891
|
+
return 0;
|
|
4892
|
+
if (lowerOpen1)
|
|
4893
|
+
return 1;
|
|
4894
|
+
if (lowerOpen2)
|
|
4895
|
+
return -1;
|
|
4896
|
+
}
|
|
4897
|
+
return c;
|
|
4898
|
+
}
|
|
4899
|
+
function compareUppers(upper1, upper2, upperOpen1, upperOpen2) {
|
|
4900
|
+
if (upper1 === undefined)
|
|
4901
|
+
return upper2 !== undefined ? 1 : 0;
|
|
4902
|
+
if (upper2 === undefined)
|
|
4903
|
+
return -1;
|
|
4904
|
+
var c = cmp(upper1, upper2);
|
|
4905
|
+
if (c === 0) {
|
|
4906
|
+
if (upperOpen1 && upperOpen2)
|
|
4907
|
+
return 0;
|
|
4908
|
+
if (upperOpen1)
|
|
4909
|
+
return -1;
|
|
4910
|
+
if (upperOpen2)
|
|
4911
|
+
return 1;
|
|
4912
|
+
}
|
|
4913
|
+
return c;
|
|
4914
|
+
}
|
|
4915
|
+
function isSuperRange(r1, r2) {
|
|
4916
|
+
return (compareLowers(r1.lower, r2.lower, r1.lowerOpen, r2.lowerOpen) <= 0 &&
|
|
4917
|
+
compareUppers(r1.upper, r2.upper, r1.upperOpen, r2.upperOpen) >= 0);
|
|
4918
|
+
}
|
|
4919
|
+
|
|
4920
|
+
function findCompatibleQuery(dbName, tableName, type, req) {
|
|
4921
|
+
var tblCache = cache["idb://".concat(dbName, "/").concat(tableName)];
|
|
4922
|
+
if (!tblCache)
|
|
4923
|
+
return [];
|
|
4924
|
+
var queries = tblCache.queries[type];
|
|
4925
|
+
if (!queries)
|
|
4926
|
+
return [null, false, tblCache, null];
|
|
4927
|
+
var indexName = req.query ? req.query.index.name : null;
|
|
4928
|
+
var entries = queries[indexName || ''];
|
|
4929
|
+
if (!entries)
|
|
4930
|
+
return [null, false, tblCache, null];
|
|
4931
|
+
switch (type) {
|
|
4932
|
+
case 'query':
|
|
4933
|
+
var equalEntry = entries.find(function (entry) {
|
|
4934
|
+
return entry.req.limit === req.limit &&
|
|
4935
|
+
entry.req.values === req.values &&
|
|
4936
|
+
areRangesEqual(entry.req.query.range, req.query.range);
|
|
4937
|
+
});
|
|
4938
|
+
if (equalEntry)
|
|
4939
|
+
return [
|
|
4940
|
+
equalEntry,
|
|
4941
|
+
true,
|
|
4942
|
+
tblCache,
|
|
4943
|
+
entries,
|
|
4944
|
+
];
|
|
4945
|
+
var superEntry = entries.find(function (entry) {
|
|
4946
|
+
var limit = 'limit' in entry.req ? entry.req.limit : Infinity;
|
|
4947
|
+
return (limit >= req.limit &&
|
|
4948
|
+
(req.values ? entry.req.values : true) &&
|
|
4949
|
+
isSuperRange(entry.req.query.range, req.query.range));
|
|
4950
|
+
});
|
|
4951
|
+
return [superEntry, false, tblCache, entries];
|
|
4952
|
+
case 'count':
|
|
4953
|
+
var countQuery = entries.find(function (entry) {
|
|
4954
|
+
return areRangesEqual(entry.req.query.range, req.query.range);
|
|
4955
|
+
});
|
|
4956
|
+
return [countQuery, !!countQuery, tblCache, entries];
|
|
4957
|
+
}
|
|
4958
|
+
}
|
|
4959
|
+
|
|
4960
|
+
function subscribeToCacheEntry(cacheEntry, container, requery, signal) {
|
|
4961
|
+
cacheEntry.subscribers.add(requery);
|
|
4962
|
+
signal.addEventListener("abort", function () {
|
|
4963
|
+
cacheEntry.subscribers.delete(requery);
|
|
4964
|
+
if (cacheEntry.subscribers.size === 0) {
|
|
4965
|
+
enqueForDeletion(cacheEntry, container);
|
|
4966
|
+
}
|
|
4967
|
+
});
|
|
4968
|
+
}
|
|
4969
|
+
function enqueForDeletion(cacheEntry, container) {
|
|
4970
|
+
setTimeout(function () {
|
|
4971
|
+
if (cacheEntry.subscribers.size === 0) {
|
|
4972
|
+
delArrayItem(container, cacheEntry);
|
|
4973
|
+
}
|
|
4974
|
+
}, 3000);
|
|
4975
|
+
}
|
|
4976
|
+
|
|
4977
|
+
var cacheMiddleware = {
|
|
4978
|
+
stack: 'dbcore',
|
|
4979
|
+
level: 0,
|
|
4980
|
+
name: 'Cache',
|
|
4981
|
+
create: function (core) {
|
|
4982
|
+
var dbName = core.schema.name;
|
|
4983
|
+
var coreMW = __assign(__assign({}, core), { transaction: function (stores, mode, options) {
|
|
4984
|
+
var idbtrans = core.transaction(stores, mode, options);
|
|
4985
|
+
if (mode === 'readwrite') {
|
|
4986
|
+
var ac_1 = new AbortController();
|
|
4987
|
+
var signal = ac_1.signal;
|
|
4988
|
+
var endTransaction = function (wasCommitted) { return function () {
|
|
4989
|
+
ac_1.abort();
|
|
4990
|
+
if (mode === 'readwrite') {
|
|
4991
|
+
var affectedSubscribers_1 = new Set();
|
|
4992
|
+
for (var _i = 0, stores_1 = stores; _i < stores_1.length; _i++) {
|
|
4993
|
+
var storeName = stores_1[_i];
|
|
4994
|
+
var tblCache = cache["idb://".concat(dbName, "/").concat(storeName)];
|
|
4995
|
+
var table = core.table(storeName);
|
|
4996
|
+
if (tblCache) {
|
|
4997
|
+
var ops = tblCache.optimisticOps.filter(function (op) { return op.trans === idbtrans; });
|
|
4998
|
+
if (ops.length > 0) {
|
|
4999
|
+
tblCache.optimisticOps = tblCache.optimisticOps.filter(function (op) { return op.trans !== idbtrans; });
|
|
5000
|
+
for (var _a = 0, _b = Object.values(tblCache.queries.query); _a < _b.length; _a++) {
|
|
5001
|
+
var entries = _b[_a];
|
|
5002
|
+
for (var _c = 0, _d = entries.slice(); _c < _d.length; _c++) {
|
|
5003
|
+
var entry = _d[_c];
|
|
5004
|
+
if (entry.res != null &&
|
|
5005
|
+
idbtrans.mutatedParts
|
|
5006
|
+
) {
|
|
5007
|
+
if (wasCommitted && !entry.dirty) {
|
|
5008
|
+
var freezeResults = Object.isFrozen(entry.res);
|
|
5009
|
+
var modRes = applyOptimisticOps(entry.res, entry.req, ops, table, entry, freezeResults);
|
|
5010
|
+
if (entry.dirty) {
|
|
5011
|
+
delArrayItem(entries, entry);
|
|
5012
|
+
entry.subscribers.forEach(function (requery) { return affectedSubscribers_1.add(requery); });
|
|
5013
|
+
}
|
|
5014
|
+
else if (modRes !== entry.res) {
|
|
5015
|
+
entry.res = modRes;
|
|
5016
|
+
entry.promise = DexiePromise.resolve({ result: modRes });
|
|
5017
|
+
}
|
|
5018
|
+
}
|
|
5019
|
+
else {
|
|
5020
|
+
if (entry.dirty) {
|
|
5021
|
+
delArrayItem(entries, entry);
|
|
5022
|
+
}
|
|
5023
|
+
entry.subscribers.forEach(function (requery) { return affectedSubscribers_1.add(requery); });
|
|
5024
|
+
}
|
|
5025
|
+
}
|
|
5026
|
+
}
|
|
5027
|
+
}
|
|
5028
|
+
}
|
|
5029
|
+
}
|
|
5030
|
+
}
|
|
5031
|
+
affectedSubscribers_1.forEach(function (requery) { return requery(); });
|
|
5032
|
+
}
|
|
5033
|
+
}; };
|
|
5034
|
+
idbtrans.addEventListener('abort', endTransaction(false), {
|
|
5035
|
+
signal: signal,
|
|
5036
|
+
});
|
|
5037
|
+
idbtrans.addEventListener('error', endTransaction(false), {
|
|
5038
|
+
signal: signal,
|
|
5039
|
+
});
|
|
5040
|
+
idbtrans.addEventListener('complete', endTransaction(true), {
|
|
5041
|
+
signal: signal,
|
|
5042
|
+
});
|
|
5043
|
+
}
|
|
5044
|
+
return idbtrans;
|
|
5045
|
+
}, table: function (tableName) {
|
|
5046
|
+
var downTable = core.table(tableName);
|
|
5047
|
+
var primKey = downTable.schema.primaryKey;
|
|
5048
|
+
var tableMW = __assign(__assign({}, downTable), { mutate: function (req) {
|
|
5049
|
+
if (primKey.outbound ||
|
|
5050
|
+
PSD.trans.db._options.cache === 'disabled'
|
|
5051
|
+
) {
|
|
5052
|
+
return downTable.mutate(req);
|
|
5053
|
+
}
|
|
5054
|
+
var tblCache = cache["idb://".concat(dbName, "/").concat(tableName)];
|
|
5055
|
+
if (!tblCache)
|
|
5056
|
+
return downTable.mutate(req);
|
|
5057
|
+
var promise = downTable.mutate(req);
|
|
5058
|
+
if ((req.type === 'add' || req.type === 'put') && (req.values.length >= 50 || getEffectiveKeys(primKey, req).some(function (key) { return key == null; }))) {
|
|
5059
|
+
promise.then(function (res) {
|
|
5060
|
+
var reqWithResolvedKeys = __assign(__assign({}, req), { values: req.values.map(function (value, i) {
|
|
5061
|
+
var valueWithKey = primKey.keyPath.includes('.')
|
|
5062
|
+
? deepClone(value)
|
|
5063
|
+
: __assign({}, value);
|
|
5064
|
+
setByKeyPath(valueWithKey, primKey.keyPath, res.results[i]);
|
|
5065
|
+
return valueWithKey;
|
|
5066
|
+
}) });
|
|
5067
|
+
var adjustedReq = adjustOptimisticFromFailures(tblCache, reqWithResolvedKeys, res);
|
|
5068
|
+
tblCache.optimisticOps.push(adjustedReq);
|
|
5069
|
+
queueMicrotask(function () { return signalSubscribersLazily(req.mutatedParts); });
|
|
5070
|
+
});
|
|
5071
|
+
}
|
|
5072
|
+
else {
|
|
5073
|
+
tblCache.optimisticOps.push(req);
|
|
5074
|
+
signalSubscribersLazily(req.mutatedParts);
|
|
5075
|
+
promise.then(function (res) {
|
|
5076
|
+
if (res.numFailures > 0) {
|
|
5077
|
+
delArrayItem(tblCache.optimisticOps, req);
|
|
5078
|
+
var adjustedReq = adjustOptimisticFromFailures(tblCache, req, res);
|
|
5079
|
+
if (adjustedReq) {
|
|
5080
|
+
tblCache.optimisticOps.push(adjustedReq);
|
|
5081
|
+
}
|
|
5082
|
+
signalSubscribersLazily(req.mutatedParts);
|
|
5083
|
+
}
|
|
5084
|
+
});
|
|
5085
|
+
promise.catch(function () {
|
|
5086
|
+
delArrayItem(tblCache.optimisticOps, req);
|
|
5087
|
+
signalSubscribersLazily(req.mutatedParts);
|
|
5088
|
+
});
|
|
5089
|
+
}
|
|
5090
|
+
return promise;
|
|
5091
|
+
}, query: function (req) {
|
|
5092
|
+
if (!isCachableContext(PSD, downTable) || !isCachableRequest("query", req))
|
|
5093
|
+
return downTable.query(req);
|
|
5094
|
+
var freezeResults = PSD.trans.db._options.cache === 'immutable';
|
|
5095
|
+
var _a = PSD, requery = _a.requery, signal = _a.signal;
|
|
5096
|
+
var _b = findCompatibleQuery(dbName, tableName, 'query', req), cacheEntry = _b[0], exactMatch = _b[1], tblCache = _b[2], container = _b[3];
|
|
5097
|
+
if (cacheEntry && exactMatch) {
|
|
5098
|
+
cacheEntry.obsSet = req.obsSet;
|
|
5099
|
+
}
|
|
5100
|
+
else {
|
|
5101
|
+
var promise = downTable.query(req).then(function (res) {
|
|
5102
|
+
var result = res.result;
|
|
5103
|
+
cacheEntry.res = result;
|
|
5104
|
+
if (freezeResults) {
|
|
5105
|
+
for (var i = 0, l = result.length; i < l; ++i) {
|
|
5106
|
+
Object.freeze(result[i]);
|
|
5107
|
+
}
|
|
5108
|
+
Object.freeze(result);
|
|
5109
|
+
}
|
|
5110
|
+
else {
|
|
5111
|
+
res.result = deepClone(result);
|
|
5112
|
+
}
|
|
5113
|
+
return res;
|
|
5114
|
+
}).catch(function (error) {
|
|
5115
|
+
if (container && cacheEntry)
|
|
5116
|
+
delArrayItem(container, cacheEntry);
|
|
5117
|
+
return Promise.reject(error);
|
|
5118
|
+
});
|
|
5119
|
+
cacheEntry = {
|
|
5120
|
+
obsSet: req.obsSet,
|
|
5121
|
+
promise: promise,
|
|
5122
|
+
subscribers: new Set(),
|
|
5123
|
+
type: 'query',
|
|
5124
|
+
req: req,
|
|
5125
|
+
dirty: false,
|
|
5126
|
+
};
|
|
5127
|
+
if (container) {
|
|
5128
|
+
container.push(cacheEntry);
|
|
5129
|
+
}
|
|
5130
|
+
else {
|
|
5131
|
+
container = [cacheEntry];
|
|
5132
|
+
if (!tblCache) {
|
|
5133
|
+
tblCache = cache["idb://".concat(dbName, "/").concat(tableName)] = {
|
|
5134
|
+
queries: {
|
|
5135
|
+
query: {},
|
|
5136
|
+
count: {},
|
|
5137
|
+
},
|
|
5138
|
+
objs: new Map(),
|
|
5139
|
+
optimisticOps: [],
|
|
5140
|
+
unsignaledParts: {}
|
|
5141
|
+
};
|
|
5142
|
+
}
|
|
5143
|
+
tblCache.queries.query[req.query.index.name || ''] = container;
|
|
5144
|
+
}
|
|
5145
|
+
}
|
|
5146
|
+
subscribeToCacheEntry(cacheEntry, container, requery, signal);
|
|
5147
|
+
return cacheEntry.promise.then(function (res) {
|
|
5148
|
+
return {
|
|
5149
|
+
result: applyOptimisticOps(res.result, req, tblCache === null || tblCache === void 0 ? void 0 : tblCache.optimisticOps, downTable, cacheEntry, freezeResults),
|
|
5150
|
+
};
|
|
5151
|
+
});
|
|
5152
|
+
} });
|
|
5153
|
+
return tableMW;
|
|
5154
|
+
} });
|
|
5155
|
+
return coreMW;
|
|
5156
|
+
},
|
|
5157
|
+
};
|
|
5158
|
+
|
|
5159
|
+
function vipify(target, vipDb) {
|
|
5160
|
+
return new Proxy(target, {
|
|
5161
|
+
get: function (target, prop, receiver) {
|
|
5162
|
+
if (prop === 'db')
|
|
5163
|
+
return vipDb;
|
|
5164
|
+
return Reflect.get(target, prop, receiver);
|
|
5165
|
+
}
|
|
5166
|
+
});
|
|
5167
|
+
}
|
|
5168
|
+
|
|
4672
5169
|
var Dexie$1 = (function () {
|
|
4673
5170
|
function Dexie(name, options) {
|
|
4674
5171
|
var _this = this;
|
|
@@ -4677,7 +5174,7 @@
|
|
|
4677
5174
|
var deps = Dexie.dependencies;
|
|
4678
5175
|
this._options = options = __assign({
|
|
4679
5176
|
addons: Dexie.addons, autoOpen: true,
|
|
4680
|
-
indexedDB: deps.indexedDB, IDBKeyRange: deps.IDBKeyRange }, options);
|
|
5177
|
+
indexedDB: deps.indexedDB, IDBKeyRange: deps.IDBKeyRange, cache: 'cloned' }, options);
|
|
4681
5178
|
this._deps = {
|
|
4682
5179
|
indexedDB: options.indexedDB,
|
|
4683
5180
|
IDBKeyRange: options.IDBKeyRange
|
|
@@ -4747,7 +5244,8 @@
|
|
|
4747
5244
|
console.warn("Another connection wants to upgrade database '".concat(_this.name, "'. Closing db now to resume the upgrade."));
|
|
4748
5245
|
else
|
|
4749
5246
|
console.warn("Another connection wants to delete database '".concat(_this.name, "'. Closing db now to resume the delete request."));
|
|
4750
|
-
_this.close();
|
|
5247
|
+
_this.close({ disableAutoOpen: false });
|
|
5248
|
+
_this._state.openComplete = false;
|
|
4751
5249
|
});
|
|
4752
5250
|
this.on("blocked", function (ev) {
|
|
4753
5251
|
if (!ev.newVersion || ev.newVersion < ev.oldVersion)
|
|
@@ -4763,11 +5261,31 @@
|
|
|
4763
5261
|
.filter(function (c) { return c.name === _this.name && c !== _this && !c._state.vcFired; })
|
|
4764
5262
|
.map(function (c) { return c.on("versionchange").fire(ev); });
|
|
4765
5263
|
};
|
|
5264
|
+
this.use(cacheExistingValuesMiddleware);
|
|
5265
|
+
this.use(cacheMiddleware);
|
|
5266
|
+
this.use(observabilityMiddleware);
|
|
4766
5267
|
this.use(virtualIndexMiddleware);
|
|
4767
5268
|
this.use(hooksMiddleware);
|
|
4768
|
-
this
|
|
4769
|
-
|
|
4770
|
-
|
|
5269
|
+
var vipDB = new Proxy(this, {
|
|
5270
|
+
get: function (_, prop, receiver) {
|
|
5271
|
+
if (prop === '_vip')
|
|
5272
|
+
return true;
|
|
5273
|
+
if (prop === 'table')
|
|
5274
|
+
return function (tableName) { return vipify(_this.table(tableName), vipDB); };
|
|
5275
|
+
var rv = Reflect.get(_, prop, receiver);
|
|
5276
|
+
if (rv instanceof Table)
|
|
5277
|
+
return vipify(rv, vipDB);
|
|
5278
|
+
if (prop === 'tables')
|
|
5279
|
+
return rv.map(function (t) { return vipify(t, vipDB); });
|
|
5280
|
+
if (prop === '_createTransaction')
|
|
5281
|
+
return function () {
|
|
5282
|
+
var tx = rv.apply(this, arguments);
|
|
5283
|
+
return vipify(tx, vipDB);
|
|
5284
|
+
};
|
|
5285
|
+
return rv;
|
|
5286
|
+
}
|
|
5287
|
+
});
|
|
5288
|
+
this.vip = vipDB;
|
|
4771
5289
|
addons.forEach(function (addon) { return addon(_this); });
|
|
4772
5290
|
}
|
|
4773
5291
|
Dexie.prototype.version = function (versionNumber) {
|
|
@@ -4825,7 +5343,9 @@
|
|
|
4825
5343
|
return this;
|
|
4826
5344
|
};
|
|
4827
5345
|
Dexie.prototype.open = function () {
|
|
4828
|
-
|
|
5346
|
+
var _this = this;
|
|
5347
|
+
return usePSD(globalPSD,
|
|
5348
|
+
function () { return dexieOpen(_this); });
|
|
4829
5349
|
};
|
|
4830
5350
|
Dexie.prototype._close = function () {
|
|
4831
5351
|
var state = this._state;
|
|
@@ -4837,7 +5357,7 @@
|
|
|
4837
5357
|
this.idbdb.close();
|
|
4838
5358
|
}
|
|
4839
5359
|
catch (e) { }
|
|
4840
|
-
this.
|
|
5360
|
+
this.idbdb = null;
|
|
4841
5361
|
}
|
|
4842
5362
|
state.dbReadyPromise = new DexiePromise(function (resolve) {
|
|
4843
5363
|
state.dbReadyResolve = resolve;
|
|
@@ -4846,10 +5366,12 @@
|
|
|
4846
5366
|
state.cancelOpen = reject;
|
|
4847
5367
|
});
|
|
4848
5368
|
};
|
|
4849
|
-
Dexie.prototype.close = function () {
|
|
5369
|
+
Dexie.prototype.close = function (_a) {
|
|
5370
|
+
var _b = _a === void 0 ? { disableAutoOpen: true } : _a, disableAutoOpen = _b.disableAutoOpen;
|
|
4850
5371
|
this._close();
|
|
4851
5372
|
var state = this._state;
|
|
4852
|
-
|
|
5373
|
+
if (disableAutoOpen)
|
|
5374
|
+
this._options.autoOpen = false;
|
|
4853
5375
|
state.dbOpenError = new exceptions.DatabaseClosed();
|
|
4854
5376
|
if (state.isBeingOpened)
|
|
4855
5377
|
state.cancelOpen(state.dbOpenError);
|
|
@@ -4860,7 +5382,7 @@
|
|
|
4860
5382
|
var state = this._state;
|
|
4861
5383
|
return new DexiePromise(function (resolve, reject) {
|
|
4862
5384
|
var doDelete = function () {
|
|
4863
|
-
_this.close();
|
|
5385
|
+
_this.close({ disableAutoOpen: false });
|
|
4864
5386
|
var req = _this._deps.indexedDB.deleteDatabase(_this.name);
|
|
4865
5387
|
req.onsuccess = wrap(function () {
|
|
4866
5388
|
_onDatabaseDeleted(_this._deps, _this.name);
|
|
@@ -4990,32 +5512,45 @@
|
|
|
4990
5512
|
return Observable;
|
|
4991
5513
|
}());
|
|
4992
5514
|
|
|
4993
|
-
|
|
4994
|
-
|
|
4995
|
-
|
|
4996
|
-
|
|
4997
|
-
|
|
4998
|
-
|
|
5515
|
+
var domDeps;
|
|
5516
|
+
try {
|
|
5517
|
+
domDeps = {
|
|
5518
|
+
indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB,
|
|
5519
|
+
IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange
|
|
5520
|
+
};
|
|
5521
|
+
}
|
|
5522
|
+
catch (e) {
|
|
5523
|
+
domDeps = { indexedDB: null, IDBKeyRange: null };
|
|
4999
5524
|
}
|
|
5000
5525
|
|
|
5001
5526
|
function liveQuery(querier) {
|
|
5002
|
-
|
|
5527
|
+
var hasValue = false;
|
|
5528
|
+
var currentValue;
|
|
5529
|
+
var observable = new Observable(function (observer) {
|
|
5003
5530
|
var scopeFuncIsAsync = isAsyncFunction(querier);
|
|
5004
|
-
function execute(
|
|
5005
|
-
|
|
5006
|
-
|
|
5531
|
+
function execute(ctx) {
|
|
5532
|
+
var wasRootExec = beginMicroTickScope();
|
|
5533
|
+
try {
|
|
5534
|
+
if (scopeFuncIsAsync) {
|
|
5535
|
+
incrementExpectedAwaits();
|
|
5536
|
+
}
|
|
5537
|
+
var rv = newScope(querier, ctx);
|
|
5538
|
+
if (scopeFuncIsAsync) {
|
|
5539
|
+
rv = rv.finally(decrementExpectedAwaits);
|
|
5540
|
+
}
|
|
5541
|
+
return Promise.resolve(rv).finally(function () {
|
|
5542
|
+
if (PSD.subscr === ctx.subscr) {
|
|
5543
|
+
console.warn("Dexie liveQuery()'s querier callback did'nt await all of its spawned promises. Querier source: ".concat(querier));
|
|
5544
|
+
return new NativePromise(function (resolve) { return setTimeout(resolve, 0); });
|
|
5545
|
+
}
|
|
5546
|
+
});
|
|
5007
5547
|
}
|
|
5008
|
-
|
|
5009
|
-
|
|
5010
|
-
?
|
|
5011
|
-
usePSD(PSD.transless, exec)
|
|
5012
|
-
: exec();
|
|
5013
|
-
if (scopeFuncIsAsync) {
|
|
5014
|
-
rv.then(decrementExpectedAwaits, decrementExpectedAwaits);
|
|
5548
|
+
finally {
|
|
5549
|
+
wasRootExec && endMicroTickScope();
|
|
5015
5550
|
}
|
|
5016
|
-
return rv;
|
|
5017
5551
|
}
|
|
5018
5552
|
var closed = false;
|
|
5553
|
+
var abortController;
|
|
5019
5554
|
var accumMuts = {};
|
|
5020
5555
|
var currentObs = {};
|
|
5021
5556
|
var subscription = {
|
|
@@ -5023,16 +5558,19 @@
|
|
|
5023
5558
|
return closed;
|
|
5024
5559
|
},
|
|
5025
5560
|
unsubscribe: function () {
|
|
5561
|
+
if (closed)
|
|
5562
|
+
return;
|
|
5026
5563
|
closed = true;
|
|
5027
|
-
|
|
5564
|
+
if (abortController)
|
|
5565
|
+
abortController.abort();
|
|
5566
|
+
if (startedListening)
|
|
5567
|
+
globalEvents.storagemutated.unsubscribe(mutationListener);
|
|
5028
5568
|
},
|
|
5029
5569
|
};
|
|
5030
5570
|
observer.start && observer.start(subscription);
|
|
5031
|
-
var
|
|
5571
|
+
var startedListening = false;
|
|
5032
5572
|
function shouldNotify() {
|
|
5033
|
-
return
|
|
5034
|
-
return accumMuts[key] && rangesOverlap(accumMuts[key], currentObs[key]);
|
|
5035
|
-
});
|
|
5573
|
+
return obsSetsOverlap(currentObs, accumMuts);
|
|
5036
5574
|
}
|
|
5037
5575
|
var mutationListener = function (parts) {
|
|
5038
5576
|
extendObservabilitySet(accumMuts, parts);
|
|
@@ -5041,52 +5579,52 @@
|
|
|
5041
5579
|
}
|
|
5042
5580
|
};
|
|
5043
5581
|
var doQuery = function () {
|
|
5044
|
-
if (
|
|
5582
|
+
if (closed ||
|
|
5583
|
+
!domDeps.indexedDB)
|
|
5584
|
+
{
|
|
5045
5585
|
return;
|
|
5046
5586
|
}
|
|
5047
5587
|
accumMuts = {};
|
|
5048
5588
|
var subscr = {};
|
|
5049
|
-
|
|
5050
|
-
|
|
5051
|
-
|
|
5052
|
-
|
|
5053
|
-
|
|
5054
|
-
|
|
5589
|
+
if (abortController)
|
|
5590
|
+
abortController.abort();
|
|
5591
|
+
abortController = new AbortController();
|
|
5592
|
+
var ctx = {
|
|
5593
|
+
subscr: subscr,
|
|
5594
|
+
signal: abortController.signal,
|
|
5595
|
+
requery: doQuery,
|
|
5596
|
+
querier: querier,
|
|
5597
|
+
trans: null
|
|
5598
|
+
};
|
|
5599
|
+
var ret = execute(ctx);
|
|
5055
5600
|
Promise.resolve(ret).then(function (result) {
|
|
5056
|
-
|
|
5057
|
-
|
|
5601
|
+
hasValue = true;
|
|
5602
|
+
currentValue = result;
|
|
5603
|
+
if (closed || ctx.signal.aborted) {
|
|
5058
5604
|
return;
|
|
5059
5605
|
}
|
|
5060
|
-
|
|
5061
|
-
|
|
5062
|
-
|
|
5063
|
-
|
|
5064
|
-
|
|
5065
|
-
currentObs = subscr;
|
|
5066
|
-
observer.next && observer.next(result);
|
|
5606
|
+
accumMuts = {};
|
|
5607
|
+
currentObs = subscr;
|
|
5608
|
+
if (!objectIsEmpty(currentObs) && !startedListening) {
|
|
5609
|
+
globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, mutationListener);
|
|
5610
|
+
startedListening = true;
|
|
5067
5611
|
}
|
|
5612
|
+
observer.next && observer.next(result);
|
|
5068
5613
|
}, function (err) {
|
|
5614
|
+
hasValue = false;
|
|
5069
5615
|
if (!['DatabaseClosedError', 'AbortError'].includes(err === null || err === void 0 ? void 0 : err.name)) {
|
|
5070
|
-
|
|
5616
|
+
if (closed)
|
|
5617
|
+
return;
|
|
5071
5618
|
observer.error && observer.error(err);
|
|
5072
|
-
subscription.unsubscribe();
|
|
5073
5619
|
}
|
|
5074
5620
|
});
|
|
5075
5621
|
};
|
|
5076
5622
|
doQuery();
|
|
5077
5623
|
return subscription;
|
|
5078
5624
|
});
|
|
5079
|
-
|
|
5080
|
-
|
|
5081
|
-
|
|
5082
|
-
try {
|
|
5083
|
-
domDeps = {
|
|
5084
|
-
indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB,
|
|
5085
|
-
IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange
|
|
5086
|
-
};
|
|
5087
|
-
}
|
|
5088
|
-
catch (e) {
|
|
5089
|
-
domDeps = { indexedDB: null, IDBKeyRange: null };
|
|
5625
|
+
observable.hasValue = function () { return hasValue; };
|
|
5626
|
+
observable.getValue = function () { return currentValue; };
|
|
5627
|
+
return observable;
|
|
5090
5628
|
}
|
|
5091
5629
|
|
|
5092
5630
|
var Dexie = Dexie$1;
|
|
@@ -5166,7 +5704,7 @@
|
|
|
5166
5704
|
addons: [],
|
|
5167
5705
|
connections: connections,
|
|
5168
5706
|
errnames: errnames,
|
|
5169
|
-
dependencies: domDeps,
|
|
5707
|
+
dependencies: domDeps, cache: cache,
|
|
5170
5708
|
semVer: DEXIE_VERSION, version: DEXIE_VERSION.split('.')
|
|
5171
5709
|
.map(function (n) { return parseInt(n); })
|
|
5172
5710
|
.reduce(function (p, c, i) { return p + (c / Math.pow(10, i * 2)); }) }));
|
|
@@ -5202,6 +5740,7 @@
|
|
|
5202
5740
|
try {
|
|
5203
5741
|
propagatingLocally = true;
|
|
5204
5742
|
globalEvents.storagemutated.fire(updateParts);
|
|
5743
|
+
signalSubscribersNow(updateParts, true);
|
|
5205
5744
|
}
|
|
5206
5745
|
finally {
|
|
5207
5746
|
propagatingLocally = wasMe;
|