@orbit/record-cache
Version:
Orbit base classes used to access and maintain a set of records.
89 lines • 10.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getInverseRelationshipRemovalOps = exports.getAllInverseRelationships = exports.getInverseRelationships = exports.getInverseRelationship = void 0;
const records_1 = require("@orbit/records");
const utils_1 = require("@orbit/utils");
function getInverseRelationship(schema, record, relationship, relatedRecord) {
if (relatedRecord) {
const recordIdentity = (0, records_1.cloneRecordIdentity)(record);
return {
record: recordIdentity,
relationship,
relatedRecord
};
}
return null;
}
exports.getInverseRelationship = getInverseRelationship;
function getInverseRelationships(schema, record, relationship, relatedRecords) {
if (relatedRecords && relatedRecords.length > 0) {
const recordIdentity = (0, records_1.cloneRecordIdentity)(record);
return relatedRecords.map((relatedRecord) => {
return {
record: recordIdentity,
relationship,
relatedRecord
};
});
}
return [];
}
exports.getInverseRelationships = getInverseRelationships;
function getAllInverseRelationships(schema, record) {
const recordIdentity = (0, records_1.cloneRecordIdentity)(record);
const inverseRelationships = [];
schema.eachRelationship(record.type, (relationship) => {
const relationshipData = (0, utils_1.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;
}
exports.getAllInverseRelationships = getAllInverseRelationships;
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;
}
exports.getInverseRelationshipRemovalOps = getInverseRelationshipRemovalOps;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUtaW50ZWdyaXR5LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL29wZXJhdGlvbi1wcm9jZXNzb3JzL3V0aWxzL2NhY2hlLWludGVncml0eS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0Q0FNd0I7QUFDeEIsd0NBQXVDO0FBR3ZDLFNBQWdCLHNCQUFzQixDQUNwQyxNQUFvQixFQUNwQixNQUFzQixFQUN0QixZQUFvQixFQUNwQixhQUFxQztJQUVyQyxJQUFJLGFBQWEsRUFBRTtRQUNqQixNQUFNLGNBQWMsR0FBRyxJQUFBLDZCQUFtQixFQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRW5ELE9BQU87WUFDTCxNQUFNLEVBQUUsY0FBYztZQUN0QixZQUFZO1lBQ1osYUFBYTtTQUNkLENBQUM7S0FDSDtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQWhCRCx3REFnQkM7QUFFRCxTQUFnQix1QkFBdUIsQ0FDckMsTUFBb0IsRUFDcEIsTUFBc0IsRUFDdEIsWUFBb0IsRUFDcEIsY0FBaUM7SUFFakMsSUFBSSxjQUFjLElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDL0MsTUFBTSxjQUFjLEdBQUcsSUFBQSw2QkFBbUIsRUFBQyxNQUFNLENBQUMsQ0FBQztRQUVuRCxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUMxQyxPQUFPO2dCQUNMLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixZQUFZO2dCQUNaLGFBQWE7YUFDZCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7S0FDSjtJQUNELE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQztBQWxCRCwwREFrQkM7QUFFRCxTQUFnQiwwQkFBMEIsQ0FDeEMsTUFBb0IsRUFDcEIsTUFBeUI7SUFFekIsTUFBTSxjQUFjLEdBQUcsSUFBQSw2QkFBbUIsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUNuRCxNQUFNLG9CQUFvQixHQUFpQyxFQUFFLENBQUM7SUFFOUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxZQUFZLEVBQUUsRUFBRTtRQUNwRCxNQUFNLGdCQUFnQixHQUFHLElBQUEsZUFBTyxFQUFDLE1BQU0sRUFBRTtZQUN2QyxlQUFlO1lBQ2YsWUFBWTtZQUNaLE1BQU07U0FDUCxDQUF5RCxDQUFDO1FBRTNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ25DLEtBQUssSUFBSSxhQUFhLElBQUksZ0JBQWdCLEVBQUU7Z0JBQzFDLG9CQUFvQixDQUFDLElBQUksQ0FBQztvQkFDeEIsTUFBTSxFQUFFLGNBQWM7b0JBQ3RCLFlBQVk7b0JBQ1osYUFBYTtpQkFDZCxDQUFDLENBQUM7YUFDSjtTQUNGO2FBQU0sSUFBSSxnQkFBZ0IsRUFBRTtZQUMzQixvQkFBb0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hCLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixZQUFZO2dCQUNaLGFBQWEsRUFBRSxnQkFBZ0I7YUFDaEMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sb0JBQW9CLENBQUM7QUFDOUIsQ0FBQztBQWhDRCxnRUFnQ0M7QUFFRCxTQUFnQixnQ0FBZ0MsQ0FDOUMsTUFBb0IsRUFDcEIsb0JBQWtEOztJQUVsRCxNQUFNLEdBQUcsR0FBc0IsRUFBRSxDQUFDO0lBRWxDLEtBQUssSUFBSSxtQkFBbUIsSUFBSSxvQkFBb0IsRUFBRTtRQUNwRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDO1FBQzVDLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQztRQUM3QyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUVuRSx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLE1BQUEsZUFBZSxDQUFDLElBQUksbUNBQUssZUFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDekUsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDUCxFQUFFLEVBQUUsMEJBQTBCO2dCQUM5QixNQUFNLEVBQUUsbUJBQW1CLENBQUMsTUFBTTtnQkFDbEMsWUFBWSxFQUFFLG1CQUFtQixDQUFDLFlBQVk7Z0JBQzlDLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxhQUFhO2FBQ2pELENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNQLEVBQUUsRUFBRSxzQkFBc0I7Z0JBQzFCLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxNQUFNO2dCQUNsQyxZQUFZLEVBQUUsbUJBQW1CLENBQUMsWUFBWTtnQkFDOUMsYUFBYSxFQUFFLElBQUk7YUFDcEIsQ0FBQyxDQUFDO1NBQ0o7S0FDRjtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQTlCRCw0RUE4QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjbG9uZVJlY29yZElkZW50aXR5LFxuICBJbml0aWFsaXplZFJlY29yZCxcbiAgUmVjb3JkSWRlbnRpdHksXG4gIFJlY29yZE9wZXJhdGlvbixcbiAgUmVjb3JkU2NoZW1hXG59IGZyb20gJ0BvcmJpdC9yZWNvcmRzJztcbmltcG9ydCB7IGRlZXBHZXQgfSBmcm9tICdAb3JiaXQvdXRpbHMnO1xuaW1wb3J0IHsgUmVjb3JkUmVsYXRpb25zaGlwSWRlbnRpdHkgfSBmcm9tICcuLi8uLi9yZWNvcmQtYWNjZXNzb3InO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW52ZXJzZVJlbGF0aW9uc2hpcChcbiAgc2NoZW1hOiBSZWNvcmRTY2hlbWEsXG4gIHJlY29yZDogUmVjb3JkSWRlbnRpdHksXG4gIHJlbGF0aW9uc2hpcDogc3RyaW5nLFxuICByZWxhdGVkUmVjb3JkPzogUmVjb3JkSWRlbnRpdHkgfCBudWxsXG4pOiBSZWNvcmRSZWxhdGlvbnNoaXBJZGVudGl0eSB8IG51bGwge1xuICBpZiAocmVsYXRlZFJlY29yZCkge1xuICAgIGNvbnN0IHJlY29yZElkZW50aXR5ID0gY2xvbmVSZWNvcmRJZGVudGl0eShyZWNvcmQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlY29yZDogcmVjb3JkSWRlbnRpdHksXG4gICAgICByZWxhdGlvbnNoaXAsXG4gICAgICByZWxhdGVkUmVjb3JkXG4gICAgfTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludmVyc2VSZWxhdGlvbnNoaXBzKFxuICBzY2hlbWE6IFJlY29yZFNjaGVtYSxcbiAgcmVjb3JkOiBSZWNvcmRJZGVudGl0eSxcbiAgcmVsYXRpb25zaGlwOiBzdHJpbmcsXG4gIHJlbGF0ZWRSZWNvcmRzPzogUmVjb3JkSWRlbnRpdHlbXVxuKTogUmVjb3JkUmVsYXRpb25zaGlwSWRlbnRpdHlbXSB7XG4gIGlmIChyZWxhdGVkUmVjb3JkcyAmJiByZWxhdGVkUmVjb3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgcmVjb3JkSWRlbnRpdHkgPSBjbG9uZVJlY29yZElkZW50aXR5KHJlY29yZCk7XG5cbiAgICByZXR1cm4gcmVsYXRlZFJlY29yZHMubWFwKChyZWxhdGVkUmVjb3JkKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWNvcmQ6IHJlY29yZElkZW50aXR5LFxuICAgICAgICByZWxhdGlvbnNoaXAsXG4gICAgICAgIHJlbGF0ZWRSZWNvcmRcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsSW52ZXJzZVJlbGF0aW9uc2hpcHMoXG4gIHNjaGVtYTogUmVjb3JkU2NoZW1hLFxuICByZWNvcmQ6IEluaXRpYWxpemVkUmVjb3JkXG4pOiBSZWNvcmRSZWxhdGlvbnNoaXBJZGVudGl0eVtdIHtcbiAgY29uc3QgcmVjb3JkSWRlbnRpdHkgPSBjbG9uZVJlY29yZElkZW50aXR5KHJlY29yZCk7XG4gIGNvbnN0IGludmVyc2VSZWxhdGlvbnNoaXBzOiBSZWNvcmRSZWxhdGlvbnNoaXBJZGVudGl0eVtdID0gW107XG5cbiAgc2NoZW1hLmVhY2hSZWxhdGlvbnNoaXAocmVjb3JkLnR5cGUsIChyZWxhdGlvbnNoaXApID0+IHtcbiAgICBjb25zdCByZWxhdGlvbnNoaXBEYXRhID0gZGVlcEdldChyZWNvcmQsIFtcbiAgICAgICdyZWxhdGlvbnNoaXBzJyxcbiAgICAgIHJlbGF0aW9uc2hpcCxcbiAgICAgICdkYXRhJ1xuICAgIF0pIGFzIFJlY29yZElkZW50aXR5IHwgUmVjb3JkSWRlbnRpdHlbXSB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZWxhdGlvbnNoaXBEYXRhKSkge1xuICAgICAgZm9yIChsZXQgcmVsYXRlZFJlY29yZCBvZiByZWxhdGlvbnNoaXBEYXRhKSB7XG4gICAgICAgIGludmVyc2VSZWxhdGlvbnNoaXBzLnB1c2goe1xuICAgICAgICAgIHJlY29yZDogcmVjb3JkSWRlbnRpdHksXG4gICAgICAgICAgcmVsYXRpb25zaGlwLFxuICAgICAgICAgIHJlbGF0ZWRSZWNvcmRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZWxhdGlvbnNoaXBEYXRhKSB7XG4gICAgICBpbnZlcnNlUmVsYXRpb25zaGlwcy5wdXNoKHtcbiAgICAgICAgcmVjb3JkOiByZWNvcmRJZGVudGl0eSxcbiAgICAgICAgcmVsYXRpb25zaGlwLFxuICAgICAgICByZWxhdGVkUmVjb3JkOiByZWxhdGlvbnNoaXBEYXRhXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpbnZlcnNlUmVsYXRpb25zaGlwcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludmVyc2VSZWxhdGlvbnNoaXBSZW1vdmFsT3BzKFxuICBzY2hlbWE6IFJlY29yZFNjaGVtYSxcbiAgaW52ZXJzZVJlbGF0aW9uc2hpcHM6IFJlY29yZFJlbGF0aW9uc2hpcElkZW50aXR5W11cbik6IFJlY29yZE9wZXJhdGlvbltdIHtcbiAgY29uc3Qgb3BzOiBSZWNvcmRPcGVyYXRpb25bXSA9IFtdO1xuXG4gIGZvciAobGV0IGludmVyc2VSZWxhdGlvbnNoaXAgb2YgaW52ZXJzZVJlbGF0aW9uc2hpcHMpIHtcbiAgICBjb25zdCB7IHR5cGUgfSA9IGludmVyc2VSZWxhdGlvbnNoaXAucmVjb3JkO1xuICAgIGNvbnN0IHsgcmVsYXRpb25zaGlwIH0gPSBpbnZlcnNlUmVsYXRpb25zaGlwO1xuICAgIGNvbnN0IHJlbGF0aW9uc2hpcERlZiA9IHNjaGVtYS5nZXRSZWxhdGlvbnNoaXAodHlwZSwgcmVsYXRpb25zaGlwKTtcblxuICAgIC8vIFRPRE8gLSByZW1vdmUgZGVwcmVjYXRlZCBgdHlwZWAgY2hlY2tcbiAgICBpZiAoKHJlbGF0aW9uc2hpcERlZi5raW5kID8/IChyZWxhdGlvbnNoaXBEZWYgYXMgYW55KS50eXBlKSA9PT0gJ2hhc01hbnknKSB7XG4gICAgICBvcHMucHVzaCh7XG4gICAgICAgIG9wOiAncmVtb3ZlRnJvbVJlbGF0ZWRSZWNvcmRzJyxcbiAgICAgICAgcmVjb3JkOiBpbnZlcnNlUmVsYXRpb25zaGlwLnJlY29yZCxcbiAgICAgICAgcmVsYXRpb25zaGlwOiBpbnZlcnNlUmVsYXRpb25zaGlwLnJlbGF0aW9uc2hpcCxcbiAgICAgICAgcmVsYXRlZFJlY29yZDogaW52ZXJzZVJlbGF0aW9uc2hpcC5yZWxhdGVkUmVjb3JkXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3BzLnB1c2goe1xuICAgICAgICBvcDogJ3JlcGxhY2VSZWxhdGVkUmVjb3JkJyxcbiAgICAgICAgcmVjb3JkOiBpbnZlcnNlUmVsYXRpb25zaGlwLnJlY29yZCxcbiAgICAgICAgcmVsYXRpb25zaGlwOiBpbnZlcnNlUmVsYXRpb25zaGlwLnJlbGF0aW9uc2hpcCxcbiAgICAgICAgcmVsYXRlZFJlY29yZDogbnVsbFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9wcztcbn1cbiJdfQ==