@data-client/normalizr
Version:
Normalizes and denormalizes JSON according to schema for Redux and Flux applications
44 lines • 6.06 kB
JavaScript
import { isImmutable, denormalizeImmutable } from './ImmutableUtils.js';
import { INVALID } from '../denormalize/symbol.js';
export const normalize = (schema, input, parent, key, args, visit, addEntity, getEntity, checkLoop) => {
const object = {
...input
};
Object.keys(schema).forEach(key => {
const localSchema = schema[key];
const value = visit(localSchema, input[key], input, key, args);
if (value === undefined) {
delete object[key];
} else {
object[key] = value;
}
});
return object;
};
export const denormalize = (schema, input, args, unvisit) => {
if (isImmutable(input)) {
return denormalizeImmutable(schema, input, args, unvisit);
}
const object = {
...input
};
let deleted = false;
Object.keys(schema).forEach(key => {
const item = unvisit(schema[key], object[key]);
if (object[key] !== undefined) {
object[key] = item;
}
if (typeof item === 'symbol') {
deleted = true;
}
});
return deleted ? INVALID : object;
};
export function queryKey(schema, args, queryKey, getEntity, getIndex) {
const resultObject = {};
for (const k of Object.keys(schema)) {
resultObject[k] = queryKey(schema[k], args, getEntity, getIndex);
}
return resultObject;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0ltbXV0YWJsZSIsImRlbm9ybWFsaXplSW1tdXRhYmxlIiwiSU5WQUxJRCIsIm5vcm1hbGl6ZSIsInNjaGVtYSIsImlucHV0IiwicGFyZW50Iiwia2V5IiwiYXJncyIsInZpc2l0IiwiYWRkRW50aXR5IiwiZ2V0RW50aXR5IiwiY2hlY2tMb29wIiwib2JqZWN0IiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJsb2NhbFNjaGVtYSIsInZhbHVlIiwidW5kZWZpbmVkIiwiZGVub3JtYWxpemUiLCJ1bnZpc2l0IiwiZGVsZXRlZCIsIml0ZW0iLCJxdWVyeUtleSIsImdldEluZGV4IiwicmVzdWx0T2JqZWN0IiwiayJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWFzL09iamVjdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0ltbXV0YWJsZSwgZGVub3JtYWxpemVJbW11dGFibGUgfSBmcm9tICcuL0ltbXV0YWJsZVV0aWxzLmpzJztcbmltcG9ydCB7IElOVkFMSUQgfSBmcm9tICcuLi9kZW5vcm1hbGl6ZS9zeW1ib2wuanMnO1xuaW1wb3J0IHR5cGUgeyBWaXNpdCB9IGZyb20gJy4uL2ludGVyZmFjZS5qcyc7XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemUgPSAoXG4gIHNjaGVtYTogYW55LFxuICBpbnB1dDogYW55LFxuICBwYXJlbnQ6IGFueSxcbiAga2V5OiBhbnksXG4gIGFyZ3M6IHJlYWRvbmx5IGFueVtdLFxuICB2aXNpdDogVmlzaXQsXG4gIGFkZEVudGl0eTogYW55LFxuICBnZXRFbnRpdHk6IGFueSxcbiAgY2hlY2tMb29wOiBhbnksXG4pID0+IHtcbiAgY29uc3Qgb2JqZWN0ID0geyAuLi5pbnB1dCB9O1xuICBPYmplY3Qua2V5cyhzY2hlbWEpLmZvckVhY2goa2V5ID0+IHtcbiAgICBjb25zdCBsb2NhbFNjaGVtYSA9IHNjaGVtYVtrZXldO1xuICAgIGNvbnN0IHZhbHVlID0gdmlzaXQobG9jYWxTY2hlbWEsIGlucHV0W2tleV0sIGlucHV0LCBrZXksIGFyZ3MpO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgb2JqZWN0W2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZW5vcm1hbGl6ZSA9IChcbiAgc2NoZW1hOiBhbnksXG4gIGlucHV0OiB7fSxcbiAgYXJnczogcmVhZG9ubHkgYW55W10sXG4gIHVudmlzaXQ6IGFueSxcbik6IGFueSA9PiB7XG4gIGlmIChpc0ltbXV0YWJsZShpbnB1dCkpIHtcbiAgICByZXR1cm4gZGVub3JtYWxpemVJbW11dGFibGUoc2NoZW1hLCBpbnB1dCwgYXJncywgdW52aXNpdCk7XG4gIH1cblxuICBjb25zdCBvYmplY3QgPSB7IC4uLmlucHV0IH07XG4gIGxldCBkZWxldGVkID0gZmFsc2U7XG4gIE9iamVjdC5rZXlzKHNjaGVtYSkuZm9yRWFjaChrZXkgPT4ge1xuICAgIGNvbnN0IGl0ZW0gPSB1bnZpc2l0KHNjaGVtYVtrZXldLCBvYmplY3Rba2V5XSk7XG4gICAgaWYgKG9iamVjdFtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9iamVjdFtrZXldID0gaXRlbTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3ltYm9sJykge1xuICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRlbGV0ZWQgPyBJTlZBTElEIDogb2JqZWN0O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5S2V5KFxuICBzY2hlbWE6IGFueSxcbiAgYXJnczogcmVhZG9ubHkgYW55W10sXG4gIHF1ZXJ5S2V5OiBhbnksXG4gIGdldEVudGl0eTogYW55LFxuICBnZXRJbmRleDogYW55LFxuKSB7XG4gIGNvbnN0IHJlc3VsdE9iamVjdDogYW55ID0ge307XG4gIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhzY2hlbWEpKSB7XG4gICAgcmVzdWx0T2JqZWN0W2tdID0gcXVlcnlLZXkoc2NoZW1hW2tdLCBhcmdzLCBnZXRFbnRpdHksIGdldEluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0T2JqZWN0O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxXQUFXLEVBQUVDLG9CQUFvQixRQUFRLHFCQUFxQjtBQUN2RSxTQUFTQyxPQUFPLFFBQVEsMEJBQTBCO0FBR2xELE9BQU8sTUFBTUMsU0FBUyxHQUFHQSxDQUN2QkMsTUFBVyxFQUNYQyxLQUFVLEVBQ1ZDLE1BQVcsRUFDWEMsR0FBUSxFQUNSQyxJQUFvQixFQUNwQkMsS0FBWSxFQUNaQyxTQUFjLEVBQ2RDLFNBQWMsRUFDZEMsU0FBYyxLQUNYO0VBQ0gsTUFBTUMsTUFBTSxHQUFHO0lBQUUsR0FBR1I7RUFBTSxDQUFDO0VBQzNCUyxNQUFNLENBQUNDLElBQUksQ0FBQ1gsTUFBTSxDQUFDLENBQUNZLE9BQU8sQ0FBQ1QsR0FBRyxJQUFJO0lBQ2pDLE1BQU1VLFdBQVcsR0FBR2IsTUFBTSxDQUFDRyxHQUFHLENBQUM7SUFDL0IsTUFBTVcsS0FBSyxHQUFHVCxLQUFLLENBQUNRLFdBQVcsRUFBRVosS0FBSyxDQUFDRSxHQUFHLENBQUMsRUFBRUYsS0FBSyxFQUFFRSxHQUFHLEVBQUVDLElBQUksQ0FBQztJQUM5RCxJQUFJVSxLQUFLLEtBQUtDLFNBQVMsRUFBRTtNQUN2QixPQUFPTixNQUFNLENBQUNOLEdBQUcsQ0FBQztJQUNwQixDQUFDLE1BQU07TUFDTE0sTUFBTSxDQUFDTixHQUFHLENBQUMsR0FBR1csS0FBSztJQUNyQjtFQUNGLENBQUMsQ0FBQztFQUNGLE9BQU9MLE1BQU07QUFDZixDQUFDO0FBRUQsT0FBTyxNQUFNTyxXQUFXLEdBQUdBLENBQ3pCaEIsTUFBVyxFQUNYQyxLQUFTLEVBQ1RHLElBQW9CLEVBQ3BCYSxPQUFZLEtBQ0o7RUFDUixJQUFJckIsV0FBVyxDQUFDSyxLQUFLLENBQUMsRUFBRTtJQUN0QixPQUFPSixvQkFBb0IsQ0FBQ0csTUFBTSxFQUFFQyxLQUFLLEVBQUVHLElBQUksRUFBRWEsT0FBTyxDQUFDO0VBQzNEO0VBRUEsTUFBTVIsTUFBTSxHQUFHO0lBQUUsR0FBR1I7RUFBTSxDQUFDO0VBQzNCLElBQUlpQixPQUFPLEdBQUcsS0FBSztFQUNuQlIsTUFBTSxDQUFDQyxJQUFJLENBQUNYLE1BQU0sQ0FBQyxDQUFDWSxPQUFPLENBQUNULEdBQUcsSUFBSTtJQUNqQyxNQUFNZ0IsSUFBSSxHQUFHRixPQUFPLENBQUNqQixNQUFNLENBQUNHLEdBQUcsQ0FBQyxFQUFFTSxNQUFNLENBQUNOLEdBQUcsQ0FBQyxDQUFDO0lBQzlDLElBQUlNLE1BQU0sQ0FBQ04sR0FBRyxDQUFDLEtBQUtZLFNBQVMsRUFBRTtNQUM3Qk4sTUFBTSxDQUFDTixHQUFHLENBQUMsR0FBR2dCLElBQUk7SUFDcEI7SUFDQSxJQUFJLE9BQU9BLElBQUksS0FBSyxRQUFRLEVBQUU7TUFDNUJELE9BQU8sR0FBRyxJQUFJO0lBQ2hCO0VBQ0YsQ0FBQyxDQUFDO0VBQ0YsT0FBT0EsT0FBTyxHQUFHcEIsT0FBTyxHQUFHVyxNQUFNO0FBQ25DLENBQUM7QUFFRCxPQUFPLFNBQVNXLFFBQVFBLENBQ3RCcEIsTUFBVyxFQUNYSSxJQUFvQixFQUNwQmdCLFFBQWEsRUFDYmIsU0FBYyxFQUNkYyxRQUFhLEVBQ2I7RUFDQSxNQUFNQyxZQUFpQixHQUFHLENBQUMsQ0FBQztFQUM1QixLQUFLLE1BQU1DLENBQUMsSUFBSWIsTUFBTSxDQUFDQyxJQUFJLENBQUNYLE1BQU0sQ0FBQyxFQUFFO0lBQ25Dc0IsWUFBWSxDQUFDQyxDQUFDLENBQUMsR0FBR0gsUUFBUSxDQUFDcEIsTUFBTSxDQUFDdUIsQ0FBQyxDQUFDLEVBQUVuQixJQUFJLEVBQUVHLFNBQVMsRUFBRWMsUUFBUSxDQUFDO0VBQ2xFO0VBQ0EsT0FBT0MsWUFBWTtBQUNyQiIsImlnbm9yZUxpc3QiOltdfQ==