@orbit/record-cache
Version:
Orbit base classes used to access and maintain a set of records.
27 lines • 4.37 kB
JavaScript
import { Assertion } from '@orbit/core';
import { validateRecordOperation, ValidationError } from '@orbit/records';
import { SyncOperationProcessor } from '../sync-operation-processor';
/**
* An operation processor that ensures that an operation is compatible with
* its associated schema.
*/
export class SyncSchemaValidationProcessor extends SyncOperationProcessor {
constructor(accessor) {
super(accessor);
const cache = this.accessor;
const { schema, validatorFor } = cache;
if (validatorFor === undefined || schema === undefined) {
throw new Assertion('SyncSchemaValidationProcessor requires a RecordCache with both a `validationFor` and a `schema`.');
}
this.schema = schema;
this.validatorFor = validatorFor;
}
validate(operation) {
const { schema, validatorFor } = this;
const issues = validateRecordOperation(operation, { schema, validatorFor });
if (issues) {
throw new ValidationError('Validation failed', issues);
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1zY2hlbWEtdmFsaWRhdGlvbi1wcm9jZXNzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb3BlcmF0aW9uLXByb2Nlc3NvcnMvc3luYy1zY2hlbWEtdmFsaWRhdGlvbi1wcm9jZXNzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBSUwsdUJBQXVCLEVBQ3ZCLGVBQWUsRUFDaEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sNkJBQThCLFNBQVEsc0JBQXNCO0lBSXZFLFlBQVksUUFBNEI7UUFDdEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWhCLE1BQU0sS0FBSyxHQUFJLElBQUksQ0FBQyxRQUFtQyxDQUFDO1FBQ3hELE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ3ZDLElBQUksWUFBWSxLQUFLLFNBQVMsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQ3RELE1BQU0sSUFBSSxTQUFTLENBQ2pCLGtHQUFrRyxDQUNuRyxDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRUQsUUFBUSxDQUFDLFNBQTBCO1FBQ2pDLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLElBQUksTUFBTSxFQUFFO1lBQ1YsTUFBTSxJQUFJLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN4RDtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzc2VydGlvbiB9IGZyb20gJ0BvcmJpdC9jb3JlJztcbmltcG9ydCB7XG4gIFJlY29yZE9wZXJhdGlvbixcbiAgUmVjb3JkU2NoZW1hLFxuICBTdGFuZGFyZFJlY29yZFZhbGlkYXRvcixcbiAgdmFsaWRhdGVSZWNvcmRPcGVyYXRpb24sXG4gIFZhbGlkYXRpb25FcnJvclxufSBmcm9tICdAb3JiaXQvcmVjb3Jkcyc7XG5pbXBvcnQgeyBTdGFuZGFyZFZhbGlkYXRvciwgVmFsaWRhdG9yRm9yRm4gfSBmcm9tICdAb3JiaXQvdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBTeW5jUmVjb3JkQWNjZXNzb3IgfSBmcm9tICcuLi9yZWNvcmQtYWNjZXNzb3InO1xuaW1wb3J0IHsgUmVjb3JkQ2FjaGUgfSBmcm9tICcuLi9yZWNvcmQtY2FjaGUnO1xuaW1wb3J0IHsgU3luY09wZXJhdGlvblByb2Nlc3NvciB9IGZyb20gJy4uL3N5bmMtb3BlcmF0aW9uLXByb2Nlc3Nvcic7XG5cbi8qKlxuICogQW4gb3BlcmF0aW9uIHByb2Nlc3NvciB0aGF0IGVuc3VyZXMgdGhhdCBhbiBvcGVyYXRpb24gaXMgY29tcGF0aWJsZSB3aXRoXG4gKiBpdHMgYXNzb2NpYXRlZCBzY2hlbWEuXG4gKi9cbmV4cG9ydCBjbGFzcyBTeW5jU2NoZW1hVmFsaWRhdGlvblByb2Nlc3NvciBleHRlbmRzIFN5bmNPcGVyYXRpb25Qcm9jZXNzb3Ige1xuICBzY2hlbWE6IFJlY29yZFNjaGVtYTtcbiAgdmFsaWRhdG9yRm9yOiBWYWxpZGF0b3JGb3JGbjxTdGFuZGFyZFZhbGlkYXRvciB8IFN0YW5kYXJkUmVjb3JkVmFsaWRhdG9yPjtcblxuICBjb25zdHJ1Y3RvcihhY2Nlc3NvcjogU3luY1JlY29yZEFjY2Vzc29yKSB7XG4gICAgc3VwZXIoYWNjZXNzb3IpO1xuXG4gICAgY29uc3QgY2FjaGUgPSAodGhpcy5hY2Nlc3NvciBhcyB1bmtub3duKSBhcyBSZWNvcmRDYWNoZTtcbiAgICBjb25zdCB7IHNjaGVtYSwgdmFsaWRhdG9yRm9yIH0gPSBjYWNoZTtcbiAgICBpZiAodmFsaWRhdG9yRm9yID09PSB1bmRlZmluZWQgfHwgc2NoZW1hID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb24oXG4gICAgICAgICdTeW5jU2NoZW1hVmFsaWRhdGlvblByb2Nlc3NvciByZXF1aXJlcyBhIFJlY29yZENhY2hlIHdpdGggYm90aCBhIGB2YWxpZGF0aW9uRm9yYCBhbmQgYSBgc2NoZW1hYC4nXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuc2NoZW1hID0gc2NoZW1hO1xuICAgIHRoaXMudmFsaWRhdG9yRm9yID0gdmFsaWRhdG9yRm9yO1xuICB9XG5cbiAgdmFsaWRhdGUob3BlcmF0aW9uOiBSZWNvcmRPcGVyYXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCB7IHNjaGVtYSwgdmFsaWRhdG9yRm9yIH0gPSB0aGlzO1xuICAgIGNvbnN0IGlzc3VlcyA9IHZhbGlkYXRlUmVjb3JkT3BlcmF0aW9uKG9wZXJhdGlvbiwgeyBzY2hlbWEsIHZhbGlkYXRvckZvciB9KTtcbiAgICBpZiAoaXNzdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdWYWxpZGF0aW9uIGZhaWxlZCcsIGlzc3Vlcyk7XG4gICAgfVxuICB9XG59XG4iXX0=