UNPKG

ngx-airbrush

Version:

Angular client for jsonapi/Graphiti backends

369 lines 24.4 kB
/** * @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==