ngx-airbrush
Version:
Angular client for jsonapi/Graphiti backends
410 lines • 25.3 kB
JavaScript
/**
* @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==