@data-client/normalizr
Version:
Normalizes and denormalizes JSON according to schema for Redux and Flux applications
54 lines (52 loc) • 6.53 kB
JavaScript
import { INVALID } from '../denormalize/symbol.js';
/** Basic state interfaces for normalize side */
export class BaseDelegate {
constructor({
entities,
indexes
}) {
this.entities = entities;
this.indexes = indexes;
}
// we must expose the entities object to track in our WeakDependencyMap
// however, this should not be part of the public API
// only used in buildQueryKey
tracked(schema) {
// eslint-disable-next-line @typescript-eslint/no-this-alias
const base = this;
const dependencies = [{
path: [''],
entity: schema
}];
const delegate = {
INVALID,
getIndex(...path) {
const entity = base.getIndex(...path);
dependencies.push({
path,
entity
});
return base.getIndexEnd(entity, path[2]);
},
getEntity(...path) {
const entity = base.getEntity(...path);
dependencies.push({
path,
entity
});
return entity;
},
getEntities(key) {
const entity = base.getEntitiesObject(key);
dependencies.push({
path: [key],
entity
});
return base.getEntities(key);
}
};
return [delegate, dependencies];
}
}
export const getDependency = delegate => path => delegate[['', 'getEntitiesObject', 'getEntity', 'getIndex'][path.length]](...path);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJTlZBTElEIiwiQmFzZURlbGVnYXRlIiwiY29uc3RydWN0b3IiLCJlbnRpdGllcyIsImluZGV4ZXMiLCJ0cmFja2VkIiwic2NoZW1hIiwiYmFzZSIsImRlcGVuZGVuY2llcyIsInBhdGgiLCJlbnRpdHkiLCJkZWxlZ2F0ZSIsImdldEluZGV4IiwicHVzaCIsImdldEluZGV4RW5kIiwiZ2V0RW50aXR5IiwiZ2V0RW50aXRpZXMiLCJrZXkiLCJnZXRFbnRpdGllc09iamVjdCIsImdldERlcGVuZGVuY3kiLCJsZW5ndGgiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVsZWdhdGUvQmFzZURlbGVnYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElOVkFMSUQgfSBmcm9tICcuLi9kZW5vcm1hbGl6ZS9zeW1ib2wuanMnO1xuaW1wb3J0IHR5cGUge1xuICBRdWVyeVBhdGgsXG4gIEluZGV4UGF0aCxcbiAgSVF1ZXJ5RGVsZWdhdGUsXG4gIEVudGl0aWVzSW50ZXJmYWNlLFxufSBmcm9tICcuLi9pbnRlcmZhY2UuanMnO1xuaW1wb3J0IHR5cGUgeyBEZXAgfSBmcm9tICcuLi9tZW1vL1dlYWtEZXBlbmRlbmN5TWFwLmpzJztcblxuLyoqIEJhc2ljIHN0YXRlIGludGVyZmFjZXMgZm9yIG5vcm1hbGl6ZSBzaWRlICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZURlbGVnYXRlIHtcbiAgZGVjbGFyZSBlbnRpdGllczogYW55O1xuICBkZWNsYXJlIGluZGV4ZXM6IGFueTtcblxuICBjb25zdHJ1Y3Rvcih7IGVudGl0aWVzLCBpbmRleGVzIH06IHsgZW50aXRpZXM6IGFueTsgaW5kZXhlczogYW55IH0pIHtcbiAgICB0aGlzLmVudGl0aWVzID0gZW50aXRpZXM7XG4gICAgdGhpcy5pbmRleGVzID0gaW5kZXhlcztcbiAgfVxuXG4gIGFic3RyYWN0IGdldEVudGl0aWVzKGtleTogc3RyaW5nKTogRW50aXRpZXNJbnRlcmZhY2UgfCB1bmRlZmluZWQ7XG4gIGFic3RyYWN0IGdldEVudGl0eShrZXk6IHN0cmluZywgcGs6IHN0cmluZyk6IG9iamVjdCB8IHVuZGVmaW5lZDtcbiAgYWJzdHJhY3QgZ2V0SW5kZXgoLi4ucGF0aDogSW5kZXhQYXRoKTogb2JqZWN0IHwgdW5kZWZpbmVkO1xuICBhYnN0cmFjdCBnZXRJbmRleEVuZChlbnRpdHk6IGFueSwgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLy8gd2UgbXVzdCBleHBvc2UgdGhlIGVudGl0aWVzIG9iamVjdCB0byB0cmFjayBpbiBvdXIgV2Vha0RlcGVuZGVuY3lNYXBcbiAgLy8gaG93ZXZlciwgdGhpcyBzaG91bGQgbm90IGJlIHBhcnQgb2YgdGhlIHB1YmxpYyBBUElcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldEVudGl0aWVzT2JqZWN0KGtleTogc3RyaW5nKTogb2JqZWN0IHwgdW5kZWZpbmVkO1xuXG4gIC8vIG9ubHkgdXNlZCBpbiBidWlsZFF1ZXJ5S2V5XG4gIHRyYWNrZWQoXG4gICAgc2NoZW1hOiBhbnksXG4gICk6IFtkZWxlZ2F0ZTogSVF1ZXJ5RGVsZWdhdGUsIGRlcGVuZGVuY2llczogRGVwPFF1ZXJ5UGF0aD5bXV0ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgIGNvbnN0IGJhc2UgPSB0aGlzO1xuICAgIGNvbnN0IGRlcGVuZGVuY2llczogRGVwPFF1ZXJ5UGF0aD5bXSA9IFt7IHBhdGg6IFsnJ10sIGVudGl0eTogc2NoZW1hIH1dO1xuICAgIGNvbnN0IGRlbGVnYXRlID0ge1xuICAgICAgSU5WQUxJRCxcbiAgICAgIGdldEluZGV4KC4uLnBhdGg6IEluZGV4UGF0aCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IGJhc2UuZ2V0SW5kZXgoLi4ucGF0aCk7XG4gICAgICAgIGRlcGVuZGVuY2llcy5wdXNoKHsgcGF0aCwgZW50aXR5IH0pO1xuICAgICAgICByZXR1cm4gYmFzZS5nZXRJbmRleEVuZChlbnRpdHksIHBhdGhbMl0pO1xuICAgICAgfSxcbiAgICAgIGdldEVudGl0eSguLi5wYXRoOiBba2V5OiBzdHJpbmcsIHBrOiBzdHJpbmddKSB7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IGJhc2UuZ2V0RW50aXR5KC4uLnBhdGgpO1xuICAgICAgICBkZXBlbmRlbmNpZXMucHVzaCh7IHBhdGgsIGVudGl0eSB9KTtcbiAgICAgICAgcmV0dXJuIGVudGl0eTtcbiAgICAgIH0sXG4gICAgICBnZXRFbnRpdGllcyhrZXk6IHN0cmluZyk6IEVudGl0aWVzSW50ZXJmYWNlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgZW50aXR5ID0gYmFzZS5nZXRFbnRpdGllc09iamVjdChrZXkpO1xuICAgICAgICBkZXBlbmRlbmNpZXMucHVzaCh7IHBhdGg6IFtrZXldLCBlbnRpdHkgfSk7XG4gICAgICAgIHJldHVybiBiYXNlLmdldEVudGl0aWVzKGtleSk7XG4gICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIFtkZWxlZ2F0ZSwgZGVwZW5kZW5jaWVzXTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0RGVwZW5kZW5jeSA9XG4gIChkZWxlZ2F0ZTogQmFzZURlbGVnYXRlKSA9PlxuICAocGF0aDogUXVlcnlQYXRoKTogb2JqZWN0IHwgdW5kZWZpbmVkID0+XG4gICAgZGVsZWdhdGVbWycnLCAnZ2V0RW50aXRpZXNPYmplY3QnLCAnZ2V0RW50aXR5JywgJ2dldEluZGV4J11bcGF0aC5sZW5ndGhdXShcbiAgICAgIC4uLnBhdGgsXG4gICAgKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsT0FBTyxRQUFRLDBCQUEwQjtBQVNsRDtBQUNBLE9BQU8sTUFBZUMsWUFBWSxDQUFDO0VBSWpDQyxXQUFXQSxDQUFDO0lBQUVDLFFBQVE7SUFBRUM7RUFBeUMsQ0FBQyxFQUFFO0lBQ2xFLElBQUksQ0FBQ0QsUUFBUSxHQUFHQSxRQUFRO0lBQ3hCLElBQUksQ0FBQ0MsT0FBTyxHQUFHQSxPQUFPO0VBQ3hCOztFQU1BO0VBQ0E7O0VBR0E7RUFDQUMsT0FBT0EsQ0FDTEMsTUFBVyxFQUNpRDtJQUM1RDtJQUNBLE1BQU1DLElBQUksR0FBRyxJQUFJO0lBQ2pCLE1BQU1DLFlBQThCLEdBQUcsQ0FBQztNQUFFQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7TUFBRUMsTUFBTSxFQUFFSjtJQUFPLENBQUMsQ0FBQztJQUN2RSxNQUFNSyxRQUFRLEdBQUc7TUFDZlgsT0FBTztNQUNQWSxRQUFRQSxDQUFDLEdBQUdILElBQWUsRUFBc0I7UUFDL0MsTUFBTUMsTUFBTSxHQUFHSCxJQUFJLENBQUNLLFFBQVEsQ0FBQyxHQUFHSCxJQUFJLENBQUM7UUFDckNELFlBQVksQ0FBQ0ssSUFBSSxDQUFDO1VBQUVKLElBQUk7VUFBRUM7UUFBTyxDQUFDLENBQUM7UUFDbkMsT0FBT0gsSUFBSSxDQUFDTyxXQUFXLENBQUNKLE1BQU0sRUFBRUQsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzFDLENBQUM7TUFDRE0sU0FBU0EsQ0FBQyxHQUFHTixJQUErQixFQUFFO1FBQzVDLE1BQU1DLE1BQU0sR0FBR0gsSUFBSSxDQUFDUSxTQUFTLENBQUMsR0FBR04sSUFBSSxDQUFDO1FBQ3RDRCxZQUFZLENBQUNLLElBQUksQ0FBQztVQUFFSixJQUFJO1VBQUVDO1FBQU8sQ0FBQyxDQUFDO1FBQ25DLE9BQU9BLE1BQU07TUFDZixDQUFDO01BQ0RNLFdBQVdBLENBQUNDLEdBQVcsRUFBaUM7UUFDdEQsTUFBTVAsTUFBTSxHQUFHSCxJQUFJLENBQUNXLGlCQUFpQixDQUFDRCxHQUFHLENBQUM7UUFDMUNULFlBQVksQ0FBQ0ssSUFBSSxDQUFDO1VBQUVKLElBQUksRUFBRSxDQUFDUSxHQUFHLENBQUM7VUFBRVA7UUFBTyxDQUFDLENBQUM7UUFDMUMsT0FBT0gsSUFBSSxDQUFDUyxXQUFXLENBQUNDLEdBQUcsQ0FBQztNQUM5QjtJQUNGLENBQUM7SUFDRCxPQUFPLENBQUNOLFFBQVEsRUFBRUgsWUFBWSxDQUFDO0VBQ2pDO0FBQ0Y7QUFFQSxPQUFPLE1BQU1XLGFBQWEsR0FDdkJSLFFBQXNCLElBQ3RCRixJQUFlLElBQ2RFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUNGLElBQUksQ0FBQ1csTUFBTSxDQUFDLENBQUMsQ0FDdkUsR0FBR1gsSUFDTCxDQUFDIiwiaWdub3JlTGlzdCI6W119