UNPKG

@data-client/normalizr

Version:

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

45 lines 6.38 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) => { const object = _extends({}, 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 = _extends({}, 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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0ltbXV0YWJsZSIsImRlbm9ybWFsaXplSW1tdXRhYmxlIiwiSU5WQUxJRCIsIm5vcm1hbGl6ZSIsInNjaGVtYSIsImlucHV0IiwicGFyZW50Iiwia2V5IiwiYXJncyIsInZpc2l0Iiwib2JqZWN0IiwiX2V4dGVuZHMiLCJrZXlzIiwiT2JqZWN0IiwiaSIsImxlbmd0aCIsImsiLCJsb2NhbFNjaGVtYSIsInZhbHVlIiwidW5kZWZpbmVkIiwiZGVub3JtYWxpemUiLCJ1bnZpc2l0IiwiZGVsZXRlZCIsIml0ZW0iLCJxdWVyeUtleSIsImRlbGVnYXRlIiwicmVzdWx0T2JqZWN0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjaGVtYXMvT2JqZWN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzSW1tdXRhYmxlLCBkZW5vcm1hbGl6ZUltbXV0YWJsZSB9IGZyb20gJy4vSW1tdXRhYmxlVXRpbHMuanMnO1xuaW1wb3J0IHsgSU5WQUxJRCB9IGZyb20gJy4uL2Rlbm9ybWFsaXplL3N5bWJvbC5qcyc7XG5pbXBvcnQgdHlwZSB7IFZpc2l0IH0gZnJvbSAnLi4vaW50ZXJmYWNlLmpzJztcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZSA9IChcbiAgc2NoZW1hOiBhbnksXG4gIGlucHV0OiBhbnksXG4gIHBhcmVudDogYW55LFxuICBrZXk6IGFueSxcbiAgYXJnczogcmVhZG9ubHkgYW55W10sXG4gIHZpc2l0OiBWaXNpdCxcbikgPT4ge1xuICBjb25zdCBvYmplY3QgPSB7IC4uLmlucHV0IH07XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBrID0ga2V5c1tpXTtcbiAgICBjb25zdCBsb2NhbFNjaGVtYSA9IHNjaGVtYVtrXTtcbiAgICBjb25zdCB2YWx1ZSA9IHZpc2l0KGxvY2FsU2NoZW1hLCBpbnB1dFtrXSwgaW5wdXQsIGssIGFyZ3MpO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgb2JqZWN0W2tdO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmplY3Rba10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZW5vcm1hbGl6ZSA9IChcbiAgc2NoZW1hOiBhbnksXG4gIGlucHV0OiB7fSxcbiAgYXJnczogcmVhZG9ubHkgYW55W10sXG4gIHVudmlzaXQ6IGFueSxcbik6IGFueSA9PiB7XG4gIGlmIChpc0ltbXV0YWJsZShpbnB1dCkpIHtcbiAgICByZXR1cm4gZGVub3JtYWxpemVJbW11dGFibGUoc2NoZW1hLCBpbnB1dCwgYXJncywgdW52aXNpdCk7XG4gIH1cblxuICBjb25zdCBvYmplY3Q6IGFueSA9IHsgLi4uaW5wdXQgfTtcbiAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNjaGVtYSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGsgPSBrZXlzW2ldO1xuICAgIGNvbnN0IGl0ZW0gPSB1bnZpc2l0KHNjaGVtYVtrXSwgb2JqZWN0W2tdKTtcbiAgICBpZiAob2JqZWN0W2tdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9iamVjdFtrXSA9IGl0ZW07XG4gICAgfVxuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVsZXRlZCA/IElOVkFMSUQgOiBvYmplY3Q7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlLZXkoXG4gIHNjaGVtYTogYW55LFxuICBhcmdzOiByZWFkb25seSBhbnlbXSxcbiAgdW52aXNpdDogYW55LFxuICBkZWxlZ2F0ZTogYW55LFxuKSB7XG4gIGNvbnN0IHJlc3VsdE9iamVjdDogYW55ID0ge307XG4gIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhzY2hlbWEpKSB7XG4gICAgcmVzdWx0T2JqZWN0W2tdID0gdW52aXNpdChzY2hlbWFba10sIGFyZ3MsIGRlbGVnYXRlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0T2JqZWN0O1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBU0EsV0FBVyxFQUFFQyxvQkFBb0IsUUFBUSxxQkFBcUI7QUFDdkUsU0FBU0MsT0FBTyxRQUFRLDBCQUEwQjtBQUdsRCxPQUFPLE1BQU1DLFNBQVMsR0FBR0EsQ0FDdkJDLE1BQVcsRUFDWEMsS0FBVSxFQUNWQyxNQUFXLEVBQ1hDLEdBQVEsRUFDUkMsSUFBb0IsRUFDcEJDLEtBQVksS0FDVDtFQUNILE1BQU1DLE1BQU0sR0FBQUMsUUFBQSxLQUFRTixLQUFLLENBQUU7RUFDM0IsTUFBTU8sSUFBSSxHQUFHQyxNQUFNLENBQUNELElBQUksQ0FBQ1IsTUFBTSxDQUFDO0VBQ2hDLEtBQUssSUFBSVUsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRixJQUFJLENBQUNHLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7SUFDcEMsTUFBTUUsQ0FBQyxHQUFHSixJQUFJLENBQUNFLENBQUMsQ0FBQztJQUNqQixNQUFNRyxXQUFXLEdBQUdiLE1BQU0sQ0FBQ1ksQ0FBQyxDQUFDO0lBQzdCLE1BQU1FLEtBQUssR0FBR1QsS0FBSyxDQUFDUSxXQUFXLEVBQUVaLEtBQUssQ0FBQ1csQ0FBQyxDQUFDLEVBQUVYLEtBQUssRUFBRVcsQ0FBQyxFQUFFUixJQUFJLENBQUM7SUFDMUQsSUFBSVUsS0FBSyxLQUFLQyxTQUFTLEVBQUU7TUFDdkIsT0FBT1QsTUFBTSxDQUFDTSxDQUFDLENBQUM7SUFDbEIsQ0FBQyxNQUFNO01BQ0xOLE1BQU0sQ0FBQ00sQ0FBQyxDQUFDLEdBQUdFLEtBQUs7SUFDbkI7RUFDRjtFQUNBLE9BQU9SLE1BQU07QUFDZixDQUFDO0FBRUQsT0FBTyxNQUFNVSxXQUFXLEdBQUdBLENBQ3pCaEIsTUFBVyxFQUNYQyxLQUFTLEVBQ1RHLElBQW9CLEVBQ3BCYSxPQUFZLEtBQ0o7RUFDUixJQUFJckIsV0FBVyxDQUFDSyxLQUFLLENBQUMsRUFBRTtJQUN0QixPQUFPSixvQkFBb0IsQ0FBQ0csTUFBTSxFQUFFQyxLQUFLLEVBQUVHLElBQUksRUFBRWEsT0FBTyxDQUFDO0VBQzNEO0VBRUEsTUFBTVgsTUFBVyxHQUFBQyxRQUFBLEtBQVFOLEtBQUssQ0FBRTtFQUNoQyxJQUFJaUIsT0FBTyxHQUFHLEtBQUs7RUFDbkIsTUFBTVYsSUFBSSxHQUFHQyxNQUFNLENBQUNELElBQUksQ0FBQ1IsTUFBTSxDQUFDO0VBQ2hDLEtBQUssSUFBSVUsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRixJQUFJLENBQUNHLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7SUFDcEMsTUFBTUUsQ0FBQyxHQUFHSixJQUFJLENBQUNFLENBQUMsQ0FBQztJQUNqQixNQUFNUyxJQUFJLEdBQUdGLE9BQU8sQ0FBQ2pCLE1BQU0sQ0FBQ1ksQ0FBQyxDQUFDLEVBQUVOLE1BQU0sQ0FBQ00sQ0FBQyxDQUFDLENBQUM7SUFDMUMsSUFBSU4sTUFBTSxDQUFDTSxDQUFDLENBQUMsS0FBS0csU0FBUyxFQUFFO01BQzNCVCxNQUFNLENBQUNNLENBQUMsQ0FBQyxHQUFHTyxJQUFJO0lBQ2xCO0lBQ0EsSUFBSSxPQUFPQSxJQUFJLEtBQUssUUFBUSxFQUFFO01BQzVCRCxPQUFPLEdBQUcsSUFBSTtJQUNoQjtFQUNGO0VBQ0EsT0FBT0EsT0FBTyxHQUFHcEIsT0FBTyxHQUFHUSxNQUFNO0FBQ25DLENBQUM7QUFFRCxPQUFPLFNBQVNjLFFBQVFBLENBQ3RCcEIsTUFBVyxFQUNYSSxJQUFvQixFQUNwQmEsT0FBWSxFQUNaSSxRQUFhLEVBQ2I7RUFDQSxNQUFNQyxZQUFpQixHQUFHLENBQUMsQ0FBQztFQUM1QixLQUFLLE1BQU1WLENBQUMsSUFBSUgsTUFBTSxDQUFDRCxJQUFJLENBQUNSLE1BQU0sQ0FBQyxFQUFFO0lBQ25Dc0IsWUFBWSxDQUFDVixDQUFDLENBQUMsR0FBR0ssT0FBTyxDQUFDakIsTUFBTSxDQUFDWSxDQUFDLENBQUMsRUFBRVIsSUFBSSxFQUFFaUIsUUFBUSxDQUFDO0VBQ3REO0VBQ0EsT0FBT0MsWUFBWTtBQUNyQiIsImlnbm9yZUxpc3QiOltdfQ==