@data-client/normalizr
Version:
Normalizes and denormalizes JSON according to schema for Redux and Flux applications
41 lines • 6.14 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
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 = _extends({}, 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 = _extends({}, 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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0ltbXV0YWJsZSIsImRlbm9ybWFsaXplSW1tdXRhYmxlIiwiSU5WQUxJRCIsIm5vcm1hbGl6ZSIsInNjaGVtYSIsImlucHV0IiwicGFyZW50Iiwia2V5IiwiYXJncyIsInZpc2l0IiwiYWRkRW50aXR5IiwiZ2V0RW50aXR5IiwiY2hlY2tMb29wIiwib2JqZWN0IiwiX2V4dGVuZHMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImxvY2FsU2NoZW1hIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJkZW5vcm1hbGl6ZSIsInVudmlzaXQiLCJkZWxldGVkIiwiaXRlbSIsInF1ZXJ5S2V5IiwiZ2V0SW5kZXgiLCJyZXN1bHRPYmplY3QiLCJrIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjaGVtYXMvT2JqZWN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzSW1tdXRhYmxlLCBkZW5vcm1hbGl6ZUltbXV0YWJsZSB9IGZyb20gJy4vSW1tdXRhYmxlVXRpbHMuanMnO1xuaW1wb3J0IHsgSU5WQUxJRCB9IGZyb20gJy4uL2Rlbm9ybWFsaXplL3N5bWJvbC5qcyc7XG5pbXBvcnQgdHlwZSB7IFZpc2l0IH0gZnJvbSAnLi4vaW50ZXJmYWNlLmpzJztcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZSA9IChcbiAgc2NoZW1hOiBhbnksXG4gIGlucHV0OiBhbnksXG4gIHBhcmVudDogYW55LFxuICBrZXk6IGFueSxcbiAgYXJnczogcmVhZG9ubHkgYW55W10sXG4gIHZpc2l0OiBWaXNpdCxcbiAgYWRkRW50aXR5OiBhbnksXG4gIGdldEVudGl0eTogYW55LFxuICBjaGVja0xvb3A6IGFueSxcbikgPT4ge1xuICBjb25zdCBvYmplY3QgPSB7IC4uLmlucHV0IH07XG4gIE9iamVjdC5rZXlzKHNjaGVtYSkuZm9yRWFjaChrZXkgPT4ge1xuICAgIGNvbnN0IGxvY2FsU2NoZW1hID0gc2NoZW1hW2tleV07XG4gICAgY29uc3QgdmFsdWUgPSB2aXNpdChsb2NhbFNjaGVtYSwgaW5wdXRba2V5XSwgaW5wdXQsIGtleSwgYXJncyk7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSBvYmplY3Rba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb2JqZWN0O1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbm9ybWFsaXplID0gKFxuICBzY2hlbWE6IGFueSxcbiAgaW5wdXQ6IHt9LFxuICBhcmdzOiByZWFkb25seSBhbnlbXSxcbiAgdW52aXNpdDogYW55LFxuKTogYW55ID0+IHtcbiAgaWYgKGlzSW1tdXRhYmxlKGlucHV0KSkge1xuICAgIHJldHVybiBkZW5vcm1hbGl6ZUltbXV0YWJsZShzY2hlbWEsIGlucHV0LCBhcmdzLCB1bnZpc2l0KTtcbiAgfVxuXG4gIGNvbnN0IG9iamVjdCA9IHsgLi4uaW5wdXQgfTtcbiAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcbiAgT2JqZWN0LmtleXMoc2NoZW1hKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgY29uc3QgaXRlbSA9IHVudmlzaXQoc2NoZW1hW2tleV0sIG9iamVjdFtrZXldKTtcbiAgICBpZiAob2JqZWN0W2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgb2JqZWN0W2tleV0gPSBpdGVtO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzeW1ib2wnKSB7XG4gICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZGVsZXRlZCA/IElOVkFMSUQgOiBvYmplY3Q7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlLZXkoXG4gIHNjaGVtYTogYW55LFxuICBhcmdzOiByZWFkb25seSBhbnlbXSxcbiAgcXVlcnlLZXk6IGFueSxcbiAgZ2V0RW50aXR5OiBhbnksXG4gIGdldEluZGV4OiBhbnksXG4pIHtcbiAgY29uc3QgcmVzdWx0T2JqZWN0OiBhbnkgPSB7fTtcbiAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHNjaGVtYSkpIHtcbiAgICByZXN1bHRPYmplY3Rba10gPSBxdWVyeUtleShzY2hlbWFba10sIGFyZ3MsIGdldEVudGl0eSwgZ2V0SW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHRPYmplY3Q7XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFTQSxXQUFXLEVBQUVDLG9CQUFvQixRQUFRLHFCQUFxQjtBQUN2RSxTQUFTQyxPQUFPLFFBQVEsMEJBQTBCO0FBR2xELE9BQU8sTUFBTUMsU0FBUyxHQUFHQSxDQUN2QkMsTUFBVyxFQUNYQyxLQUFVLEVBQ1ZDLE1BQVcsRUFDWEMsR0FBUSxFQUNSQyxJQUFvQixFQUNwQkMsS0FBWSxFQUNaQyxTQUFjLEVBQ2RDLFNBQWMsRUFDZEMsU0FBYyxLQUNYO0VBQ0gsTUFBTUMsTUFBTSxHQUFBQyxRQUFBLEtBQVFULEtBQUssQ0FBRTtFQUMzQlUsTUFBTSxDQUFDQyxJQUFJLENBQUNaLE1BQU0sQ0FBQyxDQUFDYSxPQUFPLENBQUNWLEdBQUcsSUFBSTtJQUNqQyxNQUFNVyxXQUFXLEdBQUdkLE1BQU0sQ0FBQ0csR0FBRyxDQUFDO0lBQy9CLE1BQU1ZLEtBQUssR0FBR1YsS0FBSyxDQUFDUyxXQUFXLEVBQUViLEtBQUssQ0FBQ0UsR0FBRyxDQUFDLEVBQUVGLEtBQUssRUFBRUUsR0FBRyxFQUFFQyxJQUFJLENBQUM7SUFDOUQsSUFBSVcsS0FBSyxLQUFLQyxTQUFTLEVBQUU7TUFDdkIsT0FBT1AsTUFBTSxDQUFDTixHQUFHLENBQUM7SUFDcEIsQ0FBQyxNQUFNO01BQ0xNLE1BQU0sQ0FBQ04sR0FBRyxDQUFDLEdBQUdZLEtBQUs7SUFDckI7RUFDRixDQUFDLENBQUM7RUFDRixPQUFPTixNQUFNO0FBQ2YsQ0FBQztBQUVELE9BQU8sTUFBTVEsV0FBVyxHQUFHQSxDQUN6QmpCLE1BQVcsRUFDWEMsS0FBUyxFQUNURyxJQUFvQixFQUNwQmMsT0FBWSxLQUNKO0VBQ1IsSUFBSXRCLFdBQVcsQ0FBQ0ssS0FBSyxDQUFDLEVBQUU7SUFDdEIsT0FBT0osb0JBQW9CLENBQUNHLE1BQU0sRUFBRUMsS0FBSyxFQUFFRyxJQUFJLEVBQUVjLE9BQU8sQ0FBQztFQUMzRDtFQUVBLE1BQU1ULE1BQU0sR0FBQUMsUUFBQSxLQUFRVCxLQUFLLENBQUU7RUFDM0IsSUFBSWtCLE9BQU8sR0FBRyxLQUFLO0VBQ25CUixNQUFNLENBQUNDLElBQUksQ0FBQ1osTUFBTSxDQUFDLENBQUNhLE9BQU8sQ0FBQ1YsR0FBRyxJQUFJO0lBQ2pDLE1BQU1pQixJQUFJLEdBQUdGLE9BQU8sQ0FBQ2xCLE1BQU0sQ0FBQ0csR0FBRyxDQUFDLEVBQUVNLE1BQU0sQ0FBQ04sR0FBRyxDQUFDLENBQUM7SUFDOUMsSUFBSU0sTUFBTSxDQUFDTixHQUFHLENBQUMsS0FBS2EsU0FBUyxFQUFFO01BQzdCUCxNQUFNLENBQUNOLEdBQUcsQ0FBQyxHQUFHaUIsSUFBSTtJQUNwQjtJQUNBLElBQUksT0FBT0EsSUFBSSxLQUFLLFFBQVEsRUFBRTtNQUM1QkQsT0FBTyxHQUFHLElBQUk7SUFDaEI7RUFDRixDQUFDLENBQUM7RUFDRixPQUFPQSxPQUFPLEdBQUdyQixPQUFPLEdBQUdXLE1BQU07QUFDbkMsQ0FBQztBQUVELE9BQU8sU0FBU1ksUUFBUUEsQ0FDdEJyQixNQUFXLEVBQ1hJLElBQW9CLEVBQ3BCaUIsUUFBYSxFQUNiZCxTQUFjLEVBQ2RlLFFBQWEsRUFDYjtFQUNBLE1BQU1DLFlBQWlCLEdBQUcsQ0FBQyxDQUFDO0VBQzVCLEtBQUssTUFBTUMsQ0FBQyxJQUFJYixNQUFNLENBQUNDLElBQUksQ0FBQ1osTUFBTSxDQUFDLEVBQUU7SUFDbkN1QixZQUFZLENBQUNDLENBQUMsQ0FBQyxHQUFHSCxRQUFRLENBQUNyQixNQUFNLENBQUN3QixDQUFDLENBQUMsRUFBRXBCLElBQUksRUFBRUcsU0FBUyxFQUFFZSxRQUFRLENBQUM7RUFDbEU7RUFDQSxPQUFPQyxZQUFZO0FBQ3JCIiwiaWdub3JlTGlzdCI6W119