@data-client/endpoint
Version:
Declarative Network Interface Definitions
46 lines (44 loc) • 5.28 kB
JavaScript
/**
* Helpers to enable Immutable compatibility *without* bringing in
* the 'immutable' package as a dependency.
*/
/**
* Check if an object is immutable by checking if it has a key specific
* to the immutable library.
*
* @param {any} object
* @return {bool}
*/
export function isImmutable(object) {
return !!(typeof object.hasOwnProperty === 'function' && (Object.hasOwnProperty.call(object, '__ownerID') ||
// Immutable.Map
object._map && Object.hasOwnProperty.call(object._map, '__ownerID'))); // Immutable.Record
}
/**
* Denormalize an immutable entity.
*
* @param {Schema} schema
* @param {Immutable.Map|Immutable.Record} input
* @param {function} unvisit
* @param {function} getDenormalizedEntity
* @return {Immutable.Map|Immutable.Record}
*/
export function denormalizeImmutable(schema, input, unvisit) {
let deleted;
const value = Object.keys(schema).reduce((object, key) => {
// Immutable maps cast keys to strings on write so we need to ensure
// we're accessing them using string keys.
const stringKey = `${key}`;
const item = unvisit(schema[stringKey], object.get(stringKey));
if (typeof item === 'symbol') {
deleted = item;
}
if (object.has(stringKey)) {
return object.set(stringKey, item);
} else {
return object;
}
}, input);
return deleted != null ? deleted : value;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0ltbXV0YWJsZSIsIm9iamVjdCIsImhhc093blByb3BlcnR5IiwiT2JqZWN0IiwiY2FsbCIsIl9tYXAiLCJkZW5vcm1hbGl6ZUltbXV0YWJsZSIsInNjaGVtYSIsImlucHV0IiwidW52aXNpdCIsImRlbGV0ZWQiLCJ2YWx1ZSIsImtleXMiLCJyZWR1Y2UiLCJrZXkiLCJzdHJpbmdLZXkiLCJpdGVtIiwiZ2V0IiwiaGFzIiwic2V0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjaGVtYXMvSW1tdXRhYmxlVXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBIZWxwZXJzIHRvIGVuYWJsZSBJbW11dGFibGUgY29tcGF0aWJpbGl0eSAqd2l0aG91dCogYnJpbmdpbmcgaW5cbiAqIHRoZSAnaW1tdXRhYmxlJyBwYWNrYWdlIGFzIGEgZGVwZW5kZW5jeS5cbiAqL1xuXG4vKipcbiAqIENoZWNrIGlmIGFuIG9iamVjdCBpcyBpbW11dGFibGUgYnkgY2hlY2tpbmcgaWYgaXQgaGFzIGEga2V5IHNwZWNpZmljXG4gKiB0byB0aGUgaW1tdXRhYmxlIGxpYnJhcnkuXG4gKlxuICogQHBhcmFtICB7YW55fSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2x9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ltbXV0YWJsZShvYmplY3Q6IHt9KTogb2JqZWN0IGlzIHtcbiAgZ2V0KGs6IHN0cmluZyk6IGFueTtcbiAgW2s6IHN0cmluZ106IGFueTtcbn0ge1xuICByZXR1cm4gISEoXG4gICAgdHlwZW9mIG9iamVjdC5oYXNPd25Qcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX293bmVySUQnKSB8fCAvLyBJbW11dGFibGUuTWFwXG4gICAgICAoKG9iamVjdCBhcyBhbnkpLl9tYXAgJiZcbiAgICAgICAgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoKG9iamVjdCBhcyBhbnkpLl9tYXAsICdfX293bmVySUQnKSkpXG4gICk7IC8vIEltbXV0YWJsZS5SZWNvcmRcbn1cblxuLyoqXG4gKiBEZW5vcm1hbGl6ZSBhbiBpbW11dGFibGUgZW50aXR5LlxuICpcbiAqIEBwYXJhbSAge1NjaGVtYX0gc2NoZW1hXG4gKiBAcGFyYW0gIHtJbW11dGFibGUuTWFwfEltbXV0YWJsZS5SZWNvcmR9IGlucHV0XG4gKiBAcGFyYW0gIHtmdW5jdGlvbn0gdW52aXNpdFxuICogQHBhcmFtICB7ZnVuY3Rpb259IGdldERlbm9ybWFsaXplZEVudGl0eVxuICogQHJldHVybiB7SW1tdXRhYmxlLk1hcHxJbW11dGFibGUuUmVjb3JkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVub3JtYWxpemVJbW11dGFibGUoXG4gIHNjaGVtYTogYW55LFxuICBpbnB1dDogYW55LFxuICB1bnZpc2l0OiAoc2NoZW1hOiBhbnksIGlucHV0OiBhbnkpID0+IGFueSxcbik6IGFueSB7XG4gIGxldCBkZWxldGVkO1xuICBjb25zdCB2YWx1ZSA9IE9iamVjdC5rZXlzKHNjaGVtYSkucmVkdWNlKChvYmplY3QsIGtleSkgPT4ge1xuICAgIC8vIEltbXV0YWJsZSBtYXBzIGNhc3Qga2V5cyB0byBzdHJpbmdzIG9uIHdyaXRlIHNvIHdlIG5lZWQgdG8gZW5zdXJlXG4gICAgLy8gd2UncmUgYWNjZXNzaW5nIHRoZW0gdXNpbmcgc3RyaW5nIGtleXMuXG4gICAgY29uc3Qgc3RyaW5nS2V5ID0gYCR7a2V5fWA7XG5cbiAgICBjb25zdCBpdGVtID0gdW52aXNpdChzY2hlbWFbc3RyaW5nS2V5XSwgb2JqZWN0LmdldChzdHJpbmdLZXkpKTtcbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzeW1ib2wnKSB7XG4gICAgICBkZWxldGVkID0gaXRlbTtcbiAgICB9XG4gICAgaWYgKG9iamVjdC5oYXMoc3RyaW5nS2V5KSkge1xuICAgICAgcmV0dXJuIG9iamVjdC5zZXQoc3RyaW5nS2V5LCBpdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG4gIH0sIGlucHV0KTtcbiAgcmV0dXJuIGRlbGV0ZWQgPz8gdmFsdWU7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTQSxXQUFXQSxDQUFDQyxNQUFVLEVBR3BDO0VBQ0EsT0FBTyxDQUFDLEVBQ04sT0FBT0EsTUFBTSxDQUFDQyxjQUFjLEtBQUssVUFBVSxLQUMxQ0MsTUFBTSxDQUFDRCxjQUFjLENBQUNFLElBQUksQ0FBQ0gsTUFBTSxFQUFFLFdBQVcsQ0FBQztFQUFJO0VBQ2hEQSxNQUFNLENBQVNJLElBQUksSUFDbkJGLE1BQU0sQ0FBQ0QsY0FBYyxDQUFDRSxJQUFJLENBQUVILE1BQU0sQ0FBU0ksSUFBSSxFQUFFLFdBQVcsQ0FBRSxDQUFDLENBQ3BFLENBQUMsQ0FBQztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0Msb0JBQW9CQSxDQUNsQ0MsTUFBVyxFQUNYQyxLQUFVLEVBQ1ZDLE9BQXlDLEVBQ3BDO0VBQ0wsSUFBSUMsT0FBTztFQUNYLE1BQU1DLEtBQUssR0FBR1IsTUFBTSxDQUFDUyxJQUFJLENBQUNMLE1BQU0sQ0FBQyxDQUFDTSxNQUFNLENBQUMsQ0FBQ1osTUFBTSxFQUFFYSxHQUFHLEtBQUs7SUFDeEQ7SUFDQTtJQUNBLE1BQU1DLFNBQVMsR0FBRyxHQUFHRCxHQUFHLEVBQUU7SUFFMUIsTUFBTUUsSUFBSSxHQUFHUCxPQUFPLENBQUNGLE1BQU0sQ0FBQ1EsU0FBUyxDQUFDLEVBQUVkLE1BQU0sQ0FBQ2dCLEdBQUcsQ0FBQ0YsU0FBUyxDQUFDLENBQUM7SUFDOUQsSUFBSSxPQUFPQyxJQUFJLEtBQUssUUFBUSxFQUFFO01BQzVCTixPQUFPLEdBQUdNLElBQUk7SUFDaEI7SUFDQSxJQUFJZixNQUFNLENBQUNpQixHQUFHLENBQUNILFNBQVMsQ0FBQyxFQUFFO01BQ3pCLE9BQU9kLE1BQU0sQ0FBQ2tCLEdBQUcsQ0FBQ0osU0FBUyxFQUFFQyxJQUFJLENBQUM7SUFDcEMsQ0FBQyxNQUFNO01BQ0wsT0FBT2YsTUFBTTtJQUNmO0VBQ0YsQ0FBQyxFQUFFTyxLQUFLLENBQUM7RUFDVCxPQUFPRSxPQUFPLFdBQVBBLE9BQU8sR0FBSUMsS0FBSztBQUN6QiIsImlnbm9yZUxpc3QiOltdfQ==