UNPKG

@data-client/normalizr

Version:

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

28 lines (27 loc) 5.25 kB
const validateSchema = definition => { /* istanbul ignore else */ if (process.env.NODE_ENV !== 'production') { const isArray = Array.isArray(definition); if (isArray && definition.length > 1) { throw new Error(`Expected schema definition to be a single schema, but found ${definition.length}.`); } } return definition[0]; }; const getValues = input => Array.isArray(input) ? input : Object.keys(input).map(key => input[key]); const filterEmpty = item => item !== undefined && typeof item !== 'symbol'; export const normalize = (schema, input, parent, key, args, visit) => { schema = validateSchema(schema); const values = getValues(input); // Special case: Arrays pass *their* parent on to their children, since there // is not any special information that can be gathered from themselves directly return values.map(value => visit(schema, value, parent, key, args)); }; export const denormalize = (schema, input, args, unvisit) => { schema = validateSchema(schema); return input.map ? input.map(entityOrId => unvisit(schema, entityOrId)).filter(filterEmpty) : input; }; export function queryKey() { return undefined; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ2YWxpZGF0ZVNjaGVtYSIsImRlZmluaXRpb24iLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJpc0FycmF5IiwiQXJyYXkiLCJsZW5ndGgiLCJFcnJvciIsImdldFZhbHVlcyIsImlucHV0IiwiT2JqZWN0Iiwia2V5cyIsIm1hcCIsImtleSIsImZpbHRlckVtcHR5IiwiaXRlbSIsInVuZGVmaW5lZCIsIm5vcm1hbGl6ZSIsInNjaGVtYSIsInBhcmVudCIsImFyZ3MiLCJ2aXNpdCIsInZhbHVlcyIsInZhbHVlIiwiZGVub3JtYWxpemUiLCJ1bnZpc2l0IiwiZW50aXR5T3JJZCIsImZpbHRlciIsInF1ZXJ5S2V5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjaGVtYXMvQXJyYXkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBWaXNpdCB9IGZyb20gJy4uL2ludGVyZmFjZS5qcyc7XG5cbmNvbnN0IHZhbGlkYXRlU2NoZW1hID0gZGVmaW5pdGlvbiA9PiB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbik7XG4gICAgaWYgKGlzQXJyYXkgJiYgZGVmaW5pdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBFeHBlY3RlZCBzY2hlbWEgZGVmaW5pdGlvbiB0byBiZSBhIHNpbmdsZSBzY2hlbWEsIGJ1dCBmb3VuZCAke2RlZmluaXRpb24ubGVuZ3RofS5gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVmaW5pdGlvblswXTtcbn07XG5cbmNvbnN0IGdldFZhbHVlcyA9IGlucHV0ID0+XG4gIEFycmF5LmlzQXJyYXkoaW5wdXQpID8gaW5wdXQgOiBPYmplY3Qua2V5cyhpbnB1dCkubWFwKGtleSA9PiBpbnB1dFtrZXldKTtcblxuY29uc3QgZmlsdGVyRW1wdHkgPSBpdGVtID0+IGl0ZW0gIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgaXRlbSAhPT0gJ3N5bWJvbCc7XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemUgPSAoXG4gIHNjaGVtYTogYW55LFxuICBpbnB1dDogYW55LFxuICBwYXJlbnQ6IGFueSxcbiAga2V5OiBhbnksXG4gIGFyZ3M6IHJlYWRvbmx5IGFueVtdLFxuICB2aXNpdDogVmlzaXQsXG4pID0+IHtcbiAgc2NoZW1hID0gdmFsaWRhdGVTY2hlbWEoc2NoZW1hKTtcblxuICBjb25zdCB2YWx1ZXMgPSBnZXRWYWx1ZXMoaW5wdXQpO1xuXG4gIC8vIFNwZWNpYWwgY2FzZTogQXJyYXlzIHBhc3MgKnRoZWlyKiBwYXJlbnQgb24gdG8gdGhlaXIgY2hpbGRyZW4sIHNpbmNlIHRoZXJlXG4gIC8vIGlzIG5vdCBhbnkgc3BlY2lhbCBpbmZvcm1hdGlvbiB0aGF0IGNhbiBiZSBnYXRoZXJlZCBmcm9tIHRoZW1zZWx2ZXMgZGlyZWN0bHlcbiAgcmV0dXJuIHZhbHVlcy5tYXAodmFsdWUgPT4gdmlzaXQoc2NoZW1hLCB2YWx1ZSwgcGFyZW50LCBrZXksIGFyZ3MpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZW5vcm1hbGl6ZSA9IChcbiAgc2NoZW1hOiBhbnksXG4gIGlucHV0OiBhbnksXG4gIGFyZ3M6IHJlYWRvbmx5IGFueVtdLFxuICB1bnZpc2l0OiBhbnksXG4pOiBhbnkgPT4ge1xuICBzY2hlbWEgPSB2YWxpZGF0ZVNjaGVtYShzY2hlbWEpO1xuICByZXR1cm4gaW5wdXQubWFwID9cbiAgICAgIGlucHV0Lm1hcChlbnRpdHlPcklkID0+IHVudmlzaXQoc2NoZW1hLCBlbnRpdHlPcklkKSkuZmlsdGVyKGZpbHRlckVtcHR5KVxuICAgIDogaW5wdXQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlLZXkoKSB7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iXSwibWFwcGluZ3MiOiJBQUVBLE1BQU1BLGNBQWMsR0FBR0MsVUFBVSxJQUFJO0VBQ25DO0VBQ0EsSUFBSUMsT0FBTyxDQUFDQyxHQUFHLENBQUNDLFFBQVEsS0FBSyxZQUFZLEVBQUU7SUFDekMsTUFBTUMsT0FBTyxHQUFHQyxLQUFLLENBQUNELE9BQU8sQ0FBQ0osVUFBVSxDQUFDO0lBQ3pDLElBQUlJLE9BQU8sSUFBSUosVUFBVSxDQUFDTSxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ3BDLE1BQU0sSUFBSUMsS0FBSyxDQUNiLCtEQUErRFAsVUFBVSxDQUFDTSxNQUFNLEdBQ2xGLENBQUM7SUFDSDtFQUNGO0VBRUEsT0FBT04sVUFBVSxDQUFDLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBRUQsTUFBTVEsU0FBUyxHQUFHQyxLQUFLLElBQ3JCSixLQUFLLENBQUNELE9BQU8sQ0FBQ0ssS0FBSyxDQUFDLEdBQUdBLEtBQUssR0FBR0MsTUFBTSxDQUFDQyxJQUFJLENBQUNGLEtBQUssQ0FBQyxDQUFDRyxHQUFHLENBQUNDLEdBQUcsSUFBSUosS0FBSyxDQUFDSSxHQUFHLENBQUMsQ0FBQztBQUUxRSxNQUFNQyxXQUFXLEdBQUdDLElBQUksSUFBSUEsSUFBSSxLQUFLQyxTQUFTLElBQUksT0FBT0QsSUFBSSxLQUFLLFFBQVE7QUFFMUUsT0FBTyxNQUFNRSxTQUFTLEdBQUdBLENBQ3ZCQyxNQUFXLEVBQ1hULEtBQVUsRUFDVlUsTUFBVyxFQUNYTixHQUFRLEVBQ1JPLElBQW9CLEVBQ3BCQyxLQUFZLEtBQ1Q7RUFDSEgsTUFBTSxHQUFHbkIsY0FBYyxDQUFDbUIsTUFBTSxDQUFDO0VBRS9CLE1BQU1JLE1BQU0sR0FBR2QsU0FBUyxDQUFDQyxLQUFLLENBQUM7O0VBRS9CO0VBQ0E7RUFDQSxPQUFPYSxNQUFNLENBQUNWLEdBQUcsQ0FBQ1csS0FBSyxJQUFJRixLQUFLLENBQUNILE1BQU0sRUFBRUssS0FBSyxFQUFFSixNQUFNLEVBQUVOLEdBQUcsRUFBRU8sSUFBSSxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELE9BQU8sTUFBTUksV0FBVyxHQUFHQSxDQUN6Qk4sTUFBVyxFQUNYVCxLQUFVLEVBQ1ZXLElBQW9CLEVBQ3BCSyxPQUFZLEtBQ0o7RUFDUlAsTUFBTSxHQUFHbkIsY0FBYyxDQUFDbUIsTUFBTSxDQUFDO0VBQy9CLE9BQU9ULEtBQUssQ0FBQ0csR0FBRyxHQUNaSCxLQUFLLENBQUNHLEdBQUcsQ0FBQ2MsVUFBVSxJQUFJRCxPQUFPLENBQUNQLE1BQU0sRUFBRVEsVUFBVSxDQUFDLENBQUMsQ0FBQ0MsTUFBTSxDQUFDYixXQUFXLENBQUMsR0FDeEVMLEtBQUs7QUFDWCxDQUFDO0FBRUQsT0FBTyxTQUFTbUIsUUFBUUEsQ0FBQSxFQUFHO0VBQ3pCLE9BQU9aLFNBQVM7QUFDbEIiLCJpZ25vcmVMaXN0IjpbXX0=