UNPKG

@neocomplexx/ngx-neo-indexeddb

Version:

This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.0.5.

305 lines 29.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { DbWrapper } from './classes/dbWrapper'; import { Utils } from './classes/utils'; export class NgxNeoIDB { /** * @param {?} dbName * @param {?} version */ constructor(dbName, version) { this.utils = new Utils(); this.dbWrapper = new DbWrapper(dbName, version); } /** * @param {?} version * @param {?=} upgradeCallback * @return {?} */ openDatabase(version, upgradeCallback) { return new Promise((resolve, reject) => { this.dbWrapper.dbVersion = version; /** @type {?} */ const request = this.utils.indexedDB.open(this.dbWrapper.dbName, version); request.onsuccess = (e) => { this.dbWrapper.db = request.result; resolve(); }; request.onerror = (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 = (e) => { upgradeCallback(e, this.dbWrapper.db); }; } }); } /** * @param {?} storeName * @param {?} key * @return {?} */ getByKey(storeName, key) { return new Promise((resolve, reject) => { this.dbWrapper.validateBeforeTransaction(storeName, reject); /** @type {?} */ const transaction = this.dbWrapper.createTransaction({ storeName: storeName, dbMode: 'readonly', error: (e) => { reject(e); }, complete: (e) => { } }); /** @type {?} */ const objectStore = transaction.objectStore(storeName); /** @type {?} */ let request; request = objectStore.get(key); request.onsuccess = (event) => { resolve(((/** @type {?} */ (event.target))).result); }; }); } /** * @param {?} storeName * @param {?=} keyRange * @param {?=} indexDetails * @return {?} */ getAll(storeName, keyRange, indexDetails) { return new Promise((resolve, reject) => { this.dbWrapper.validateBeforeTransaction(storeName, reject); /** @type {?} */ const transaction = this.dbWrapper.createTransaction({ storeName: storeName, dbMode: 'readonly', error: (e) => { reject(e); }, complete: (e) => { } }); /** @type {?} */ const objectStore = transaction.objectStore(storeName); /** @type {?} */ const result = []; /** @type {?} */ let request; if (indexDetails) { /** @type {?} */ const index = objectStore.index(indexDetails.indexName); /** @type {?} */ const order = (indexDetails.order === 'desc') ? 'prev' : 'next'; request = index.openCursor(keyRange, (/** @type {?} */ (order))); } else { request = objectStore.openCursor(keyRange); } request.onerror = (e) => { reject(e); }; request.onsuccess = (evt) => { /** @type {?} */ const cursor = ((/** @type {?} */ (evt.target))).result; if (cursor) { result.push(cursor.value); cursor['continue'](); } else { resolve(result); } }; }); } /** * @param {?} storeName * @param {?} value * @param {?=} key * @return {?} */ add(storeName, value, key) { return new Promise((resolve, reject) => { this.dbWrapper.validateBeforeTransaction(storeName, reject); /** @type {?} */ const transaction = this.dbWrapper.createTransaction({ storeName: storeName, dbMode: 'readwrite', error: (e) => { reject(e); }, complete: (e) => { resolve({ key: key, value: value }); } }); /** @type {?} */ const objectStore = transaction.objectStore(storeName); /** @type {?} */ const request = objectStore.add(value, key); request.onsuccess = (evt) => { key = evt.target.result; }; }); } /** * @param {?} storeName * @param {?} value * @param {?=} key * @return {?} */ update(storeName, value, key) { return new Promise((resolve, reject) => { this.dbWrapper.validateBeforeTransaction(storeName, reject); /** @type {?} */ const transaction = this.dbWrapper.createTransaction({ storeName: storeName, dbMode: 'readwrite', error: (e) => { reject(e); }, complete: (e) => { resolve(value); }, abort: (e) => { reject(e); } }); /** @type {?} */ const objectStore = transaction.objectStore(storeName); objectStore.put(value, key); }); } /** * @param {?} storeName * @param {?} key * @return {?} */ delete(storeName, key) { return new Promise((resolve, reject) => { this.dbWrapper.validateBeforeTransaction(storeName, reject); /** @type {?} */ const transaction = this.dbWrapper.createTransaction({ storeName: storeName, dbMode: 'readwrite', error: (e) => { reject(e); }, complete: (e) => { resolve(); }, abort: (e) => { reject(e); } }); /** @type {?} */ const objectStore = transaction.objectStore(storeName); objectStore['delete'](key); }); } /** * @param {?} storeName * @param {?} cursorCallback * @param {?=} keyRange * @return {?} */ openCursor(storeName, cursorCallback, keyRange) { return new Promise((resolve, reject) => { this.dbWrapper.validateBeforeTransaction(storeName, reject); /** @type {?} */ const transaction = this.dbWrapper.createTransaction({ storeName: storeName, dbMode: 'readonly', error: (e) => { reject(e); }, complete: (e) => { resolve(); }, abort: (e) => { reject(e); } }); /** @type {?} */ const objectStore = transaction.objectStore(storeName); /** @type {?} */ const request = objectStore.openCursor(keyRange); request.onsuccess = (evt) => { cursorCallback(evt); resolve(); }; }); } /** * @param {?} storeName * @return {?} */ clear(storeName) { return new Promise((resolve, reject) => { this.dbWrapper.validateBeforeTransaction(storeName, reject); /** @type {?} */ const transaction = this.dbWrapper.createTransaction({ storeName: storeName, dbMode: 'readwrite', error: (e) => { reject(e); }, complete: (e) => { resolve(); }, abort: (e) => { reject(e); } }); /** @type {?} */ const objectStore = transaction.objectStore(storeName); objectStore.clear(); resolve(); }); } /** * @param {?} storeName * @param {?} indexName * @param {?} key * @return {?} */ getByIndex(storeName, indexName, key) { return new Promise((resolve, reject) => { this.dbWrapper.validateBeforeTransaction(storeName, reject); /** @type {?} */ const transaction = this.dbWrapper.createTransaction({ storeName: storeName, dbMode: 'readonly', error: (e) => { reject(e); }, abort: (e) => { reject(e); }, complete: (e) => { } }); /** @type {?} */ const objectStore = transaction.objectStore(storeName); /** @type {?} */ const index = objectStore.index(indexName); /** @type {?} */ const request = index.get(key); request.onsuccess = (event) => { resolve(((/** @type {?} */ (event.target))).result); }; }); } } if (false) { /** @type {?} */ NgxNeoIDB.prototype.utils; /** @type {?} */ NgxNeoIDB.prototype.dbWrapper; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4SURCLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5lb2NvbXBsZXh4L25neC1uZW8taW5kZXhlZGRiLyIsInNvdXJjZXMiOlsibGliL05neElEQi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUl4QyxNQUFNLE9BQU8sU0FBUzs7Ozs7SUFJcEIsWUFBWSxNQUFjLEVBQUUsT0FBZTtRQUN6QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEQsQ0FBQzs7Ozs7O0lBRUQsWUFBWSxDQUFDLE9BQWUsRUFBRSxlQUEwQjtRQUN0RCxPQUFPLElBQUksT0FBTyxDQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQzs7a0JBQzdCLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDO1lBQ3pFLE9BQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDbkMsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDLENBQUM7WUFFRixPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3RCLE1BQU0sQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLG1CQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxD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TSxFQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuRCxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjs7O0lBN09DLDBCQUFhOztJQUNiLDhCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERiV3JhcHBlciB9IGZyb20gJy4vY2xhc3Nlcy9kYldyYXBwZXInO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuL2NsYXNzZXMvdXRpbHMnO1xuaW1wb3J0IHsgSW5kZXhEZXRhaWxzIH0gZnJvbSAnLi9jbGFzc2VzL2luZGV4RGV0YWlscyc7XG5cblxuZXhwb3J0IGNsYXNzIE5neE5lb0lEQiB7XG4gIHV0aWxzOiBVdGlscztcbiAgZGJXcmFwcGVyOiBEYldyYXBwZXI7XG5cbiAgY29uc3RydWN0b3IoZGJOYW1lOiBzdHJpbmcsIHZlcnNpb246IG51bWJlcikge1xuICAgIHRoaXMudXRpbHMgPSBuZXcgVXRpbHMoKTtcbiAgICB0aGlzLmRiV3JhcHBlciA9IG5ldyBEYldyYXBwZXIoZGJOYW1lLCB2ZXJzaW9uKTtcbiAgfVxuXG4gIG9wZW5EYXRhYmFzZSh2ZXJzaW9uOiBudW1iZXIsIHVwZ3JhZGVDYWxsYmFjaz86IEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kYldyYXBwZXIuZGJWZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnV0aWxzLmluZGV4ZWREQi5vcGVuKHRoaXMuZGJXcmFwcGVyLmRiTmFtZSwgdmVyc2lvbik7XG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IChlKSA9PiB7XG4gICAgICAgIHRoaXMuZGJXcmFwcGVyLmRiID0gcmVxdWVzdC5yZXN1bHQ7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH07XG5cbiAgICAgIHJlcXVlc3Qub25lcnJvciA9IChlKSA9PiB7XG4gICAgICAgIHJlamVjdCgnSW5kZXhlZERCIGVycm9yOiAnICsgKDxhbnk+ZS50YXJnZXQpLmVycm9yQ29kZSA/XG4gICAgICAgICAgKDxhbnk+ZS50YXJnZXQpLmVycm9yQ29kZSArICcgKCcgKyAoPGFueT5lLnRhcmdldCkuZXJyb3IgKyAnKScgOlxuICAgICAgICAgICg8YW55PmUudGFyZ2V0KS5lcnJvckNvZGUpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHR5cGVvZiB1cGdyYWRlQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoZSkgPT4ge1xuICAgICAgICAgIHVwZ3JhZGVDYWxsYmFjayhlLCB0aGlzLmRiV3JhcHBlci5kYik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRCeUtleShzdG9yZU5hbWU6IHN0cmluZywga2V5OiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRiV3JhcHBlci52YWxpZGF0ZUJlZm9yZVRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgcmVqZWN0KTtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYldyYXBwZXIuY3JlYXRlVHJhbnNhY3Rpb24oe1xuICAgICAgICBzdG9yZU5hbWU6IHN0b3JlTmFtZSxcbiAgICAgICAgZGJNb2RlOiAncmVhZG9ubHknLFxuICAgICAgICBlcnJvcjogKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZTogKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3Qgb2JqZWN0U3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuICAgICAgbGV0IHJlcXVlc3Q6IElEQlJlcXVlc3Q7XG5cbiAgICAgIHJlcXVlc3QgPSBvYmplY3RTdG9yZS5nZXQoa2V5KTtcbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICByZXNvbHZlKCg8YW55PmV2ZW50LnRhcmdldCkucmVzdWx0KTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXRBbGwoc3RvcmVOYW1lOiBzdHJpbmcsIGtleVJhbmdlPzogSURCS2V5UmFuZ2UsIGluZGV4RGV0YWlscz86IEluZGV4RGV0YWlscykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGJXcmFwcGVyLnZhbGlkYXRlQmVmb3JlVHJhbnNhY3Rpb24oc3RvcmVOYW1lLCByZWplY3QpO1xuXG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHRoaXMuZGJXcmFwcGVyLmNyZWF0ZVRyYW5zYWN0aW9uKHtcbiAgICAgICAgc3RvcmVOYW1lOiBzdG9yZU5hbWUsXG4gICAgICAgIGRiTW9kZTogJ3JlYWRvbmx5JyxcbiAgICAgICAgZXJyb3I6IChlOiBFdmVudCkgPT4ge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGU6IChlOiBFdmVudCkgPT4ge1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG9iamVjdFN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc3RvcmVOYW1lKTtcbiAgICAgIGNvbnN0IHJlc3VsdDogQXJyYXk8YW55PiA9IFtdO1xuICAgICAgbGV0IHJlcXVlc3Q6IElEQlJlcXVlc3Q7XG4gICAgICBpZiAoaW5kZXhEZXRhaWxzKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gb2JqZWN0U3RvcmUuaW5kZXgoaW5kZXhEZXRhaWxzLmluZGV4TmFtZSksXG4gICAgICAgICAgb3JkZXIgPSAoaW5kZXhEZXRhaWxzLm9yZGVyID09PSAnZGVzYycpID8gJ3ByZXYnIDogJ25leHQnO1xuICAgICAgICByZXF1ZXN0ID0gaW5kZXgub3BlbkN1cnNvcihrZXlSYW5nZSwgPElEQkN1cnNvckRpcmVjdGlvbj5vcmRlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0ID0gb2JqZWN0U3RvcmUub3BlbkN1cnNvcihrZXlSYW5nZSk7XG4gICAgICB9XG5cbiAgICAgIHJlcXVlc3Qub25lcnJvciA9IChlKSA9PiB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH07XG5cbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gIChldnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnNvcjogYW55ID0gKDxJREJPcGVuREJSZXF1ZXN0PmV2dC50YXJnZXQpLnJlc3VsdDtcbiAgICAgICAgaWYgKGN1cnNvcikge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGN1cnNvci52YWx1ZSk7XG4gICAgICAgICAgY3Vyc29yWydjb250aW51ZSddKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgYWRkKHN0b3JlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBrZXk/OiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRiV3JhcHBlci52YWxpZGF0ZUJlZm9yZVRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgcmVqZWN0KTtcblxuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmRiV3JhcHBlci5jcmVhdGVUcmFuc2FjdGlvbih7XG4gICAgICAgIHN0b3JlTmFtZTogc3RvcmVOYW1lLFxuICAgICAgICBkYk1vZGU6ICdyZWFkd3JpdGUnLFxuICAgICAgICBlcnJvcjogKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZTogKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSh7IGtleToga2V5LCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgICBvYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHN0b3JlTmFtZSk7XG5cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBvYmplY3RTdG9yZS5hZGQodmFsdWUsIGtleSk7XG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IChldnQ6IGFueSkgPT4ge1xuICAgICAgICBrZXkgPSBldnQudGFyZ2V0LnJlc3VsdDtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGUoc3RvcmVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIGtleT86IGFueSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGJXcmFwcGVyLnZhbGlkYXRlQmVmb3JlVHJhbnNhY3Rpb24oc3RvcmVOYW1lLCByZWplY3QpO1xuXG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHRoaXMuZGJXcmFwcGVyLmNyZWF0ZVRyYW5zYWN0aW9uKHtcbiAgICAgICAgc3RvcmVOYW1lOiBzdG9yZU5hbWUsXG4gICAgICAgIGRiTW9kZTogJ3JlYWR3cml0ZScsXG4gICAgICAgIGVycm9yOiAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlOiAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgYWJvcnQ6IChlOiBFdmVudCkgPT4ge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICAgIG9iamVjdFN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc3RvcmVOYW1lKTtcblxuICAgICAgb2JqZWN0U3RvcmUucHV0KHZhbHVlLCBrZXkpO1xuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlKHN0b3JlTmFtZTogc3RyaW5nLCBrZXk6IGFueSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGJXcmFwcGVyLnZhbGlkYXRlQmVmb3JlVHJhbnNhY3Rpb24oc3RvcmVOYW1lLCByZWplY3QpO1xuXG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHRoaXMuZGJXcmFwcGVyLmNyZWF0ZVRyYW5zYWN0aW9uKHtcbiAgICAgICAgc3RvcmVOYW1lOiBzdG9yZU5hbWUsXG4gICAgICAgIGRiTW9kZTogJ3JlYWR3cml0ZScsXG4gICAgICAgIGVycm9yOiAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlOiAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGFib3J0OiAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgICBvYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHN0b3JlTmFtZSk7XG5cbiAgICAgIG9iamVjdFN0b3JlWydkZWxldGUnXShrZXkpO1xuICAgIH0pO1xuICB9XG5cbiAgb3BlbkN1cnNvcihzdG9yZU5hbWU6IHN0cmluZywgY3Vyc29yQ2FsbGJhY2s6IChldnQ6IEV2ZW50KSA9PiB2b2lkLCBrZXlSYW5nZT86IElEQktleVJhbmdlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kYldyYXBwZXIudmFsaWRhdGVCZWZvcmVUcmFuc2FjdGlvbihzdG9yZU5hbWUsIHJlamVjdCk7XG5cbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYldyYXBwZXIuY3JlYXRlVHJhbnNhY3Rpb24oe1xuICAgICAgICBzdG9yZU5hbWU6IHN0b3JlTmFtZSxcbiAgICAgICAgZGJNb2RlOiAncmVhZG9ubHknLFxuICAgICAgICBlcnJvcjogKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZTogKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LFxuICAgICAgICBhYm9ydDogKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgICAgb2JqZWN0U3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzdG9yZU5hbWUpLFxuICAgICAgICByZXF1ZXN0ID0gb2JqZWN0U3RvcmUub3BlbkN1cnNvcihrZXlSYW5nZSk7XG5cbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKGV2dDogRXZlbnQpID0+IHtcbiAgICAgICAgY3Vyc29yQ2FsbGJhY2soZXZ0KTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFyKHN0b3JlTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kYldyYXBwZXIudmFsaWRhdGVCZWZvcmVUcmFuc2FjdGlvbihzdG9yZU5hbWUsIHJlamVjdCk7XG5cbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYldyYXBwZXIuY3JlYXRlVHJhbnNhY3Rpb24oe1xuICAgICAgICBzdG9yZU5hbWU6IHN0b3JlTmFtZSxcbiAgICAgICAgZGJNb2RlOiAncmVhZHdyaXRlJyxcbiAgICAgICAgZXJyb3I6IChlOiBFdmVudCkgPT4ge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGU6IChlOiBFdmVudCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgYWJvcnQ6IChlOiBFdmVudCkgPT4ge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICAgIG9iamVjdFN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc3RvcmVOYW1lKTtcbiAgICAgIG9iamVjdFN0b3JlLmNsZWFyKCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRCeUluZGV4KHN0b3JlTmFtZTogc3RyaW5nLCBpbmRleE5hbWU6IHN0cmluZywga2V5OiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRiV3JhcHBlci52YWxpZGF0ZUJlZm9yZVRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgcmVqZWN0KTtcblxuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmRiV3JhcHBlci5jcmVhdGVUcmFuc2FjdGlvbih7XG4gICAgICAgIHN0b3JlTmFtZTogc3RvcmVOYW1lLFxuICAgICAgICBkYk1vZGU6ICdyZWFkb25seScsXG4gICAgICAgIGVycm9yOiAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFib3J0OiAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlOiAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICAgIG9iamVjdFN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc3RvcmVOYW1lKSxcbiAgICAgICAgaW5kZXggPSBvYmplY3RTdG9yZS5pbmRleChpbmRleE5hbWUpLFxuICAgICAgICByZXF1ZXN0ID0gaW5kZXguZ2V0KGtleSk7XG5cbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHJlc29sdmUoKDxJREJPcGVuREJSZXF1ZXN0PmV2ZW50LnRhcmdldCkucmVzdWx0KTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==