UNPKG

@orbit/record-cache

Version:

Orbit base classes used to access and maintain a set of records.

27 lines 4.42 kB
import { Assertion } from '@orbit/core'; import { validateRecordOperation, ValidationError } from '@orbit/records'; import { AsyncOperationProcessor } from '../async-operation-processor'; /** * An operation processor that ensures that an operation is compatible with * its associated schema. */ export class AsyncSchemaValidationProcessor extends AsyncOperationProcessor { 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; } async 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtc2NoZW1hLXZhbGlkYXRpb24tcHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29wZXJhdGlvbi1wcm9jZXNzb3JzL2FzeW5jLXNjaGVtYS12YWxpZGF0aW9uLXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFJTCx1QkFBdUIsRUFDdkIsZUFBZSxFQUNoQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSXZFOzs7R0FHRztBQUNILE1BQU0sT0FBTyw4QkFBK0IsU0FBUSx1QkFBdUI7SUFJekUsWUFBWSxRQUE2QjtRQUN2QyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEIsTUFBTSxLQUFLLEdBQUksSUFBSSxDQUFDLFFBQW1DLENBQUM7UUFDeEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDdkMsSUFBSSxZQUFZLEtBQUssU0FBUyxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDdEQsTUFBTSxJQUFJLFNBQVMsQ0FDakIsa0dBQWtHLENBQ25HLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQTBCO1FBQ3ZDLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLElBQUksTUFBTSxFQUFFO1lBQ1YsTUFBTSxJQUFJLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN4RDtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzc2VydGlvbiB9IGZyb20gJ0BvcmJpdC9jb3JlJztcbmltcG9ydCB7XG4gIFJlY29yZE9wZXJhdGlvbixcbiAgUmVjb3JkU2NoZW1hLFxuICBTdGFuZGFyZFJlY29yZFZhbGlkYXRvcixcbiAgdmFsaWRhdGVSZWNvcmRPcGVyYXRpb24sXG4gIFZhbGlkYXRpb25FcnJvclxufSBmcm9tICdAb3JiaXQvcmVjb3Jkcyc7XG5pbXBvcnQgeyBTdGFuZGFyZFZhbGlkYXRvciwgVmFsaWRhdG9yRm9yRm4gfSBmcm9tICdAb3JiaXQvdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBBc3luY09wZXJhdGlvblByb2Nlc3NvciB9IGZyb20gJy4uL2FzeW5jLW9wZXJhdGlvbi1wcm9jZXNzb3InO1xuaW1wb3J0IHsgQXN5bmNSZWNvcmRBY2Nlc3NvciB9IGZyb20gJy4uL3JlY29yZC1hY2Nlc3Nvcic7XG5pbXBvcnQgeyBSZWNvcmRDYWNoZSB9IGZyb20gJy4uL3JlY29yZC1jYWNoZSc7XG5cbi8qKlxuICogQW4gb3BlcmF0aW9uIHByb2Nlc3NvciB0aGF0IGVuc3VyZXMgdGhhdCBhbiBvcGVyYXRpb24gaXMgY29tcGF0aWJsZSB3aXRoXG4gKiBpdHMgYXNzb2NpYXRlZCBzY2hlbWEuXG4gKi9cbmV4cG9ydCBjbGFzcyBBc3luY1NjaGVtYVZhbGlkYXRpb25Qcm9jZXNzb3IgZXh0ZW5kcyBBc3luY09wZXJhdGlvblByb2Nlc3NvciB7XG4gIHNjaGVtYTogUmVjb3JkU2NoZW1hO1xuICB2YWxpZGF0b3JGb3I6IFZhbGlkYXRvckZvckZuPFN0YW5kYXJkVmFsaWRhdG9yIHwgU3RhbmRhcmRSZWNvcmRWYWxpZGF0b3I+O1xuXG4gIGNvbnN0cnVjdG9yKGFjY2Vzc29yOiBBc3luY1JlY29yZEFjY2Vzc29yKSB7XG4gICAgc3VwZXIoYWNjZXNzb3IpO1xuXG4gICAgY29uc3QgY2FjaGUgPSAodGhpcy5hY2Nlc3NvciBhcyB1bmtub3duKSBhcyBSZWNvcmRDYWNoZTtcbiAgICBjb25zdCB7IHNjaGVtYSwgdmFsaWRhdG9yRm9yIH0gPSBjYWNoZTtcbiAgICBpZiAodmFsaWRhdG9yRm9yID09PSB1bmRlZmluZWQgfHwgc2NoZW1hID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb24oXG4gICAgICAgICdTeW5jU2NoZW1hVmFsaWRhdGlvblByb2Nlc3NvciByZXF1aXJlcyBhIFJlY29yZENhY2hlIHdpdGggYm90aCBhIGB2YWxpZGF0aW9uRm9yYCBhbmQgYSBgc2NoZW1hYC4nXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuc2NoZW1hID0gc2NoZW1hO1xuICAgIHRoaXMudmFsaWRhdG9yRm9yID0gdmFsaWRhdG9yRm9yO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGUob3BlcmF0aW9uOiBSZWNvcmRPcGVyYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHNjaGVtYSwgdmFsaWRhdG9yRm9yIH0gPSB0aGlzO1xuICAgIGNvbnN0IGlzc3VlcyA9IHZhbGlkYXRlUmVjb3JkT3BlcmF0aW9uKG9wZXJhdGlvbiwgeyBzY2hlbWEsIHZhbGlkYXRvckZvciB9KTtcbiAgICBpZiAoaXNzdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdWYWxpZGF0aW9uIGZhaWxlZCcsIGlzc3Vlcyk7XG4gICAgfVxuICB9XG59XG4iXX0=