UNPKG

@data-client/normalizr

Version:

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

36 lines (33 loc) 4.85 kB
import { queryKey as arrayQuery } from './schemas/Array.js'; import { queryKey as objectQuery } from './schemas/Object.js'; /** * Build the result parameter to denormalize from schema alone. * Tries to compute the entity ids from params. */ export default function buildQueryKey(delegate) { return function queryKey(schema, args) { // schema classes if (canQuery(schema)) { return schema.queryKey(args, queryKey, delegate); } // plain case if (typeof schema === 'object' && schema) { const method = Array.isArray(schema) ? arrayQuery : objectQuery; return method(schema, args, queryKey, delegate); } // fallback for things like null or undefined return schema; }; } export function canQuery(schema) { return !!schema && typeof schema.queryKey === 'function'; } // this only works if entity does a lookup first to see if its entity is 'found' export function validateQueryKey(queryKey) { if (queryKey === undefined) return false; if (queryKey && typeof queryKey === 'object' && !Array.isArray(queryKey)) { return Object.values(queryKey).every(validateQueryKey); } return true; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJxdWVyeUtleSIsImFycmF5UXVlcnkiLCJvYmplY3RRdWVyeSIsImJ1aWxkUXVlcnlLZXkiLCJkZWxlZ2F0ZSIsInNjaGVtYSIsImFyZ3MiLCJjYW5RdWVyeSIsIm1ldGhvZCIsIkFycmF5IiwiaXNBcnJheSIsInZhbGlkYXRlUXVlcnlLZXkiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJ2YWx1ZXMiLCJldmVyeSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZFF1ZXJ5S2V5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2NoZW1hLCBTY2hlbWFTaW1wbGUsIElRdWVyeURlbGVnYXRlIH0gZnJvbSAnLi9pbnRlcmZhY2UuanMnO1xuaW1wb3J0IHsgcXVlcnlLZXkgYXMgYXJyYXlRdWVyeSB9IGZyb20gJy4vc2NoZW1hcy9BcnJheS5qcyc7XG5pbXBvcnQgeyBxdWVyeUtleSBhcyBvYmplY3RRdWVyeSB9IGZyb20gJy4vc2NoZW1hcy9PYmplY3QuanMnO1xuaW1wb3J0IHR5cGUgeyBOb3JtYWxpemVOdWxsYWJsZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKipcbiAqIEJ1aWxkIHRoZSByZXN1bHQgcGFyYW1ldGVyIHRvIGRlbm9ybWFsaXplIGZyb20gc2NoZW1hIGFsb25lLlxuICogVHJpZXMgdG8gY29tcHV0ZSB0aGUgZW50aXR5IGlkcyBmcm9tIHBhcmFtcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRRdWVyeUtleShkZWxlZ2F0ZTogSVF1ZXJ5RGVsZWdhdGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHF1ZXJ5S2V5PFMgZXh0ZW5kcyBTY2hlbWE+KFxuICAgIHNjaGVtYTogUyxcbiAgICBhcmdzOiByZWFkb25seSBhbnlbXSxcbiAgKTogTm9ybWFsaXplTnVsbGFibGU8Uz4ge1xuICAgIC8vIHNjaGVtYSBjbGFzc2VzXG4gICAgaWYgKGNhblF1ZXJ5KHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiBzY2hlbWEucXVlcnlLZXkoYXJncyBhcyBhbnlbXSwgcXVlcnlLZXksIGRlbGVnYXRlKTtcbiAgICB9XG5cbiAgICAvLyBwbGFpbiBjYXNlXG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09ICdvYmplY3QnICYmIHNjaGVtYSkge1xuICAgICAgY29uc3QgbWV0aG9kID0gQXJyYXkuaXNBcnJheShzY2hlbWEpID8gYXJyYXlRdWVyeSA6IG9iamVjdFF1ZXJ5O1xuICAgICAgcmV0dXJuIG1ldGhvZChzY2hlbWEsIGFyZ3MsIHF1ZXJ5S2V5LCBkZWxlZ2F0ZSk7XG4gICAgfVxuXG4gICAgLy8gZmFsbGJhY2sgZm9yIHRoaW5ncyBsaWtlIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgcmV0dXJuIHNjaGVtYSBhcyBhbnk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW5RdWVyeShcbiAgc2NoZW1hOiBTY2hlbWEsXG4pOiBzY2hlbWEgaXMgUGljazxTY2hlbWFTaW1wbGUsICdxdWVyeUtleSc+IHtcbiAgcmV0dXJuICEhc2NoZW1hICYmIHR5cGVvZiAoc2NoZW1hIGFzIGFueSkucXVlcnlLZXkgPT09ICdmdW5jdGlvbic7XG59XG5cbi8vIHRoaXMgb25seSB3b3JrcyBpZiBlbnRpdHkgZG9lcyBhIGxvb2t1cCBmaXJzdCB0byBzZWUgaWYgaXRzIGVudGl0eSBpcyAnZm91bmQnXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVRdWVyeUtleShxdWVyeUtleTogdW5rbm93bikge1xuICBpZiAocXVlcnlLZXkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuICBpZiAocXVlcnlLZXkgJiYgdHlwZW9mIHF1ZXJ5S2V5ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShxdWVyeUtleSkpIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhxdWVyeUtleSkuZXZlcnkodmFsaWRhdGVRdWVyeUtleSk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG4iXSwibWFwcGluZ3MiOiJBQUNBLFNBQVNBLFFBQVEsSUFBSUMsVUFBVSxRQUFRLG9CQUFvQjtBQUMzRCxTQUFTRCxRQUFRLElBQUlFLFdBQVcsUUFBUSxxQkFBcUI7QUFHN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVNDLGFBQWFBLENBQUNDLFFBQXdCLEVBQUU7RUFDOUQsT0FBTyxTQUFTSixRQUFRQSxDQUN0QkssTUFBUyxFQUNUQyxJQUFvQixFQUNFO0lBQ3RCO0lBQ0EsSUFBSUMsUUFBUSxDQUFDRixNQUFNLENBQUMsRUFBRTtNQUNwQixPQUFPQSxNQUFNLENBQUNMLFFBQVEsQ0FBQ00sSUFBSSxFQUFXTixRQUFRLEVBQUVJLFFBQVEsQ0FBQztJQUMzRDs7SUFFQTtJQUNBLElBQUksT0FBT0MsTUFBTSxLQUFLLFFBQVEsSUFBSUEsTUFBTSxFQUFFO01BQ3hDLE1BQU1HLE1BQU0sR0FBR0MsS0FBSyxDQUFDQyxPQUFPLENBQUNMLE1BQU0sQ0FBQyxHQUFHSixVQUFVLEdBQUdDLFdBQVc7TUFDL0QsT0FBT00sTUFBTSxDQUFDSCxNQUFNLEVBQUVDLElBQUksRUFBRU4sUUFBUSxFQUFFSSxRQUFRLENBQUM7SUFDakQ7O0lBRUE7SUFDQSxPQUFPQyxNQUFNO0VBQ2YsQ0FBQztBQUNIO0FBRUEsT0FBTyxTQUFTRSxRQUFRQSxDQUN0QkYsTUFBYyxFQUM0QjtFQUMxQyxPQUFPLENBQUMsQ0FBQ0EsTUFBTSxJQUFJLE9BQVFBLE1BQU0sQ0FBU0wsUUFBUSxLQUFLLFVBQVU7QUFDbkU7O0FBRUE7QUFDQSxPQUFPLFNBQVNXLGdCQUFnQkEsQ0FBQ1gsUUFBaUIsRUFBRTtFQUNsRCxJQUFJQSxRQUFRLEtBQUtZLFNBQVMsRUFBRSxPQUFPLEtBQUs7RUFDeEMsSUFBSVosUUFBUSxJQUFJLE9BQU9BLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQ1MsS0FBSyxDQUFDQyxPQUFPLENBQUNWLFFBQVEsQ0FBQyxFQUFFO0lBQ3hFLE9BQU9hLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDZCxRQUFRLENBQUMsQ0FBQ2UsS0FBSyxDQUFDSixnQkFBZ0IsQ0FBQztFQUN4RDtFQUNBLE9BQU8sSUFBSTtBQUNiIiwiaWdub3JlTGlzdCI6W119