@orbit/record-cache
Version:
Orbit base classes used to access and maintain a set of records.
82 lines • 10.1 kB
JavaScript
import { cloneRecordIdentity } from '@orbit/records';
import { deepGet } from '@orbit/utils';
export function getInverseRelationship(schema, record, relationship, relatedRecord) {
if (relatedRecord) {
const recordIdentity = cloneRecordIdentity(record);
return {
record: recordIdentity,
relationship,
relatedRecord
};
}
return null;
}
export function getInverseRelationships(schema, record, relationship, relatedRecords) {
if (relatedRecords && relatedRecords.length > 0) {
const recordIdentity = cloneRecordIdentity(record);
return relatedRecords.map((relatedRecord) => {
return {
record: recordIdentity,
relationship,
relatedRecord
};
});
}
return [];
}
export function getAllInverseRelationships(schema, record) {
const recordIdentity = cloneRecordIdentity(record);
const inverseRelationships = [];
schema.eachRelationship(record.type, (relationship) => {
const relationshipData = deepGet(record, [
'relationships',
relationship,
'data'
]);
if (Array.isArray(relationshipData)) {
for (let relatedRecord of relationshipData) {
inverseRelationships.push({
record: recordIdentity,
relationship,
relatedRecord
});
}
}
else if (relationshipData) {
inverseRelationships.push({
record: recordIdentity,
relationship,
relatedRecord: relationshipData
});
}
});
return inverseRelationships;
}
export function getInverseRelationshipRemovalOps(schema, inverseRelationships) {
var _a;
const ops = [];
for (let inverseRelationship of inverseRelationships) {
const { type } = inverseRelationship.record;
const { relationship } = inverseRelationship;
const relationshipDef = schema.getRelationship(type, relationship);
// TODO - remove deprecated `type` check
if (((_a = relationshipDef.kind) !== null && _a !== void 0 ? _a : relationshipDef.type) === 'hasMany') {
ops.push({
op: 'removeFromRelatedRecords',
record: inverseRelationship.record,
relationship: inverseRelationship.relationship,
relatedRecord: inverseRelationship.relatedRecord
});
}
else {
ops.push({
op: 'replaceRelatedRecord',
record: inverseRelationship.record,
relationship: inverseRelationship.relationship,
relatedRecord: null
});
}
}
return ops;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUtaW50ZWdyaXR5LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL29wZXJhdGlvbi1wcm9jZXNzb3JzL3V0aWxzL2NhY2hlLWludGVncml0eS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsbUJBQW1CLEVBS3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd2QyxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLE1BQW9CLEVBQ3BCLE1BQXNCLEVBQ3RCLFlBQW9CLEVBQ3BCLGFBQXFDO0lBRXJDLElBQUksYUFBYSxFQUFFO1FBQ2pCLE1BQU0sY0FBYyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRW5ELE9BQU87WUFDTCxNQUFNLEVBQUUsY0FBYztZQUN0QixZQUFZO1lBQ1osYUFBYTtTQUNkLENBQUM7S0FDSDtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsTUFBb0IsRUFDcEIsTUFBc0IsRUFDdEIsWUFBb0IsRUFDcEIsY0FBaUM7SUFFakMsSUFBSSxjQUFjLElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDL0MsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbkQsT0FBTyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDMUMsT0FBTztnQkFDTCxNQUFNLEVBQUUsY0FBYztnQkFDdEIsWUFBWTtnQkFDWixhQUFhO2FBQ2QsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0tBQ0o7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLE1BQW9CLEVBQ3BCLE1BQXlCO0lBRXpCLE1BQU0sY0FBYyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELE1BQU0sb0JBQW9CLEdBQWlDLEVBQUUsQ0FBQztJQUU5RCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFO1FBQ3BELE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUN2QyxlQUFlO1lBQ2YsWUFBWTtZQUNaLE1BQU07U0FDUCxDQUF5RCxDQUFDO1FBRTNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ25DLEtBQUssSUFBSSxhQUFhLElBQUksZ0JBQWdCLEVBQUU7Z0JBQzFDLG9CQUFvQixDQUFDLElBQUksQ0FBQztvQkFDeEIsTUFBTSxFQUFFLGNBQWM7b0JBQ3RCLFlBQVk7b0JBQ1osYUFBYTtpQkFDZCxDQUFDLENBQUM7YUFDSjtTQUNGO2FBQU0sSUFBSSxnQkFBZ0IsRUFBRTtZQUMzQixvQkFBb0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hCLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixZQUFZO2dCQUNaLGFBQWEsRUFBRSxnQkFBZ0I7YUFDaEMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sb0JBQW9CLENBQUM7QUFDOUIsQ0FBQztBQUVELE1BQU0sVUFBVSxnQ0FBZ0MsQ0FDOUMsTUFBb0IsRUFDcEIsb0JBQWtEOztJQUVsRCxNQUFNLEdBQUcsR0FBc0IsRUFBRSxDQUFDO0lBRWxDLEtBQUssSUFBSSxtQkFBbUIsSUFBSSxvQkFBb0IsRUFBRTtRQUNwRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDO1FBQzVDLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQztRQUM3QyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUVuRSx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLE1BQUEsZUFBZSxDQUFDLElBQUksbUNBQUssZUFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDekUsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDUCxFQUFFLEVBQUUsMEJBQTBCO2dCQUM5QixNQUFNLEVBQUUsbUJBQW1CLENBQUMsTUFBTTtnQkFDbEMsWUFBWSxFQUFFLG1CQUFtQixDQUFDLFlBQVk7Z0JBQzlDLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxhQUFhO2FBQ2pELENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNQLEVBQUUsRUFBRSxzQkFBc0I7Z0JBQzFCLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxNQUFNO2dCQUNsQyxZQUFZLEVBQUUsbUJBQW1CLENBQUMsWUFBWTtnQkFDOUMsYUFBYSxFQUFFLElBQUk7YUFDcEIsQ0FBQyxDQUFDO1NBQ0o7S0FDRjtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNsb25lUmVjb3JkSWRlbnRpdHksXG4gIEluaXRpYWxpemVkUmVjb3JkLFxuICBSZWNvcmRJZGVudGl0eSxcbiAgUmVjb3JkT3BlcmF0aW9uLFxuICBSZWNvcmRTY2hlbWFcbn0gZnJvbSAnQG9yYml0L3JlY29yZHMnO1xuaW1wb3J0IHsgZGVlcEdldCB9IGZyb20gJ0BvcmJpdC91dGlscyc7XG5pbXBvcnQgeyBSZWNvcmRSZWxhdGlvbnNoaXBJZGVudGl0eSB9IGZyb20gJy4uLy4uL3JlY29yZC1hY2Nlc3Nvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnZlcnNlUmVsYXRpb25zaGlwKFxuICBzY2hlbWE6IFJlY29yZFNjaGVtYSxcbiAgcmVjb3JkOiBSZWNvcmRJZGVudGl0eSxcbiAgcmVsYXRpb25zaGlwOiBzdHJpbmcsXG4gIHJlbGF0ZWRSZWNvcmQ/OiBSZWNvcmRJZGVudGl0eSB8IG51bGxcbik6IFJlY29yZFJlbGF0aW9uc2hpcElkZW50aXR5IHwgbnVsbCB7XG4gIGlmIChyZWxhdGVkUmVjb3JkKSB7XG4gICAgY29uc3QgcmVjb3JkSWRlbnRpdHkgPSBjbG9uZVJlY29yZElkZW50aXR5KHJlY29yZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVjb3JkOiByZWNvcmRJZGVudGl0eSxcbiAgICAgIHJlbGF0aW9uc2hpcCxcbiAgICAgIHJlbGF0ZWRSZWNvcmRcbiAgICB9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW52ZXJzZVJlbGF0aW9uc2hpcHMoXG4gIHNjaGVtYTogUmVjb3JkU2NoZW1hLFxuICByZWNvcmQ6IFJlY29yZElkZW50aXR5LFxuICByZWxhdGlvbnNoaXA6IHN0cmluZyxcbiAgcmVsYXRlZFJlY29yZHM/OiBSZWNvcmRJZGVudGl0eVtdXG4pOiBSZWNvcmRSZWxhdGlvbnNoaXBJZGVudGl0eVtdIHtcbiAgaWYgKHJlbGF0ZWRSZWNvcmRzICYmIHJlbGF0ZWRSZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCByZWNvcmRJZGVudGl0eSA9IGNsb25lUmVjb3JkSWRlbnRpdHkocmVjb3JkKTtcblxuICAgIHJldHVybiByZWxhdGVkUmVjb3Jkcy5tYXAoKHJlbGF0ZWRSZWNvcmQpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlY29yZDogcmVjb3JkSWRlbnRpdHksXG4gICAgICAgIHJlbGF0aW9uc2hpcCxcbiAgICAgICAgcmVsYXRlZFJlY29yZFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxJbnZlcnNlUmVsYXRpb25zaGlwcyhcbiAgc2NoZW1hOiBSZWNvcmRTY2hlbWEsXG4gIHJlY29yZDogSW5pdGlhbGl6ZWRSZWNvcmRcbik6IFJlY29yZFJlbGF0aW9uc2hpcElkZW50aXR5W10ge1xuICBjb25zdCByZWNvcmRJZGVudGl0eSA9IGNsb25lUmVjb3JkSWRlbnRpdHkocmVjb3JkKTtcbiAgY29uc3QgaW52ZXJzZVJlbGF0aW9uc2hpcHM6IFJlY29yZFJlbGF0aW9uc2hpcElkZW50aXR5W10gPSBbXTtcblxuICBzY2hlbWEuZWFjaFJlbGF0aW9uc2hpcChyZWNvcmQudHlwZSwgKHJlbGF0aW9uc2hpcCkgPT4ge1xuICAgIGNvbnN0IHJlbGF0aW9uc2hpcERhdGEgPSBkZWVwR2V0KHJlY29yZCwgW1xuICAgICAgJ3JlbGF0aW9uc2hpcHMnLFxuICAgICAgcmVsYXRpb25zaGlwLFxuICAgICAgJ2RhdGEnXG4gICAgXSkgYXMgUmVjb3JkSWRlbnRpdHkgfCBSZWNvcmRJZGVudGl0eVtdIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlbGF0aW9uc2hpcERhdGEpKSB7XG4gICAgICBmb3IgKGxldCByZWxhdGVkUmVjb3JkIG9mIHJlbGF0aW9uc2hpcERhdGEpIHtcbiAgICAgICAgaW52ZXJzZVJlbGF0aW9uc2hpcHMucHVzaCh7XG4gICAgICAgICAgcmVjb3JkOiByZWNvcmRJZGVudGl0eSxcbiAgICAgICAgICByZWxhdGlvbnNoaXAsXG4gICAgICAgICAgcmVsYXRlZFJlY29yZFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlbGF0aW9uc2hpcERhdGEpIHtcbiAgICAgIGludmVyc2VSZWxhdGlvbnNoaXBzLnB1c2goe1xuICAgICAgICByZWNvcmQ6IHJlY29yZElkZW50aXR5LFxuICAgICAgICByZWxhdGlvbnNoaXAsXG4gICAgICAgIHJlbGF0ZWRSZWNvcmQ6IHJlbGF0aW9uc2hpcERhdGFcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGludmVyc2VSZWxhdGlvbnNoaXBzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW52ZXJzZVJlbGF0aW9uc2hpcFJlbW92YWxPcHMoXG4gIHNjaGVtYTogUmVjb3JkU2NoZW1hLFxuICBpbnZlcnNlUmVsYXRpb25zaGlwczogUmVjb3JkUmVsYXRpb25zaGlwSWRlbnRpdHlbXVxuKTogUmVjb3JkT3BlcmF0aW9uW10ge1xuICBjb25zdCBvcHM6IFJlY29yZE9wZXJhdGlvbltdID0gW107XG5cbiAgZm9yIChsZXQgaW52ZXJzZVJlbGF0aW9uc2hpcCBvZiBpbnZlcnNlUmVsYXRpb25zaGlwcykge1xuICAgIGNvbnN0IHsgdHlwZSB9ID0gaW52ZXJzZVJlbGF0aW9uc2hpcC5yZWNvcmQ7XG4gICAgY29uc3QgeyByZWxhdGlvbnNoaXAgfSA9IGludmVyc2VSZWxhdGlvbnNoaXA7XG4gICAgY29uc3QgcmVsYXRpb25zaGlwRGVmID0gc2NoZW1hLmdldFJlbGF0aW9uc2hpcCh0eXBlLCByZWxhdGlvbnNoaXApO1xuXG4gICAgLy8gVE9ETyAtIHJlbW92ZSBkZXByZWNhdGVkIGB0eXBlYCBjaGVja1xuICAgIGlmICgocmVsYXRpb25zaGlwRGVmLmtpbmQgPz8gKHJlbGF0aW9uc2hpcERlZiBhcyBhbnkpLnR5cGUpID09PSAnaGFzTWFueScpIHtcbiAgICAgIG9wcy5wdXNoKHtcbiAgICAgICAgb3A6ICdyZW1vdmVGcm9tUmVsYXRlZFJlY29yZHMnLFxuICAgICAgICByZWNvcmQ6IGludmVyc2VSZWxhdGlvbnNoaXAucmVjb3JkLFxuICAgICAgICByZWxhdGlvbnNoaXA6IGludmVyc2VSZWxhdGlvbnNoaXAucmVsYXRpb25zaGlwLFxuICAgICAgICByZWxhdGVkUmVjb3JkOiBpbnZlcnNlUmVsYXRpb25zaGlwLnJlbGF0ZWRSZWNvcmRcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHMucHVzaCh7XG4gICAgICAgIG9wOiAncmVwbGFjZVJlbGF0ZWRSZWNvcmQnLFxuICAgICAgICByZWNvcmQ6IGludmVyc2VSZWxhdGlvbnNoaXAucmVjb3JkLFxuICAgICAgICByZWxhdGlvbnNoaXA6IGludmVyc2VSZWxhdGlvbnNoaXAucmVsYXRpb25zaGlwLFxuICAgICAgICByZWxhdGVkUmVjb3JkOiBudWxsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3BzO1xufVxuIl19