@microsoft/applicationinsights-offlinechannel-js 0.3.1-nightly3.2407-06 → 0.3.1-nightly3.2407-08
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/es5/applicationinsights-offlinechannel-js.js +1249 -1249
- package/dist/es5/applicationinsights-offlinechannel-js.js.map +1 -1
- package/dist/es5/applicationinsights-offlinechannel-js.min.js +2 -2
- package/dist/es5/applicationinsights-offlinechannel-js.min.js.map +1 -1
- package/dist-es5/Helpers/Utils.js +10 -3
- package/dist-es5/Helpers/Utils.js.map +1 -1
- package/dist-es5/InMemoryBatch.js +1 -1
- package/dist-es5/Interfaces/IInMemoryBatch.js +1 -1
- package/dist-es5/Interfaces/IOfflineBatch.js +1 -1
- package/dist-es5/Interfaces/IOfflineIndexDb.js +1 -1
- package/dist-es5/Interfaces/IOfflineProvider.js +1 -1
- package/dist-es5/Interfaces/ISender.js +1 -1
- package/dist-es5/OfflineBatchHandler.js +1 -1
- package/dist-es5/OfflineChannel.js +3 -4
- package/dist-es5/OfflineChannel.js.map +1 -1
- package/dist-es5/PayloadHelper.js +1 -1
- package/dist-es5/Providers/IndexDbHelper.js +1 -1
- package/dist-es5/Providers/IndexDbProvider.js +2 -11
- package/dist-es5/Providers/IndexDbProvider.js.map +1 -1
- package/dist-es5/Providers/WebStorageProvider.js +1 -1
- package/dist-es5/Sender.js +1 -1
- package/dist-es5/__DynamicConstants.js +1 -1
- package/dist-es5/applicationinsights-offlinechannel-js.js +1 -1
- package/package.json +3 -3
- package/types/applicationinsights-offlinechannel-js.d.ts +1 -1
- package/types/applicationinsights-offlinechannel-js.namespaced.d.ts +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Application Insights JavaScript SDK - Offline Channel, 0.3.1-nightly3.2407-
|
|
2
|
+
* Application Insights JavaScript SDK - Offline Channel, 0.3.1-nightly3.2407-08
|
|
3
3
|
* Copyright (c) Microsoft and contributors. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
(function (global, factory) {
|
|
@@ -1980,7 +1980,7 @@
|
|
|
1980
1980
|
return result;
|
|
1981
1981
|
}
|
|
1982
1982
|
|
|
1983
|
-
var version$1 = '3.3.1-nightly3.2407-
|
|
1983
|
+
var version$1 = '3.3.1-nightly3.2407-08';
|
|
1984
1984
|
var instanceName = "." + newId(6);
|
|
1985
1985
|
var _dataUid = 0;
|
|
1986
1986
|
function _canAcceptData(target) {
|
|
@@ -4398,1435 +4398,1435 @@
|
|
|
4398
4398
|
var _DYN_EVTS = "evts";
|
|
4399
4399
|
var _DYN_LAST_ACCESS_TIME = "lastAccessTime";
|
|
4400
4400
|
|
|
4401
|
-
|
|
4402
|
-
|
|
4403
|
-
|
|
4404
|
-
|
|
4405
|
-
|
|
4406
|
-
|
|
4407
|
-
|
|
4408
|
-
|
|
4409
|
-
|
|
4410
|
-
|
|
4411
|
-
var _dbContext = [];
|
|
4412
|
-
function _getDbContext(dbName, diagLog) {
|
|
4413
|
-
var _a;
|
|
4414
|
-
var dbCtx = null;
|
|
4415
|
-
for (var lp = 0; lp < _dbContext[_DYN_LENGTH ]; lp++) {
|
|
4416
|
-
dbCtx = _dbContext[lp];
|
|
4417
|
-
if (dbCtx[_DYN_NAME ] === dbName) {
|
|
4418
|
-
return dbCtx;
|
|
4401
|
+
function isValidPersistenceLevel(value) {
|
|
4402
|
+
return (isNumber(value) && value >= 0 && value <= EventPersistence.Critical);
|
|
4403
|
+
}
|
|
4404
|
+
function getEndpointDomain(endpoint) {
|
|
4405
|
+
try {
|
|
4406
|
+
var url = endpoint.replace(/^https?:\/\/|^www\./, "");
|
|
4407
|
+
url = url.replace(/\?/, "/");
|
|
4408
|
+
var arr = url[_DYN_SPLIT ]("/");
|
|
4409
|
+
if (arr && arr[_DYN_LENGTH ] > 0) {
|
|
4410
|
+
return arr[0];
|
|
4419
4411
|
}
|
|
4420
4412
|
}
|
|
4421
|
-
|
|
4422
|
-
|
|
4423
|
-
|
|
4424
|
-
_a.dbHdl = [],
|
|
4425
|
-
_a.add = function (db) {
|
|
4426
|
-
dbCtx.dbHdl[_DYN_PUSH ](db);
|
|
4427
|
-
_debugLog(dbName, "- dbOpened (add) -- hdls [" + dbCtx.dbHdl[_DYN_LENGTH ] + "]");
|
|
4428
|
-
},
|
|
4429
|
-
_a[_DYN_REMOVE ] = function (db) {
|
|
4430
|
-
var hdls = dbCtx[_DYN_DB_HDL ];
|
|
4431
|
-
for (var lp = 0; lp < hdls[_DYN_LENGTH ]; lp++) {
|
|
4432
|
-
if (hdls[lp] === db) {
|
|
4433
|
-
hdls[_DYN_SPLICE ](lp, 1);
|
|
4434
|
-
break;
|
|
4435
|
-
}
|
|
4436
|
-
}
|
|
4437
|
-
_debugLog(dbName, "- dbClosed (remove) -- hdls [" + dbCtx.dbHdl[_DYN_LENGTH ] + "]");
|
|
4438
|
-
},
|
|
4439
|
-
_a.isOpen = function () {
|
|
4440
|
-
return dbCtx.dbHdl[_DYN_LENGTH ] > 0;
|
|
4441
|
-
},
|
|
4442
|
-
_a.openHdl = function () {
|
|
4443
|
-
if (dbCtx.dbHdl[_DYN_LENGTH ] > 0) {
|
|
4444
|
-
return dbCtx[_DYN_DB_HDL ][0];
|
|
4445
|
-
}
|
|
4446
|
-
return null;
|
|
4447
|
-
},
|
|
4448
|
-
_a);
|
|
4449
|
-
_dbContext[_DYN_PUSH ](dbCtx);
|
|
4450
|
-
return dbCtx;
|
|
4413
|
+
catch (e) {
|
|
4414
|
+
}
|
|
4415
|
+
return endpoint;
|
|
4451
4416
|
}
|
|
4452
|
-
function
|
|
4453
|
-
|
|
4454
|
-
return dbCtx.sch.queue(startEvent, actionName, evtTimeOut);
|
|
4417
|
+
function isGreaterThanZero(value) {
|
|
4418
|
+
return value >= 0;
|
|
4455
4419
|
}
|
|
4456
|
-
|
|
4457
|
-
|
|
4458
|
-
var
|
|
4459
|
-
|
|
4460
|
-
|
|
4461
|
-
|
|
4462
|
-
|
|
4463
|
-
|
|
4464
|
-
|
|
4420
|
+
var _base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
|
4421
|
+
function base64Encode(data) {
|
|
4422
|
+
var line = "";
|
|
4423
|
+
var input = "";
|
|
4424
|
+
if (isString(data)) {
|
|
4425
|
+
input = data;
|
|
4426
|
+
}
|
|
4427
|
+
else {
|
|
4428
|
+
input = data[_DYN_TO_STRING ]();
|
|
4429
|
+
}
|
|
4430
|
+
var output = "";
|
|
4431
|
+
var chr1, chr2, chr3;
|
|
4432
|
+
var lp = 0;
|
|
4433
|
+
while (lp < input[_DYN_LENGTH ]) {
|
|
4434
|
+
chr1 = input[_DYN_CHAR_CODE_AT ](lp++);
|
|
4435
|
+
chr2 = input[_DYN_CHAR_CODE_AT ](lp++);
|
|
4436
|
+
chr3 = input[_DYN_CHAR_CODE_AT ](lp++);
|
|
4437
|
+
line += _base64[_DYN_CHAR_AT ](chr1 >> 2);
|
|
4438
|
+
line += _base64[_DYN_CHAR_AT ](((chr1 & 3) << 4) | (chr2 >> 4));
|
|
4439
|
+
if (isNaN(chr2)) {
|
|
4440
|
+
line += "==";
|
|
4441
|
+
}
|
|
4442
|
+
else {
|
|
4443
|
+
line += _base64[_DYN_CHAR_AT ](((chr2 & 15) << 2) | (chr3 >> 6));
|
|
4444
|
+
line += isNaN(chr3) ? "=" : _base64[_DYN_CHAR_AT ](chr3 & 63);
|
|
4445
|
+
}
|
|
4446
|
+
}
|
|
4447
|
+
output += line;
|
|
4448
|
+
return output;
|
|
4449
|
+
}
|
|
4450
|
+
function base64Decode(input) {
|
|
4451
|
+
var output = "";
|
|
4452
|
+
var chr1, chr2, chr3;
|
|
4453
|
+
var enc1, enc2, enc3, enc4;
|
|
4454
|
+
var i = 0;
|
|
4455
|
+
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
|
|
4456
|
+
while (i < input[_DYN_LENGTH ]) {
|
|
4457
|
+
enc1 = _base64[_DYN_INDEX_OF ](input[_DYN_CHAR_AT ](i++));
|
|
4458
|
+
enc2 = _base64[_DYN_INDEX_OF ](input[_DYN_CHAR_AT ](i++));
|
|
4459
|
+
enc3 = _base64[_DYN_INDEX_OF ](input[_DYN_CHAR_AT ](i++));
|
|
4460
|
+
enc4 = _base64[_DYN_INDEX_OF ](input[_DYN_CHAR_AT ](i++));
|
|
4461
|
+
chr1 = (enc1 << 2) | (enc2 >> 4);
|
|
4462
|
+
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
|
|
4463
|
+
chr3 = ((enc3 & 3) << 6) | enc4;
|
|
4464
|
+
output = output + String[_DYN_FROM_CHAR_CODE ](chr1);
|
|
4465
|
+
if (enc3 != 64) {
|
|
4466
|
+
output = output + String[_DYN_FROM_CHAR_CODE ](chr2);
|
|
4467
|
+
}
|
|
4468
|
+
if (enc4 != 64) {
|
|
4469
|
+
output = output + String[_DYN_FROM_CHAR_CODE ](chr3);
|
|
4470
|
+
}
|
|
4471
|
+
}
|
|
4472
|
+
var arr = output[_DYN_SPLIT ](",").map(function (c) { return Number(c); });
|
|
4473
|
+
return new Uint8Array(arr);
|
|
4474
|
+
}
|
|
4475
|
+
function getTimeId() {
|
|
4476
|
+
var time = (new Date())[_DYN_GET_TIME ]();
|
|
4477
|
+
var random = strSubstr(generateW3CId(), 0, 8);
|
|
4478
|
+
return time + "." + random;
|
|
4479
|
+
}
|
|
4480
|
+
function getTimeFromId(id) {
|
|
4481
|
+
try {
|
|
4482
|
+
var regex = new RegExp(/\d+\./g);
|
|
4483
|
+
if (id && isString(id) && regex.test(id)) {
|
|
4484
|
+
var arr = id[_DYN_SPLIT ](".");
|
|
4485
|
+
return parseInt(arr[0]);
|
|
4486
|
+
}
|
|
4487
|
+
}
|
|
4488
|
+
catch (e) {
|
|
4489
|
+
}
|
|
4490
|
+
return 0;
|
|
4491
|
+
}
|
|
4492
|
+
var EVT_DISCARD_STR = "eventsDiscarded";
|
|
4493
|
+
var EVT_STORE_STR = "offlineEventsStored";
|
|
4494
|
+
var EVT_SENT_STR = "offlineBatchSent";
|
|
4495
|
+
var BATCH_DROP_STR = "offlineBatchDrop";
|
|
4496
|
+
function forEachMap(map, callback, ordered) {
|
|
4497
|
+
if (map) {
|
|
4498
|
+
var keys = objKeys(map);
|
|
4499
|
+
if (!!ordered && keys) {
|
|
4500
|
+
var time_1 = (new Date())[_DYN_GET_TIME ]();
|
|
4501
|
+
keys = keys.sort(function (a, b) {
|
|
4502
|
+
try {
|
|
4503
|
+
var aTime = getTimeFromId(a) || time_1;
|
|
4504
|
+
var bTime = getTimeFromId(b) || time_1;
|
|
4505
|
+
return aTime - bTime;
|
|
4506
|
+
}
|
|
4507
|
+
catch (e) {
|
|
4465
4508
|
}
|
|
4509
|
+
return -1;
|
|
4510
|
+
});
|
|
4511
|
+
}
|
|
4512
|
+
for (var lp = 0; lp < keys[_DYN_LENGTH ]; lp++) {
|
|
4513
|
+
var key = keys[lp];
|
|
4514
|
+
if (!callback(map[key], key)) {
|
|
4515
|
+
break;
|
|
4466
4516
|
}
|
|
4467
4517
|
}
|
|
4518
|
+
}
|
|
4519
|
+
}
|
|
4520
|
+
function callNotification(mgr, evtName, theArgs) {
|
|
4521
|
+
var manager = (mgr || {});
|
|
4522
|
+
var notifyFunc = manager[evtName];
|
|
4523
|
+
if (notifyFunc) {
|
|
4524
|
+
try {
|
|
4525
|
+
notifyFunc.apply(manager, theArgs);
|
|
4526
|
+
}
|
|
4468
4527
|
catch (e) {
|
|
4469
|
-
dbFactory = null;
|
|
4470
4528
|
}
|
|
4471
4529
|
}
|
|
4472
|
-
return dbFactory;
|
|
4473
4530
|
}
|
|
4474
|
-
function
|
|
4475
|
-
if (
|
|
4476
|
-
|
|
4531
|
+
function batchDropNotification(mgr, cnt, reason) {
|
|
4532
|
+
if (mgr && cnt > 0) {
|
|
4533
|
+
callNotification(mgr, BATCH_DROP_STR, [cnt, reason]);
|
|
4477
4534
|
}
|
|
4535
|
+
return;
|
|
4478
4536
|
}
|
|
4479
|
-
|
|
4480
|
-
|
|
4481
|
-
|
|
4482
|
-
|
|
4483
|
-
|
|
4484
|
-
|
|
4485
|
-
|
|
4486
|
-
|
|
4487
|
-
|
|
4488
|
-
|
|
4489
|
-
|
|
4490
|
-
|
|
4537
|
+
|
|
4538
|
+
var PayloadHelper = /** @class */ (function () {
|
|
4539
|
+
function PayloadHelper(logger) {
|
|
4540
|
+
dynamicProto(PayloadHelper, this, function (_self) {
|
|
4541
|
+
_self.base64ToArr = function (input) {
|
|
4542
|
+
if (!input || !input[_DYN_IS_ARR ]) {
|
|
4543
|
+
return input;
|
|
4544
|
+
}
|
|
4545
|
+
try {
|
|
4546
|
+
var data = input[_DYN_DATA ];
|
|
4547
|
+
if (data) {
|
|
4548
|
+
input[_DYN_DATA ] = base64Decode(data);
|
|
4549
|
+
}
|
|
4550
|
+
return input;
|
|
4551
|
+
}
|
|
4552
|
+
catch (e) {
|
|
4553
|
+
_throwInternal(logger, 1 , 48 , (e && isFunction(e[_DYN_TO_STRING ])) ? e[_DYN_TO_STRING ]() : "Error serializing object", null, true);
|
|
4554
|
+
}
|
|
4555
|
+
return null;
|
|
4491
4556
|
};
|
|
4492
|
-
|
|
4493
|
-
|
|
4494
|
-
return
|
|
4495
|
-
var createdNewDb = false;
|
|
4496
|
-
function _createDbCtx(dbContext, db, dbOpenRequest, isNew, isUpgrade) {
|
|
4497
|
-
var _a;
|
|
4498
|
-
var crDbCtx = (_a = {
|
|
4499
|
-
db: db
|
|
4500
|
-
},
|
|
4501
|
-
_a[_DYN_DB_NAME ] = dbName,
|
|
4502
|
-
_a.dbVersion = dbVersion,
|
|
4503
|
-
_a.ctx = null,
|
|
4504
|
-
_a.isNew = isNew,
|
|
4505
|
-
_a.txn = dbOpenRequest ? dbOpenRequest[_DYN_TRANSACTION ] : null
|
|
4506
|
-
,
|
|
4507
|
-
_a);
|
|
4508
|
-
if (!isUpgrade) {
|
|
4509
|
-
crDbCtx[_DYN_OPEN_STORE ] = function (eventTable, doAction) {
|
|
4510
|
-
return _openStore(crDbCtx, eventTable, doAction);
|
|
4511
|
-
};
|
|
4512
|
-
crDbCtx[_DYN_OPEN_CURSOR ] = function (eventTable, query, cursorFunc) {
|
|
4513
|
-
return _openCursor(crDbCtx, eventTable, query, cursorFunc);
|
|
4514
|
-
};
|
|
4515
|
-
}
|
|
4516
|
-
return crDbCtx;
|
|
4517
|
-
}
|
|
4518
|
-
function _databaseUpgrade(db, dbOpenRequest, ev) {
|
|
4519
|
-
_debugLog(dbName, "db upgrade called");
|
|
4520
|
-
var upgDbCtx = _createDbCtx(null, db, dbOpenRequest, true, true);
|
|
4521
|
-
if (!versionChangeFunc) {
|
|
4522
|
-
try {
|
|
4523
|
-
dbOpenRequest[_DYN_TRANSACTION ] && dbOpenRequest[_DYN_TRANSACTION ].abort();
|
|
4524
|
-
dbOpenRequest.result && dbOpenRequest.result.close();
|
|
4525
|
-
}
|
|
4526
|
-
finally {
|
|
4527
|
-
openReject(new Error(ErrorMessageDbUpgradeRequired));
|
|
4528
|
-
}
|
|
4529
|
-
return;
|
|
4530
|
-
}
|
|
4531
|
-
createdNewDb = true;
|
|
4532
|
-
doAwaitResponse(versionChangeFunc(upgDbCtx), function (response) {
|
|
4533
|
-
if (!response[_DYN_REJECTED ]) {
|
|
4534
|
-
_debugLog(upgDbCtx[_DYN_DB_NAME ], "on version change success");
|
|
4535
|
-
if (!upgDbCtx.txn) {
|
|
4536
|
-
upgDbCtx.txn = dbOpenRequest[_DYN_TRANSACTION ];
|
|
4537
|
-
_debugLog(upgDbCtx[_DYN_DB_NAME ], "added open request");
|
|
4538
|
-
}
|
|
4539
|
-
}
|
|
4540
|
-
else {
|
|
4541
|
-
try {
|
|
4542
|
-
dbOpenRequest[_DYN_TRANSACTION ] && dbOpenRequest[_DYN_TRANSACTION ].abort();
|
|
4543
|
-
}
|
|
4544
|
-
finally {
|
|
4545
|
-
openReject(response.reason);
|
|
4546
|
-
}
|
|
4547
|
-
}
|
|
4548
|
-
});
|
|
4549
|
-
}
|
|
4550
|
-
function _databaseOpen(db, dbOpenRequest) {
|
|
4551
|
-
var opDbCtx = _getDbContext(dbName);
|
|
4552
|
-
opDbCtx.add(db);
|
|
4553
|
-
db.onabort = function (evt) {
|
|
4554
|
-
_debugLog(dbName, "onabort -- closing the Db");
|
|
4555
|
-
opDbCtx[_DYN_REMOVE ](db);
|
|
4556
|
-
};
|
|
4557
|
-
db[_DYN_ONERROR ] = function (evt) {
|
|
4558
|
-
_debugLog(dbName, "onerror -- closing the Db");
|
|
4559
|
-
opDbCtx[_DYN_REMOVE ](db);
|
|
4560
|
-
};
|
|
4561
|
-
db.onclose = function (evt) {
|
|
4562
|
-
_debugLog(dbName, "onclose -- closing the Db");
|
|
4563
|
-
opDbCtx[_DYN_REMOVE ](db);
|
|
4564
|
-
};
|
|
4565
|
-
db.onversionchange = function (evt) {
|
|
4566
|
-
_debugLog(dbName, "onversionchange -- force closing the Db");
|
|
4567
|
-
db.close();
|
|
4568
|
-
opDbCtx[_DYN_REMOVE ](db);
|
|
4569
|
-
};
|
|
4570
|
-
var openDbCtx = null;
|
|
4571
|
-
var dbHdl = null;
|
|
4572
|
-
if (opDbCtx.dbHdl[_DYN_LENGTH ] > 0) {
|
|
4573
|
-
dbHdl = opDbCtx[_DYN_DB_HDL ][0];
|
|
4574
|
-
}
|
|
4575
|
-
openDbCtx = _createDbCtx(opDbCtx, dbHdl, dbOpenRequest, createdNewDb);
|
|
4576
|
-
try {
|
|
4577
|
-
doAwait(processFunc(openDbCtx), openResolve, openReject);
|
|
4578
|
-
}
|
|
4579
|
-
catch (e) {
|
|
4580
|
-
openReject(e);
|
|
4581
|
-
}
|
|
4582
|
-
}
|
|
4583
|
-
var dbCtx = _getDbContext(dbName);
|
|
4584
|
-
if (_dbFactory == null) {
|
|
4585
|
-
openReject(new Error("No available storage factory"));
|
|
4586
|
-
}
|
|
4587
|
-
else if (dbCtx.isOpen()) {
|
|
4588
|
-
var openDbCtx = _createDbCtx(dbCtx, dbCtx.openHdl(), null, false);
|
|
4589
|
-
doAwait(processFunc(openDbCtx), openResolve, openReject);
|
|
4590
|
-
}
|
|
4591
|
-
else {
|
|
4592
|
-
var dbOpenRequest_1 = _dbFactory.open(dbName, dbVersion);
|
|
4593
|
-
if (!dbOpenRequest_1) {
|
|
4594
|
-
throw new Error("missing API");
|
|
4595
|
-
}
|
|
4596
|
-
dbOpenRequest_1.onblocked = function (evt) {
|
|
4597
|
-
_debugLog(dbName, "Db Open Blocked event [" + evtName + "] - " + (dbOpenRequest_1.error || ""));
|
|
4598
|
-
openReject(new Error(ErrorMessageUnableToOpenDb));
|
|
4599
|
-
};
|
|
4600
|
-
dbOpenRequest_1[_DYN_ONERROR ] = function (evt) {
|
|
4601
|
-
_debugLog(dbName, "Db Open Error event [" + evtName + "] - " + (dbOpenRequest_1.error || ""));
|
|
4602
|
-
openReject(new Error(ErrorMessageUnableToOpenDb));
|
|
4603
|
-
};
|
|
4604
|
-
dbOpenRequest_1.onupgradeneeded = function (evt) {
|
|
4605
|
-
_debugLog(dbName, "Db Open Create/Upgrade needed event [" + evtName + "]");
|
|
4606
|
-
try {
|
|
4607
|
-
var db = evt.target[Result] || dbOpenRequest_1.result;
|
|
4608
|
-
if (!db) {
|
|
4609
|
-
_debugLog(dbName, "no db");
|
|
4610
|
-
openReject(new Error(ErrorMessageUnableToOpenDb));
|
|
4611
|
-
return;
|
|
4612
|
-
}
|
|
4613
|
-
_databaseUpgrade(db, dbOpenRequest_1);
|
|
4614
|
-
}
|
|
4615
|
-
catch (e) {
|
|
4616
|
-
_eventReject(dbName, ErrorMessageUnableToOpenDb, openReject, evtName)(e);
|
|
4617
|
-
}
|
|
4618
|
-
};
|
|
4619
|
-
dbOpenRequest_1[_DYN_ONSUCCESS ] = function (evt) {
|
|
4620
|
-
_debugLog(dbName, "Db Open sucess [" + evtName + "]");
|
|
4621
|
-
var db = evt.target[Result];
|
|
4622
|
-
if (!db) {
|
|
4623
|
-
openReject(new Error(ErrorMessageUnableToOpenDb));
|
|
4624
|
-
return;
|
|
4625
|
-
}
|
|
4626
|
-
_databaseOpen(db, dbOpenRequest_1);
|
|
4627
|
-
};
|
|
4628
|
-
}
|
|
4629
|
-
});
|
|
4630
|
-
});
|
|
4631
|
-
};
|
|
4632
|
-
_this.closeDb = function (dbName) {
|
|
4633
|
-
_debugLog(dbName, "close db");
|
|
4634
|
-
_scheduleEvent(dbName, "closeDb", function (evtName) {
|
|
4635
|
-
var dbCtx = _getDbContext(dbName);
|
|
4636
|
-
var dbHdls = dbCtx[_DYN_DB_HDL ];
|
|
4637
|
-
var len = dbHdls[_DYN_LENGTH ];
|
|
4638
|
-
if (len > 0) {
|
|
4639
|
-
for (var lp = 0; lp < len; lp++) {
|
|
4640
|
-
dbHdls[lp].close();
|
|
4641
|
-
}
|
|
4642
|
-
dbCtx[_DYN_DB_HDL ] = [];
|
|
4643
|
-
}
|
|
4644
|
-
return 1;
|
|
4645
|
-
}).catch(function (reason) {
|
|
4646
|
-
});
|
|
4647
|
-
};
|
|
4648
|
-
_this.deleteDb = function (dbName) {
|
|
4649
|
-
if (_dbFactory == null) {
|
|
4650
|
-
return false;
|
|
4651
|
-
}
|
|
4652
|
-
return _scheduleEvent(dbName, "deleteDb", function (evtName) {
|
|
4653
|
-
var dbCtx = _getDbContext(dbName);
|
|
4654
|
-
var dbHdls = dbCtx[_DYN_DB_HDL ];
|
|
4655
|
-
var len = dbHdls[_DYN_LENGTH ];
|
|
4656
|
-
if (len > 0) {
|
|
4657
|
-
_debugLog(dbName, "Db is open [" + len + "] force closing");
|
|
4658
|
-
for (var lp = 0; lp < len; lp++) {
|
|
4659
|
-
dbHdls[lp].close();
|
|
4660
|
-
}
|
|
4661
|
-
dbCtx[_DYN_DB_HDL ] = [];
|
|
4662
|
-
}
|
|
4663
|
-
return createAsyncPromise(function (deleteResolve, deleteReject) {
|
|
4664
|
-
setTimeout(function () {
|
|
4665
|
-
try {
|
|
4666
|
-
_debugLog(dbName, "[" + evtName + "] starting");
|
|
4667
|
-
var dbRequest = _dbFactory.deleteDatabase(dbName);
|
|
4668
|
-
dbRequest[_DYN_ONERROR ] = function (evt) {
|
|
4669
|
-
deleteReject(new Error(ErrorMessageFailedToDeleteDatabase));
|
|
4670
|
-
};
|
|
4671
|
-
dbRequest.onblocked = function (evt) {
|
|
4672
|
-
deleteReject(new Error(ErrorMessageFailedToDeleteDatabase));
|
|
4673
|
-
};
|
|
4674
|
-
dbRequest.onupgradeneeded = function (evt) {
|
|
4675
|
-
deleteReject(new Error(ErrorMessageFailedToDeleteDatabase));
|
|
4676
|
-
};
|
|
4677
|
-
dbRequest[_DYN_ONSUCCESS ] = function (evt) {
|
|
4678
|
-
_debugLog(dbName, "[" + evtName + "] complete");
|
|
4679
|
-
deleteResolve(true);
|
|
4680
|
-
};
|
|
4681
|
-
_debugLog(dbName, "[" + evtName + "] started");
|
|
4682
|
-
}
|
|
4683
|
-
catch (e) {
|
|
4684
|
-
deleteReject(new Error(ErrorMessageFailedToDeleteDatabase + " - " + e));
|
|
4685
|
-
}
|
|
4686
|
-
}, 0);
|
|
4687
|
-
});
|
|
4688
|
-
});
|
|
4689
|
-
};
|
|
4690
|
-
_this.getDbDetails = function (dbName) {
|
|
4691
|
-
return _scheduleEvent(dbName, "getDbDetails", function (evtName) {
|
|
4692
|
-
if (_dbFactory == null || !_dbFactory.databases) {
|
|
4693
|
-
return createAsyncRejectedPromise(new Error(ErrorMessageDbNotSupported));
|
|
4694
|
-
}
|
|
4695
|
-
return createAsyncPromise(function (databasesResolve, databasesReject) {
|
|
4696
|
-
var dbPromise = _dbFactory.databases();
|
|
4697
|
-
dbPromise[_DYN_THEN ](function (databases) {
|
|
4698
|
-
for (var lp = 0; lp < databases[_DYN_LENGTH ]; lp++) {
|
|
4699
|
-
if (databases[lp][_DYN_NAME ] === dbName) {
|
|
4700
|
-
databasesResolve(databases[lp]);
|
|
4701
|
-
return;
|
|
4702
|
-
}
|
|
4703
|
-
}
|
|
4704
|
-
databasesReject(new Error(ErrorMessageDbDoesNotExist));
|
|
4705
|
-
}, databasesReject);
|
|
4706
|
-
});
|
|
4707
|
-
}, 2000);
|
|
4708
|
-
};
|
|
4709
|
-
function _createStoreContext(openDbCtx, eventTable) {
|
|
4710
|
-
var dbHdl = openDbCtx.db || null;
|
|
4711
|
-
var tx = dbHdl && dbHdl[_DYN_TRANSACTION ](eventTable, DbReadWrite);
|
|
4712
|
-
if (tx) {
|
|
4713
|
-
tx.onabort = function () {
|
|
4714
|
-
};
|
|
4715
|
-
tx[_DYN_ONERROR ] = function () {
|
|
4716
|
-
};
|
|
4717
|
-
tx.oncomplete = function () {
|
|
4718
|
-
_debugLog(openDbCtx[_DYN_DB_NAME ], "txn.oncomplete");
|
|
4719
|
-
};
|
|
4720
|
-
return {
|
|
4721
|
-
db: openDbCtx,
|
|
4722
|
-
store: tx.objectStore(eventTable),
|
|
4723
|
-
tx: tx,
|
|
4724
|
-
tbl: eventTable,
|
|
4725
|
-
openCursor: function (query, processFunc) {
|
|
4726
|
-
return _openCursor(openDbCtx, eventTable, query, processFunc);
|
|
4727
|
-
},
|
|
4728
|
-
newTransaction: function (doAction) {
|
|
4729
|
-
return _openStore(openDbCtx, eventTable, doAction);
|
|
4730
|
-
}
|
|
4731
|
-
};
|
|
4732
|
-
}
|
|
4733
|
-
return null;
|
|
4734
|
-
}
|
|
4735
|
-
function _openStore(openDbCtx, eventTable, doAction) {
|
|
4736
|
-
if (!openDbCtx || !openDbCtx.db) {
|
|
4737
|
-
return createAsyncRejectedPromise(new Error(ErrorMessageDbNotOpen));
|
|
4557
|
+
_self.base64ToStr = function (item) {
|
|
4558
|
+
if (!item || !item[_DYN_IS_ARR ]) {
|
|
4559
|
+
return item;
|
|
4738
4560
|
}
|
|
4739
4561
|
try {
|
|
4740
|
-
var
|
|
4741
|
-
if (
|
|
4742
|
-
|
|
4562
|
+
var data = item[_DYN_DATA ];
|
|
4563
|
+
if (data) {
|
|
4564
|
+
item[_DYN_DATA ] = base64Encode(data);
|
|
4743
4565
|
}
|
|
4744
|
-
return
|
|
4566
|
+
return item;
|
|
4745
4567
|
}
|
|
4746
4568
|
catch (e) {
|
|
4747
|
-
|
|
4569
|
+
_throwInternal(logger, 1 , 48 , (e && isFunction(e[_DYN_TO_STRING ])) ? e[_DYN_TO_STRING ]() : "Error serializing object", null, true);
|
|
4748
4570
|
}
|
|
4571
|
+
return null;
|
|
4572
|
+
};
|
|
4573
|
+
});
|
|
4574
|
+
}
|
|
4575
|
+
PayloadHelper.__ieDyn=1;
|
|
4576
|
+
return PayloadHelper;
|
|
4577
|
+
}());
|
|
4578
|
+
|
|
4579
|
+
var EventsToDropAtOneTime$1 = 10;
|
|
4580
|
+
var Version = "1";
|
|
4581
|
+
var DefaultStorageKey = "AIOffline";
|
|
4582
|
+
var DefaultMaxStorageSizeInBytes = 5000000;
|
|
4583
|
+
var MaxCriticalEvtsDropCnt$1 = 2;
|
|
4584
|
+
var DefaultMaxInStorageTime = 10080000;
|
|
4585
|
+
function _isQuotaExceeded(storage, e) {
|
|
4586
|
+
var result = false;
|
|
4587
|
+
if (e instanceof DOMException) {
|
|
4588
|
+
if (e.code === 22 || e[_DYN_NAME ] === "QuotaExceededError" ||
|
|
4589
|
+
e.code === 1014 || e[_DYN_NAME ] === "NS_ERROR_DOM_QUOTA_REACHED") {
|
|
4590
|
+
if (storage && storage[_DYN_LENGTH ] !== 0) {
|
|
4591
|
+
result = true;
|
|
4749
4592
|
}
|
|
4750
|
-
|
|
4751
|
-
if (!openDbCtx || !openDbCtx.db) {
|
|
4752
|
-
return createAsyncRejectedPromise(new Error(ErrorMessageDbNotOpen));
|
|
4753
|
-
}
|
|
4754
|
-
var simpleQuery = null;
|
|
4755
|
-
if (query && isString(query)) {
|
|
4756
|
-
simpleQuery = new SimpleQuery(query);
|
|
4757
|
-
}
|
|
4758
|
-
else if (query && query.isMatch) {
|
|
4759
|
-
simpleQuery = query;
|
|
4760
|
-
}
|
|
4761
|
-
return createAsyncPromise(function (openCursorResolve, openCursorReject) {
|
|
4762
|
-
var values = [];
|
|
4763
|
-
var cursorRequest = null;
|
|
4764
|
-
var queryKeyRange = null;
|
|
4765
|
-
if (simpleQuery && simpleQuery[_DYN_KEY_RANGE ]) {
|
|
4766
|
-
queryKeyRange = simpleQuery[_DYN_KEY_RANGE ]();
|
|
4767
|
-
}
|
|
4768
|
-
var storeCtx = _createStoreContext(openDbCtx, eventTable);
|
|
4769
|
-
if (queryKeyRange) {
|
|
4770
|
-
cursorRequest = storeCtx.store[_DYN_OPEN_CURSOR ](queryKeyRange);
|
|
4771
|
-
}
|
|
4772
|
-
else {
|
|
4773
|
-
cursorRequest = storeCtx.store[_DYN_OPEN_CURSOR ]();
|
|
4774
|
-
}
|
|
4775
|
-
cursorRequest.onerror = _eventReject(storeCtx.db[_DYN_DB_NAME ], ErrorMessageFailedToOpenCursor, openCursorReject, "openCursor");
|
|
4776
|
-
cursorRequest[_DYN_ONSUCCESS ] = function (evt) {
|
|
4777
|
-
var _a;
|
|
4778
|
-
var cursor = evt.target[Result];
|
|
4779
|
-
if (!cursor) {
|
|
4780
|
-
openCursorResolve(values);
|
|
4781
|
-
return;
|
|
4782
|
-
}
|
|
4783
|
-
var processCursorState = (_a = {
|
|
4784
|
-
store: storeCtx,
|
|
4785
|
-
cursor: cursor
|
|
4786
|
-
},
|
|
4787
|
-
_a[_DYN_CONTINUE ] = function () {
|
|
4788
|
-
cursor[_DYN_CONTINUE ]();
|
|
4789
|
-
},
|
|
4790
|
-
_a.done = function () {
|
|
4791
|
-
openCursorResolve(values);
|
|
4792
|
-
}
|
|
4793
|
-
,
|
|
4794
|
-
_a);
|
|
4795
|
-
var value = cursor[_DYN_VALUE ];
|
|
4796
|
-
if (simpleQuery && !simpleQuery.isMatch(value)) {
|
|
4797
|
-
processCursorState[_DYN_CONTINUE ]();
|
|
4798
|
-
return;
|
|
4799
|
-
}
|
|
4800
|
-
if (processFunc) {
|
|
4801
|
-
try {
|
|
4802
|
-
switch (processFunc(processCursorState, value, values)) {
|
|
4803
|
-
case 2 :
|
|
4804
|
-
openCursorResolve(values);
|
|
4805
|
-
break;
|
|
4806
|
-
case 1 :
|
|
4807
|
-
break;
|
|
4808
|
-
case 0 :
|
|
4809
|
-
default:
|
|
4810
|
-
processCursorState[_DYN_CONTINUE ]();
|
|
4811
|
-
break;
|
|
4812
|
-
}
|
|
4813
|
-
}
|
|
4814
|
-
catch (ex) {
|
|
4815
|
-
openCursorReject(ex);
|
|
4816
|
-
}
|
|
4817
|
-
}
|
|
4818
|
-
else {
|
|
4819
|
-
values[_DYN_PUSH ](value);
|
|
4820
|
-
processCursorState[_DYN_CONTINUE ]();
|
|
4821
|
-
}
|
|
4822
|
-
};
|
|
4823
|
-
});
|
|
4824
|
-
}
|
|
4825
|
-
});
|
|
4826
|
-
}
|
|
4827
|
-
IndexedDbHelper.__ieDyn=1;
|
|
4828
|
-
return IndexedDbHelper;
|
|
4829
|
-
}());
|
|
4830
|
-
var SimpleQuery = /** @class */ (function () {
|
|
4831
|
-
function SimpleQuery(theQuery) {
|
|
4832
|
-
var _queryCols = [];
|
|
4833
|
-
var _keyRange = null;
|
|
4834
|
-
dynamicProto(SimpleQuery, this, function (_this) {
|
|
4835
|
-
_this[_DYN_KEY_RANGE ] = function () {
|
|
4836
|
-
return _keyRange;
|
|
4837
|
-
};
|
|
4838
|
-
_this.parseQuery = function (query) {
|
|
4839
|
-
_queryCols = [];
|
|
4840
|
-
if (query) {
|
|
4841
|
-
var items = query[_DYN_SPLIT ](";");
|
|
4842
|
-
for (var lp = 0; lp < items[_DYN_LENGTH ]; lp++) {
|
|
4843
|
-
var item = items[lp];
|
|
4844
|
-
var idx = item[_DYN_INDEX_OF ]("=");
|
|
4845
|
-
if (idx !== -1) {
|
|
4846
|
-
var key = item[_DYN_SUBSTRING ](0, idx);
|
|
4847
|
-
var value = item[_DYN_SUBSTRING ](idx + 1);
|
|
4848
|
-
if (key[_DYN_INDEX_OF ]("#") === 0) {
|
|
4849
|
-
key = key[_DYN_SUBSTRING ](1);
|
|
4850
|
-
if (!_keyRange) {
|
|
4851
|
-
_keyRange = IDBKeyRange.bound(value, value + "\uffff");
|
|
4852
|
-
}
|
|
4853
|
-
}
|
|
4854
|
-
_this.startsWith(key, value);
|
|
4855
|
-
}
|
|
4856
|
-
}
|
|
4857
|
-
}
|
|
4858
|
-
};
|
|
4859
|
-
_this.startsWith = function (columnName, value) {
|
|
4860
|
-
var _a;
|
|
4861
|
-
_queryCols[_DYN_PUSH ]((_a = {},
|
|
4862
|
-
_a[_DYN_NAME ] = columnName,
|
|
4863
|
-
_a[_DYN_VALUE ] = value,
|
|
4864
|
-
_a.type = 0 ,
|
|
4865
|
-
_a));
|
|
4866
|
-
};
|
|
4867
|
-
_this.contains = function (columnName, value) {
|
|
4868
|
-
var _a;
|
|
4869
|
-
_queryCols[_DYN_PUSH ]((_a = {},
|
|
4870
|
-
_a[_DYN_NAME ] = columnName,
|
|
4871
|
-
_a[_DYN_VALUE ] = value,
|
|
4872
|
-
_a.type = 1 ,
|
|
4873
|
-
_a));
|
|
4874
|
-
};
|
|
4875
|
-
_this.isMatch = function (value) {
|
|
4876
|
-
if (!_queryCols || _queryCols[_DYN_LENGTH ] === 0) {
|
|
4877
|
-
return true;
|
|
4878
|
-
}
|
|
4879
|
-
if (!value) {
|
|
4880
|
-
return false;
|
|
4881
|
-
}
|
|
4882
|
-
for (var lp = 0; lp < _queryCols[_DYN_LENGTH ]; lp++) {
|
|
4883
|
-
var query = _queryCols[lp];
|
|
4884
|
-
var chkValue = value[query.name];
|
|
4885
|
-
if (chkValue) {
|
|
4886
|
-
if (query.type === 0 ) {
|
|
4887
|
-
if (chkValue.indexOf(query[_DYN_VALUE ]) !== 0) {
|
|
4888
|
-
return false;
|
|
4889
|
-
}
|
|
4890
|
-
}
|
|
4891
|
-
else if (query.type === 1 ) {
|
|
4892
|
-
if (chkValue.indexOf(query[_DYN_VALUE ]) === -1) {
|
|
4893
|
-
return false;
|
|
4894
|
-
}
|
|
4895
|
-
}
|
|
4896
|
-
}
|
|
4897
|
-
}
|
|
4898
|
-
return true;
|
|
4899
|
-
};
|
|
4900
|
-
if (theQuery) {
|
|
4901
|
-
_this.parseQuery(theQuery);
|
|
4902
|
-
}
|
|
4903
|
-
});
|
|
4593
|
+
}
|
|
4904
4594
|
}
|
|
4905
|
-
|
|
4906
|
-
return SimpleQuery;
|
|
4907
|
-
}());
|
|
4908
|
-
|
|
4909
|
-
var EventsToDropAtOneTime$1 = 10;
|
|
4910
|
-
var StoreVersion = 1;
|
|
4911
|
-
var OrhpanedEventThresholdInMs = 10080000;
|
|
4912
|
-
var UnknowniKey = "Unknown";
|
|
4913
|
-
var ErrorMessageUnableToAddEvent = "DBError: Unable to add event";
|
|
4914
|
-
var MaxCriticalEvtsDropCnt$1 = 2;
|
|
4915
|
-
var DefaultDbName = "AIOffline";
|
|
4916
|
-
var DbVersion = 1;
|
|
4917
|
-
var EventObjectStoreName = "Evts";
|
|
4918
|
-
function isValidPersistenceLevel(value) {
|
|
4919
|
-
return (isNumber(value) && value >= 0 && value <= EventPersistence.Critical);
|
|
4920
|
-
}
|
|
4921
|
-
function _getTime() {
|
|
4922
|
-
return new Date()[_DYN_GET_TIME ]();
|
|
4595
|
+
return result;
|
|
4923
4596
|
}
|
|
4924
|
-
function
|
|
4925
|
-
|
|
4926
|
-
|
|
4927
|
-
|
|
4597
|
+
function _getAvailableStorage(type) {
|
|
4598
|
+
var global = getGlobal() || {};
|
|
4599
|
+
var storage = null;
|
|
4600
|
+
try {
|
|
4601
|
+
storage = (global[type]);
|
|
4602
|
+
if (storage) {
|
|
4603
|
+
var x = "__storage_test__";
|
|
4604
|
+
storage.setItem(x, x);
|
|
4605
|
+
storage[_DYN_REMOVE_ITEM ](x);
|
|
4606
|
+
}
|
|
4928
4607
|
}
|
|
4929
|
-
|
|
4930
|
-
|
|
4931
|
-
|
|
4932
|
-
for (var lp = 0; lp < values[_DYN_LENGTH ]; lp++) {
|
|
4933
|
-
var item = values[lp];
|
|
4934
|
-
if (item && item.evt) {
|
|
4935
|
-
events[_DYN_PUSH ](item.evt);
|
|
4608
|
+
catch (e) {
|
|
4609
|
+
if (!_isQuotaExceeded(storage, e)) {
|
|
4610
|
+
storage = null;
|
|
4936
4611
|
}
|
|
4937
4612
|
}
|
|
4938
|
-
return
|
|
4613
|
+
return storage;
|
|
4939
4614
|
}
|
|
4940
|
-
function
|
|
4941
|
-
|
|
4942
|
-
|
|
4943
|
-
|
|
4944
|
-
|
|
4615
|
+
function _dropEventsUpToPersistence$1(maxCnt, events, eventsToDropAtOneTime) {
|
|
4616
|
+
var dropKeys = [];
|
|
4617
|
+
var persistenceCnt = 0;
|
|
4618
|
+
var droppedEvents = 0;
|
|
4619
|
+
while (persistenceCnt <= maxCnt && droppedEvents < eventsToDropAtOneTime) {
|
|
4620
|
+
forEachMap(events, function (evt, key) {
|
|
4621
|
+
if (evt[_DYN_CRITICAL_CNT ] === persistenceCnt) {
|
|
4622
|
+
dropKeys[_DYN_PUSH ](key);
|
|
4623
|
+
droppedEvents++;
|
|
4624
|
+
}
|
|
4625
|
+
return (droppedEvents < eventsToDropAtOneTime);
|
|
4626
|
+
});
|
|
4627
|
+
if (droppedEvents > 0) {
|
|
4628
|
+
for (var lp = 0; lp < dropKeys[_DYN_LENGTH ]; lp++) {
|
|
4629
|
+
delete events[dropKeys[lp]];
|
|
4630
|
+
}
|
|
4631
|
+
return droppedEvents;
|
|
4945
4632
|
}
|
|
4633
|
+
persistenceCnt++;
|
|
4946
4634
|
}
|
|
4947
|
-
|
|
4635
|
+
return droppedEvents;
|
|
4948
4636
|
}
|
|
4949
|
-
function
|
|
4950
|
-
var
|
|
4951
|
-
|
|
4952
|
-
|
|
4953
|
-
|
|
4637
|
+
function _dropMaxTimeEvents$1(maxStorageTime, events, eventsToDropAtOneTime, mgr) {
|
|
4638
|
+
var dropKeys = [];
|
|
4639
|
+
var droppedEvents = 0;
|
|
4640
|
+
var currentTime = (new Date())[_DYN_GET_TIME ]() + 1;
|
|
4641
|
+
var minStartTime = (currentTime - maxStorageTime);
|
|
4642
|
+
try {
|
|
4643
|
+
forEachMap(events, function (evt, key) {
|
|
4644
|
+
var id = getTimeFromId(key);
|
|
4645
|
+
if (id <= minStartTime) {
|
|
4646
|
+
dropKeys[_DYN_PUSH ](key);
|
|
4647
|
+
droppedEvents++;
|
|
4648
|
+
}
|
|
4649
|
+
return (droppedEvents < eventsToDropAtOneTime);
|
|
4650
|
+
});
|
|
4651
|
+
if (droppedEvents > 0) {
|
|
4652
|
+
for (var lp = 0; lp < dropKeys[_DYN_LENGTH ]; lp++) {
|
|
4653
|
+
delete events[dropKeys[lp]];
|
|
4654
|
+
}
|
|
4655
|
+
if (mgr) {
|
|
4656
|
+
batchDropNotification(mgr, droppedEvents, 3 );
|
|
4657
|
+
}
|
|
4658
|
+
return true;
|
|
4954
4659
|
}
|
|
4955
4660
|
}
|
|
4956
|
-
|
|
4957
|
-
|
|
4958
|
-
|
|
4959
|
-
return function (evt) {
|
|
4960
|
-
return cursorState[_DYN_CONTINUE ]();
|
|
4961
|
-
};
|
|
4962
|
-
}
|
|
4963
|
-
function _cursorDeleteAndContinue(cursorState, value) {
|
|
4964
|
-
var deleteRequest = cursorState.cursor.delete();
|
|
4965
|
-
deleteRequest[_DYN_ONERROR ] = _cursorContinueEvent(cursorState);
|
|
4966
|
-
deleteRequest[_DYN_ONSUCCESS ] = _cursorContinueEvent(cursorState);
|
|
4967
|
-
return 1 ;
|
|
4661
|
+
catch (e) {
|
|
4662
|
+
}
|
|
4663
|
+
return droppedEvents > 0;
|
|
4968
4664
|
}
|
|
4969
|
-
function
|
|
4970
|
-
|
|
4971
|
-
|
|
4972
|
-
|
|
4973
|
-
|
|
4974
|
-
|
|
4975
|
-
|
|
4976
|
-
|
|
4977
|
-
}
|
|
4978
|
-
function _deleteEvents(dbCtx, eventPrefixQuery, shouldDelete) {
|
|
4979
|
-
return dbCtx.openCursor(EventObjectStoreName, eventPrefixQuery, function (deleteCursorState, value, values) {
|
|
4980
|
-
if (shouldDelete(value)) {
|
|
4981
|
-
values[_DYN_PUSH ](value);
|
|
4982
|
-
return _cursorDeleteAndContinue(deleteCursorState);
|
|
4983
|
-
}
|
|
4984
|
-
return 0 ;
|
|
4985
|
-
});
|
|
4986
|
-
}
|
|
4987
|
-
function _dropMaxTimeEvents$1(dbCtx, maxTime) {
|
|
4988
|
-
return createAsyncPromise(function (deleteEvtsResolve, deleteEvtsReject) {
|
|
4989
|
-
return _deleteEvents(dbCtx, null, function (value) {
|
|
4990
|
-
if (!value || !value.evt) {
|
|
4991
|
-
return true;
|
|
4992
|
-
}
|
|
4993
|
-
var addedTime = getTimeFromId(value.id);
|
|
4994
|
-
var minStartTime = _getTime() + 1 - maxTime;
|
|
4995
|
-
if (addedTime <= minStartTime) {
|
|
4996
|
-
return true;
|
|
4997
|
-
}
|
|
4998
|
-
return false;
|
|
4999
|
-
})[_DYN_THEN ](function (values) {
|
|
5000
|
-
deleteEvtsResolve(values);
|
|
5001
|
-
}, deleteEvtsReject);
|
|
5002
|
-
});
|
|
5003
|
-
}
|
|
5004
|
-
function _dropEventsUpToPersistence$1(dbCtx, maxpriorityCnt, maxDropCnt) {
|
|
5005
|
-
return createAsyncPromise(function (dropEventsResolve, dropEventsReject) {
|
|
5006
|
-
var droppedEvents = 0;
|
|
5007
|
-
function _resolveWithDroppedEvents() {
|
|
5008
|
-
dropEventsResolve(droppedEvents);
|
|
5009
|
-
}
|
|
5010
|
-
function _dropEvent(deleteStoreCtx, dropItem) {
|
|
5011
|
-
return createAsyncPromise(function (deleteResolve) {
|
|
5012
|
-
var deleteRequest = deleteStoreCtx.store.delete(dropItem.key);
|
|
5013
|
-
deleteRequest[_DYN_ONSUCCESS ] = function (evt) {
|
|
5014
|
-
droppedEvents++;
|
|
5015
|
-
deleteResolve();
|
|
5016
|
-
};
|
|
5017
|
-
deleteRequest[_DYN_ONERROR ] = function (evt) {
|
|
5018
|
-
deleteResolve();
|
|
5019
|
-
};
|
|
5020
|
-
});
|
|
5021
|
-
}
|
|
5022
|
-
function _processCandidates(dropCandidates) {
|
|
5023
|
-
if (dropCandidates[_DYN_LENGTH ] === 0) {
|
|
5024
|
-
_resolveWithDroppedEvents();
|
|
5025
|
-
return;
|
|
5026
|
-
}
|
|
5027
|
-
dbCtx[_DYN_OPEN_STORE ](EventObjectStoreName, function (deleteStoreCtx) {
|
|
5028
|
-
var deleteEvts = [];
|
|
5029
|
-
for (var lp = 0; lp < dropCandidates[_DYN_LENGTH ]; lp++) {
|
|
5030
|
-
deleteEvts[_DYN_PUSH ](_dropEvent(deleteStoreCtx, dropCandidates[lp]));
|
|
5031
|
-
}
|
|
5032
|
-
return createAsyncAllPromise(deleteEvts)[_DYN_THEN ](_resolveWithDroppedEvents, _resolveWithDroppedEvents);
|
|
5033
|
-
});
|
|
5034
|
-
}
|
|
5035
|
-
var cursorPromise = dbCtx.openCursor(EventObjectStoreName, null, function (cursorState, value, values) {
|
|
5036
|
-
if (value.evt[_DYN_CRITICAL_CNT ] <= maxpriorityCnt) {
|
|
5037
|
-
_addEventByTime(values, value);
|
|
5038
|
-
if (values[_DYN_LENGTH ] > maxDropCnt) {
|
|
5039
|
-
values.splice(values[_DYN_LENGTH ] - 1, 1);
|
|
5040
|
-
}
|
|
5041
|
-
}
|
|
5042
|
-
return 0 ;
|
|
5043
|
-
});
|
|
5044
|
-
cursorPromise[_DYN_THEN ](_processCandidates, function () {
|
|
5045
|
-
dropEventsResolve(0);
|
|
5046
|
-
});
|
|
5047
|
-
});
|
|
5048
|
-
}
|
|
5049
|
-
var IndexedDbProvider = /** @class */ (function () {
|
|
5050
|
-
function IndexedDbProvider(id, unloadHookContainer) {
|
|
5051
|
-
dynamicProto(IndexedDbProvider, this, function (_this) {
|
|
5052
|
-
var _indexedDb = null;
|
|
5053
|
-
var _dbName = null;
|
|
5054
|
-
var _iKey = UnknowniKey;
|
|
5055
|
-
var _storageId = null;
|
|
5056
|
-
var _autoClean = null;
|
|
4665
|
+
var WebStorageProvider = /** @class */ (function () {
|
|
4666
|
+
function WebStorageProvider(storageType, id, unloadHookContainer) {
|
|
4667
|
+
dynamicProto(WebStorageProvider, this, function (_this) {
|
|
4668
|
+
var _storage = null;
|
|
4669
|
+
var _storageKeyPrefix = DefaultStorageKey;
|
|
4670
|
+
var _maxStorageSizeInBytes = DefaultMaxStorageSizeInBytes;
|
|
4671
|
+
var _payloadHelper = null;
|
|
4672
|
+
var _storageKey = null;
|
|
5057
4673
|
var _endpoint = null;
|
|
5058
|
-
var _storageKeyPrefix = null;
|
|
5059
4674
|
var _maxStorageTime = null;
|
|
5060
4675
|
var _eventDropPerTime = null;
|
|
5061
4676
|
var _maxCriticalCnt = null;
|
|
5062
4677
|
var _notificationManager = null;
|
|
5063
4678
|
_this.id = id;
|
|
5064
|
-
|
|
5065
|
-
|
|
5066
|
-
|
|
5067
|
-
|
|
5068
|
-
|
|
4679
|
+
_storage = _getAvailableStorage(storageType) || null;
|
|
4680
|
+
_this["_getDbgPlgTargets"] = function () {
|
|
4681
|
+
return [_storageKey, _maxStorageSizeInBytes, _maxStorageTime];
|
|
4682
|
+
};
|
|
4683
|
+
_this[_DYN_INITIALIZE ] = function (providerContext, endpointUrl) {
|
|
4684
|
+
if (!_storage) {
|
|
5069
4685
|
return false;
|
|
5070
4686
|
}
|
|
5071
|
-
var coreConfig = providerContext[_DYN_ITEM_CTX ].getCfg();
|
|
5072
|
-
var itemCtx = providerContext[_DYN_ITEM_CTX ];
|
|
5073
|
-
var ikey = itemCtx.getCfg()[_DYN_INSTRUMENTATION_KEY ] || coreConfig[_DYN_INSTRUMENTATION_KEY ];
|
|
5074
|
-
if (!isString(ikey)) {
|
|
5075
|
-
return;
|
|
5076
|
-
}
|
|
5077
|
-
_iKey = ikey;
|
|
5078
4687
|
var storageConfig = providerContext[_DYN_STORAGE_CONFIG ];
|
|
5079
|
-
|
|
4688
|
+
var itemCtx = providerContext[_DYN_ITEM_CTX ];
|
|
4689
|
+
_payloadHelper = new PayloadHelper(itemCtx[_DYN_DIAG_LOG ]());
|
|
4690
|
+
_endpoint = getEndpointDomain(endpointUrl || providerContext[_DYN_ENDPOINT ]);
|
|
4691
|
+
var autoClean = !!storageConfig.autoClean;
|
|
5080
4692
|
_notificationManager = providerContext[_DYN_NOTIFICATION_MGR ];
|
|
5081
|
-
_endpoint = getEndpointDomain(providerContext[_DYN_ENDPOINT ]);
|
|
5082
|
-
_autoClean = !!storageConfig.autoClean;
|
|
5083
|
-
_storageKeyPrefix = storageConfig[_DYN_STORAGE_KEY_PREFIX ] || DefaultDbName;
|
|
5084
|
-
_dbName = _storageKeyPrefix + "_" + DbVersion + "_" + _endpoint;
|
|
5085
4693
|
var unloadHook = onConfigChange(storageConfig, function () {
|
|
5086
|
-
|
|
4694
|
+
_maxStorageSizeInBytes = storageConfig.maxStorageSizeInBytes || DefaultMaxStorageSizeInBytes;
|
|
4695
|
+
_maxStorageTime = storageConfig[_DYN_IN_STORAGE_MAX_TIME ] || DefaultMaxInStorageTime;
|
|
5087
4696
|
var dropNum = storageConfig[_DYN__EVENTS_TO_DROP_PER_2 ];
|
|
5088
4697
|
_eventDropPerTime = isNotNullOrUndefined(dropNum) ? dropNum : EventsToDropAtOneTime$1;
|
|
5089
4698
|
_maxCriticalCnt = storageConfig[_DYN_MAX_CRITICAL_EVTS_DR3 ] || MaxCriticalEvtsDropCnt$1;
|
|
5090
4699
|
});
|
|
5091
4700
|
unloadHookContainer && unloadHookContainer.add(unloadHook);
|
|
5092
|
-
|
|
5093
|
-
|
|
5094
|
-
|
|
5095
|
-
|
|
5096
|
-
})[_DYN_THEN ](function (value) {
|
|
5097
|
-
}, function (reason) {
|
|
5098
|
-
diagLog.warnToConsole("IndexedDbProvider failed to initialize - " + (reason || "<unknown>"));
|
|
5099
|
-
_indexedDb = null;
|
|
5100
|
-
});
|
|
5101
|
-
});
|
|
4701
|
+
_storageKeyPrefix = storageConfig[_DYN_STORAGE_KEY_PREFIX ] || DefaultStorageKey;
|
|
4702
|
+
_storageKey = _storageKeyPrefix + "_" + Version + "_" + _endpoint;
|
|
4703
|
+
if (autoClean) {
|
|
4704
|
+
_this.clean();
|
|
5102
4705
|
}
|
|
5103
4706
|
return true;
|
|
5104
4707
|
};
|
|
5105
|
-
_this["_getDbgPlgTargets"] = function () {
|
|
5106
|
-
return [_dbName, _endpoint, _maxStorageTime, _indexedDb];
|
|
5107
|
-
};
|
|
5108
4708
|
_this[_DYN_SUPPORTS_SYNC_REQUES4 ] = function () {
|
|
5109
|
-
return
|
|
4709
|
+
return true;
|
|
5110
4710
|
};
|
|
5111
4711
|
_this.getAllEvents = function (cnt) {
|
|
5112
|
-
|
|
5113
|
-
|
|
4712
|
+
try {
|
|
4713
|
+
if (!_storage) {
|
|
4714
|
+
return;
|
|
4715
|
+
}
|
|
4716
|
+
return _getEvts(cnt);
|
|
4717
|
+
}
|
|
4718
|
+
catch (e) {
|
|
4719
|
+
return createAsyncRejectedPromise(e);
|
|
5114
4720
|
}
|
|
5115
|
-
return _openDb(function (dbCtx) {
|
|
5116
|
-
return createAsyncPromise(function (allEventsResolve, allEventsReject) {
|
|
5117
|
-
_getAllEvents(dbCtx, null, cnt)[_DYN_THEN ](function (values) {
|
|
5118
|
-
allEventsResolve(_getEvents(values));
|
|
5119
|
-
}, allEventsReject);
|
|
5120
|
-
});
|
|
5121
|
-
});
|
|
5122
4721
|
};
|
|
5123
4722
|
_this[_DYN_GET_NEXT_BATCH ] = function () {
|
|
5124
|
-
|
|
5125
|
-
|
|
4723
|
+
try {
|
|
4724
|
+
if (!_storage) {
|
|
4725
|
+
return;
|
|
4726
|
+
}
|
|
4727
|
+
return _getEvts(1, true);
|
|
5126
4728
|
}
|
|
5127
|
-
|
|
5128
|
-
return
|
|
5129
|
-
_getAllEvents(dbCtx, null, 1)[_DYN_THEN ](function (values) {
|
|
5130
|
-
allEventsResolve(_getEvents(values));
|
|
5131
|
-
}, allEventsReject);
|
|
5132
|
-
});
|
|
5133
|
-
});
|
|
5134
|
-
};
|
|
5135
|
-
_this[_DYN_ADD_EVENT ] = function (key, item, itemCtx) {
|
|
5136
|
-
if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]()) {
|
|
5137
|
-
return item;
|
|
4729
|
+
catch (e) {
|
|
4730
|
+
return createAsyncRejectedPromise(e);
|
|
5138
4731
|
}
|
|
5139
|
-
item.id = item.id || getTimeId();
|
|
5140
|
-
item[_DYN_CRITICAL_CNT ] = item[_DYN_CRITICAL_CNT ] || 0;
|
|
5141
|
-
return _openDb(function (dbCtx) {
|
|
5142
|
-
var eventKey = key || item.id;
|
|
5143
|
-
var dbItem = {
|
|
5144
|
-
id: eventKey,
|
|
5145
|
-
evt: item,
|
|
5146
|
-
tm: _getTime(),
|
|
5147
|
-
v: StoreVersion
|
|
5148
|
-
};
|
|
5149
|
-
return _addDbEvent(dbCtx, dbItem, true);
|
|
5150
|
-
});
|
|
5151
4732
|
};
|
|
5152
|
-
|
|
5153
|
-
|
|
5154
|
-
|
|
5155
|
-
|
|
5156
|
-
|
|
5157
|
-
|
|
5158
|
-
|
|
5159
|
-
|
|
5160
|
-
|
|
5161
|
-
var deleteRequest = cursorState.cursor.delete();
|
|
5162
|
-
deleteRequest[_DYN_ONERROR ] = _cursorContinueEvent(cursorState);
|
|
5163
|
-
deleteRequest[_DYN_ONSUCCESS ] = function () {
|
|
5164
|
-
removedEvents[_DYN_PUSH ](value.evt);
|
|
5165
|
-
cursorState[_DYN_CONTINUE ]();
|
|
5166
|
-
};
|
|
5167
|
-
return 1 ;
|
|
4733
|
+
function _getEvts(cnt, ordered) {
|
|
4734
|
+
var allItems = [];
|
|
4735
|
+
var theStore = _fetchStoredDb(_storageKey).db;
|
|
4736
|
+
if (theStore) {
|
|
4737
|
+
var events = theStore[_DYN_EVTS ];
|
|
4738
|
+
forEachMap(events, function (evt) {
|
|
4739
|
+
if (evt) {
|
|
4740
|
+
if (evt[_DYN_IS_ARR ]) {
|
|
4741
|
+
evt = _payloadHelper.base64ToArr(evt);
|
|
5168
4742
|
}
|
|
5169
|
-
|
|
5170
|
-
});
|
|
5171
|
-
})[_DYN_THEN ](function () {
|
|
5172
|
-
removeEventsResolve(removedEvents);
|
|
5173
|
-
}, function (reason) {
|
|
5174
|
-
removeEventsResolve(removedEvents);
|
|
5175
|
-
});
|
|
5176
|
-
});
|
|
5177
|
-
};
|
|
5178
|
-
_this[_DYN_CLEAR ] = function (disable) {
|
|
5179
|
-
if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]() || !!disable) {
|
|
5180
|
-
return [];
|
|
5181
|
-
}
|
|
5182
|
-
return createAsyncPromise(function (clearResolve, clearReject) {
|
|
5183
|
-
_openDb(function (dbCtx) {
|
|
5184
|
-
return _deleteEvents(dbCtx, null, function (value) {
|
|
5185
|
-
return true;
|
|
5186
|
-
});
|
|
5187
|
-
})[_DYN_THEN ](function (values) {
|
|
5188
|
-
clearResolve(_getEvents(values));
|
|
5189
|
-
}, function (reason) {
|
|
5190
|
-
clearResolve([]);
|
|
5191
|
-
});
|
|
5192
|
-
});
|
|
5193
|
-
};
|
|
5194
|
-
_this.clean = function (disable) {
|
|
5195
|
-
if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]() || !!disable) {
|
|
5196
|
-
return false;
|
|
5197
|
-
}
|
|
5198
|
-
return createAsyncPromise(function (cleanResolve, cleanReject) {
|
|
5199
|
-
_openDb(function (dbCtx) {
|
|
5200
|
-
if (dbCtx.isNew) {
|
|
5201
|
-
return [];
|
|
4743
|
+
allItems[_DYN_PUSH ](evt);
|
|
5202
4744
|
}
|
|
5203
|
-
|
|
5204
|
-
|
|
5205
|
-
var cnt = value && value[_DYN_LENGTH ];
|
|
5206
|
-
if (_notificationManager && cnt) {
|
|
5207
|
-
batchDropNotification(_notificationManager, cnt, 3 );
|
|
4745
|
+
if (cnt && allItems && allItems[_DYN_LENGTH ] == cnt) {
|
|
4746
|
+
return false;
|
|
5208
4747
|
}
|
|
5209
|
-
|
|
5210
|
-
},
|
|
5211
|
-
|
|
5212
|
-
|
|
5213
|
-
|
|
4748
|
+
return true;
|
|
4749
|
+
}, ordered);
|
|
4750
|
+
}
|
|
4751
|
+
return allItems;
|
|
4752
|
+
}
|
|
4753
|
+
_this[_DYN_ADD_EVENT ] = function (key, evt, itemCtx) {
|
|
4754
|
+
try {
|
|
4755
|
+
var theStore = _fetchStoredDb(_storageKey);
|
|
4756
|
+
evt.id = evt.id || getTimeId();
|
|
4757
|
+
evt[_DYN_CRITICAL_CNT ] = evt[_DYN_CRITICAL_CNT ] || 0;
|
|
4758
|
+
var events = theStore.db[_DYN_EVTS ];
|
|
4759
|
+
var id_1 = evt.id;
|
|
4760
|
+
if (evt && evt[_DYN_IS_ARR ]) {
|
|
4761
|
+
evt = _payloadHelper.base64ToStr(evt);
|
|
4762
|
+
}
|
|
4763
|
+
var preDroppedCnt = 0;
|
|
4764
|
+
while (evt) {
|
|
4765
|
+
events[id_1] = evt;
|
|
4766
|
+
if (_updateStoredDb(theStore)) {
|
|
4767
|
+
if (preDroppedCnt && _notificationManager) {
|
|
4768
|
+
batchDropNotification(_notificationManager, preDroppedCnt, 2 );
|
|
4769
|
+
}
|
|
4770
|
+
return evt;
|
|
4771
|
+
}
|
|
4772
|
+
delete events[id_1];
|
|
4773
|
+
var droppedCnt = _dropEventsUpToPersistence$1(_maxCriticalCnt, events, _eventDropPerTime);
|
|
4774
|
+
preDroppedCnt += droppedCnt;
|
|
4775
|
+
if (!droppedCnt) {
|
|
4776
|
+
return createAsyncRejectedPromise(new Error("Unable to free up event space"));
|
|
4777
|
+
}
|
|
4778
|
+
}
|
|
4779
|
+
}
|
|
4780
|
+
catch (e) {
|
|
4781
|
+
return createAsyncRejectedPromise(e);
|
|
4782
|
+
}
|
|
4783
|
+
};
|
|
4784
|
+
_this[_DYN_REMOVE_EVENTS ] = function (evts) {
|
|
4785
|
+
try {
|
|
4786
|
+
var theStore = _fetchStoredDb(_storageKey, false);
|
|
4787
|
+
var currentDb = theStore.db;
|
|
4788
|
+
if (currentDb) {
|
|
4789
|
+
var events = currentDb[_DYN_EVTS ];
|
|
4790
|
+
try {
|
|
4791
|
+
for (var i = 0; i < evts[_DYN_LENGTH ]; ++i) {
|
|
4792
|
+
var evt = evts[i];
|
|
4793
|
+
delete events[evt.id];
|
|
4794
|
+
}
|
|
4795
|
+
if (_updateStoredDb(theStore)) {
|
|
4796
|
+
return evts;
|
|
4797
|
+
}
|
|
4798
|
+
}
|
|
4799
|
+
catch (e) {
|
|
4800
|
+
}
|
|
4801
|
+
evts = _clearDatabase(theStore.key);
|
|
4802
|
+
}
|
|
4803
|
+
return evts;
|
|
4804
|
+
}
|
|
4805
|
+
catch (e) {
|
|
4806
|
+
return createAsyncRejectedPromise(e);
|
|
4807
|
+
}
|
|
4808
|
+
};
|
|
4809
|
+
_this[_DYN_CLEAR ] = function () {
|
|
4810
|
+
try {
|
|
4811
|
+
var removedItems_1 = [];
|
|
4812
|
+
var theStore = _fetchStoredDb(_storageKey, false);
|
|
4813
|
+
var storedDb = theStore.db;
|
|
4814
|
+
if (storedDb) {
|
|
4815
|
+
var events_1 = storedDb[_DYN_EVTS ];
|
|
4816
|
+
forEachMap(events_1, function (evt) {
|
|
4817
|
+
if (evt) {
|
|
4818
|
+
delete events_1[evt.id];
|
|
4819
|
+
removedItems_1[_DYN_PUSH ](evt);
|
|
4820
|
+
}
|
|
4821
|
+
return true;
|
|
4822
|
+
});
|
|
4823
|
+
_updateStoredDb(theStore);
|
|
4824
|
+
}
|
|
4825
|
+
return removedItems_1;
|
|
4826
|
+
}
|
|
4827
|
+
catch (e) {
|
|
4828
|
+
return createAsyncRejectedPromise(e);
|
|
4829
|
+
}
|
|
4830
|
+
};
|
|
4831
|
+
_this.clean = function () {
|
|
4832
|
+
var storeDetails = _fetchStoredDb(_storageKey, false);
|
|
4833
|
+
var currentDb = storeDetails.db;
|
|
4834
|
+
if (currentDb) {
|
|
4835
|
+
var events = currentDb[_DYN_EVTS ];
|
|
4836
|
+
try {
|
|
4837
|
+
var isDropped = _dropMaxTimeEvents$1(_maxStorageTime, events, _eventDropPerTime, _notificationManager);
|
|
4838
|
+
if (isDropped) {
|
|
4839
|
+
return _updateStoredDb(storeDetails);
|
|
4840
|
+
}
|
|
4841
|
+
return true;
|
|
4842
|
+
}
|
|
4843
|
+
catch (e) {
|
|
4844
|
+
}
|
|
4845
|
+
return false;
|
|
4846
|
+
}
|
|
5214
4847
|
};
|
|
5215
4848
|
_this[_DYN_TEARDOWN ] = function () {
|
|
5216
|
-
|
|
5217
|
-
|
|
4849
|
+
try {
|
|
4850
|
+
var theStore = _fetchStoredDb(_storageKey, false);
|
|
4851
|
+
var storedDb = theStore.db;
|
|
4852
|
+
if (storedDb) {
|
|
4853
|
+
storedDb[_DYN_LAST_ACCESS_TIME ] = 0;
|
|
4854
|
+
_updateStoredDb(theStore, false);
|
|
4855
|
+
}
|
|
4856
|
+
}
|
|
4857
|
+
catch (e) {
|
|
5218
4858
|
}
|
|
5219
4859
|
};
|
|
5220
|
-
function
|
|
5221
|
-
|
|
5222
|
-
|
|
4860
|
+
function _newStore(dbKey, db) {
|
|
4861
|
+
return {
|
|
4862
|
+
key: dbKey,
|
|
4863
|
+
db: db
|
|
4864
|
+
};
|
|
4865
|
+
}
|
|
4866
|
+
function _fetchStoredDb(dbKey, returnDefault) {
|
|
4867
|
+
var _a;
|
|
4868
|
+
if (returnDefault === void 0) { returnDefault = true; }
|
|
4869
|
+
var dbToStore = null;
|
|
4870
|
+
if (_storage) {
|
|
4871
|
+
var previousDb = _storage.getItem(dbKey);
|
|
4872
|
+
if (previousDb) {
|
|
5223
4873
|
try {
|
|
5224
|
-
|
|
4874
|
+
dbToStore = getJSON().parse(previousDb);
|
|
5225
4875
|
}
|
|
5226
4876
|
catch (e) {
|
|
5227
|
-
|
|
4877
|
+
_storage[_DYN_REMOVE_ITEM ](dbKey);
|
|
5228
4878
|
}
|
|
5229
|
-
|
|
5230
|
-
|
|
4879
|
+
}
|
|
4880
|
+
if (returnDefault && !dbToStore) {
|
|
4881
|
+
dbToStore = (_a = {
|
|
4882
|
+
evts: {}
|
|
4883
|
+
},
|
|
4884
|
+
_a[_DYN_LAST_ACCESS_TIME ] = 0,
|
|
4885
|
+
_a);
|
|
4886
|
+
}
|
|
5231
4887
|
}
|
|
5232
|
-
|
|
5233
|
-
|
|
5234
|
-
|
|
5235
|
-
|
|
5236
|
-
|
|
5237
|
-
|
|
5238
|
-
|
|
5239
|
-
|
|
5240
|
-
|
|
5241
|
-
});
|
|
4888
|
+
return _newStore(dbKey, dbToStore);
|
|
4889
|
+
}
|
|
4890
|
+
function _updateStoredDb(jsonStore, updateLastAccessTime) {
|
|
4891
|
+
if (updateLastAccessTime === void 0) { updateLastAccessTime = true; }
|
|
4892
|
+
var dbToStore = jsonStore.db;
|
|
4893
|
+
if (dbToStore) {
|
|
4894
|
+
if (updateLastAccessTime) {
|
|
4895
|
+
dbToStore.lastAccessTime = (new Date())[_DYN_GET_TIME ]();
|
|
4896
|
+
}
|
|
5242
4897
|
}
|
|
5243
|
-
|
|
4898
|
+
try {
|
|
4899
|
+
var jsonString = getJSON().stringify(dbToStore);
|
|
4900
|
+
if (jsonString[_DYN_LENGTH ] > _maxStorageSizeInBytes) {
|
|
4901
|
+
return false;
|
|
4902
|
+
}
|
|
4903
|
+
_storage && _storage.setItem(jsonStore.key, jsonString);
|
|
4904
|
+
}
|
|
4905
|
+
catch (e) {
|
|
4906
|
+
return false;
|
|
4907
|
+
}
|
|
4908
|
+
return true;
|
|
5244
4909
|
}
|
|
5245
|
-
function
|
|
5246
|
-
|
|
5247
|
-
|
|
5248
|
-
|
|
5249
|
-
|
|
5250
|
-
|
|
4910
|
+
function _clearDatabase(dbKey) {
|
|
4911
|
+
var removedItems = [];
|
|
4912
|
+
var storeDetails = _fetchStoredDb(dbKey, false);
|
|
4913
|
+
var currentDb = storeDetails.db;
|
|
4914
|
+
if (currentDb) {
|
|
4915
|
+
var events = currentDb[_DYN_EVTS ];
|
|
4916
|
+
try {
|
|
4917
|
+
forEachMap(events, function (evt) {
|
|
4918
|
+
if (evt) {
|
|
4919
|
+
removedItems[_DYN_PUSH ](evt);
|
|
5251
4920
|
}
|
|
5252
|
-
|
|
5253
|
-
}, function (reason) {
|
|
5254
|
-
droppedFunc(0);
|
|
4921
|
+
return true;
|
|
5255
4922
|
});
|
|
5256
4923
|
}
|
|
5257
|
-
|
|
5258
|
-
dbCtx[_DYN_OPEN_STORE ](EventObjectStoreName, function (storeCtx) {
|
|
5259
|
-
var request = storeCtx.store.put(dbItem);
|
|
5260
|
-
request[_DYN_ONSUCCESS ] = function (evt) {
|
|
5261
|
-
addEventResolve(dbItem.evt);
|
|
5262
|
-
};
|
|
5263
|
-
request[_DYN_ONERROR ] = function (evt) {
|
|
5264
|
-
if (!doRetry) {
|
|
5265
|
-
addEventReject(new Error(ErrorMessageUnableToAddEvent));
|
|
5266
|
-
return;
|
|
5267
|
-
}
|
|
5268
|
-
function _retryAddEvent(dropCount) {
|
|
5269
|
-
if (dropCount === 0) {
|
|
5270
|
-
addEventReject(new Error(ErrorMessageUnableToAddEvent));
|
|
5271
|
-
}
|
|
5272
|
-
_addDbEvent(dbCtx, dbItem, false)[_DYN_THEN ](function (theItem) {
|
|
5273
|
-
addEventResolve(dbItem.evt);
|
|
5274
|
-
}, function () {
|
|
5275
|
-
addEventReject(new Error(ErrorMessageUnableToAddEvent));
|
|
5276
|
-
});
|
|
5277
|
-
}
|
|
5278
|
-
dropEvents(function (droppedCount) {
|
|
5279
|
-
if (droppedCount > 0) {
|
|
5280
|
-
_retryAddEvent(droppedCount);
|
|
5281
|
-
}
|
|
5282
|
-
else {
|
|
5283
|
-
addEventReject(new Error(ErrorMessageUnableToAddEvent));
|
|
5284
|
-
}
|
|
5285
|
-
});
|
|
5286
|
-
};
|
|
5287
|
-
}).catch(function (e) {
|
|
5288
|
-
addEventReject(e);
|
|
5289
|
-
});
|
|
4924
|
+
catch (e) {
|
|
5290
4925
|
}
|
|
5291
|
-
|
|
5292
|
-
}
|
|
4926
|
+
_storage && _storage[_DYN_REMOVE_ITEM ](storeDetails.key);
|
|
4927
|
+
}
|
|
4928
|
+
return removedItems;
|
|
5293
4929
|
}
|
|
5294
4930
|
});
|
|
5295
4931
|
}
|
|
5296
|
-
|
|
5297
|
-
return
|
|
4932
|
+
WebStorageProvider.__ieDyn=1;
|
|
4933
|
+
return WebStorageProvider;
|
|
5298
4934
|
}());
|
|
5299
4935
|
|
|
5300
|
-
|
|
5301
|
-
|
|
5302
|
-
|
|
5303
|
-
|
|
5304
|
-
|
|
5305
|
-
|
|
5306
|
-
|
|
5307
|
-
|
|
5308
|
-
|
|
5309
|
-
|
|
5310
|
-
|
|
5311
|
-
|
|
5312
|
-
|
|
5313
|
-
|
|
5314
|
-
|
|
5315
|
-
|
|
5316
|
-
|
|
5317
|
-
|
|
5318
|
-
var line = "";
|
|
5319
|
-
var input = "";
|
|
5320
|
-
if (isString(data)) {
|
|
5321
|
-
input = data;
|
|
5322
|
-
}
|
|
5323
|
-
else {
|
|
5324
|
-
input = data[_DYN_TO_STRING ]();
|
|
5325
|
-
}
|
|
5326
|
-
var output = "";
|
|
5327
|
-
var chr1, chr2, chr3;
|
|
5328
|
-
var lp = 0;
|
|
5329
|
-
while (lp < input[_DYN_LENGTH ]) {
|
|
5330
|
-
chr1 = input[_DYN_CHAR_CODE_AT ](lp++);
|
|
5331
|
-
chr2 = input[_DYN_CHAR_CODE_AT ](lp++);
|
|
5332
|
-
chr3 = input[_DYN_CHAR_CODE_AT ](lp++);
|
|
5333
|
-
line += _base64[_DYN_CHAR_AT ](chr1 >> 2);
|
|
5334
|
-
line += _base64[_DYN_CHAR_AT ](((chr1 & 3) << 4) | (chr2 >> 4));
|
|
5335
|
-
if (isNaN(chr2)) {
|
|
5336
|
-
line += "==";
|
|
5337
|
-
}
|
|
5338
|
-
else {
|
|
5339
|
-
line += _base64[_DYN_CHAR_AT ](((chr2 & 15) << 2) | (chr3 >> 6));
|
|
5340
|
-
line += isNaN(chr3) ? "=" : _base64[_DYN_CHAR_AT ](chr3 & 63);
|
|
5341
|
-
}
|
|
5342
|
-
}
|
|
5343
|
-
output += line;
|
|
5344
|
-
return output;
|
|
5345
|
-
}
|
|
5346
|
-
function base64Decode(input) {
|
|
5347
|
-
var output = "";
|
|
5348
|
-
var chr1, chr2, chr3;
|
|
5349
|
-
var enc1, enc2, enc3, enc4;
|
|
5350
|
-
var i = 0;
|
|
5351
|
-
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
|
|
5352
|
-
while (i < input[_DYN_LENGTH ]) {
|
|
5353
|
-
enc1 = _base64[_DYN_INDEX_OF ](input[_DYN_CHAR_AT ](i++));
|
|
5354
|
-
enc2 = _base64[_DYN_INDEX_OF ](input[_DYN_CHAR_AT ](i++));
|
|
5355
|
-
enc3 = _base64[_DYN_INDEX_OF ](input[_DYN_CHAR_AT ](i++));
|
|
5356
|
-
enc4 = _base64[_DYN_INDEX_OF ](input[_DYN_CHAR_AT ](i++));
|
|
5357
|
-
chr1 = (enc1 << 2) | (enc2 >> 4);
|
|
5358
|
-
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
|
|
5359
|
-
chr3 = ((enc3 & 3) << 6) | enc4;
|
|
5360
|
-
output = output + String[_DYN_FROM_CHAR_CODE ](chr1);
|
|
5361
|
-
if (enc3 != 64) {
|
|
5362
|
-
output = output + String[_DYN_FROM_CHAR_CODE ](chr2);
|
|
5363
|
-
}
|
|
5364
|
-
if (enc4 != 64) {
|
|
5365
|
-
output = output + String[_DYN_FROM_CHAR_CODE ](chr3);
|
|
5366
|
-
}
|
|
5367
|
-
}
|
|
5368
|
-
var arr = output[_DYN_SPLIT ](",").map(function (c) { return Number(c); });
|
|
5369
|
-
return new Uint8Array(arr);
|
|
5370
|
-
}
|
|
5371
|
-
function getTimeId() {
|
|
5372
|
-
var time = (new Date())[_DYN_GET_TIME ]();
|
|
5373
|
-
var random = strSubstr(generateW3CId(), 0, 8);
|
|
5374
|
-
return time + "." + random;
|
|
5375
|
-
}
|
|
5376
|
-
function getTimeFromId(id) {
|
|
5377
|
-
try {
|
|
5378
|
-
var regex = new RegExp(/\d+\./g);
|
|
5379
|
-
if (id && isString(id) && regex.test(id)) {
|
|
5380
|
-
var arr = id[_DYN_SPLIT ](".");
|
|
5381
|
-
return parseInt(arr[0]);
|
|
4936
|
+
var IndexedDBNames = ["indexedDB" ];
|
|
4937
|
+
var DbReadWrite = "readwrite";
|
|
4938
|
+
var Result = "result";
|
|
4939
|
+
var ErrorMessageUnableToOpenDb = "DBError: Unable to open database";
|
|
4940
|
+
var ErrorMessageDbUpgradeRequired = "DBError: Database upgrade required";
|
|
4941
|
+
var ErrorMessageDbNotOpen = "Database is not open";
|
|
4942
|
+
var ErrorMessageDbDoesNotExist = "DBError: Database does not exist";
|
|
4943
|
+
var ErrorMessageFailedToDeleteDatabase = "DBError: Failed to delete the database";
|
|
4944
|
+
var ErrorMessageDbNotSupported = "DBError: Feature not supported";
|
|
4945
|
+
var ErrorMessageFailedToOpenCursor = "DBError: Failed to Open Cursor";
|
|
4946
|
+
var _dbContext = [];
|
|
4947
|
+
function _getDbContext(dbName, diagLog) {
|
|
4948
|
+
var _a;
|
|
4949
|
+
var dbCtx = null;
|
|
4950
|
+
for (var lp = 0; lp < _dbContext[_DYN_LENGTH ]; lp++) {
|
|
4951
|
+
dbCtx = _dbContext[lp];
|
|
4952
|
+
if (dbCtx[_DYN_NAME ] === dbName) {
|
|
4953
|
+
return dbCtx;
|
|
5382
4954
|
}
|
|
5383
4955
|
}
|
|
5384
|
-
|
|
5385
|
-
|
|
5386
|
-
|
|
5387
|
-
|
|
5388
|
-
|
|
5389
|
-
|
|
5390
|
-
|
|
5391
|
-
|
|
5392
|
-
|
|
5393
|
-
|
|
5394
|
-
|
|
5395
|
-
|
|
5396
|
-
|
|
5397
|
-
|
|
5398
|
-
try {
|
|
5399
|
-
var aTime = getTimeFromId(a) || time_1;
|
|
5400
|
-
var bTime = getTimeFromId(b) || time_1;
|
|
5401
|
-
return aTime - bTime;
|
|
5402
|
-
}
|
|
5403
|
-
catch (e) {
|
|
4956
|
+
dbCtx = (_a = {},
|
|
4957
|
+
_a[_DYN_NAME ] = dbName,
|
|
4958
|
+
_a.sch = createTaskScheduler(createAsyncPromise, "IndexedDbHelper[" + dbName + "]"),
|
|
4959
|
+
_a.dbHdl = [],
|
|
4960
|
+
_a.add = function (db) {
|
|
4961
|
+
dbCtx.dbHdl[_DYN_PUSH ](db);
|
|
4962
|
+
_debugLog(dbName, "- dbOpened (add) -- hdls [" + dbCtx.dbHdl[_DYN_LENGTH ] + "]");
|
|
4963
|
+
},
|
|
4964
|
+
_a[_DYN_REMOVE ] = function (db) {
|
|
4965
|
+
var hdls = dbCtx[_DYN_DB_HDL ];
|
|
4966
|
+
for (var lp = 0; lp < hdls[_DYN_LENGTH ]; lp++) {
|
|
4967
|
+
if (hdls[lp] === db) {
|
|
4968
|
+
hdls[_DYN_SPLICE ](lp, 1);
|
|
4969
|
+
break;
|
|
5404
4970
|
}
|
|
5405
|
-
return -1;
|
|
5406
|
-
});
|
|
5407
|
-
}
|
|
5408
|
-
for (var lp = 0; lp < keys[_DYN_LENGTH ]; lp++) {
|
|
5409
|
-
var key = keys[lp];
|
|
5410
|
-
if (!callback(map[key], key)) {
|
|
5411
|
-
break;
|
|
5412
4971
|
}
|
|
5413
|
-
|
|
5414
|
-
|
|
4972
|
+
_debugLog(dbName, "- dbClosed (remove) -- hdls [" + dbCtx.dbHdl[_DYN_LENGTH ] + "]");
|
|
4973
|
+
},
|
|
4974
|
+
_a.isOpen = function () {
|
|
4975
|
+
return dbCtx.dbHdl[_DYN_LENGTH ] > 0;
|
|
4976
|
+
},
|
|
4977
|
+
_a.openHdl = function () {
|
|
4978
|
+
if (dbCtx.dbHdl[_DYN_LENGTH ] > 0) {
|
|
4979
|
+
return dbCtx[_DYN_DB_HDL ][0];
|
|
4980
|
+
}
|
|
4981
|
+
return null;
|
|
4982
|
+
},
|
|
4983
|
+
_a);
|
|
4984
|
+
_dbContext[_DYN_PUSH ](dbCtx);
|
|
4985
|
+
return dbCtx;
|
|
5415
4986
|
}
|
|
5416
|
-
function
|
|
5417
|
-
var
|
|
5418
|
-
|
|
5419
|
-
|
|
4987
|
+
function _scheduleEvent(dbName, actionName, startEvent, evtTimeOut) {
|
|
4988
|
+
var dbCtx = _getDbContext(dbName);
|
|
4989
|
+
return dbCtx.sch.queue(startEvent, actionName, evtTimeOut);
|
|
4990
|
+
}
|
|
4991
|
+
function getDbFactory() {
|
|
4992
|
+
var global = getGlobal() || {};
|
|
4993
|
+
var dbFactory = null;
|
|
4994
|
+
if (global) {
|
|
5420
4995
|
try {
|
|
5421
|
-
|
|
4996
|
+
for (var lp = 0; lp < IndexedDBNames[_DYN_LENGTH ]; lp++) {
|
|
4997
|
+
dbFactory = global[IndexedDBNames[lp]];
|
|
4998
|
+
if (dbFactory && isFunction(dbFactory.open)) {
|
|
4999
|
+
return dbFactory;
|
|
5000
|
+
}
|
|
5001
|
+
}
|
|
5422
5002
|
}
|
|
5423
5003
|
catch (e) {
|
|
5004
|
+
dbFactory = null;
|
|
5424
5005
|
}
|
|
5425
5006
|
}
|
|
5007
|
+
return dbFactory;
|
|
5426
5008
|
}
|
|
5427
|
-
function
|
|
5428
|
-
if (
|
|
5429
|
-
|
|
5009
|
+
function _debugLog(dbName, message) {
|
|
5010
|
+
if (getInst("QUnit")) {
|
|
5011
|
+
console && console.log("IndexedDbHelper [" + dbName + "] " + message);
|
|
5430
5012
|
}
|
|
5431
|
-
return;
|
|
5432
5013
|
}
|
|
5433
|
-
|
|
5434
|
-
|
|
5435
|
-
|
|
5436
|
-
|
|
5437
|
-
|
|
5438
|
-
|
|
5439
|
-
|
|
5014
|
+
function _eventReject(dbName, rejectMessage, rejectFunc, evtName) {
|
|
5015
|
+
return function (evt) {
|
|
5016
|
+
rejectFunc(new Error(rejectMessage));
|
|
5017
|
+
_debugLog(dbName, "[" + evtName + "] event rejected");
|
|
5018
|
+
};
|
|
5019
|
+
}
|
|
5020
|
+
var IndexedDbHelper = /** @class */ (function () {
|
|
5021
|
+
function IndexedDbHelper(diagLog) {
|
|
5022
|
+
var _dbFactory = getDbFactory() || null;
|
|
5023
|
+
dynamicProto(IndexedDbHelper, this, function (_this) {
|
|
5024
|
+
_this[_DYN_IS_AVAILABLE ] = function () {
|
|
5025
|
+
return !!_dbFactory;
|
|
5026
|
+
};
|
|
5027
|
+
_this.openDb = function (dbName, dbVersion, processFunc, versionChangeFunc) {
|
|
5028
|
+
return _scheduleEvent(dbName, "openDb", function (evtName) {
|
|
5029
|
+
return createAsyncPromise(function (openResolve, openReject) {
|
|
5030
|
+
var createdNewDb = false;
|
|
5031
|
+
function _createDbCtx(dbContext, db, dbOpenRequest, isNew, isUpgrade) {
|
|
5032
|
+
var _a;
|
|
5033
|
+
var crDbCtx = (_a = {
|
|
5034
|
+
db: db
|
|
5035
|
+
},
|
|
5036
|
+
_a[_DYN_DB_NAME ] = dbName,
|
|
5037
|
+
_a.dbVersion = dbVersion,
|
|
5038
|
+
_a.ctx = null,
|
|
5039
|
+
_a.isNew = isNew,
|
|
5040
|
+
_a.txn = dbOpenRequest ? dbOpenRequest[_DYN_TRANSACTION ] : null
|
|
5041
|
+
,
|
|
5042
|
+
_a);
|
|
5043
|
+
if (!isUpgrade) {
|
|
5044
|
+
crDbCtx[_DYN_OPEN_STORE ] = function (eventTable, doAction) {
|
|
5045
|
+
return _openStore(crDbCtx, eventTable, doAction);
|
|
5046
|
+
};
|
|
5047
|
+
crDbCtx[_DYN_OPEN_CURSOR ] = function (eventTable, query, cursorFunc) {
|
|
5048
|
+
return _openCursor(crDbCtx, eventTable, query, cursorFunc);
|
|
5049
|
+
};
|
|
5050
|
+
}
|
|
5051
|
+
return crDbCtx;
|
|
5052
|
+
}
|
|
5053
|
+
function _databaseUpgrade(db, dbOpenRequest, ev) {
|
|
5054
|
+
_debugLog(dbName, "db upgrade called");
|
|
5055
|
+
var upgDbCtx = _createDbCtx(null, db, dbOpenRequest, true, true);
|
|
5056
|
+
if (!versionChangeFunc) {
|
|
5057
|
+
try {
|
|
5058
|
+
dbOpenRequest[_DYN_TRANSACTION ] && dbOpenRequest[_DYN_TRANSACTION ].abort();
|
|
5059
|
+
dbOpenRequest.result && dbOpenRequest.result.close();
|
|
5060
|
+
}
|
|
5061
|
+
finally {
|
|
5062
|
+
openReject(new Error(ErrorMessageDbUpgradeRequired));
|
|
5063
|
+
}
|
|
5064
|
+
return;
|
|
5065
|
+
}
|
|
5066
|
+
createdNewDb = true;
|
|
5067
|
+
doAwaitResponse(versionChangeFunc(upgDbCtx), function (response) {
|
|
5068
|
+
if (!response[_DYN_REJECTED ]) {
|
|
5069
|
+
_debugLog(upgDbCtx[_DYN_DB_NAME ], "on version change success");
|
|
5070
|
+
if (!upgDbCtx.txn) {
|
|
5071
|
+
upgDbCtx.txn = dbOpenRequest[_DYN_TRANSACTION ];
|
|
5072
|
+
_debugLog(upgDbCtx[_DYN_DB_NAME ], "added open request");
|
|
5073
|
+
}
|
|
5074
|
+
}
|
|
5075
|
+
else {
|
|
5076
|
+
try {
|
|
5077
|
+
dbOpenRequest[_DYN_TRANSACTION ] && dbOpenRequest[_DYN_TRANSACTION ].abort();
|
|
5078
|
+
}
|
|
5079
|
+
finally {
|
|
5080
|
+
openReject(response.reason);
|
|
5081
|
+
}
|
|
5082
|
+
}
|
|
5083
|
+
});
|
|
5084
|
+
}
|
|
5085
|
+
function _databaseOpen(db, dbOpenRequest) {
|
|
5086
|
+
var opDbCtx = _getDbContext(dbName);
|
|
5087
|
+
opDbCtx.add(db);
|
|
5088
|
+
db.onabort = function (evt) {
|
|
5089
|
+
_debugLog(dbName, "onabort -- closing the Db");
|
|
5090
|
+
opDbCtx[_DYN_REMOVE ](db);
|
|
5091
|
+
};
|
|
5092
|
+
db[_DYN_ONERROR ] = function (evt) {
|
|
5093
|
+
_debugLog(dbName, "onerror -- closing the Db");
|
|
5094
|
+
opDbCtx[_DYN_REMOVE ](db);
|
|
5095
|
+
};
|
|
5096
|
+
db.onclose = function (evt) {
|
|
5097
|
+
_debugLog(dbName, "onclose -- closing the Db");
|
|
5098
|
+
opDbCtx[_DYN_REMOVE ](db);
|
|
5099
|
+
};
|
|
5100
|
+
db.onversionchange = function (evt) {
|
|
5101
|
+
_debugLog(dbName, "onversionchange -- force closing the Db");
|
|
5102
|
+
db.close();
|
|
5103
|
+
opDbCtx[_DYN_REMOVE ](db);
|
|
5104
|
+
};
|
|
5105
|
+
var openDbCtx = null;
|
|
5106
|
+
var dbHdl = null;
|
|
5107
|
+
if (opDbCtx.dbHdl[_DYN_LENGTH ] > 0) {
|
|
5108
|
+
dbHdl = opDbCtx[_DYN_DB_HDL ][0];
|
|
5109
|
+
}
|
|
5110
|
+
openDbCtx = _createDbCtx(opDbCtx, dbHdl, dbOpenRequest, createdNewDb);
|
|
5111
|
+
try {
|
|
5112
|
+
doAwait(processFunc(openDbCtx), openResolve, openReject);
|
|
5113
|
+
}
|
|
5114
|
+
catch (e) {
|
|
5115
|
+
openReject(e);
|
|
5116
|
+
}
|
|
5117
|
+
}
|
|
5118
|
+
var dbCtx = _getDbContext(dbName);
|
|
5119
|
+
if (_dbFactory == null) {
|
|
5120
|
+
openReject(new Error("No available storage factory"));
|
|
5121
|
+
}
|
|
5122
|
+
else if (dbCtx.isOpen()) {
|
|
5123
|
+
var openDbCtx = _createDbCtx(dbCtx, dbCtx.openHdl(), null, false);
|
|
5124
|
+
doAwait(processFunc(openDbCtx), openResolve, openReject);
|
|
5125
|
+
}
|
|
5126
|
+
else {
|
|
5127
|
+
var dbOpenRequest_1 = _dbFactory.open(dbName, dbVersion);
|
|
5128
|
+
if (!dbOpenRequest_1) {
|
|
5129
|
+
throw new Error("missing API");
|
|
5130
|
+
}
|
|
5131
|
+
dbOpenRequest_1.onblocked = function (evt) {
|
|
5132
|
+
_debugLog(dbName, "Db Open Blocked event [" + evtName + "] - " + (dbOpenRequest_1.error || ""));
|
|
5133
|
+
openReject(new Error(ErrorMessageUnableToOpenDb));
|
|
5134
|
+
};
|
|
5135
|
+
dbOpenRequest_1[_DYN_ONERROR ] = function (evt) {
|
|
5136
|
+
_debugLog(dbName, "Db Open Error event [" + evtName + "] - " + (dbOpenRequest_1.error || ""));
|
|
5137
|
+
openReject(new Error(ErrorMessageUnableToOpenDb));
|
|
5138
|
+
};
|
|
5139
|
+
dbOpenRequest_1.onupgradeneeded = function (evt) {
|
|
5140
|
+
_debugLog(dbName, "Db Open Create/Upgrade needed event [" + evtName + "]");
|
|
5141
|
+
try {
|
|
5142
|
+
var db = evt.target[Result] || dbOpenRequest_1.result;
|
|
5143
|
+
if (!db) {
|
|
5144
|
+
_debugLog(dbName, "no db");
|
|
5145
|
+
openReject(new Error(ErrorMessageUnableToOpenDb));
|
|
5146
|
+
return;
|
|
5147
|
+
}
|
|
5148
|
+
_databaseUpgrade(db, dbOpenRequest_1);
|
|
5149
|
+
}
|
|
5150
|
+
catch (e) {
|
|
5151
|
+
_eventReject(dbName, ErrorMessageUnableToOpenDb, openReject, evtName)(e);
|
|
5152
|
+
}
|
|
5153
|
+
};
|
|
5154
|
+
dbOpenRequest_1[_DYN_ONSUCCESS ] = function (evt) {
|
|
5155
|
+
_debugLog(dbName, "Db Open sucess [" + evtName + "]");
|
|
5156
|
+
var db = evt.target[Result];
|
|
5157
|
+
if (!db) {
|
|
5158
|
+
openReject(new Error(ErrorMessageUnableToOpenDb));
|
|
5159
|
+
return;
|
|
5160
|
+
}
|
|
5161
|
+
_databaseOpen(db, dbOpenRequest_1);
|
|
5162
|
+
};
|
|
5163
|
+
}
|
|
5164
|
+
});
|
|
5165
|
+
});
|
|
5166
|
+
};
|
|
5167
|
+
_this.closeDb = function (dbName) {
|
|
5168
|
+
_debugLog(dbName, "close db");
|
|
5169
|
+
_scheduleEvent(dbName, "closeDb", function (evtName) {
|
|
5170
|
+
var dbCtx = _getDbContext(dbName);
|
|
5171
|
+
var dbHdls = dbCtx[_DYN_DB_HDL ];
|
|
5172
|
+
var len = dbHdls[_DYN_LENGTH ];
|
|
5173
|
+
if (len > 0) {
|
|
5174
|
+
for (var lp = 0; lp < len; lp++) {
|
|
5175
|
+
dbHdls[lp].close();
|
|
5176
|
+
}
|
|
5177
|
+
dbCtx[_DYN_DB_HDL ] = [];
|
|
5178
|
+
}
|
|
5179
|
+
return 1;
|
|
5180
|
+
}).catch(function (reason) {
|
|
5181
|
+
});
|
|
5182
|
+
};
|
|
5183
|
+
_this.deleteDb = function (dbName) {
|
|
5184
|
+
if (_dbFactory == null) {
|
|
5185
|
+
return false;
|
|
5186
|
+
}
|
|
5187
|
+
return _scheduleEvent(dbName, "deleteDb", function (evtName) {
|
|
5188
|
+
var dbCtx = _getDbContext(dbName);
|
|
5189
|
+
var dbHdls = dbCtx[_DYN_DB_HDL ];
|
|
5190
|
+
var len = dbHdls[_DYN_LENGTH ];
|
|
5191
|
+
if (len > 0) {
|
|
5192
|
+
_debugLog(dbName, "Db is open [" + len + "] force closing");
|
|
5193
|
+
for (var lp = 0; lp < len; lp++) {
|
|
5194
|
+
dbHdls[lp].close();
|
|
5195
|
+
}
|
|
5196
|
+
dbCtx[_DYN_DB_HDL ] = [];
|
|
5197
|
+
}
|
|
5198
|
+
return createAsyncPromise(function (deleteResolve, deleteReject) {
|
|
5199
|
+
setTimeout(function () {
|
|
5200
|
+
try {
|
|
5201
|
+
_debugLog(dbName, "[" + evtName + "] starting");
|
|
5202
|
+
var dbRequest = _dbFactory.deleteDatabase(dbName);
|
|
5203
|
+
dbRequest[_DYN_ONERROR ] = function (evt) {
|
|
5204
|
+
deleteReject(new Error(ErrorMessageFailedToDeleteDatabase));
|
|
5205
|
+
};
|
|
5206
|
+
dbRequest.onblocked = function (evt) {
|
|
5207
|
+
deleteReject(new Error(ErrorMessageFailedToDeleteDatabase));
|
|
5208
|
+
};
|
|
5209
|
+
dbRequest.onupgradeneeded = function (evt) {
|
|
5210
|
+
deleteReject(new Error(ErrorMessageFailedToDeleteDatabase));
|
|
5211
|
+
};
|
|
5212
|
+
dbRequest[_DYN_ONSUCCESS ] = function (evt) {
|
|
5213
|
+
_debugLog(dbName, "[" + evtName + "] complete");
|
|
5214
|
+
deleteResolve(true);
|
|
5215
|
+
};
|
|
5216
|
+
_debugLog(dbName, "[" + evtName + "] started");
|
|
5217
|
+
}
|
|
5218
|
+
catch (e) {
|
|
5219
|
+
deleteReject(new Error(ErrorMessageFailedToDeleteDatabase + " - " + e));
|
|
5220
|
+
}
|
|
5221
|
+
}, 0);
|
|
5222
|
+
});
|
|
5223
|
+
});
|
|
5224
|
+
};
|
|
5225
|
+
_this.getDbDetails = function (dbName) {
|
|
5226
|
+
return _scheduleEvent(dbName, "getDbDetails", function (evtName) {
|
|
5227
|
+
if (_dbFactory == null || !_dbFactory.databases) {
|
|
5228
|
+
return createAsyncRejectedPromise(new Error(ErrorMessageDbNotSupported));
|
|
5229
|
+
}
|
|
5230
|
+
return createAsyncPromise(function (databasesResolve, databasesReject) {
|
|
5231
|
+
var dbPromise = _dbFactory.databases();
|
|
5232
|
+
dbPromise[_DYN_THEN ](function (databases) {
|
|
5233
|
+
for (var lp = 0; lp < databases[_DYN_LENGTH ]; lp++) {
|
|
5234
|
+
if (databases[lp][_DYN_NAME ] === dbName) {
|
|
5235
|
+
databasesResolve(databases[lp]);
|
|
5236
|
+
return;
|
|
5237
|
+
}
|
|
5238
|
+
}
|
|
5239
|
+
databasesReject(new Error(ErrorMessageDbDoesNotExist));
|
|
5240
|
+
}, databasesReject);
|
|
5241
|
+
});
|
|
5242
|
+
}, 2000);
|
|
5243
|
+
};
|
|
5244
|
+
function _createStoreContext(openDbCtx, eventTable) {
|
|
5245
|
+
var dbHdl = openDbCtx.db || null;
|
|
5246
|
+
var tx = dbHdl && dbHdl[_DYN_TRANSACTION ](eventTable, DbReadWrite);
|
|
5247
|
+
if (tx) {
|
|
5248
|
+
tx.onabort = function () {
|
|
5249
|
+
};
|
|
5250
|
+
tx[_DYN_ONERROR ] = function () {
|
|
5251
|
+
};
|
|
5252
|
+
tx.oncomplete = function () {
|
|
5253
|
+
_debugLog(openDbCtx[_DYN_DB_NAME ], "txn.oncomplete");
|
|
5254
|
+
};
|
|
5255
|
+
return {
|
|
5256
|
+
db: openDbCtx,
|
|
5257
|
+
store: tx.objectStore(eventTable),
|
|
5258
|
+
tx: tx,
|
|
5259
|
+
tbl: eventTable,
|
|
5260
|
+
openCursor: function (query, processFunc) {
|
|
5261
|
+
return _openCursor(openDbCtx, eventTable, query, processFunc);
|
|
5262
|
+
},
|
|
5263
|
+
newTransaction: function (doAction) {
|
|
5264
|
+
return _openStore(openDbCtx, eventTable, doAction);
|
|
5265
|
+
}
|
|
5266
|
+
};
|
|
5267
|
+
}
|
|
5268
|
+
return null;
|
|
5269
|
+
}
|
|
5270
|
+
function _openStore(openDbCtx, eventTable, doAction) {
|
|
5271
|
+
if (!openDbCtx || !openDbCtx.db) {
|
|
5272
|
+
return createAsyncRejectedPromise(new Error(ErrorMessageDbNotOpen));
|
|
5440
5273
|
}
|
|
5441
5274
|
try {
|
|
5442
|
-
var
|
|
5443
|
-
if (
|
|
5444
|
-
|
|
5275
|
+
var result = doAction(_createStoreContext(openDbCtx, eventTable));
|
|
5276
|
+
if (isPromiseLike(result)) {
|
|
5277
|
+
return result;
|
|
5445
5278
|
}
|
|
5446
|
-
return
|
|
5279
|
+
return createAsyncResolvedPromise(result);
|
|
5447
5280
|
}
|
|
5448
5281
|
catch (e) {
|
|
5449
|
-
|
|
5282
|
+
return createAsyncRejectedPromise(e);
|
|
5450
5283
|
}
|
|
5451
|
-
|
|
5452
|
-
|
|
5453
|
-
|
|
5454
|
-
|
|
5455
|
-
return item;
|
|
5284
|
+
}
|
|
5285
|
+
function _openCursor(openDbCtx, eventTable, query, processFunc) {
|
|
5286
|
+
if (!openDbCtx || !openDbCtx.db) {
|
|
5287
|
+
return createAsyncRejectedPromise(new Error(ErrorMessageDbNotOpen));
|
|
5456
5288
|
}
|
|
5457
|
-
|
|
5458
|
-
|
|
5459
|
-
|
|
5460
|
-
|
|
5289
|
+
var simpleQuery = null;
|
|
5290
|
+
if (query && isString(query)) {
|
|
5291
|
+
simpleQuery = new SimpleQuery(query);
|
|
5292
|
+
}
|
|
5293
|
+
else if (query && query.isMatch) {
|
|
5294
|
+
simpleQuery = query;
|
|
5295
|
+
}
|
|
5296
|
+
return createAsyncPromise(function (openCursorResolve, openCursorReject) {
|
|
5297
|
+
var values = [];
|
|
5298
|
+
var cursorRequest = null;
|
|
5299
|
+
var queryKeyRange = null;
|
|
5300
|
+
if (simpleQuery && simpleQuery[_DYN_KEY_RANGE ]) {
|
|
5301
|
+
queryKeyRange = simpleQuery[_DYN_KEY_RANGE ]();
|
|
5302
|
+
}
|
|
5303
|
+
var storeCtx = _createStoreContext(openDbCtx, eventTable);
|
|
5304
|
+
if (queryKeyRange) {
|
|
5305
|
+
cursorRequest = storeCtx.store[_DYN_OPEN_CURSOR ](queryKeyRange);
|
|
5306
|
+
}
|
|
5307
|
+
else {
|
|
5308
|
+
cursorRequest = storeCtx.store[_DYN_OPEN_CURSOR ]();
|
|
5309
|
+
}
|
|
5310
|
+
cursorRequest.onerror = _eventReject(storeCtx.db[_DYN_DB_NAME ], ErrorMessageFailedToOpenCursor, openCursorReject, "openCursor");
|
|
5311
|
+
cursorRequest[_DYN_ONSUCCESS ] = function (evt) {
|
|
5312
|
+
var _a;
|
|
5313
|
+
var cursor = evt.target[Result];
|
|
5314
|
+
if (!cursor) {
|
|
5315
|
+
openCursorResolve(values);
|
|
5316
|
+
return;
|
|
5317
|
+
}
|
|
5318
|
+
var processCursorState = (_a = {
|
|
5319
|
+
store: storeCtx,
|
|
5320
|
+
cursor: cursor
|
|
5321
|
+
},
|
|
5322
|
+
_a[_DYN_CONTINUE ] = function () {
|
|
5323
|
+
cursor[_DYN_CONTINUE ]();
|
|
5324
|
+
},
|
|
5325
|
+
_a.done = function () {
|
|
5326
|
+
openCursorResolve(values);
|
|
5327
|
+
}
|
|
5328
|
+
,
|
|
5329
|
+
_a);
|
|
5330
|
+
var value = cursor[_DYN_VALUE ];
|
|
5331
|
+
if (simpleQuery && !simpleQuery.isMatch(value)) {
|
|
5332
|
+
processCursorState[_DYN_CONTINUE ]();
|
|
5333
|
+
return;
|
|
5334
|
+
}
|
|
5335
|
+
if (processFunc) {
|
|
5336
|
+
try {
|
|
5337
|
+
switch (processFunc(processCursorState, value, values)) {
|
|
5338
|
+
case 2 :
|
|
5339
|
+
openCursorResolve(values);
|
|
5340
|
+
break;
|
|
5341
|
+
case 1 :
|
|
5342
|
+
break;
|
|
5343
|
+
case 0 :
|
|
5344
|
+
default:
|
|
5345
|
+
processCursorState[_DYN_CONTINUE ]();
|
|
5346
|
+
break;
|
|
5347
|
+
}
|
|
5348
|
+
}
|
|
5349
|
+
catch (ex) {
|
|
5350
|
+
openCursorReject(ex);
|
|
5351
|
+
}
|
|
5352
|
+
}
|
|
5353
|
+
else {
|
|
5354
|
+
values[_DYN_PUSH ](value);
|
|
5355
|
+
processCursorState[_DYN_CONTINUE ]();
|
|
5356
|
+
}
|
|
5357
|
+
};
|
|
5358
|
+
});
|
|
5359
|
+
}
|
|
5360
|
+
});
|
|
5361
|
+
}
|
|
5362
|
+
IndexedDbHelper.__ieDyn=1;
|
|
5363
|
+
return IndexedDbHelper;
|
|
5364
|
+
}());
|
|
5365
|
+
var SimpleQuery = /** @class */ (function () {
|
|
5366
|
+
function SimpleQuery(theQuery) {
|
|
5367
|
+
var _queryCols = [];
|
|
5368
|
+
var _keyRange = null;
|
|
5369
|
+
dynamicProto(SimpleQuery, this, function (_this) {
|
|
5370
|
+
_this[_DYN_KEY_RANGE ] = function () {
|
|
5371
|
+
return _keyRange;
|
|
5372
|
+
};
|
|
5373
|
+
_this.parseQuery = function (query) {
|
|
5374
|
+
_queryCols = [];
|
|
5375
|
+
if (query) {
|
|
5376
|
+
var items = query[_DYN_SPLIT ](";");
|
|
5377
|
+
for (var lp = 0; lp < items[_DYN_LENGTH ]; lp++) {
|
|
5378
|
+
var item = items[lp];
|
|
5379
|
+
var idx = item[_DYN_INDEX_OF ]("=");
|
|
5380
|
+
if (idx !== -1) {
|
|
5381
|
+
var key = item[_DYN_SUBSTRING ](0, idx);
|
|
5382
|
+
var value = item[_DYN_SUBSTRING ](idx + 1);
|
|
5383
|
+
if (key[_DYN_INDEX_OF ]("#") === 0) {
|
|
5384
|
+
key = key[_DYN_SUBSTRING ](1);
|
|
5385
|
+
if (!_keyRange) {
|
|
5386
|
+
_keyRange = IDBKeyRange.bound(value, value + "\uffff");
|
|
5387
|
+
}
|
|
5388
|
+
}
|
|
5389
|
+
_this.startsWith(key, value);
|
|
5390
|
+
}
|
|
5461
5391
|
}
|
|
5462
|
-
return item;
|
|
5463
5392
|
}
|
|
5464
|
-
|
|
5465
|
-
|
|
5393
|
+
};
|
|
5394
|
+
_this.startsWith = function (columnName, value) {
|
|
5395
|
+
var _a;
|
|
5396
|
+
_queryCols[_DYN_PUSH ]((_a = {},
|
|
5397
|
+
_a[_DYN_NAME ] = columnName,
|
|
5398
|
+
_a[_DYN_VALUE ] = value,
|
|
5399
|
+
_a.type = 0 ,
|
|
5400
|
+
_a));
|
|
5401
|
+
};
|
|
5402
|
+
_this.contains = function (columnName, value) {
|
|
5403
|
+
var _a;
|
|
5404
|
+
_queryCols[_DYN_PUSH ]((_a = {},
|
|
5405
|
+
_a[_DYN_NAME ] = columnName,
|
|
5406
|
+
_a[_DYN_VALUE ] = value,
|
|
5407
|
+
_a.type = 1 ,
|
|
5408
|
+
_a));
|
|
5409
|
+
};
|
|
5410
|
+
_this.isMatch = function (value) {
|
|
5411
|
+
if (!_queryCols || _queryCols[_DYN_LENGTH ] === 0) {
|
|
5412
|
+
return true;
|
|
5466
5413
|
}
|
|
5467
|
-
|
|
5414
|
+
if (!value) {
|
|
5415
|
+
return false;
|
|
5416
|
+
}
|
|
5417
|
+
for (var lp = 0; lp < _queryCols[_DYN_LENGTH ]; lp++) {
|
|
5418
|
+
var query = _queryCols[lp];
|
|
5419
|
+
var chkValue = value[query.name];
|
|
5420
|
+
if (chkValue) {
|
|
5421
|
+
if (query.type === 0 ) {
|
|
5422
|
+
if (chkValue.indexOf(query[_DYN_VALUE ]) !== 0) {
|
|
5423
|
+
return false;
|
|
5424
|
+
}
|
|
5425
|
+
}
|
|
5426
|
+
else if (query.type === 1 ) {
|
|
5427
|
+
if (chkValue.indexOf(query[_DYN_VALUE ]) === -1) {
|
|
5428
|
+
return false;
|
|
5429
|
+
}
|
|
5430
|
+
}
|
|
5431
|
+
}
|
|
5432
|
+
}
|
|
5433
|
+
return true;
|
|
5468
5434
|
};
|
|
5435
|
+
if (theQuery) {
|
|
5436
|
+
_this.parseQuery(theQuery);
|
|
5437
|
+
}
|
|
5469
5438
|
});
|
|
5470
5439
|
}
|
|
5471
|
-
|
|
5472
|
-
return
|
|
5440
|
+
SimpleQuery.__ieDyn=1;
|
|
5441
|
+
return SimpleQuery;
|
|
5473
5442
|
}());
|
|
5474
5443
|
|
|
5475
5444
|
var EventsToDropAtOneTime = 10;
|
|
5476
|
-
var
|
|
5477
|
-
var
|
|
5478
|
-
var
|
|
5445
|
+
var StoreVersion = 1;
|
|
5446
|
+
var OrhpanedEventThresholdInMs = 10080000;
|
|
5447
|
+
var UnknowniKey = "Unknown";
|
|
5448
|
+
var ErrorMessageUnableToAddEvent = "DBError: Unable to add event";
|
|
5479
5449
|
var MaxCriticalEvtsDropCnt = 2;
|
|
5480
|
-
var
|
|
5481
|
-
|
|
5482
|
-
|
|
5483
|
-
|
|
5484
|
-
|
|
5485
|
-
|
|
5486
|
-
|
|
5487
|
-
|
|
5488
|
-
|
|
5450
|
+
var DefaultDbName = "AIOffline";
|
|
5451
|
+
var DbVersion = 1;
|
|
5452
|
+
var EventObjectStoreName = "Evts";
|
|
5453
|
+
function _getTime() {
|
|
5454
|
+
return new Date()[_DYN_GET_TIME ]();
|
|
5455
|
+
}
|
|
5456
|
+
function _createDb(db) {
|
|
5457
|
+
if (!db.objectStoreNames.contains(EventObjectStoreName)) {
|
|
5458
|
+
var evtStore = db.createObjectStore(EventObjectStoreName, { keyPath: "id" });
|
|
5459
|
+
evtStore.createIndex("criticalCnt", "criticalCnt", { unique: false });
|
|
5460
|
+
}
|
|
5461
|
+
}
|
|
5462
|
+
function _getEvents(values) {
|
|
5463
|
+
var events = [];
|
|
5464
|
+
for (var lp = 0; lp < values[_DYN_LENGTH ]; lp++) {
|
|
5465
|
+
var item = values[lp];
|
|
5466
|
+
if (item && item.evt) {
|
|
5467
|
+
events[_DYN_PUSH ](item.evt);
|
|
5489
5468
|
}
|
|
5490
5469
|
}
|
|
5491
|
-
return
|
|
5470
|
+
return events;
|
|
5492
5471
|
}
|
|
5493
|
-
function
|
|
5494
|
-
var
|
|
5495
|
-
|
|
5496
|
-
|
|
5497
|
-
|
|
5498
|
-
if (storage) {
|
|
5499
|
-
var x = "__storage_test__";
|
|
5500
|
-
storage.setItem(x, x);
|
|
5501
|
-
storage[_DYN_REMOVE_ITEM ](x);
|
|
5472
|
+
function _addEventByTime(values, newValue) {
|
|
5473
|
+
for (var idx = 0; idx < values[_DYN_LENGTH ]; idx++) {
|
|
5474
|
+
if (newValue.tm < values[idx].tm) {
|
|
5475
|
+
values[_DYN_SPLICE ](idx, 0, newValue);
|
|
5476
|
+
return;
|
|
5502
5477
|
}
|
|
5503
5478
|
}
|
|
5504
|
-
|
|
5505
|
-
|
|
5506
|
-
|
|
5479
|
+
values[_DYN_PUSH ](newValue);
|
|
5480
|
+
}
|
|
5481
|
+
function _getId(key, values) {
|
|
5482
|
+
var len = values[_DYN_LENGTH ];
|
|
5483
|
+
for (var lp = 0; lp < len; lp++) {
|
|
5484
|
+
if (key === values[lp].id) {
|
|
5485
|
+
return lp;
|
|
5486
|
+
}
|
|
5487
|
+
}
|
|
5488
|
+
return -1;
|
|
5489
|
+
}
|
|
5490
|
+
function _cursorContinueEvent(cursorState, value) {
|
|
5491
|
+
return function (evt) {
|
|
5492
|
+
return cursorState[_DYN_CONTINUE ]();
|
|
5493
|
+
};
|
|
5494
|
+
}
|
|
5495
|
+
function _cursorDeleteAndContinue(cursorState, value) {
|
|
5496
|
+
var deleteRequest = cursorState.cursor.delete();
|
|
5497
|
+
deleteRequest[_DYN_ONERROR ] = _cursorContinueEvent(cursorState);
|
|
5498
|
+
deleteRequest[_DYN_ONSUCCESS ] = _cursorContinueEvent(cursorState);
|
|
5499
|
+
return 1 ;
|
|
5500
|
+
}
|
|
5501
|
+
function _getAllEvents(dbCtx, cursorQuery, cnt) {
|
|
5502
|
+
return dbCtx.openCursor(EventObjectStoreName, cursorQuery, function (cursorState, value, values) {
|
|
5503
|
+
values[_DYN_PUSH ](value);
|
|
5504
|
+
if (cnt && values && values[_DYN_LENGTH ] == cnt) {
|
|
5505
|
+
return 2 ;
|
|
5507
5506
|
}
|
|
5508
|
-
|
|
5509
|
-
|
|
5507
|
+
return 0 ;
|
|
5508
|
+
});
|
|
5510
5509
|
}
|
|
5511
|
-
function
|
|
5512
|
-
|
|
5513
|
-
|
|
5514
|
-
|
|
5515
|
-
|
|
5516
|
-
forEachMap(events, function (evt, key) {
|
|
5517
|
-
if (evt[_DYN_CRITICAL_CNT ] === persistenceCnt) {
|
|
5518
|
-
dropKeys[_DYN_PUSH ](key);
|
|
5519
|
-
droppedEvents++;
|
|
5520
|
-
}
|
|
5521
|
-
return (droppedEvents < eventsToDropAtOneTime);
|
|
5522
|
-
});
|
|
5523
|
-
if (droppedEvents > 0) {
|
|
5524
|
-
for (var lp = 0; lp < dropKeys[_DYN_LENGTH ]; lp++) {
|
|
5525
|
-
delete events[dropKeys[lp]];
|
|
5526
|
-
}
|
|
5527
|
-
return droppedEvents;
|
|
5510
|
+
function _deleteEvents(dbCtx, eventPrefixQuery, shouldDelete) {
|
|
5511
|
+
return dbCtx.openCursor(EventObjectStoreName, eventPrefixQuery, function (deleteCursorState, value, values) {
|
|
5512
|
+
if (shouldDelete(value)) {
|
|
5513
|
+
values[_DYN_PUSH ](value);
|
|
5514
|
+
return _cursorDeleteAndContinue(deleteCursorState);
|
|
5528
5515
|
}
|
|
5529
|
-
|
|
5530
|
-
}
|
|
5531
|
-
return droppedEvents;
|
|
5516
|
+
return 0 ;
|
|
5517
|
+
});
|
|
5532
5518
|
}
|
|
5533
|
-
function _dropMaxTimeEvents(
|
|
5534
|
-
|
|
5535
|
-
|
|
5536
|
-
|
|
5537
|
-
|
|
5538
|
-
try {
|
|
5539
|
-
forEachMap(events, function (evt, key) {
|
|
5540
|
-
var id = getTimeFromId(key);
|
|
5541
|
-
if (id <= minStartTime) {
|
|
5542
|
-
dropKeys[_DYN_PUSH ](key);
|
|
5543
|
-
droppedEvents++;
|
|
5519
|
+
function _dropMaxTimeEvents(dbCtx, maxTime) {
|
|
5520
|
+
return createAsyncPromise(function (deleteEvtsResolve, deleteEvtsReject) {
|
|
5521
|
+
return _deleteEvents(dbCtx, null, function (value) {
|
|
5522
|
+
if (!value || !value.evt) {
|
|
5523
|
+
return true;
|
|
5544
5524
|
}
|
|
5545
|
-
|
|
5546
|
-
|
|
5547
|
-
|
|
5548
|
-
|
|
5549
|
-
delete events[dropKeys[lp]];
|
|
5525
|
+
var addedTime = getTimeFromId(value.id);
|
|
5526
|
+
var minStartTime = _getTime() + 1 - maxTime;
|
|
5527
|
+
if (addedTime <= minStartTime) {
|
|
5528
|
+
return true;
|
|
5550
5529
|
}
|
|
5551
|
-
|
|
5552
|
-
|
|
5530
|
+
return false;
|
|
5531
|
+
})[_DYN_THEN ](function (values) {
|
|
5532
|
+
deleteEvtsResolve(values);
|
|
5533
|
+
}, deleteEvtsReject);
|
|
5534
|
+
});
|
|
5535
|
+
}
|
|
5536
|
+
function _dropEventsUpToPersistence(dbCtx, maxpriorityCnt, maxDropCnt) {
|
|
5537
|
+
return createAsyncPromise(function (dropEventsResolve, dropEventsReject) {
|
|
5538
|
+
var droppedEvents = 0;
|
|
5539
|
+
function _resolveWithDroppedEvents() {
|
|
5540
|
+
dropEventsResolve(droppedEvents);
|
|
5541
|
+
}
|
|
5542
|
+
function _dropEvent(deleteStoreCtx, dropItem) {
|
|
5543
|
+
return createAsyncPromise(function (deleteResolve) {
|
|
5544
|
+
var deleteRequest = deleteStoreCtx.store.delete(dropItem.key);
|
|
5545
|
+
deleteRequest[_DYN_ONSUCCESS ] = function (evt) {
|
|
5546
|
+
droppedEvents++;
|
|
5547
|
+
deleteResolve();
|
|
5548
|
+
};
|
|
5549
|
+
deleteRequest[_DYN_ONERROR ] = function (evt) {
|
|
5550
|
+
deleteResolve();
|
|
5551
|
+
};
|
|
5552
|
+
});
|
|
5553
|
+
}
|
|
5554
|
+
function _processCandidates(dropCandidates) {
|
|
5555
|
+
if (dropCandidates[_DYN_LENGTH ] === 0) {
|
|
5556
|
+
_resolveWithDroppedEvents();
|
|
5557
|
+
return;
|
|
5553
5558
|
}
|
|
5554
|
-
|
|
5559
|
+
dbCtx[_DYN_OPEN_STORE ](EventObjectStoreName, function (deleteStoreCtx) {
|
|
5560
|
+
var deleteEvts = [];
|
|
5561
|
+
for (var lp = 0; lp < dropCandidates[_DYN_LENGTH ]; lp++) {
|
|
5562
|
+
deleteEvts[_DYN_PUSH ](_dropEvent(deleteStoreCtx, dropCandidates[lp]));
|
|
5563
|
+
}
|
|
5564
|
+
return createAsyncAllPromise(deleteEvts)[_DYN_THEN ](_resolveWithDroppedEvents, _resolveWithDroppedEvents);
|
|
5565
|
+
});
|
|
5555
5566
|
}
|
|
5556
|
-
|
|
5557
|
-
|
|
5558
|
-
|
|
5559
|
-
|
|
5567
|
+
var cursorPromise = dbCtx.openCursor(EventObjectStoreName, null, function (cursorState, value, values) {
|
|
5568
|
+
if (value.evt[_DYN_CRITICAL_CNT ] <= maxpriorityCnt) {
|
|
5569
|
+
_addEventByTime(values, value);
|
|
5570
|
+
if (values[_DYN_LENGTH ] > maxDropCnt) {
|
|
5571
|
+
values.splice(values[_DYN_LENGTH ] - 1, 1);
|
|
5572
|
+
}
|
|
5573
|
+
}
|
|
5574
|
+
return 0 ;
|
|
5575
|
+
});
|
|
5576
|
+
cursorPromise[_DYN_THEN ](_processCandidates, function () {
|
|
5577
|
+
dropEventsResolve(0);
|
|
5578
|
+
});
|
|
5579
|
+
});
|
|
5560
5580
|
}
|
|
5561
|
-
var
|
|
5562
|
-
function
|
|
5563
|
-
dynamicProto(
|
|
5564
|
-
var
|
|
5565
|
-
var
|
|
5566
|
-
var
|
|
5567
|
-
var
|
|
5568
|
-
var
|
|
5581
|
+
var IndexedDbProvider = /** @class */ (function () {
|
|
5582
|
+
function IndexedDbProvider(id, unloadHookContainer) {
|
|
5583
|
+
dynamicProto(IndexedDbProvider, this, function (_this) {
|
|
5584
|
+
var _indexedDb = null;
|
|
5585
|
+
var _dbName = null;
|
|
5586
|
+
var _iKey = UnknowniKey;
|
|
5587
|
+
var _storageId = null;
|
|
5588
|
+
var _autoClean = null;
|
|
5569
5589
|
var _endpoint = null;
|
|
5590
|
+
var _storageKeyPrefix = null;
|
|
5570
5591
|
var _maxStorageTime = null;
|
|
5571
5592
|
var _eventDropPerTime = null;
|
|
5572
5593
|
var _maxCriticalCnt = null;
|
|
5573
5594
|
var _notificationManager = null;
|
|
5574
5595
|
_this.id = id;
|
|
5575
|
-
|
|
5576
|
-
|
|
5577
|
-
|
|
5578
|
-
|
|
5579
|
-
|
|
5580
|
-
if (!_storage) {
|
|
5596
|
+
_this[_DYN_INITIALIZE ] = function (providerContext) {
|
|
5597
|
+
var diagLog = providerContext.itemCtx[_DYN_DIAG_LOG ]();
|
|
5598
|
+
_indexedDb = new IndexedDbHelper(diagLog);
|
|
5599
|
+
if (!_indexedDb[_DYN_IS_AVAILABLE ]()) {
|
|
5600
|
+
_indexedDb = null;
|
|
5581
5601
|
return false;
|
|
5582
5602
|
}
|
|
5583
|
-
var
|
|
5603
|
+
var coreConfig = providerContext[_DYN_ITEM_CTX ].getCfg();
|
|
5584
5604
|
var itemCtx = providerContext[_DYN_ITEM_CTX ];
|
|
5585
|
-
|
|
5586
|
-
|
|
5587
|
-
|
|
5605
|
+
var ikey = itemCtx.getCfg()[_DYN_INSTRUMENTATION_KEY ] || coreConfig[_DYN_INSTRUMENTATION_KEY ];
|
|
5606
|
+
if (!isString(ikey)) {
|
|
5607
|
+
return;
|
|
5608
|
+
}
|
|
5609
|
+
_iKey = ikey;
|
|
5610
|
+
var storageConfig = providerContext[_DYN_STORAGE_CONFIG ];
|
|
5611
|
+
_storageId = _this.id || providerContext.id || newGuid();
|
|
5588
5612
|
_notificationManager = providerContext[_DYN_NOTIFICATION_MGR ];
|
|
5613
|
+
_endpoint = getEndpointDomain(providerContext[_DYN_ENDPOINT ]);
|
|
5614
|
+
_autoClean = !!storageConfig.autoClean;
|
|
5615
|
+
_storageKeyPrefix = storageConfig[_DYN_STORAGE_KEY_PREFIX ] || DefaultDbName;
|
|
5616
|
+
_dbName = _storageKeyPrefix + "_" + DbVersion + "_" + _endpoint;
|
|
5589
5617
|
var unloadHook = onConfigChange(storageConfig, function () {
|
|
5590
|
-
|
|
5591
|
-
_maxStorageTime = storageConfig[_DYN_IN_STORAGE_MAX_TIME ] || DefaultMaxInStorageTime;
|
|
5618
|
+
_maxStorageTime = storageConfig[_DYN_IN_STORAGE_MAX_TIME ] || OrhpanedEventThresholdInMs;
|
|
5592
5619
|
var dropNum = storageConfig[_DYN__EVENTS_TO_DROP_PER_2 ];
|
|
5593
5620
|
_eventDropPerTime = isNotNullOrUndefined(dropNum) ? dropNum : EventsToDropAtOneTime;
|
|
5594
5621
|
_maxCriticalCnt = storageConfig[_DYN_MAX_CRITICAL_EVTS_DR3 ] || MaxCriticalEvtsDropCnt;
|
|
5595
5622
|
});
|
|
5596
5623
|
unloadHookContainer && unloadHookContainer.add(unloadHook);
|
|
5597
|
-
|
|
5598
|
-
|
|
5599
|
-
|
|
5600
|
-
|
|
5624
|
+
if (_dbName) {
|
|
5625
|
+
doAwaitResponse(_this.clean(!_autoClean), function (response) {
|
|
5626
|
+
_openDb(function (dbCtx) {
|
|
5627
|
+
return true;
|
|
5628
|
+
})[_DYN_THEN ](function (value) {
|
|
5629
|
+
}, function (reason) {
|
|
5630
|
+
diagLog.warnToConsole("IndexedDbProvider failed to initialize - " + (reason || "<unknown>"));
|
|
5631
|
+
_indexedDb = null;
|
|
5632
|
+
});
|
|
5633
|
+
});
|
|
5601
5634
|
}
|
|
5602
5635
|
return true;
|
|
5603
5636
|
};
|
|
5637
|
+
_this["_getDbgPlgTargets"] = function () {
|
|
5638
|
+
return [_dbName, _endpoint, _maxStorageTime, _indexedDb];
|
|
5639
|
+
};
|
|
5604
5640
|
_this[_DYN_SUPPORTS_SYNC_REQUES4 ] = function () {
|
|
5605
|
-
return
|
|
5641
|
+
return false;
|
|
5606
5642
|
};
|
|
5607
5643
|
_this.getAllEvents = function (cnt) {
|
|
5608
|
-
|
|
5609
|
-
|
|
5610
|
-
return;
|
|
5611
|
-
}
|
|
5612
|
-
return _getEvts(cnt);
|
|
5613
|
-
}
|
|
5614
|
-
catch (e) {
|
|
5615
|
-
return createAsyncRejectedPromise(e);
|
|
5644
|
+
if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]()) {
|
|
5645
|
+
return [];
|
|
5616
5646
|
}
|
|
5647
|
+
return _openDb(function (dbCtx) {
|
|
5648
|
+
return createAsyncPromise(function (allEventsResolve, allEventsReject) {
|
|
5649
|
+
_getAllEvents(dbCtx, null, cnt)[_DYN_THEN ](function (values) {
|
|
5650
|
+
allEventsResolve(_getEvents(values));
|
|
5651
|
+
}, allEventsReject);
|
|
5652
|
+
});
|
|
5653
|
+
});
|
|
5617
5654
|
};
|
|
5618
5655
|
_this[_DYN_GET_NEXT_BATCH ] = function () {
|
|
5619
|
-
|
|
5620
|
-
|
|
5621
|
-
return;
|
|
5622
|
-
}
|
|
5623
|
-
return _getEvts(1, true);
|
|
5624
|
-
}
|
|
5625
|
-
catch (e) {
|
|
5626
|
-
return createAsyncRejectedPromise(e);
|
|
5656
|
+
if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]()) {
|
|
5657
|
+
return [];
|
|
5627
5658
|
}
|
|
5659
|
+
return _openDb(function (dbCtx) {
|
|
5660
|
+
return createAsyncPromise(function (allEventsResolve, allEventsReject) {
|
|
5661
|
+
_getAllEvents(dbCtx, null, 1)[_DYN_THEN ](function (values) {
|
|
5662
|
+
allEventsResolve(_getEvents(values));
|
|
5663
|
+
}, allEventsReject);
|
|
5664
|
+
});
|
|
5665
|
+
});
|
|
5628
5666
|
};
|
|
5629
|
-
function
|
|
5630
|
-
|
|
5631
|
-
|
|
5632
|
-
if (theStore) {
|
|
5633
|
-
var events = theStore[_DYN_EVTS ];
|
|
5634
|
-
forEachMap(events, function (evt) {
|
|
5635
|
-
if (evt) {
|
|
5636
|
-
if (evt[_DYN_IS_ARR ]) {
|
|
5637
|
-
evt = _payloadHelper.base64ToArr(evt);
|
|
5638
|
-
}
|
|
5639
|
-
allItems[_DYN_PUSH ](evt);
|
|
5640
|
-
}
|
|
5641
|
-
if (cnt && allItems && allItems[_DYN_LENGTH ] == cnt) {
|
|
5642
|
-
return false;
|
|
5643
|
-
}
|
|
5644
|
-
return true;
|
|
5645
|
-
}, ordered);
|
|
5646
|
-
}
|
|
5647
|
-
return allItems;
|
|
5648
|
-
}
|
|
5649
|
-
_this[_DYN_ADD_EVENT ] = function (key, evt, itemCtx) {
|
|
5650
|
-
try {
|
|
5651
|
-
var theStore = _fetchStoredDb(_storageKey);
|
|
5652
|
-
evt.id = evt.id || getTimeId();
|
|
5653
|
-
evt[_DYN_CRITICAL_CNT ] = evt[_DYN_CRITICAL_CNT ] || 0;
|
|
5654
|
-
var events = theStore.db[_DYN_EVTS ];
|
|
5655
|
-
var id_1 = evt.id;
|
|
5656
|
-
if (evt && evt[_DYN_IS_ARR ]) {
|
|
5657
|
-
evt = _payloadHelper.base64ToStr(evt);
|
|
5658
|
-
}
|
|
5659
|
-
var preDroppedCnt = 0;
|
|
5660
|
-
while (evt) {
|
|
5661
|
-
events[id_1] = evt;
|
|
5662
|
-
if (_updateStoredDb(theStore)) {
|
|
5663
|
-
if (preDroppedCnt && _notificationManager) {
|
|
5664
|
-
batchDropNotification(_notificationManager, preDroppedCnt, 2 );
|
|
5665
|
-
}
|
|
5666
|
-
return evt;
|
|
5667
|
-
}
|
|
5668
|
-
delete events[id_1];
|
|
5669
|
-
var droppedCnt = _dropEventsUpToPersistence(_maxCriticalCnt, events, _eventDropPerTime);
|
|
5670
|
-
preDroppedCnt += droppedCnt;
|
|
5671
|
-
if (!droppedCnt) {
|
|
5672
|
-
return createAsyncRejectedPromise(new Error("Unable to free up event space"));
|
|
5673
|
-
}
|
|
5674
|
-
}
|
|
5675
|
-
}
|
|
5676
|
-
catch (e) {
|
|
5677
|
-
return createAsyncRejectedPromise(e);
|
|
5667
|
+
_this[_DYN_ADD_EVENT ] = function (key, item, itemCtx) {
|
|
5668
|
+
if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]()) {
|
|
5669
|
+
return item;
|
|
5678
5670
|
}
|
|
5671
|
+
item.id = item.id || getTimeId();
|
|
5672
|
+
item[_DYN_CRITICAL_CNT ] = item[_DYN_CRITICAL_CNT ] || 0;
|
|
5673
|
+
return _openDb(function (dbCtx) {
|
|
5674
|
+
var eventKey = key || item.id;
|
|
5675
|
+
var dbItem = {
|
|
5676
|
+
id: eventKey,
|
|
5677
|
+
evt: item,
|
|
5678
|
+
tm: _getTime(),
|
|
5679
|
+
v: StoreVersion
|
|
5680
|
+
};
|
|
5681
|
+
return _addDbEvent(dbCtx, dbItem, true);
|
|
5682
|
+
});
|
|
5679
5683
|
};
|
|
5680
5684
|
_this[_DYN_REMOVE_EVENTS ] = function (evts) {
|
|
5681
|
-
|
|
5682
|
-
|
|
5683
|
-
var currentDb = theStore.db;
|
|
5684
|
-
if (currentDb) {
|
|
5685
|
-
var events = currentDb[_DYN_EVTS ];
|
|
5686
|
-
try {
|
|
5687
|
-
for (var i = 0; i < evts[_DYN_LENGTH ]; ++i) {
|
|
5688
|
-
var evt = evts[i];
|
|
5689
|
-
delete events[evt.id];
|
|
5690
|
-
}
|
|
5691
|
-
if (_updateStoredDb(theStore)) {
|
|
5692
|
-
return evts;
|
|
5693
|
-
}
|
|
5694
|
-
}
|
|
5695
|
-
catch (e) {
|
|
5696
|
-
}
|
|
5697
|
-
evts = _clearDatabase(theStore.key);
|
|
5698
|
-
}
|
|
5699
|
-
return evts;
|
|
5700
|
-
}
|
|
5701
|
-
catch (e) {
|
|
5702
|
-
return createAsyncRejectedPromise(e);
|
|
5685
|
+
if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]()) {
|
|
5686
|
+
return [];
|
|
5703
5687
|
}
|
|
5704
|
-
|
|
5705
|
-
|
|
5706
|
-
|
|
5707
|
-
|
|
5708
|
-
|
|
5709
|
-
|
|
5710
|
-
|
|
5711
|
-
|
|
5712
|
-
|
|
5713
|
-
|
|
5714
|
-
|
|
5715
|
-
|
|
5688
|
+
var removedEvents = [];
|
|
5689
|
+
return createAsyncPromise(function (removeEventsResolve, removeEventsReject) {
|
|
5690
|
+
_openDb(function (dbCtx) {
|
|
5691
|
+
return dbCtx.openCursor(EventObjectStoreName, null, function (cursorState, value, values) {
|
|
5692
|
+
if (_getId(value.id, evts) !== -1) {
|
|
5693
|
+
var deleteRequest = cursorState.cursor.delete();
|
|
5694
|
+
deleteRequest[_DYN_ONERROR ] = _cursorContinueEvent(cursorState);
|
|
5695
|
+
deleteRequest[_DYN_ONSUCCESS ] = function () {
|
|
5696
|
+
removedEvents[_DYN_PUSH ](value.evt);
|
|
5697
|
+
cursorState[_DYN_CONTINUE ]();
|
|
5698
|
+
};
|
|
5699
|
+
return 1 ;
|
|
5716
5700
|
}
|
|
5717
|
-
return
|
|
5701
|
+
return 0 ;
|
|
5718
5702
|
});
|
|
5719
|
-
|
|
5720
|
-
|
|
5721
|
-
|
|
5722
|
-
|
|
5723
|
-
|
|
5724
|
-
|
|
5703
|
+
})[_DYN_THEN ](function () {
|
|
5704
|
+
removeEventsResolve(removedEvents);
|
|
5705
|
+
}, function (reason) {
|
|
5706
|
+
removeEventsResolve(removedEvents);
|
|
5707
|
+
});
|
|
5708
|
+
});
|
|
5709
|
+
};
|
|
5710
|
+
_this[_DYN_CLEAR ] = function (disable) {
|
|
5711
|
+
if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]() || !!disable) {
|
|
5712
|
+
return [];
|
|
5725
5713
|
}
|
|
5714
|
+
return createAsyncPromise(function (clearResolve, clearReject) {
|
|
5715
|
+
_openDb(function (dbCtx) {
|
|
5716
|
+
return _deleteEvents(dbCtx, null, function (value) {
|
|
5717
|
+
return true;
|
|
5718
|
+
});
|
|
5719
|
+
})[_DYN_THEN ](function (values) {
|
|
5720
|
+
clearResolve(_getEvents(values));
|
|
5721
|
+
}, function (reason) {
|
|
5722
|
+
clearResolve([]);
|
|
5723
|
+
});
|
|
5724
|
+
});
|
|
5726
5725
|
};
|
|
5727
|
-
_this.clean = function () {
|
|
5728
|
-
|
|
5729
|
-
var currentDb = storeDetails.db;
|
|
5730
|
-
if (currentDb) {
|
|
5731
|
-
var events = currentDb[_DYN_EVTS ];
|
|
5732
|
-
try {
|
|
5733
|
-
var isDropped = _dropMaxTimeEvents(_maxStorageTime, events, _eventDropPerTime, _notificationManager);
|
|
5734
|
-
if (isDropped) {
|
|
5735
|
-
return _updateStoredDb(storeDetails);
|
|
5736
|
-
}
|
|
5737
|
-
return true;
|
|
5738
|
-
}
|
|
5739
|
-
catch (e) {
|
|
5740
|
-
}
|
|
5726
|
+
_this.clean = function (disable) {
|
|
5727
|
+
if (_indexedDb == null || !_indexedDb[_DYN_IS_AVAILABLE ]() || !!disable) {
|
|
5741
5728
|
return false;
|
|
5742
5729
|
}
|
|
5730
|
+
return createAsyncPromise(function (cleanResolve, cleanReject) {
|
|
5731
|
+
_openDb(function (dbCtx) {
|
|
5732
|
+
if (dbCtx.isNew) {
|
|
5733
|
+
return [];
|
|
5734
|
+
}
|
|
5735
|
+
return _dropMaxTimeEvents(dbCtx, _maxStorageTime);
|
|
5736
|
+
})[_DYN_THEN ](function (value) {
|
|
5737
|
+
var cnt = value && value[_DYN_LENGTH ];
|
|
5738
|
+
if (_notificationManager && cnt) {
|
|
5739
|
+
batchDropNotification(_notificationManager, cnt, 3 );
|
|
5740
|
+
}
|
|
5741
|
+
cleanResolve(cnt && cnt > 0);
|
|
5742
|
+
}, function (reason) {
|
|
5743
|
+
cleanResolve(false);
|
|
5744
|
+
});
|
|
5745
|
+
});
|
|
5743
5746
|
};
|
|
5744
5747
|
_this[_DYN_TEARDOWN ] = function () {
|
|
5745
|
-
|
|
5746
|
-
|
|
5747
|
-
var storedDb = theStore.db;
|
|
5748
|
-
if (storedDb) {
|
|
5749
|
-
storedDb[_DYN_LAST_ACCESS_TIME ] = 0;
|
|
5750
|
-
_updateStoredDb(theStore, false);
|
|
5751
|
-
}
|
|
5752
|
-
}
|
|
5753
|
-
catch (e) {
|
|
5748
|
+
if (_indexedDb) {
|
|
5749
|
+
_indexedDb.closeDb(_dbName);
|
|
5754
5750
|
}
|
|
5755
5751
|
};
|
|
5756
|
-
function
|
|
5757
|
-
|
|
5758
|
-
|
|
5759
|
-
db: db
|
|
5760
|
-
};
|
|
5761
|
-
}
|
|
5762
|
-
function _fetchStoredDb(dbKey, returnDefault) {
|
|
5763
|
-
var _a;
|
|
5764
|
-
if (returnDefault === void 0) { returnDefault = true; }
|
|
5765
|
-
var dbToStore = null;
|
|
5766
|
-
if (_storage) {
|
|
5767
|
-
var previousDb = _storage.getItem(dbKey);
|
|
5768
|
-
if (previousDb) {
|
|
5752
|
+
function _openDb(processFunc) {
|
|
5753
|
+
function _handleDbUpgrade(dbCtx) {
|
|
5754
|
+
return createAsyncPromise(function (createResolve, createReject) {
|
|
5769
5755
|
try {
|
|
5770
|
-
|
|
5756
|
+
_createDb(dbCtx.db);
|
|
5771
5757
|
}
|
|
5772
5758
|
catch (e) {
|
|
5773
|
-
|
|
5759
|
+
createReject(e);
|
|
5774
5760
|
}
|
|
5775
|
-
|
|
5776
|
-
|
|
5777
|
-
dbToStore = (_a = {
|
|
5778
|
-
evts: {}
|
|
5779
|
-
},
|
|
5780
|
-
_a[_DYN_LAST_ACCESS_TIME ] = 0,
|
|
5781
|
-
_a);
|
|
5782
|
-
}
|
|
5783
|
-
}
|
|
5784
|
-
return _newStore(dbKey, dbToStore);
|
|
5785
|
-
}
|
|
5786
|
-
function _updateStoredDb(jsonStore, updateLastAccessTime) {
|
|
5787
|
-
if (updateLastAccessTime === void 0) { updateLastAccessTime = true; }
|
|
5788
|
-
var dbToStore = jsonStore.db;
|
|
5789
|
-
if (dbToStore) {
|
|
5790
|
-
if (updateLastAccessTime) {
|
|
5791
|
-
dbToStore.lastAccessTime = (new Date())[_DYN_GET_TIME ]();
|
|
5792
|
-
}
|
|
5793
|
-
}
|
|
5794
|
-
try {
|
|
5795
|
-
var jsonString = getJSON().stringify(dbToStore);
|
|
5796
|
-
if (jsonString[_DYN_LENGTH ] > _maxStorageSizeInBytes) {
|
|
5797
|
-
return false;
|
|
5798
|
-
}
|
|
5799
|
-
_storage && _storage.setItem(jsonStore.key, jsonString);
|
|
5761
|
+
createResolve();
|
|
5762
|
+
});
|
|
5800
5763
|
}
|
|
5801
|
-
|
|
5802
|
-
return
|
|
5764
|
+
function _handleDbOpen(dbCtx) {
|
|
5765
|
+
return createAsyncPromise(function (openResolve, openReject) {
|
|
5766
|
+
var providerCtx = {
|
|
5767
|
+
iKey: _iKey,
|
|
5768
|
+
id: _endpoint,
|
|
5769
|
+
storageId: _storageId
|
|
5770
|
+
};
|
|
5771
|
+
dbCtx.ctx = providerCtx;
|
|
5772
|
+
doAwait(processFunc(dbCtx), openResolve, openReject);
|
|
5773
|
+
});
|
|
5803
5774
|
}
|
|
5804
|
-
return
|
|
5775
|
+
return _indexedDb.openDb(_dbName, DbVersion, _handleDbOpen, _handleDbUpgrade);
|
|
5805
5776
|
}
|
|
5806
|
-
function
|
|
5807
|
-
|
|
5808
|
-
|
|
5809
|
-
|
|
5810
|
-
|
|
5811
|
-
|
|
5812
|
-
try {
|
|
5813
|
-
forEachMap(events, function (evt) {
|
|
5814
|
-
if (evt) {
|
|
5815
|
-
removedItems[_DYN_PUSH ](evt);
|
|
5777
|
+
function _addDbEvent(dbCtx, dbItem, doRetry) {
|
|
5778
|
+
return createAsyncPromise(function (addEventResolve, addEventReject) {
|
|
5779
|
+
function dropEvents(droppedFunc) {
|
|
5780
|
+
_dropEventsUpToPersistence(dbCtx, _maxCriticalCnt, _eventDropPerTime)[_DYN_THEN ](function (droppedCount) {
|
|
5781
|
+
if (_notificationManager && droppedCount) {
|
|
5782
|
+
batchDropNotification(_notificationManager, droppedCount, 2 );
|
|
5816
5783
|
}
|
|
5817
|
-
|
|
5784
|
+
droppedFunc(droppedCount);
|
|
5785
|
+
}, function (reason) {
|
|
5786
|
+
droppedFunc(0);
|
|
5818
5787
|
});
|
|
5819
5788
|
}
|
|
5820
|
-
|
|
5789
|
+
function _insertNewEvent() {
|
|
5790
|
+
dbCtx[_DYN_OPEN_STORE ](EventObjectStoreName, function (storeCtx) {
|
|
5791
|
+
var request = storeCtx.store.put(dbItem);
|
|
5792
|
+
request[_DYN_ONSUCCESS ] = function (evt) {
|
|
5793
|
+
addEventResolve(dbItem.evt);
|
|
5794
|
+
};
|
|
5795
|
+
request[_DYN_ONERROR ] = function (evt) {
|
|
5796
|
+
if (!doRetry) {
|
|
5797
|
+
addEventReject(new Error(ErrorMessageUnableToAddEvent));
|
|
5798
|
+
return;
|
|
5799
|
+
}
|
|
5800
|
+
function _retryAddEvent(dropCount) {
|
|
5801
|
+
if (dropCount === 0) {
|
|
5802
|
+
addEventReject(new Error(ErrorMessageUnableToAddEvent));
|
|
5803
|
+
}
|
|
5804
|
+
_addDbEvent(dbCtx, dbItem, false)[_DYN_THEN ](function (theItem) {
|
|
5805
|
+
addEventResolve(dbItem.evt);
|
|
5806
|
+
}, function () {
|
|
5807
|
+
addEventReject(new Error(ErrorMessageUnableToAddEvent));
|
|
5808
|
+
});
|
|
5809
|
+
}
|
|
5810
|
+
dropEvents(function (droppedCount) {
|
|
5811
|
+
if (droppedCount > 0) {
|
|
5812
|
+
_retryAddEvent(droppedCount);
|
|
5813
|
+
}
|
|
5814
|
+
else {
|
|
5815
|
+
addEventReject(new Error(ErrorMessageUnableToAddEvent));
|
|
5816
|
+
}
|
|
5817
|
+
});
|
|
5818
|
+
};
|
|
5819
|
+
}).catch(function (e) {
|
|
5820
|
+
addEventReject(e);
|
|
5821
|
+
});
|
|
5821
5822
|
}
|
|
5822
|
-
|
|
5823
|
-
}
|
|
5824
|
-
return removedItems;
|
|
5823
|
+
_insertNewEvent();
|
|
5824
|
+
});
|
|
5825
5825
|
}
|
|
5826
5826
|
});
|
|
5827
5827
|
}
|
|
5828
|
-
|
|
5829
|
-
return
|
|
5828
|
+
IndexedDbProvider.__ieDyn=1;
|
|
5829
|
+
return IndexedDbProvider;
|
|
5830
5830
|
}());
|
|
5831
5831
|
|
|
5832
5832
|
var MaxStorageProviderConfig = 2;
|
|
@@ -6348,7 +6348,7 @@
|
|
|
6348
6348
|
return Sender;
|
|
6349
6349
|
}());
|
|
6350
6350
|
|
|
6351
|
-
var version = '0.3.1-nightly3.2407-
|
|
6351
|
+
var version = '0.3.1-nightly3.2407-08';
|
|
6352
6352
|
var DefaultOfflineIdentifier = "OfflineChannel";
|
|
6353
6353
|
var DefaultBatchInterval = 15000;
|
|
6354
6354
|
var DefaultInMemoMaxTime = 15000;
|