UNPKG

pretur.clay

Version:
143 lines 21.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var lodash_1 = require("lodash"); var actions_1 = require("./actions"); function itemsEqual(items1, items2) { if (items1.length !== items2.length) { return false; } if (items1.length === 0) { return true; } for (var i = 0; i < items1.length; i++) { if (items1[i] !== items2[i]) { return false; } } return true; } var Set = /** @class */ (function () { function Set(items, error, state, original, identifier) { if (state === void 0) { state = 'normal'; } if (items instanceof Set) { return items; } this.identifier = typeof identifier === 'symbol' ? identifier : Symbol(); this.original = original ? original : this; this.state = state; this.items = items; this.error = error; } Object.defineProperty(Set.prototype, "modified", { get: function () { return this.original !== this; }, enumerable: true, configurable: true }); Object.defineProperty(Set.prototype, "valid", { get: function () { for (var _i = 0, _a = this.items; _i < _a.length; _i++) { var item = _a[_i]; if (!item.valid) { return false; } } return !this.error; }, enumerable: true, configurable: true }); Set.prototype.reduce = function (action) { if (actions_1.CLAY_CLEAR.is(this.identifier, action)) { return this.original; } if (actions_1.CLAY_REPLACE.is(this.identifier, action)) { return action.payload; } if (actions_1.CLAY_REFRESH.is(this.identifier, action)) { return action.payload && action.payload.data; } if (actions_1.CLAY_SET_ERROR.is(this.identifier, action)) { if (lodash_1.isEqual(this.error, action.payload)) { return this; } if (itemsEqual(this.original.items, this.items) && this.original.state === this.state && lodash_1.isEqual(this.original.error, action.payload)) { return this.original; } return new Set(this.items, action.payload, this.state, this.original, this.identifier); } if (actions_1.CLAY_SET_STATE.is(this.identifier, action)) { if (this.state === action.payload) { return this; } if (itemsEqual(this.original.items, this.items) && this.original.state === action.payload && lodash_1.isEqual(this.original.error, this.error)) { return this.original; } return new Set(this.items, this.error, action.payload, this.original, this.identifier); } if (actions_1.CLAY_ADD.is(this.identifier, action)) { if (!action.payload) { return this; } return new Set(this.items.concat([action.payload]), this.error, this.state, this.original, this.identifier); } if (actions_1.CLAY_REMOVE.is(this.identifier, action)) { var index = lodash_1.findIndex(this.items, function (item) { return item.identifier === action.payload; }); if (index !== -1) { var without = this.items.slice(); without.splice(index, 1); if (itemsEqual(this.original.items, without) && this.original.state === this.state && lodash_1.isEqual(this.original.error, this.error)) { return this.original; } return new Set(without, this.error, this.state, this.original, this.identifier); } } var original = true; var modified = false; var newItems = []; for (var i = 0; i < this.items.length; i++) { var newItem = this.items[i].reduce(action); if (this.items[i] !== newItem) { modified = true; } if (newItem !== this.original.items[i]) { original = false; } newItems.push(newItem); } if (modified) { if (original && this.original.state === this.state && lodash_1.isEqual(this.original.error, this.error)) { return this.original; } return new Set(newItems, this.error, this.state, this.original, this.identifier); } return this; }; Set.prototype.clear = function (dispatch) { dispatch(actions_1.CLAY_CLEAR.create.unicast(this.identifier)); }; Set.prototype.replace = function (dispatch, by) { dispatch(actions_1.CLAY_REPLACE.create.unicast(this.identifier, by)); }; Set.prototype.setError = function (dispatch, error) { dispatch(actions_1.CLAY_SET_ERROR.create.unicast(this.identifier, error)); }; Set.prototype.setState = function (dispatch, state) { dispatch(actions_1.CLAY_SET_STATE.create.unicast(this.identifier, state)); }; Set.prototype.add = function (dispatch, item) { dispatch(actions_1.CLAY_ADD.create.unicast(this.identifier, item)); }; return Set; }()); exports.Set = Set; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUE0QztBQU01QyxxQ0FRbUI7QUFFbkIsb0JBQXdDLE1BQW1CLEVBQUUsTUFBbUI7SUFDOUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3ZDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7SUFPRSxhQUNFLEtBQWtCLEVBQ2xCLEtBQXVCLEVBQ3ZCLEtBQXVCLEVBQ3ZCLFFBQWlCLEVBQ2pCLFVBQW1CO1FBRm5CLHNCQUFBLEVBQUEsZ0JBQXVCO1FBSXZCLEVBQUUsQ0FBQyxDQUFDLEtBQUssWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLFVBQVUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDekUsSUFBSSxD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LENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVNLHNCQUFRLEdBQWYsVUFBZ0IsUUFBa0IsRUFBRSxLQUFzQjtRQUN4RCxRQUFRLENBQUMsd0JBQWMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU0sc0JBQVEsR0FBZixVQUFnQixRQUFrQixFQUFFLEtBQVk7UUFDOUMsUUFBUSxDQUFDLHdCQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVNLGlCQUFHLEdBQVYsVUFBVyxRQUFrQixFQUFFLElBQWU7UUFDNUMsUUFBUSxDQUFDLGtCQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUNILFVBQUM7QUFBRCxDQUFDLEFBbExELElBa0xDO0FBbExZLGtCQUFHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFcXVhbCwgZmluZEluZGV4IH0gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgU3BlY1R5cGUgfSBmcm9tICdwcmV0dXIuc3BlYyc7XHJcbmltcG9ydCB7IEFjdGlvbiwgRGlzcGF0Y2ggfSBmcm9tICdyZWR1Y2libGUtbm9kZSc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ3ByZXR1ci52YWxpZGF0aW9uJztcclxuaW1wb3J0IHsgQ2xheSwgU3RhdGUgfSBmcm9tICcuL2NsYXknO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuL1JlY29yZCc7XHJcbmltcG9ydCB7XHJcbiAgQ0xBWV9DTEVBUixcclxuICBDTEFZX1JFUExBQ0UsXHJcbiAgQ0xBWV9TRVRfRVJST1IsXHJcbiAgQ0xBWV9TRVRfU1RBVEUsXHJcbiAgQ0xBWV9BREQsXHJcbiAgQ0xBWV9SRU1PVkUsXHJcbiAgQ0xBWV9SRUZSRVNILFxyXG59IGZyb20gJy4vYWN0aW9ucyc7XHJcblxyXG5mdW5jdGlvbiBpdGVtc0VxdWFsPFQgZXh0ZW5kcyBTcGVjVHlwZT4oaXRlbXMxOiBSZWNvcmQ8VD5bXSwgaXRlbXMyOiBSZWNvcmQ8VD5bXSk6IGJvb2xlYW4ge1xyXG4gIGlmIChpdGVtczEubGVuZ3RoICE9PSBpdGVtczIubGVuZ3RoKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpZiAoaXRlbXMxLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zMS5sZW5ndGg7IGkrKykge1xyXG4gICAgaWYgKGl0ZW1zMVtpXSAhPT0gaXRlbXMyW2ldKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2V0PFQgZXh0ZW5kcyBTcGVjVHlwZT4gaW1wbGVtZW50cyBDbGF5PFNldDxUPj4ge1xyXG4gIHB1YmxpYyByZWFkb25seSBpZGVudGlmaWVyOiBzeW1ib2w7XHJcbiAgcHVibGljIHJlYWRvbmx5IG9yaWdpbmFsOiB0aGlzO1xyXG4gIHB1YmxpYyByZWFkb25seSBzdGF0ZTogU3RhdGU7XHJcbiAgcHVibGljIHJlYWRvbmx5IGl0ZW1zOiBSZWNvcmQ8VD5bXTtcclxuICBwdWJsaWMgcmVhZG9ubHkgZXJyb3I6IFZhbGlkYXRpb25FcnJvcjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBpdGVtczogUmVjb3JkPFQ+W10sXHJcbiAgICBlcnJvcj86IFZhbGlkYXRpb25FcnJvcixcclxuICAgIHN0YXRlOiBTdGF0ZSA9ICdub3JtYWwnLFxyXG4gICAgb3JpZ2luYWw/OiBTZXQ8VD4sXHJcbiAgICBpZGVudGlmaWVyPzogc3ltYm9sLFxyXG4gICkge1xyXG4gICAgaWYgKGl0ZW1zIGluc3RhbmNlb2YgU2V0KSB7XHJcbiAgICAgIHJldHVybiBpdGVtcztcclxuICAgIH1cclxuICAgIHRoaXMuaWRlbnRpZmllciA9IHR5cGVvZiBpZGVudGlmaWVyID09PSAnc3ltYm9sJyA/IGlkZW50aWZpZXIgOiBTeW1ib2woKTtcclxuICAgIHRoaXMub3JpZ2luYWwgPSBvcmlnaW5hbCA/IDx0aGlzPm9yaWdpbmFsIDogdGhpcztcclxuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgIHRoaXMuaXRlbXMgPSBpdGVtcztcclxuICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbW9kaWZpZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5vcmlnaW5hbCAhPT0gdGhpcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5pdGVtcykge1xyXG4gICAgICBpZiAoIWl0ZW0udmFsaWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAhdGhpcy5lcnJvcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWR1Y2UoYWN0aW9uOiBBY3Rpb248YW55Pik6IHRoaXMge1xyXG4gICAgaWYgKENMQVlfQ0xFQVIuaXModGhpcy5pZGVudGlmaWVyLCBhY3Rpb24pKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChDTEFZX1JFUExBQ0UuaXModGhpcy5pZGVudGlmaWVyLCBhY3Rpb24pKSB7XHJcbiAgICAgIHJldHVybiBhY3Rpb24ucGF5bG9hZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoQ0xBWV9SRUZSRVNILmlzKHRoaXMuaWRlbnRpZmllciwgYWN0aW9uKSkge1xyXG4gICAgICByZXR1cm4gYWN0aW9uLnBheWxvYWQgJiYgYWN0aW9uLnBheWxvYWQuZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoQ0xBWV9TRVRfRVJST1IuaXModGhpcy5pZGVudGlmaWVyLCBhY3Rpb24pKSB7XHJcbiAgICAgIGlmIChpc0VxdWFsKHRoaXMuZXJyb3IsIGFjdGlvbi5wYXlsb2FkKSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgaXRlbXNFcXVhbCh0aGlzLm9yaWdpbmFsLml0ZW1zLCB0aGlzLml0ZW1zKSAmJlxyXG4gICAgICAgIHRoaXMub3JpZ2luYWwuc3RhdGUgPT09IHRoaXMuc3RhdGUgJiZcclxuICAgICAgICBpc0VxdWFsKHRoaXMub3JpZ2luYWwuZXJyb3IsIGFjdGlvbi5wYXlsb2FkKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIDx0aGlzPm5ldyBTZXQoXHJcbiAgICAgICAgdGhpcy5pdGVtcyxcclxuICAgICAgICBhY3Rpb24ucGF5bG9hZCxcclxuICAgICAgICB0aGlzLnN0YXRlLFxyXG4gICAgICAgIHRoaXMub3JpZ2luYWwsXHJcbiAgICAgICAgdGhpcy5pZGVudGlmaWVyLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChDTEFZX1NFVF9TVEFURS5pcyh0aGlzLmlkZW50aWZpZXIsIGFjdGlvbikpIHtcclxuICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IGFjdGlvbi5wYXlsb2FkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICBpdGVtc0VxdWFsKHRoaXMub3JpZ2luYWwuaXRlbXMsIHRoaXMuaXRlbXMpICYmXHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbC5zdGF0ZSA9PT0gYWN0aW9uLnBheWxvYWQgJiZcclxuICAgICAgICBpc0VxdWFsKHRoaXMub3JpZ2luYWwuZXJyb3IsIHRoaXMuZXJyb3IpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gPHRoaXM+bmV3IFNldChcclxuICAgICAgICB0aGlzLml0ZW1zLFxyXG4gICAgICAgIHRoaXMuZXJyb3IsXHJcbiAgICAgICAgYWN0aW9uLnBheWxvYWQsXHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbCxcclxuICAgICAgICB0aGlzLmlkZW50aWZpZXIsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKENMQVlfQURELmlzKHRoaXMuaWRlbnRpZmllciwgYWN0aW9uKSkge1xyXG4gICAgICBpZiAoIWFjdGlvbi5wYXlsb2FkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiA8dGhpcz5uZXcgU2V0KFxyXG4gICAgICAgIFsuLi50aGlzLml0ZW1zLCBhY3Rpb24ucGF5bG9hZF0sXHJcbiAgICAgICAgdGhpcy5lcnJvcixcclxuICAgICAgICB0aGlzLnN0YXRlLFxyXG4gICAgICAgIHRoaXMub3JpZ2luYWwsXHJcbiAgICAgICAgdGhpcy5pZGVudGlmaWVyLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChDTEFZX1JFTU9WRS5pcyh0aGlzLmlkZW50aWZpZXIsIGFjdGlvbikpIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBmaW5kSW5kZXgodGhpcy5pdGVtcywgaXRlbSA9PiBpdGVtLmlkZW50aWZpZXIgPT09IGFjdGlvbi5wYXlsb2FkKTtcclxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIGNvbnN0IHdpdGhvdXQgPSBbLi4udGhpcy5pdGVtc107XHJcbiAgICAgICAgd2l0aG91dC5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBpdGVtc0VxdWFsKHRoaXMub3JpZ2luYWwuaXRlbXMsIHdpdGhvdXQpICYmXHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsLnN0YXRlID09PSB0aGlzLnN0YXRlICYmXHJcbiAgICAgICAgICBpc0VxdWFsKHRoaXMub3JpZ2luYWwuZXJyb3IsIHRoaXMuZXJyb3IpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZXR1cm4gPHRoaXM+dGhpcy5vcmlnaW5hbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiA8dGhpcz5uZXcgU2V0KHdpdGhvdXQsIHRoaXMuZXJyb3IsIHRoaXMuc3RhdGUsIHRoaXMub3JpZ2luYWwsIHRoaXMuaWRlbnRpZmllcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgb3JpZ2luYWwgPSB0cnVlO1xyXG4gICAgbGV0IG1vZGlmaWVkID0gZmFsc2U7XHJcbiAgICBjb25zdCBuZXdJdGVtczogUmVjb3JkPFQ+W10gPSBbXTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgbmV3SXRlbSA9IHRoaXMuaXRlbXNbaV0ucmVkdWNlKGFjdGlvbik7XHJcblxyXG4gICAgICBpZiAodGhpcy5pdGVtc1tpXSAhPT0gbmV3SXRlbSkge1xyXG4gICAgICAgIG1vZGlmaWVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG5ld0l0ZW0gIT09IHRoaXMub3JpZ2luYWwuaXRlbXNbaV0pIHtcclxuICAgICAgICBvcmlnaW5hbCA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuZXdJdGVtcy5wdXNoKG5ld0l0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtb2RpZmllZCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgb3JpZ2luYWwgJiZcclxuICAgICAgICB0aGlzLm9yaWdpbmFsLnN0YXRlID09PSB0aGlzLnN0YXRlICYmXHJcbiAgICAgICAgaXNFcXVhbCh0aGlzLm9yaWdpbmFsLmVycm9yLCB0aGlzLmVycm9yKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIDx0aGlzPm5ldyBTZXQobmV3SXRlbXMsIHRoaXMuZXJyb3IsIHRoaXMuc3RhdGUsIHRoaXMub3JpZ2luYWwsIHRoaXMuaWRlbnRpZmllcik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXIoZGlzcGF0Y2g6IERpc3BhdGNoKTogdm9pZCB7XHJcbiAgICBkaXNwYXRjaChDTEFZX0NMRUFSLmNyZWF0ZS51bmljYXN0KHRoaXMuaWRlbnRpZmllcikpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlcGxhY2UoZGlzcGF0Y2g6IERpc3BhdGNoLCBieTogdGhpcyk6IHZvaWQge1xyXG4gICAgZGlzcGF0Y2goQ0xBWV9SRVBMQUNFLmNyZWF0ZS51bmljYXN0KHRoaXMuaWRlbnRpZmllciwgYnkpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRFcnJvcihkaXNwYXRjaDogRGlzcGF0Y2gsIGVycm9yOiBWYWxpZGF0aW9uRXJyb3IpOiB2b2lkIHtcclxuICAgIGRpc3BhdGNoKENMQVlfU0VUX0VSUk9SLmNyZWF0ZS51bmljYXN0KHRoaXMuaWRlbnRpZmllciwgZXJyb3IpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTdGF0ZShkaXNwYXRjaDogRGlzcGF0Y2gsIHN0YXRlOiBTdGF0ZSk6IHZvaWQge1xyXG4gICAgZGlzcGF0Y2goQ0xBWV9TRVRfU1RBVEUuY3JlYXRlLnVuaWNhc3QodGhpcy5pZGVudGlmaWVyLCBzdGF0ZSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZChkaXNwYXRjaDogRGlzcGF0Y2gsIGl0ZW06IFJlY29yZDxUPik6IHZvaWQge1xyXG4gICAgZGlzcGF0Y2goQ0xBWV9BREQuY3JlYXRlLnVuaWNhc3QodGhpcy5pZGVudGlmaWVyLCBpdGVtKSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==