@ngxs-labs/entity-state
Version:
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.0.5.
255 lines • 16.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { InvalidIdOfError, UnableToGenerateIdError } from './errors';
export var IdStrategy;
(function (IdStrategy) {
/**
* @abstract
* @template T
*/
var /**
* @abstract
* @template T
*/
IdGenerator = /** @class */ (function () {
function IdGenerator(idKey) {
this.idKey = idKey;
}
/**
* Checks if the given id is in the state's ID array
* @param id the ID to check
* @param state the current state
*/
/**
* Checks if the given id is in the state's ID array
* @param {?} id the ID to check
* @param {?} state the current state
* @return {?}
*/
IdGenerator.prototype.isIdInState = /**
* Checks if the given id is in the state's ID array
* @param {?} id the ID to check
* @param {?} state the current state
* @return {?}
*/
function (id, state) {
return state.ids.includes(id);
};
/**
* This function tries to get the present ID of the given entity with #getIdOf.
* If it's undefined the #generateId function will be used.
* @param entity The entity to get the ID from
* @param state The current state
* @see getIdOf
* @see generateId
*/
/**
* This function tries to get the present ID of the given entity with #getIdOf.
* If it's undefined the #generateId function will be used.
* @see getIdOf / generateId
* @param {?} entity The entity to get the ID from
* @param {?} state The current state
* @return {?}
*/
IdGenerator.prototype.getPresentIdOrGenerate = /**
* This function tries to get the present ID of the given entity with #getIdOf.
* If it's undefined the #generateId function will be used.
* @see getIdOf / generateId
* @param {?} entity The entity to get the ID from
* @param {?} state The current state
* @return {?}
*/
function (entity, state) {
/** @type {?} */
var presentId = this.getIdOf(entity);
return presentId === undefined ? this.generateId(entity, state) : presentId;
};
/**
* A wrapper for #getIdOf. If the function returns undefined an error will be thrown.
* @param entity The entity to get the ID from
* @see getIdOf
* @see InvalidIdOfError
*/
/**
* A wrapper for #getIdOf. If the function returns undefined an error will be thrown.
* @see getIdOf / InvalidIdOfError
* @param {?} entity The entity to get the ID from
* @return {?}
*/
IdGenerator.prototype.mustGetIdOf = /**
* A wrapper for #getIdOf. If the function returns undefined an error will be thrown.
* @see getIdOf / InvalidIdOfError
* @param {?} entity The entity to get the ID from
* @return {?}
*/
function (entity) {
/** @type {?} */
var id = this.getIdOf(entity);
if (id === undefined) {
throw new InvalidIdOfError();
}
return id;
};
/**
* Returns the ID for the given entity. Can return undefined.
* @param entity The entity to get the ID from
*/
/**
* Returns the ID for the given entity. Can return undefined.
* @param {?} entity The entity to get the ID from
* @return {?}
*/
IdGenerator.prototype.getIdOf = /**
* Returns the ID for the given entity. Can return undefined.
* @param {?} entity The entity to get the ID from
* @return {?}
*/
function (entity) {
return entity[this.idKey];
};
return IdGenerator;
}());
IdStrategy.IdGenerator = IdGenerator;
if (false) {
/**
* @type {?}
* @protected
*/
IdGenerator.prototype.idKey;
/**
* Generates a completely new ID.
* The IdGenerator's implementation has to ensure that the generated ID does not exist in the current state.
* It can throw an UnableToGenerateIdError if it's unable to do so.
* @see getPresentIdOrGenerate / UnableToGenerateIdError
* @abstract
* @param {?} entity The entity to generate an ID for
* @param {?} state The current state
* @return {?}
*/
IdGenerator.prototype.generateId = function (entity, state) { };
}
/**
* @template T
*/
var /**
* @template T
*/
IncrementingIdGenerator = /** @class */ (function (_super) {
tslib_1.__extends(IncrementingIdGenerator, _super);
function IncrementingIdGenerator(idKey) {
return _super.call(this, idKey) || this;
}
/**
* @param {?} entity
* @param {?} state
* @return {?}
*/
IncrementingIdGenerator.prototype.generateId = /**
* @param {?} entity
* @param {?} state
* @return {?}
*/
function (entity, state) {
/** @type {?} */
var max = Math.max.apply(Math, tslib_1.__spread([-1], state.ids.map((/**
* @param {?} id
* @return {?}
*/
function (id) { return parseInt(id, 10); }))));
return (max + 1).toString(10);
};
return IncrementingIdGenerator;
}(IdGenerator));
IdStrategy.IncrementingIdGenerator = IncrementingIdGenerator;
/**
* @template T
*/
var /**
* @template T
*/
UUIDGenerator = /** @class */ (function (_super) {
tslib_1.__extends(UUIDGenerator, _super);
function UUIDGenerator(idKey) {
return _super.call(this, idKey) || this;
}
/**
* @param {?} entity
* @param {?} state
* @return {?}
*/
UUIDGenerator.prototype.generateId = /**
* @param {?} entity
* @param {?} state
* @return {?}
*/
function (entity, state) {
/** @type {?} */
var nextId;
do {
nextId = this.uuidv4();
} while (this.isIdInState(nextId, state));
return nextId;
};
/**
* @private
* @return {?}
*/
UUIDGenerator.prototype.uuidv4 = /**
* @private
* @return {?}
*/
function () {
// https://stackoverflow.com/a/2117523
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (/**
* @param {?} c
* @return {?}
*/
function (c) {
/** @type {?} */
var r = (Math.random() * 16) | 0;
// tslint:disable-line
/** @type {?} */
var v = c === 'x' ? r : (r & 0x3) | 0x8;
return v.toString(16);
}));
};
return UUIDGenerator;
}(IdGenerator));
IdStrategy.UUIDGenerator = UUIDGenerator;
/**
* @template T
*/
var /**
* @template T
*/
EntityIdGenerator = /** @class */ (function (_super) {
tslib_1.__extends(EntityIdGenerator, _super);
function EntityIdGenerator(idKey) {
return _super.call(this, idKey) || this;
}
/**
* @param {?} entity
* @param {?} state
* @return {?}
*/
EntityIdGenerator.prototype.generateId = /**
* @param {?} entity
* @param {?} state
* @return {?}
*/
function (entity, state) {
/** @type {?} */
var id = this.mustGetIdOf(entity);
if (this.isIdInState(id, state)) {
throw new UnableToGenerateIdError("The provided ID already exists: " + id);
}
return id;
};
return EntityIdGenerator;
}(IdGenerator));
IdStrategy.EntityIdGenerator = EntityIdGenerator;
})(IdStrategy || (IdStrategy = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWQtc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4cy1sYWJzL2VudGl0eS1zdGF0ZS8iLCJzb3VyY2VzIjpbImxpYi9pZC1zdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVyRSxNQUFNLEtBQVcsVUFBVSxDQTJHMUI7QUEzR0QsV0FBaUIsVUFBVTs7Ozs7SUFDekI7Ozs7O1FBQ0UscUJBQXlDLEtBQWM7WUFBZCxVQUFLLEdBQUwsS0FBSyxDQUFTO1FBQUcsQ0FBQztRQWEzRDs7OztXQUlHOzs7Ozs7O1FBQ0gsaUNBQVc7Ozs7OztRQUFYLFVBQVksRUFBVSxFQUFFLEtBQTRCO1lBQ2xELE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUVEOzs7Ozs7O1dBT0c7Ozs7Ozs7OztRQUNILDRDQUFzQjs7Ozs7Ozs7UUFBdEIsVUFBdUIsTUFBa0IsRUFBRSxLQUE0Qjs7Z0JBQy9ELFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUN0QyxPQUFPLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDOUUsQ0FBQztRQUVEOzs7OztXQUtHOzs7Ozs7O1FBQ0gsaUNBQVc7Ozs7OztRQUFYLFVBQVksTUFBVzs7Z0JBQ2YsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQy9CLElBQUksRUFBRSxLQUFLLFNBQVMsRUFBRTtnQkFDcEIsTUFBTSxJQUFJLGdCQUFnQixFQUFFLENBQUM7YUFDOUI7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRDs7O1dBR0c7Ozs7OztRQUNILDZCQUFPOzs7OztRQUFQLFVBQVEsTUFBVztZQUNqQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUNILGtCQUFDO0lBQUQsQ0FBQyxBQXpERCxJQXlEQztJQXpEcUIsc0JBQVcsY0F5RGhDLENBQUE7Ozs7OztRQXhEdUIsNEJBQWlDOzs7Ozs7Ozs7OztRQVd2RCxnRUFBOEU7Ozs7O0lBK0NoRjs7OztRQUFnRCxtREFBYztRQUM1RCxpQ0FBWSxLQUFjO21CQUN4QixrQkFBTSxLQUFLLENBQUM7UUFDZCxDQUFDOzs7Ozs7UUFFRCw0Q0FBVTs7Ozs7UUFBVixVQUFXLE1BQWtCLEVBQUUsS0FBNEI7O2dCQUNuRCxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsT0FBUixJQUFJLG9CQUFLLENBQUMsQ0FBQyxHQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRzs7OztZQUFDLFVBQUEsRUFBRSxJQUFJLE9BQUEsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBaEIsQ0FBZ0IsRUFBQyxFQUFDO1lBQ2xFLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDSCw4QkFBQztJQUFELENBQUMsQUFURCxDQUFnRCxXQUFXLEdBUzFEO0lBVFksa0NBQXVCLDBCQVNuQyxDQUFBOzs7O0lBRUQ7Ozs7UUFBc0MseUNBQWM7UUFDbEQsdUJBQVksS0FBYzttQkFDeEIsa0JBQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQzs7Ozs7O1FBRUQsa0NBQVU7Ozs7O1FBQVYsVUFBVyxNQUFrQixFQUFFLEtBQTRCOztnQkFDckQsTUFBTTtZQUNWLEdBQUc7Z0JBQ0QsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUN4QixRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQzFDLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7Ozs7O1FBRU8sOEJBQU07Ozs7UUFBZDtZQUNFLHNDQUFzQztZQUN0QyxPQUFPLHNDQUFzQyxDQUFDLE9BQU8sQ0FBQyxPQUFPOzs7O1lBQUUsVUFBUyxDQUFDOztvQkFDakUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7OztvQkFDNUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRztnQkFDekMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hCLENBQUMsRUFBQyxDQUFDO1FBQ0wsQ0FBQztRQUNILG9CQUFDO0lBQUQsQ0FBQyxBQXJCRCxDQUFzQyxXQUFXLEdBcUJoRDtJQXJCWSx3QkFBYSxnQkFxQnpCLENBQUE7Ozs7SUFFRDs7OztRQUEwQyw2Q0FBYztRQUN0RCwyQkFBWSxLQUFjO21CQUN4QixrQkFBTSxLQUFLLENBQUM7UUFDZCxDQUFDOzs7Ozs7UUFFRCxzQ0FBVTs7Ozs7UUFBVixVQUFXLE1BQWtCLEVBQUUsS0FBNEI7O2dCQUNuRCxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDbkMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDL0IsTUFBTSxJQUFJLHVCQUF1QixDQUFDLHFDQUFtQyxFQUFJLENBQUMsQ0FBQzthQUM1RTtZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNILHdCQUFDO0lBQUQsQ0FBQyxBQVpELENBQTBDLFdBQVcsR0FZcEQ7SUFaWSw0QkFBaUIsb0JBWTdCLENBQUE7QUFDSCxDQUFDLEVBM0dnQixVQUFVLEtBQVYsVUFBVSxRQTJHMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHlTdGF0ZU1vZGVsIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgSW52YWxpZElkT2ZFcnJvciwgVW5hYmxlVG9HZW5lcmF0ZUlkRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgSWRTdHJhdGVneSB7XG4gIGV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJZEdlbmVyYXRvcjxUPiB7XG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBpZEtleToga2V5b2YgVCkge31cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIGNvbXBsZXRlbHkgbmV3IElELlxuICAgICAqIFRoZSBJZEdlbmVyYXRvcidzIGltcGxlbWVudGF0aW9uIGhhcyB0byBlbnN1cmUgdGhhdCB0aGUgZ2VuZXJhdGVkIElEIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjdXJyZW50IHN0YXRlLlxuICAgICAqIEl0IGNhbiB0aHJvdyBhbiBVbmFibGVUb0dlbmVyYXRlSWRFcnJvciBpZiBpdCdzIHVuYWJsZSB0byBkbyBzby5cbiAgICAgKiBAcGFyYW0gZW50aXR5IFRoZSBlbnRpdHkgdG8gZ2VuZXJhdGUgYW4gSUQgZm9yXG4gICAgICogQHBhcmFtIHN0YXRlIFRoZSBjdXJyZW50IHN0YXRlXG4gICAgICogQHNlZSBnZXRQcmVzZW50SWRPckdlbmVyYXRlXG4gICAgICogQHNlZSBVbmFibGVUb0dlbmVyYXRlSWRFcnJvclxuICAgICAqL1xuICAgIGFic3RyYWN0IGdlbmVyYXRlSWQoZW50aXR5OiBQYXJ0aWFsPFQ+LCBzdGF0ZTogRW50aXR5U3RhdGVNb2RlbDxhbnk+KTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBpZCBpcyBpbiB0aGUgc3RhdGUncyBJRCBhcnJheVxuICAgICAqIEBwYXJhbSBpZCB0aGUgSUQgdG8gY2hlY2tcbiAgICAgKiBAcGFyYW0gc3RhdGUgdGhlIGN1cnJlbnQgc3RhdGVcbiAgICAgKi9cbiAgICBpc0lkSW5TdGF0ZShpZDogc3RyaW5nLCBzdGF0ZTogRW50aXR5U3RhdGVNb2RlbDxhbnk+KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gc3RhdGUuaWRzLmluY2x1ZGVzKGlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGdldCB0aGUgcHJlc2VudCBJRCBvZiB0aGUgZ2l2ZW4gZW50aXR5IHdpdGggI2dldElkT2YuXG4gICAgICogSWYgaXQncyB1bmRlZmluZWQgdGhlICNnZW5lcmF0ZUlkIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZC5cbiAgICAgKiBAcGFyYW0gZW50aXR5IFRoZSBlbnRpdHkgdG8gZ2V0IHRoZSBJRCBmcm9tXG4gICAgICogQHBhcmFtIHN0YXRlIFRoZSBjdXJyZW50IHN0YXRlXG4gICAgICogQHNlZSBnZXRJZE9mXG4gICAgICogQHNlZSBnZW5lcmF0ZUlkXG4gICAgICovXG4gICAgZ2V0UHJlc2VudElkT3JHZW5lcmF0ZShlbnRpdHk6IFBhcnRpYWw8VD4sIHN0YXRlOiBFbnRpdHlTdGF0ZU1vZGVsPGFueT4pOiBzdHJpbmcge1xuICAgICAgY29uc3QgcHJlc2VudElkID0gdGhpcy5nZXRJZE9mKGVudGl0eSk7XG4gICAgICByZXR1cm4gcHJlc2VudElkID09PSB1bmRlZmluZWQgPyB0aGlzLmdlbmVyYXRlSWQoZW50aXR5LCBzdGF0ZSkgOiBwcmVzZW50SWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB3cmFwcGVyIGZvciAjZ2V0SWRPZi4gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgdW5kZWZpbmVkIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICAgICAqIEBwYXJhbSBlbnRpdHkgVGhlIGVudGl0eSB0byBnZXQgdGhlIElEIGZyb21cbiAgICAgKiBAc2VlIGdldElkT2ZcbiAgICAgKiBAc2VlIEludmFsaWRJZE9mRXJyb3JcbiAgICAgKi9cbiAgICBtdXN0R2V0SWRPZihlbnRpdHk6IGFueSk6IHN0cmluZyB7XG4gICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SWRPZihlbnRpdHkpO1xuICAgICAgaWYgKGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRJZE9mRXJyb3IoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBJRCBmb3IgdGhlIGdpdmVuIGVudGl0eS4gQ2FuIHJldHVybiB1bmRlZmluZWQuXG4gICAgICogQHBhcmFtIGVudGl0eSBUaGUgZW50aXR5IHRvIGdldCB0aGUgSUQgZnJvbVxuICAgICAqL1xuICAgIGdldElkT2YoZW50aXR5OiBhbnkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgcmV0dXJuIGVudGl0eVt0aGlzLmlkS2V5XTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgY2xhc3MgSW5jcmVtZW50aW5nSWRHZW5lcmF0b3I8VD4gZXh0ZW5kcyBJZEdlbmVyYXRvcjxUPiB7XG4gICAgY29uc3RydWN0b3IoaWRLZXk6IGtleW9mIFQpIHtcbiAgICAgIHN1cGVyKGlkS2V5KTtcbiAgICB9XG5cbiAgICBnZW5lcmF0ZUlkKGVudGl0eTogUGFydGlhbDxUPiwgc3RhdGU6IEVudGl0eVN0YXRlTW9kZWw8YW55Pik6IHN0cmluZyB7XG4gICAgICBjb25zdCBtYXggPSBNYXRoLm1heCgtMSwgLi4uc3RhdGUuaWRzLm1hcChpZCA9PiBwYXJzZUludChpZCwgMTApKSk7XG4gICAgICByZXR1cm4gKG1heCArIDEpLnRvU3RyaW5nKDEwKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgY2xhc3MgVVVJREdlbmVyYXRvcjxUPiBleHRlbmRzIElkR2VuZXJhdG9yPFQ+IHtcbiAgICBjb25zdHJ1Y3RvcihpZEtleToga2V5b2YgVCkge1xuICAgICAgc3VwZXIoaWRLZXkpO1xuICAgIH1cblxuICAgIGdlbmVyYXRlSWQoZW50aXR5OiBQYXJ0aWFsPFQ+LCBzdGF0ZTogRW50aXR5U3RhdGVNb2RlbDxhbnk+KTogc3RyaW5nIHtcbiAgICAgIGxldCBuZXh0SWQ7XG4gICAgICBkbyB7XG4gICAgICAgIG5leHRJZCA9IHRoaXMudXVpZHY0KCk7XG4gICAgICB9IHdoaWxlICh0aGlzLmlzSWRJblN0YXRlKG5leHRJZCwgc3RhdGUpKTtcbiAgICAgIHJldHVybiBuZXh0SWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1dWlkdjQoKTogc3RyaW5nIHtcbiAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMTE3NTIzXG4gICAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbihjKSB7XG4gICAgICAgIGNvbnN0IHIgPSAoTWF0aC5yYW5kb20oKSAqIDE2KSB8IDA7IC8vIHRzbGludDpkaXNhYmxlLWxpbmVcbiAgICAgICAgY29uc3QgdiA9IGMgPT09ICd4JyA/IHIgOiAociAmIDB4MykgfCAweDg7IC8vIHRzbGludDpkaXNhYmxlLWxpbmVcbiAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGNsYXNzIEVudGl0eUlkR2VuZXJhdG9yPFQ+IGV4dGVuZHMgSWRHZW5lcmF0b3I8VD4ge1xuICAgIGNvbnN0cnVjdG9yKGlkS2V5OiBrZXlvZiBUKSB7XG4gICAgICBzdXBlcihpZEtleSk7XG4gICAgfVxuXG4gICAgZ2VuZXJhdGVJZChlbnRpdHk6IFBhcnRpYWw8VD4sIHN0YXRlOiBFbnRpdHlTdGF0ZU1vZGVsPGFueT4pOiBzdHJpbmcge1xuICAgICAgY29uc3QgaWQgPSB0aGlzLm11c3RHZXRJZE9mKGVudGl0eSk7XG4gICAgICBpZiAodGhpcy5pc0lkSW5TdGF0ZShpZCwgc3RhdGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBVbmFibGVUb0dlbmVyYXRlSWRFcnJvcihgVGhlIHByb3ZpZGVkIElEIGFscmVhZHkgZXhpc3RzOiAke2lkfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgfVxufVxuIl19