UNPKG

@data-client/normalizr

Version:

Normalizes and denormalizes JSON according to schema for Redux and Flux applications

41 lines 6.14 kB
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