@orbit/records
Version:
A flexible data access and synchronization layer.
71 lines • 9.57 kB
JavaScript
import { Orbit } from '@orbit/core';
import { FindRecordsTerm, FindRecordTerm, FindRelatedRecordTerm } from './record-query-term';
const { assert } = Orbit;
export class RecordQueryBuilder {
constructor(settings = {}) {
const { schema, normalizer, validatorFor } = settings;
if (validatorFor) {
assert('A RecordQueryBuilder that has been assigned a `validatorFor` requires a `schema`', schema !== undefined);
}
this.$schema = schema;
this.$normalizer = normalizer;
this.$validatorFor = validatorFor;
}
/**
* Find a record by its identity.
*/
findRecord(record) {
return new FindRecordTerm(this, this.$normalizeRecordIdentity(record));
}
/**
* Find all records of a specific type.
*
* If `type` is unspecified, find all records unfiltered by type.
*/
findRecords(typeOrIdentities) {
const expression = {
op: 'findRecords'
};
if (Array.isArray(typeOrIdentities)) {
expression.records = typeOrIdentities.map((ri) => this.$normalizeRecordIdentity(ri));
}
else if (typeOrIdentities !== undefined) {
expression.type = this.$normalizeRecordType(typeOrIdentities);
}
return new FindRecordsTerm(this, expression);
}
/**
* Find a record in a to-one relationship.
*/
findRelatedRecord(record, relationship) {
return new FindRelatedRecordTerm(this, this.$normalizeRecordIdentity(record), relationship);
}
/**
* Find records in a to-many relationship.
*/
findRelatedRecords(record, relationship) {
const expression = {
op: 'findRelatedRecords',
record: this.$normalizeRecordIdentity(record),
relationship
};
return new FindRecordsTerm(this, expression);
}
$normalizeRecordType(rt) {
if (this.$normalizer !== undefined) {
return this.$normalizer.normalizeRecordType(rt);
}
else {
return rt;
}
}
$normalizeRecordIdentity(ri) {
if (this.$normalizer !== undefined) {
return this.$normalizer.normalizeRecordIdentity(ri);
}
else {
return ri;
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLXF1ZXJ5LWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVjb3JkLXF1ZXJ5LWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQVVwQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGNBQWMsRUFDZCxxQkFBcUIsRUFDdEIsTUFBTSxxQkFBcUIsQ0FBQztBQUk3QixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBYXpCLE1BQU0sT0FBTyxrQkFBa0I7SUFLN0IsWUFBWSxXQUErQyxFQUFFO1FBQzNELE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxHQUFHLFFBQVEsQ0FBQztRQUV0RCxJQUFJLFlBQVksRUFBRTtZQUNoQixNQUFNLENBQ0osa0ZBQWtGLEVBQ2xGLE1BQU0sS0FBSyxTQUFTLENBQ3JCLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsQ0FBQyxNQUFVO1FBQ25CLE9BQU8sSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLGdCQUE0QjtRQUN0QyxNQUFNLFVBQVUsR0FBZ0I7WUFDOUIsRUFBRSxFQUFFLGFBQWE7U0FDbEIsQ0FBQztRQUVGLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ25DLFVBQVUsQ0FBQyxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FDL0MsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUNsQyxDQUFDO1NBQ0g7YUFBTSxJQUFJLGdCQUFnQixLQUFLLFNBQVMsRUFBRTtZQUN6QyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQy9EO1FBRUQsT0FBTyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCLENBQ2YsTUFBVSxFQUNWLFlBQW9CO1FBRXBCLE9BQU8sSUFBSSxxQkFBcUIsQ0FDOUIsSUFBSSxFQUNKLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsRUFDckMsWUFBWSxDQUNiLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxrQkFBa0IsQ0FDaEIsTUFBVSxFQUNWLFlBQW9CO1FBRXBCLE1BQU0sVUFBVSxHQUF1QjtZQUNyQyxFQUFFLEVBQUUsb0JBQW9CO1lBQ3hCLE1BQU0sRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDO1lBQzdDLFlBQVk7U0FDYixDQUFDO1FBRUYsT0FBTyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELG9CQUFvQixDQUFDLEVBQU07UUFDekIsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFNBQVMsRUFBRTtZQUNsQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDakQ7YUFBTTtZQUNMLE9BQVEsRUFBd0IsQ0FBQztTQUNsQztJQUNILENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxFQUFNO1FBQzdCLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUU7WUFDbEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3JEO2FBQU07WUFDTCxPQUFRLEVBQWdDLENBQUM7U0FDMUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcmJpdCB9IGZyb20gJ0BvcmJpdC9jb3JlJztcbmltcG9ydCB7IFF1ZXJ5QnVpbGRlckZ1bmMgfSBmcm9tICdAb3JiaXQvZGF0YSc7XG5pbXBvcnQgeyBTdGFuZGFyZFZhbGlkYXRvciwgVmFsaWRhdG9yRm9yRm4gfSBmcm9tICdAb3JiaXQvdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBSZWNvcmRJZGVudGl0eSB9IGZyb20gJy4vcmVjb3JkJztcbmltcG9ydCB7IFJlY29yZE5vcm1hbGl6ZXIgfSBmcm9tICcuL3JlY29yZC1ub3JtYWxpemVyJztcbmltcG9ydCB7XG4gIEZpbmRSZWNvcmRzLFxuICBGaW5kUmVsYXRlZFJlY29yZHMsXG4gIFJlY29yZFF1ZXJ5RXhwcmVzc2lvblxufSBmcm9tICcuL3JlY29yZC1xdWVyeS1leHByZXNzaW9uJztcbmltcG9ydCB7XG4gIEZpbmRSZWNvcmRzVGVybSxcbiAgRmluZFJlY29yZFRlcm0sXG4gIEZpbmRSZWxhdGVkUmVjb3JkVGVybVxufSBmcm9tICcuL3JlY29yZC1xdWVyeS10ZXJtJztcbmltcG9ydCB7IFJlY29yZFNjaGVtYSB9IGZyb20gJy4vcmVjb3JkLXNjaGVtYSc7XG5pbXBvcnQgeyBTdGFuZGFyZFJlY29yZFZhbGlkYXRvciB9IGZyb20gJy4vcmVjb3JkLXZhbGlkYXRvcnMvc3RhbmRhcmQtcmVjb3JkLXZhbGlkYXRvcnMnO1xuXG5jb25zdCB7IGFzc2VydCB9ID0gT3JiaXQ7XG5cbmV4cG9ydCB0eXBlIFJlY29yZFF1ZXJ5QnVpbGRlckZ1bmMgPSBRdWVyeUJ1aWxkZXJGdW5jPFxuICBSZWNvcmRRdWVyeUV4cHJlc3Npb24sXG4gIFJlY29yZFF1ZXJ5QnVpbGRlclxuPjtcblxuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRRdWVyeUJ1aWxkZXJTZXR0aW5nczxSVCA9IHN0cmluZywgUkkgPSBSZWNvcmRJZGVudGl0eT4ge1xuICBzY2hlbWE/OiBSZWNvcmRTY2hlbWE7XG4gIG5vcm1hbGl6ZXI/OiBSZWNvcmROb3JtYWxpemVyPFJULCBSST47XG4gIHZhbGlkYXRvckZvcj86IFZhbGlkYXRvckZvckZuPFN0YW5kYXJkVmFsaWRhdG9yIHwgU3RhbmRhcmRSZWNvcmRWYWxpZGF0b3I+O1xufVxuXG5leHBvcnQgY2xhc3MgUmVjb3JkUXVlcnlCdWlsZGVyPFJUID0gc3RyaW5nLCBSSSA9IFJlY29yZElkZW50aXR5PiB7XG4gICRzY2hlbWE/OiBSZWNvcmRTY2hlbWE7XG4gICRub3JtYWxpemVyPzogUmVjb3JkTm9ybWFsaXplcjxSVCwgUkk+O1xuICAkdmFsaWRhdG9yRm9yPzogVmFsaWRhdG9yRm9yRm48U3RhbmRhcmRWYWxpZGF0b3IgfCBTdGFuZGFyZFJlY29yZFZhbGlkYXRvcj47XG5cbiAgY29uc3RydWN0b3Ioc2V0dGluZ3M6IFJlY29yZFF1ZXJ5QnVpbGRlclNldHRpbmdzPFJULCBSST4gPSB7fSkge1xuICAgIGNvbnN0IHsgc2NoZW1hLCBub3JtYWxpemVyLCB2YWxpZGF0b3JGb3IgfSA9IHNldHRpbmdzO1xuXG4gICAgaWYgKHZhbGlkYXRvckZvcikge1xuICAgICAgYXNzZXJ0KFxuICAgICAgICAnQSBSZWNvcmRRdWVyeUJ1aWxkZXIgdGhhdCBoYXMgYmVlbiBhc3NpZ25lZCBhIGB2YWxpZGF0b3JGb3JgIHJlcXVpcmVzIGEgYHNjaGVtYWAnLFxuICAgICAgICBzY2hlbWEgIT09IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLiRzY2hlbWEgPSBzY2hlbWE7XG4gICAgdGhpcy4kbm9ybWFsaXplciA9IG5vcm1hbGl6ZXI7XG4gICAgdGhpcy4kdmFsaWRhdG9yRm9yID0gdmFsaWRhdG9yRm9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYSByZWNvcmQgYnkgaXRzIGlkZW50aXR5LlxuICAgKi9cbiAgZmluZFJlY29yZChyZWNvcmQ6IFJJKTogRmluZFJlY29yZFRlcm08UlQsIFJJPiB7XG4gICAgcmV0dXJuIG5ldyBGaW5kUmVjb3JkVGVybSh0aGlzLCB0aGlzLiRub3JtYWxpemVSZWNvcmRJZGVudGl0eShyZWNvcmQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGFsbCByZWNvcmRzIG9mIGEgc3BlY2lmaWMgdHlwZS5cbiAgICpcbiAgICogSWYgYHR5cGVgIGlzIHVuc3BlY2lmaWVkLCBmaW5kIGFsbCByZWNvcmRzIHVuZmlsdGVyZWQgYnkgdHlwZS5cbiAgICovXG4gIGZpbmRSZWNvcmRzKHR5cGVPcklkZW50aXRpZXM/OiBSVCB8IFJJW10pOiBGaW5kUmVjb3Jkc1Rlcm08UlQsIFJJPiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbjogRmluZFJlY29yZHMgPSB7XG4gICAgICBvcDogJ2ZpbmRSZWNvcmRzJ1xuICAgIH07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlT3JJZGVudGl0aWVzKSkge1xuICAgICAgZXhwcmVzc2lvbi5yZWNvcmRzID0gdHlwZU9ySWRlbnRpdGllcy5tYXAoKHJpKSA9PlxuICAgICAgICB0aGlzLiRub3JtYWxpemVSZWNvcmRJZGVudGl0eShyaSlcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0eXBlT3JJZGVudGl0aWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV4cHJlc3Npb24udHlwZSA9IHRoaXMuJG5vcm1hbGl6ZVJlY29yZFR5cGUodHlwZU9ySWRlbnRpdGllcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBGaW5kUmVjb3Jkc1Rlcm0odGhpcywgZXhwcmVzc2lvbik7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIHJlY29yZCBpbiBhIHRvLW9uZSByZWxhdGlvbnNoaXAuXG4gICAqL1xuICBmaW5kUmVsYXRlZFJlY29yZChcbiAgICByZWNvcmQ6IFJJLFxuICAgIHJlbGF0aW9uc2hpcDogc3RyaW5nXG4gICk6IEZpbmRSZWxhdGVkUmVjb3JkVGVybTxSVCwgUkk+IHtcbiAgICByZXR1cm4gbmV3IEZpbmRSZWxhdGVkUmVjb3JkVGVybShcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLiRub3JtYWxpemVSZWNvcmRJZGVudGl0eShyZWNvcmQpLFxuICAgICAgcmVsYXRpb25zaGlwXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHJlY29yZHMgaW4gYSB0by1tYW55IHJlbGF0aW9uc2hpcC5cbiAgICovXG4gIGZpbmRSZWxhdGVkUmVjb3JkcyhcbiAgICByZWNvcmQ6IFJJLFxuICAgIHJlbGF0aW9uc2hpcDogc3RyaW5nXG4gICk6IEZpbmRSZWNvcmRzVGVybTxSVCwgUkk+IHtcbiAgICBjb25zdCBleHByZXNzaW9uOiBGaW5kUmVsYXRlZFJlY29yZHMgPSB7XG4gICAgICBvcDogJ2ZpbmRSZWxhdGVkUmVjb3JkcycsXG4gICAgICByZWNvcmQ6IHRoaXMuJG5vcm1hbGl6ZVJlY29yZElkZW50aXR5KHJlY29yZCksXG4gICAgICByZWxhdGlvbnNoaXBcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBGaW5kUmVjb3Jkc1Rlcm0odGhpcywgZXhwcmVzc2lvbik7XG4gIH1cblxuICAkbm9ybWFsaXplUmVjb3JkVHlwZShydDogUlQpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLiRub3JtYWxpemVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLiRub3JtYWxpemVyLm5vcm1hbGl6ZVJlY29yZFR5cGUocnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKHJ0IGFzIHVua25vd24pIGFzIHN0cmluZztcbiAgICB9XG4gIH1cblxuICAkbm9ybWFsaXplUmVjb3JkSWRlbnRpdHkocmk6IFJJKTogUmVjb3JkSWRlbnRpdHkge1xuICAgIGlmICh0aGlzLiRub3JtYWxpemVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLiRub3JtYWxpemVyLm5vcm1hbGl6ZVJlY29yZElkZW50aXR5KHJpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChyaSBhcyB1bmtub3duKSBhcyBSZWNvcmRJZGVudGl0eTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==