@data-client/normalizr
Version:
Normalizes and denormalizes JSON according to schema for Redux and Flux applications
23 lines • 4.53 kB
JavaScript
import { getCheckLoop } from './getCheckLoop.js';
import { normalize as arrayNormalize } from '../schemas/Array.js';
import { normalize as objectNormalize } from '../schemas/Object.js';
export const getVisit = (addEntity, getEntity) => {
const checkLoop = getCheckLoop();
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, addEntity, getEntity, checkLoop);
}
if (typeof value !== 'object' || typeof schema !== 'object') return value;
const method = Array.isArray(schema) ? arrayNormalize : objectNormalize;
return method(schema, value, parent, key, args, visit, addEntity, getEntity, checkLoop);
};
return visit;
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDaGVja0xvb3AiLCJub3JtYWxpemUiLCJhcnJheU5vcm1hbGl6ZSIsIm9iamVjdE5vcm1hbGl6ZSIsImdldFZpc2l0IiwiYWRkRW50aXR5IiwiZ2V0RW50aXR5IiwiY2hlY2tMb29wIiwidmlzaXQiLCJzY2hlbWEiLCJ2YWx1ZSIsInBhcmVudCIsImtleSIsImFyZ3MiLCJwayIsIm1ldGhvZCIsIkFycmF5IiwiaXNBcnJheSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub3JtYWxpenIvZ2V0VmlzaXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0Q2hlY2tMb29wIH0gZnJvbSAnLi9nZXRDaGVja0xvb3AuanMnO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJbnRlcmZhY2UsIEdldEVudGl0eSB9IGZyb20gJy4uL2ludGVyZmFjZS5qcyc7XG5pbXBvcnQgeyBub3JtYWxpemUgYXMgYXJyYXlOb3JtYWxpemUgfSBmcm9tICcuLi9zY2hlbWFzL0FycmF5LmpzJztcbmltcG9ydCB7IG5vcm1hbGl6ZSBhcyBvYmplY3ROb3JtYWxpemUgfSBmcm9tICcuLi9zY2hlbWFzL09iamVjdC5qcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRWaXNpdCA9IChcbiAgYWRkRW50aXR5OiAoXG4gICAgc2NoZW1hOiBFbnRpdHlJbnRlcmZhY2UsXG4gICAgcHJvY2Vzc2VkRW50aXR5OiBhbnksXG4gICAgaWQ6IHN0cmluZyxcbiAgKSA9PiB2b2lkLFxuICBnZXRFbnRpdHk6IEdldEVudGl0eSxcbikgPT4ge1xuICBjb25zdCBjaGVja0xvb3AgPSBnZXRDaGVja0xvb3AoKTtcbiAgY29uc3QgdmlzaXQgPSAoXG4gICAgc2NoZW1hOiBhbnksXG4gICAgdmFsdWU6IGFueSxcbiAgICBwYXJlbnQ6IGFueSxcbiAgICBrZXk6IGFueSxcbiAgICBhcmdzOiByZWFkb25seSBhbnlbXSxcbiAgKSA9PiB7XG4gICAgaWYgKCF2YWx1ZSB8fCAhc2NoZW1hKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5ub3JtYWxpemUgJiYgdHlwZW9mIHNjaGVtYS5ub3JtYWxpemUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChzY2hlbWEucGspIHJldHVybiBgJHt2YWx1ZX1gO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2NoZW1hLm5vcm1hbGl6ZShcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHBhcmVudCxcbiAgICAgICAga2V5LFxuICAgICAgICBhcmdzLFxuICAgICAgICB2aXNpdCxcbiAgICAgICAgYWRkRW50aXR5LFxuICAgICAgICBnZXRFbnRpdHksXG4gICAgICAgIGNoZWNrTG9vcCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHNjaGVtYSAhPT0gJ29iamVjdCcpIHJldHVybiB2YWx1ZTtcblxuICAgIGNvbnN0IG1ldGhvZCA9IEFycmF5LmlzQXJyYXkoc2NoZW1hKSA/IGFycmF5Tm9ybWFsaXplIDogb2JqZWN0Tm9ybWFsaXplO1xuICAgIHJldHVybiBtZXRob2QoXG4gICAgICBzY2hlbWEsXG4gICAgICB2YWx1ZSxcbiAgICAgIHBhcmVudCxcbiAgICAgIGtleSxcbiAgICAgIGFyZ3MsXG4gICAgICB2aXNpdCxcbiAgICAgIGFkZEVudGl0eSxcbiAgICAgIGdldEVudGl0eSxcbiAgICAgIGNoZWNrTG9vcCxcbiAgICApO1xuICB9O1xuICByZXR1cm4gdmlzaXQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxZQUFZLFFBQVEsbUJBQW1CO0FBRWhELFNBQVNDLFNBQVMsSUFBSUMsY0FBYyxRQUFRLHFCQUFxQjtBQUNqRSxTQUFTRCxTQUFTLElBQUlFLGVBQWUsUUFBUSxzQkFBc0I7QUFFbkUsT0FBTyxNQUFNQyxRQUFRLEdBQUdBLENBQ3RCQyxTQUlTLEVBQ1RDLFNBQW9CLEtBQ2pCO0VBQ0gsTUFBTUMsU0FBUyxHQUFHUCxZQUFZLENBQUMsQ0FBQztFQUNoQyxNQUFNUSxLQUFLLEdBQUdBLENBQ1pDLE1BQVcsRUFDWEMsS0FBVSxFQUNWQyxNQUFXLEVBQ1hDLEdBQVEsRUFDUkMsSUFBb0IsS0FDakI7SUFDSCxJQUFJLENBQUNILEtBQUssSUFBSSxDQUFDRCxNQUFNLEVBQUU7TUFDckIsT0FBT0MsS0FBSztJQUNkO0lBRUEsSUFBSUQsTUFBTSxDQUFDUixTQUFTLElBQUksT0FBT1EsTUFBTSxDQUFDUixTQUFTLEtBQUssVUFBVSxFQUFFO01BQzlELElBQUksT0FBT1MsS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM3QixJQUFJRCxNQUFNLENBQUNLLEVBQUUsRUFBRSxPQUFPLEdBQUdKLEtBQUssRUFBRTtRQUNoQyxPQUFPQSxLQUFLO01BQ2Q7TUFDQSxPQUFPRCxNQUFNLENBQUNSLFNBQVMsQ0FDckJTLEtBQUssRUFDTEMsTUFBTSxFQUNOQyxHQUFHLEVBQ0hDLElBQUksRUFDSkwsS0FBSyxFQUNMSCxTQUFTLEVBQ1RDLFNBQVMsRUFDVEMsU0FDRixDQUFDO0lBQ0g7SUFFQSxJQUFJLE9BQU9HLEtBQUssS0FBSyxRQUFRLElBQUksT0FBT0QsTUFBTSxLQUFLLFFBQVEsRUFBRSxPQUFPQyxLQUFLO0lBRXpFLE1BQU1LLE1BQU0sR0FBR0MsS0FBSyxDQUFDQyxPQUFPLENBQUNSLE1BQU0sQ0FBQyxHQUFHUCxjQUFjLEdBQUdDLGVBQWU7SUFDdkUsT0FBT1ksTUFBTSxDQUNYTixNQUFNLEVBQ05DLEtBQUssRUFDTEMsTUFBTSxFQUNOQyxHQUFHLEVBQ0hDLElBQUksRUFDSkwsS0FBSyxFQUNMSCxTQUFTLEVBQ1RDLFNBQVMsRUFDVEMsU0FDRixDQUFDO0VBQ0gsQ0FBQztFQUNELE9BQU9DLEtBQUs7QUFDZCxDQUFDIiwiaWdub3JlTGlzdCI6W119