dexie 4.0.1-alpha.21 → 4.0.1-alpha.23
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/dist/dexie.d.ts +4 -2
- package/dist/dexie.js +266 -249
- 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 +266 -249
- 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 +256 -240
- package/dist/modern/dexie.mjs.map +1 -1
- package/package.json +6 -2
- package/dist/README.md +0 -46
package/dist/dexie.mjs
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* By David Fahlander, david.fahlander@gmail.com
|
|
6
6
|
*
|
|
7
|
-
* Version 4.0.1-alpha.
|
|
7
|
+
* Version 4.0.1-alpha.23, Tue Jul 04 2023
|
|
8
8
|
*
|
|
9
9
|
* https://dexie.org
|
|
10
10
|
*
|
|
@@ -1278,7 +1278,7 @@ function tempTransaction(db, mode, storeNames, fn) {
|
|
|
1278
1278
|
}
|
|
1279
1279
|
}
|
|
1280
1280
|
|
|
1281
|
-
var DEXIE_VERSION = '4.0.1-alpha.
|
|
1281
|
+
var DEXIE_VERSION = '4.0.1-alpha.23';
|
|
1282
1282
|
var maxString = String.fromCharCode(65535);
|
|
1283
1283
|
var minKey = -Infinity;
|
|
1284
1284
|
var INVALID_KEY_ARGUMENT = "Invalid key provided. Keys must be of type string, number, Date or Array<string | number | Date>.";
|
|
@@ -3781,6 +3781,237 @@ function idbReady() {
|
|
|
3781
3781
|
}).finally(function () { return clearInterval(intervalId); });
|
|
3782
3782
|
}
|
|
3783
3783
|
|
|
3784
|
+
var _a;
|
|
3785
|
+
function isEmptyRange(node) {
|
|
3786
|
+
return !("from" in node);
|
|
3787
|
+
}
|
|
3788
|
+
var RangeSet = function (fromOrTree, to) {
|
|
3789
|
+
if (this) {
|
|
3790
|
+
extend(this, arguments.length ? { d: 1, from: fromOrTree, to: arguments.length > 1 ? to : fromOrTree } : { d: 0 });
|
|
3791
|
+
}
|
|
3792
|
+
else {
|
|
3793
|
+
var rv = new RangeSet();
|
|
3794
|
+
if (fromOrTree && ("d" in fromOrTree)) {
|
|
3795
|
+
extend(rv, fromOrTree);
|
|
3796
|
+
}
|
|
3797
|
+
return rv;
|
|
3798
|
+
}
|
|
3799
|
+
};
|
|
3800
|
+
props(RangeSet.prototype, (_a = {
|
|
3801
|
+
add: function (rangeSet) {
|
|
3802
|
+
mergeRanges(this, rangeSet);
|
|
3803
|
+
return this;
|
|
3804
|
+
},
|
|
3805
|
+
addKey: function (key) {
|
|
3806
|
+
addRange(this, key, key);
|
|
3807
|
+
return this;
|
|
3808
|
+
},
|
|
3809
|
+
addKeys: function (keys) {
|
|
3810
|
+
var _this = this;
|
|
3811
|
+
keys.forEach(function (key) { return addRange(_this, key, key); });
|
|
3812
|
+
return this;
|
|
3813
|
+
}
|
|
3814
|
+
},
|
|
3815
|
+
_a[iteratorSymbol] = function () {
|
|
3816
|
+
return getRangeSetIterator(this);
|
|
3817
|
+
},
|
|
3818
|
+
_a));
|
|
3819
|
+
function addRange(target, from, to) {
|
|
3820
|
+
var diff = cmp(from, to);
|
|
3821
|
+
if (isNaN(diff))
|
|
3822
|
+
return;
|
|
3823
|
+
if (diff > 0)
|
|
3824
|
+
throw RangeError();
|
|
3825
|
+
if (isEmptyRange(target))
|
|
3826
|
+
return extend(target, { from: from, to: to, d: 1 });
|
|
3827
|
+
var left = target.l;
|
|
3828
|
+
var right = target.r;
|
|
3829
|
+
if (cmp(to, target.from) < 0) {
|
|
3830
|
+
left
|
|
3831
|
+
? addRange(left, from, to)
|
|
3832
|
+
: (target.l = { from: from, to: to, d: 1, l: null, r: null });
|
|
3833
|
+
return rebalance(target);
|
|
3834
|
+
}
|
|
3835
|
+
if (cmp(from, target.to) > 0) {
|
|
3836
|
+
right
|
|
3837
|
+
? addRange(right, from, to)
|
|
3838
|
+
: (target.r = { from: from, to: to, d: 1, l: null, r: null });
|
|
3839
|
+
return rebalance(target);
|
|
3840
|
+
}
|
|
3841
|
+
if (cmp(from, target.from) < 0) {
|
|
3842
|
+
target.from = from;
|
|
3843
|
+
target.l = null;
|
|
3844
|
+
target.d = right ? right.d + 1 : 1;
|
|
3845
|
+
}
|
|
3846
|
+
if (cmp(to, target.to) > 0) {
|
|
3847
|
+
target.to = to;
|
|
3848
|
+
target.r = null;
|
|
3849
|
+
target.d = target.l ? target.l.d + 1 : 1;
|
|
3850
|
+
}
|
|
3851
|
+
var rightWasCutOff = !target.r;
|
|
3852
|
+
if (left && !target.l) {
|
|
3853
|
+
mergeRanges(target, left);
|
|
3854
|
+
}
|
|
3855
|
+
if (right && rightWasCutOff) {
|
|
3856
|
+
mergeRanges(target, right);
|
|
3857
|
+
}
|
|
3858
|
+
}
|
|
3859
|
+
function mergeRanges(target, newSet) {
|
|
3860
|
+
function _addRangeSet(target, _a) {
|
|
3861
|
+
var from = _a.from, to = _a.to, l = _a.l, r = _a.r;
|
|
3862
|
+
addRange(target, from, to);
|
|
3863
|
+
if (l)
|
|
3864
|
+
_addRangeSet(target, l);
|
|
3865
|
+
if (r)
|
|
3866
|
+
_addRangeSet(target, r);
|
|
3867
|
+
}
|
|
3868
|
+
if (!isEmptyRange(newSet))
|
|
3869
|
+
_addRangeSet(target, newSet);
|
|
3870
|
+
}
|
|
3871
|
+
function rangesOverlap(rangeSet1, rangeSet2) {
|
|
3872
|
+
var i1 = getRangeSetIterator(rangeSet2);
|
|
3873
|
+
var nextResult1 = i1.next();
|
|
3874
|
+
if (nextResult1.done)
|
|
3875
|
+
return false;
|
|
3876
|
+
var a = nextResult1.value;
|
|
3877
|
+
var i2 = getRangeSetIterator(rangeSet1);
|
|
3878
|
+
var nextResult2 = i2.next(a.from);
|
|
3879
|
+
var b = nextResult2.value;
|
|
3880
|
+
while (!nextResult1.done && !nextResult2.done) {
|
|
3881
|
+
if (cmp(b.from, a.to) <= 0 && cmp(b.to, a.from) >= 0)
|
|
3882
|
+
return true;
|
|
3883
|
+
cmp(a.from, b.from) < 0
|
|
3884
|
+
? (a = (nextResult1 = i1.next(b.from)).value)
|
|
3885
|
+
: (b = (nextResult2 = i2.next(a.from)).value);
|
|
3886
|
+
}
|
|
3887
|
+
return false;
|
|
3888
|
+
}
|
|
3889
|
+
function getRangeSetIterator(node) {
|
|
3890
|
+
var state = isEmptyRange(node) ? null : { s: 0, n: node };
|
|
3891
|
+
return {
|
|
3892
|
+
next: function (key) {
|
|
3893
|
+
var keyProvided = arguments.length > 0;
|
|
3894
|
+
while (state) {
|
|
3895
|
+
switch (state.s) {
|
|
3896
|
+
case 0:
|
|
3897
|
+
state.s = 1;
|
|
3898
|
+
if (keyProvided) {
|
|
3899
|
+
while (state.n.l && cmp(key, state.n.from) < 0)
|
|
3900
|
+
state = { up: state, n: state.n.l, s: 1 };
|
|
3901
|
+
}
|
|
3902
|
+
else {
|
|
3903
|
+
while (state.n.l)
|
|
3904
|
+
state = { up: state, n: state.n.l, s: 1 };
|
|
3905
|
+
}
|
|
3906
|
+
case 1:
|
|
3907
|
+
state.s = 2;
|
|
3908
|
+
if (!keyProvided || cmp(key, state.n.to) <= 0)
|
|
3909
|
+
return { value: state.n, done: false };
|
|
3910
|
+
case 2:
|
|
3911
|
+
if (state.n.r) {
|
|
3912
|
+
state.s = 3;
|
|
3913
|
+
state = { up: state, n: state.n.r, s: 0 };
|
|
3914
|
+
continue;
|
|
3915
|
+
}
|
|
3916
|
+
case 3:
|
|
3917
|
+
state = state.up;
|
|
3918
|
+
}
|
|
3919
|
+
}
|
|
3920
|
+
return { done: true };
|
|
3921
|
+
},
|
|
3922
|
+
};
|
|
3923
|
+
}
|
|
3924
|
+
function rebalance(target) {
|
|
3925
|
+
var _a, _b;
|
|
3926
|
+
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);
|
|
3927
|
+
var r = diff > 1 ? "r" : diff < -1 ? "l" : "";
|
|
3928
|
+
if (r) {
|
|
3929
|
+
var l = r === "r" ? "l" : "r";
|
|
3930
|
+
var rootClone = __assign({}, target);
|
|
3931
|
+
var oldRootRight = target[r];
|
|
3932
|
+
target.from = oldRootRight.from;
|
|
3933
|
+
target.to = oldRootRight.to;
|
|
3934
|
+
target[r] = oldRootRight[r];
|
|
3935
|
+
rootClone[r] = oldRootRight[l];
|
|
3936
|
+
target[l] = rootClone;
|
|
3937
|
+
rootClone.d = computeDepth(rootClone);
|
|
3938
|
+
}
|
|
3939
|
+
target.d = computeDepth(target);
|
|
3940
|
+
}
|
|
3941
|
+
function computeDepth(_a) {
|
|
3942
|
+
var r = _a.r, l = _a.l;
|
|
3943
|
+
return (r ? (l ? Math.max(r.d, l.d) : r.d) : l ? l.d : 0) + 1;
|
|
3944
|
+
}
|
|
3945
|
+
|
|
3946
|
+
function extendObservabilitySet(target, newSet) {
|
|
3947
|
+
keys(newSet).forEach(function (part) {
|
|
3948
|
+
if (target[part])
|
|
3949
|
+
mergeRanges(target[part], newSet[part]);
|
|
3950
|
+
else
|
|
3951
|
+
target[part] = cloneSimpleObjectTree(newSet[part]);
|
|
3952
|
+
});
|
|
3953
|
+
return target;
|
|
3954
|
+
}
|
|
3955
|
+
|
|
3956
|
+
function obsSetsOverlap(os1, os2) {
|
|
3957
|
+
return Object.keys(os1).some(function (key) { return os2[key] && rangesOverlap(os2[key], os1[key]); });
|
|
3958
|
+
}
|
|
3959
|
+
|
|
3960
|
+
var cache = {};
|
|
3961
|
+
|
|
3962
|
+
var unsignaledParts = {};
|
|
3963
|
+
var isTaskEnqueued = false;
|
|
3964
|
+
function signalSubscribersLazily(part) {
|
|
3965
|
+
extendObservabilitySet(unsignaledParts, part);
|
|
3966
|
+
if (!isTaskEnqueued) {
|
|
3967
|
+
isTaskEnqueued = true;
|
|
3968
|
+
queueMicrotask(function () {
|
|
3969
|
+
isTaskEnqueued = false;
|
|
3970
|
+
var parts = unsignaledParts;
|
|
3971
|
+
unsignaledParts = {};
|
|
3972
|
+
signalSubscribersNow(parts);
|
|
3973
|
+
});
|
|
3974
|
+
}
|
|
3975
|
+
}
|
|
3976
|
+
function signalSubscribersNow(updatedParts, deleteAffectedCacheEntries) {
|
|
3977
|
+
if (deleteAffectedCacheEntries === void 0) { deleteAffectedCacheEntries = false; }
|
|
3978
|
+
var queriesToSignal = new Set();
|
|
3979
|
+
for (var key in updatedParts) {
|
|
3980
|
+
var parts = /^idb\:\/\/(.*)\/(.*)\//.exec(key);
|
|
3981
|
+
if (parts) {
|
|
3982
|
+
var dbName = parts[1], tableName = parts[2];
|
|
3983
|
+
var tblCache = cache["idb://".concat(dbName, "/").concat(tableName)];
|
|
3984
|
+
if (tblCache)
|
|
3985
|
+
signalTableSubscribersNow(tblCache, updatedParts, queriesToSignal, deleteAffectedCacheEntries);
|
|
3986
|
+
}
|
|
3987
|
+
}
|
|
3988
|
+
queriesToSignal.forEach(function (requery) { return requery(); });
|
|
3989
|
+
}
|
|
3990
|
+
function signalTableSubscribersNow(tblCache, updatedParts, outQueriesToSignal, deleteAffectedCacheEntries) {
|
|
3991
|
+
var updatedEntryLists = deleteAffectedCacheEntries && [];
|
|
3992
|
+
for (var _i = 0, _a = Object.entries(tblCache.queries.query); _i < _a.length; _i++) {
|
|
3993
|
+
var _b = _a[_i], indexName = _b[0], entries = _b[1];
|
|
3994
|
+
var filteredEntries = deleteAffectedCacheEntries && [];
|
|
3995
|
+
for (var _c = 0, entries_1 = entries; _c < entries_1.length; _c++) {
|
|
3996
|
+
var entry = entries_1[_c];
|
|
3997
|
+
if (entry.obsSet && obsSetsOverlap(updatedParts, entry.obsSet)) {
|
|
3998
|
+
entry.subscribers.forEach(function (requery) { return outQueriesToSignal.add(requery); });
|
|
3999
|
+
}
|
|
4000
|
+
else if (deleteAffectedCacheEntries) {
|
|
4001
|
+
filteredEntries.push(entry);
|
|
4002
|
+
}
|
|
4003
|
+
}
|
|
4004
|
+
if (deleteAffectedCacheEntries)
|
|
4005
|
+
updatedEntryLists.push([indexName, filteredEntries]);
|
|
4006
|
+
}
|
|
4007
|
+
if (deleteAffectedCacheEntries) {
|
|
4008
|
+
for (var _d = 0, updatedEntryLists_1 = updatedEntryLists; _d < updatedEntryLists_1.length; _d++) {
|
|
4009
|
+
var _e = updatedEntryLists_1[_d], indexName = _e[0], filteredEntries = _e[1];
|
|
4010
|
+
tblCache.queries.query[indexName] = filteredEntries;
|
|
4011
|
+
}
|
|
4012
|
+
}
|
|
4013
|
+
}
|
|
4014
|
+
|
|
3784
4015
|
function dexieOpen(db) {
|
|
3785
4016
|
var state = db._state;
|
|
3786
4017
|
var indexedDB = db._deps.indexedDB;
|
|
@@ -3872,10 +4103,10 @@ function dexieOpen(db) {
|
|
|
3872
4103
|
}
|
|
3873
4104
|
});
|
|
3874
4105
|
}).finally(function () {
|
|
3875
|
-
state.
|
|
3876
|
-
|
|
3877
|
-
|
|
3878
|
-
|
|
4106
|
+
if (state.openCanceller === openCanceller) {
|
|
4107
|
+
state.onReadyBeingFired = null;
|
|
4108
|
+
state.isBeingOpened = false;
|
|
4109
|
+
}
|
|
3879
4110
|
}).catch(function (err) {
|
|
3880
4111
|
state.dbOpenError = err;
|
|
3881
4112
|
try {
|
|
@@ -3889,6 +4120,20 @@ function dexieOpen(db) {
|
|
|
3889
4120
|
}).finally(function () {
|
|
3890
4121
|
state.openComplete = true;
|
|
3891
4122
|
resolveDbReady();
|
|
4123
|
+
}).then(function () {
|
|
4124
|
+
if (wasCreated) {
|
|
4125
|
+
var everything_1 = {};
|
|
4126
|
+
db.tables.forEach(function (table) {
|
|
4127
|
+
table.schema.indexes.forEach(function (idx) {
|
|
4128
|
+
if (idx.name)
|
|
4129
|
+
everything_1["idb://".concat(db.name, "/").concat(table.name, "/").concat(idx.name)] = new RangeSet(-Infinity, [[[]]]);
|
|
4130
|
+
});
|
|
4131
|
+
everything_1["idb://".concat(db.name, "/").concat(table.name, "/")] = everything_1["idb://".concat(db.name, "/").concat(table.name, "/:dels")] = new RangeSet(-Infinity, [[[]]]);
|
|
4132
|
+
});
|
|
4133
|
+
globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME).fire(everything_1);
|
|
4134
|
+
signalSubscribersNow(everything_1, true);
|
|
4135
|
+
}
|
|
4136
|
+
return db;
|
|
3892
4137
|
});
|
|
3893
4138
|
}
|
|
3894
4139
|
|
|
@@ -4311,168 +4556,6 @@ var cacheExistingValuesMiddleware = {
|
|
|
4311
4556
|
},
|
|
4312
4557
|
};
|
|
4313
4558
|
|
|
4314
|
-
var _a;
|
|
4315
|
-
function isEmptyRange(node) {
|
|
4316
|
-
return !("from" in node);
|
|
4317
|
-
}
|
|
4318
|
-
var RangeSet = function (fromOrTree, to) {
|
|
4319
|
-
if (this) {
|
|
4320
|
-
extend(this, arguments.length ? { d: 1, from: fromOrTree, to: arguments.length > 1 ? to : fromOrTree } : { d: 0 });
|
|
4321
|
-
}
|
|
4322
|
-
else {
|
|
4323
|
-
var rv = new RangeSet();
|
|
4324
|
-
if (fromOrTree && ("d" in fromOrTree)) {
|
|
4325
|
-
extend(rv, fromOrTree);
|
|
4326
|
-
}
|
|
4327
|
-
return rv;
|
|
4328
|
-
}
|
|
4329
|
-
};
|
|
4330
|
-
props(RangeSet.prototype, (_a = {
|
|
4331
|
-
add: function (rangeSet) {
|
|
4332
|
-
mergeRanges(this, rangeSet);
|
|
4333
|
-
return this;
|
|
4334
|
-
},
|
|
4335
|
-
addKey: function (key) {
|
|
4336
|
-
addRange(this, key, key);
|
|
4337
|
-
return this;
|
|
4338
|
-
},
|
|
4339
|
-
addKeys: function (keys) {
|
|
4340
|
-
var _this = this;
|
|
4341
|
-
keys.forEach(function (key) { return addRange(_this, key, key); });
|
|
4342
|
-
return this;
|
|
4343
|
-
}
|
|
4344
|
-
},
|
|
4345
|
-
_a[iteratorSymbol] = function () {
|
|
4346
|
-
return getRangeSetIterator(this);
|
|
4347
|
-
},
|
|
4348
|
-
_a));
|
|
4349
|
-
function addRange(target, from, to) {
|
|
4350
|
-
var diff = cmp(from, to);
|
|
4351
|
-
if (isNaN(diff))
|
|
4352
|
-
return;
|
|
4353
|
-
if (diff > 0)
|
|
4354
|
-
throw RangeError();
|
|
4355
|
-
if (isEmptyRange(target))
|
|
4356
|
-
return extend(target, { from: from, to: to, d: 1 });
|
|
4357
|
-
var left = target.l;
|
|
4358
|
-
var right = target.r;
|
|
4359
|
-
if (cmp(to, target.from) < 0) {
|
|
4360
|
-
left
|
|
4361
|
-
? addRange(left, from, to)
|
|
4362
|
-
: (target.l = { from: from, to: to, d: 1, l: null, r: null });
|
|
4363
|
-
return rebalance(target);
|
|
4364
|
-
}
|
|
4365
|
-
if (cmp(from, target.to) > 0) {
|
|
4366
|
-
right
|
|
4367
|
-
? addRange(right, from, to)
|
|
4368
|
-
: (target.r = { from: from, to: to, d: 1, l: null, r: null });
|
|
4369
|
-
return rebalance(target);
|
|
4370
|
-
}
|
|
4371
|
-
if (cmp(from, target.from) < 0) {
|
|
4372
|
-
target.from = from;
|
|
4373
|
-
target.l = null;
|
|
4374
|
-
target.d = right ? right.d + 1 : 1;
|
|
4375
|
-
}
|
|
4376
|
-
if (cmp(to, target.to) > 0) {
|
|
4377
|
-
target.to = to;
|
|
4378
|
-
target.r = null;
|
|
4379
|
-
target.d = target.l ? target.l.d + 1 : 1;
|
|
4380
|
-
}
|
|
4381
|
-
var rightWasCutOff = !target.r;
|
|
4382
|
-
if (left && !target.l) {
|
|
4383
|
-
mergeRanges(target, left);
|
|
4384
|
-
}
|
|
4385
|
-
if (right && rightWasCutOff) {
|
|
4386
|
-
mergeRanges(target, right);
|
|
4387
|
-
}
|
|
4388
|
-
}
|
|
4389
|
-
function mergeRanges(target, newSet) {
|
|
4390
|
-
function _addRangeSet(target, _a) {
|
|
4391
|
-
var from = _a.from, to = _a.to, l = _a.l, r = _a.r;
|
|
4392
|
-
addRange(target, from, to);
|
|
4393
|
-
if (l)
|
|
4394
|
-
_addRangeSet(target, l);
|
|
4395
|
-
if (r)
|
|
4396
|
-
_addRangeSet(target, r);
|
|
4397
|
-
}
|
|
4398
|
-
if (!isEmptyRange(newSet))
|
|
4399
|
-
_addRangeSet(target, newSet);
|
|
4400
|
-
}
|
|
4401
|
-
function rangesOverlap(rangeSet1, rangeSet2) {
|
|
4402
|
-
var i1 = getRangeSetIterator(rangeSet2);
|
|
4403
|
-
var nextResult1 = i1.next();
|
|
4404
|
-
if (nextResult1.done)
|
|
4405
|
-
return false;
|
|
4406
|
-
var a = nextResult1.value;
|
|
4407
|
-
var i2 = getRangeSetIterator(rangeSet1);
|
|
4408
|
-
var nextResult2 = i2.next(a.from);
|
|
4409
|
-
var b = nextResult2.value;
|
|
4410
|
-
while (!nextResult1.done && !nextResult2.done) {
|
|
4411
|
-
if (cmp(b.from, a.to) <= 0 && cmp(b.to, a.from) >= 0)
|
|
4412
|
-
return true;
|
|
4413
|
-
cmp(a.from, b.from) < 0
|
|
4414
|
-
? (a = (nextResult1 = i1.next(b.from)).value)
|
|
4415
|
-
: (b = (nextResult2 = i2.next(a.from)).value);
|
|
4416
|
-
}
|
|
4417
|
-
return false;
|
|
4418
|
-
}
|
|
4419
|
-
function getRangeSetIterator(node) {
|
|
4420
|
-
var state = isEmptyRange(node) ? null : { s: 0, n: node };
|
|
4421
|
-
return {
|
|
4422
|
-
next: function (key) {
|
|
4423
|
-
var keyProvided = arguments.length > 0;
|
|
4424
|
-
while (state) {
|
|
4425
|
-
switch (state.s) {
|
|
4426
|
-
case 0:
|
|
4427
|
-
state.s = 1;
|
|
4428
|
-
if (keyProvided) {
|
|
4429
|
-
while (state.n.l && cmp(key, state.n.from) < 0)
|
|
4430
|
-
state = { up: state, n: state.n.l, s: 1 };
|
|
4431
|
-
}
|
|
4432
|
-
else {
|
|
4433
|
-
while (state.n.l)
|
|
4434
|
-
state = { up: state, n: state.n.l, s: 1 };
|
|
4435
|
-
}
|
|
4436
|
-
case 1:
|
|
4437
|
-
state.s = 2;
|
|
4438
|
-
if (!keyProvided || cmp(key, state.n.to) <= 0)
|
|
4439
|
-
return { value: state.n, done: false };
|
|
4440
|
-
case 2:
|
|
4441
|
-
if (state.n.r) {
|
|
4442
|
-
state.s = 3;
|
|
4443
|
-
state = { up: state, n: state.n.r, s: 0 };
|
|
4444
|
-
continue;
|
|
4445
|
-
}
|
|
4446
|
-
case 3:
|
|
4447
|
-
state = state.up;
|
|
4448
|
-
}
|
|
4449
|
-
}
|
|
4450
|
-
return { done: true };
|
|
4451
|
-
},
|
|
4452
|
-
};
|
|
4453
|
-
}
|
|
4454
|
-
function rebalance(target) {
|
|
4455
|
-
var _a, _b;
|
|
4456
|
-
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);
|
|
4457
|
-
var r = diff > 1 ? "r" : diff < -1 ? "l" : "";
|
|
4458
|
-
if (r) {
|
|
4459
|
-
var l = r === "r" ? "l" : "r";
|
|
4460
|
-
var rootClone = __assign({}, target);
|
|
4461
|
-
var oldRootRight = target[r];
|
|
4462
|
-
target.from = oldRootRight.from;
|
|
4463
|
-
target.to = oldRootRight.to;
|
|
4464
|
-
target[r] = oldRootRight[r];
|
|
4465
|
-
rootClone[r] = oldRootRight[l];
|
|
4466
|
-
target[l] = rootClone;
|
|
4467
|
-
rootClone.d = computeDepth(rootClone);
|
|
4468
|
-
}
|
|
4469
|
-
target.d = computeDepth(target);
|
|
4470
|
-
}
|
|
4471
|
-
function computeDepth(_a) {
|
|
4472
|
-
var r = _a.r, l = _a.l;
|
|
4473
|
-
return (r ? (l ? Math.max(r.d, l.d) : r.d) : l ? l.d : 0) + 1;
|
|
4474
|
-
}
|
|
4475
|
-
|
|
4476
4559
|
function isCachableContext(ctx, table) {
|
|
4477
4560
|
return (ctx.trans.mode === 'readonly' &&
|
|
4478
4561
|
!!ctx.subscr &&
|
|
@@ -4496,28 +4579,17 @@ function isCachableRequest(type, req) {
|
|
|
4496
4579
|
}
|
|
4497
4580
|
}
|
|
4498
4581
|
|
|
4499
|
-
function extendObservabilitySet(target, newSet) {
|
|
4500
|
-
keys(newSet).forEach(function (part) {
|
|
4501
|
-
if (target[part])
|
|
4502
|
-
mergeRanges(target[part], newSet[part]);
|
|
4503
|
-
else
|
|
4504
|
-
target[part] = cloneSimpleObjectTree(newSet[part]);
|
|
4505
|
-
});
|
|
4506
|
-
return target;
|
|
4507
|
-
}
|
|
4508
|
-
|
|
4509
4582
|
var observabilityMiddleware = {
|
|
4510
4583
|
stack: "dbcore",
|
|
4511
|
-
level:
|
|
4584
|
+
level: 0,
|
|
4512
4585
|
name: "Observability",
|
|
4513
4586
|
create: function (core) {
|
|
4514
4587
|
var dbName = core.schema.name;
|
|
4515
4588
|
var FULL_RANGE = new RangeSet(core.MIN_KEY, core.MAX_KEY);
|
|
4516
4589
|
return __assign(__assign({}, core), { transaction: function (stores, mode, options) {
|
|
4517
|
-
if (
|
|
4518
|
-
|
|
4519
|
-
|
|
4520
|
-
throw new exceptions.ReadOnly('write transaction not allowed within liveQueries');
|
|
4590
|
+
if (PSD.subscr && mode !== 'readonly') {
|
|
4591
|
+
throw new exceptions.ReadOnly("Readwrite transaction in liveQuery context. Querier source: ".concat(PSD.querier));
|
|
4592
|
+
}
|
|
4521
4593
|
return core.transaction(stores, mode, options);
|
|
4522
4594
|
}, table: function (tableName) {
|
|
4523
4595
|
var table = core.table(tableName);
|
|
@@ -4779,8 +4851,6 @@ function applyOptimisticOps(result, req, ops, table, cacheEntry, immutable) {
|
|
|
4779
4851
|
return immutable ? Object.freeze(finalResult) : finalResult;
|
|
4780
4852
|
}
|
|
4781
4853
|
|
|
4782
|
-
var cache = {};
|
|
4783
|
-
|
|
4784
4854
|
function areRangesEqual(r1, r2) {
|
|
4785
4855
|
return (cmp(r1.lower, r2.lower) === 0 &&
|
|
4786
4856
|
cmp(r1.upper, r2.upper) === 0 &&
|
|
@@ -4865,63 +4935,6 @@ function findCompatibleQuery(dbName, tableName, type, req) {
|
|
|
4865
4935
|
}
|
|
4866
4936
|
}
|
|
4867
4937
|
|
|
4868
|
-
function obsSetsOverlap(os1, os2) {
|
|
4869
|
-
return Object.keys(os1).some(function (key) { return os2[key] && rangesOverlap(os2[key], os1[key]); });
|
|
4870
|
-
}
|
|
4871
|
-
|
|
4872
|
-
var unsignaledParts = {};
|
|
4873
|
-
var isTaskEnqueued = false;
|
|
4874
|
-
function signalSubscribersLazily(part) {
|
|
4875
|
-
extendObservabilitySet(unsignaledParts, part);
|
|
4876
|
-
if (!isTaskEnqueued) {
|
|
4877
|
-
isTaskEnqueued = true;
|
|
4878
|
-
queueMicrotask(function () {
|
|
4879
|
-
isTaskEnqueued = false;
|
|
4880
|
-
var parts = unsignaledParts;
|
|
4881
|
-
unsignaledParts = {};
|
|
4882
|
-
signalSubscribersNow(parts);
|
|
4883
|
-
});
|
|
4884
|
-
}
|
|
4885
|
-
}
|
|
4886
|
-
function signalSubscribersNow(updatedParts, deleteAffectedCacheEntries) {
|
|
4887
|
-
if (deleteAffectedCacheEntries === void 0) { deleteAffectedCacheEntries = false; }
|
|
4888
|
-
var queriesToSignal = new Set();
|
|
4889
|
-
for (var key in updatedParts) {
|
|
4890
|
-
var parts = /^idb\:\/\/(.*)\/(.*)\//.exec(key);
|
|
4891
|
-
if (parts) {
|
|
4892
|
-
var dbName = parts[1], tableName = parts[2];
|
|
4893
|
-
var tblCache = cache["idb://".concat(dbName, "/").concat(tableName)];
|
|
4894
|
-
if (tblCache)
|
|
4895
|
-
signalTableSubscribersNow(tblCache, updatedParts, queriesToSignal, deleteAffectedCacheEntries);
|
|
4896
|
-
}
|
|
4897
|
-
}
|
|
4898
|
-
queriesToSignal.forEach(function (requery) { return requery(); });
|
|
4899
|
-
}
|
|
4900
|
-
function signalTableSubscribersNow(tblCache, updatedParts, outQueriesToSignal, deleteAffectedCacheEntries) {
|
|
4901
|
-
var updatedEntryLists = deleteAffectedCacheEntries && [];
|
|
4902
|
-
for (var _i = 0, _a = Object.entries(tblCache.queries.query); _i < _a.length; _i++) {
|
|
4903
|
-
var _b = _a[_i], indexName = _b[0], entries = _b[1];
|
|
4904
|
-
var filteredEntries = deleteAffectedCacheEntries && [];
|
|
4905
|
-
for (var _c = 0, entries_1 = entries; _c < entries_1.length; _c++) {
|
|
4906
|
-
var entry = entries_1[_c];
|
|
4907
|
-
if (entry.obsSet && obsSetsOverlap(updatedParts, entry.obsSet)) {
|
|
4908
|
-
entry.subscribers.forEach(function (requery) { return outQueriesToSignal.add(requery); });
|
|
4909
|
-
}
|
|
4910
|
-
else if (deleteAffectedCacheEntries) {
|
|
4911
|
-
filteredEntries.push(entry);
|
|
4912
|
-
}
|
|
4913
|
-
}
|
|
4914
|
-
if (deleteAffectedCacheEntries)
|
|
4915
|
-
updatedEntryLists.push([indexName, filteredEntries]);
|
|
4916
|
-
}
|
|
4917
|
-
if (deleteAffectedCacheEntries) {
|
|
4918
|
-
for (var _d = 0, updatedEntryLists_1 = updatedEntryLists; _d < updatedEntryLists_1.length; _d++) {
|
|
4919
|
-
var _e = updatedEntryLists_1[_d], indexName = _e[0], filteredEntries = _e[1];
|
|
4920
|
-
tblCache.queries.query[indexName] = filteredEntries;
|
|
4921
|
-
}
|
|
4922
|
-
}
|
|
4923
|
-
}
|
|
4924
|
-
|
|
4925
4938
|
function subscribeToCacheEntry(cacheEntry, container, requery, signal) {
|
|
4926
4939
|
cacheEntry.subscribers.add(requery);
|
|
4927
4940
|
signal.addEventListener("abort", function () {
|
|
@@ -4941,7 +4954,7 @@ function enqueForDeletion(cacheEntry, container) {
|
|
|
4941
4954
|
|
|
4942
4955
|
var cacheMiddleware = {
|
|
4943
4956
|
stack: 'dbcore',
|
|
4944
|
-
level:
|
|
4957
|
+
level: 0,
|
|
4945
4958
|
name: 'Cache',
|
|
4946
4959
|
create: function (core) {
|
|
4947
4960
|
var dbName = core.schema.name;
|
|
@@ -5188,7 +5201,8 @@ var Dexie$1 = (function () {
|
|
|
5188
5201
|
console.warn("Another connection wants to upgrade database '".concat(_this.name, "'. Closing db now to resume the upgrade."));
|
|
5189
5202
|
else
|
|
5190
5203
|
console.warn("Another connection wants to delete database '".concat(_this.name, "'. Closing db now to resume the delete request."));
|
|
5191
|
-
_this.close();
|
|
5204
|
+
_this.close({ disableAutoOpen: false });
|
|
5205
|
+
_this._state.openComplete = false;
|
|
5192
5206
|
});
|
|
5193
5207
|
this.on("blocked", function (ev) {
|
|
5194
5208
|
if (!ev.newVersion || ev.newVersion < ev.oldVersion)
|
|
@@ -5205,10 +5219,10 @@ var Dexie$1 = (function () {
|
|
|
5205
5219
|
.map(function (c) { return c.on("versionchange").fire(ev); });
|
|
5206
5220
|
};
|
|
5207
5221
|
this.use(cacheExistingValuesMiddleware);
|
|
5208
|
-
this.use(virtualIndexMiddleware);
|
|
5209
|
-
this.use(hooksMiddleware);
|
|
5210
5222
|
this.use(cacheMiddleware);
|
|
5211
5223
|
this.use(observabilityMiddleware);
|
|
5224
|
+
this.use(virtualIndexMiddleware);
|
|
5225
|
+
this.use(hooksMiddleware);
|
|
5212
5226
|
this.vip = Object.create(this, { _vip: { value: true } });
|
|
5213
5227
|
addons.forEach(function (addon) { return addon(_this); });
|
|
5214
5228
|
}
|
|
@@ -5290,10 +5304,12 @@ var Dexie$1 = (function () {
|
|
|
5290
5304
|
state.cancelOpen = reject;
|
|
5291
5305
|
});
|
|
5292
5306
|
};
|
|
5293
|
-
Dexie.prototype.close = function () {
|
|
5307
|
+
Dexie.prototype.close = function (_a) {
|
|
5308
|
+
var _b = _a === void 0 ? { disableAutoOpen: true } : _a, disableAutoOpen = _b.disableAutoOpen;
|
|
5294
5309
|
this._close();
|
|
5295
5310
|
var state = this._state;
|
|
5296
|
-
|
|
5311
|
+
if (disableAutoOpen)
|
|
5312
|
+
this._options.autoOpen = false;
|
|
5297
5313
|
state.dbOpenError = new exceptions.DatabaseClosed();
|
|
5298
5314
|
if (state.isBeingOpened)
|
|
5299
5315
|
state.cancelOpen(state.dbOpenError);
|
|
@@ -5304,7 +5320,7 @@ var Dexie$1 = (function () {
|
|
|
5304
5320
|
var state = this._state;
|
|
5305
5321
|
return new DexiePromise(function (resolve, reject) {
|
|
5306
5322
|
var doDelete = function () {
|
|
5307
|
-
_this.close();
|
|
5323
|
+
_this.close({ disableAutoOpen: false });
|
|
5308
5324
|
var req = _this._deps.indexedDB.deleteDatabase(_this.name);
|
|
5309
5325
|
req.onsuccess = wrap(function () {
|
|
5310
5326
|
_onDatabaseDeleted(_this._deps, _this.name);
|
|
@@ -5504,6 +5520,7 @@ function liveQuery(querier) {
|
|
|
5504
5520
|
subscr: subscr,
|
|
5505
5521
|
signal: abortController.signal,
|
|
5506
5522
|
requery: doQuery,
|
|
5523
|
+
querier: querier,
|
|
5507
5524
|
trans: null
|
|
5508
5525
|
};
|
|
5509
5526
|
var ret = execute(ctx);
|