@neocomplexx/ngx-neo-indexeddb
Version:
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.0.5.
361 lines • 31 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { DbWrapper } from './classes/dbWrapper';
import { Utils } from './classes/utils';
var NgxNeoIDB = /** @class */ (function () {
function NgxNeoIDB(dbName, version) {
this.utils = new Utils();
this.dbWrapper = new DbWrapper(dbName, version);
}
/**
* @param {?} version
* @param {?=} upgradeCallback
* @return {?}
*/
NgxNeoIDB.prototype.openDatabase = /**
* @param {?} version
* @param {?=} upgradeCallback
* @return {?}
*/
function (version, upgradeCallback) {
var _this = this;
return new Promise(function (resolve, reject) {
_this.dbWrapper.dbVersion = version;
/** @type {?} */
var request = _this.utils.indexedDB.open(_this.dbWrapper.dbName, version);
request.onsuccess = function (e) {
_this.dbWrapper.db = request.result;
resolve();
};
request.onerror = function (e) {
reject('IndexedDB error: ' + ((/** @type {?} */ (e.target))).errorCode ?
((/** @type {?} */ (e.target))).errorCode + ' (' + ((/** @type {?} */ (e.target))).error + ')' :
((/** @type {?} */ (e.target))).errorCode);
};
if (typeof upgradeCallback === 'function') {
request.onupgradeneeded = function (e) {
upgradeCallback(e, _this.dbWrapper.db);
};
}
});
};
/**
* @param {?} storeName
* @param {?} key
* @return {?}
*/
NgxNeoIDB.prototype.getByKey = /**
* @param {?} storeName
* @param {?} key
* @return {?}
*/
function (storeName, key) {
var _this = this;
return new Promise(function (resolve, reject) {
_this.dbWrapper.validateBeforeTransaction(storeName, reject);
/** @type {?} */
var transaction = _this.dbWrapper.createTransaction({
storeName: storeName,
dbMode: 'readonly',
error: function (e) {
reject(e);
},
complete: function (e) {
}
});
/** @type {?} */
var objectStore = transaction.objectStore(storeName);
/** @type {?} */
var request;
request = objectStore.get(key);
request.onsuccess = function (event) {
resolve(((/** @type {?} */ (event.target))).result);
};
});
};
/**
* @param {?} storeName
* @param {?=} keyRange
* @param {?=} indexDetails
* @return {?}
*/
NgxNeoIDB.prototype.getAll = /**
* @param {?} storeName
* @param {?=} keyRange
* @param {?=} indexDetails
* @return {?}
*/
function (storeName, keyRange, indexDetails) {
var _this = this;
return new Promise(function (resolve, reject) {
_this.dbWrapper.validateBeforeTransaction(storeName, reject);
/** @type {?} */
var transaction = _this.dbWrapper.createTransaction({
storeName: storeName,
dbMode: 'readonly',
error: function (e) {
reject(e);
},
complete: function (e) {
}
});
/** @type {?} */
var objectStore = transaction.objectStore(storeName);
/** @type {?} */
var result = [];
/** @type {?} */
var request;
if (indexDetails) {
/** @type {?} */
var index = objectStore.index(indexDetails.indexName);
/** @type {?} */
var order = (indexDetails.order === 'desc') ? 'prev' : 'next';
request = index.openCursor(keyRange, (/** @type {?} */ (order)));
}
else {
request = objectStore.openCursor(keyRange);
}
request.onerror = function (e) {
reject(e);
};
request.onsuccess = function (evt) {
/** @type {?} */
var cursor = ((/** @type {?} */ (evt.target))).result;
if (cursor) {
result.push(cursor.value);
cursor['continue']();
}
else {
resolve(result);
}
};
});
};
/**
* @param {?} storeName
* @param {?} value
* @param {?=} key
* @return {?}
*/
NgxNeoIDB.prototype.add = /**
* @param {?} storeName
* @param {?} value
* @param {?=} key
* @return {?}
*/
function (storeName, value, key) {
var _this = this;
return new Promise(function (resolve, reject) {
_this.dbWrapper.validateBeforeTransaction(storeName, reject);
/** @type {?} */
var transaction = _this.dbWrapper.createTransaction({
storeName: storeName,
dbMode: 'readwrite',
error: function (e) {
reject(e);
},
complete: function (e) {
resolve({ key: key, value: value });
}
});
/** @type {?} */
var objectStore = transaction.objectStore(storeName);
/** @type {?} */
var request = objectStore.add(value, key);
request.onsuccess = function (evt) {
key = evt.target.result;
};
});
};
/**
* @param {?} storeName
* @param {?} value
* @param {?=} key
* @return {?}
*/
NgxNeoIDB.prototype.update = /**
* @param {?} storeName
* @param {?} value
* @param {?=} key
* @return {?}
*/
function (storeName, value, key) {
var _this = this;
return new Promise(function (resolve, reject) {
_this.dbWrapper.validateBeforeTransaction(storeName, reject);
/** @type {?} */
var transaction = _this.dbWrapper.createTransaction({
storeName: storeName,
dbMode: 'readwrite',
error: function (e) {
reject(e);
},
complete: function (e) {
resolve(value);
},
abort: function (e) {
reject(e);
}
});
/** @type {?} */
var objectStore = transaction.objectStore(storeName);
objectStore.put(value, key);
});
};
/**
* @param {?} storeName
* @param {?} key
* @return {?}
*/
NgxNeoIDB.prototype.delete = /**
* @param {?} storeName
* @param {?} key
* @return {?}
*/
function (storeName, key) {
var _this = this;
return new Promise(function (resolve, reject) {
_this.dbWrapper.validateBeforeTransaction(storeName, reject);
/** @type {?} */
var transaction = _this.dbWrapper.createTransaction({
storeName: storeName,
dbMode: 'readwrite',
error: function (e) {
reject(e);
},
complete: function (e) {
resolve();
},
abort: function (e) {
reject(e);
}
});
/** @type {?} */
var objectStore = transaction.objectStore(storeName);
objectStore['delete'](key);
});
};
/**
* @param {?} storeName
* @param {?} cursorCallback
* @param {?=} keyRange
* @return {?}
*/
NgxNeoIDB.prototype.openCursor = /**
* @param {?} storeName
* @param {?} cursorCallback
* @param {?=} keyRange
* @return {?}
*/
function (storeName, cursorCallback, keyRange) {
var _this = this;
return new Promise(function (resolve, reject) {
_this.dbWrapper.validateBeforeTransaction(storeName, reject);
/** @type {?} */
var transaction = _this.dbWrapper.createTransaction({
storeName: storeName,
dbMode: 'readonly',
error: function (e) {
reject(e);
},
complete: function (e) {
resolve();
},
abort: function (e) {
reject(e);
}
});
/** @type {?} */
var objectStore = transaction.objectStore(storeName);
/** @type {?} */
var request = objectStore.openCursor(keyRange);
request.onsuccess = function (evt) {
cursorCallback(evt);
resolve();
};
});
};
/**
* @param {?} storeName
* @return {?}
*/
NgxNeoIDB.prototype.clear = /**
* @param {?} storeName
* @return {?}
*/
function (storeName) {
var _this = this;
return new Promise(function (resolve, reject) {
_this.dbWrapper.validateBeforeTransaction(storeName, reject);
/** @type {?} */
var transaction = _this.dbWrapper.createTransaction({
storeName: storeName,
dbMode: 'readwrite',
error: function (e) {
reject(e);
},
complete: function (e) {
resolve();
},
abort: function (e) {
reject(e);
}
});
/** @type {?} */
var objectStore = transaction.objectStore(storeName);
objectStore.clear();
resolve();
});
};
/**
* @param {?} storeName
* @param {?} indexName
* @param {?} key
* @return {?}
*/
NgxNeoIDB.prototype.getByIndex = /**
* @param {?} storeName
* @param {?} indexName
* @param {?} key
* @return {?}
*/
function (storeName, indexName, key) {
var _this = this;
return new Promise(function (resolve, reject) {
_this.dbWrapper.validateBeforeTransaction(storeName, reject);
/** @type {?} */
var transaction = _this.dbWrapper.createTransaction({
storeName: storeName,
dbMode: 'readonly',
error: function (e) {
reject(e);
},
abort: function (e) {
reject(e);
},
complete: function (e) {
}
});
/** @type {?} */
var objectStore = transaction.objectStore(storeName);
/** @type {?} */
var index = objectStore.index(indexName);
/** @type {?} */
var request = index.get(key);
request.onsuccess = function (event) {
resolve(((/** @type {?} */ (event.target))).result);
};
});
};
return NgxNeoIDB;
}());
export { NgxNeoIDB };
if (false) {
/** @type {?} */
NgxNeoIDB.prototype.utils;
/** @type {?} */
NgxNeoIDB.prototype.dbWrapper;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4SURCLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5lb2NvbXBsZXh4L25neC1uZW8taW5kZXhlZGRiLyIsInNvdXJjZXMiOlsibGliL05neElEQi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUl4QztJQUlFLG1CQUFZLE1BQWMsRUFBRSxPQUFlO1FBQ3pDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsRCxDQUFDOzs7Ozs7SUFFRCxnQ0FBWTs7Ozs7SUFBWixVQUFhLE9BQWUsRUFBRSxlQUEwQjtRQUF4RCxpQkFxQkM7UUFwQkMsT0FBTyxJQUFJLE9BQU8sQ0FBTSxVQUFDLE9BQU8sRUFBRSxNQUFNO1lBQ3RDLEtBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQzs7Z0JBQzdCLE9BQU8sR0FBRyxLQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDO1lBQ3pFLE9BQU8sQ0FBQyxTQUFTLEdBQUcsVUFBQyxDQUFDO2dCQUNwQixLQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO2dCQUNuQyxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUMsQ0FBQztZQUVGLE9BQU8sQ0FBQyxPQUFPLEdBQUcsVUFBQyxDQUFDO2dCQUNsQixNQUFNLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxtQkFBSyxDQUFDLENBQUMsTUFBTSxFQUFBLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDdEQsQ0FBQyxtQkFBSyxDQUFD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Q0wsQ0FBQzs7Ozs7OztJQUVELDhCQUFVOzs7Ozs7SUFBVixVQUFXLFNBQWlCLEVBQUUsU0FBaUIsRUFBRSxHQUFRO1FBQXpELGlCQXdCQztRQXZCQyxPQUFPLElBQUksT0FBTyxDQUFNLFVBQUMsT0FBTyxFQUFFLE1BQU07WUFDdEMsS0FBSSxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7O2dCQUV0RCxXQUFXLEdBQUcsS0FBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDbkQsU0FBUyxFQUFFLFNBQVM7Z0JBQ3BCLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixLQUFLLEVBQUUsVUFBQyxDQUFRO29CQUNkLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDWixDQUFDO2dCQUNELEtBQUssRUFBRSxVQUFDLENBQVE7b0JBQ2QsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNaLENBQUM7Z0JBQ0QsUUFBUSxFQUFFLFVBQUMsQ0FBUTtnQkFDbkIsQ0FBQzthQUNGLENBQUM7O2dCQUNBLFdBQVcsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQzs7Z0JBQ2hELEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQzs7Z0JBQ3BDLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUUxQixPQUFPLENBQUMsU0FBUyxHQUFHLFVBQUMsS0FBSztnQkFDeEIsT0FBTyxDQUFDLENBQUMsbUJBQWtCLEtBQUssQ0FBQyxNQUFNLEVBQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25ELENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNILGdCQUFDO0FBQUQsQ0FBQyxBQTlPRCxJQThPQzs7OztJQTdPQywwQkFBYTs7SUFDYiw4QkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYldyYXBwZXIgfSBmcm9tICcuL2NsYXNzZXMvZGJXcmFwcGVyJztcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi9jbGFzc2VzL3V0aWxzJztcbmltcG9ydCB7IEluZGV4RGV0YWlscyB9IGZyb20gJy4vY2xhc3Nlcy9pbmRleERldGFpbHMnO1xuXG5cbmV4cG9ydCBjbGFzcyBOZ3hOZW9JREIge1xuICB1dGlsczogVXRpbHM7XG4gIGRiV3JhcHBlcjogRGJXcmFwcGVyO1xuXG4gIGNvbnN0cnVjdG9yKGRiTmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBudW1iZXIpIHtcbiAgICB0aGlzLnV0aWxzID0gbmV3IFV0aWxzKCk7XG4gICAgdGhpcy5kYldyYXBwZXIgPSBuZXcgRGJXcmFwcGVyKGRiTmFtZSwgdmVyc2lvbik7XG4gIH1cblxuICBvcGVuRGF0YWJhc2UodmVyc2lvbjogbnVtYmVyLCB1cGdyYWRlQ2FsbGJhY2s/OiBGdW5jdGlvbikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGJXcmFwcGVyLmRiVmVyc2lvbiA9IHZlcnNpb247XG4gICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy51dGlscy5pbmRleGVkREIub3Blbih0aGlzLmRiV3JhcHBlci5kYk5hbWUsIHZlcnNpb24pO1xuICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZSkgPT4ge1xuICAgICAgICB0aGlzLmRiV3JhcHBlci5kYiA9IHJlcXVlc3QucmVzdWx0O1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9O1xuXG4gICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoZSkgPT4ge1xuICAgICAgICByZWplY3QoJ0luZGV4ZWREQiBlcnJvcjogJyArICg8YW55PmUudGFyZ2V0KS5lcnJvckNvZGUgP1xuICAgICAgICAgICg8YW55PmUudGFyZ2V0KS5lcnJvckNvZGUgKyAnICgnICsgKDxhbnk+ZS50YXJnZXQpLmVycm9yICsgJyknIDpcbiAgICAgICAgICAoPGFueT5lLnRhcmdldCkuZXJyb3JDb2RlKTtcbiAgICAgIH07XG5cbiAgICAgIGlmICh0eXBlb2YgdXBncmFkZUNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKGUpID0+IHtcbiAgICAgICAgICB1cGdyYWRlQ2FsbGJhY2soZSwgdGhpcy5kYldyYXBwZXIuZGIpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0QnlLZXkoc3RvcmVOYW1lOiBzdHJpbmcsIGtleTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kYldyYXBwZXIudmFsaWRhdGVCZWZvcmVUcmFuc2FjdGlvbihzdG9yZU5hbWUsIHJlamVjdCk7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHRoaXMuZGJXcmFwcGVyLmNyZWF0ZVRyYW5zYWN0aW9uKHtcbiAgICAgICAgc3RvcmVOYW1lOiBzdG9yZU5hbWUsXG4gICAgICAgIGRiTW9kZTogJ3JlYWRvbmx5JyxcbiAgICAgICAgZXJyb3I6IChlOiBFdmVudCkgPT4ge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGU6IChlOiBFdmVudCkgPT4ge1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG9iamVjdFN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc3RvcmVOYW1lKTtcbiAgICAgIGxldCByZXF1ZXN0OiBJREJSZXF1ZXN0O1xuXG4gICAgICByZXF1ZXN0ID0gb2JqZWN0U3RvcmUuZ2V0KGtleSk7XG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgoPGFueT5ldmVudC50YXJnZXQpLnJlc3VsdCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0QWxsKHN0b3JlTmFtZTogc3RyaW5nLCBrZXlSYW5nZT86IElEQktleVJhbmdlLCBpbmRleERldGFpbHM/OiBJbmRleERldGFpbHMpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRiV3JhcHBlci52YWxpZGF0ZUJlZm9yZVRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgcmVqZWN0KTtcblxuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmRiV3JhcHBlci5jcmVhdGVUcmFuc2FjdGlvbih7XG4gICAgICAgIHN0b3JlTmFtZTogc3RvcmVOYW1lLFxuICAgICAgICBkYk1vZGU6ICdyZWFkb25seScsXG4gICAgICAgIGVycm9yOiAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlOiAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBvYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHN0b3JlTmFtZSk7XG4gICAgICBjb25zdCByZXN1bHQ6IEFycmF5PGFueT4gPSBbXTtcbiAgICAgIGxldCByZXF1ZXN0OiBJREJSZXF1ZXN0O1xuICAgICAgaWYgKGluZGV4RGV0YWlscykge1xuICAgICAgICBjb25zdCBpbmRleCA9IG9iamVjdFN0b3JlLmluZGV4KGluZGV4RGV0YWlscy5pbmRleE5hbWUpLFxuICAgICAgICAgIG9yZGVyID0gKGluZGV4RGV0YWlscy5vcmRlciA9PT0gJ2Rlc2MnKSA/ICdwcmV2JyA6ICduZXh0JztcbiAgICAgICAgcmVxdWVzdCA9IGluZGV4Lm9wZW5DdXJzb3Ioa2V5UmFuZ2UsIDxJREJDdXJzb3JEaXJlY3Rpb24+b3JkZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdCA9IG9iamVjdFN0b3JlLm9wZW5DdXJzb3Ioa2V5UmFuZ2UpO1xuICAgICAgfVxuXG4gICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoZSkgPT4ge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9O1xuXG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBjdXJzb3I6IGFueSA9ICg8SURCT3BlbkRCUmVxdWVzdD5ldnQudGFyZ2V0KS5yZXN1bHQ7XG4gICAgICAgIGlmIChjdXJzb3IpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChjdXJzb3IudmFsdWUpO1xuICAgICAgICAgIGN1cnNvclsnY29udGludWUnXSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZChzdG9yZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwga2V5PzogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kYldyYXBwZXIudmFsaWRhdGVCZWZvcmVUcmFuc2FjdGlvbihzdG9yZU5hbWUsIHJlamVjdCk7XG5cbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYldyYXBwZXIuY3JlYXRlVHJhbnNhY3Rpb24oe1xuICAgICAgICBzdG9yZU5hbWU6IHN0b3JlTmFtZSxcbiAgICAgICAgZGJNb2RlOiAncmVhZHdyaXRlJyxcbiAgICAgICAgZXJyb3I6IChlOiBFdmVudCkgPT4ge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGU6IChlOiBFdmVudCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoeyBrZXk6IGtleSwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgICAgb2JqZWN0U3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuXG4gICAgICBjb25zdCByZXF1ZXN0ID0gb2JqZWN0U3RvcmUuYWRkKHZhbHVlLCBrZXkpO1xuICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZXZ0OiBhbnkpID0+IHtcbiAgICAgICAga2V5ID0gZXZ0LnRhcmdldC5yZXN1bHQ7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlKHN0b3JlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBrZXk/OiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRiV3JhcHBlci52YWxpZGF0ZUJlZm9yZVRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgcmVqZWN0KTtcblxuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmRiV3JhcHBlci5jcmVhdGVUcmFuc2FjdGlvbih7XG4gICAgICAgIHN0b3JlTmFtZTogc3RvcmVOYW1lLFxuICAgICAgICBkYk1vZGU6ICdyZWFkd3JpdGUnLFxuICAgICAgICBlcnJvcjogKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZTogKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFib3J0OiAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgICBvYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHN0b3JlTmFtZSk7XG5cbiAgICAgIG9iamVjdFN0b3JlLnB1dCh2YWx1ZSwga2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZShzdG9yZU5hbWU6IHN0cmluZywga2V5OiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRiV3JhcHBlci52YWxpZGF0ZUJlZm9yZVRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgcmVqZWN0KTtcblxuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmRiV3JhcHBlci5jcmVhdGVUcmFuc2FjdGlvbih7XG4gICAgICAgIHN0b3JlTmFtZTogc3RvcmVOYW1lLFxuICAgICAgICBkYk1vZGU6ICdyZWFkd3JpdGUnLFxuICAgICAgICBlcnJvcjogKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZTogKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LFxuICAgICAgICBhYm9ydDogKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgICAgb2JqZWN0U3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuXG4gICAgICBvYmplY3RTdG9yZVsnZGVsZXRlJ10oa2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIG9wZW5DdXJzb3Ioc3RvcmVOYW1lOiBzdHJpbmcsIGN1cnNvckNhbGxiYWNrOiAoZXZ0OiBFdmVudCkgPT4gdm9pZCwga2V5UmFuZ2U/OiBJREJLZXlSYW5nZSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGJXcmFwcGVyLnZhbGlkYXRlQmVmb3JlVHJhbnNhY3Rpb24oc3RvcmVOYW1lLCByZWplY3QpO1xuXG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHRoaXMuZGJXcmFwcGVyLmNyZWF0ZVRyYW5zYWN0aW9uKHtcbiAgICAgICAgc3RvcmVOYW1lOiBzdG9yZU5hbWUsXG4gICAgICAgIGRiTW9kZTogJ3JlYWRvbmx5JyxcbiAgICAgICAgZXJyb3I6IChlOiBFdmVudCkgPT4ge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGU6IChlOiBFdmVudCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgYWJvcnQ6IChlOiBFdmVudCkgPT4ge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICAgIG9iamVjdFN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc3RvcmVOYW1lKSxcbiAgICAgICAgcmVxdWVzdCA9IG9iamVjdFN0b3JlLm9wZW5DdXJzb3Ioa2V5UmFuZ2UpO1xuXG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IChldnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgIGN1cnNvckNhbGxiYWNrKGV2dCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBjbGVhcihzdG9yZU5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGJXcmFwcGVyLnZhbGlkYXRlQmVmb3JlVHJhbnNhY3Rpb24oc3RvcmVOYW1lLCByZWplY3QpO1xuXG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHRoaXMuZGJXcmFwcGVyLmNyZWF0ZVRyYW5zYWN0aW9uKHtcbiAgICAgICAgc3RvcmVOYW1lOiBzdG9yZU5hbWUsXG4gICAgICAgIGRiTW9kZTogJ3JlYWR3cml0ZScsXG4gICAgICAgIGVycm9yOiAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlOiAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGFib3J0OiAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgICBvYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHN0b3JlTmFtZSk7XG4gICAgICBvYmplY3RTdG9yZS5jbGVhcigpO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0QnlJbmRleChzdG9yZU5hbWU6IHN0cmluZywgaW5kZXhOYW1lOiBzdHJpbmcsIGtleTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kYldyYXBwZXIudmFsaWRhdGVCZWZvcmVUcmFuc2FjdGlvbihzdG9yZU5hbWUsIHJlamVjdCk7XG5cbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYldyYXBwZXIuY3JlYXRlVHJhbnNhY3Rpb24oe1xuICAgICAgICBzdG9yZU5hbWU6IHN0b3JlTmFtZSxcbiAgICAgICAgZGJNb2RlOiAncmVhZG9ubHknLFxuICAgICAgICBlcnJvcjogKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9LFxuICAgICAgICBhYm9ydDogKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZTogKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgICBvYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHN0b3JlTmFtZSksXG4gICAgICAgIGluZGV4ID0gb2JqZWN0U3RvcmUuaW5kZXgoaW5kZXhOYW1lKSxcbiAgICAgICAgcmVxdWVzdCA9IGluZGV4LmdldChrZXkpO1xuXG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IChldmVudCkgPT4ge1xuICAgICAgICByZXNvbHZlKCg8SURCT3BlbkRCUmVxdWVzdD5ldmVudC50YXJnZXQpLnJlc3VsdCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG4iXX0=