@orbit/record-cache
Version:
Orbit base classes used to access and maintain a set of records.
30 lines • 7.58 kB
JavaScript
import { AsyncOperationProcessor } from '../async-operation-processor';
import { recordAdded, relatedRecordAdded, relatedRecordRemoved, relatedRecordReplaced, relatedRecordsReplaced, recordRemoved, recordUpdated } from './utils/schema-consistency-utils';
/**
* An operation processor that ensures that a cache's data is consistent with
* its associated schema. This includes maintenance of inverse and dependent
* relationships.
*/
export class AsyncSchemaConsistencyProcessor extends AsyncOperationProcessor {
async after(operation) {
switch (operation.op) {
case 'addRecord':
return recordAdded(this.accessor.schema, operation.record);
case 'addToRelatedRecords':
return relatedRecordAdded(this.accessor.schema, operation.record, operation.relationship, operation.relatedRecord);
case 'replaceRelatedRecord':
return relatedRecordReplaced(this.accessor.schema, operation.record, operation.relationship, operation.relatedRecord, await this.accessor.getRelatedRecordAsync(operation.record, operation.relationship));
case 'replaceRelatedRecords':
return relatedRecordsReplaced(this.accessor.schema, operation.record, operation.relationship, operation.relatedRecords, await this.accessor.getRelatedRecordsAsync(operation.record, operation.relationship));
case 'removeFromRelatedRecords':
return relatedRecordRemoved(this.accessor.schema, operation.record, operation.relationship, operation.relatedRecord, await this.accessor.getRecordAsync(operation.relatedRecord));
case 'removeRecord':
return recordRemoved(this.accessor.schema, await this.accessor.getRecordAsync(operation.record));
case 'updateRecord':
return recordUpdated(this.accessor.schema, operation.record, await this.accessor.getRecordAsync(operation.record));
default:
return [];
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtc2NoZW1hLWNvbnNpc3RlbmN5LXByb2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vcGVyYXRpb24tcHJvY2Vzc29ycy9hc3luYy1zY2hlbWEtY29uc2lzdGVuY3ktcHJvY2Vzc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZFLE9BQU8sRUFDTCxXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLGFBQWEsRUFDYixhQUFhLEVBQ2QsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxQzs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLCtCQUFnQyxTQUFRLHVCQUF1QjtJQUMxRSxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQTBCO1FBQ3BDLFFBQVEsU0FBUyxDQUFDLEVBQUUsRUFBRTtZQUNwQixLQUFLLFdBQVc7Z0JBQ2QsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRTdELEtBQUsscUJBQXFCO2dCQUN4QixPQUFPLGtCQUFrQixDQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFDcEIsU0FBUyxDQUFDLE1BQU0sRUFDaEIsU0FBUyxDQUFDLFlBQVksRUFDdEIsU0FBUyxDQUFDLGFBQWEsQ0FDeEIsQ0FBQztZQUVKLEtBQUssc0JBQXNCO2dCQUN6QixPQUFPLHFCQUFxQixDQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFDcEIsU0FBUyxDQUFDLE1BQU0sRUFDaEIsU0FBUyxDQUFDLFlBQVksRUFDdEIsU0FBUyxDQUFDLGFBQWEsRUFDdkIsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUN2QyxTQUFTLENBQUMsTUFBTSxFQUNoQixTQUFTLENBQUMsWUFBWSxDQUN2QixDQUNGLENBQUM7WUFFSixLQUFLLHVCQUF1QjtnQkFDMUIsT0FBTyxzQkFBc0IsQ0FDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQ3BCLFNBQVMsQ0FBQyxNQUFNLEVBQ2hCLFNBQVMsQ0FBQyxZQUFZLEVBQ3RCLFNBQVMsQ0FBQyxjQUFjLEVBQ3hCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FDeEMsU0FBUyxDQUFDLE1BQU0sRUFDaEIsU0FBUyxDQUFDLFlBQVksQ0FDdkIsQ0FDRixDQUFDO1lBRUosS0FBSywwQkFBMEI7Z0JBQzdCLE9BQU8sb0JBQW9CLENBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUNwQixTQUFTLENBQUMsTUFBTSxFQUNoQixTQUFTLENBQUMsWUFBWSxFQUN0QixTQUFTLENBQUMsYUFBYSxFQUN2QixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FDNUQsQ0FBQztZQUVKLEtBQUssY0FBYztnQkFDakIsT0FBTyxhQUFhLENBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUNwQixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FDckQsQ0FBQztZQUVKLEtBQUssY0FBYztnQkFDakIsT0FBTyxhQUFhLENBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUNwQixTQUFTLENBQUMsTUFBTSxFQUNoQixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FDckQsQ0FBQztZQUVKO2dCQUNFLE9BQU8sRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWNvcmRPcGVyYXRpb24gfSBmcm9tICdAb3JiaXQvcmVjb3Jkcyc7XG5pbXBvcnQgeyBBc3luY09wZXJhdGlvblByb2Nlc3NvciB9IGZyb20gJy4uL2FzeW5jLW9wZXJhdGlvbi1wcm9jZXNzb3InO1xuaW1wb3J0IHtcbiAgcmVjb3JkQWRkZWQsXG4gIHJlbGF0ZWRSZWNvcmRBZGRlZCxcbiAgcmVsYXRlZFJlY29yZFJlbW92ZWQsXG4gIHJlbGF0ZWRSZWNvcmRSZXBsYWNlZCxcbiAgcmVsYXRlZFJlY29yZHNSZXBsYWNlZCxcbiAgcmVjb3JkUmVtb3ZlZCxcbiAgcmVjb3JkVXBkYXRlZFxufSBmcm9tICcuL3V0aWxzL3NjaGVtYS1jb25zaXN0ZW5jeS11dGlscyc7XG5cbi8qKlxuICogQW4gb3BlcmF0aW9uIHByb2Nlc3NvciB0aGF0IGVuc3VyZXMgdGhhdCBhIGNhY2hlJ3MgZGF0YSBpcyBjb25zaXN0ZW50IHdpdGhcbiAqIGl0cyBhc3NvY2lhdGVkIHNjaGVtYS4gVGhpcyBpbmNsdWRlcyBtYWludGVuYW5jZSBvZiBpbnZlcnNlIGFuZCBkZXBlbmRlbnRcbiAqIHJlbGF0aW9uc2hpcHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBBc3luY1NjaGVtYUNvbnNpc3RlbmN5UHJvY2Vzc29yIGV4dGVuZHMgQXN5bmNPcGVyYXRpb25Qcm9jZXNzb3Ige1xuICBhc3luYyBhZnRlcihvcGVyYXRpb246IFJlY29yZE9wZXJhdGlvbik6IFByb21pc2U8UmVjb3JkT3BlcmF0aW9uW10+IHtcbiAgICBzd2l0Y2ggKG9wZXJhdGlvbi5vcCkge1xuICAgICAgY2FzZSAnYWRkUmVjb3JkJzpcbiAgICAgICAgcmV0dXJuIHJlY29yZEFkZGVkKHRoaXMuYWNjZXNzb3Iuc2NoZW1hLCBvcGVyYXRpb24ucmVjb3JkKTtcblxuICAgICAgY2FzZSAnYWRkVG9SZWxhdGVkUmVjb3Jkcyc6XG4gICAgICAgIHJldHVybiByZWxhdGVkUmVjb3JkQWRkZWQoXG4gICAgICAgICAgdGhpcy5hY2Nlc3Nvci5zY2hlbWEsXG4gICAgICAgICAgb3BlcmF0aW9uLnJlY29yZCxcbiAgICAgICAgICBvcGVyYXRpb24ucmVsYXRpb25zaGlwLFxuICAgICAgICAgIG9wZXJhdGlvbi5yZWxhdGVkUmVjb3JkXG4gICAgICAgICk7XG5cbiAgICAgIGNhc2UgJ3JlcGxhY2VSZWxhdGVkUmVjb3JkJzpcbiAgICAgICAgcmV0dXJuIHJlbGF0ZWRSZWNvcmRSZXBsYWNlZChcbiAgICAgICAgICB0aGlzLmFjY2Vzc29yLnNjaGVtYSxcbiAgICAgICAgICBvcGVyYXRpb24ucmVjb3JkLFxuICAgICAgICAgIG9wZXJhdGlvbi5yZWxhdGlvbnNoaXAsXG4gICAgICAgICAgb3BlcmF0aW9uLnJlbGF0ZWRSZWNvcmQsXG4gICAgICAgICAgYXdhaXQgdGhpcy5hY2Nlc3Nvci5nZXRSZWxhdGVkUmVjb3JkQXN5bmMoXG4gICAgICAgICAgICBvcGVyYXRpb24ucmVjb3JkLFxuICAgICAgICAgICAgb3BlcmF0aW9uLnJlbGF0aW9uc2hpcFxuICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgY2FzZSAncmVwbGFjZVJlbGF0ZWRSZWNvcmRzJzpcbiAgICAgICAgcmV0dXJuIHJlbGF0ZWRSZWNvcmRzUmVwbGFjZWQoXG4gICAgICAgICAgdGhpcy5hY2Nlc3Nvci5zY2hlbWEsXG4gICAgICAgICAgb3BlcmF0aW9uLnJlY29yZCxcbiAgICAgICAgICBvcGVyYXRpb24ucmVsYXRpb25zaGlwLFxuICAgICAgICAgIG9wZXJhdGlvbi5yZWxhdGVkUmVjb3JkcyxcbiAgICAgICAgICBhd2FpdCB0aGlzLmFjY2Vzc29yLmdldFJlbGF0ZWRSZWNvcmRzQXN5bmMoXG4gICAgICAgICAgICBvcGVyYXRpb24ucmVjb3JkLFxuICAgICAgICAgICAgb3BlcmF0aW9uLnJlbGF0aW9uc2hpcFxuICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgY2FzZSAncmVtb3ZlRnJvbVJlbGF0ZWRSZWNvcmRzJzpcbiAgICAgICAgcmV0dXJuIHJlbGF0ZWRSZWNvcmRSZW1vdmVkKFxuICAgICAgICAgIHRoaXMuYWNjZXNzb3Iuc2NoZW1hLFxuICAgICAgICAgIG9wZXJhdGlvbi5yZWNvcmQsXG4gICAgICAgICAgb3BlcmF0aW9uLnJlbGF0aW9uc2hpcCxcbiAgICAgICAgICBvcGVyYXRpb24ucmVsYXRlZFJlY29yZCxcbiAgICAgICAgICBhd2FpdCB0aGlzLmFjY2Vzc29yLmdldFJlY29yZEFzeW5jKG9wZXJhdGlvbi5yZWxhdGVkUmVjb3JkKVxuICAgICAgICApO1xuXG4gICAgICBjYXNlICdyZW1vdmVSZWNvcmQnOlxuICAgICAgICByZXR1cm4gcmVjb3JkUmVtb3ZlZChcbiAgICAgICAgICB0aGlzLmFjY2Vzc29yLnNjaGVtYSxcbiAgICAgICAgICBhd2FpdCB0aGlzLmFjY2Vzc29yLmdldFJlY29yZEFzeW5jKG9wZXJhdGlvbi5yZWNvcmQpXG4gICAgICAgICk7XG5cbiAgICAgIGNhc2UgJ3VwZGF0ZVJlY29yZCc6XG4gICAgICAgIHJldHVybiByZWNvcmRVcGRhdGVkKFxuICAgICAgICAgIHRoaXMuYWNjZXNzb3Iuc2NoZW1hLFxuICAgICAgICAgIG9wZXJhdGlvbi5yZWNvcmQsXG4gICAgICAgICAgYXdhaXQgdGhpcy5hY2Nlc3Nvci5nZXRSZWNvcmRBc3luYyhvcGVyYXRpb24ucmVjb3JkKVxuICAgICAgICApO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG59XG4iXX0=