@orbit/records
Version:
A flexible data access and synchronization layer.
108 lines • 16.9 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RecordTransformBuilder = void 0;
const core_1 = require("@orbit/core");
const record_operation_term_1 = require("./record-operation-term");
const { assert, deprecate } = core_1.Orbit;
class RecordTransformBuilder {
constructor(settings = {}) {
const { schema, normalizer, validatorFor, recordInitializer } = settings;
if (validatorFor) {
assert('A RecordTransformBuilder that has been assigned a `validatorFor` requires a `schema`', schema !== undefined);
}
this.$schema = schema;
this.$normalizer = normalizer;
this.$validatorFor = validatorFor;
if (recordInitializer) {
if (this.$normalizer !== undefined) {
deprecate('A `normalizer` and `recordInitializer` have both been assigned to the `TransformBuilder`. Only the `normalizer` will be used.');
}
else {
deprecate('A `recordInitializer` has been assigned to the `TransformBuilder`. The `recordInitializer` setting has been deprecated in favor of `normalizer`, and will be treated as if it were a `RecordNormalizer`.');
this.$normalizer = {
normalizeRecordType(type) {
return type;
},
normalizeRecord(record) {
return recordInitializer.initializeRecord(record);
},
normalizeRecordIdentity(recordIdentity) {
return recordIdentity;
}
};
}
}
}
/**
* Instantiate a new `addRecord` operation.
*/
addRecord(record) {
return new record_operation_term_1.AddRecordTerm(this, this.$normalizeRecord(record));
}
/**
* Instantiate a new `updateRecord` operation.
*/
updateRecord(record) {
return new record_operation_term_1.UpdateRecordTerm(this, this.$normalizeRecord(record));
}
/**
* Instantiate a new `removeRecord` operation.
*/
removeRecord(record) {
return new record_operation_term_1.RemoveRecordTerm(this, this.$normalizeRecordIdentity(record));
}
/**
* Instantiate a new `replaceKey` operation.
*/
replaceKey(record, key, value) {
return new record_operation_term_1.ReplaceKeyTerm(this, this.$normalizeRecordIdentity(record), key, value);
}
/**
* Instantiate a new `replaceAttribute` operation.
*/
replaceAttribute(record, attribute, value) {
return new record_operation_term_1.ReplaceAttributeTerm(this, this.$normalizeRecordIdentity(record), attribute, value);
}
/**
* Instantiate a new `addToRelatedRecords` operation.
*/
addToRelatedRecords(record, relationship, relatedRecord) {
return new record_operation_term_1.AddToRelatedRecordsTerm(this, this.$normalizeRecordIdentity(record), relationship, this.$normalizeRecordIdentity(relatedRecord));
}
/**
* Instantiate a new `removeFromRelatedRecords` operation.
*/
removeFromRelatedRecords(record, relationship, relatedRecord) {
return new record_operation_term_1.RemoveFromRelatedRecordsTerm(this, this.$normalizeRecordIdentity(record), relationship, this.$normalizeRecordIdentity(relatedRecord));
}
/**
* Instantiate a new `replaceRelatedRecords` operation.
*/
replaceRelatedRecords(record, relationship, relatedRecords) {
return new record_operation_term_1.ReplaceRelatedRecordsTerm(this, this.$normalizeRecordIdentity(record), relationship, relatedRecords.map((ri) => this.$normalizeRecordIdentity(ri)));
}
/**
* Instantiate a new `replaceRelatedRecord` operation.
*/
replaceRelatedRecord(record, relationship, relatedRecord) {
return new record_operation_term_1.ReplaceRelatedRecordTerm(this, this.$normalizeRecordIdentity(record), relationship, relatedRecord ? this.$normalizeRecordIdentity(relatedRecord) : null);
}
$normalizeRecord(r) {
if (this.$normalizer) {
return this.$normalizer.normalizeRecord(r);
}
else {
return r;
}
}
$normalizeRecordIdentity(ri) {
if (this.$normalizer !== undefined) {
return this.$normalizer.normalizeRecordIdentity(ri);
}
else {
return ri;
}
}
}
exports.RecordTransformBuilder = RecordTransformBuilder;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLXRyYW5zZm9ybS1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlY29yZC10cmFuc2Zvcm0tYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzQ0FBb0M7QUFXcEMsbUVBVWlDO0FBSWpDLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsWUFBSyxDQUFDO0FBc0JwQyxNQUFhLHNCQUFzQjtJQVNqQyxZQUFZLFdBQXNELEVBQUU7UUFDbEUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsUUFBUSxDQUFDO1FBRXpFLElBQUksWUFBWSxFQUFFO1lBQ2hCLE1BQU0sQ0FDSixzRkFBc0YsRUFDdEYsTUFBTSxLQUFLLFNBQVMsQ0FDckIsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7UUFFbEMsSUFBSSxpQkFBaUIsRUFBRTtZQUNyQixJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxFQUFFO2dCQUNsQyxTQUFTLENBQ1AsK0hBQStILENBQ2hJLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxTQUFTLENBQ1AsME1BQTBNLENBQzNNLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRztvQkFDakIsbUJBQW1CLENBQUMsSUFBUTt3QkFDMUIsT0FBUSxJQUEwQixDQUFDO29CQUNyQyxDQUFDO29CQUNELGVBQWUsQ0FBQyxNQUFTO3dCQUN2QixPQUFPLGlCQUFpQixDQUFDLGdCQUFnQixDQUN0QyxNQUF5QyxDQUMzQyxDQUFDO29CQUNKLENBQUM7b0JBQ0QsdUJBQXVCLENBQUMsY0FBa0I7d0JBQ3hDLE9BQVEsY0FBNEMsQ0FBQztvQkFDdkQsQ0FBQztpQkFD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VyxLQUFLLFNBQVMsRUFBRTtZQUNsQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDckQ7YUFBTTtZQUNMLE9BQVEsRUFBZ0MsQ0FBQztTQUMxQztJQUNILENBQUM7Q0FDRjtBQXJMRCx3REFxTEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcmJpdCB9IGZyb20gJ0BvcmJpdC9jb3JlJztcbmltcG9ydCB7IFRyYW5zZm9ybUJ1aWxkZXJGdW5jIH0gZnJvbSAnQG9yYml0L2RhdGEnO1xuaW1wb3J0IHsgU3RhbmRhcmRWYWxpZGF0b3IsIFZhbGlkYXRvckZvckZuIH0gZnJvbSAnQG9yYml0L3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHtcbiAgSW5pdGlhbGl6ZWRSZWNvcmQsXG4gIFJlY29yZElkZW50aXR5LFxuICBSZWNvcmRJbml0aWFsaXplcixcbiAgVW5pbml0aWFsaXplZFJlY29yZFxufSBmcm9tICcuL3JlY29yZCc7XG5pbXBvcnQgeyBSZWNvcmROb3JtYWxpemVyIH0gZnJvbSAnLi9yZWNvcmQtbm9ybWFsaXplcic7XG5pbXBvcnQgeyBSZWNvcmRPcGVyYXRpb24gfSBmcm9tICcuL3JlY29yZC1vcGVyYXRpb24nO1xuaW1wb3J0IHtcbiAgQWRkUmVjb3JkVGVybSxcbiAgQWRkVG9SZWxhdGVkUmVjb3Jkc1Rlcm0sXG4gIFJlbW92ZUZyb21SZWxhdGVkUmVjb3Jkc1Rlcm0sXG4gIFJlbW92ZVJlY29yZFRlcm0sXG4gIFJlcGxhY2VBdHRyaWJ1dGVUZXJtLFxuICBSZXBsYWNlS2V5VGVybSxcbiAgUmVwbGFjZVJlbGF0ZWRSZWNvcmRzVGVybSxcbiAgUmVwbGFjZVJlbGF0ZWRSZWNvcmRUZXJtLFxuICBVcGRhdGVSZWNvcmRUZXJtXG59IGZyb20gJy4vcmVjb3JkLW9wZXJhdGlvbi10ZXJtJztcbmltcG9ydCB7IFJlY29yZFNjaGVtYSB9IGZyb20gJy4vcmVjb3JkLXNjaGVtYSc7XG5pbXBvcnQgeyBTdGFuZGFyZFJlY29yZFZhbGlkYXRvciB9IGZyb20gJy4vcmVjb3JkLXZhbGlkYXRvcnMvc3RhbmRhcmQtcmVjb3JkLXZhbGlkYXRvcnMnO1xuXG5jb25zdCB7IGFzc2VydCwgZGVwcmVjYXRlIH0gPSBPcmJpdDtcblxuZXhwb3J0IHR5cGUgUmVjb3JkVHJhbnNmb3JtQnVpbGRlckZ1bmMgPSBUcmFuc2Zvcm1CdWlsZGVyRnVuYzxcbiAgUmVjb3JkT3BlcmF0aW9uLFxuICBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyXG4+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZFRyYW5zZm9ybUJ1aWxkZXJTZXR0aW5nczxcbiAgUlQgPSBzdHJpbmcsXG4gIFJJID0gUmVjb3JkSWRlbnRpdHksXG4gIFIgPSBVbmluaXRpYWxpemVkUmVjb3JkXG4+IHtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHNpbmNlIHYwLjE3LCByZXBsYWNlZCBieSBgcmVjb3JkTm9ybWFsaXplcmBcbiAgICovXG4gIHJlY29yZEluaXRpYWxpemVyPzogUmVjb3JkSW5pdGlhbGl6ZXI7XG5cbiAgc2NoZW1hPzogUmVjb3JkU2NoZW1hO1xuICBub3JtYWxpemVyPzogUmVjb3JkTm9ybWFsaXplcjxSVCwgUkksIFI+O1xuICB2YWxpZGF0b3JGb3I/OiBWYWxpZGF0b3JGb3JGbjxTdGFuZGFyZFZhbGlkYXRvciB8IFN0YW5kYXJkUmVjb3JkVmFsaWRhdG9yPjtcbn1cblxuZXhwb3J0IGNsYXNzIFJlY29yZFRyYW5zZm9ybUJ1aWxkZXI8XG4gIFJUID0gc3RyaW5nLFxuICBSSSA9IFJlY29yZElkZW50aXR5LFxuICBSID0gVW5pbml0aWFsaXplZFJlY29yZFxuPiB7XG4gICRzY2hlbWE/OiBSZWNvcmRTY2hlbWE7XG4gICRub3JtYWxpemVyPzogUmVjb3JkTm9ybWFsaXplcjxSVCwgUkksIFI+O1xuICAkdmFsaWRhdG9yRm9yPzogVmFsaWRhdG9yRm9yRm48U3RhbmRhcmRWYWxpZGF0b3IgfCBTdGFuZGFyZFJlY29yZFZhbGlkYXRvcj47XG5cbiAgY29uc3RydWN0b3Ioc2V0dGluZ3M6IFJlY29yZFRyYW5zZm9ybUJ1aWxkZXJTZXR0aW5nczxSVCwgUkksIFI+ID0ge30pIHtcbiAgICBjb25zdCB7IHNjaGVtYSwgbm9ybWFsaXplciwgdmFsaWRhdG9yRm9yLCByZWNvcmRJbml0aWFsaXplciB9ID0gc2V0dGluZ3M7XG5cbiAgICBpZiAodmFsaWRhdG9yRm9yKSB7XG4gICAgICBhc3NlcnQoXG4gICAgICAgICdBIFJlY29yZFRyYW5zZm9ybUJ1aWxkZXIgdGhhdCBoYXMgYmVlbiBhc3NpZ25lZCBhIGB2YWxpZGF0b3JGb3JgIHJlcXVpcmVzIGEgYHNjaGVtYWAnLFxuICAgICAgICBzY2hlbWEgIT09IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLiRzY2hlbWEgPSBzY2hlbWE7XG4gICAgdGhpcy4kbm9ybWFsaXplciA9IG5vcm1hbGl6ZXI7XG4gICAgdGhpcy4kdmFsaWRhdG9yRm9yID0gdmFsaWRhdG9yRm9yO1xuXG4gICAgaWYgKHJlY29yZEluaXRpYWxpemVyKSB7XG4gICAgICBpZiAodGhpcy4kbm9ybWFsaXplciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlcHJlY2F0ZShcbiAgICAgICAgICAnQSBgbm9ybWFsaXplcmAgYW5kIGByZWNvcmRJbml0aWFsaXplcmAgaGF2ZSBib3RoIGJlZW4gYXNzaWduZWQgdG8gdGhlIGBUcmFuc2Zvcm1CdWlsZGVyYC4gT25seSB0aGUgYG5vcm1hbGl6ZXJgIHdpbGwgYmUgdXNlZC4nXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXByZWNhdGUoXG4gICAgICAgICAgJ0EgYHJlY29yZEluaXRpYWxpemVyYCBoYXMgYmVlbiBhc3NpZ25lZCB0byB0aGUgYFRyYW5zZm9ybUJ1aWxkZXJgLiBUaGUgYHJlY29yZEluaXRpYWxpemVyYCBzZXR0aW5nIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYG5vcm1hbGl6ZXJgLCBhbmQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIGl0IHdlcmUgYSBgUmVjb3JkTm9ybWFsaXplcmAuJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLiRub3JtYWxpemVyID0ge1xuICAgICAgICAgIG5vcm1hbGl6ZVJlY29yZFR5cGUodHlwZTogUlQpOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuICh0eXBlIGFzIHVua25vd24pIGFzIHN0cmluZztcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vcm1hbGl6ZVJlY29yZChyZWNvcmQ6IFIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWNvcmRJbml0aWFsaXplci5pbml0aWFsaXplUmVjb3JkKFxuICAgICAgICAgICAgICAocmVjb3JkIGFzIHVua25vd24pIGFzIFVuaW5pdGlhbGl6ZWRSZWNvcmRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3JtYWxpemVSZWNvcmRJZGVudGl0eShyZWNvcmRJZGVudGl0eTogUkkpIHtcbiAgICAgICAgICAgIHJldHVybiAocmVjb3JkSWRlbnRpdHkgYXMgdW5rbm93bikgYXMgUmVjb3JkSWRlbnRpdHk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIG5ldyBgYWRkUmVjb3JkYCBvcGVyYXRpb24uXG4gICAqL1xuICBhZGRSZWNvcmQocmVjb3JkOiBSKTogQWRkUmVjb3JkVGVybTxSVCwgUkksIFI+IHtcbiAgICByZXR1cm4gbmV3IEFkZFJlY29yZFRlcm0odGhpcywgdGhpcy4kbm9ybWFsaXplUmVjb3JkKHJlY29yZCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGEgbmV3IGB1cGRhdGVSZWNvcmRgIG9wZXJhdGlvbi5cbiAgICovXG4gIHVwZGF0ZVJlY29yZChyZWNvcmQ6IFIpOiBVcGRhdGVSZWNvcmRUZXJtPFJULCBSSSwgUj4ge1xuICAgIHJldHVybiBuZXcgVXBkYXRlUmVjb3JkVGVybSh0aGlzLCB0aGlzLiRub3JtYWxpemVSZWNvcmQocmVjb3JkKSk7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBuZXcgYHJlbW92ZVJlY29yZGAgb3BlcmF0aW9uLlxuICAgKi9cbiAgcmVtb3ZlUmVjb3JkKHJlY29yZDogUkkpOiBSZW1vdmVSZWNvcmRUZXJtPFJULCBSSSwgUj4ge1xuICAgIHJldHVybiBuZXcgUmVtb3ZlUmVjb3JkVGVybSh0aGlzLCB0aGlzLiRub3JtYWxpemVSZWNvcmRJZGVudGl0eShyZWNvcmQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIG5ldyBgcmVwbGFjZUtleWAgb3BlcmF0aW9uLlxuICAgKi9cbiAgcmVwbGFjZUtleShcbiAgICByZWNvcmQ6IFJJLFxuICAgIGtleTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmdcbiAgKTogUmVwbGFjZUtleVRlcm08UlQsIFJJLCBSPiB7XG4gICAgcmV0dXJuIG5ldyBSZXBsYWNlS2V5VGVybShcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLiRub3JtYWxpemVSZWNvcmRJZGVudGl0eShyZWNvcmQpLFxuICAgICAga2V5LFxuICAgICAgdmFsdWVcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGEgbmV3IGByZXBsYWNlQXR0cmlidXRlYCBvcGVyYXRpb24uXG4gICAqL1xuICByZXBsYWNlQXR0cmlidXRlKFxuICAgIHJlY29yZDogUkksXG4gICAgYXR0cmlidXRlOiBzdHJpbmcsXG4gICAgdmFsdWU6IHVua25vd25cbiAgKTogUmVwbGFjZUF0dHJpYnV0ZVRlcm08UlQsIFJJLCBSPiB7XG4gICAgcmV0dXJuIG5ldyBSZXBsYWNlQXR0cmlidXRlVGVybShcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLiRub3JtYWxpemVSZWNvcmRJZGVudGl0eShyZWNvcmQpLFxuICAgICAgYXR0cmlidXRlLFxuICAgICAgdmFsdWVcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGEgbmV3IGBhZGRUb1JlbGF0ZWRSZWNvcmRzYCBvcGVyYXRpb24uXG4gICAqL1xuICBhZGRUb1JlbGF0ZWRSZWNvcmRzKFxuICAgIHJlY29yZDogUkksXG4gICAgcmVsYXRpb25zaGlwOiBzdHJpbmcsXG4gICAgcmVsYXRlZFJlY29yZDogUklcbiAgKTogQWRkVG9SZWxhdGVkUmVjb3Jkc1Rlcm08UlQsIFJJLCBSPiB7XG4gICAgcmV0dXJuIG5ldyBBZGRUb1JlbGF0ZWRSZWNvcmRzVGVybShcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLiRub3JtYWxpemVSZWNvcmRJZGVudGl0eShyZWNvcmQpLFxuICAgICAgcmVsYXRpb25zaGlwLFxuICAgICAgdGhpcy4kbm9ybWFsaXplUmVjb3JkSWRlbnRpdHkocmVsYXRlZFJlY29yZClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGEgbmV3IGByZW1vdmVGcm9tUmVsYXRlZFJlY29yZHNgIG9wZXJhdGlvbi5cbiAgICovXG4gIHJlbW92ZUZyb21SZWxhdGVkUmVjb3JkcyhcbiAgICByZWNvcmQ6IFJJLFxuICAgIHJlbGF0aW9uc2hpcDogc3RyaW5nLFxuICAgIHJlbGF0ZWRSZWNvcmQ6IFJJXG4gICk6IFJlbW92ZUZyb21SZWxhdGVkUmVjb3Jkc1Rlcm08UlQsIFJJLCBSPiB7XG4gICAgcmV0dXJuIG5ldyBSZW1vdmVGcm9tUmVsYXRlZFJlY29yZHNUZXJtKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuJG5vcm1hbGl6ZVJlY29yZElkZW50aXR5KHJlY29yZCksXG4gICAgICByZWxhdGlvbnNoaXAsXG4gICAgICB0aGlzLiRub3JtYWxpemVSZWNvcmRJZGVudGl0eShyZWxhdGVkUmVjb3JkKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBuZXcgYHJlcGxhY2VSZWxhdGVkUmVjb3Jkc2Agb3BlcmF0aW9uLlxuICAgKi9cbiAgcmVwbGFjZVJlbGF0ZWRSZWNvcmRzKFxuICAgIHJlY29yZDogUkksXG4gICAgcmVsYXRpb25zaGlwOiBzdHJpbmcsXG4gICAgcmVsYXRlZFJlY29yZHM6IFJJW11cbiAgKTogUmVwbGFjZVJlbGF0ZWRSZWNvcmRzVGVybTxSVCwgUkksIFI+IHtcbiAgICByZXR1cm4gbmV3IFJlcGxhY2VSZWxhdGVkUmVjb3Jkc1Rlcm0oXG4gICAgICB0aGlzLFxuICAgICAgdGhpcy4kbm9ybWFsaXplUmVjb3JkSWRlbnRpdHkocmVjb3JkKSxcbiAgICAgIHJlbGF0aW9uc2hpcCxcbiAgICAgIHJlbGF0ZWRSZWNvcmRzLm1hcCgocmkpID0+IHRoaXMuJG5vcm1hbGl6ZVJlY29yZElkZW50aXR5KHJpKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGEgbmV3IGByZXBsYWNlUmVsYXRlZFJlY29yZGAgb3BlcmF0aW9uLlxuICAgKi9cbiAgcmVwbGFjZVJlbGF0ZWRSZWNvcmQoXG4gICAgcmVjb3JkOiBSSSxcbiAgICByZWxhdGlvbnNoaXA6IHN0cmluZyxcbiAgICByZWxhdGVkUmVjb3JkOiBSSSB8IG51bGxcbiAgKTogUmVwbGFjZVJlbGF0ZWRSZWNvcmRUZXJtPFJULCBSSSwgUj4ge1xuICAgIHJldHVybiBuZXcgUmVwbGFjZVJlbGF0ZWRSZWNvcmRUZXJtKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuJG5vcm1hbGl6ZVJlY29yZElkZW50aXR5KHJlY29yZCksXG4gICAgICByZWxhdGlvbnNoaXAsXG4gICAgICByZWxhdGVkUmVjb3JkID8gdGhpcy4kbm9ybWFsaXplUmVjb3JkSWRlbnRpdHkocmVsYXRlZFJlY29yZCkgOiBudWxsXG4gICAgKTtcbiAgfVxuXG4gICRub3JtYWxpemVSZWNvcmQocjogUik6IEluaXRpYWxpemVkUmVjb3JkIHtcbiAgICBpZiAodGhpcy4kbm9ybWFsaXplcikge1xuICAgICAgcmV0dXJuIHRoaXMuJG5vcm1hbGl6ZXIubm9ybWFsaXplUmVjb3JkKHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKHIgYXMgdW5rbm93bikgYXMgSW5pdGlhbGl6ZWRSZWNvcmQ7XG4gICAgfVxuICB9XG5cbiAgJG5vcm1hbGl6ZVJlY29yZElkZW50aXR5KHJpOiBSSSk6IFJlY29yZElkZW50aXR5IHtcbiAgICBpZiAodGhpcy4kbm9ybWFsaXplciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy4kbm9ybWFsaXplci5ub3JtYWxpemVSZWNvcmRJZGVudGl0eShyaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAocmkgYXMgdW5rbm93bikgYXMgUmVjb3JkSWRlbnRpdHk7XG4gICAgfVxuICB9XG59XG4iXX0=