@orbit/records
Version:
A flexible data access and synchronization layer.
60 lines • 6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RecordKeyMap = void 0;
const utils_1 = require("@orbit/utils");
/**
* Maintains a map between records' ids and keys.
*/
class RecordKeyMap {
constructor() {
this.reset();
}
/**
* Resets the contents of the key map.
*/
reset() {
this._idsToKeys = {};
this._keysToIds = {};
}
/**
* Return a key value given a model type, key name, and id.
*/
idToKey(type, keyName, idValue) {
return (0, utils_1.deepGet)(this._idsToKeys, [type, keyName, idValue]);
}
/**
* Return an id value given a model type, key name, and key value.
*/
keyToId(type, keyName, keyValue) {
return (0, utils_1.deepGet)(this._keysToIds, [type, keyName, keyValue]);
}
/**
* Store the id and key values of a record in this key map.
*/
pushRecord(record) {
const { type, id, keys } = record;
if (!keys || !id) {
return;
}
Object.keys(keys).forEach((keyName) => {
let keyValue = keys[keyName];
if (keyValue) {
(0, utils_1.deepSet)(this._idsToKeys, [type, keyName, id], keyValue);
(0, utils_1.deepSet)(this._keysToIds, [type, keyName, keyValue], id);
}
});
}
/**
* Given a record, find the cached id if it exists.
*/
idFromKeys(type, keys) {
for (let key of Object.keys(keys)) {
let value = keys[key];
if (value) {
return this.keyToId(type, key, value);
}
}
}
}
exports.RecordKeyMap = RecordKeyMap;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLWtleS1tYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVjb3JkLWtleS1tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0NBQXNEO0FBR3REOztHQUVHO0FBQ0gsTUFBYSxZQUFZO0lBSXZCO1FBQ0UsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FBQyxJQUFZLEVBQUUsT0FBZSxFQUFFLE9BQWU7UUFDcEQsT0FBTyxJQUFBLGVBQU8sRUFBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FBQyxJQUFZLEVBQUUsT0FBZSxFQUFFLFFBQWdCO1FBQ3JELE9BQU8sSUFBQSxlQUFPLEVBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVLENBQUMsTUFBK0M7UUFDeEQsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBRWxDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDaEIsT0FBTztTQUNSO1FBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNwQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0IsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osSUFBQSxlQUFPLEVBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3hELElBQUEsZUFBTyxFQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQ3pEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVLENBQUMsSUFBWSxFQUFFLElBQWtCO1FBQ3pDLEtBQUssSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNqQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEIsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDdkM7U0FDRjtJQUNILENBQUM7Q0FDRjtBQTVERCxvQ0E0REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWVwR2V0LCBkZWVwU2V0LCBEaWN0IH0gZnJvbSAnQG9yYml0L3V0aWxzJztcbmltcG9ydCB7IEluaXRpYWxpemVkUmVjb3JkLCBVbmluaXRpYWxpemVkUmVjb3JkIH0gZnJvbSAnLi9yZWNvcmQnO1xuXG4vKipcbiAqIE1haW50YWlucyBhIG1hcCBiZXR3ZWVuIHJlY29yZHMnIGlkcyBhbmQga2V5cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlY29yZEtleU1hcCB7XG4gIHByaXZhdGUgX2lkc1RvS2V5cyE6IERpY3Q8RGljdDxzdHJpbmc+PjtcbiAgcHJpdmF0ZSBfa2V5c1RvSWRzITogRGljdDxEaWN0PHN0cmluZz4+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBrZXkgbWFwLlxuICAgKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5faWRzVG9LZXlzID0ge307XG4gICAgdGhpcy5fa2V5c1RvSWRzID0ge307XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEga2V5IHZhbHVlIGdpdmVuIGEgbW9kZWwgdHlwZSwga2V5IG5hbWUsIGFuZCBpZC5cbiAgICovXG4gIGlkVG9LZXkodHlwZTogc3RyaW5nLCBrZXlOYW1lOiBzdHJpbmcsIGlkVmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGRlZXBHZXQodGhpcy5faWRzVG9LZXlzLCBbdHlwZSwga2V5TmFtZSwgaWRWYWx1ZV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBpZCB2YWx1ZSBnaXZlbiBhIG1vZGVsIHR5cGUsIGtleSBuYW1lLCBhbmQga2V5IHZhbHVlLlxuICAgKi9cbiAga2V5VG9JZCh0eXBlOiBzdHJpbmcsIGtleU5hbWU6IHN0cmluZywga2V5VmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGRlZXBHZXQodGhpcy5fa2V5c1RvSWRzLCBbdHlwZSwga2V5TmFtZSwga2V5VmFsdWVdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSB0aGUgaWQgYW5kIGtleSB2YWx1ZXMgb2YgYSByZWNvcmQgaW4gdGhpcyBrZXkgbWFwLlxuICAgKi9cbiAgcHVzaFJlY29yZChyZWNvcmQ6IEluaXRpYWxpemVkUmVjb3JkIHwgVW5pbml0aWFsaXplZFJlY29yZCk6IHZvaWQge1xuICAgIGNvbnN0IHsgdHlwZSwgaWQsIGtleXMgfSA9IHJlY29yZDtcblxuICAgIGlmICgha2V5cyB8fCAhaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhrZXlzKS5mb3JFYWNoKChrZXlOYW1lKSA9PiB7XG4gICAgICBsZXQga2V5VmFsdWUgPSBrZXlzW2tleU5hbWVdO1xuICAgICAgaWYgKGtleVZhbHVlKSB7XG4gICAgICAgIGRlZXBTZXQodGhpcy5faWRzVG9LZXlzLCBbdHlwZSwga2V5TmFtZSwgaWRdLCBrZXlWYWx1ZSk7XG4gICAgICAgIGRlZXBTZXQodGhpcy5fa2V5c1RvSWRzLCBbdHlwZSwga2V5TmFtZSwga2V5VmFsdWVdLCBpZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYSByZWNvcmQsIGZpbmQgdGhlIGNhY2hlZCBpZCBpZiBpdCBleGlzdHMuXG4gICAqL1xuICBpZEZyb21LZXlzKHR5cGU6IHN0cmluZywga2V5czogRGljdDxzdHJpbmc+KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoa2V5cykpIHtcbiAgICAgIGxldCB2YWx1ZSA9IGtleXNba2V5XTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5rZXlUb0lkKHR5cGUsIGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19