UNPKG

@orbit/records

Version:

A flexible data access and synchronization layer.

60 lines 6 kB
"use strict"; 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