UNPKG

@orbit/records

Version:

A flexible data access and synchronization layer.

75 lines 9.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RecordQueryBuilder = void 0; const core_1 = require("@orbit/core"); const record_query_term_1 = require("./record-query-term"); const { assert } = core_1.Orbit; 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 record_query_term_1.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 record_query_term_1.FindRecordsTerm(this, expression); } /** * Find a record in a to-one relationship. */ findRelatedRecord(record, relationship) { return new record_query_term_1.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 record_query_term_1.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; } } } exports.RecordQueryBuilder = RecordQueryBuilder; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLXF1ZXJ5LWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVjb3JkLXF1ZXJ5LWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsc0NBQW9DO0FBVXBDLDJEQUk2QjtBQUk3QixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsWUFBSyxDQUFDO0FBYXpCLE1BQWEsa0JBQWtCO0lBSzdCLFlBQVksV0FBK0MsRUFBRTtRQUMzRCxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsR0FBRyxRQUFRLENBQUM7UUFFdEQsSUFBSSxZQUFZLEVBQUU7WUFDaEIsTUFBTSxDQUNKLGtGQUFrRixFQUNsRixNQUFNLEtBQUssU0FBUyxDQUNyQixDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVLENBQUMsTUFBVTtRQUNuQixPQUFPLElBQUksa0NBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsZ0JBQTRCO1FBQ3RDLE1BQU0sVUFBVSxHQUFnQjtZQUM5QixFQUFFLEVBQUUsYUFBYTtTQUNsQixDQUFDO1FBRUYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDbkMsVUFBVSxDQUFDLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUMvQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQ2xDLENBQUM7U0FDSDthQUFNLElBQUksZ0JBQWdCLEtBQUssU0FBUyxFQUFFO1lBQ3pDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDL0Q7UUFFRCxPQUFPLElBQUksbUNBQWUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCLENBQ2YsTUFBVSxFQUNWLFlBQW9CO1FBRXBCLE9BQU8sSUFBSSx5Q0FBcUIsQ0FDOUIsSUFBSSxFQUNKLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsRUFDckMsWUFBWSxDQUNiLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxrQkFBa0IsQ0FDaEIsTUFBVSxFQUNWLFlBQW9CO1FBRXBCLE1BQU0sVUFBVSxHQUF1QjtZQUNyQyxFQUFFLEVBQUUsb0JBQW9CO1lBQ3hCLE1BQU0sRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDO1lBQzdDLFlBQVk7U0FDYixDQUFDO1FBRUYsT0FBTyxJQUFJLG1DQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxFQUFNO1FBQ3pCLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUU7WUFDbEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2pEO2FBQU07WUFDTCxPQUFRLEVBQXdCLENBQUM7U0FDbEM7SUFDSCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsRUFBTTtRQUM3QixJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxFQUFFO1lBQ2xDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNyRDthQUFNO1lBQ0wsT0FBUSxFQUFnQyxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztDQUNGO0FBN0ZELGdEQTZGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9yYml0IH0gZnJvbSAnQG9yYml0L2NvcmUnO1xuaW1wb3J0IHsgUXVlcnlCdWlsZGVyRnVuYyB9IGZyb20gJ0BvcmJpdC9kYXRhJztcbmltcG9ydCB7IFN0YW5kYXJkVmFsaWRhdG9yLCBWYWxpZGF0b3JGb3JGbiB9IGZyb20gJ0BvcmJpdC92YWxpZGF0b3JzJztcbmltcG9ydCB7IFJlY29yZElkZW50aXR5IH0gZnJvbSAnLi9yZWNvcmQnO1xuaW1wb3J0IHsgUmVjb3JkTm9ybWFsaXplciB9IGZyb20gJy4vcmVjb3JkLW5vcm1hbGl6ZXInO1xuaW1wb3J0IHtcbiAgRmluZFJlY29yZHMsXG4gIEZpbmRSZWxhdGVkUmVjb3JkcyxcbiAgUmVjb3JkUXVlcnlFeHByZXNzaW9uXG59IGZyb20gJy4vcmVjb3JkLXF1ZXJ5LWV4cHJlc3Npb24nO1xuaW1wb3J0IHtcbiAgRmluZFJlY29yZHNUZXJtLFxuICBGaW5kUmVjb3JkVGVybSxcbiAgRmluZFJlbGF0ZWRSZWNvcmRUZXJtXG59IGZyb20gJy4vcmVjb3JkLXF1ZXJ5LXRlcm0nO1xuaW1wb3J0IHsgUmVjb3JkU2NoZW1hIH0gZnJvbSAnLi9yZWNvcmQtc2NoZW1hJztcbmltcG9ydCB7IFN0YW5kYXJkUmVjb3JkVmFsaWRhdG9yIH0gZnJvbSAnLi9yZWNvcmQtdmFsaWRhdG9ycy9zdGFuZGFyZC1yZWNvcmQtdmFsaWRhdG9ycyc7XG5cbmNvbnN0IHsgYXNzZXJ0IH0gPSBPcmJpdDtcblxuZXhwb3J0IHR5cGUgUmVjb3JkUXVlcnlCdWlsZGVyRnVuYyA9IFF1ZXJ5QnVpbGRlckZ1bmM8XG4gIFJlY29yZFF1ZXJ5RXhwcmVzc2lvbixcbiAgUmVjb3JkUXVlcnlCdWlsZGVyXG4+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZFF1ZXJ5QnVpbGRlclNldHRpbmdzPFJUID0gc3RyaW5nLCBSSSA9IFJlY29yZElkZW50aXR5PiB7XG4gIHNjaGVtYT86IFJlY29yZFNjaGVtYTtcbiAgbm9ybWFsaXplcj86IFJlY29yZE5vcm1hbGl6ZXI8UlQsIFJJPjtcbiAgdmFsaWRhdG9yRm9yPzogVmFsaWRhdG9yRm9yRm48U3RhbmRhcmRWYWxpZGF0b3IgfCBTdGFuZGFyZFJlY29yZFZhbGlkYXRvcj47XG59XG5cbmV4cG9ydCBjbGFzcyBSZWNvcmRRdWVyeUJ1aWxkZXI8UlQgPSBzdHJpbmcsIFJJID0gUmVjb3JkSWRlbnRpdHk+IHtcbiAgJHNjaGVtYT86IFJlY29yZFNjaGVtYTtcbiAgJG5vcm1hbGl6ZXI/OiBSZWNvcmROb3JtYWxpemVyPFJULCBSST47XG4gICR2YWxpZGF0b3JGb3I/OiBWYWxpZGF0b3JGb3JGbjxTdGFuZGFyZFZhbGlkYXRvciB8IFN0YW5kYXJkUmVjb3JkVmFsaWRhdG9yPjtcblxuICBjb25zdHJ1Y3RvcihzZXR0aW5nczogUmVjb3JkUXVlcnlCdWlsZGVyU2V0dGluZ3M8UlQsIFJJPiA9IHt9KSB7XG4gICAgY29uc3QgeyBzY2hlbWEsIG5vcm1hbGl6ZXIsIHZhbGlkYXRvckZvciB9ID0gc2V0dGluZ3M7XG5cbiAgICBpZiAodmFsaWRhdG9yRm9yKSB7XG4gICAgICBhc3NlcnQoXG4gICAgICAgICdBIFJlY29yZFF1ZXJ5QnVpbGRlciB0aGF0IGhhcyBiZWVuIGFzc2lnbmVkIGEgYHZhbGlkYXRvckZvcmAgcmVxdWlyZXMgYSBgc2NoZW1hYCcsXG4gICAgICAgIHNjaGVtYSAhPT0gdW5kZWZpbmVkXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuJHNjaGVtYSA9IHNjaGVtYTtcbiAgICB0aGlzLiRub3JtYWxpemVyID0gbm9ybWFsaXplcjtcbiAgICB0aGlzLiR2YWxpZGF0b3JGb3IgPSB2YWxpZGF0b3JGb3I7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIHJlY29yZCBieSBpdHMgaWRlbnRpdHkuXG4gICAqL1xuICBmaW5kUmVjb3JkKHJlY29yZDogUkkpOiBGaW5kUmVjb3JkVGVybTxSVCwgUkk+IHtcbiAgICByZXR1cm4gbmV3IEZpbmRSZWNvcmRUZXJtKHRoaXMsIHRoaXMuJG5vcm1hbGl6ZVJlY29yZElkZW50aXR5KHJlY29yZCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYWxsIHJlY29yZHMgb2YgYSBzcGVjaWZpYyB0eXBlLlxuICAgKlxuICAgKiBJZiBgdHlwZWAgaXMgdW5zcGVjaWZpZWQsIGZpbmQgYWxsIHJlY29yZHMgdW5maWx0ZXJlZCBieSB0eXBlLlxuICAgKi9cbiAgZmluZFJlY29yZHModHlwZU9ySWRlbnRpdGllcz86IFJUIHwgUklbXSk6IEZpbmRSZWNvcmRzVGVybTxSVCwgUkk+IHtcbiAgICBjb25zdCBleHByZXNzaW9uOiBGaW5kUmVjb3JkcyA9IHtcbiAgICAgIG9wOiAnZmluZFJlY29yZHMnXG4gICAgfTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHR5cGVPcklkZW50aXRpZXMpKSB7XG4gICAgICBleHByZXNzaW9uLnJlY29yZHMgPSB0eXBlT3JJZGVudGl0aWVzLm1hcCgocmkpID0+XG4gICAgICAgIHRoaXMuJG5vcm1hbGl6ZVJlY29yZElkZW50aXR5KHJpKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVPcklkZW50aXRpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXhwcmVzc2lvbi50eXBlID0gdGhpcy4kbm9ybWFsaXplUmVjb3JkVHlwZSh0eXBlT3JJZGVudGl0aWVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEZpbmRSZWNvcmRzVGVybSh0aGlzLCBleHByZXNzaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGEgcmVjb3JkIGluIGEgdG8tb25lIHJlbGF0aW9uc2hpcC5cbiAgICovXG4gIGZpbmRSZWxhdGVkUmVjb3JkKFxuICAgIHJlY29yZDogUkksXG4gICAgcmVsYXRpb25zaGlwOiBzdHJpbmdcbiAgKTogRmluZFJlbGF0ZWRSZWNvcmRUZXJtPFJULCBSST4ge1xuICAgIHJldHVybiBuZXcgRmluZFJlbGF0ZWRSZWNvcmRUZXJtKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuJG5vcm1hbGl6ZVJlY29yZElkZW50aXR5KHJlY29yZCksXG4gICAgICByZWxhdGlvbnNoaXBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgcmVjb3JkcyBpbiBhIHRvLW1hbnkgcmVsYXRpb25zaGlwLlxuICAgKi9cbiAgZmluZFJlbGF0ZWRSZWNvcmRzKFxuICAgIHJlY29yZDogUkksXG4gICAgcmVsYXRpb25zaGlwOiBzdHJpbmdcbiAgKTogRmluZFJlY29yZHNUZXJtPFJULCBSST4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb246IEZpbmRSZWxhdGVkUmVjb3JkcyA9IHtcbiAgICAgIG9wOiAnZmluZFJlbGF0ZWRSZWNvcmRzJyxcbiAgICAgIHJlY29yZDogdGhpcy4kbm9ybWFsaXplUmVjb3JkSWRlbnRpdHkocmVjb3JkKSxcbiAgICAgIHJlbGF0aW9uc2hpcFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IEZpbmRSZWNvcmRzVGVybSh0aGlzLCBleHByZXNzaW9uKTtcbiAgfVxuXG4gICRub3JtYWxpemVSZWNvcmRUeXBlKHJ0OiBSVCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuJG5vcm1hbGl6ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuJG5vcm1hbGl6ZXIubm9ybWFsaXplUmVjb3JkVHlwZShydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAocnQgYXMgdW5rbm93bikgYXMgc3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gICRub3JtYWxpemVSZWNvcmRJZGVudGl0eShyaTogUkkpOiBSZWNvcmRJZGVudGl0eSB7XG4gICAgaWYgKHRoaXMuJG5vcm1hbGl6ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuJG5vcm1hbGl6ZXIubm9ybWFsaXplUmVjb3JkSWRlbnRpdHkocmkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKHJpIGFzIHVua25vd24pIGFzIFJlY29yZElkZW50aXR5O1xuICAgIH1cbiAgfVxufVxuIl19