ngx-airbrush
Version:
Angular client for jsonapi/Graphiti backends
369 lines • 24.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { AttributeMetadata, BelongsToMetadata, HasManyMetadata } from './decorators/symboles';
/** @type {?} */
var getIncludedKeys;
var ResourceMetadataWrapper = /** @class */ (function () {
function ResourceMetadataWrapper(model) {
this.model = model;
}
/**
* @param {?=} options
* @return {?}
*/
ResourceMetadataWrapper.prototype.allKeys = /**
* @param {?=} options
* @return {?}
*/
function (options) {
return tslib_1.__spread(this.attributesKeys(options), this.relationshipKeys(options));
};
/**
* @param {?=} options
* @return {?}
*/
ResourceMetadataWrapper.prototype.relationshipKeys = /**
* @param {?=} options
* @return {?}
*/
function (options) {
return tslib_1.__spread(this.belongsToKeys(options), this.hasManyKeys(options));
};
/**
* @param {?=} options
* @return {?}
*/
ResourceMetadataWrapper.prototype.attributesKeys = /**
* @param {?=} options
* @return {?}
*/
function (options) {
var _this = this;
/** @type {?} */
var keys = this.retrieveKeys(AttributeMetadata);
if (options && options.defined) {
keys = keys.filter((/**
* @param {?} key
* @return {?}
*/
function (key) { return _this.model[key] !== undefined; }));
// FIXME: quick fix to delete null values when it's a create
if (!this.model.id) {
keys = keys.filter((/**
* @param {?} key
* @return {?}
*/
function (key) { return _this.model[key] !== null; }));
}
}
return keys;
};
/**
* @param {?=} options
* @return {?}
*/
ResourceMetadataWrapper.prototype.belongsToKeys = /**
* @param {?=} options
* @return {?}
*/
function (options) {
return this.retrieveKeys(BelongsToMetadata, options);
};
/**
* @param {?=} options
* @return {?}
*/
ResourceMetadataWrapper.prototype.hasManyKeys = /**
* @param {?=} options
* @return {?}
*/
function (options) {
return this.retrieveKeys(HasManyMetadata, options);
};
/**
* @return {?}
*/
ResourceMetadataWrapper.prototype.allMetadata = /**
* @return {?}
*/
function () {
return tslib_1.__spread(this.attributesMetadata(), this.relationshipMetadata());
};
/**
* @return {?}
*/
ResourceMetadataWrapper.prototype.relationshipMetadata = /**
* @return {?}
*/
function () {
return tslib_1.__spread(this.belongsToMetadata(), this.hasManyMetadata());
};
/**
* @return {?}
*/
ResourceMetadataWrapper.prototype.attributesMetadata = /**
* @return {?}
*/
function () {
return this.retrieveMetadata(AttributeMetadata);
};
/**
* @return {?}
*/
ResourceMetadataWrapper.prototype.belongsToMetadata = /**
* @return {?}
*/
function () {
return this.retrieveMetadata(BelongsToMetadata);
};
/**
* @return {?}
*/
ResourceMetadataWrapper.prototype.hasManyMetadata = /**
* @return {?}
*/
function () {
return this.retrieveMetadata(HasManyMetadata);
};
/**
* @param {?} propertyName
* @return {?}
*/
ResourceMetadataWrapper.prototype.isSidepostable = /**
* @param {?} propertyName
* @return {?}
*/
function (propertyName) {
/** @type {?} */
var metadata = Reflect.getMetadata(BelongsToMetadata, this.model);
/** @type {?} */
var found = metadata && metadata.find((/**
* @param {?} rel
* @return {?}
*/
function (rel) { return rel.propertyName === propertyName; }));
if (found) {
return found.sidepostable;
}
metadata = Reflect.getMetadata(HasManyMetadata, this.model);
found = metadata && metadata.find((/**
* @param {?} rel
* @return {?}
*/
function (rel) { return rel.propertyName === propertyName; }));
if (found) {
return found.sidepostable;
}
};
/**
* @param {?} propertyName
* @return {?}
*/
ResourceMetadataWrapper.prototype.isWritable = /**
* @param {?} propertyName
* @return {?}
*/
function (propertyName) {
/** @type {?} */
var allMetadata = this.allMetadata();
/** @type {?} */
var found = allMetadata.find((/**
* @param {?} pname
* @return {?}
*/
function (pname) { return pname.propertyName === propertyName; }));
if (found) {
return !found.readonly;
}
};
/**
* @param {?} propertyName
* @return {?}
*/
ResourceMetadataWrapper.prototype.backendPropName = /**
* @param {?} propertyName
* @return {?}
*/
function (propertyName) {
/** @type {?} */
var allMetadata = this.allMetadata();
/** @type {?} */
var found = allMetadata.find((/**
* @param {?} pname
* @return {?}
*/
function (pname) { return pname.propertyName === propertyName; }));
if (found) {
return found.backendName;
}
};
/**
* @param {?} propertyName
* @return {?}
*/
ResourceMetadataWrapper.prototype.frontendPropName = /**
* @param {?} propertyName
* @return {?}
*/
function (propertyName) {
/** @type {?} */
var allMetadata = this.allMetadata();
// search in backend
/** @type {?} */
var found = allMetadata.find((/**
* @param {?} pname
* @return {?}
*/
function (pname) { return pname.backendName === propertyName; }));
if (found) {
return found.propertyName;
}
// search in frontend
found = allMetadata.find((/**
* @param {?} pname
* @return {?}
*/
function (pname) { return pname.propertyName === propertyName; }));
if (found) {
return propertyName;
}
};
/**
* @private
* @param {?} symbol
* @param {?=} options
* @return {?}
*/
ResourceMetadataWrapper.prototype.retrieveKeys = /**
* @private
* @param {?} symbol
* @param {?=} options
* @return {?}
*/
function (symbol, options) {
var _this = this;
this.model.modelSerialization = true;
/** @type {?} */
var metadata = this.retrieveMetadata(symbol);
/** @type {?} */
var keys = metadata.map((/**
* @param {?} btm
* @return {?}
*/
function (btm) { return btm.propertyName; }));
if (options && options.defined) {
keys = keys.filter((/**
* @param {?} key
* @return {?}
*/
function (key) { return _this.model[key]; }));
}
this.model.modelSerialization = false;
return keys;
};
/**
* @private
* @param {?} symbol
* @return {?}
*/
ResourceMetadataWrapper.prototype.retrieveMetadata = /**
* @private
* @param {?} symbol
* @return {?}
*/
function (symbol) {
return Reflect.getMetadata(symbol, this.model) || [];
};
/**
* @param {?=} options
* @return {?}
*/
ResourceMetadataWrapper.prototype.getIncludedKeys = /**
* @param {?=} options
* @return {?}
*/
function (options) {
options = (options || {}) && tslib_1.__assign({ forBackend: true }, options);
return getIncludedKeys(this.model, this, options);
};
return ResourceMetadataWrapper;
}());
export { ResourceMetadataWrapper };
if (false) {
/**
* @type {?}
* @private
*/
ResourceMetadataWrapper.prototype.model;
}
getIncludedKeys = (/**
* @param {?} model
* @param {?} wrapper
* @param {?=} options
* @return {?}
*/
function (model, wrapper, options) {
/** @type {?} */
var keyTranslator = options.forBackend ? 'backendPropName' : 'frontendPropName';
/** @type {?} */
var localKeys = wrapper.relationshipKeys({ defined: true }).filter((/**
* @param {?} key
* @return {?}
*/
function (key) { return wrapper.isSidepostable(key); }));
/** @type {?} */
var childKeys = [];
localKeys.forEach((/**
* @param {?} key
* @return {?}
*/
function (key) {
/** @type {?} */
var resource = model[key];
/** @type {?} */
var cKeys = [];
if (Array.isArray(resource)) {
resource.forEach((/**
* @param {?} elt
* @return {?}
*/
function (elt) {
/** @type {?} */
var wrap = new ResourceMetadataWrapper(elt);
/** @type {?} */
var keys = getIncludedKeys(elt, wrap, options);
cKeys.push.apply(cKeys, tslib_1.__spread(keys));
}));
}
else {
/** @type {?} */
var wrap = new ResourceMetadataWrapper(resource);
/** @type {?} */
var keys = getIncludedKeys(resource, wrap, options);
cKeys.push.apply(cKeys, tslib_1.__spread(keys));
}
cKeys = cKeys.map((/**
* @param {?} ckey
* @return {?}
*/
function (ckey) { return wrapper[keyTranslator](key) + "." + ckey; }));
// remove duplicates
cKeys = cKeys.filter((/**
* @param {?} item
* @param {?} index
* @return {?}
*/
function (item, index) { return cKeys.indexOf(item) >= index; }));
childKeys.push.apply(childKeys, tslib_1.__spread(cKeys));
}));
localKeys = localKeys.map((/**
* @param {?} lkey
* @return {?}
*/
function (lkey) { return wrapper[keyTranslator](lkey); }));
return tslib_1.__spread(localKeys, childKeys);
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtbWV0YWRhdGEud3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1haXJicnVzaC8iLCJzb3VyY2VzIjpbImxpYi9yZXNvdXJjZS1tZXRhZGF0YS53cmFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztJQUcxRixlQUF3SDtBQUU1SDtJQUVFLGlDQUFvQixLQUFtQjtRQUFuQixVQUFLLEdBQUwsS0FBSyxDQUFjO0lBQUcsQ0FBQzs7Ozs7SUFFcEMseUNBQU87Ozs7SUFBZCxVQUFlLE9BQStCO1FBQzVDLHdCQUNLLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsRUFDakM7SUFDSixDQUFDOzs7OztJQUVNLGtEQUFnQjs7OztJQUF2QixVQUF3QixPQUErQjtRQUNyRCx3QkFDSyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUM1QjtJQUNKLENBQUM7Ozs7O0lBRU0sZ0RBQWM7Ozs7SUFBckIsVUFBc0IsT0FBK0I7UUFBckQsaUJBUUM7O1lBUEssSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUM7UUFDL0MsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUM5QixJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU07Ozs7WUFBQyxVQUFBLEdBQUcsSUFBSSxPQUFBLEtBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxFQUE3QixDQUE2QixFQUFDLENBQUM7WUFDekQsNERBQTREO1lBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRTtnQkFBRSxJQUFJLEdBQUcsSUFBSSxD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Q0FBQzs7b0JBQ3ZDLElBQUksR0FBRyxlQUFlLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUM7Z0JBQ2hELEtBQUssQ0FBQyxJQUFJLE9BQVYsS0FBSyxtQkFBUyxJQUFJLEdBQUU7WUFDdEIsQ0FBQyxFQUFDLENBQUM7U0FDSjthQUFNOztnQkFDQyxJQUFJLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxRQUFRLENBQUM7O2dCQUM1QyxJQUFJLEdBQUcsZUFBZSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDO1lBQ3JELEtBQUssQ0FBQyxJQUFJLE9BQVYsS0FBSyxtQkFBUyxJQUFJLEdBQUU7U0FDckI7UUFDRCxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUc7Ozs7UUFBQyxVQUFBLElBQUksSUFBSSxPQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBSSxJQUFNLEVBQXhDLENBQXdDLEVBQUMsQ0FBQztRQUNwRSxvQkFBb0I7UUFDcEIsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNOzs7OztRQUFDLFVBQUMsSUFBSSxFQUFFLEtBQUssSUFBSyxPQUFBLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxFQUE1QixDQUE0QixFQUFDLENBQUM7UUFDcEUsU0FBUyxDQUFDLElBQUksT0FBZCxTQUFTLG1CQUFTLEtBQUssR0FBRTtJQUMzQixDQUFDLEVBQUMsQ0FBQztJQUNILFNBQVMsR0FBRyxTQUFTLENBQUMsR0FBRzs7OztJQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUE1QixDQUE0QixFQUFDLENBQUM7SUFDaEUsd0JBQVcsU0FBUyxFQUFLLFNBQVMsRUFBRTtBQUN0QyxDQUFDLENBQUEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlc291cmNlQmFzZSB9IGZyb20gJy4vcmVzb3VyY2UtYmFzZS5tb2RlbCc7XG5pbXBvcnQgeyBBdHRyaWJ1dGVNZXRhZGF0YSwgQmVsb25nc1RvTWV0YWRhdGEsIEhhc01hbnlNZXRhZGF0YSB9IGZyb20gJy4vZGVjb3JhdG9ycy9zeW1ib2xlcyc7XG5cblxubGV0IGdldEluY2x1ZGVkS2V5czogKG1vZGVsOiBSZXNvdXJjZUJhc2UsIHdyYXBwZXI6IFJlc291cmNlTWV0YWRhdGFXcmFwcGVyLCBvcHRpb25zPzogeyBmb3JCYWNrZW5kPzogYm9vbGVhbiB9KSA9PiBzdHJpbmdbXTtcblxuZXhwb3J0IGNsYXNzIFJlc291cmNlTWV0YWRhdGFXcmFwcGVyIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGVsOiBSZXNvdXJjZUJhc2UpIHt9XG5cbiAgcHVibGljIGFsbEtleXMob3B0aW9ucz86IHsgZGVmaW5lZD86IGJvb2xlYW4gfSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4udGhpcy5hdHRyaWJ1dGVzS2V5cyhvcHRpb25zKSxcbiAgICAgIC4uLnRoaXMucmVsYXRpb25zaGlwS2V5cyhvcHRpb25zKSxcbiAgICBdO1xuICB9XG5cbiAgcHVibGljIHJlbGF0aW9uc2hpcEtleXMob3B0aW9ucz86IHsgZGVmaW5lZD86IGJvb2xlYW4gfSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4udGhpcy5iZWxvbmdzVG9LZXlzKG9wdGlvbnMpLFxuICAgICAgLi4udGhpcy5oYXNNYW55S2V5cyhvcHRpb25zKVxuICAgIF07XG4gIH1cblxuICBwdWJsaWMgYXR0cmlidXRlc0tleXMob3B0aW9ucz86IHsgZGVmaW5lZD86IGJvb2xlYW4gfSk6IHN0cmluZ1tdIHtcbiAgICBsZXQga2V5cyA9IHRoaXMucmV0cmlldmVLZXlzKEF0dHJpYnV0ZU1ldGFkYXRhKTtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRlZmluZWQpIHtcbiAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihrZXkgPT4gdGhpcy5tb2RlbFtrZXldICE9PSB1bmRlZmluZWQpO1xuICAgICAgLy8gRklYTUU6IHF1aWNrIGZpeCB0byBkZWxldGUgbnVsbCB2YWx1ZXMgd2hlbiBpdCdzIGEgY3JlYXRlXG4gICAgICBpZiAoIXRoaXMubW9kZWwuaWQpIHsga2V5cyA9IGtleXMuZmlsdGVyKGtleSA9PiB0aGlzLm1vZGVsW2tleV0gIT09IG51bGwpOyB9XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xuICB9XG5cbiAgcHVibGljIGJlbG9uZ3NUb0tleXMob3B0aW9ucz86IHsgZGVmaW5lZD86IGJvb2xlYW4gfSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5yZXRyaWV2ZUtleXMoQmVsb25nc1RvTWV0YWRhdGEsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGhhc01hbnlLZXlzKG9wdGlvbnM/OiB7IGRlZmluZWQ/OiBib29sZWFuIH0pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMucmV0cmlldmVLZXlzKEhhc01hbnlNZXRhZGF0YSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgYWxsTWV0YWRhdGEoKTogYW55W10ge1xuICAgIHJldHVybiBbXG4gICAgICAuLi50aGlzLmF0dHJpYnV0ZXNNZXRhZGF0YSgpLFxuICAgICAgLi4udGhpcy5yZWxhdGlvbnNoaXBNZXRhZGF0YSgpLFxuICAgIF07XG4gIH1cblxuICBwdWJsaWMgcmVsYXRpb25zaGlwTWV0YWRhdGEoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAuLi50aGlzLmJlbG9uZ3NUb01ldGFkYXRhKCksXG4gICAgICAuLi50aGlzLmhhc01hbnlNZXRhZGF0YSgpXG4gICAgXTtcbiAgfVxuXG4gIHB1YmxpYyBhdHRyaWJ1dGVzTWV0YWRhdGEoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnJldHJpZXZlTWV0YWRhdGEoQXR0cmlidXRlTWV0YWRhdGEpO1xuICB9XG5cbiAgcHVibGljIGJlbG9uZ3NUb01ldGFkYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5yZXRyaWV2ZU1ldGFkYXRhKEJlbG9uZ3NUb01ldGFkYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNNYW55TWV0YWRhdGEoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnJldHJpZXZlTWV0YWRhdGEoSGFzTWFueU1ldGFkYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBpc1NpZGVwb3N0YWJsZShwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xuICAgIGxldCBtZXRhZGF0YTogYW55W10gPSBSZWZsZWN0LmdldE1ldGFkYXRhKEJlbG9uZ3NUb01ldGFkYXRhLCB0aGlzLm1vZGVsKTtcbiAgICBsZXQgZm91bmQgPSBtZXRhZGF0YSAmJiBtZXRhZGF0YS5maW5kKHJlbCA9PiByZWwucHJvcGVydHlOYW1lID09PSBwcm9wZXJ0eU5hbWUpO1xuICAgIGlmIChmb3VuZCkgeyByZXR1cm4gZm91bmQuc2lkZXBvc3RhYmxlOyB9XG5cbiAgICBtZXRhZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoSGFzTWFueU1ldGFkYXRhLCB0aGlzLm1vZGVsKTtcbiAgICBmb3VuZCA9IG1ldGFkYXRhICYmIG1ldGFkYXRhLmZpbmQocmVsID0+IHJlbC5wcm9wZXJ0eU5hbWUgPT09IHByb3BlcnR5TmFtZSk7XG4gICAgaWYgKGZvdW5kKSB7IHJldHVybiBmb3VuZC5zaWRlcG9zdGFibGU7IH1cbiAgfVxuXG4gIHB1YmxpYyBpc1dyaXRhYmxlKHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYWxsTWV0YWRhdGEgPSB0aGlzLmFsbE1ldGFkYXRhKCk7XG5cbiAgICBjb25zdCBmb3VuZCA9IGFsbE1ldGFkYXRhLmZpbmQocG5hbWUgPT4gcG5hbWUucHJvcGVydHlOYW1lID09PSBwcm9wZXJ0eU5hbWUpO1xuICAgIGlmIChmb3VuZCkgeyByZXR1cm4gIWZvdW5kLnJlYWRvbmx5OyB9XG4gIH1cblxuICBwdWJsaWMgYmFja2VuZFByb3BOYW1lKHByb3BlcnR5TmFtZTogc3RyaW5nIHwgc3ltYm9sKTogc3RyaW5nIHtcbiAgICBjb25zdCBhbGxNZXRhZGF0YSA9IHRoaXMuYWxsTWV0YWRhdGEoKTtcblxuICAgIGNvbnN0IGZvdW5kID0gYWxsTWV0YWRhdGEuZmluZChwbmFtZSA9PiBwbmFtZS5wcm9wZXJ0eU5hbWUgPT09IHByb3BlcnR5TmFtZSk7XG4gICAgaWYgKGZvdW5kKSB7IHJldHVybiBmb3VuZC5iYWNrZW5kTmFtZTsgfVxuICB9XG5cbiAgcHVibGljIGZyb250ZW5kUHJvcE5hbWUocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFsbE1ldGFkYXRhID0gdGhpcy5hbGxNZXRhZGF0YSgpO1xuXG4gICAgLy8gc2VhcmNoIGluIGJhY2tlbmRcbiAgICBsZXQgZm91bmQgPSBhbGxNZXRhZGF0YS5maW5kKHBuYW1lID0+IHBuYW1lLmJhY2tlbmROYW1lID09PSBwcm9wZXJ0eU5hbWUpO1xuICAgIGlmIChmb3VuZCkgeyByZXR1cm4gZm91bmQucHJvcGVydHlOYW1lOyB9XG4gICAgLy8gc2VhcmNoIGluIGZyb250ZW5kXG4gICAgZm91bmQgPSBhbGxNZXRhZGF0YS5maW5kKHBuYW1lID0+IHBuYW1lLnByb3BlcnR5TmFtZSA9PT0gcHJvcGVydHlOYW1lKTtcbiAgICBpZiAoZm91bmQpIHsgcmV0dXJuIHByb3BlcnR5TmFtZTsgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXRyaWV2ZUtleXMoc3ltYm9sOiBhbnksIG9wdGlvbnM/OiB7IGRlZmluZWQ/OiBib29sZWFuIH0pIHtcbiAgICB0aGlzLm1vZGVsLm1vZGVsU2VyaWFsaXphdGlvbiA9IHRydWU7XG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLnJldHJpZXZlTWV0YWRhdGEoc3ltYm9sKTtcblxuICAgIGxldCBrZXlzID0gbWV0YWRhdGEubWFwKGJ0bSA9PiBidG0ucHJvcGVydHlOYW1lKTtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRlZmluZWQpIHsga2V5cyA9IGtleXMuZmlsdGVyKGtleSA9PiB0aGlzLm1vZGVsW2tleV0pOyB9XG4gICAgdGhpcy5tb2RlbC5tb2RlbFNlcmlhbGl6YXRpb24gPSBmYWxzZTtcbiAgICByZXR1cm4ga2V5cztcbiAgfVxuXG4gIHByaXZhdGUgcmV0cmlldmVNZXRhZGF0YShzeW1ib2w6IGFueSk6IGFueVtdIHtcbiAgICByZXR1cm4gUmVmbGVjdC5nZXRNZXRhZGF0YShzeW1ib2wsIHRoaXMubW9kZWwpIHx8IFtdO1xuICB9XG5cbiAgcHVibGljIGdldEluY2x1ZGVkS2V5cyhvcHRpb25zPzogeyBmb3JCYWNrZW5kPzogYm9vbGVhbiB9KTogc3RyaW5nW10ge1xuICAgIG9wdGlvbnMgPSAob3B0aW9ucyB8fCB7fSkgJiYgeyBmb3JCYWNrZW5kOiB0cnVlLCAuLi5vcHRpb25zIH07XG4gICAgcmV0dXJuIGdldEluY2x1ZGVkS2V5cyh0aGlzLm1vZGVsLCB0aGlzLCBvcHRpb25zKTtcbiAgfVxufVxuXG5nZXRJbmNsdWRlZEtleXMgPSAobW9kZWw6IFJlc291cmNlQmFzZSwgd3JhcHBlcjogUmVzb3VyY2VNZXRhZGF0YVdyYXBwZXIsIG9wdGlvbnM/OiB7IGZvckJhY2tlbmQ/OiBib29sZWFuIH0pOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IGtleVRyYW5zbGF0b3IgPSBvcHRpb25zLmZvckJhY2tlbmQgPyAnYmFja2VuZFByb3BOYW1lJyA6ICdmcm9udGVuZFByb3BOYW1lJztcbiAgbGV0IGxvY2FsS2V5cyA9IHdyYXBwZXIucmVsYXRpb25zaGlwS2V5cyh7IGRlZmluZWQ6IHRydWUgfSkuZmlsdGVyKGtleSA9PiB3cmFwcGVyLmlzU2lkZXBvc3RhYmxlKGtleSkpO1xuXG4gIGNvbnN0IGNoaWxkS2V5czogc3RyaW5nW10gPSBbXTtcbiAgbG9jYWxLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IG1vZGVsW2tleV07XG4gICAgbGV0IGNLZXlzID0gW107XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzb3VyY2UpKSB7XG4gICAgICByZXNvdXJjZS5mb3JFYWNoKGVsdCA9PiB7XG4gICAgICAgIGNvbnN0IHdyYXAgPSBuZXcgUmVzb3VyY2VNZXRhZGF0YVdyYXBwZXIoZWx0KTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGdldEluY2x1ZGVkS2V5cyhlbHQsIHdyYXAsIG9wdGlvbnMpO1xuICAgICAgICBjS2V5cy5wdXNoKC4uLmtleXMpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHdyYXAgPSBuZXcgUmVzb3VyY2VNZXRhZGF0YVdyYXBwZXIocmVzb3VyY2UpO1xuICAgICAgY29uc3Qga2V5cyA9IGdldEluY2x1ZGVkS2V5cyhyZXNvdXJjZSwgd3JhcCwgb3B0aW9ucyk7XG4gICAgICBjS2V5cy5wdXNoKC4uLmtleXMpO1xuICAgIH1cbiAgICBjS2V5cyA9IGNLZXlzLm1hcChja2V5ID0+IGAke3dyYXBwZXJba2V5VHJhbnNsYXRvcl0oa2V5KX0uJHtja2V5fWApO1xuICAgIC8vIHJlbW92ZSBkdXBsaWNhdGVzXG4gICAgY0tleXMgPSBjS2V5cy5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiBjS2V5cy5pbmRleE9mKGl0ZW0pID49IGluZGV4KTtcbiAgICBjaGlsZEtleXMucHVzaCguLi5jS2V5cyk7XG4gIH0pO1xuICBsb2NhbEtleXMgPSBsb2NhbEtleXMubWFwKGxrZXkgPT4gd3JhcHBlcltrZXlUcmFuc2xhdG9yXShsa2V5KSk7XG4gIHJldHVybiBbLi4ubG9jYWxLZXlzLCAuLi5jaGlsZEtleXNdO1xufTtcbiJdfQ==