UNPKG

ngx-airbrush

Version:

Angular client for jsonapi/Graphiti backends

410 lines 25.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { JsonapiConverter } from './converters/jsonapi.converter'; import { ModelMetadata, AttributeMetadata } from './decorators/symboles'; import { ResourceSerializer } from './resource.serializer'; import { ResourceMetadataWrapper } from './resource-metadata.wrapper'; /** * @abstract */ var /** * @abstract */ ResourceBase = /** @class */ (function () { function ResourceBase(data) { this.modelInitialization = false; this.modelSerialization = false; this.__isRelation = false; if (!data) { return; } this.modelInitialization = true; this.id = data.id; this.assign(data); this.modelInitialization = false; } Object.defineProperty(ResourceBase.prototype, "__wrapper", { get: /** * @private * @return {?} */ function () { if (!this.__mdwrapper) { this.__mdwrapper = new ResourceMetadataWrapper(this); } return this.__mdwrapper; }, enumerable: true, configurable: true }); Object.defineProperty(ResourceBase.prototype, "__serializer", { get: /** * @private * @return {?} */ function () { if (!this.__resSerializer) { this.__resSerializer = new ResourceSerializer(this); } return this.__resSerializer; }, enumerable: true, configurable: true }); /** * @template T * @param {?} constructor * @param {?=} data * @return {?} */ ResourceBase.getModel = /** * @template T * @param {?} constructor * @param {?=} data * @return {?} */ function (constructor, data) { /** @type {?} */ var ret = new JsonapiConverter().deserialize(data); return new constructor(ret); }; /** * @template T * @param {?} constructor * @param {?} data * @param {?=} options * @return {?} */ ResourceBase.getAsRelationship = /** * @template T * @param {?} constructor * @param {?} data * @param {?=} options * @return {?} */ function (constructor, data, options) { if (!data) { return null; } options = tslib_1.__assign({ method: 'untouched', modelInit: false }, options); /** @type {?} */ var model; if (options.modelInit) { model = new constructor(data); } else { model = new constructor(); model.id = data.id; model.assign(data); } model.__isRelation = true; model.__method = options.method; return model; }; /** * @return {?} */ ResourceBase.prototype.isModelInitialization = /** * @return {?} */ function () { return this.modelInitialization; }; Object.defineProperty(ResourceBase.prototype, "modelOptions", { get: /** * @return {?} */ function () { return Reflect.getMetadata(ModelMetadata, this.constructor); }, enumerable: true, configurable: true }); Object.defineProperty(ResourceBase.prototype, "type", { get: /** * @return {?} */ function () { return this.modelOptions.type; }, enumerable: true, configurable: true }); Object.defineProperty(ResourceBase.prototype, "hasBeenTouched", { get: /** * @return {?} */ function () { /** @type {?} */ var touched = this.__isRelation && this.__method !== 'untouched'; return this.hasDirtyAttributes || this.hasDirtyBelongsTos || this.hasDirtyHasManys || touched; }, enumerable: true, configurable: true }); Object.defineProperty(ResourceBase.prototype, "hasDirtyAttributes", { get: /** * @return {?} */ function () { /** @type {?} */ var attributesMetadata = this[AttributeMetadata]; for (var propertyName in attributesMetadata) { if (attributesMetadata.hasOwnProperty(propertyName) && attributesMetadata[propertyName].hasDirtyAttributes) { return true; } } return false; }, enumerable: true, configurable: true }); Object.defineProperty(ResourceBase.prototype, "hasDirtyBelongsTos", { get: /** * @return {?} */ function () { var _this = this; /** @type {?} */ var keys = this.__wrapper.belongsToKeys({ defined: true }); /** @type {?} */ var touched = false; keys.forEach((/** * @param {?} key * @return {?} */ function (key) { touched = touched || _this[key].hasBeenTouched; })); return touched; }, enumerable: true, configurable: true }); Object.defineProperty(ResourceBase.prototype, "hasDirtyHasManys", { get: /** * @return {?} */ function () { var _this = this; /** @type {?} */ var keys = this.__wrapper.hasManyKeys({ defined: true }); /** @type {?} */ var touched = false; keys.forEach((/** * @param {?} key * @return {?} */ function (key) { touched = touched || _this[key].map((/** * @param {?} elt * @return {?} */ function (elt) { return elt.hasBeenTouched; })).reduce((/** * @param {?} res * @param {?} bool * @return {?} */ function (res, bool) { return res || bool; }), false); })); return touched; }, enumerable: true, configurable: true }); Object.defineProperty(ResourceBase.prototype, "isRelation", { get: /** * @return {?} */ function () { return this.__isRelation; }, enumerable: true, configurable: true }); Object.defineProperty(ResourceBase.prototype, "relationMethod", { get: /** * @return {?} */ function () { if (this.__method !== 'untouched') { return this.__method; } if (!this.hasBeenTouched) { return 'untouched'; } if (this.id) { return 'update'; } return 'create'; }, enumerable: true, configurable: true }); /** * @return {?} */ ResourceBase.prototype.rollbackAttributes = /** * @return {?} */ function () { /** @type {?} */ var attributesMetadata = this[AttributeMetadata]; for (var propertyName in attributesMetadata) { if (attributesMetadata.hasOwnProperty(propertyName) && attributesMetadata[propertyName].hasDirtyAttributes) { this[propertyName] = attributesMetadata[propertyName].oldValue; } } }; /** * @param {?} data * @return {?} */ ResourceBase.prototype.assign = /** * @param {?} data * @return {?} */ function (data) { /** @type {?} */ var clone = this.translateKeys(data); Object.assign(this, clone); if (this.__isRelation) { this.__method = this.relationMethod; } }; /** * @return {?} */ ResourceBase.prototype.disassociate = /** * @return {?} */ function () { this.__method = 'disassociate'; }; /** * @return {?} */ ResourceBase.prototype.destroy = /** * @return {?} */ function () { if (this.isRelation) { this.__method = 'destroy'; } else { throw new Error('Destroying resource is not supported! Use the service instead.'); } }; /** * @return {?} */ ResourceBase.prototype.toJsonapi = /** * @return {?} */ function () { return this.__serializer.toJsonapi(); }; /** * @return {?} */ ResourceBase.prototype.toHash = /** * @return {?} */ function () { return this.__serializer.toHash(); }; /** * @return {?} */ ResourceBase.prototype.sideload = /** * @return {?} */ function () { /** @type {?} */ var method = this.relationMethod; if (method === 'create' || method === 'untouched') { return; } /** @type {?} */ var type = this.modelOptions.type; return { id: this.id, type: type, __method: method, }; }; /** * @return {?} */ ResourceBase.prototype.serialize = /** * @return {?} */ function () { return this.__serializer.serialize(); }; /** * @private * @param {?} obj * @return {?} */ ResourceBase.prototype.translateKeys = /** * @private * @param {?} obj * @return {?} */ function (obj) { if (obj.toHash) { obj = obj.toHash(); } /** @type {?} */ var filtred = {}; for (var oldkey in obj) { if (obj.hasOwnProperty(oldkey)) { /** @type {?} */ var newkey = this.__wrapper.frontendPropName(oldkey.toString()); if (newkey) { filtred[newkey] = obj[oldkey]; } } } return filtred; }; return ResourceBase; }()); /** * @abstract */ export { ResourceBase }; if (false) { /** @type {?} */ ResourceBase.prototype.id; /** @type {?} */ ResourceBase.prototype.modelInitialization; /** @type {?} */ ResourceBase.prototype.modelSerialization; /** * @type {?} * @private */ ResourceBase.prototype.__method; /** * @type {?} * @private */ ResourceBase.prototype.__isRelation; /** * @type {?} * @private */ ResourceBase.prototype.__mdwrapper; /** * @type {?} * @private */ ResourceBase.prototype.__resSerializer; /* Skipping unhandled member: [key: string]: any;*/ } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtYmFzZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1haXJicnVzaC8iLCJzb3VyY2VzIjpbImxpYi9yZXNvdXJjZS1iYXNlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7O0FBS3RFOzs7O0lBMkNFLHNCQUFZLElBQTRCO1FBekNqQyx3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBSTFCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBcUMzQixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQUUsT0FBTztTQUFFO1FBQ3RCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUNuQyxDQUFDO0lBeENELHNCQUFZLG1DQUFTOzs7OztRQUFyQjtZQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUFFO1lBQ2hGLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQixDQUFDOzs7T0FBQTtJQUVELHNCQUFZLHNDQUFZOzs7OztRQUF4QjtZQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxF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LElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUk7UUFFbkMsT0FBTztZQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLElBQUksTUFBQTtZQUNKLFFBQVEsRUFBRSxNQUFNO1NBQ2pCLENBQUM7SUFDSixDQUFDOzs7O0lBRU0sZ0NBQVM7OztJQUFoQjtRQUNFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN2QyxDQUFDOzs7Ozs7SUFFTyxvQ0FBYTs7Ozs7SUFBckIsVUFBc0IsR0FBUTtRQUM1QixJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQUU7O1lBRWpDLE9BQU8sR0FBRyxFQUFFO1FBQ2xCLEtBQUssSUFBTSxNQUFNLElBQUksR0FBRyxFQUFFO1lBQ3hCLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRTs7b0JBQ3hCLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDakUsSUFBSSxNQUFNLEVBQUU7b0JBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFBRTthQUMvQztTQUNGO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUNILG1CQUFDO0FBQUQsQ0FBQyxBQS9LRCxJQStLQzs7Ozs7OztJQTlLQywwQkFBVzs7SUFDWCwyQ0FBbUM7O0lBQ25DLDBDQUFrQzs7Ozs7SUFHbEMsZ0NBQStCOzs7OztJQUMvQixvQ0FBNkI7Ozs7O0lBQzdCLG1DQUE2Qzs7Ozs7SUFLN0MsdUNBQTRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSnNvbmFwaUNvbnZlcnRlciB9IGZyb20gJy4vY29udmVydGVycy9qc29uYXBpLmNvbnZlcnRlcic7XG5pbXBvcnQgeyBKc29uYXBpRG9jdW1lbnQsIEpzb25hcGlSZXNvdXJjZVJlcXVlc3QsIEpzb25hcGlSZXNvdXJjZU1ldGhvZCB9IGZyb20gJy4vaW50ZXJmYWNlcy9qc29uYXBpLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNb2RlbERlY29yYXRvck9wdGlvbnMgfSBmcm9tICcuL2RlY29yYXRvcnMvb3B0aW9uLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgTW9kZWxNZXRhZGF0YSwgQXR0cmlidXRlTWV0YWRhdGEgfSBmcm9tICcuL2RlY29yYXRvcnMvc3ltYm9sZXMnO1xuaW1wb3J0IHsgUmVzb3VyY2VTZXJpYWxpemVyIH0gZnJvbSAnLi9yZXNvdXJjZS5zZXJpYWxpemVyJztcbmltcG9ydCB7IFJlc291cmNlTWV0YWRhdGFXcmFwcGVyIH0gZnJvbSAnLi9yZXNvdXJjZS1tZXRhZGF0YS53cmFwcGVyJztcblxuXG50eXBlIG1ldGhvZEFjdGlvbiA9IEpzb25hcGlSZXNvdXJjZU1ldGhvZCB8ICd1bnRvdWNoZWQnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVzb3VyY2VCYXNlIHtcbiAgaWQ6IHN0cmluZztcbiAgcHVibGljIG1vZGVsSW5pdGlhbGl6YXRpb24gPSBmYWxzZTtcbiAgcHVibGljIG1vZGVsU2VyaWFsaXphdGlvbiA9IGZhbHNlO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZTogdmFyaWFibGUtbmFtZVxuICBwcml2YXRlIF9fbWV0aG9kOiBtZXRob2RBY3Rpb247XG4gIHByaXZhdGUgX19pc1JlbGF0aW9uID0gZmFsc2U7XG4gIHByaXZhdGUgX19tZHdyYXBwZXI6IFJlc291cmNlTWV0YWRhdGFXcmFwcGVyO1xuICBwcml2YXRlIGdldCBfX3dyYXBwZXIoKTogUmVzb3VyY2VNZXRhZGF0YVdyYXBwZXIge1xuICAgIGlmICghdGhpcy5fX21kd3JhcHBlcikgeyB0aGlzLl9fbWR3cmFwcGVyID0gbmV3IFJlc291cmNlTWV0YWRhdGFXcmFwcGVyKHRoaXMpOyB9XG4gICAgcmV0dXJuIHRoaXMuX19tZHdyYXBwZXI7XG4gIH1cbiAgcHJpdmF0ZSBfX3Jlc1NlcmlhbGl6ZXI6IFJlc291cmNlU2VyaWFsaXplcjtcbiAgcHJpdmF0ZSBnZXQgX19zZXJpYWxpemVyKCk6IFJlc291cmNlU2VyaWFsaXplciB7XG4gICAgaWYgKCF0aGlzLl9fcmVzU2VyaWFsaXplcikgeyB0aGlzLl9fcmVzU2VyaWFsaXplciA9IG5ldyBSZXNvdXJjZVNlcmlhbGl6ZXIodGhpcyk7IH1cbiAgICByZXR1cm4gdGhpcy5fX3Jlc1NlcmlhbGl6ZXI7XG4gIH1cbi8vIHRzbGludDplbmFibGU6IHZhcmlhYmxlLW5hbWVcblxuICBba2V5OiBzdHJpbmddOiBhbnk7XG5cbiAgc3RhdGljIGdldE1vZGVsPFQgZXh0ZW5kcyBSZXNvdXJjZUJhc2U+KGNvbnN0cnVjdG9yOiBhbnksIGRhdGE/OiBKc29uYXBpRG9jdW1lbnQpOiBUIHtcbiAgICBjb25zdCByZXQgPSBuZXcgSnNvbmFwaUNvbnZlcnRlcigpLmRlc2VyaWFsaXplKGRhdGEpO1xuICAgIHJldHVybiBuZXcgY29uc3RydWN0b3IocmV0KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRBc1JlbGF0aW9uc2hpcDxUIGV4dGVuZHMgUmVzb3VyY2VCYXNlPihjb25zdHJ1Y3RvcjogYW55LCBkYXRhOiBSZXNvdXJjZUJhc2UsIG9wdGlvbnM/OiBhbnkpOiBUIHtcbiAgICBpZiAoIWRhdGEpIHsgcmV0dXJuIG51bGw7IH1cbiAgICBvcHRpb25zID0geyBtZXRob2Q6ICd1bnRvdWNoZWQnLCBtb2RlbEluaXQ6IGZhbHNlLCAuLi5vcHRpb25zIH07XG4gICAgbGV0IG1vZGVsOiBUO1xuICAgIGlmIChvcHRpb25zLm1vZGVsSW5pdCkge1xuICAgICAgbW9kZWwgPSBuZXcgY29uc3RydWN0b3IoZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGVsID0gbmV3IGNvbnN0cnVjdG9yKCk7XG4gICAgICBtb2RlbC5pZCA9IGRhdGEuaWQ7XG4gICAgICBtb2RlbC5hc3NpZ24oZGF0YSk7XG4gICAgfVxuICAgIG1vZGVsLl9faXNSZWxhdGlvbiA9IHRydWU7XG4gICAgbW9kZWwuX19tZXRob2QgPSBvcHRpb25zLm1ldGhvZDtcbiAgICByZXR1cm4gbW9kZWw7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihkYXRhPzogUGFydGlhbDxSZXNvdXJjZUJhc2U+KSB7XG4gICAgaWYgKCFkYXRhKSB7IHJldHVybjsgfVxuICAgIHRoaXMubW9kZWxJbml0aWFsaXphdGlvbiA9IHRydWU7XG4gICAgdGhpcy5pZCA9IGRhdGEuaWQ7XG4gICAgdGhpcy5hc3NpZ24oZGF0YSk7XG4gICAgdGhpcy5tb2RlbEluaXRpYWxpemF0aW9uID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgaXNNb2RlbEluaXRpYWxpemF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGVsSW5pdGlhbGl6YXRpb247XG4gIH1cblxuICBnZXQgbW9kZWxPcHRpb25zKCk6IE1vZGVsRGVjb3JhdG9yT3B0aW9ucyB7XG4gICAgcmV0dXJuIFJlZmxlY3QuZ2V0TWV0YWRhdGEoTW9kZWxNZXRhZGF0YSwgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH1cblxuICBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm1vZGVsT3B0aW9ucy50eXBlO1xuICB9XG5cbiAgZ2V0IGhhc0JlZW5Ub3VjaGVkKCkge1xuICAgIGNvbnN0IHRvdWNoZWQgPSB0aGlzLl9faXNSZWxhdGlvbiAmJiB0aGlzLl9fbWV0aG9kICE9PSAndW50b3VjaGVkJztcbiAgICByZXR1cm4gdGhpcy5oYXNEaXJ0eUF0dHJpYnV0ZXMgfHwgdGhpcy5oYXNEaXJ0eUJlbG9uZ3NUb3MgfHwgdGhpcy5oYXNEaXJ0eUhhc01hbnlzIHx8IHRvdWNoZWQ7XG4gIH1cblxuICBnZXQgaGFzRGlydHlBdHRyaWJ1dGVzKCkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXNNZXRhZGF0YTogYW55ID0gdGhpc1tBdHRyaWJ1dGVNZXRhZGF0YV07XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgaW4gYXR0cmlidXRlc01ldGFkYXRhKSB7XG4gICAgICBpZiAoYXR0cmlidXRlc01ldGFkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5TmFtZSkgJiYgYXR0cmlidXRlc01ldGFkYXRhW3Byb3BlcnR5TmFtZV0uaGFzRGlydHlBdHRyaWJ1dGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgaGFzRGlydHlCZWxvbmdzVG9zKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtleXMgPSB0aGlzLl9fd3JhcHBlci5iZWxvbmdzVG9LZXlzKHsgZGVmaW5lZDogdHJ1ZSB9KTtcblxuICAgIGxldCB0b3VjaGVkID0gZmFsc2U7XG4gICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICB0b3VjaGVkID0gdG91Y2hlZCB8fCB0aGlzW2tleV0uaGFzQmVlblRvdWNoZWQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRvdWNoZWQ7XG4gIH1cblxuICBnZXQgaGFzRGlydHlIYXNNYW55cygpOiBib29sZWFuIHtcbiAgICBjb25zdCBrZXlzID0gdGhpcy5fX3dyYXBwZXIuaGFzTWFueUtleXMoeyBkZWZpbmVkOiB0cnVlIH0pO1xuXG4gICAgbGV0IHRvdWNoZWQgPSBmYWxzZTtcbiAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIHRvdWNoZWQgPSB0b3VjaGVkIHx8IHRoaXNba2V5XS5tYXAoZWx0ID0+IGVsdC5oYXNCZWVuVG91Y2hlZCkucmVkdWNlKChyZXMsIGJvb2wpID0+IHJlcyB8fCBib29sLCBmYWxzZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRvdWNoZWQ7XG4gIH1cblxuICBnZXQgaXNSZWxhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fX2lzUmVsYXRpb247XG4gIH1cblxuICBnZXQgcmVsYXRpb25NZXRob2QoKSB7XG4gICAgaWYgKHRoaXMuX19tZXRob2QgIT09ICd1bnRvdWNoZWQnKSB7IHJldHVybiB0aGlzLl9fbWV0aG9kOyB9XG4gICAgaWYgKCF0aGlzLmhhc0JlZW5Ub3VjaGVkKSB7IHJldHVybiAndW50b3VjaGVkJzsgfVxuICAgIGlmICh0aGlzLmlkKSB7IHJldHVybiAndXBkYXRlJzsgfVxuICAgIHJldHVybiAnY3JlYXRlJztcbiAgfVxuXG4gIHB1YmxpYyByb2xsYmFja0F0dHJpYnV0ZXMoKTogdm9pZCB7XG4gICAgY29uc3QgYXR0cmlidXRlc01ldGFkYXRhOiBhbnkgPSB0aGlzW0F0dHJpYnV0ZU1ldGFkYXRhXTtcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBpbiBhdHRyaWJ1dGVzTWV0YWRhdGEpIHtcbiAgICAgIGlmIChhdHRyaWJ1dGVzTWV0YWRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHlOYW1lKSAmJiBhdHRyaWJ1dGVzTWV0YWRhdGFbcHJvcGVydHlOYW1lXS5oYXNEaXJ0eUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgdGhpc1twcm9wZXJ0eU5hbWVdID0gYXR0cmlidXRlc01ldGFkYXRhW3Byb3BlcnR5TmFtZV0ub2xkVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzc2lnbihkYXRhKSB7XG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLnRyYW5zbGF0ZUtleXMoZGF0YSk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBjbG9uZSk7XG4gICAgaWYgKHRoaXMuX19pc1JlbGF0aW9uKSB7XG4gICAgICB0aGlzLl9fbWV0aG9kID0gdGhpcy5yZWxhdGlvbk1ldGhvZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGlzYXNzb2NpYXRlKCkge1xuICAgIHRoaXMuX19tZXRob2QgPSAnZGlzYXNzb2NpYXRlJztcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmlzUmVsYXRpb24pIHtcbiAgICAgIHRoaXMuX19tZXRob2QgPSAnZGVzdHJveSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGVzdHJveWluZyByZXNvdXJjZSBpcyBub3Qgc3VwcG9ydGVkISBVc2UgdGhlIHNlcnZpY2UgaW5zdGVhZC4nKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9Kc29uYXBpKCk6IEpzb25hcGlSZXNvdXJjZVJlcXVlc3Qge1xuICAgIHJldHVybiB0aGlzLl9fc2VyaWFsaXplci50b0pzb25hcGkoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b0hhc2goKTogeyBbYXR0ck5hbWU6IHN0cmluZ106IGFueTsgfSB7XG4gICAgcmV0dXJuIHRoaXMuX19zZXJpYWxpemVyLnRvSGFzaCgpO1xuICB9XG5cbiAgcHVibGljIHNpZGVsb2FkKCkge1xuICAgIGNvbnN0IG1ldGhvZCA9IHRoaXMucmVsYXRpb25NZXRob2Q7XG4gICAgaWYgKG1ldGhvZCA9PT0gJ2NyZWF0ZScgfHwgbWV0aG9kID09PSAndW50b3VjaGVkJykgeyByZXR1cm47IH1cblxuICAgIGNvbnN0IHR5cGUgPSB0aGlzLm1vZGVsT3B0aW9ucy50eXBlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgdHlwZSxcbiAgICAgIF9fbWV0aG9kOiBtZXRob2QsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzZXJpYWxpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX19zZXJpYWxpemVyLnNlcmlhbGl6ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2xhdGVLZXlzKG9iajogYW55KSB7XG4gICAgaWYgKG9iai50b0hhc2gpIHsgb2JqID0gb2JqLnRvSGFzaCgpOyB9XG5cbiAgICBjb25zdCBmaWx0cmVkID0ge307XG4gICAgZm9yIChjb25zdCBvbGRrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KG9sZGtleSkpIHtcbiAgICAgICAgY29uc3QgbmV3a2V5ID0gdGhpcy5fX3dyYXBwZXIuZnJvbnRlbmRQcm9wTmFtZShvbGRrZXkudG9TdHJpbmcoKSk7XG4gICAgICAgIGlmIChuZXdrZXkpIHsgZmlsdHJlZFtuZXdrZXldID0gb2JqW29sZGtleV07IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbHRyZWQ7XG4gIH1cbn1cbiJdfQ==