UNPKG

patreon

Version:
1 lines 2.86 kB
"use strict";function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function t(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}return function(e,i,a){return i&&t(e.prototype,i),a&&t(e,a),e}}(),JsonApiDataStoreModel=function(){function t(e,i){_classCallCheck(this,t),this.id=i,this._type=e,this._attributes=[],this._relationships=[]}return _createClass(t,[{key:"serialize",value:function(t){var e=this,i={data:{type:this._type}};return t=t||{},t.attributes=t.attributes||this._attributes,t.relationships=t.relationships||this._relationships,void 0!==this.id&&(i.data.id=this.id),0!==t.attributes.length&&(i.data.attributes={}),0!==t.relationships.length&&(i.data.relationships={}),t.attributes.forEach(function(t){i.data.attributes[t]=e[t]}),t.relationships.forEach(function(t){function a(t){return{type:t._type,id:t.id}}i.data.relationships[t]=e[t]?e[t].constructor===Array?{data:e[t].map(a)}:{data:a(e[t])}:{data:null}}),i}},{key:"setAttribute",value:function(t,e){void 0===this[t]&&this._attributes.push(t),this[t]=e}},{key:"setRelationship",value:function(t,e){void 0===this[t]&&this._relationships.push(t),this[t]=e}}]),t}(),JsonApiDataStore=function(){function t(){_classCallCheck(this,t),this.graph={}}return _createClass(t,[{key:"destroy",value:function(t){delete this.graph[t._type][t.id]}},{key:"find",value:function(t,e){return this.graph[t]&&this.graph[t][e]?this.graph[t][e]:null}},{key:"findAll",value:function(t){var e=this;return this.graph[t]?Object.keys(e.graph[t]).map(function(i){return e.graph[t][i]}):[]}},{key:"reset",value:function(){this.graph={}}},{key:"initModel",value:function(t,e){return this.graph[t]=this.graph[t]||{},this.graph[t][e]=this.graph[t][e]||new JsonApiDataStoreModel(t,e),this.graph[t][e]}},{key:"syncRecord",value:function(t){function e(t){if(!a.find(t.type,t.id)){var e=a.initModel(t.type,t.id);e._placeHolder=!0}return a.graph[t.type][t.id]}var i,a=this,n=this.initModel(t.type,t.id);delete n._placeHolder;for(i in t.attributes)n._attributes.push(i),n[i]=t.attributes[i];if(t.relationships)for(i in t.relationships){var r=t.relationships[i];void 0!==r.data&&(n._relationships.push(i),n[i]=null===r.data?null:r.data.constructor===Array?r.data.map(e):e(r.data)),r.links&&console.log("Warning: Links not implemented yet.")}return n}},{key:"syncWithMeta",value:function(t){var e=t.data,i=this.syncRecord.bind(this);return e?(t.included&&t.included.map(i),{data:e.constructor===Array?e.map(i):i(e),meta:"meta"in t?t.meta:null}):[]}},{key:"sync",value:function(t){return this.syncWithMeta(t).data}}]),t}();"undefined"!=typeof module&&(module.exports={JsonApiDataStore:JsonApiDataStore,JsonApiDataStoreModel:JsonApiDataStoreModel});