Skip to content

Instantly share code, notes, and snippets.

@andrewmclagan
Created July 25, 2016 00:34
Show Gist options
  • Save andrewmclagan/db7d88f9866ff59aad62e01e6b6d630b to your computer and use it in GitHub Desktop.
Save andrewmclagan/db7d88f9866ff59aad62e01e6b6d630b to your computer and use it in GitHub Desktop.
requirebin sketch
const normalizr = require('normalizr');
const response = {
data: {
id: 1,
title: 'Lord of the Rings',
pages: 9250,
publisher: {
data: {
id: 1,
name: 'HarperCollins LLC',
address: 'Big building next to the river',
city: 'Amsterdam',
country: {
data: {
id: 1,
name: 'The Netherlands',
population: 1000
}
}
},
},
author: {
data: {
id: 1,
name: 'J.R.R Tolkien',
country: 'UK',
age: 124,
}
},
characters: [
{
data: {
id: 1,
name: 'Bilbo Baggins',
race: 'Hobbit'
}
},
{
id: 2,
name: 'Gandalf The Grey',
race: 'Wizard'
},
{
id: 3,
name: 'Legolas',
race: 'Elf'
}
]
}
};
const country = new normalizr.Schema('country');
const character = new normalizr.Schema('character');
const book = new normalizr.Schema('book');
const publisher = new normalizr.Schema('publisher');
const author = new normalizr.Schema('author');
book.define({
data: {
publisher: publisher,
author: author,
characters: normalizr.arrayOf(character)
}}
);
publisher.define({
data: {
country: country
}
});
const result = normalizr.normalize(response, book, { assignEntity: function (output, key, value, input) {
if (key === 'data') {
Object.keys(value).forEach(function(d){
output[d] = value[d];
})
} else {
output[key] = value;
}
}});
console.log(result);
setTimeout(function(){require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var EntitySchema=function(){function EntitySchema(key){var options=arguments.length<=1||arguments[1]===undefined?{}:arguments[1];_classCallCheck(this,EntitySchema);if(!key||typeof key!=="string"){throw new Error("A string non-empty key is required")}this._key=key;this._assignEntity=options.assignEntity;var idAttribute=options.idAttribute||"id";this._getId=typeof idAttribute==="function"?idAttribute:function(x){return x[idAttribute]};this._idAttribute=idAttribute;this._meta=options.meta;this._defaults=options.defaults}_createClass(EntitySchema,[{key:"getAssignEntity",value:function getAssignEntity(){return this._assignEntity}},{key:"getKey",value:function getKey(){return this._key}},{key:"getId",value:function getId(entity){return this._getId(entity)}},{key:"getIdAttribute",value:function getIdAttribute(){return this._idAttribute}},{key:"getMeta",value:function getMeta(prop){if(!prop||typeof prop!=="string"){throw new Error("A string non-empty property name is required")}return this._meta&&this._meta[prop]}},{key:"getDefaults",value:function getDefaults(){return this._defaults}},{key:"define",value:function define(nestedSchema){for(var key in nestedSchema){if(nestedSchema.hasOwnProperty(key)){this[key]=nestedSchema[key]}}}}]);return EntitySchema}();exports.default=EntitySchema},{}],2:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();var _isObject=require("lodash/isObject");var _isObject2=_interopRequireDefault(_isObject);var _UnionSchema=require("./UnionSchema");var _UnionSchema2=_interopRequireDefault(_UnionSchema);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var ArraySchema=function(){function ArraySchema(itemSchema){var options=arguments.length<=1||arguments[1]===undefined?{}:arguments[1];_classCallCheck(this,ArraySchema);if(!(0,_isObject2.default)(itemSchema)){throw new Error("ArraySchema requires item schema to be an object.")}if(options.schemaAttribute){var schemaAttribute=options.schemaAttribute;this._itemSchema=new _UnionSchema2.default(itemSchema,{schemaAttribute:schemaAttribute})}else{this._itemSchema=itemSchema}}_createClass(ArraySchema,[{key:"getItemSchema",value:function getItemSchema(){return this._itemSchema}}]);return ArraySchema}();exports.default=ArraySchema},{"./UnionSchema":3,"lodash/isObject":82}],3:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();var _isObject=require("lodash/isObject");var _isObject2=_interopRequireDefault(_isObject);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var UnionSchema=function(){function UnionSchema(itemSchema,options){_classCallCheck(this,UnionSchema);if(!(0,_isObject2.default)(itemSchema)){throw new Error("UnionSchema requires item schema to be an object.")}if(!options||!options.schemaAttribute){throw new Error("UnionSchema requires schemaAttribute option.")}this._itemSchema=itemSchema;var schemaAttribute=options.schemaAttribute;this._getSchema=typeof schemaAttribute==="function"?schemaAttribute:function(x){return x[schemaAttribute]}}_createClass(UnionSchema,[{key:"getItemSchema",value:function getItemSchema(){return this._itemSchema}},{key:"getSchemaKey",value:function getSchemaKey(item){return this._getSchema(item)}}]);return UnionSchema}();exports.default=UnionSchema},{"lodash/isObject":82}],4:[function(require,module,exports){var getNative=require("./_getNative"),root=require("./_root");var DataView=getNative(root,"DataView");module.exports=DataView},{"./_getNative":35,"./_root":64}],5:[function(require,module,exports){var hashClear=require("./_hashClear"),hashDelete=require("./_hashDelete"),hashGet=require("./_hashGet"),hashHas=require("./_hashHas"),hashSet=require("./_hashSet");function Hash(entries){var index=-1,length=entries?entries.length:0;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1])}}Hash.prototype.clear=hashClear;Hash.prototype["delete"]=hashDelete;Hash.prototype.get=hashGet;Hash.prototype.has=hashHas;Hash.prototype.set=hashSet;module.exports=Hash},{"./_hashClear":39,"./_hashDelete":40,"./_hashGet":41,"./_hashHas":42,"./_hashSet":43}],6:[function(require,module,exports){var listCacheClear=require("./_listCacheClear"),listCacheDelete=require("./_listCacheDelete"),listCacheGet=require("./_listCacheGet"),listCacheHas=require("./_listCacheHas"),listCacheSet=require("./_listCacheSet");function ListCache(entries){var index=-1,length=entries?entries.length:0;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1])}}ListCache.prototype.clear=listCacheClear;ListCache.prototype["delete"]=listCacheDelete;ListCache.prototype.get=listCacheGet;ListCache.prototype.has=listCacheHas;ListCache.prototype.set=listCacheSet;module.exports=ListCache},{"./_listCacheClear":50,"./_listCacheDelete":51,"./_listCacheGet":52,"./_listCacheHas":53,"./_listCacheSet":54}],7:[function(require,module,exports){var getNative=require("./_getNative"),root=require("./_root");var Map=getNative(root,"Map");module.exports=Map},{"./_getNative":35,"./_root":64}],8:[function(require,module,exports){var mapCacheClear=require("./_mapCacheClear"),mapCacheDelete=require("./_mapCacheDelete"),mapCacheGet=require("./_mapCacheGet"),mapCacheHas=require("./_mapCacheHas"),mapCacheSet=require("./_mapCacheSet");function MapCache(entries){var index=-1,length=entries?entries.length:0;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1])}}MapCache.prototype.clear=mapCacheClear;MapCache.prototype["delete"]=mapCacheDelete;MapCache.prototype.get=mapCacheGet;MapCache.prototype.has=mapCacheHas;MapCache.prototype.set=mapCacheSet;module.exports=MapCache},{"./_mapCacheClear":55,"./_mapCacheDelete":56,"./_mapCacheGet":57,"./_mapCacheHas":58,"./_mapCacheSet":59}],9:[function(require,module,exports){var getNative=require("./_getNative"),root=require("./_root");var Promise=getNative(root,"Promise");module.exports=Promise},{"./_getNative":35,"./_root":64}],10:[function(require,module,exports){var getNative=require("./_getNative"),root=require("./_root");var Set=getNative(root,"Set");module.exports=Set},{"./_getNative":35,"./_root":64}],11:[function(require,module,exports){var MapCache=require("./_MapCache"),setCacheAdd=require("./_setCacheAdd"),setCacheHas=require("./_setCacheHas");function SetCache(values){var index=-1,length=values?values.length:0;this.__data__=new MapCache;while(++index<length){this.add(values[index])}}SetCache.prototype.add=SetCache.prototype.push=setCacheAdd;SetCache.prototype.has=setCacheHas;module.exports=SetCache},{"./_MapCache":8,"./_setCacheAdd":65,"./_setCacheHas":66}],12:[function(require,module,exports){var ListCache=require("./_ListCache"),stackClear=require("./_stackClear"),stackDelete=require("./_stackDelete"),stackGet=require("./_stackGet"),stackHas=require("./_stackHas"),stackSet=require("./_stackSet");function Stack(entries){this.__data__=new ListCache(entries)}Stack.prototype.clear=stackClear;Stack.prototype["delete"]=stackDelete;Stack.prototype.get=stackGet;Stack.prototype.has=stackHas;Stack.prototype.set=stackSet;module.exports=Stack},{"./_ListCache":6,"./_stackClear":68,"./_stackDelete":69,"./_stackGet":70,"./_stackHas":71,"./_stackSet":72}],13:[function(require,module,exports){var root=require("./_root");var Symbol=root.Symbol;module.exports=Symbol},{"./_root":64}],14:[function(require,module,exports){var root=require("./_root");var Uint8Array=root.Uint8Array;module.exports=Uint8Array},{"./_root":64}],15:[function(require,module,exports){var getNative=require("./_getNative"),root=require("./_root");var WeakMap=getNative(root,"WeakMap");module.exports=WeakMap},{"./_getNative":35,"./_root":64}],16:[function(require,module,exports){function arraySome(array,predicate){var index=-1,length=array?array.length:0;while(++index<length){if(predicate(array[index],index,array)){return true}}return false}module.exports=arraySome},{}],17:[function(require,module,exports){var eq=require("./eq");function assocIndexOf(array,key){var length=array.length;while(length--){if(eq(array[length][0],key)){return length}}return-1}module.exports=assocIndexOf},{"./eq":74}],18:[function(require,module,exports){var objectProto=Object.prototype;var objectToString=objectProto.toString;function baseGetTag(value){return objectToString.call(value)}module.exports=baseGetTag},{}],19:[function(require,module,exports){var getPrototype=require("./_getPrototype");var objectProto=Object.prototype;var hasOwnProperty=objectProto.hasOwnProperty;function baseHas(object,key){return object!=null&&(hasOwnProperty.call(object,key)||typeof object=="object"&&key in object&&getPrototype(object)===null)}module.exports=baseHas},{"./_getPrototype":36}],20:[function(require,module,exports){var baseIsEqualDeep=require("./_baseIsEqualDeep"),isObject=require("./isObject"),isObjectLike=require("./isObjectLike");function baseIsEqual(value,other,customizer,bitmask,stack){if(value===other){return true}if(value==null||other==null||!isObject(value)&&!isObjectLike(other)){return value!==value&&other!==other}return baseIsEqualDeep(value,other,baseIsEqual,customizer,bitmask,stack)}module.exports=baseIsEqual},{"./_baseIsEqualDeep":21,"./isObject":82,"./isObjectLike":83}],21:[function(require,module,exports){var Stack=require("./_Stack"),equalArrays=require("./_equalArrays"),equalByTag=require("./_equalByTag"),equalObjects=require("./_equalObjects"),getTag=require("./_getTag"),isArray=require("./isArray"),isHostObject=require("./_isHostObject"),isTypedArray=require("./isTypedArray");var PARTIAL_COMPARE_FLAG=2;var argsTag="[object Arguments]",arrayTag="[object Array]",objectTag="[object Object]";var objectProto=Object.prototype;var hasOwnProperty=objectProto.hasOwnProperty;function baseIsEqualDeep(object,other,equalFunc,customizer,bitmask,stack){var objIsArr=isArray(object),othIsArr=isArray(other),objTag=arrayTag,othTag=arrayTag;if(!objIsArr){objTag=getTag(object);objTag=objTag==argsTag?objectTag:objTag}if(!othIsArr){othTag=getTag(other);othTag=othTag==argsTag?objectTag:othTag}var objIsObj=objTag==objectTag&&!isHostObject(object),othIsObj=othTag==objectTag&&!isHostObject(other),isSameTag=objTag==othTag;if(isSameTag&&!objIsObj){stack||(stack=new Stack);return objIsArr||isTypedArray(object)?equalArrays(object,other,equalFunc,customizer,bitmask,stack):equalByTag(object,other,objTag,equalFunc,customizer,bitmask,stack)}if(!(bitmask&PARTIAL_COMPARE_FLAG)){var objIsWrapped=objIsObj&&hasOwnProperty.call(object,"__wrapped__"),othIsWrapped=othIsObj&&hasOwnProperty.call(other,"__wrapped__");if(objIsWrapped||othIsWrapped){var objUnwrapped=objIsWrapped?object.value():object,othUnwrapped=othIsWrapped?other.value():other;stack||(stack=new Stack);return equalFunc(objUnwrapped,othUnwrapped,customizer,bitmask,stack)}}if(!isSameTag){return false}stack||(stack=new Stack);return equalObjects(object,other,equalFunc,customizer,bitmask,stack)}module.exports=baseIsEqualDeep},{"./_Stack":12,"./_equalArrays":29,"./_equalByTag":30,"./_equalObjects":31,"./_getTag":37,"./_isHostObject":45,"./isArray":76,"./isTypedArray":85}],22:[function(require,module,exports){var isFunction=require("./isFunction"),isHostObject=require("./_isHostObject"),isMasked=require("./_isMasked"),isObject=require("./isObject"),toSource=require("./_toSource");var reRegExpChar=/[\\^$.*+?()[\]{}|]/g;var reIsHostCtor=/^\[object .+?Constructor\]$/;var objectProto=Object.prototype;var funcToString=Function.prototype.toString;var hasOwnProperty=objectProto.hasOwnProperty;var reIsNative=RegExp("^"+funcToString.call(hasOwnProperty).replace(reRegExpChar,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function baseIsNative(value){if(!isObject(value)||isMasked(value)){return false}var pattern=isFunction(value)||isHostObject(value)?reIsNative:reIsHostCtor;return pattern.test(toSource(value))}module.exports=baseIsNative},{"./_isHostObject":45,"./_isMasked":48,"./_toSource":73,"./isFunction":80,"./isObject":82}],23:[function(require,module,exports){var isLength=require("./isLength"),isObjectLike=require("./isObjectLike");var argsTag="[object Arguments]",arrayTag="[object Array]",boolTag="[object Boolean]",dateTag="[object Date]",errorTag="[object Error]",funcTag="[object Function]",mapTag="[object Map]",numberTag="[object Number]",objectTag="[object Object]",regexpTag="[object RegExp]",setTag="[object Set]",stringTag="[object String]",weakMapTag="[object WeakMap]";var arrayBufferTag="[object ArrayBuffer]",dataViewTag="[object DataView]",float32Tag="[object Float32Array]",float64Tag="[object Float64Array]",int8Tag="[object Int8Array]",int16Tag="[object Int16Array]",int32Tag="[object Int32Array]",uint8Tag="[object Uint8Array]",uint8ClampedTag="[object Uint8ClampedArray]",uint16Tag="[object Uint16Array]",uint32Tag="[object Uint32Array]";var typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=true;typedArrayTags[argsTag]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dataViewTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=false;var objectProto=Object.prototype;var objectToString=objectProto.toString;function baseIsTypedArray(value){return isObjectLike(value)&&isLength(value.length)&&!!typedArrayTags[objectToString.call(value)]}module.exports=baseIsTypedArray},{"./isLength":81,"./isObjectLike":83}],24:[function(require,module,exports){var overArg=require("./_overArg");var nativeKeys=Object.keys;var baseKeys=overArg(nativeKeys,Object);module.exports=baseKeys},{"./_overArg":63}],25:[function(require,module,exports){function baseProperty(key){return function(object){return object==null?undefined:object[key]}}module.exports=baseProperty},{}],26:[function(require,module,exports){function baseTimes(n,iteratee){var index=-1,result=Array(n);while(++index<n){result[index]=iteratee(index)}return result}module.exports=baseTimes},{}],27:[function(require,module,exports){function baseUnary(func){return function(value){return func(value)}}module.exports=baseUnary},{}],28:[function(require,module,exports){var root=require("./_root");var coreJsData=root["__core-js_shared__"];module.exports=coreJsData},{"./_root":64}],29:[function(require,module,exports){var SetCache=require("./_SetCache"),arraySome=require("./_arraySome");var UNORDERED_COMPARE_FLAG=1,PARTIAL_COMPARE_FLAG=2;function equalArrays(array,other,equalFunc,customizer,bitmask,stack){var isPartial=bitmask&PARTIAL_COMPARE_FLAG,arrLength=array.length,othLength=other.length;if(arrLength!=othLength&&!(isPartial&&othLength>arrLength)){return false}var stacked=stack.get(array);if(stacked&&stack.get(other)){return stacked==other}var index=-1,result=true,seen=bitmask&UNORDERED_COMPARE_FLAG?new SetCache:undefined;stack.set(array,other);stack.set(other,array);while(++index<arrLength){var arrValue=array[index],othValue=other[index];if(customizer){var compared=isPartial?customizer(othValue,arrValue,index,other,array,stack):customizer(arrValue,othValue,index,array,other,stack)}if(compared!==undefined){if(compared){continue}result=false;break}if(seen){if(!arraySome(other,function(othValue,othIndex){if(!seen.has(othIndex)&&(arrValue===othValue||equalFunc(arrValue,othValue,customizer,bitmask,stack))){return seen.add(othIndex)}})){result=false;break}}else if(!(arrValue===othValue||equalFunc(arrValue,othValue,customizer,bitmask,stack))){result=false;break}}stack["delete"](array);return result}module.exports=equalArrays},{"./_SetCache":11,"./_arraySome":16}],30:[function(require,module,exports){var Symbol=require("./_Symbol"),Uint8Array=require("./_Uint8Array"),eq=require("./eq"),equalArrays=require("./_equalArrays"),mapToArray=require("./_mapToArray"),setToArray=require("./_setToArray");var UNORDERED_COMPARE_FLAG=1,PARTIAL_COMPARE_FLAG=2;var boolTag="[object Boolean]",dateTag="[object Date]",errorTag="[object Error]",mapTag="[object Map]",numberTag="[object Number]",regexpTag="[object RegExp]",setTag="[object Set]",stringTag="[object String]",symbolTag="[object Symbol]";var arrayBufferTag="[object ArrayBuffer]",dataViewTag="[object DataView]";var symbolProto=Symbol?Symbol.prototype:undefined,symbolValueOf=symbolProto?symbolProto.valueOf:undefined;function equalByTag(object,other,tag,equalFunc,customizer,bitmask,stack){switch(tag){case dataViewTag:if(object.byteLength!=other.byteLength||object.byteOffset!=other.byteOffset){return false}object=object.buffer;other=other.buffer;case arrayBufferTag:if(object.byteLength!=other.byteLength||!equalFunc(new Uint8Array(object),new Uint8Array(other))){return false}return true;case boolTag:case dateTag:case numberTag:return eq(+object,+other);case errorTag:return object.name==other.name&&object.message==other.message;case regexpTag:case stringTag:return object==other+"";case mapTag:var convert=mapToArray;case setTag:var isPartial=bitmask&PARTIAL_COMPARE_FLAG;convert||(convert=setToArray);if(object.size!=other.size&&!isPartial){return false}var stacked=stack.get(object);if(stacked){return stacked==other}bitmask|=UNORDERED_COMPARE_FLAG;stack.set(object,other);var result=equalArrays(convert(object),convert(other),equalFunc,customizer,bitmask,stack);stack["delete"](object);return result;case symbolTag:if(symbolValueOf){return symbolValueOf.call(object)==symbolValueOf.call(other)}}return false}module.exports=equalByTag},{"./_Symbol":13,"./_Uint8Array":14,"./_equalArrays":29,"./_mapToArray":60,"./_setToArray":67,"./eq":74}],31:[function(require,module,exports){var baseHas=require("./_baseHas"),keys=require("./keys");var PARTIAL_COMPARE_FLAG=2;function equalObjects(object,other,equalFunc,customizer,bitmask,stack){var isPartial=bitmask&PARTIAL_COMPARE_FLAG,objProps=keys(object),objLength=objProps.length,othProps=keys(other),othLength=othProps.length;if(objLength!=othLength&&!isPartial){return false}var index=objLength;while(index--){var key=objProps[index];if(!(isPartial?key in other:baseHas(other,key))){return false}}var stacked=stack.get(object);if(stacked&&stack.get(other)){return stacked==other}var result=true;stack.set(object,other);stack.set(other,object);var skipCtor=isPartial;while(++index<objLength){key=objProps[index];var objValue=object[key],othValue=other[key];if(customizer){var compared=isPartial?customizer(othValue,objValue,key,other,object,stack):customizer(objValue,othValue,key,object,other,stack)}if(!(compared===undefined?objValue===othValue||equalFunc(objValue,othValue,customizer,bitmask,stack):compared)){result=false;break}skipCtor||(skipCtor=key=="constructor")}if(result&&!skipCtor){var objCtor=object.constructor,othCtor=other.constructor;if(objCtor!=othCtor&&("constructor"in object&&"constructor"in other)&&!(typeof objCtor=="function"&&objCtor instanceof objCtor&&typeof othCtor=="function"&&othCtor instanceof othCtor)){result=false}}stack["delete"](object);return result}module.exports=equalObjects},{"./_baseHas":19,"./keys":86}],32:[function(require,module,exports){(function(global){var freeGlobal=typeof global=="object"&&global&&global.Object===Object&&global;module.exports=freeGlobal}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],33:[function(require,module,exports){var baseProperty=require("./_baseProperty");var getLength=baseProperty("length");module.exports=getLength},{"./_baseProperty":25}],34:[function(require,module,exports){var isKeyable=require("./_isKeyable");function getMapData(map,key){var data=map.__data__;return isKeyable(key)?data[typeof key=="string"?"string":"hash"]:data.map}module.exports=getMapData},{"./_isKeyable":47}],35:[function(require,module,exports){var baseIsNative=require("./_baseIsNative"),getValue=require("./_getValue");function getNative(object,key){var value=getValue(object,key);return baseIsNative(value)?value:undefined}module.exports=getNative},{"./_baseIsNative":22,"./_getValue":38}],36:[function(require,module,exports){var overArg=require("./_overArg");var nativeGetPrototype=Object.getPrototypeOf;var getPrototype=overArg(nativeGetPrototype,Object);module.exports=getPrototype},{"./_overArg":63}],37:[function(require,module,exports){var DataView=require("./_DataView"),Map=require("./_Map"),Promise=require("./_Promise"),Set=require("./_Set"),WeakMap=require("./_WeakMap"),baseGetTag=require("./_baseGetTag"),toSource=require("./_toSource");var mapTag="[object Map]",objectTag="[object Object]",promiseTag="[object Promise]",setTag="[object Set]",weakMapTag="[object WeakMap]";var dataViewTag="[object DataView]";var objectProto=Object.prototype;var objectToString=objectProto.toString;var dataViewCtorString=toSource(DataView),mapCtorString=toSource(Map),promiseCtorString=toSource(Promise),setCtorString=toSource(Set),weakMapCtorString=toSource(WeakMap);var getTag=baseGetTag;if(DataView&&getTag(new DataView(new ArrayBuffer(1)))!=dataViewTag||Map&&getTag(new Map)!=mapTag||Promise&&getTag(Promise.resolve())!=promiseTag||Set&&getTag(new Set)!=setTag||WeakMap&&getTag(new WeakMap)!=weakMapTag){getTag=function(value){var result=objectToString.call(value),Ctor=result==objectTag?value.constructor:undefined,ctorString=Ctor?toSource(Ctor):undefined;if(ctorString){switch(ctorString){case dataViewCtorString:return dataViewTag;case mapCtorString:return mapTag;case promiseCtorString:return promiseTag;case setCtorString:return setTag;case weakMapCtorString:return weakMapTag}}return result}}module.exports=getTag},{"./_DataView":4,"./_Map":7,"./_Promise":9,"./_Set":10,"./_WeakMap":15,"./_baseGetTag":18,"./_toSource":73}],38:[function(require,module,exports){function getValue(object,key){return object==null?undefined:object[key]}module.exports=getValue},{}],39:[function(require,module,exports){var nativeCreate=require("./_nativeCreate");function hashClear(){this.__data__=nativeCreate?nativeCreate(null):{}}module.exports=hashClear},{"./_nativeCreate":61}],40:[function(require,module,exports){function hashDelete(key){return this.has(key)&&delete this.__data__[key]}module.exports=hashDelete},{}],41:[function(require,module,exports){var nativeCreate=require("./_nativeCreate");var HASH_UNDEFINED="__lodash_hash_undefined__";var objectProto=Object.prototype;var hasOwnProperty=objectProto.hasOwnProperty;function hashGet(key){var data=this.__data__;if(nativeCreate){var result=data[key];return result===HASH_UNDEFINED?undefined:result}return hasOwnProperty.call(data,key)?data[key]:undefined}module.exports=hashGet},{"./_nativeCreate":61}],42:[function(require,module,exports){var nativeCreate=require("./_nativeCreate");var objectProto=Object.prototype;var hasOwnProperty=objectProto.hasOwnProperty;function hashHas(key){var data=this.__data__;return nativeCreate?data[key]!==undefined:hasOwnProperty.call(data,key)}module.exports=hashHas},{"./_nativeCreate":61}],43:[function(require,module,exports){var nativeCreate=require("./_nativeCreate");var HASH_UNDEFINED="__lodash_hash_undefined__";function hashSet(key,value){var data=this.__data__;data[key]=nativeCreate&&value===undefined?HASH_UNDEFINED:value;return this}module.exports=hashSet},{"./_nativeCreate":61}],44:[function(require,module,exports){var baseTimes=require("./_baseTimes"),isArguments=require("./isArguments"),isArray=require("./isArray"),isLength=require("./isLength"),isString=require("./isString");function indexKeys(object){var length=object?object.length:undefined;if(isLength(length)&&(isArray(object)||isString(object)||isArguments(object))){return baseTimes(length,String)}return null}module.exports=indexKeys},{"./_baseTimes":26,"./isArguments":75,"./isArray":76,"./isLength":81,"./isString":84}],45:[function(require,module,exports){function isHostObject(value){var result=false;if(value!=null&&typeof value.toString!="function"){try{result=!!(value+"")}catch(e){}}return result}module.exports=isHostObject},{}],46:[function(require,module,exports){var MAX_SAFE_INTEGER=9007199254740991;var reIsUint=/^(?:0|[1-9]\d*)$/;function isIndex(value,length){length=length==null?MAX_SAFE_INTEGER:length;return!!length&&(typeof value=="number"||reIsUint.test(value))&&(value>-1&&value%1==0&&value<length)}module.exports=isIndex},{}],47:[function(require,module,exports){function isKeyable(value){var type=typeof value;return type=="string"||type=="number"||type=="symbol"||type=="boolean"?value!=="__proto__":value===null}module.exports=isKeyable},{}],48:[function(require,module,exports){var coreJsData=require("./_coreJsData");var maskSrcKey=function(){var uid=/[^.]+$/.exec(coreJsData&&coreJsData.keys&&coreJsData.keys.IE_PROTO||"");return uid?"Symbol(src)_1."+uid:""}();function isMasked(func){return!!maskSrcKey&&maskSrcKey in func}module.exports=isMasked},{"./_coreJsData":28}],49:[function(require,module,exports){var objectProto=Object.prototype;function isPrototype(value){var Ctor=value&&value.constructor,proto=typeof Ctor=="function"&&Ctor.prototype||objectProto;return value===proto}module.exports=isPrototype},{}],50:[function(require,module,exports){function listCacheClear(){this.__data__=[]}module.exports=listCacheClear},{}],51:[function(require,module,exports){var assocIndexOf=require("./_assocIndexOf");var arrayProto=Array.prototype;var splice=arrayProto.splice;function listCacheDelete(key){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){return false}var lastIndex=data.length-1;if(index==lastIndex){data.pop()}else{splice.call(data,index,1)}return true}module.exports=listCacheDelete},{"./_assocIndexOf":17}],52:[function(require,module,exports){var assocIndexOf=require("./_assocIndexOf");function listCacheGet(key){var data=this.__data__,index=assocIndexOf(data,key);return index<0?undefined:data[index][1]}module.exports=listCacheGet},{"./_assocIndexOf":17}],53:[function(require,module,exports){var assocIndexOf=require("./_assocIndexOf");function listCacheHas(key){return assocIndexOf(this.__data__,key)>-1}module.exports=listCacheHas},{"./_assocIndexOf":17}],54:[function(require,module,exports){var assocIndexOf=require("./_assocIndexOf");function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){data.push([key,value])}else{data[index][1]=value}return this}module.exports=listCacheSet},{"./_assocIndexOf":17}],55:[function(require,module,exports){var Hash=require("./_Hash"),ListCache=require("./_ListCache"),Map=require("./_Map");function mapCacheClear(){this.__data__={hash:new Hash,map:new(Map||ListCache),string:new Hash}}module.exports=mapCacheClear},{"./_Hash":5,"./_ListCache":6,"./_Map":7}],56:[function(require,module,exports){var getMapData=require("./_getMapData");function mapCacheDelete(key){return getMapData(this,key)["delete"](key)}module.exports=mapCacheDelete},{"./_getMapData":34}],57:[function(require,module,exports){var getMapData=require("./_getMapData");function mapCacheGet(key){return getMapData(this,key).get(key)}module.exports=mapCacheGet},{"./_getMapData":34}],58:[function(require,module,exports){var getMapData=require("./_getMapData");function mapCacheHas(key){return getMapData(this,key).has(key)}module.exports=mapCacheHas},{"./_getMapData":34}],59:[function(require,module,exports){var getMapData=require("./_getMapData");function mapCacheSet(key,value){getMapData(this,key).set(key,value);return this}module.exports=mapCacheSet},{"./_getMapData":34}],60:[function(require,module,exports){function mapToArray(map){var index=-1,result=Array(map.size);map.forEach(function(value,key){result[++index]=[key,value]});return result}module.exports=mapToArray},{}],61:[function(require,module,exports){var getNative=require("./_getNative");var nativeCreate=getNative(Object,"create");module.exports=nativeCreate},{"./_getNative":35}],62:[function(require,module,exports){var freeGlobal=require("./_freeGlobal");var freeExports=freeGlobal&&typeof exports=="object"&&exports;var freeModule=freeExports&&typeof module=="object"&&module;var moduleExports=freeModule&&freeModule.exports===freeExports;var freeProcess=moduleExports&&freeGlobal.process;var nodeUtil=function(){try{return freeProcess&&freeProcess.binding("util")}catch(e){}}();module.exports=nodeUtil},{"./_freeGlobal":32}],63:[function(require,module,exports){function overArg(func,transform){return function(arg){return func(transform(arg))}}module.exports=overArg},{}],64:[function(require,module,exports){var freeGlobal=require("./_freeGlobal");var freeSelf=typeof self=="object"&&self&&self.Object===Object&&self;var root=freeGlobal||freeSelf||Function("return this")();module.exports=root},{"./_freeGlobal":32}],65:[function(require,module,exports){var HASH_UNDEFINED="__lodash_hash_undefined__";function setCacheAdd(value){this.__data__.set(value,HASH_UNDEFINED);return this}module.exports=setCacheAdd},{}],66:[function(require,module,exports){function setCacheHas(value){return this.__data__.has(value)}module.exports=setCacheHas},{}],67:[function(require,module,exports){function setToArray(set){var index=-1,result=Array(set.size);set.forEach(function(value){result[++index]=value});return result}module.exports=setToArray},{}],68:[function(require,module,exports){var ListCache=require("./_ListCache");
function stackClear(){this.__data__=new ListCache}module.exports=stackClear},{"./_ListCache":6}],69:[function(require,module,exports){function stackDelete(key){return this.__data__["delete"](key)}module.exports=stackDelete},{}],70:[function(require,module,exports){function stackGet(key){return this.__data__.get(key)}module.exports=stackGet},{}],71:[function(require,module,exports){function stackHas(key){return this.__data__.has(key)}module.exports=stackHas},{}],72:[function(require,module,exports){var ListCache=require("./_ListCache"),Map=require("./_Map"),MapCache=require("./_MapCache");var LARGE_ARRAY_SIZE=200;function stackSet(key,value){var cache=this.__data__;if(cache instanceof ListCache){var pairs=cache.__data__;if(!Map||pairs.length<LARGE_ARRAY_SIZE-1){pairs.push([key,value]);return this}cache=this.__data__=new MapCache(pairs)}cache.set(key,value);return this}module.exports=stackSet},{"./_ListCache":6,"./_Map":7,"./_MapCache":8}],73:[function(require,module,exports){var funcToString=Function.prototype.toString;function toSource(func){if(func!=null){try{return funcToString.call(func)}catch(e){}try{return func+""}catch(e){}}return""}module.exports=toSource},{}],74:[function(require,module,exports){function eq(value,other){return value===other||value!==value&&other!==other}module.exports=eq},{}],75:[function(require,module,exports){var isArrayLikeObject=require("./isArrayLikeObject");var argsTag="[object Arguments]";var objectProto=Object.prototype;var hasOwnProperty=objectProto.hasOwnProperty;var objectToString=objectProto.toString;var propertyIsEnumerable=objectProto.propertyIsEnumerable;function isArguments(value){return isArrayLikeObject(value)&&hasOwnProperty.call(value,"callee")&&(!propertyIsEnumerable.call(value,"callee")||objectToString.call(value)==argsTag)}module.exports=isArguments},{"./isArrayLikeObject":78}],76:[function(require,module,exports){var isArray=Array.isArray;module.exports=isArray},{}],77:[function(require,module,exports){var getLength=require("./_getLength"),isFunction=require("./isFunction"),isLength=require("./isLength");function isArrayLike(value){return value!=null&&isLength(getLength(value))&&!isFunction(value)}module.exports=isArrayLike},{"./_getLength":33,"./isFunction":80,"./isLength":81}],78:[function(require,module,exports){var isArrayLike=require("./isArrayLike"),isObjectLike=require("./isObjectLike");function isArrayLikeObject(value){return isObjectLike(value)&&isArrayLike(value)}module.exports=isArrayLikeObject},{"./isArrayLike":77,"./isObjectLike":83}],79:[function(require,module,exports){var baseIsEqual=require("./_baseIsEqual");function isEqual(value,other){return baseIsEqual(value,other)}module.exports=isEqual},{"./_baseIsEqual":20}],80:[function(require,module,exports){var isObject=require("./isObject");var funcTag="[object Function]",genTag="[object GeneratorFunction]";var objectProto=Object.prototype;var objectToString=objectProto.toString;function isFunction(value){var tag=isObject(value)?objectToString.call(value):"";return tag==funcTag||tag==genTag}module.exports=isFunction},{"./isObject":82}],81:[function(require,module,exports){var MAX_SAFE_INTEGER=9007199254740991;function isLength(value){return typeof value=="number"&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER}module.exports=isLength},{}],82:[function(require,module,exports){function isObject(value){var type=typeof value;return!!value&&(type=="object"||type=="function")}module.exports=isObject},{}],83:[function(require,module,exports){function isObjectLike(value){return!!value&&typeof value=="object"}module.exports=isObjectLike},{}],84:[function(require,module,exports){var isArray=require("./isArray"),isObjectLike=require("./isObjectLike");var stringTag="[object String]";var objectProto=Object.prototype;var objectToString=objectProto.toString;function isString(value){return typeof value=="string"||!isArray(value)&&isObjectLike(value)&&objectToString.call(value)==stringTag}module.exports=isString},{"./isArray":76,"./isObjectLike":83}],85:[function(require,module,exports){var baseIsTypedArray=require("./_baseIsTypedArray"),baseUnary=require("./_baseUnary"),nodeUtil=require("./_nodeUtil");var nodeIsTypedArray=nodeUtil&&nodeUtil.isTypedArray;var isTypedArray=nodeIsTypedArray?baseUnary(nodeIsTypedArray):baseIsTypedArray;module.exports=isTypedArray},{"./_baseIsTypedArray":23,"./_baseUnary":27,"./_nodeUtil":62}],86:[function(require,module,exports){var baseHas=require("./_baseHas"),baseKeys=require("./_baseKeys"),indexKeys=require("./_indexKeys"),isArrayLike=require("./isArrayLike"),isIndex=require("./_isIndex"),isPrototype=require("./_isPrototype");function keys(object){var isProto=isPrototype(object);if(!(isProto||isArrayLike(object))){return baseKeys(object)}var indexes=indexKeys(object),skipIndexes=!!indexes,result=indexes||[],length=result.length;for(var key in object){if(baseHas(object,key)&&!(skipIndexes&&(key=="length"||isIndex(key,length)))&&!(isProto&&key=="constructor")){result.push(key)}}return result}module.exports=keys},{"./_baseHas":19,"./_baseKeys":24,"./_indexKeys":44,"./_isIndex":46,"./_isPrototype":49,"./isArrayLike":77}],normalizr:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Schema=undefined;var _extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key]}}}return target};exports.arrayOf=arrayOf;exports.valuesOf=valuesOf;exports.unionOf=unionOf;exports.normalize=normalize;var _EntitySchema=require("./EntitySchema");var _EntitySchema2=_interopRequireDefault(_EntitySchema);var _IterableSchema=require("./IterableSchema");var _IterableSchema2=_interopRequireDefault(_IterableSchema);var _UnionSchema=require("./UnionSchema");var _UnionSchema2=_interopRequireDefault(_UnionSchema);var _isEqual=require("lodash/isEqual");var _isEqual2=_interopRequireDefault(_isEqual);var _isObject=require("lodash/isObject");var _isObject2=_interopRequireDefault(_isObject);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function defaultAssignEntity(normalized,key,entity){normalized[key]=entity}function visitObject(obj,schema,bag,options){var _options$assignEntity=options.assignEntity;var assignEntity=_options$assignEntity===undefined?defaultAssignEntity:_options$assignEntity;var defaults=schema&&schema.getDefaults&&schema.getDefaults();var schemaAssignEntity=schema&&schema.getAssignEntity&&schema.getAssignEntity();var normalized=(0,_isObject2.default)(defaults)?_extends({},defaults):{};for(var key in obj){if(obj.hasOwnProperty(key)){var entity=visit(obj[key],schema[key],bag,options);assignEntity.call(null,normalized,key,entity,obj,schema);if(schemaAssignEntity){schemaAssignEntity.call(null,normalized,key,entity,obj,schema)}}}return normalized}function defaultMapper(iterableSchema,itemSchema,bag,options){return function(obj){return visit(obj,itemSchema,bag,options)}}function polymorphicMapper(iterableSchema,itemSchema,bag,options){return function(obj){var schemaKey=iterableSchema.getSchemaKey(obj);var result=visit(obj,itemSchema[schemaKey],bag,options);return{id:result,schema:schemaKey}}}function visitIterable(obj,iterableSchema,bag,options){var itemSchema=iterableSchema.getItemSchema();var curriedItemMapper=defaultMapper(iterableSchema,itemSchema,bag,options);if(Array.isArray(obj)){return obj.map(curriedItemMapper)}else{return Object.keys(obj).reduce(function(objMap,key){objMap[key]=curriedItemMapper(obj[key]);return objMap},{})}}function visitUnion(obj,unionSchema,bag,options){var itemSchema=unionSchema.getItemSchema();return polymorphicMapper(unionSchema,itemSchema,bag,options)(obj)}function defaultMergeIntoEntity(entityA,entityB,entityKey){for(var key in entityB){if(!entityB.hasOwnProperty(key)){continue}if(!entityA.hasOwnProperty(key)||(0,_isEqual2.default)(entityA[key],entityB[key])){entityA[key]=entityB[key];continue}console.warn("When merging two "+entityKey+', found unequal data in their "'+key+'" values. Using the earlier value.',entityA[key],entityB[key])}}function visitEntity(entity,entitySchema,bag,options){var _options$mergeIntoEnt=options.mergeIntoEntity;var mergeIntoEntity=_options$mergeIntoEnt===undefined?defaultMergeIntoEntity:_options$mergeIntoEnt;var entityKey=entitySchema.getKey();var id=entitySchema.getId(entity);if(!bag.hasOwnProperty(entityKey)){bag[entityKey]={}}if(!bag[entityKey].hasOwnProperty(id)){bag[entityKey][id]={}}var stored=bag[entityKey][id];var normalized=visitObject(entity,entitySchema,bag,options);mergeIntoEntity(stored,normalized,entityKey);return id}function visit(obj,schema,bag,options){if(!(0,_isObject2.default)(obj)||!(0,_isObject2.default)(schema)){return obj}if(schema instanceof _EntitySchema2.default){return visitEntity(obj,schema,bag,options)}else if(schema instanceof _IterableSchema2.default){return visitIterable(obj,schema,bag,options)}else if(schema instanceof _UnionSchema2.default){return visitUnion(obj,schema,bag,options)}else{return visitObject(obj,schema,bag,options)}}function arrayOf(schema,options){return new _IterableSchema2.default(schema,options)}function valuesOf(schema,options){return new _IterableSchema2.default(schema,options)}function unionOf(schema,options){return new _UnionSchema2.default(schema,options)}exports.Schema=_EntitySchema2.default;function normalize(obj,schema){var options=arguments.length<=2||arguments[2]===undefined?{}:arguments[2];if(!(0,_isObject2.default)(obj)){throw new Error("Normalize accepts an object or an array as its input.")}if(!(0,_isObject2.default)(schema)||Array.isArray(schema)){throw new Error("Normalize accepts an object for schema.")}var bag={};var result=visit(obj,schema,bag,options);return{entities:bag,result:result}}},{"./EntitySchema":1,"./IterableSchema":2,"./UnionSchema":3,"lodash/isEqual":79,"lodash/isObject":82}]},{},[]);const normalizr=require("normalizr");const response={data:{id:1,title:"Lord of the Rings",pages:9250,publisher:{data:{id:1,name:"HarperCollins LLC",address:"Big building next to the river",city:"Amsterdam",country:{data:{id:1,name:"The Netherlands",population:1e3}}}},author:{data:{id:1,name:"J.R.R Tolkien",country:"UK",age:124}},characters:[{data:{id:1,name:"Bilbo Baggins",race:"Hobbit"}},{id:2,name:"Gandalf The Grey",race:"Wizard"},{id:3,name:"Legolas",race:"Elf"}]}};const country=new normalizr.Schema("country");const character=new normalizr.Schema("character");const book=new normalizr.Schema("book");const publisher=new normalizr.Schema("publisher");const author=new normalizr.Schema("author");book.define({data:{publisher:publisher,author:author,characters:normalizr.arrayOf(character)}});publisher.define({data:{country:country}});const result=normalizr.normalize(response,book,{assignEntity:function(output,key,value,input){if(key==="data"){Object.keys(value).forEach(function(d){output[d]=value[d]})}else{output[key]=value}}});console.log(result)},0);
{
"name": "requirebin-sketch",
"version": "1.0.0",
"dependencies": {
"normalizr": "2.2.1"
}
}
<!-- contents of this file will be placed inside the <body> -->
<!-- contents of this file will be placed inside the <head> -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment