@orbit/records
Version:
A flexible data access and synchronization layer.
123 lines • 16.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReplaceRelatedRecordTerm = exports.ReplaceRelatedRecordsTerm = exports.RemoveFromRelatedRecordsTerm = exports.AddToRelatedRecordsTerm = exports.ReplaceKeyTerm = exports.ReplaceAttributeTerm = exports.RemoveRecordTerm = exports.UpdateRecordTerm = exports.AddRecordTerm = exports.BaseRecordOperationTerm = void 0;
const data_1 = require("@orbit/data");
const standard_record_validators_1 = require("./record-validators/standard-record-validators");
const record_exceptions_1 = require("./record-exceptions");
class BaseRecordOperationTerm extends data_1.OperationTerm {
constructor(transformBuilder, operation) {
super(operation);
this.$transformBuilder = transformBuilder;
}
toOperation() {
const operation = super.toOperation();
const validatorFor = this.$transformBuilder.$validatorFor;
if (validatorFor) {
const schema = this.$transformBuilder.$schema;
const validateRecordOperation = validatorFor(standard_record_validators_1.StandardRecordValidators.RecordOperation);
const issues = validateRecordOperation(operation, {
validatorFor,
schema
});
if (issues !== undefined) {
throw new record_exceptions_1.ValidationError('Validation isssues encountered while building a transform operation', issues);
}
}
return operation;
}
}
exports.BaseRecordOperationTerm = BaseRecordOperationTerm;
class AddRecordTerm extends BaseRecordOperationTerm {
constructor(transformBuilder, record) {
super(transformBuilder, {
op: 'addRecord',
record
});
}
}
exports.AddRecordTerm = AddRecordTerm;
class UpdateRecordTerm extends BaseRecordOperationTerm {
constructor(transformBuilder, record) {
super(transformBuilder, {
op: 'updateRecord',
record
});
}
}
exports.UpdateRecordTerm = UpdateRecordTerm;
class RemoveRecordTerm extends BaseRecordOperationTerm {
constructor(transformBuilder, record) {
super(transformBuilder, {
op: 'removeRecord',
record
});
}
}
exports.RemoveRecordTerm = RemoveRecordTerm;
class ReplaceAttributeTerm extends BaseRecordOperationTerm {
constructor(transformBuilder, record, attribute, value) {
super(transformBuilder, {
op: 'replaceAttribute',
record,
attribute,
value
});
}
}
exports.ReplaceAttributeTerm = ReplaceAttributeTerm;
class ReplaceKeyTerm extends BaseRecordOperationTerm {
constructor(transformBuilder, record, key, value) {
super(transformBuilder, {
op: 'replaceKey',
record,
key,
value
});
}
}
exports.ReplaceKeyTerm = ReplaceKeyTerm;
class AddToRelatedRecordsTerm extends BaseRecordOperationTerm {
constructor(transformBuilder, record, relationship, relatedRecord) {
super(transformBuilder, {
op: 'addToRelatedRecords',
record,
relationship,
relatedRecord
});
}
}
exports.AddToRelatedRecordsTerm = AddToRelatedRecordsTerm;
class RemoveFromRelatedRecordsTerm extends BaseRecordOperationTerm {
constructor(transformBuilder, record, relationship, relatedRecord) {
super(transformBuilder, {
op: 'removeFromRelatedRecords',
record,
relationship,
relatedRecord
});
}
}
exports.RemoveFromRelatedRecordsTerm = RemoveFromRelatedRecordsTerm;
class ReplaceRelatedRecordsTerm extends BaseRecordOperationTerm {
constructor(transformBuilder, record, relationship, relatedRecords) {
super(transformBuilder, {
op: 'replaceRelatedRecords',
record,
relationship,
relatedRecords
});
}
}
exports.ReplaceRelatedRecordsTerm = ReplaceRelatedRecordsTerm;
class ReplaceRelatedRecordTerm extends BaseRecordOperationTerm {
constructor(transformBuilder, record, relationship, relatedRecord) {
super(transformBuilder, {
op: 'replaceRelatedRecord',
record,
relationship,
relatedRecord
});
}
}
exports.ReplaceRelatedRecordTerm = ReplaceRelatedRecordTerm;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLW9wZXJhdGlvbi10ZXJtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlY29yZC1vcGVyYXRpb24tdGVybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzQ0FBNEM7QUFtQjVDLCtGQUEwRjtBQUcxRiwyREFBc0Q7QUFFdEQsTUFBYSx1QkFLWCxTQUFRLG9CQUFnQjtJQUd4QixZQUNFLGdCQUFtRCxFQUNuRCxTQUFZO1FBRVosS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztJQUM1QyxDQUFDO0lBRUQsV0FBVztRQUNULE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV0QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDO1FBQzFELElBQUksWUFBWSxFQUFFO1lBQ2hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUF1QixDQUFDO1lBRTlELE1BQU0sdUJBQXVCLEdBQUcsWUFBWSxDQUMxQyxxREFBd0IsQ0FBQyxlQUFlLENBQ2IsQ0FBQztZQUU5QixNQUFNLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hELFlBQVk7Z0JBQ1osTUFBTTthQUNQLENBQUMsQ0FBQztZQUNILElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtnQkFDeEIsTUFBTSxJQUFJLG1DQUFlLENBQ3ZCLHFFQUFxRSxFQUNyRSxNQUFNLENBQ1AsQ0FBQzthQUNIO1NBQ0Y7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUF6Q0QsMERBeUNDO0FBRUQsTUFBYSxhQUlYLFNBQVEsdUJBQXNEO0lBQzlELFlBQ0UsZ0JBQW1ELEVBQ25ELE1BQXlCO1FBRXpCLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtZQUN0QixFQUFFLEVBQUUsV0FBVztZQUNmLE1BQU07U0FDUCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFkRCxzQ0FjQztBQUVELE1BQWEsZ0JBSVgsU0FBUSx1QkFBeUQ7SUFDakUsWUFDRSxnQkFBbUQsRUFDbkQsTUFBeUI7UUFFekIsS0FBSyxDQUFDLGdCQUFnQixFQUFFO1lBQ3RCLEVBQUUsRUFBRSxjQUFjO1lBQ2xCLE1BQU07U0FDUCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFkRCw0Q0FjQztBQUVELE1BQWEsZ0JBSVgsU0FBUSx1QkFBeUQ7SUFDakUsWUFDRSxnQkFBbUQsRUFDbkQsTUFBc0I7UUFFdEIsS0FBSyxDQUFDLGdCQUFnQixFQUFFO1lBQ3RCLEVBQUUsRUFBRSxjQUFjO1lBQ2xCLE1BQU07U0FDUCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFkRCw0Q0FjQztBQUVELE1BQWEsb0JBSVgsU0FBUSx1QkFBNkQ7SUFDckUsWUFDRSxnQkFBbUQsRUFDbkQsTUFBc0IsRUFDdEIsU0FBaUIsRUFDakIsS0FBYztRQUVkLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtZQUN0QixFQUFFLEVBQUUsa0JBQWtCO1lBQ3RCLE1BQU07WUFDTixTQUFTO1lBQ1QsS0FBSztTQUNOLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWxCRCxvREFrQkM7QUFFRCxNQUFhLGNBSVgsU0FBUSx1QkFBdUQ7SUFDL0QsWUFDRSxnQkFBbUQsRUFDbkQsTUFBc0IsRUFDdEIsR0FBVyxFQUNYLEtBQWE7UUFFYixLQUFLLENBQUMsZ0JBQWdCLEVBQUU7WUFDdEIsRUFBRSxFQUFFLFlBQVk7WUFDaEIsTUFBTTtZQUNOLEdBQUc7WUFDSCxLQUFLO1NBQ04sQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBbEJELHdDQWtCQztBQUVELE1BQWEsdUJBSVgsU0FBUSx1QkFBZ0U7SUFDeEUsWUFDRSxnQkFBbUQsRUFDbkQsTUFBc0IsRUFDdEIsWUFBb0IsRUFDcEIsYUFBNkI7UUFFN0IsS0FBSyxDQUFDLGdCQUFnQixFQUFFO1lBQ3RCLEVBQUUsRUFBRSxxQkFBcUI7WUFDekIsTUFBTTtZQUNOLFlBQVk7WUFDWixhQUFhO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBbEJELDBEQWtCQztBQUVELE1BQWEsNEJBSVgsU0FBUSx1QkFLVDtJQUNDLFlBQ0UsZ0JBQW1ELEVBQ25ELE1BQXNCLEVBQ3RCLFlBQW9CLEVBQ3BCLGFBQTZCO1FBRTdCLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtZQUN0QixFQUFFLEVBQUUsMEJBQTBCO1lBQzlCLE1BQU07WUFDTixZQUFZO1lBQ1osYUFBYTtTQUNkLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXZCRCxvRUF1QkM7QUFFRCxNQUFhLHlCQUlYLFNBQVEsdUJBQWtFO0lBQzFFLFlBQ0UsZ0JBQW1ELEVBQ25ELE1BQXNCLEVBQ3RCLFlBQW9CLEVBQ3BCLGNBQWdDO1FBRWhDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtZQUN0QixFQUFFLEVBQUUsdUJBQXVCO1lBQzNCLE1BQU07WUFDTixZQUFZO1lBQ1osY0FBYztTQUNmLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWxCRCw4REFrQkM7QUFFRCxNQUFhLHdCQUlYLFNBQVEsdUJBQWlFO0lBQ3pFLFlBQ0UsZ0JBQW1ELEVBQ25ELE1BQXNCLEVBQ3RCLFlBQW9CLEVBQ3BCLGFBQW9DO1FBRXBDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtZQUN0QixFQUFFLEVBQUUsc0JBQXNCO1lBQzFCLE1BQU07WUFDTixZQUFZO1lBQ1osYUFBYTtTQUNkLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWxCRCw0REFrQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGVyYXRpb25UZXJtIH0gZnJvbSAnQG9yYml0L2RhdGEnO1xuaW1wb3J0IHtcbiAgQWRkUmVjb3JkT3BlcmF0aW9uLFxuICBVcGRhdGVSZWNvcmRPcGVyYXRpb24sXG4gIFJlbW92ZVJlY29yZE9wZXJhdGlvbixcbiAgUmVwbGFjZUF0dHJpYnV0ZU9wZXJhdGlvbixcbiAgUmVwbGFjZUtleU9wZXJhdGlvbixcbiAgQWRkVG9SZWxhdGVkUmVjb3Jkc09wZXJhdGlvbixcbiAgUmVtb3ZlRnJvbVJlbGF0ZWRSZWNvcmRzT3BlcmF0aW9uLFxuICBSZXBsYWNlUmVsYXRlZFJlY29yZHNPcGVyYXRpb24sXG4gIFJlcGxhY2VSZWxhdGVkUmVjb3JkT3BlcmF0aW9uLFxuICBSZWNvcmRPcGVyYXRpb25cbn0gZnJvbSAnLi9yZWNvcmQtb3BlcmF0aW9uJztcbmltcG9ydCB7XG4gIEluaXRpYWxpemVkUmVjb3JkLFxuICBSZWNvcmRJZGVudGl0eSxcbiAgVW5pbml0aWFsaXplZFJlY29yZFxufSBmcm9tICcuL3JlY29yZCc7XG5pbXBvcnQgeyBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyIH0gZnJvbSAnLi9yZWNvcmQtdHJhbnNmb3JtLWJ1aWxkZXInO1xuaW1wb3J0IHsgU3RhbmRhcmRSZWNvcmRWYWxpZGF0b3JzIH0gZnJvbSAnLi9yZWNvcmQtdmFsaWRhdG9ycy9zdGFuZGFyZC1yZWNvcmQtdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBSZWNvcmRPcGVyYXRpb25WYWxpZGF0b3IgfSBmcm9tICcuL3JlY29yZC12YWxpZGF0b3JzL3JlY29yZC1vcGVyYXRpb24tdmFsaWRhdG9yJztcbmltcG9ydCB7IFJlY29yZFNjaGVtYSB9IGZyb20gJy4vcmVjb3JkLXNjaGVtYSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuL3JlY29yZC1leGNlcHRpb25zJztcblxuZXhwb3J0IGNsYXNzIEJhc2VSZWNvcmRPcGVyYXRpb25UZXJtPFxuICBPIGV4dGVuZHMgUmVjb3JkT3BlcmF0aW9uLFxuICBSVCA9IHN0cmluZyxcbiAgUkkgPSBSZWNvcmRJZGVudGl0eSxcbiAgUiA9IFVuaW5pdGlhbGl6ZWRSZWNvcmRcbj4gZXh0ZW5kcyBPcGVyYXRpb25UZXJtPE8+IHtcbiAgJHRyYW5zZm9ybUJ1aWxkZXI6IFJlY29yZFRyYW5zZm9ybUJ1aWxkZXI8UlQsIFJJLCBSPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICB0cmFuc2Zvcm1CdWlsZGVyOiBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyPFJULCBSSSwgUj4sXG4gICAgb3BlcmF0aW9uOiBPXG4gICkge1xuICAgIHN1cGVyKG9wZXJhdGlvbik7XG4gICAgdGhpcy4kdHJhbnNmb3JtQnVpbGRlciA9IHRyYW5zZm9ybUJ1aWxkZXI7XG4gIH1cblxuICB0b09wZXJhdGlvbigpOiBPIHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBzdXBlci50b09wZXJhdGlvbigpO1xuXG4gICAgY29uc3QgdmFsaWRhdG9yRm9yID0gdGhpcy4kdHJhbnNmb3JtQnVpbGRlci4kdmFsaWRhdG9yRm9yO1xuICAgIGlmICh2YWxpZGF0b3JGb3IpIHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuJHRyYW5zZm9ybUJ1aWxkZXIuJHNjaGVtYSBhcyBSZWNvcmRTY2hlbWE7XG5cbiAgICAgIGNvbnN0IHZhbGlkYXRlUmVjb3JkT3BlcmF0aW9uID0gdmFsaWRhdG9yRm9yKFxuICAgICAgICBTdGFuZGFyZFJlY29yZFZhbGlkYXRvcnMuUmVjb3JkT3BlcmF0aW9uXG4gICAgICApIGFzIFJlY29yZE9wZXJhdGlvblZhbGlkYXRvcjtcblxuICAgICAgY29uc3QgaXNzdWVzID0gdmFsaWRhdGVSZWNvcmRPcGVyYXRpb24ob3BlcmF0aW9uLCB7XG4gICAgICAgIHZhbGlkYXRvckZvcixcbiAgICAgICAgc2NoZW1hXG4gICAgICB9KTtcbiAgICAgIGlmIChpc3N1ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgICdWYWxpZGF0aW9uIGlzc3N1ZXMgZW5jb3VudGVyZWQgd2hpbGUgYnVpbGRpbmcgYSB0cmFuc2Zvcm0gb3BlcmF0aW9uJyxcbiAgICAgICAgICBpc3N1ZXNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3BlcmF0aW9uO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBZGRSZWNvcmRUZXJtPFxuICBSVCA9IHN0cmluZyxcbiAgUkkgPSBSZWNvcmRJZGVudGl0eSxcbiAgUiA9IFVuaW5pdGlhbGl6ZWRSZWNvcmRcbj4gZXh0ZW5kcyBCYXNlUmVjb3JkT3BlcmF0aW9uVGVybTxBZGRSZWNvcmRPcGVyYXRpb24sIFJULCBSSSwgUj4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICB0cmFuc2Zvcm1CdWlsZGVyOiBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyPFJULCBSSSwgUj4sXG4gICAgcmVjb3JkOiBJbml0aWFsaXplZFJlY29yZFxuICApIHtcbiAgICBzdXBlcih0cmFuc2Zvcm1CdWlsZGVyLCB7XG4gICAgICBvcDogJ2FkZFJlY29yZCcsXG4gICAgICByZWNvcmRcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlUmVjb3JkVGVybTxcbiAgUlQgPSBzdHJpbmcsXG4gIFJJID0gUmVjb3JkSWRlbnRpdHksXG4gIFIgPSBVbmluaXRpYWxpemVkUmVjb3JkXG4+IGV4dGVuZHMgQmFzZVJlY29yZE9wZXJhdGlvblRlcm08VXBkYXRlUmVjb3JkT3BlcmF0aW9uLCBSVCwgUkksIFI+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgdHJhbnNmb3JtQnVpbGRlcjogUmVjb3JkVHJhbnNmb3JtQnVpbGRlcjxSVCwgUkksIFI+LFxuICAgIHJlY29yZDogSW5pdGlhbGl6ZWRSZWNvcmRcbiAgKSB7XG4gICAgc3VwZXIodHJhbnNmb3JtQnVpbGRlciwge1xuICAgICAgb3A6ICd1cGRhdGVSZWNvcmQnLFxuICAgICAgcmVjb3JkXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlbW92ZVJlY29yZFRlcm08XG4gIFJUID0gc3RyaW5nLFxuICBSSSA9IFJlY29yZElkZW50aXR5LFxuICBSID0gVW5pbml0aWFsaXplZFJlY29yZFxuPiBleHRlbmRzIEJhc2VSZWNvcmRPcGVyYXRpb25UZXJtPFJlbW92ZVJlY29yZE9wZXJhdGlvbiwgUlQsIFJJLCBSPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHRyYW5zZm9ybUJ1aWxkZXI6IFJlY29yZFRyYW5zZm9ybUJ1aWxkZXI8UlQsIFJJLCBSPixcbiAgICByZWNvcmQ6IFJlY29yZElkZW50aXR5XG4gICkge1xuICAgIHN1cGVyKHRyYW5zZm9ybUJ1aWxkZXIsIHtcbiAgICAgIG9wOiAncmVtb3ZlUmVjb3JkJyxcbiAgICAgIHJlY29yZFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZXBsYWNlQXR0cmlidXRlVGVybTxcbiAgUlQgPSBzdHJpbmcsXG4gIFJJID0gUmVjb3JkSWRlbnRpdHksXG4gIFIgPSBVbmluaXRpYWxpemVkUmVjb3JkXG4+IGV4dGVuZHMgQmFzZVJlY29yZE9wZXJhdGlvblRlcm08UmVwbGFjZUF0dHJpYnV0ZU9wZXJhdGlvbiwgUlQsIFJJLCBSPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHRyYW5zZm9ybUJ1aWxkZXI6IFJlY29yZFRyYW5zZm9ybUJ1aWxkZXI8UlQsIFJJLCBSPixcbiAgICByZWNvcmQ6IFJlY29yZElkZW50aXR5LFxuICAgIGF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIHZhbHVlOiB1bmtub3duXG4gICkge1xuICAgIHN1cGVyKHRyYW5zZm9ybUJ1aWxkZXIsIHtcbiAgICAgIG9wOiAncmVwbGFjZUF0dHJpYnV0ZScsXG4gICAgICByZWNvcmQsXG4gICAgICBhdHRyaWJ1dGUsXG4gICAgICB2YWx1ZVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZXBsYWNlS2V5VGVybTxcbiAgUlQgPSBzdHJpbmcsXG4gIFJJID0gUmVjb3JkSWRlbnRpdHksXG4gIFIgPSBVbmluaXRpYWxpemVkUmVjb3JkXG4+IGV4dGVuZHMgQmFzZVJlY29yZE9wZXJhdGlvblRlcm08UmVwbGFjZUtleU9wZXJhdGlvbiwgUlQsIFJJLCBSPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHRyYW5zZm9ybUJ1aWxkZXI6IFJlY29yZFRyYW5zZm9ybUJ1aWxkZXI8UlQsIFJJLCBSPixcbiAgICByZWNvcmQ6IFJlY29yZElkZW50aXR5LFxuICAgIGtleTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIodHJhbnNmb3JtQnVpbGRlciwge1xuICAgICAgb3A6ICdyZXBsYWNlS2V5JyxcbiAgICAgIHJlY29yZCxcbiAgICAgIGtleSxcbiAgICAgIHZhbHVlXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFkZFRvUmVsYXRlZFJlY29yZHNUZXJtPFxuICBSVCA9IHN0cmluZyxcbiAgUkkgPSBSZWNvcmRJZGVudGl0eSxcbiAgUiA9IFVuaW5pdGlhbGl6ZWRSZWNvcmRcbj4gZXh0ZW5kcyBCYXNlUmVjb3JkT3BlcmF0aW9uVGVybTxBZGRUb1JlbGF0ZWRSZWNvcmRzT3BlcmF0aW9uLCBSVCwgUkksIFI+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgdHJhbnNmb3JtQnVpbGRlcjogUmVjb3JkVHJhbnNmb3JtQnVpbGRlcjxSVCwgUkksIFI+LFxuICAgIHJlY29yZDogUmVjb3JkSWRlbnRpdHksXG4gICAgcmVsYXRpb25zaGlwOiBzdHJpbmcsXG4gICAgcmVsYXRlZFJlY29yZDogUmVjb3JkSWRlbnRpdHlcbiAgKSB7XG4gICAgc3VwZXIodHJhbnNmb3JtQnVpbGRlciwge1xuICAgICAgb3A6ICdhZGRUb1JlbGF0ZWRSZWNvcmRzJyxcbiAgICAgIHJlY29yZCxcbiAgICAgIHJlbGF0aW9uc2hpcCxcbiAgICAgIHJlbGF0ZWRSZWNvcmRcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVtb3ZlRnJvbVJlbGF0ZWRSZWNvcmRzVGVybTxcbiAgUlQgPSBzdHJpbmcsXG4gIFJJID0gUmVjb3JkSWRlbnRpdHksXG4gIFIgPSBVbmluaXRpYWxpemVkUmVjb3JkXG4+IGV4dGVuZHMgQmFzZVJlY29yZE9wZXJhdGlvblRlcm08XG4gIFJlbW92ZUZyb21SZWxhdGVkUmVjb3Jkc09wZXJhdGlvbixcbiAgUlQsXG4gIFJJLFxuICBSXG4+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgdHJhbnNmb3JtQnVpbGRlcjogUmVjb3JkVHJhbnNmb3JtQnVpbGRlcjxSVCwgUkksIFI+LFxuICAgIHJlY29yZDogUmVjb3JkSWRlbnRpdHksXG4gICAgcmVsYXRpb25zaGlwOiBzdHJpbmcsXG4gICAgcmVsYXRlZFJlY29yZDogUmVjb3JkSWRlbnRpdHlcbiAgKSB7XG4gICAgc3VwZXIodHJhbnNmb3JtQnVpbGRlciwge1xuICAgICAgb3A6ICdyZW1vdmVGcm9tUmVsYXRlZFJlY29yZHMnLFxuICAgICAgcmVjb3JkLFxuICAgICAgcmVsYXRpb25zaGlwLFxuICAgICAgcmVsYXRlZFJlY29yZFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZXBsYWNlUmVsYXRlZFJlY29yZHNUZXJtPFxuICBSVCA9IHN0cmluZyxcbiAgUkkgPSBSZWNvcmRJZGVudGl0eSxcbiAgUiA9IFVuaW5pdGlhbGl6ZWRSZWNvcmRcbj4gZXh0ZW5kcyBCYXNlUmVjb3JkT3BlcmF0aW9uVGVybTxSZXBsYWNlUmVsYXRlZFJlY29yZHNPcGVyYXRpb24sIFJULCBSSSwgUj4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICB0cmFuc2Zvcm1CdWlsZGVyOiBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyPFJULCBSSSwgUj4sXG4gICAgcmVjb3JkOiBSZWNvcmRJZGVudGl0eSxcbiAgICByZWxhdGlvbnNoaXA6IHN0cmluZyxcbiAgICByZWxhdGVkUmVjb3JkczogUmVjb3JkSWRlbnRpdHlbXVxuICApIHtcbiAgICBzdXBlcih0cmFuc2Zvcm1CdWlsZGVyLCB7XG4gICAgICBvcDogJ3JlcGxhY2VSZWxhdGVkUmVjb3JkcycsXG4gICAgICByZWNvcmQsXG4gICAgICByZWxhdGlvbnNoaXAsXG4gICAgICByZWxhdGVkUmVjb3Jkc1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZXBsYWNlUmVsYXRlZFJlY29yZFRlcm08XG4gIFJUID0gc3RyaW5nLFxuICBSSSA9IFJlY29yZElkZW50aXR5LFxuICBSID0gVW5pbml0aWFsaXplZFJlY29yZFxuPiBleHRlbmRzIEJhc2VSZWNvcmRPcGVyYXRpb25UZXJtPFJlcGxhY2VSZWxhdGVkUmVjb3JkT3BlcmF0aW9uLCBSVCwgUkksIFI+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgdHJhbnNmb3JtQnVpbGRlcjogUmVjb3JkVHJhbnNmb3JtQnVpbGRlcjxSVCwgUkksIFI+LFxuICAgIHJlY29yZDogUmVjb3JkSWRlbnRpdHksXG4gICAgcmVsYXRpb25zaGlwOiBzdHJpbmcsXG4gICAgcmVsYXRlZFJlY29yZDogUmVjb3JkSWRlbnRpdHkgfCBudWxsXG4gICkge1xuICAgIHN1cGVyKHRyYW5zZm9ybUJ1aWxkZXIsIHtcbiAgICAgIG9wOiAncmVwbGFjZVJlbGF0ZWRSZWNvcmQnLFxuICAgICAgcmVjb3JkLFxuICAgICAgcmVsYXRpb25zaGlwLFxuICAgICAgcmVsYXRlZFJlY29yZFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFJlY29yZE9wZXJhdGlvblRlcm08XG4gIFJUID0gc3RyaW5nLFxuICBSSSA9IFJlY29yZElkZW50aXR5LFxuICBSID0gVW5pbml0aWFsaXplZFJlY29yZFxuPiA9XG4gIHwgQWRkUmVjb3JkVGVybTxSVCwgUkksIFI+XG4gIHwgVXBkYXRlUmVjb3JkVGVybTxSVCwgUkksIFI+XG4gIHwgUmVtb3ZlUmVjb3JkVGVybTxSVCwgUkksIFI+XG4gIHwgUmVwbGFjZUtleVRlcm08UlQsIFJJLCBSPlxuICB8IFJlcGxhY2VBdHRyaWJ1dGVUZXJtPFJULCBSSSwgUj5cbiAgfCBBZGRUb1JlbGF0ZWRSZWNvcmRzVGVybTxSVCwgUkksIFI+XG4gIHwgUmVtb3ZlRnJvbVJlbGF0ZWRSZWNvcmRzVGVybTxSVCwgUkksIFI+XG4gIHwgUmVwbGFjZVJlbGF0ZWRSZWNvcmRzVGVybTxSVCwgUkksIFI+XG4gIHwgUmVwbGFjZVJlbGF0ZWRSZWNvcmRUZXJtPFJULCBSSSwgUj47XG4iXX0=