UNPKG

@orbit/records

Version:

A flexible data access and synchronization layer.

110 lines 15.5 kB
import { OperationTerm } from '@orbit/data'; import { StandardRecordValidators } from './record-validators/standard-record-validators'; import { ValidationError } from './record-exceptions'; export class BaseRecordOperationTerm extends 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(StandardRecordValidators.RecordOperation); const issues = validateRecordOperation(operation, { validatorFor, schema }); if (issues !== undefined) { throw new ValidationError('Validation isssues encountered while building a transform operation', issues); } } return operation; } } export class AddRecordTerm extends BaseRecordOperationTerm { constructor(transformBuilder, record) { super(transformBuilder, { op: 'addRecord', record }); } } export class UpdateRecordTerm extends BaseRecordOperationTerm { constructor(transformBuilder, record) { super(transformBuilder, { op: 'updateRecord', record }); } } export class RemoveRecordTerm extends BaseRecordOperationTerm { constructor(transformBuilder, record) { super(transformBuilder, { op: 'removeRecord', record }); } } export class ReplaceAttributeTerm extends BaseRecordOperationTerm { constructor(transformBuilder, record, attribute, value) { super(transformBuilder, { op: 'replaceAttribute', record, attribute, value }); } } export class ReplaceKeyTerm extends BaseRecordOperationTerm { constructor(transformBuilder, record, key, value) { super(transformBuilder, { op: 'replaceKey', record, key, value }); } } export class AddToRelatedRecordsTerm extends BaseRecordOperationTerm { constructor(transformBuilder, record, relationship, relatedRecord) { super(transformBuilder, { op: 'addToRelatedRecords', record, relationship, relatedRecord }); } } export class RemoveFromRelatedRecordsTerm extends BaseRecordOperationTerm { constructor(transformBuilder, record, relationship, relatedRecord) { super(transformBuilder, { op: 'removeFromRelatedRecords', record, relationship, relatedRecord }); } } export class ReplaceRelatedRecordsTerm extends BaseRecordOperationTerm { constructor(transformBuilder, record, relationship, relatedRecords) { super(transformBuilder, { op: 'replaceRelatedRecords', record, relationship, relatedRecords }); } } export class ReplaceRelatedRecordTerm extends BaseRecordOperationTerm { constructor(transformBuilder, record, relationship, relatedRecord) { super(transformBuilder, { op: 'replaceRelatedRecord', record, relationship, relatedRecord }); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLW9wZXJhdGlvbi10ZXJtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlY29yZC1vcGVyYXRpb24tdGVybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBbUI1QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUcxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsTUFBTSxPQUFPLHVCQUtYLFNBQVEsYUFBZ0I7SUFHeEIsWUFDRSxnQkFBbUQsRUFDbkQsU0FBWTtRQUVaLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7SUFDNUMsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFdEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQztRQUMxRCxJQUFJLFlBQVksRUFBRTtZQUNoQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBdUIsQ0FBQztZQUU5RCxNQUFNLHVCQUF1QixHQUFHLFlBQVksQ0FDMUMsd0JBQXdCLENBQUMsZUFBZSxDQUNiLENBQUM7WUFFOUIsTUFBTSxNQUFNLEdBQUcsdUJBQXVCLENBQUMsU0FBUyxFQUFFO2dCQUNoRCxZQUFZO2dCQUNaLE1BQU07YUFDUCxDQUFDLENBQUM7WUFDSCxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7Z0JBQ3hCLE1BQU0sSUFBSSxlQUFlLENBQ3ZCLHFFQUFxRSxFQUNyRSxNQUFNLENBQ1AsQ0FBQzthQUNIO1NBQ0Y7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sYUFJWCxTQUFRLHVCQUFzRDtJQUM5RCxZQUNFLGdCQUFtRCxFQUNuRCxNQUF5QjtRQUV6QixLQUFLLENBQUMsZ0JBQWdCLEVBQUU7WUFDdEIsRUFBRSxFQUFFLFdBQVc7WUFDZixNQUFNO1NBQ1AsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGdCQUlYLFNBQVEsdUJBQXlEO0lBQ2pFLFlBQ0UsZ0JBQW1ELEVBQ25ELE1BQXlCO1FBRXpCLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtZQUN0QixFQUFFLEVBQUUsY0FBYztZQUNsQixNQUFNO1NBQ1AsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGdCQUlYLFNBQVEsdUJBQXlEO0lBQ2pFLFlBQ0UsZ0JBQW1ELEVBQ25ELE1BQXNCO1FBRXRCLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtZQUN0QixFQUFFLEVBQUUsY0FBYztZQUNsQixNQUFNO1NBQ1AsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLG9CQUlYLFNBQVEsdUJBQTZEO0lBQ3JFLFlBQ0UsZ0JBQW1ELEVBQ25ELE1BQXNCLEVBQ3RCLFNBQWlCLEVBQ2pCLEtBQWM7UUFFZCxLQUFLLENBQUMsZ0JBQWdCLEVBQUU7WUFDdEIsRUFBRSxFQUFFLGtCQUFrQjtZQUN0QixNQUFNO1lBQ04sU0FBUztZQUNULEtBQUs7U0FDTixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sY0FJWCxTQUFRLHVCQUF1RDtJQUMvRCxZQUNFLGdCQUFtRCxFQUNuRCxNQUFzQixFQUN0QixHQUFXLEVBQ1gsS0FBYTtRQUViLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtZQUN0QixFQUFFLEVBQUUsWUFBWTtZQUNoQixNQUFNO1lBQ04sR0FBRztZQUNILEtBQUs7U0FDTixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sdUJBSVgsU0FBUSx1QkFBZ0U7SUFDeEUsWUFDRSxnQkFBbUQsRUFDbkQsTUFBc0IsRUFDdEIsWUFBb0IsRUFDcEIsYUFBNkI7UUFFN0IsS0FBSyxDQUFDLGdCQUFnQixFQUFFO1lBQ3RCLEVBQUUsRUFBRSxxQkFBcUI7WUFDekIsTUFBTTtZQUNOLFlBQVk7WUFDWixhQUFhO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLDRCQUlYLFNBQVEsdUJBS1Q7SUFDQyxZQUNFLGdCQUFtRCxFQUNuRCxNQUFzQixFQUN0QixZQUFvQixFQUNwQixhQUE2QjtRQUU3QixLQUFLLENBQUMsZ0JBQWdCLEVBQUU7WUFDdEIsRUFBRSxFQUFFLDBCQUEwQjtZQUM5QixNQUFNO1lBQ04sWUFBWTtZQUNaLGFBQWE7U0FDZCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8seUJBSVgsU0FBUSx1QkFBa0U7SUFDMUUsWUFDRSxnQkFBbUQsRUFDbkQsTUFBc0IsRUFDdEIsWUFBb0IsRUFDcEIsY0FBZ0M7UUFFaEMsS0FBSyxDQUFDLGdCQUFnQixFQUFFO1lBQ3RCLEVBQUUsRUFBRSx1QkFBdUI7WUFDM0IsTUFBTTtZQUNOLFlBQVk7WUFDWixjQUFjO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLHdCQUlYLFNBQVEsdUJBQWlFO0lBQ3pFLFlBQ0UsZ0JBQW1ELEVBQ25ELE1BQXNCLEVBQ3RCLFlBQW9CLEVBQ3BCLGFBQW9DO1FBRXBDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtZQUN0QixFQUFFLEVBQUUsc0JBQXNCO1lBQzFCLE1BQU07WUFDTixZQUFZO1lBQ1osYUFBYTtTQUNkLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wZXJhdGlvblRlcm0gfSBmcm9tICdAb3JiaXQvZGF0YSc7XG5pbXBvcnQge1xuICBBZGRSZWNvcmRPcGVyYXRpb24sXG4gIFVwZGF0ZVJlY29yZE9wZXJhdGlvbixcbiAgUmVtb3ZlUmVjb3JkT3BlcmF0aW9uLFxuICBSZXBsYWNlQXR0cmlidXRlT3BlcmF0aW9uLFxuICBSZXBsYWNlS2V5T3BlcmF0aW9uLFxuICBBZGRUb1JlbGF0ZWRSZWNvcmRzT3BlcmF0aW9uLFxuICBSZW1vdmVGcm9tUmVsYXRlZFJlY29yZHNPcGVyYXRpb24sXG4gIFJlcGxhY2VSZWxhdGVkUmVjb3Jkc09wZXJhdGlvbixcbiAgUmVwbGFjZVJlbGF0ZWRSZWNvcmRPcGVyYXRpb24sXG4gIFJlY29yZE9wZXJhdGlvblxufSBmcm9tICcuL3JlY29yZC1vcGVyYXRpb24nO1xuaW1wb3J0IHtcbiAgSW5pdGlhbGl6ZWRSZWNvcmQsXG4gIFJlY29yZElkZW50aXR5LFxuICBVbmluaXRpYWxpemVkUmVjb3JkXG59IGZyb20gJy4vcmVjb3JkJztcbmltcG9ydCB7IFJlY29yZFRyYW5zZm9ybUJ1aWxkZXIgfSBmcm9tICcuL3JlY29yZC10cmFuc2Zvcm0tYnVpbGRlcic7XG5pbXBvcnQgeyBTdGFuZGFyZFJlY29yZFZhbGlkYXRvcnMgfSBmcm9tICcuL3JlY29yZC12YWxpZGF0b3JzL3N0YW5kYXJkLXJlY29yZC12YWxpZGF0b3JzJztcbmltcG9ydCB7IFJlY29yZE9wZXJhdGlvblZhbGlkYXRvciB9IGZyb20gJy4vcmVjb3JkLXZhbGlkYXRvcnMvcmVjb3JkLW9wZXJhdGlvbi12YWxpZGF0b3InO1xuaW1wb3J0IHsgUmVjb3JkU2NoZW1hIH0gZnJvbSAnLi9yZWNvcmQtc2NoZW1hJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4vcmVjb3JkLWV4Y2VwdGlvbnMnO1xuXG5leHBvcnQgY2xhc3MgQmFzZVJlY29yZE9wZXJhdGlvblRlcm08XG4gIE8gZXh0ZW5kcyBSZWNvcmRPcGVyYXRpb24sXG4gIFJUID0gc3RyaW5nLFxuICBSSSA9IFJlY29yZElkZW50aXR5LFxuICBSID0gVW5pbml0aWFsaXplZFJlY29yZFxuPiBleHRlbmRzIE9wZXJhdGlvblRlcm08Tz4ge1xuICAkdHJhbnNmb3JtQnVpbGRlcjogUmVjb3JkVHJhbnNmb3JtQnVpbGRlcjxSVCwgUkksIFI+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHRyYW5zZm9ybUJ1aWxkZXI6IFJlY29yZFRyYW5zZm9ybUJ1aWxkZXI8UlQsIFJJLCBSPixcbiAgICBvcGVyYXRpb246IE9cbiAgKSB7XG4gICAgc3VwZXIob3BlcmF0aW9uKTtcbiAgICB0aGlzLiR0cmFuc2Zvcm1CdWlsZGVyID0gdHJhbnNmb3JtQnVpbGRlcjtcbiAgfVxuXG4gIHRvT3BlcmF0aW9uKCk6IE8ge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHN1cGVyLnRvT3BlcmF0aW9uKCk7XG5cbiAgICBjb25zdCB2YWxpZGF0b3JGb3IgPSB0aGlzLiR0cmFuc2Zvcm1CdWlsZGVyLiR2YWxpZGF0b3JGb3I7XG4gICAgaWYgKHZhbGlkYXRvckZvcikge1xuICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy4kdHJhbnNmb3JtQnVpbGRlci4kc2NoZW1hIGFzIFJlY29yZFNjaGVtYTtcblxuICAgICAgY29uc3QgdmFsaWRhdGVSZWNvcmRPcGVyYXRpb24gPSB2YWxpZGF0b3JGb3IoXG4gICAgICAgIFN0YW5kYXJkUmVjb3JkVmFsaWRhdG9ycy5SZWNvcmRPcGVyYXRpb25cbiAgICAgICkgYXMgUmVjb3JkT3BlcmF0aW9uVmFsaWRhdG9yO1xuXG4gICAgICBjb25zdCBpc3N1ZXMgPSB2YWxpZGF0ZVJlY29yZE9wZXJhdGlvbihvcGVyYXRpb24sIHtcbiAgICAgICAgdmFsaWRhdG9yRm9yLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pO1xuICAgICAgaWYgKGlzc3VlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgJ1ZhbGlkYXRpb24gaXNzc3VlcyBlbmNvdW50ZXJlZCB3aGlsZSBidWlsZGluZyBhIHRyYW5zZm9ybSBvcGVyYXRpb24nLFxuICAgICAgICAgIGlzc3Vlc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvcGVyYXRpb247XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFkZFJlY29yZFRlcm08XG4gIFJUID0gc3RyaW5nLFxuICBSSSA9IFJlY29yZElkZW50aXR5LFxuICBSID0gVW5pbml0aWFsaXplZFJlY29yZFxuPiBleHRlbmRzIEJhc2VSZWNvcmRPcGVyYXRpb25UZXJtPEFkZFJlY29yZE9wZXJhdGlvbiwgUlQsIFJJLCBSPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHRyYW5zZm9ybUJ1aWxkZXI6IFJlY29yZFRyYW5zZm9ybUJ1aWxkZXI8UlQsIFJJLCBSPixcbiAgICByZWNvcmQ6IEluaXRpYWxpemVkUmVjb3JkXG4gICkge1xuICAgIHN1cGVyKHRyYW5zZm9ybUJ1aWxkZXIsIHtcbiAgICAgIG9wOiAnYWRkUmVjb3JkJyxcbiAgICAgIHJlY29yZFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVSZWNvcmRUZXJtPFxuICBSVCA9IHN0cmluZyxcbiAgUkkgPSBSZWNvcmRJZGVudGl0eSxcbiAgUiA9IFVuaW5pdGlhbGl6ZWRSZWNvcmRcbj4gZXh0ZW5kcyBCYXNlUmVjb3JkT3BlcmF0aW9uVGVybTxVcGRhdGVSZWNvcmRPcGVyYXRpb24sIFJULCBSSSwgUj4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICB0cmFuc2Zvcm1CdWlsZGVyOiBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyPFJULCBSSSwgUj4sXG4gICAgcmVjb3JkOiBJbml0aWFsaXplZFJlY29yZFxuICApIHtcbiAgICBzdXBlcih0cmFuc2Zvcm1CdWlsZGVyLCB7XG4gICAgICBvcDogJ3VwZGF0ZVJlY29yZCcsXG4gICAgICByZWNvcmRcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVtb3ZlUmVjb3JkVGVybTxcbiAgUlQgPSBzdHJpbmcsXG4gIFJJID0gUmVjb3JkSWRlbnRpdHksXG4gIFIgPSBVbmluaXRpYWxpemVkUmVjb3JkXG4+IGV4dGVuZHMgQmFzZVJlY29yZE9wZXJhdGlvblRlcm08UmVtb3ZlUmVjb3JkT3BlcmF0aW9uLCBSVCwgUkksIFI+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgdHJhbnNmb3JtQnVpbGRlcjogUmVjb3JkVHJhbnNmb3JtQnVpbGRlcjxSVCwgUkksIFI+LFxuICAgIHJlY29yZDogUmVjb3JkSWRlbnRpdHlcbiAgKSB7XG4gICAgc3VwZXIodHJhbnNmb3JtQnVpbGRlciwge1xuICAgICAgb3A6ICdyZW1vdmVSZWNvcmQnLFxuICAgICAgcmVjb3JkXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlcGxhY2VBdHRyaWJ1dGVUZXJtPFxuICBSVCA9IHN0cmluZyxcbiAgUkkgPSBSZWNvcmRJZGVudGl0eSxcbiAgUiA9IFVuaW5pdGlhbGl6ZWRSZWNvcmRcbj4gZXh0ZW5kcyBCYXNlUmVjb3JkT3BlcmF0aW9uVGVybTxSZXBsYWNlQXR0cmlidXRlT3BlcmF0aW9uLCBSVCwgUkksIFI+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgdHJhbnNmb3JtQnVpbGRlcjogUmVjb3JkVHJhbnNmb3JtQnVpbGRlcjxSVCwgUkksIFI+LFxuICAgIHJlY29yZDogUmVjb3JkSWRlbnRpdHksXG4gICAgYXR0cmlidXRlOiBzdHJpbmcsXG4gICAgdmFsdWU6IHVua25vd25cbiAgKSB7XG4gICAgc3VwZXIodHJhbnNmb3JtQnVpbGRlciwge1xuICAgICAgb3A6ICdyZXBsYWNlQXR0cmlidXRlJyxcbiAgICAgIHJlY29yZCxcbiAgICAgIGF0dHJpYnV0ZSxcbiAgICAgIHZhbHVlXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlcGxhY2VLZXlUZXJtPFxuICBSVCA9IHN0cmluZyxcbiAgUkkgPSBSZWNvcmRJZGVudGl0eSxcbiAgUiA9IFVuaW5pdGlhbGl6ZWRSZWNvcmRcbj4gZXh0ZW5kcyBCYXNlUmVjb3JkT3BlcmF0aW9uVGVybTxSZXBsYWNlS2V5T3BlcmF0aW9uLCBSVCwgUkksIFI+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgdHJhbnNmb3JtQnVpbGRlcjogUmVjb3JkVHJhbnNmb3JtQnVpbGRlcjxSVCwgUkksIFI+LFxuICAgIHJlY29yZDogUmVjb3JkSWRlbnRpdHksXG4gICAga2V5OiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcih0cmFuc2Zvcm1CdWlsZGVyLCB7XG4gICAgICBvcDogJ3JlcGxhY2VLZXknLFxuICAgICAgcmVjb3JkLFxuICAgICAga2V5LFxuICAgICAgdmFsdWVcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWRkVG9SZWxhdGVkUmVjb3Jkc1Rlcm08XG4gIFJUID0gc3RyaW5nLFxuICBSSSA9IFJlY29yZElkZW50aXR5LFxuICBSID0gVW5pbml0aWFsaXplZFJlY29yZFxuPiBleHRlbmRzIEJhc2VSZWNvcmRPcGVyYXRpb25UZXJtPEFkZFRvUmVsYXRlZFJlY29yZHNPcGVyYXRpb24sIFJULCBSSSwgUj4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICB0cmFuc2Zvcm1CdWlsZGVyOiBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyPFJULCBSSSwgUj4sXG4gICAgcmVjb3JkOiBSZWNvcmRJZGVudGl0eSxcbiAgICByZWxhdGlvbnNoaXA6IHN0cmluZyxcbiAgICByZWxhdGVkUmVjb3JkOiBSZWNvcmRJZGVudGl0eVxuICApIHtcbiAgICBzdXBlcih0cmFuc2Zvcm1CdWlsZGVyLCB7XG4gICAgICBvcDogJ2FkZFRvUmVsYXRlZFJlY29yZHMnLFxuICAgICAgcmVjb3JkLFxuICAgICAgcmVsYXRpb25zaGlwLFxuICAgICAgcmVsYXRlZFJlY29yZFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZW1vdmVGcm9tUmVsYXRlZFJlY29yZHNUZXJtPFxuICBSVCA9IHN0cmluZyxcbiAgUkkgPSBSZWNvcmRJZGVudGl0eSxcbiAgUiA9IFVuaW5pdGlhbGl6ZWRSZWNvcmRcbj4gZXh0ZW5kcyBCYXNlUmVjb3JkT3BlcmF0aW9uVGVybTxcbiAgUmVtb3ZlRnJvbVJlbGF0ZWRSZWNvcmRzT3BlcmF0aW9uLFxuICBSVCxcbiAgUkksXG4gIFJcbj4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICB0cmFuc2Zvcm1CdWlsZGVyOiBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyPFJULCBSSSwgUj4sXG4gICAgcmVjb3JkOiBSZWNvcmRJZGVudGl0eSxcbiAgICByZWxhdGlvbnNoaXA6IHN0cmluZyxcbiAgICByZWxhdGVkUmVjb3JkOiBSZWNvcmRJZGVudGl0eVxuICApIHtcbiAgICBzdXBlcih0cmFuc2Zvcm1CdWlsZGVyLCB7XG4gICAgICBvcDogJ3JlbW92ZUZyb21SZWxhdGVkUmVjb3JkcycsXG4gICAgICByZWNvcmQsXG4gICAgICByZWxhdGlvbnNoaXAsXG4gICAgICByZWxhdGVkUmVjb3JkXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlcGxhY2VSZWxhdGVkUmVjb3Jkc1Rlcm08XG4gIFJUID0gc3RyaW5nLFxuICBSSSA9IFJlY29yZElkZW50aXR5LFxuICBSID0gVW5pbml0aWFsaXplZFJlY29yZFxuPiBleHRlbmRzIEJhc2VSZWNvcmRPcGVyYXRpb25UZXJtPFJlcGxhY2VSZWxhdGVkUmVjb3Jkc09wZXJhdGlvbiwgUlQsIFJJLCBSPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHRyYW5zZm9ybUJ1aWxkZXI6IFJlY29yZFRyYW5zZm9ybUJ1aWxkZXI8UlQsIFJJLCBSPixcbiAgICByZWNvcmQ6IFJlY29yZElkZW50aXR5LFxuICAgIHJlbGF0aW9uc2hpcDogc3RyaW5nLFxuICAgIHJlbGF0ZWRSZWNvcmRzOiBSZWNvcmRJZGVudGl0eVtdXG4gICkge1xuICAgIHN1cGVyKHRyYW5zZm9ybUJ1aWxkZXIsIHtcbiAgICAgIG9wOiAncmVwbGFjZVJlbGF0ZWRSZWNvcmRzJyxcbiAgICAgIHJlY29yZCxcbiAgICAgIHJlbGF0aW9uc2hpcCxcbiAgICAgIHJlbGF0ZWRSZWNvcmRzXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlcGxhY2VSZWxhdGVkUmVjb3JkVGVybTxcbiAgUlQgPSBzdHJpbmcsXG4gIFJJID0gUmVjb3JkSWRlbnRpdHksXG4gIFIgPSBVbmluaXRpYWxpemVkUmVjb3JkXG4+IGV4dGVuZHMgQmFzZVJlY29yZE9wZXJhdGlvblRlcm08UmVwbGFjZVJlbGF0ZWRSZWNvcmRPcGVyYXRpb24sIFJULCBSSSwgUj4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICB0cmFuc2Zvcm1CdWlsZGVyOiBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyPFJULCBSSSwgUj4sXG4gICAgcmVjb3JkOiBSZWNvcmRJZGVudGl0eSxcbiAgICByZWxhdGlvbnNoaXA6IHN0cmluZyxcbiAgICByZWxhdGVkUmVjb3JkOiBSZWNvcmRJZGVudGl0eSB8IG51bGxcbiAgKSB7XG4gICAgc3VwZXIodHJhbnNmb3JtQnVpbGRlciwge1xuICAgICAgb3A6ICdyZXBsYWNlUmVsYXRlZFJlY29yZCcsXG4gICAgICByZWNvcmQsXG4gICAgICByZWxhdGlvbnNoaXAsXG4gICAgICByZWxhdGVkUmVjb3JkXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgUmVjb3JkT3BlcmF0aW9uVGVybTxcbiAgUlQgPSBzdHJpbmcsXG4gIFJJID0gUmVjb3JkSWRlbnRpdHksXG4gIFIgPSBVbmluaXRpYWxpemVkUmVjb3JkXG4+ID1cbiAgfCBBZGRSZWNvcmRUZXJtPFJULCBSSSwgUj5cbiAgfCBVcGRhdGVSZWNvcmRUZXJtPFJULCBSSSwgUj5cbiAgfCBSZW1vdmVSZWNvcmRUZXJtPFJULCBSSSwgUj5cbiAgfCBSZXBsYWNlS2V5VGVybTxSVCwgUkksIFI+XG4gIHwgUmVwbGFjZUF0dHJpYnV0ZVRlcm08UlQsIFJJLCBSPlxuICB8IEFkZFRvUmVsYXRlZFJlY29yZHNUZXJtPFJULCBSSSwgUj5cbiAgfCBSZW1vdmVGcm9tUmVsYXRlZFJlY29yZHNUZXJtPFJULCBSSSwgUj5cbiAgfCBSZXBsYWNlUmVsYXRlZFJlY29yZHNUZXJtPFJULCBSSSwgUj5cbiAgfCBSZXBsYWNlUmVsYXRlZFJlY29yZFRlcm08UlQsIFJJLCBSPjtcbiJdfQ==