@data-client/normalizr
Version:
Normalizes and denormalizes JSON according to schema for Redux and Flux applications
28 lines (27 loc) • 5.75 kB
JavaScript
const validateSchema = definition => {
/* istanbul ignore else */
if (process.env.NODE_ENV !== 'production') {
const isArray = Array.isArray(definition);
if (isArray && definition.length > 1) {
throw new Error(`Expected schema definition to be a single schema, but found ${definition.length}.`);
}
}
return definition[0];
};
const getValues = input => Array.isArray(input) ? input : Object.keys(input).map(key => input[key]);
const filterEmpty = item => item !== undefined && typeof item !== 'symbol';
export const normalize = (schema, input, parent, key, args, visit, addEntity, getEntity, checkLoop) => {
schema = validateSchema(schema);
const values = getValues(input);
// Special case: Arrays pass *their* parent on to their children, since there
// is not any special information that can be gathered from themselves directly
return values.map((value, index) => visit(schema, value, parent, key, args));
};
export const denormalize = (schema, input, args, unvisit) => {
schema = validateSchema(schema);
return input.map ? input.map(entityOrId => unvisit(schema, entityOrId)).filter(filterEmpty) : input;
};
export function queryKey(schema, args, queryKey, getEntity, getIndex) {
return undefined;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ2YWxpZGF0ZVNjaGVtYSIsImRlZmluaXRpb24iLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJpc0FycmF5IiwiQXJyYXkiLCJsZW5ndGgiLCJFcnJvciIsImdldFZhbHVlcyIsImlucHV0IiwiT2JqZWN0Iiwia2V5cyIsIm1hcCIsImtleSIsImZpbHRlckVtcHR5IiwiaXRlbSIsInVuZGVmaW5lZCIsIm5vcm1hbGl6ZSIsInNjaGVtYSIsInBhcmVudCIsImFyZ3MiLCJ2aXNpdCIsImFkZEVudGl0eSIsImdldEVudGl0eSIsImNoZWNrTG9vcCIsInZhbHVlcyIsInZhbHVlIiwiaW5kZXgiLCJkZW5vcm1hbGl6ZSIsInVudmlzaXQiLCJlbnRpdHlPcklkIiwiZmlsdGVyIiwicXVlcnlLZXkiLCJnZXRJbmRleCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWFzL0FycmF5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVmlzaXQgfSBmcm9tICcuLi9pbnRlcmZhY2UuanMnO1xuXG5jb25zdCB2YWxpZGF0ZVNjaGVtYSA9IGRlZmluaXRpb24gPT4ge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGRlZmluaXRpb24pO1xuICAgIGlmIChpc0FycmF5ICYmIGRlZmluaXRpb24ubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRXhwZWN0ZWQgc2NoZW1hIGRlZmluaXRpb24gdG8gYmUgYSBzaW5nbGUgc2NoZW1hLCBidXQgZm91bmQgJHtkZWZpbml0aW9uLmxlbmd0aH0uYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRlZmluaXRpb25bMF07XG59O1xuXG5jb25zdCBnZXRWYWx1ZXMgPSBpbnB1dCA9PlxuICBBcnJheS5pc0FycmF5KGlucHV0KSA/IGlucHV0IDogT2JqZWN0LmtleXMoaW5wdXQpLm1hcChrZXkgPT4gaW5wdXRba2V5XSk7XG5cbmNvbnN0IGZpbHRlckVtcHR5ID0gaXRlbSA9PiBpdGVtICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGl0ZW0gIT09ICdzeW1ib2wnO1xuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplID0gKFxuICBzY2hlbWE6IGFueSxcbiAgaW5wdXQ6IGFueSxcbiAgcGFyZW50OiBhbnksXG4gIGtleTogYW55LFxuICBhcmdzOiByZWFkb25seSBhbnlbXSxcbiAgdmlzaXQ6IFZpc2l0LFxuICBhZGRFbnRpdHk6IGFueSxcbiAgZ2V0RW50aXR5OiBhbnksXG4gIGNoZWNrTG9vcDogYW55LFxuKSA9PiB7XG4gIHNjaGVtYSA9IHZhbGlkYXRlU2NoZW1hKHNjaGVtYSk7XG5cbiAgY29uc3QgdmFsdWVzID0gZ2V0VmFsdWVzKGlucHV0KTtcblxuICAvLyBTcGVjaWFsIGNhc2U6IEFycmF5cyBwYXNzICp0aGVpciogcGFyZW50IG9uIHRvIHRoZWlyIGNoaWxkcmVuLCBzaW5jZSB0aGVyZVxuICAvLyBpcyBub3QgYW55IHNwZWNpYWwgaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgZ2F0aGVyZWQgZnJvbSB0aGVtc2VsdmVzIGRpcmVjdGx5XG4gIHJldHVybiB2YWx1ZXMubWFwKCh2YWx1ZSwgaW5kZXgpID0+IHZpc2l0KHNjaGVtYSwgdmFsdWUsIHBhcmVudCwga2V5LCBhcmdzKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVub3JtYWxpemUgPSAoXG4gIHNjaGVtYTogYW55LFxuICBpbnB1dDogYW55LFxuICBhcmdzOiByZWFkb25seSBhbnlbXSxcbiAgdW52aXNpdDogYW55LFxuKTogYW55ID0+IHtcbiAgc2NoZW1hID0gdmFsaWRhdGVTY2hlbWEoc2NoZW1hKTtcbiAgcmV0dXJuIGlucHV0Lm1hcCA/XG4gICAgICBpbnB1dC5tYXAoZW50aXR5T3JJZCA9PiB1bnZpc2l0KHNjaGVtYSwgZW50aXR5T3JJZCkpLmZpbHRlcihmaWx0ZXJFbXB0eSlcbiAgICA6IGlucHV0O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5S2V5KFxuICBzY2hlbWE6IGFueSxcbiAgYXJnczogYW55LFxuICBxdWVyeUtleTogYW55LFxuICBnZXRFbnRpdHk6IGFueSxcbiAgZ2V0SW5kZXg6IGFueSxcbikge1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFFQSxNQUFNQSxjQUFjLEdBQUdDLFVBQVUsSUFBSTtFQUNuQztFQUNBLElBQUlDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxRQUFRLEtBQUssWUFBWSxFQUFFO0lBQ3pDLE1BQU1DLE9BQU8sR0FBR0MsS0FBSyxDQUFDRCxPQUFPLENBQUNKLFVBQVUsQ0FBQztJQUN6QyxJQUFJSSxPQUFPLElBQUlKLFVBQVUsQ0FBQ00sTUFBTSxHQUFHLENBQUMsRUFBRTtNQUNwQyxNQUFNLElBQUlDLEtBQUssQ0FDYiwrREFBK0RQLFVBQVUsQ0FBQ00sTUFBTSxHQUNsRixDQUFDO0lBQ0g7RUFDRjtFQUVBLE9BQU9OLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUVELE1BQU1RLFNBQVMsR0FBR0MsS0FBSyxJQUNyQkosS0FBSyxDQUFDRCxPQUFPLENBQUNLLEtBQUssQ0FBQyxHQUFHQSxLQUFLLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDRixLQUFLLENBQUMsQ0FBQ0csR0FBRyxDQUFDQyxHQUFHLElBQUlKLEtBQUssQ0FBQ0ksR0FBRyxDQUFDLENBQUM7QUFFMUUsTUFBTUMsV0FBVyxHQUFHQyxJQUFJLElBQUlBLElBQUksS0FBS0MsU0FBUyxJQUFJLE9BQU9ELElBQUksS0FBSyxRQUFRO0FBRTFFLE9BQU8sTUFBTUUsU0FBUyxHQUFHQSxDQUN2QkMsTUFBVyxFQUNYVCxLQUFVLEVBQ1ZVLE1BQVcsRUFDWE4sR0FBUSxFQUNSTyxJQUFvQixFQUNwQkMsS0FBWSxFQUNaQyxTQUFjLEVBQ2RDLFNBQWMsRUFDZEMsU0FBYyxLQUNYO0VBQ0hOLE1BQU0sR0FBR25CLGNBQWMsQ0FBQ21CLE1BQU0sQ0FBQztFQUUvQixNQUFNTyxNQUFNLEdBQUdqQixTQUFTLENBQUNDLEtBQUssQ0FBQzs7RUFFL0I7RUFDQTtFQUNBLE9BQU9nQixNQUFNLENBQUNiLEdBQUcsQ0FBQyxDQUFDYyxLQUFLLEVBQUVDLEtBQUssS0FBS04sS0FBSyxDQUFDSCxNQUFNLEVBQUVRLEtBQUssRUFBRVAsTUFBTSxFQUFFTixHQUFHLEVBQUVPLElBQUksQ0FBQyxDQUFDO0FBQzlFLENBQUM7QUFFRCxPQUFPLE1BQU1RLFdBQVcsR0FBR0EsQ0FDekJWLE1BQVcsRUFDWFQsS0FBVSxFQUNWVyxJQUFvQixFQUNwQlMsT0FBWSxLQUNKO0VBQ1JYLE1BQU0sR0FBR25CLGNBQWMsQ0FBQ21CLE1BQU0sQ0FBQztFQUMvQixPQUFPVCxLQUFLLENBQUNHLEdBQUcsR0FDWkgsS0FBSyxDQUFDRyxHQUFHLENBQUNrQixVQUFVLElBQUlELE9BQU8sQ0FBQ1gsTUFBTSxFQUFFWSxVQUFVLENBQUMsQ0FBQyxDQUFDQyxNQUFNLENBQUNqQixXQUFXLENBQUMsR0FDeEVMLEtBQUs7QUFDWCxDQUFDO0FBRUQsT0FBTyxTQUFTdUIsUUFBUUEsQ0FDdEJkLE1BQVcsRUFDWEUsSUFBUyxFQUNUWSxRQUFhLEVBQ2JULFNBQWMsRUFDZFUsUUFBYSxFQUNiO0VBQ0EsT0FBT2pCLFNBQVM7QUFDbEIiLCJpZ25vcmVMaXN0IjpbXX0=