UNPKG

@data-client/normalizr

Version:

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

48 lines 6.3 kB
import { isImmutable, denormalizeImmutable } from './ImmutableUtils.js'; import { INVALID } from '../denormalize/symbol.js'; export const normalize = (schema, input, parent, key, args, visit) => { const object = { ...input }; const keys = Object.keys(schema); for (let i = 0; i < keys.length; i++) { const k = keys[i]; const localSchema = schema[k]; const value = visit(localSchema, input[k], input, k, args); if (value === undefined) { delete object[k]; } else { object[k] = 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; const keys = Object.keys(schema); for (let i = 0; i < keys.length; i++) { const k = keys[i]; const item = unvisit(schema[k], object[k]); if (object[k] !== undefined) { object[k] = item; } if (typeof item === 'symbol') { deleted = true; } } return deleted ? INVALID : object; }; export function queryKey(schema, args, unvisit, delegate) { const resultObject = {}; for (const k of Object.keys(schema)) { resultObject[k] = unvisit(schema[k], args, delegate); } return resultObject; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0ltbXV0YWJsZSIsImRlbm9ybWFsaXplSW1tdXRhYmxlIiwiSU5WQUxJRCIsIm5vcm1hbGl6ZSIsInNjaGVtYSIsImlucHV0IiwicGFyZW50Iiwia2V5IiwiYXJncyIsInZpc2l0Iiwib2JqZWN0Iiwia2V5cyIsIk9iamVjdCIsImkiLCJsZW5ndGgiLCJrIiwibG9jYWxTY2hlbWEiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsImRlbm9ybWFsaXplIiwidW52aXNpdCIsImRlbGV0ZWQiLCJpdGVtIiwicXVlcnlLZXkiLCJkZWxlZ2F0ZSIsInJlc3VsdE9iamVjdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWFzL09iamVjdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0ltbXV0YWJsZSwgZGVub3JtYWxpemVJbW11dGFibGUgfSBmcm9tICcuL0ltbXV0YWJsZVV0aWxzLmpzJztcbmltcG9ydCB7IElOVkFMSUQgfSBmcm9tICcuLi9kZW5vcm1hbGl6ZS9zeW1ib2wuanMnO1xuaW1wb3J0IHR5cGUgeyBWaXNpdCB9IGZyb20gJy4uL2ludGVyZmFjZS5qcyc7XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemUgPSAoXG4gIHNjaGVtYTogYW55LFxuICBpbnB1dDogYW55LFxuICBwYXJlbnQ6IGFueSxcbiAga2V5OiBhbnksXG4gIGFyZ3M6IHJlYWRvbmx5IGFueVtdLFxuICB2aXNpdDogVmlzaXQsXG4pID0+IHtcbiAgY29uc3Qgb2JqZWN0ID0geyAuLi5pbnB1dCB9O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgayA9IGtleXNbaV07XG4gICAgY29uc3QgbG9jYWxTY2hlbWEgPSBzY2hlbWFba107XG4gICAgY29uc3QgdmFsdWUgPSB2aXNpdChsb2NhbFNjaGVtYSwgaW5wdXRba10sIGlucHV0LCBrLCBhcmdzKTtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVsZXRlIG9iamVjdFtrXTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqZWN0W2tdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59O1xuXG5leHBvcnQgY29uc3QgZGVub3JtYWxpemUgPSAoXG4gIHNjaGVtYTogYW55LFxuICBpbnB1dDoge30sXG4gIGFyZ3M6IHJlYWRvbmx5IGFueVtdLFxuICB1bnZpc2l0OiBhbnksXG4pOiBhbnkgPT4ge1xuICBpZiAoaXNJbW11dGFibGUoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGRlbm9ybWFsaXplSW1tdXRhYmxlKHNjaGVtYSwgaW5wdXQsIGFyZ3MsIHVudmlzaXQpO1xuICB9XG5cbiAgY29uc3Qgb2JqZWN0OiBhbnkgPSB7IC4uLmlucHV0IH07XG4gIGxldCBkZWxldGVkID0gZmFsc2U7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBrID0ga2V5c1tpXTtcbiAgICBjb25zdCBpdGVtID0gdW52aXNpdChzY2hlbWFba10sIG9iamVjdFtrXSk7XG4gICAgaWYgKG9iamVjdFtrXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvYmplY3Rba10gPSBpdGVtO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzeW1ib2wnKSB7XG4gICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlbGV0ZWQgPyBJTlZBTElEIDogb2JqZWN0O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5S2V5KFxuICBzY2hlbWE6IGFueSxcbiAgYXJnczogcmVhZG9ubHkgYW55W10sXG4gIHVudmlzaXQ6IGFueSxcbiAgZGVsZWdhdGU6IGFueSxcbikge1xuICBjb25zdCByZXN1bHRPYmplY3Q6IGFueSA9IHt9O1xuICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMoc2NoZW1hKSkge1xuICAgIHJlc3VsdE9iamVjdFtrXSA9IHVudmlzaXQoc2NoZW1hW2tdLCBhcmdzLCBkZWxlZ2F0ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdE9iamVjdDtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsV0FBVyxFQUFFQyxvQkFBb0IsUUFBUSxxQkFBcUI7QUFDdkUsU0FBU0MsT0FBTyxRQUFRLDBCQUEwQjtBQUdsRCxPQUFPLE1BQU1DLFNBQVMsR0FBR0EsQ0FDdkJDLE1BQVcsRUFDWEMsS0FBVSxFQUNWQyxNQUFXLEVBQ1hDLEdBQVEsRUFDUkMsSUFBb0IsRUFDcEJDLEtBQVksS0FDVDtFQUNILE1BQU1DLE1BQU0sR0FBRztJQUFFLEdBQUdMO0VBQU0sQ0FBQztFQUMzQixNQUFNTSxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0QsSUFBSSxDQUFDUCxNQUFNLENBQUM7RUFDaEMsS0FBSyxJQUFJUyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLElBQUksQ0FBQ0csTUFBTSxFQUFFRCxDQUFDLEVBQUUsRUFBRTtJQUNwQyxNQUFNRSxDQUFDLEdBQUdKLElBQUksQ0FBQ0UsQ0FBQyxDQUFDO0lBQ2pCLE1BQU1HLFdBQVcsR0FBR1osTUFBTSxDQUFDVyxDQUFDLENBQUM7SUFDN0IsTUFBTUUsS0FBSyxHQUFHUixLQUFLLENBQUNPLFdBQVcsRUFBRVgsS0FBSyxDQUFDVSxDQUFDLENBQUMsRUFBRVYsS0FBSyxFQUFFVSxDQUFDLEVBQUVQLElBQUksQ0FBQztJQUMxRCxJQUFJUyxLQUFLLEtBQUtDLFNBQVMsRUFBRTtNQUN2QixPQUFPUixNQUFNLENBQUNLLENBQUMsQ0FBQztJQUNsQixDQUFDLE1BQU07TUFDTEwsTUFBTSxDQUFDSyxDQUFDLENBQUMsR0FBR0UsS0FBSztJQUNuQjtFQUNGO0VBQ0EsT0FBT1AsTUFBTTtBQUNmLENBQUM7QUFFRCxPQUFPLE1BQU1TLFdBQVcsR0FBR0EsQ0FDekJmLE1BQVcsRUFDWEMsS0FBUyxFQUNURyxJQUFvQixFQUNwQlksT0FBWSxLQUNKO0VBQ1IsSUFBSXBCLFdBQVcsQ0FBQ0ssS0FBSyxDQUFDLEVBQUU7SUFDdEIsT0FBT0osb0JBQW9CLENBQUNHLE1BQU0sRUFBRUMsS0FBSyxFQUFFRyxJQUFJLEVBQUVZLE9BQU8sQ0FBQztFQUMzRDtFQUVBLE1BQU1WLE1BQVcsR0FBRztJQUFFLEdBQUdMO0VBQU0sQ0FBQztFQUNoQyxJQUFJZ0IsT0FBTyxHQUFHLEtBQUs7RUFDbkIsTUFBTVYsSUFBSSxHQUFHQyxNQUFNLENBQUNELElBQUksQ0FBQ1AsTUFBTSxDQUFDO0VBQ2hDLEtBQUssSUFBSVMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRixJQUFJLENBQUNHLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7SUFDcEMsTUFBTUUsQ0FBQyxHQUFHSixJQUFJLENBQUNFLENBQUMsQ0FBQztJQUNqQixNQUFNUyxJQUFJLEdBQUdGLE9BQU8sQ0FBQ2hCLE1BQU0sQ0FBQ1csQ0FBQyxDQUFDLEVBQUVMLE1BQU0sQ0FBQ0ssQ0FBQyxDQUFDLENBQUM7SUFDMUMsSUFBSUwsTUFBTSxDQUFDSyxDQUFDLENBQUMsS0FBS0csU0FBUyxFQUFFO01BQzNCUixNQUFNLENBQUNLLENBQUMsQ0FBQyxHQUFHTyxJQUFJO0lBQ2xCO0lBQ0EsSUFBSSxPQUFPQSxJQUFJLEtBQUssUUFBUSxFQUFFO01BQzVCRCxPQUFPLEdBQUcsSUFBSTtJQUNoQjtFQUNGO0VBQ0EsT0FBT0EsT0FBTyxHQUFHbkIsT0FBTyxHQUFHUSxNQUFNO0FBQ25DLENBQUM7QUFFRCxPQUFPLFNBQVNhLFFBQVFBLENBQ3RCbkIsTUFBVyxFQUNYSSxJQUFvQixFQUNwQlksT0FBWSxFQUNaSSxRQUFhLEVBQ2I7RUFDQSxNQUFNQyxZQUFpQixHQUFHLENBQUMsQ0FBQztFQUM1QixLQUFLLE1BQU1WLENBQUMsSUFBSUgsTUFBTSxDQUFDRCxJQUFJLENBQUNQLE1BQU0sQ0FBQyxFQUFFO0lBQ25DcUIsWUFBWSxDQUFDVixDQUFDLENBQUMsR0FBR0ssT0FBTyxDQUFDaEIsTUFBTSxDQUFDVyxDQUFDLENBQUMsRUFBRVAsSUFBSSxFQUFFZ0IsUUFBUSxDQUFDO0VBQ3REO0VBQ0EsT0FBT0MsWUFBWTtBQUNyQiIsImlnbm9yZUxpc3QiOltdfQ==