@data-client/normalizr
Version:
Normalizes and denormalizes JSON according to schema for Redux and Flux applications
21 lines • 3.6 kB
JavaScript
import { normalize as arrayNormalize } from '../schemas/Array.js';
import { normalize as objectNormalize } from '../schemas/Object.js';
export const getVisit = delegate => {
const visit = (schema, value, parent, key, args) => {
if (!value || !schema) {
return value;
}
if (schema.normalize && typeof schema.normalize === 'function') {
if (typeof value !== 'object') {
if (schema.pk) return `${value}`;
return value;
}
return schema.normalize(value, parent, key, args, visit, delegate);
}
if (typeof value !== 'object' || typeof schema !== 'object') return value;
const method = Array.isArray(schema) ? arrayNormalize : objectNormalize;
return method(schema, value, parent, key, args, visit);
};
return visit;
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemUiLCJhcnJheU5vcm1hbGl6ZSIsIm9iamVjdE5vcm1hbGl6ZSIsImdldFZpc2l0IiwiZGVsZWdhdGUiLCJ2aXNpdCIsInNjaGVtYSIsInZhbHVlIiwicGFyZW50Iiwia2V5IiwiYXJncyIsInBrIiwibWV0aG9kIiwiQXJyYXkiLCJpc0FycmF5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL25vcm1hbGl6ZS9nZXRWaXNpdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IElOb3JtYWxpemVEZWxlZ2F0ZSB9IGZyb20gJy4uL2ludGVyZmFjZS5qcyc7XG5pbXBvcnQgeyBub3JtYWxpemUgYXMgYXJyYXlOb3JtYWxpemUgfSBmcm9tICcuLi9zY2hlbWFzL0FycmF5LmpzJztcbmltcG9ydCB7IG5vcm1hbGl6ZSBhcyBvYmplY3ROb3JtYWxpemUgfSBmcm9tICcuLi9zY2hlbWFzL09iamVjdC5qcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRWaXNpdCA9IChkZWxlZ2F0ZTogSU5vcm1hbGl6ZURlbGVnYXRlKSA9PiB7XG4gIGNvbnN0IHZpc2l0ID0gKFxuICAgIHNjaGVtYTogYW55LFxuICAgIHZhbHVlOiBhbnksXG4gICAgcGFyZW50OiBhbnksXG4gICAga2V5OiBhbnksXG4gICAgYXJnczogcmVhZG9ubHkgYW55W10sXG4gICkgPT4ge1xuICAgIGlmICghdmFsdWUgfHwgIXNjaGVtYSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEubm9ybWFsaXplICYmIHR5cGVvZiBzY2hlbWEubm9ybWFsaXplID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoc2NoZW1hLnBrKSByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNjaGVtYS5ub3JtYWxpemUodmFsdWUsIHBhcmVudCwga2V5LCBhcmdzLCB2aXNpdCwgZGVsZWdhdGUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBzY2hlbWEgIT09ICdvYmplY3QnKSByZXR1cm4gdmFsdWU7XG5cbiAgICBjb25zdCBtZXRob2QgPSBBcnJheS5pc0FycmF5KHNjaGVtYSkgPyBhcnJheU5vcm1hbGl6ZSA6IG9iamVjdE5vcm1hbGl6ZTtcbiAgICByZXR1cm4gbWV0aG9kKHNjaGVtYSwgdmFsdWUsIHBhcmVudCwga2V5LCBhcmdzLCB2aXNpdCk7XG4gIH07XG4gIHJldHVybiB2aXNpdDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUNBLFNBQVNBLFNBQVMsSUFBSUMsY0FBYyxRQUFRLHFCQUFxQjtBQUNqRSxTQUFTRCxTQUFTLElBQUlFLGVBQWUsUUFBUSxzQkFBc0I7QUFFbkUsT0FBTyxNQUFNQyxRQUFRLEdBQUlDLFFBQTRCLElBQUs7RUFDeEQsTUFBTUMsS0FBSyxHQUFHQSxDQUNaQyxNQUFXLEVBQ1hDLEtBQVUsRUFDVkMsTUFBVyxFQUNYQyxHQUFRLEVBQ1JDLElBQW9CLEtBQ2pCO0lBQ0gsSUFBSSxDQUFDSCxLQUFLLElBQUksQ0FBQ0QsTUFBTSxFQUFFO01BQ3JCLE9BQU9DLEtBQUs7SUFDZDtJQUVBLElBQUlELE1BQU0sQ0FBQ04sU0FBUyxJQUFJLE9BQU9NLE1BQU0sQ0FBQ04sU0FBUyxLQUFLLFVBQVUsRUFBRTtNQUM5RCxJQUFJLE9BQU9PLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0IsSUFBSUQsTUFBTSxDQUFDSyxFQUFFLEVBQUUsT0FBTyxHQUFHSixLQUFLLEVBQUU7UUFDaEMsT0FBT0EsS0FBSztNQUNkO01BQ0EsT0FBT0QsTUFBTSxDQUFDTixTQUFTLENBQUNPLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxHQUFHLEVBQUVDLElBQUksRUFBRUwsS0FBSyxFQUFFRCxRQUFRLENBQUM7SUFDcEU7SUFFQSxJQUFJLE9BQU9HLEtBQUssS0FBSyxRQUFRLElBQUksT0FBT0QsTUFBTSxLQUFLLFFBQVEsRUFBRSxPQUFPQyxLQUFLO0lBRXpFLE1BQU1LLE1BQU0sR0FBR0MsS0FBSyxDQUFDQyxPQUFPLENBQUNSLE1BQU0sQ0FBQyxHQUFHTCxjQUFjLEdBQUdDLGVBQWU7SUFDdkUsT0FBT1UsTUFBTSxDQUFDTixNQUFNLEVBQUVDLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxHQUFHLEVBQUVDLElBQUksRUFBRUwsS0FBSyxDQUFDO0VBQ3hELENBQUM7RUFDRCxPQUFPQSxLQUFLO0FBQ2QsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==