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