UNPKG

@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
/** * @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