dexie-cloud-addon 4.0.0-beta.16 → 4.0.0-beta.17
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/dist/modern/dexie-cloud-addon.js +96 -104
- package/dist/modern/dexie-cloud-addon.js.map +1 -1
- package/dist/modern/dexie-cloud-addon.min.js +1 -1
- package/dist/modern/dexie-cloud-addon.min.js.map +1 -1
- package/dist/modern/service-worker.js +95 -103
- package/dist/modern/service-worker.js.map +1 -1
- package/dist/modern/service-worker.min.js +1 -1
- package/dist/modern/service-worker.min.js.map +1 -1
- package/dist/module-es5/dexie-cloud-addon.js +135 -150
- package/dist/module-es5/dexie-cloud-addon.js.map +1 -1
- package/dist/module-es5/dexie-cloud-addon.min.js +1 -1
- package/dist/module-es5/dexie-cloud-addon.min.js.map +1 -1
- package/dist/umd/dexie-cloud-addon.js +135 -150
- package/dist/umd/dexie-cloud-addon.js.map +1 -1
- package/dist/umd/dexie-cloud-addon.min.js +1 -1
- package/dist/umd/dexie-cloud-addon.min.js.map +1 -1
- package/dist/umd/service-worker.js +94 -102
- package/dist/umd/service-worker.js.map +1 -1
- package/dist/umd/service-worker.min.js +1 -1
- package/dist/umd/service-worker.min.js.map +1 -1
- package/dist/umd-modern/dexie-cloud-addon.js +92 -100
- package/dist/umd-modern/dexie-cloud-addon.js.map +1 -1
- package/package.json +1 -1
- package/dist/types/DexieCloudEntity.d.ts +0 -8
- package/dist/types/WebSocketStatus.d.ts +0 -1
- package/dist/types/createMyMembersObservable.d.ts +0 -14
- package/dist/types/currentUserObservable.d.ts +0 -3
- package/dist/types/helpers/BroadcastedLocalEvent.d.ts +0 -8
- package/dist/types/helpers/visibleState.d.ts +0 -1
- package/dist/types/permissionsLookup.d.ts +0 -9
- package/dist/types/permissionsLookupObservable.d.ts +0 -14
- package/dist/types/sync/globalizePrivateIds.d.ts +0 -4
- package/dist/types/sync/syncServerToClientOnly.d.ts +0 -3
- package/dist/types/types/CloudConnectionStatus.d.ts +0 -0
- package/dist/types/types/ConnectionStatus.d.ts +0 -0
- package/dist/types/types/LoginState.d.ts +0 -41
- package/dist/types/types/SyncConnectionStatus.d.ts +0 -1
- package/dist/types/types/SyncFlowStatus.d.ts +0 -6
- package/dist/types/types/SyncStatus.d.ts +0 -6
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
*
|
|
109
109
|
* ==========================================================================
|
|
110
110
|
*
|
|
111
|
-
* Version 4.0.0-beta.
|
|
111
|
+
* Version 4.0.0-beta.17, Fri Apr 08 2022
|
|
112
112
|
*
|
|
113
113
|
* https://dexie.org
|
|
114
114
|
*
|
|
@@ -5303,160 +5303,16 @@
|
|
|
5303
5303
|
return rv;
|
|
5304
5304
|
};
|
|
5305
5305
|
}
|
|
5306
|
-
var SECONDS = 1000;
|
|
5307
|
-
var MINUTES = 60 * SECONDS;
|
|
5308
|
-
var myId = randomString(16);
|
|
5309
|
-
var GUARDED_JOB_HEARTBEAT = 1 * SECONDS;
|
|
5310
|
-
var GUARDED_JOB_TIMEOUT = 1 * MINUTES;
|
|
5311
|
-
function performGuardedJob(db, jobName, jobsTableName, job, _e) {
|
|
5312
|
-
var _f = _e === void 0 ? {} : _e, awaitRemoteJob = _f.awaitRemoteJob;
|
|
5313
|
-
return __awaiter$1(this, void 0, void 0, function () {
|
|
5314
|
-
function aquireLock() {
|
|
5315
|
-
return __awaiter$1(this, void 0, void 0, function () {
|
|
5316
|
-
var gotTheLock, jobDoneObservable, err_1;
|
|
5317
|
-
var _this_1 = this;
|
|
5318
|
-
return __generator$1(this, function (_e) {
|
|
5319
|
-
switch (_e.label) {
|
|
5320
|
-
case 0: return [4 /*yield*/, db.transaction('rw!', jobsTableName, function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
5321
|
-
var currentWork;
|
|
5322
|
-
return __generator$1(this, function (_e) {
|
|
5323
|
-
switch (_e.label) {
|
|
5324
|
-
case 0: return [4 /*yield*/, jobsTable.get(jobName)];
|
|
5325
|
-
case 1:
|
|
5326
|
-
currentWork = _e.sent();
|
|
5327
|
-
if (!!currentWork) return [3 /*break*/, 3];
|
|
5328
|
-
// No one else is working. Let's record that we are.
|
|
5329
|
-
return [4 /*yield*/, jobsTable.add({
|
|
5330
|
-
nodeId: myId,
|
|
5331
|
-
started: new Date(),
|
|
5332
|
-
heartbeat: new Date()
|
|
5333
|
-
}, jobName)];
|
|
5334
|
-
case 2:
|
|
5335
|
-
// No one else is working. Let's record that we are.
|
|
5336
|
-
_e.sent();
|
|
5337
|
-
return [2 /*return*/, true];
|
|
5338
|
-
case 3:
|
|
5339
|
-
if (!(currentWork.heartbeat.getTime() <
|
|
5340
|
-
Date.now() - GUARDED_JOB_TIMEOUT)) return [3 /*break*/, 5];
|
|
5341
|
-
console.warn("Latest ".concat(jobName, " worker seem to have died.\n"), "The dead job started:", currentWork.started, "\n", "Last heart beat was:", currentWork.heartbeat, '\n', "We're now taking over!");
|
|
5342
|
-
// Now, take over!
|
|
5343
|
-
return [4 /*yield*/, jobsTable.put({
|
|
5344
|
-
nodeId: myId,
|
|
5345
|
-
started: new Date(),
|
|
5346
|
-
heartbeat: new Date()
|
|
5347
|
-
}, jobName)];
|
|
5348
|
-
case 4:
|
|
5349
|
-
// Now, take over!
|
|
5350
|
-
_e.sent();
|
|
5351
|
-
return [2 /*return*/, true];
|
|
5352
|
-
case 5: return [2 /*return*/, false];
|
|
5353
|
-
}
|
|
5354
|
-
});
|
|
5355
|
-
}); })];
|
|
5356
|
-
case 1:
|
|
5357
|
-
gotTheLock = _e.sent();
|
|
5358
|
-
if (gotTheLock)
|
|
5359
|
-
return [2 /*return*/, true];
|
|
5360
|
-
if (!awaitRemoteJob) return [3 /*break*/, 6];
|
|
5361
|
-
_e.label = 2;
|
|
5362
|
-
case 2:
|
|
5363
|
-
_e.trys.push([2, 4, , 6]);
|
|
5364
|
-
jobDoneObservable = rxjs.from(Dexie.liveQuery(function () { return jobsTable.get(jobName); })).pipe(timeout(GUARDED_JOB_TIMEOUT), filter(function (job) { return !job; }));
|
|
5365
|
-
return [4 /*yield*/, jobDoneObservable.toPromise()];
|
|
5366
|
-
case 3:
|
|
5367
|
-
_e.sent();
|
|
5368
|
-
return [2 /*return*/, false];
|
|
5369
|
-
case 4:
|
|
5370
|
-
err_1 = _e.sent();
|
|
5371
|
-
if (err_1.name !== 'TimeoutError') {
|
|
5372
|
-
throw err_1;
|
|
5373
|
-
}
|
|
5374
|
-
return [4 /*yield*/, aquireLock()];
|
|
5375
|
-
case 5:
|
|
5376
|
-
// Timeout stopped us! Try aquire the lock now.
|
|
5377
|
-
// It will likely succeed this time unless
|
|
5378
|
-
// another client took it.
|
|
5379
|
-
return [2 /*return*/, _e.sent()];
|
|
5380
|
-
case 6: return [2 /*return*/, false];
|
|
5381
|
-
}
|
|
5382
|
-
});
|
|
5383
|
-
});
|
|
5384
|
-
}
|
|
5385
|
-
var jobsTable, heartbeat;
|
|
5386
|
-
var _this_1 = this;
|
|
5387
|
-
return __generator$1(this, function (_g) {
|
|
5388
|
-
switch (_g.label) {
|
|
5389
|
-
case 0:
|
|
5390
|
-
jobsTable = db.table(jobsTableName);
|
|
5391
|
-
return [4 /*yield*/, aquireLock()];
|
|
5392
|
-
case 1:
|
|
5393
|
-
if (!_g.sent()) return [3 /*break*/, 6];
|
|
5394
|
-
heartbeat = setInterval(function () {
|
|
5395
|
-
jobsTable.update(jobName, function (job) {
|
|
5396
|
-
if (job.nodeId === myId) {
|
|
5397
|
-
job.heartbeat = new Date();
|
|
5398
|
-
}
|
|
5399
|
-
});
|
|
5400
|
-
}, GUARDED_JOB_HEARTBEAT);
|
|
5401
|
-
_g.label = 2;
|
|
5402
|
-
case 2:
|
|
5403
|
-
_g.trys.push([2, , 4, 6]);
|
|
5404
|
-
return [4 /*yield*/, job()];
|
|
5405
|
-
case 3: return [2 /*return*/, _g.sent()];
|
|
5406
|
-
case 4:
|
|
5407
|
-
// Stop heartbeat
|
|
5408
|
-
clearInterval(heartbeat);
|
|
5409
|
-
// Remove the persisted job state:
|
|
5410
|
-
return [4 /*yield*/, db.transaction('rw!', jobsTableName, function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
5411
|
-
var currentWork;
|
|
5412
|
-
return __generator$1(this, function (_e) {
|
|
5413
|
-
switch (_e.label) {
|
|
5414
|
-
case 0: return [4 /*yield*/, jobsTable.get(jobName)];
|
|
5415
|
-
case 1:
|
|
5416
|
-
currentWork = _e.sent();
|
|
5417
|
-
if (currentWork && currentWork.nodeId === myId) {
|
|
5418
|
-
jobsTable.delete(jobName);
|
|
5419
|
-
}
|
|
5420
|
-
return [2 /*return*/];
|
|
5421
|
-
}
|
|
5422
|
-
});
|
|
5423
|
-
}); })];
|
|
5424
|
-
case 5:
|
|
5425
|
-
// Remove the persisted job state:
|
|
5426
|
-
_g.sent();
|
|
5427
|
-
return [7 /*endfinally*/];
|
|
5428
|
-
case 6: return [2 /*return*/];
|
|
5429
|
-
}
|
|
5430
|
-
});
|
|
5431
|
-
});
|
|
5432
|
-
}
|
|
5433
5306
|
function performInitialSync(db, cloudOptions, cloudSchema) {
|
|
5434
5307
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
5435
|
-
var _this_1 = this;
|
|
5436
5308
|
return __generator$1(this, function (_e) {
|
|
5437
5309
|
switch (_e.label) {
|
|
5438
5310
|
case 0:
|
|
5439
|
-
console.debug(
|
|
5440
|
-
return [4 /*yield*/,
|
|
5441
|
-
var syncState;
|
|
5442
|
-
return __generator$1(this, function (_e) {
|
|
5443
|
-
switch (_e.label) {
|
|
5444
|
-
case 0: return [4 /*yield*/, db.getPersistedSyncState()];
|
|
5445
|
-
case 1:
|
|
5446
|
-
syncState = _e.sent();
|
|
5447
|
-
if (!!(syncState === null || syncState === void 0 ? void 0 : syncState.initiallySynced)) return [3 /*break*/, 3];
|
|
5448
|
-
return [4 /*yield*/, sync(db, cloudOptions, cloudSchema, { isInitialSync: true })];
|
|
5449
|
-
case 2:
|
|
5450
|
-
_e.sent();
|
|
5451
|
-
_e.label = 3;
|
|
5452
|
-
case 3: return [2 /*return*/];
|
|
5453
|
-
}
|
|
5454
|
-
});
|
|
5455
|
-
}); }, { awaitRemoteJob: true } // Don't return until the job is done!
|
|
5456
|
-
)];
|
|
5311
|
+
console.debug('Performing initial sync');
|
|
5312
|
+
return [4 /*yield*/, sync(db, cloudOptions, cloudSchema, { isInitialSync: true })];
|
|
5457
5313
|
case 1:
|
|
5458
5314
|
_e.sent();
|
|
5459
|
-
console.debug(
|
|
5315
|
+
console.debug('Done initial sync');
|
|
5460
5316
|
return [2 /*return*/];
|
|
5461
5317
|
}
|
|
5462
5318
|
});
|
|
@@ -5892,6 +5748,135 @@
|
|
|
5892
5748
|
});
|
|
5893
5749
|
});
|
|
5894
5750
|
}
|
|
5751
|
+
var SECONDS = 1000;
|
|
5752
|
+
var MINUTES = 60 * SECONDS;
|
|
5753
|
+
var myId = randomString(16);
|
|
5754
|
+
var GUARDED_JOB_HEARTBEAT = 1 * SECONDS;
|
|
5755
|
+
var GUARDED_JOB_TIMEOUT = 1 * MINUTES;
|
|
5756
|
+
function performGuardedJob(db, jobName, jobsTableName, job, _e) {
|
|
5757
|
+
var _f = _e === void 0 ? {} : _e, awaitRemoteJob = _f.awaitRemoteJob;
|
|
5758
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
5759
|
+
function aquireLock() {
|
|
5760
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
5761
|
+
var gotTheLock, jobDoneObservable, err_1;
|
|
5762
|
+
var _this_1 = this;
|
|
5763
|
+
return __generator$1(this, function (_e) {
|
|
5764
|
+
switch (_e.label) {
|
|
5765
|
+
case 0: return [4 /*yield*/, db.transaction('rw!', jobsTableName, function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
5766
|
+
var currentWork;
|
|
5767
|
+
return __generator$1(this, function (_e) {
|
|
5768
|
+
switch (_e.label) {
|
|
5769
|
+
case 0: return [4 /*yield*/, jobsTable.get(jobName)];
|
|
5770
|
+
case 1:
|
|
5771
|
+
currentWork = _e.sent();
|
|
5772
|
+
if (!!currentWork) return [3 /*break*/, 3];
|
|
5773
|
+
// No one else is working. Let's record that we are.
|
|
5774
|
+
return [4 /*yield*/, jobsTable.add({
|
|
5775
|
+
nodeId: myId,
|
|
5776
|
+
started: new Date(),
|
|
5777
|
+
heartbeat: new Date()
|
|
5778
|
+
}, jobName)];
|
|
5779
|
+
case 2:
|
|
5780
|
+
// No one else is working. Let's record that we are.
|
|
5781
|
+
_e.sent();
|
|
5782
|
+
return [2 /*return*/, true];
|
|
5783
|
+
case 3:
|
|
5784
|
+
if (!(currentWork.heartbeat.getTime() <
|
|
5785
|
+
Date.now() - GUARDED_JOB_TIMEOUT)) return [3 /*break*/, 5];
|
|
5786
|
+
console.warn("Latest ".concat(jobName, " worker seem to have died.\n"), "The dead job started:", currentWork.started, "\n", "Last heart beat was:", currentWork.heartbeat, '\n', "We're now taking over!");
|
|
5787
|
+
// Now, take over!
|
|
5788
|
+
return [4 /*yield*/, jobsTable.put({
|
|
5789
|
+
nodeId: myId,
|
|
5790
|
+
started: new Date(),
|
|
5791
|
+
heartbeat: new Date()
|
|
5792
|
+
}, jobName)];
|
|
5793
|
+
case 4:
|
|
5794
|
+
// Now, take over!
|
|
5795
|
+
_e.sent();
|
|
5796
|
+
return [2 /*return*/, true];
|
|
5797
|
+
case 5: return [2 /*return*/, false];
|
|
5798
|
+
}
|
|
5799
|
+
});
|
|
5800
|
+
}); })];
|
|
5801
|
+
case 1:
|
|
5802
|
+
gotTheLock = _e.sent();
|
|
5803
|
+
if (gotTheLock)
|
|
5804
|
+
return [2 /*return*/, true];
|
|
5805
|
+
if (!awaitRemoteJob) return [3 /*break*/, 6];
|
|
5806
|
+
_e.label = 2;
|
|
5807
|
+
case 2:
|
|
5808
|
+
_e.trys.push([2, 4, , 6]);
|
|
5809
|
+
jobDoneObservable = rxjs.from(Dexie.liveQuery(function () { return jobsTable.get(jobName); })).pipe(timeout(GUARDED_JOB_TIMEOUT), filter(function (job) { return !job; }));
|
|
5810
|
+
return [4 /*yield*/, jobDoneObservable.toPromise()];
|
|
5811
|
+
case 3:
|
|
5812
|
+
_e.sent();
|
|
5813
|
+
return [2 /*return*/, false];
|
|
5814
|
+
case 4:
|
|
5815
|
+
err_1 = _e.sent();
|
|
5816
|
+
if (err_1.name !== 'TimeoutError') {
|
|
5817
|
+
throw err_1;
|
|
5818
|
+
}
|
|
5819
|
+
return [4 /*yield*/, aquireLock()];
|
|
5820
|
+
case 5:
|
|
5821
|
+
// Timeout stopped us! Try aquire the lock now.
|
|
5822
|
+
// It will likely succeed this time unless
|
|
5823
|
+
// another client took it.
|
|
5824
|
+
return [2 /*return*/, _e.sent()];
|
|
5825
|
+
case 6: return [2 /*return*/, false];
|
|
5826
|
+
}
|
|
5827
|
+
});
|
|
5828
|
+
});
|
|
5829
|
+
}
|
|
5830
|
+
var jobsTable, heartbeat;
|
|
5831
|
+
var _this_1 = this;
|
|
5832
|
+
return __generator$1(this, function (_g) {
|
|
5833
|
+
switch (_g.label) {
|
|
5834
|
+
case 0:
|
|
5835
|
+
jobsTable = db.table(jobsTableName);
|
|
5836
|
+
return [4 /*yield*/, aquireLock()];
|
|
5837
|
+
case 1:
|
|
5838
|
+
if (!_g.sent()) return [3 /*break*/, 6];
|
|
5839
|
+
heartbeat = setInterval(function () {
|
|
5840
|
+
jobsTable.update(jobName, function (job) {
|
|
5841
|
+
if (job.nodeId === myId) {
|
|
5842
|
+
job.heartbeat = new Date();
|
|
5843
|
+
}
|
|
5844
|
+
});
|
|
5845
|
+
}, GUARDED_JOB_HEARTBEAT);
|
|
5846
|
+
_g.label = 2;
|
|
5847
|
+
case 2:
|
|
5848
|
+
_g.trys.push([2, , 4, 6]);
|
|
5849
|
+
return [4 /*yield*/, job()];
|
|
5850
|
+
case 3: return [2 /*return*/, _g.sent()];
|
|
5851
|
+
case 4:
|
|
5852
|
+
// Stop heartbeat
|
|
5853
|
+
clearInterval(heartbeat);
|
|
5854
|
+
// Remove the persisted job state:
|
|
5855
|
+
return [4 /*yield*/, db.transaction('rw!', jobsTableName, function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
5856
|
+
var currentWork;
|
|
5857
|
+
return __generator$1(this, function (_e) {
|
|
5858
|
+
switch (_e.label) {
|
|
5859
|
+
case 0: return [4 /*yield*/, jobsTable.get(jobName)];
|
|
5860
|
+
case 1:
|
|
5861
|
+
currentWork = _e.sent();
|
|
5862
|
+
if (!(currentWork && currentWork.nodeId === myId)) return [3 /*break*/, 3];
|
|
5863
|
+
return [4 /*yield*/, jobsTable.delete(jobName)];
|
|
5864
|
+
case 2:
|
|
5865
|
+
_e.sent();
|
|
5866
|
+
_e.label = 3;
|
|
5867
|
+
case 3: return [2 /*return*/];
|
|
5868
|
+
}
|
|
5869
|
+
});
|
|
5870
|
+
}); })];
|
|
5871
|
+
case 5:
|
|
5872
|
+
// Remove the persisted job state:
|
|
5873
|
+
_g.sent();
|
|
5874
|
+
return [7 /*endfinally*/];
|
|
5875
|
+
case 6: return [2 /*return*/];
|
|
5876
|
+
}
|
|
5877
|
+
});
|
|
5878
|
+
});
|
|
5879
|
+
}
|
|
5895
5880
|
var ongoingSyncs = new WeakMap();
|
|
5896
5881
|
function syncIfPossible(db, cloudOptions, cloudSchema, options) {
|
|
5897
5882
|
var ongoing = ongoingSyncs.get(db);
|
|
@@ -6822,7 +6807,7 @@
|
|
|
6822
6807
|
currentUserEmitter.next(UNAUTHORIZED_USER);
|
|
6823
6808
|
});
|
|
6824
6809
|
dexie.cloud = {
|
|
6825
|
-
version: '4.0.0-beta.
|
|
6810
|
+
version: '4.0.0-beta.17',
|
|
6826
6811
|
options: __assign({}, DEFAULT_OPTIONS),
|
|
6827
6812
|
schema: null,
|
|
6828
6813
|
serverState: null,
|
|
@@ -7152,7 +7137,7 @@
|
|
|
7152
7137
|
});
|
|
7153
7138
|
}
|
|
7154
7139
|
}
|
|
7155
|
-
dexieCloud.version = '4.0.0-beta.
|
|
7140
|
+
dexieCloud.version = '4.0.0-beta.17';
|
|
7156
7141
|
Dexie__default["default"].Cloud = dexieCloud;
|
|
7157
7142
|
|
|
7158
7143
|
exports["default"] = dexieCloud;
|