vue-easy-rest
Version:
Advanced model layer for a VueJS app with a REST API
2 lines (1 loc) • 44.6 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("lodash"),require("axios"),require("vue")):"function"==typeof define&&define.amd?define(["exports","lodash","axios","vue"],t):t((e=e||self)["vue-easy-rest"]={},e._,e.axios,e.Vue)}(this,function(e,u,i,y){"use strict";var g="default"in u?u.default:u;function l(e,t,r,i,n,s,o){try{var a=e[s](o),u=a.value}catch(e){return void r(e)}a.done?t(u):Promise.resolve(u).then(i,n)}function o(a){return function(){var e=this,o=arguments;return new Promise(function(t,r){var i=a.apply(e,o);function n(e){l(i,t,r,n,s,"next",e)}function s(e){l(i,t,r,n,s,"throw",e)}n(void 0)})}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var r=0;r<t.length;r++){var i=t[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function h(e,t,r){return t&&n(e.prototype,t),r&&n(e,r),e}function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&r(e,t)}function f(e){return(f=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function r(e,t){return(r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function d(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function v(e,t){return!t||"object"!=typeof t&&"function"!=typeof t?d(e):t}function s(e,t,r){return(s="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var i=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=f(e)););return e}(e,t);if(i){var n=Object.getOwnPropertyDescriptor(i,t);return n.get?n.get.call(r):n.value}})(e,t,r||e)}function p(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=[],i=!0,n=!1,s=void 0;try{for(var o,a=e[Symbol.iterator]();!(i=(o=a.next()).done)&&(r.push(o.value),!t||r.length!==t);i=!0);}catch(e){n=!0,s=e}finally{try{i||null==a.return||a.return()}finally{if(n)throw s}}return r}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}i=i&&i.hasOwnProperty("default")?i.default:i,y=y&&y.hasOwnProperty("default")?y.default:y;var m=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},_=function(){function i(e,t){for(var r=0;r<t.length;r++){var i=t[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(e,t,r){return t&&i(e.prototype,t),r&&i(e,r),e}}(),t=function e(t,r,i){null===t&&(t=Function.prototype);var n=Object.getOwnPropertyDescriptor(t,r);if(void 0===n){var s=Object.getPrototypeOf(t);return null===s?void 0:e(s,r,i)}if("value"in n)return n.value;var o=n.get;return void 0!==o?o.call(i):void 0},k=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)},b=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},O=function(){function t(e){m(this,t),this.response=e}return _(t,[{key:"getData",value:function(){return u.get(this.response,"data",null)}},{key:"getStatus",value:function(){return u.get(this.response,"status")}},{key:"getHeaders",value:function(){return u.get(this.response,"headers",{})}},{key:"getValidationErrors",value:function(){return u.get(this.response,"data",null)}}]),t}(),w=function(){function r(e,t){m(this,r),this.error=e,this.response=t,this.stack=(new Error).stack,this.message=e.message}return _(r,[{key:"toString",value:function(){return this.message}},{key:"getError",value:function(){return this.error}},{key:"getResponse",value:function(){return this.response}}]),r}(),R=function(){function t(e){m(this,t),this.config=e}return _(t,[{key:"send",value:function(){var e=this;return new Promise(function(t,r){i.request(e.config).then(function(e){return t(new O(e))}).catch(function(e){return r(new w(e,new O(e.response)))})})}}]),t}(),P=function(){function t(e){m(this,t),function(e){for(var t=e;t;t=Object.getPrototypeOf(t)){if("Object"===t.constructor.name)return;for(var r=Object.getOwnPropertyNames(t),i=0;i<r.length;i++){var n=r[i];Object.getOwnPropertyDescriptor(t,n).get||"function"==typeof t[n]&&"constructor"!==n&&Object.defineProperty(e,n,{value:e[n].bind(e),enumerable:!1,configurable:!0,writable:!0})}}}(this),Object.defineProperty(this,"_uid",{value:u.uniqueId(),enumerable:!1,configurable:!1,writable:!1}),y.set(this,"_listeners",{}),y.set(this,"_options",{}),this.setOptions(e),this.boot()}return _(t,[{key:"boot",value:function(){}},{key:"routes",value:function(){return{}}},{key:"getDefaultEventContext",value:function(){return{target:this}}},{key:"toString",value:function(){return"<"+this.$class+" #"+this._uid+">"}},{key:"emit",value:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r=u.get(this._listeners,e);r&&(t=u.defaults({},t,this.getDefaultEventContext()),u.each(r,function(e){return e(t)}))}},{key:"on",value:function(e,t){var r=this,i=u.map(u.split(e,","),u.trim);u.each(i,function(e){r._listeners[e]=r._listeners[e]||[],r._listeners[e].push(t)})}},{key:"getRouteParameters",value:function(){return{}}},{key:"getRouteParameterPattern",value:function(){return this.getOption("routeParameterPattern")}},{key:"getDefaultRouteParameterPattern",value:function(){return/\{([^}]+)\}/}},{key:"getDefaultOptions",value:function(){return{methods:this.getDefaultMethods(),routeParameterPattern:this.getDefaultRouteParameterPattern(),validationErrorStatus:422}}},{key:"getOption",value:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null;return u.get(this._options,e,t)}},{key:"options",value:function(){return{}}},{key:"setOption",value:function(e,t){u.set(this._options,e,t)}},{key:"setOptions",value:function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];y.set(this,"_options",u.defaultsDeep.apply(u,[{}].concat(t,[this.options(),this.getDefaultOptions()])))}},{key:"getOptions",value:function(){return u.defaultTo(this._options,{})}},{key:"getRouteResolver",value:function(){return this.getDefaultRouteResolver()}},{key:"getRouteReplacements",value:function(e){for(var t,r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},i={},n=new RegExp(this.getRouteParameterPattern(),"g");null!==(t=n.exec(e));)i[t[0]]=r[t[1]];return i}},{key:"getDefaultRouteResolver",value:function(){var i=this;return function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r=i.getRouteReplacements(e,t);return u.reduce(r,function(e,t,r){return u.replace(e,r,t)},e)}}},{key:"getDeleteBody",value:function(){return{}}},{key:"getFetchQuery",value:function(){return{}}},{key:"getSaveQuery",value:function(){return{}}},{key:"getDeleteQuery",value:function(){return{}}},{key:"getFetchRoute",value:function(){return this.getRoute("fetch")}},{key:"getSaveRoute",value:function(){return this.getRoute("save")}},{key:"getDeleteRoute",value:function(){return this.getRoute("delete")}},{key:"getSaveHeaders",value:function(){return{}}},{key:"getDefaultHeaders",value:function(){return{}}},{key:"getFetchHeaders",value:function(){return{}}},{key:"getDeleteHeaders",value:function(){return{}}},{key:"getDefaultMethods",value:function(){return{fetch:"GET",save:"POST",update:"POST",create:"POST",patch:"PATCH",delete:"DELETE"}}},{key:"getSaveMethod",value:function(){return this.getOption("methods.save")}},{key:"getFetchMethod",value:function(){return this.getOption("methods.fetch")}},{key:"getUpdateMethod",value:function(){return this.getOption("methods.update")}},{key:"getPatchMethod",value:function(){return this.getOption("methods.patch")}},{key:"getCreateMethod",value:function(){return this.getOption("methods.create")}},{key:"getDeleteMethod",value:function(){return this.getOption("methods.delete")}},{key:"getValidationErrorStatus",value:function(){return u.defaultTo(this.getOption("validationErrorStatus"),422)}},{key:"isBackendValidationError",value:function(e){return!!u.invoke(e,"getResponse",!1)&&e.getResponse().getStatus()==this.getValidationErrorStatus()}},{key:"getRoute",value:function(e,t){var r=u.get(this.routes(),e,u.get(this.routes(),t));if(!r)throw new Error("Invalid or missing route");return r}},{key:"getFetchURL",value:function(){return this.getURL(this.getFetchRoute(),this.getRouteParameters())}},{key:"getSaveURL",value:function(){return this.getURL(this.getSaveRoute(),this.getRouteParameters())}},{key:"getDeleteURL",value:function(){return this.getURL(this.getDeleteRoute(),this.getRouteParameters())}},{key:"getURL",value:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return this.getRouteResolver()(e,t)}},{key:"getRequest",value:function(e){return new R(e)}},{key:"request",value:function(i,n,s,o){var a=this;return new Promise(function(t,r){var e=n();if(!1!==e)return!0===e?(s(null),t(null)):(u.isFunction(i)&&(i=i()),u.defaults(i.headers,a.getDefaultHeaders()),a.getRequest(i).send().then(function(e){return s(e),t(e)}).catch(function(e){return o(e),r(e)}).catch(function(e){return r(e)}))})}},{key:"fetch",value:function(){var e=this;return this.request(function(){return{url:e.getFetchURL(),method:e.getFetchMethod(),params:e.getFetchQuery(),headers:e.getFetchHeaders()}},this.onFetch,this.onFetchSuccess,this.onFetchFailure)}},{key:"save",value:function(){var e=this;return this.request(function(){return{url:e.getSaveURL(),method:e.getSaveMethod(),data:e.getSaveData(),params:e.getSaveQuery(),headers:e.getSaveHeaders()}},this.onSave,this.onSaveSuccess,this.onSaveFailure)}},{key:"delete",value:function(){var e=this;return this.request(function(){return{url:e.getDeleteURL(),method:e.getDeleteMethod(),data:e.getDeleteBody(),params:e.getDeleteQuery(),headers:e.getDeleteHeaders()}},this.onDelete,this.onDeleteSuccess,this.onDeleteFailure)}},{key:"$class",get:function(){return Object.getPrototypeOf(this).constructor.name}}]),t}(),D=function(){function r(e,t){m(this,r),this.message=e,this.response=t,this.stack=(new Error).stack}return _(r,[{key:"toString",value:function(){return this.message}},{key:"getResponse",value:function(){return this.response}}]),r}(),S=function(){function r(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:"Model did not pass validation";m(this,r),this.message=t,this.errors=e,this.stack=(new Error).stack}return _(r,[{key:"toString",value:function(){return this.message}},{key:"getValidationErrors",value:function(){return this.errors}}]),r}(),E=function(){function i(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};m(this,i),this.data=u.defaultTo(t,{}),this.headers=u.defaultTo(r,{}),this.status=u.toSafeInteger(e)}return _(i,[{key:"getData",value:function(){return this.data}},{key:"getStatus",value:function(){return this.status}},{key:"getHeaders",value:function(){return this.headers}},{key:"getValidationErrors",value:function(){return this.data}}]),i}(),M=null,F=function(e){function n(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};m(this,n);var i=b(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,t));return y.set(i,"models",[]),y.set(i,"_attributes",{}),y.set(i,"_registry",{}),y.set(i,"_page",M),i.clearState(),i.set(u.defaultsDeep({},r,i.defaults())),e&&i.add(u.values(e)),i}return k(n,P),_(n,[{key:"length",get:function(){return this.size()}}]),_(n,[{key:"clone",value:function(){var e=new this.constructor;return e.add(this.models),e.setOptions(this.getOptions()),e}},{key:"model",value:function(){return this.getOption("model")}},{key:"defaults",value:function(){return{}}},{key:"get",value:function(e,t){return u.get(this._attributes,e,t)}},{key:"set",value:function(e,t){var r=this;u.isPlainObject(e)?u.each(e,function(e,t){r.set(t,e)}):y.set(this._attributes,e,t)}},{key:"getDefaultOptions",value:function(){return u.merge(t(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),"getDefaultOptions",this).call(this),{model:x,useDeleteBody:!0})}},{key:"getRouteParameters",value:function(){return u.merge({},t(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),"getRouteParameters",this).call(this),this._attributes,{page:this._page})}},{key:"clearErrors",value:function(){u.each(this.models,u.method("clearErrors"))}},{key:"clearState",value:function(){y.set(this,"loading",!0),y.set(this,"saving",!1),y.set(this,"deleting",!1),y.set(this,"fatal",!1)}},{key:"clearModels",value:function(){var t=this,e=this.models;y.set(this,"models",[]),u.each(e,function(e){t.onRemove(e)})}},{key:"clear",value:function(){this.clearModels(),this.clearState()}},{key:"sync",value:function(){u.each(this.models,u.method("sync"))}},{key:"reset",value:function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];u.each(this.models,u.method.apply(u,["reset"].concat(t)))}},{key:"size",value:function(){return u.size(this.models)}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"toJSON",value:function(){return this.models}},{key:"validate",value:function(){return u.reduce(this.models,function(e,t){return t.validate()&&e},!0)}},{key:"createModel",value:function(e){return new(this.model())(e)}},{key:"removeModelFromRegistry",value:function(e){u.unset(this._registry,e._uid)}},{key:"hasModelInRegistry",value:function(e){return u.has(this._registry,e._uid)}},{key:"addModelToRegistry",value:function(e){u.set(this._registry,e._uid,1)}},{key:"onAdd",value:function(e){e.registerCollection(this),this.addModelToRegistry(e),this.emit("add",{model:e})}},{key:"add",value:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};if(u.isArray(e))return u.filter(u.map(e,this.add));if(u.isPlainObject(e))return this.add(this.createModel(e));if(!this.isModel(e))throw new Error("Expected a model, plain object, or array of either");return this.hasModelInRegistry(e)?void 0:(this.models.push(e),this.onAdd(e),y.set(this,"loading",!1),e)}},{key:"onRemove",value:function(e){e.unregisterCollection(this),this.removeModelFromRegistry(e),this.emit("remove",{model:e})}},{key:"_removeModelAtIndex",value:function(e){if(!(e<0)){var t=u.get(this.models,e);return y.delete(this.models,e),this.onRemove(t),t}}},{key:"_removeModel",value:function(e){return this._removeModelAtIndex(this.indexOf(e))}},{key:"remove",value:function(e){if(!e)throw new Error("Expected function, object, array, or model to remove");if(u.isFunction(e)||u.isPlainObject(e))return this.remove(u.filter(this.models,e));if(u.isArray(e))return u.filter(u.map(e,this.remove));if(!this.isModel(e))throw new Error("Model to remove is not a valid model");return this._removeModel(e)}},{key:"isModel",value:function(e){return u.isObject(e)&&u.has(e,"_attributes")&&u.has(e,"_uid")}},{key:"indexOf",value:function(e){var t=e;if(this.isModel(t)){if(!u.has(this._registry,e._uid))return-1;t={_uid:e._uid}}return u.findIndex(this.models,t)}},{key:"find",value:function(e){return u.find(this.models,e)}},{key:"wrap",value:function(e){return new this.constructor(e)}},{key:"filter",value:function(e){return this.wrap(this.where(e))}},{key:"where",value:function(e){return u.filter(this.models,e)}},{key:"map",value:function(e){return u.map(this.models,e)}},{key:"each",value:function(e){return u.each(this.models,e)}},{key:"reduce",value:function(e,t){return 1===arguments.length&&(t=this.first()),u.reduce(this.models,e,t)}},{key:"sum",value:function(e){return u.sumBy(this.models,e)}},{key:"count",value:function(e){return u.countBy(this.models,e)}},{key:"sort",value:function(e){y.set(this,"models",u.sortBy(this.models,e))}},{key:"has",value:function(e){return 0<=this.indexOf(e)}},{key:"first",value:function(){return u.first(this.models)}},{key:"last",value:function(){return u.last(this.models)}},{key:"shift",value:function(){if(!this.isEmpty())return this._removeModelAtIndex(0)}},{key:"pop",value:function(){if(!this.isEmpty())return this._removeModelAtIndex(this.size()-1)}},{key:"replace",value:function(e){this.clearModels(),this.add(u.values(e))}},{key:"getPaginationQuery",value:function(){return{page:this._page}}},{key:"getFetchQuery",value:function(){return this.isPaginated()?this.getPaginationQuery():t(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),"getFetchQuery",this).call(this)}},{key:"getModelsFromResponse",value:function(e){var t=e.getData();return u.isNil(t)||""===t?null:this.isPaginated()?u.get(t,"data",t):t}},{key:"onSaveSuccess",value:function(r){var e=this.getModelsFromResponse(r),i=this.getSavingModels();if(u.isNil(e))u.each(i,u.method("sync"));else{if(!u.isArray(e))throw new D("Response data must be an array or empty",r);if(e.length!==i.length)throw new D("Expected the same number of models in the response",r);u.each(e,function(e,t){i[t].onSaveSuccess(new E(200,e,r.getHeaders()))})}y.set(this,"saving",!1),y.set(this,"fatal",!1),this.emit("save",{error:null})}},{key:"getSavingModels",value:function(){return u.filter(this.models,"saving")}},{key:"getDeletingModels",value:function(){return u.filter(this.models,"deleting")}},{key:"applyValidationErrorArray",value:function(r){var e=this.getSavingModels();if(r.length!==e.length)throw new D("Array of errors must equal the number of models");u.each(e,function(e,t){e.setErrors(r[t]),y.set(e,"saving",!1),y.set(e,"fatal",!1)})}},{key:"applyValidationErrorObject",value:function(e){var i=u.keyBy(this.models,function(e){return e.identifier()});u.each(e,function(e,t){var r=u.get(i,t);r&&r.setErrors(e)})}},{key:"setErrors",value:function(e){u.isArray(e)?this.applyValidationErrorArray(e):u.isPlainObject(e)&&this.applyValidationErrorObject(e)}},{key:"getErrors",value:function(){return u.map(this.models,"errors")}},{key:"onSaveValidationFailure",value:function(e){var t=e.getResponse(),r=t.getValidationErrors();if(!u.isPlainObject(r)&&!u.isArray(r))throw new D("Validation errors must be an object or array",t);this.setErrors(r),y.set(this,"fatal",!1),y.set(this,"saving",!1)}},{key:"onFatalSaveFailure",value:function(t,r){u.each(this.getSavingModels(),function(e){e.onFatalSaveFailure(t,r)}),y.set(this,"fatal",!0),y.set(this,"saving",!1)}},{key:"onSaveFailure",value:function(e){this.isBackendValidationError(e)?this.onSaveValidationFailure(e):this.onFatalSaveFailure(e),this.emit("save",{error:e})}},{key:"getSaveData",value:function(){return u.map(this.getSavingModels(),u.method("getSaveData"))}},{key:"page",value:function(e){return u.isNil(e)?y.set(this,"_page",M):y.set(this,"_page",u.max([1,u.toSafeInteger(e)])),this}},{key:"getPage",value:function(){return this._page}},{key:"isPaginated",value:function(){return this._page!==M}},{key:"isLastPage",value:function(){return 0===this._page}},{key:"applyPagination",value:function(e){u.isEmpty(e)?y.set(this,"_page",0):(y.set(this,"_page",this._page+1),this.add(e))}},{key:"onFetchSuccess",value:function(e){var t=this.getModelsFromResponse(e);if(!u.isArray(t))throw new D("Expected an array of models in fetch response");this.isPaginated()?this.applyPagination(t):this.replace(t),y.set(this,"loading",!1),y.set(this,"fatal",!1),this.emit("fetch",{error:null})}},{key:"onFetchFailure",value:function(e){this.clearErrors(),y.set(this,"fatal",!0),y.set(this,"loading",!1),this.emit("fetch",{error:e})}},{key:"onFetch",value:function(){if(this.isPaginated()&&this.isLastPage())return!1;y.set(this,"loading",!0)}},{key:"onDeleteSuccess",value:function(t){y.set(this,"deleting",!1),y.set(this,"fatal",!1),u.each(this.getDeletingModels(),function(e){e.onDeleteSuccess(t)}),this.emit("delete",{error:null})}},{key:"onDeleteFailure",value:function(t){y.set(this,"fatal",!0),y.set(this,"deleting",!1),u.each(this.getDeletingModels(),function(e){e.onDeleteFailure(t)}),this.emit("delete",{error:t})}},{key:"onSave",value:function(){if(this.saving)return!1;var t=!0;if(u.each(this.models,function(e){try{e.onSave()}catch(e){if(!(e instanceof S))throw e;t=!1}}),!t)throw new S(this.getErrors());y.set(this,"saving",!0)}},{key:"getIdentifiers",value:function(e){return u.map(e,u.method("identifier"))}},{key:"getDeleteBody",value:function(){return this.getOption("useDeleteBody")?this.getIdentifiers(this.getDeletingModels()):{}}},{key:"getDeleteQueryIdenitifierKey",value:function(){return"id"}},{key:"getDeleteQuery",value:function(){if(this.getOption("useDeleteBody"))return{};var e,t,r,i=this.getDeletingModels(),n=this.getDeleteQueryIdenitifierKey(),s=this.getIdentifiers(i);return e={},t=n,r=u.join(s,","),t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}},{key:"onDelete",value:function(){if(this.deleting)return!1;var e=u.filter(this.models,function(e){return!1!==e.onDelete()});if(u.isEmpty(e))return!0;y.set(this,"deleting",!0)}}]),n}(),j=u.invert(["_attributes","_collections","_errors","_listeners","_reference","_registry","_uid","attributes","collections","deleting","errors","fatal","loading","memoized","models","saving"]),A=function r(e,i,t){t&&(e=u.pick(e,t)),u.each(e,function(e,t){u.isArray(e)?(y.set(i,t,[]),r(e,i[t])):u.isPlainObject(e)?(y.set(i,t,{}),r(e,i[t])):u.isObject(e)&&u.isFunction(e.clone)?y.set(i,t,e.clone()):y.set(i,t,u.cloneDeep(e))})},x=function(e){function n(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null,r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};m(this,n);var i=b(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,r));return y.set(i,"_collections",{}),y.set(i,"_reference",{}),y.set(i,"_attributes",{}),y.set(i,"_mutations",{}),y.set(i,"_errors",{}),i.clearState(),i.memoize(),i.compileMutators(),i.assign(e),t&&i.registerCollection(t),i}return k(n,P),_(n,[{key:"$",get:function(){return this._reference}},{key:"attributes",get:function(){return this._attributes}},{key:"collections",get:function(){return u.values(this._collections)}},{key:"errors",get:function(){return this.getErrors()}}]),_(n,[{key:"clone",value:function(){var e={},t={};A(this._attributes,e),A(this._reference,t);var r=new this.constructor;return r.registerCollection(this._collections),r.setOptions(this.getOptions()),y.set(r,"_reference",t),y.set(r,"_attributes",e),r}},{key:"memoize",value:function(){var t=this;u.each(["validation","defaults","routes"],function(e){return t[e]=u.once(t[e])})}},{key:"identifier",value:function(){return this.get(this.getOption("identifier"))}},{key:"defaults",value:function(){return{}}},{key:"mutations",value:function(){return{}}},{key:"validation",value:function(){return{}}},{key:"getDefaultOptions",value:function(){return u.merge({},t(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),"getDefaultOptions",this).call(this),{identifier:"id",overwriteIdentifier:!1,patch:!1,saveUnchanged:!0,useFirstErrorOnly:!1,validateOnChange:!1,validateRecursively:!0,mutateOnChange:!1,mutateBeforeSync:!0,mutateBeforeSave:!0})}},{key:"compileMutators",value:function(){this._mutations=u.mapValues(this.mutations(),function(e){return u.flow(e)})}},{key:"getRouteParameters",value:function(){return u.merge({},t(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),"getRouteParameters",this).call(this),this._attributes)}},{key:"registerCollection",value:function(e){if(u.isArray(e))u.each(e,this.registerCollection);else{if(u.isNil(e)||u.isUndefined(e._uid))throw new Error("Collection is not valid");y.set(this._collections,e._uid,e)}}},{key:"unregisterCollection",value:function(e){if(u.isArray(e))u.each(e,this.unregisterCollection);else{if(u.isNil(e)||u.isUndefined(e._uid))throw new Error("Collection is not valid");y.delete(this._collections,e._uid)}}},{key:"clearAttributes",value:function(){var e=this.defaults();y.set(this,"_attributes",u.cloneDeep(e)),y.set(this,"_reference",u.cloneDeep(e))}},{key:"clear",value:function(){this.clearAttributes(),this.clearErrors(),this.clearState()}},{key:"clearState",value:function(){y.set(this,"loading",!1),y.set(this,"saving",!1),y.set(this,"deleting",!1),y.set(this,"fatal",!1)}},{key:"assign",value:function(e){this.set(u.defaultsDeep({},e,u.cloneDeep(this.defaults()))),this.sync()}},{key:"reset",value:function(e){e?A(this._reference,this._attributes,u.castArray(e)):A(this._reference,this._attributes),this.clearErrors(),this.emit("reset")}},{key:"mutated",value:function(e,t){var r=u.get(this._mutations,e);return r?r(t):t}},{key:"mutate",value:function(e){var i=this;u.isUndefined(e)?u.each(this._attributes,function(e,t){y.set(i._attributes,t,i.mutated(t,e))}):u.each(u.castArray(e),function(e){var t=i.get(e),r=i.mutated(e,t);y.set(i._attributes,e,r)})}},{key:"sync",value:function(e){var t=this;this.getOption("mutateBeforeSync")&&this.mutate(e);var r=u.cloneDeep(this._attributes);u.isUndefined(e)?y.set(this,"_reference",r):u.each(u.castArray(e),function(e){y.set(t._reference,e,u.get(r,e))}),this.emit("sync")}},{key:"registerAttribute",value:function(t){var r=this;if(u.has(j,t))throw new Error("Can't use reserved attribute name '"+t+"'");Object.defineProperty(this,t,{get:function(){return r.get(t)},set:function(e){return r.set(t,e)}})}},{key:"set",value:function(e,t){var r=this;if(!u.isPlainObject(e)){var i=this.has(e);i||this.registerAttribute(e);var n=this.get(e);return this.getOption("mutateOnChange")&&(t=this.mutated(e,t)),y.set(this._attributes,e,t),i&&!u.isEqual(n,t)&&(this.emit("change",{attribute:e,previous:n,value:t}),this.getOption("validateOnChange")&&y.nextTick(function(){return r.validateAttribute(e)})),t}u.each(e,function(e,t){r.set(t,e)})}},{key:"unset",value:function(e){var t=this,r=u.cloneDeep(this.defaults()),i=u.defaultTo(e,u.keys(this._attributes));u.each(u.castArray(i),function(e){t.has(e)&&y.set(t._attributes,e,u.get(r,e))})}},{key:"get",value:function(e,t){return u.get(this._attributes,e,t)}},{key:"saved",value:function(e,t){return u.get(this._reference,e,t)}},{key:"has",value:function(e){return u.has(this._attributes,e)}},{key:"validateAttribute",value:function(r){var i=this,n=this.get(r),e=this.validation(),s=!0,o=[];if(r in e){var t=u.castArray(e[r]);u.each(t,function(e){var t=e(n,r,i);if(u.isString(t)&&(o.push(t),s=!1,i.getOption("useFirstErrorOnly")))return!1})}return this.getOption("validateRecursively")&&u.isFunction(u.get(n,"validate"))&&(s=n.validate()&&s),this.setAttributeErrors(r,o),s}},{key:"validate",value:function(e){var i=this;if(u.isString(e))return this.validateAttribute(e);if(u.isArray(e))e=u.pick(this._attributes,e);else{if(!u.isUndefined(e))throw new Error("Validation attributes must be an array, a string, or not given");e=this._attributes}return u.reduce(e,function(e,t,r){return i.validateAttribute(r)&&e},!0)}},{key:"toJSON",value:function(){return this._attributes}},{key:"addToAllCollections",value:function(){var r=this;u.each(this._collections,function(e,t){e.add(r)})}},{key:"removeFromAllCollections",value:function(){var r=this;u.each(this._collections,function(e,t){e.remove(r)})}},{key:"changed",value:function(){var r=this,i=[];return u.each(this._attributes,function(e,t){u.isEqual(e,r.saved(t))||i.push(t)}),!u.isEmpty(i)&&i}},{key:"onFetchSuccess",value:function(e){var t=e.getData();if(u.isEmpty(t))throw new D("No data in fetch response",e);this.assign(t),y.set(this,"fatal",!1),y.set(this,"loading",!1),this.emit("fetch",{error:null})}},{key:"onFetchFailure",value:function(e){y.set(this,"fatal",!0),y.set(this,"loading",!1),this.emit("fetch",{error:e})}},{key:"getPatchRoute",value:function(){return this.getRoute("patch","save")}},{key:"getCreateRoute",value:function(){return this.getRoute("create","save")}},{key:"getUpdateRoute",value:function(){return this.shouldPatch()?this.getPatchRoute():this.getRoute("update","save")}},{key:"getUpdateMethod",value:function(){return this.shouldPatch()?this.getPatchMethod():t(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),"getUpdateMethod",this).call(this)}},{key:"getSaveMethod",value:function(){return this.isNew()?this.getCreateMethod():this.getUpdateMethod()}},{key:"getSaveRoute",value:function(){return this.isNew()?this.getCreateRoute():this.getUpdateRoute()}},{key:"shouldPatch",value:function(){return Boolean(this.getOption("patch"))}},{key:"getSaveData",value:function(){return this.isExisting()&&this.shouldPatch()?u.pick(this._attributes,this.changed()):this._attributes}},{key:"parseIdentifier",value:function(e){return e}},{key:"isValidIdentifier",value:function(e){return Boolean(e)}},{key:"shouldAllowIdentifierOverwrite",value:function(){return Boolean(this.getOption("overwriteIdentifier"))}},{key:"update",value:function(e){if(!e||u.isObjectLike(e)&&u.isEmpty(e))this.sync();else if(u.isPlainObject(e))this.assign(e);else{var t=this.parseIdentifier(e);if(!this.isValidIdentifier(t))throw new Error("Expected an empty response, object, or valid identifier");var r=this.identifier();if(r&&t!==r&&!this.shouldAllowIdentifierOverwrite())throw new Error("Not allowed to overwrite model identifier");this.set(this.getOption("identifier"),t),this.sync()}}},{key:"setAttributeErrors",value:function(e,t){u.isEmpty(t)?y.delete(this._errors,e):y.set(this._errors,e,u.castArray(t))}},{key:"setErrors",value:function(e){var r=this;u.isEmpty(e)?y.set(this,"_errors",{}):u.each(e,function(e,t){r.setAttributeErrors(t,e)})}},{key:"getErrors",value:function(){return this.getOption("useFirstErrorOnly")?u.mapValues(this._errors,u.head):this._errors}},{key:"clearErrors",value:function(){this.setErrors({}),y.set(this,"fatal",!1)}},{key:"onSaveSuccess",value:function(e){this.clearErrors(),e&&this.update(e.getData()),y.set(this,"saving",!1),y.set(this,"fatal",!1),this.addToAllCollections(),this.emit("save",{error:null})}},{key:"onSaveValidationFailure",value:function(e){var t=e.getResponse().getValidationErrors();if(!u.isPlainObject(t))throw new D("Validation errors must be an object",e.getResponse());this.setErrors(t),y.set(this,"fatal",!1),y.set(this,"saving",!1)}},{key:"onFatalSaveFailure",value:function(e){this.clearErrors(),y.set(this,"fatal",!0),y.set(this,"saving",!1)}},{key:"onSaveFailure",value:function(e){this.isBackendValidationError(e)?this.onSaveValidationFailure(e):this.onFatalSaveFailure(e),this.emit("save",{error:e})}},{key:"onDeleteSuccess",value:function(e){this.clear(),this.removeFromAllCollections(),y.set(this,"deleting",!1),y.set(this,"fatal",!1),this.emit("delete",{error:null})}},{key:"onDeleteFailure",value:function(e){y.set(this,"deleting",!1),y.set(this,"fatal",!0),this.emit("delete",{error:e})}},{key:"onFetch",value:function(){if(this.loading)return!1;y.set(this,"loading",!0)}},{key:"isNew",value:function(){return u.isNil(this.identifier())}},{key:"isExisting",value:function(){return!this.isNew()}},{key:"onSave",value:function(){if(this.saving)return!1;if(!this.getOption("saveUnchanged")&&!this.changed())return!0;if(this.getOption("mutateBeforeSave")&&this.mutate(),!this.validate())throw new S(this.errors);y.set(this,"saving",!0)}},{key:"onDelete",value:function(){if(this.deleting)return!1;y.set(this,"deleting",!0)}}]),n}();global._babelPolyfill||require("babel-polyfill");var T={},U=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null,i=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{};if(t.hasOwnProperty("resource_url")){if(T[t.resource_url]){var n=T[t.resource_url]._autosaveDisabled;T[t.resource_url]._autosaveDisabled=!0,T[t.resource_url].assign(C(t,T[t.resource_url])),T[t.resource_url]._autosaveDisabled=n}else T[t.resource_url]=new e(t,r,i);return T[t.resource_url]}return t};function L(e,o){var a=!0,u=new Proxy(e,{set:function(e,t,r){var i=Reflect.has(e,t),n=i&&Reflect.get(e,t),s=Reflect.set(e,t,r);return t.startsWith("__")&&t.endsWith("__")||(a&&i?o({object:u,type:"update",name:t,oldValue:n}):a&&o({object:u,type:"add",name:t})),s},deleteProperty:function(e,t){var r=Reflect.has(e,t),i=r&&Reflect.get(e,t),n=Reflect.deleteProperty(e,t);return a&&r&&o({object:u,type:"delete",name:t,oldValue:i}),n},preventExtensions:function(e){var t=Reflect.preventExtensions(e);return a&&o({object:u,type:"preventExtensions"}),t}});return{object:u,unobserve:function(){a=!1}}}var C=function(e,t){for(var r in e)if(g.isArray(e[r]))if(e[r].every(function(e){return e.hasOwnProperty("resource_url")}))e[r]=new V(t,r,e[r]);else{for(var i in e[r])g.isObject(e[r][i])&&(e[r][i]=L(e[r][i],t.triggerAutosave).object);e[r]=L(e[r],t.triggerAutosave).object}else g.isObject(e[r])&&(e[r].hasOwnProperty("resource_url")?e[r]=U(H,e[r],null,{autosaveDisabled:t._autosaveDisabled}):e[r]=L(e[r],t.triggerAutosave).object);return e},I=function(e){function n(e){var t,r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};return a(this,n),(t=v(this,f(n).call(this,[],r,i)))._route=e,t._scope=r.scope||{},t._deletedIds=[],t._autosaveDisabled=r.autosaveDisabled||!1,t._fullyLoaded=!1,t._force_fully_loaded=r.force_fully_loaded||!1,t._onModifiedAny=r.onModifiedAny&&r.onModifiedAny instanceof Function?r.onModifiedAny:null,t}var t,r;return c(n,F),h(n,[{key:"getRequest",value:function(e){return e.baseUrl=n._baseUrl,s(f(n.prototype),"getRequest",this).call(this,e)}},{key:"getDefaultHeaders",value:function(){return{Accept:"application/json","Content-Type":"application/json"}}}],[{key:"setBaseUrl",value:function(e){n._baseUrl=e}}]),h(n,[{key:"addDeletedId",value:function(e){this._deletedIds.push(e)}},{key:"getFetchQuery",value:function(){return this.isPaginated()?g.merge(this._scope,this.getPaginationQuery()):this._scope}},{key:"routes",value:function(){return{fetch:this._route}}},{key:"options",value:function(){return{model:q}}},{key:"create",value:(r=o(regeneratorRuntime.mark(function e(){var t,r,i,n=arguments;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t=0<n.length&&void 0!==n[0]?n[0]:{},r=1<n.length&&void 0!==n[1]?n[1]:{},e.next=4,this.getRequest({url:this.getFetchURL(),method:"POST",data:t,params:this.getSaveQuery(),headers:this.getDefaultHeaders()}).send();case 4:return i=e.sent,e.abrupt("return",this._responseToModel(i,r));case 6:case"end":return e.stop()}},e,this)})),function(){return r.apply(this,arguments)})},{key:"_responseToModel",value:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r=this.add(e.getData(),t);return r.assign(C(r.attributes,r)),r}},{key:"createModel",value:function(e){return new(this.model())(e,this)}},{key:"findOrCreateModel",value:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};e.id&&(e.id=Number(e.id)),e.record_id&&(e.record_id=Number(e.record_id));var r=this.models.find(function(n){return Object.entries(e).every(function(e){var t=p(e,2),r=t[0],i=t[1];return n[r]==i})});return r||this.add(this.createModel(e),t)}},{key:"add",value:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};if(g.isArray(e))return g.filter(g.map(e,this.add));if(g.isPlainObject(e))return this.add(this.createModel(e),t);if(!this.isModel(e))throw new Error("Expected a model, plain object, or array of either");return this.hasModelInRegistry(e)?void 0:(t.first?this.models.unshift(e):this.models.push(e),this.onAdd(e),y.set(this,"loading",!1),e)}},{key:"saveAll",value:function(){return Promise.all(this.models.map(function(e){return e.saveAll()}))}},{key:"call",value:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:"GET",r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;return null===r&&(r={}),this.getRequest({url:"".concat(this.getFetchURL(),"/").concat(e),method:t,data:r,params:"GET"==t?r:this.getSaveQuery(),headers:this.getDefaultHeaders()}).send()}},{key:"fetch",value:(t=o(regeneratorRuntime.mark(function e(){var t,r,i,n=this,s=arguments;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t=0<s.length&&void 0!==s[0]?s[0]:{},this._fullyLoaded=!1,r=function(){var e=g.defaults(t,{url:n.getFetchURL(),method:n.getFetchMethod(),headers:n.getFetchHeaders()});return e.params=g.merge(e.params,n.getFetchQuery()),e},e.next=5,this.request(r,this.onFetch,t.merge?this.onFetchSuccessMerge:this.onFetchSuccess,this.onFetchFailure);case 5:return i=e.sent,this._fullyLoaded=!0,e.abrupt("return",i);case 8:case"end":return e.stop()}},e,this)})),function(){return t.apply(this,arguments)})},{key:"onFetchSuccessMerge",value:function(e){var i=this,n=this.getModelsFromResponse(e);if(!g.isArray(n))throw new Error("Expected an array of models in fetch response");var t=!0,r=!1,s=void 0;try{for(var o,a=function(){var e=p(o.value,2),t=e[0],r=e[1];n.find(function(e){return e[r.identifierKey()]==r.identifier()})||i.models.splice(t,1)},u=this.models.entries()[Symbol.iterator]();!(t=(o=u.next()).done);t=!0)a()}catch(e){r=!0,s=e}finally{try{t||null==u.return||u.return()}finally{if(r)throw s}}var l=!0,h=!1,c=void 0;try{for(var f,d=function(){var e,t=f.value;i.find(function(e){return e.identifier()==t[e.identifierKey()]})||i._deletedIds.includes(t[(e=t,e.hasOwnProperty("identifier")?"identifier":e.hasOwnProperty("record_id")?"record_id":e.hasOwnProperty("id")?"id":void 0)])||i.add(t)},v=n[Symbol.iterator]();!(l=(f=v.next()).done);l=!0)d()}catch(e){h=!0,c=e}finally{try{l||null==v.return||v.return()}finally{if(h)throw c}}y.set(this,"loading",!1),y.set(this,"fatal",!1),this.emit("fetch",{error:null})}},{key:"fullyLoaded",value:function(){return this._fullyLoaded}}]),n}(),V=function(e){function s(e,t){var r,i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:[];a(this,s),r=v(this,f(s).call(this,e.getRoute("fetch"),{autosaveDisabled:e._autosaveDisabled}));var n=i.map(function(e){return U(H,e,d(d(r)))});return r.replace(n),r._add_has_many_cb=e._add_has_many,r.keyInParent=t,r._fullyLoaded=!0,r}var t;return c(s,I),h(s,[{key:"options",value:function(){return{model:H}}},{key:"push",value:(t=o(regeneratorRuntime.mark(function e(){var t,r,i,n=arguments;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t=0<n.length&&void 0!==n[0]?n[0]:{},r=1<n.length&&void 0!==n[1]?n[1]:{},e.next=4,this._add_has_many_cb(this.keyInParent,t);case 4:return i=e.sent,e.abrupt("return",this._responseToModel(i,r));case 6:case"end":return e.stop()}},e,this)})),function(){return t.apply(this,arguments)})}]),s}(),q=function(e){function n(){var e,t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null,i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};return a(this,n),(e=v(this,f(n).call(this,t,r,i)))._fullyLoaded=!1,e.performSaveTimeout=null,e._on_update_reset=!1,e._modified=!1,r?(e._autosaveDisabled=r._autosaveDisabled,e._addDeletedIdCallback=r.addDeletedId,e._onModified=r._onModifiedAny):(i.hasOwnProperty("autosaveDisabled")&&(e._autosaveDisabled=i.autosaveDisabled),i.hasOwnProperty("onModified")&&i.onModified instanceof Function&&(e._onModified=i.onModified)),null!==r&&(e._resourceTypeRoute=r._route,r._force_fully_loaded&&(e._fullyLoaded=!0)),t.hasOwnProperty("resource_url")?e._detailRoute=t.resource_url:e._detailRoute="".concat(e._resourceTypeRoute,"/").concat(e.identifier()),e}var t;return c(n,x),h(n,[{key:"getSaveMethod",value:function(){return this.identifier()?"PUT":"POST"}},{key:"getDefaultHeaders",value:function(){return{Accept:"application/json","Content-Type":"application/json"}}},{key:"identifierKey",value:function(){return this._attributes.hasOwnProperty("identifier")?"identifier":this._attributes.hasOwnProperty("record_id")?"record_id":this.getOption("identifier")}},{key:"identifier",value:function(){return this.get(this.identifierKey())}},{key:"deploy",value:function(){return this.call("deploy","PUT")}},{key:"call",value:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:"GET",r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;return null===r&&(r=this._attributes),null===t&&(t=this.getSaveMethod()),this.getRequest({url:"".concat(this.getSaveURL(),"/").concat(e),method:t,data:r,params:"GET"==t?r:this.getSaveQuery(),headers:this.getDefaultHeaders()}).send()}},{key:"onFetchSuccess",value:function(e){var t=e.getData();if(g.isEmpty(t))throw new Error("No data in fetch response",e);t=C(t,this),this.assign(t),y.set(this,"fatal",!1),y.set(this,"loading",!1),this.emit("fetch",{error:null})}},{key:"assign",value:function(e){this.set(e),this.sync()}},{key:"onSaveSuccess",value:function(e){if(this._on_update_reset){this._autosaveDisabled=!0;var t=e.getData();if(g.isEmpty(t))throw new Error("No data in fetch response",e);t=C(t,this),this.assign(t)}this.clearErrors(),y.set(this,"saving",!1),y.set(this,"fatal",!1),this.addToAllCollections(),this.emit("save",{error:null}),this._on_update_reset&&(this._autosaveDisabled=!1),this._modified=!0,this._onModified&&this._onModified()}}]),h(n,[{key:"fetch",value:(t=o(regeneratorRuntime.mark(function e(){var t,r,i,n=this,s=arguments;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t=0<s.length&&void 0!==s[0]?s[0]:{},this._fullyLoaded=!1,r=function(){return g.defaults(t,{url:n.getFetchURL(),method:n.getFetchMethod(),params:n.getFetchQuery(),headers:n.getFetchHeaders()})},e.next=5,this.request(r,this.onFetch,this.onFetchSuccess,this.onFetchFailure);case 5:return i=e.sent,this._fullyLoaded=!0,e.abrupt("return",i);case 8:case"end":return e.stop()}},e,this)})),function(){return t.apply(this,arguments)})},{key:"fullyLoaded",value:function(){return this._fullyLoaded}},{key:"modified",value:function(){return this._modified}},{key:"routes",value:function(){return{save:this._detailRoute,create:this._resourceTypeRoute,fetch:this._detailRoute,delete:this._detailRoute,add_has_many:this._detailRoute}}},{key:"delete",value:function(){var e=this,t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this._addDeletedIdCallback&&this._addDeletedIdCallback(this.identifier());return this.request(function(){return g.defaults(t,{url:e.getDeleteURL(),method:e.getDeleteMethod(),data:e.getDeleteBody(),params:e.getDeleteQuery(),headers:e.getDeleteHeaders()})},this.onDelete,this.onDeleteSuccess,this.onDeleteFailure)}},{key:"destroy",value:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};return this.delete(e)}},{key:"options",value:function(){return{}}},{key:"getAddHasManyUrl",value:function(e){return"".concat(this.getURL(this.getRoute("add_has_many"),this.getRouteParameters()),"/add_").concat(e)}},{key:"_add_has_many",value:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return this.getRequest({url:this.getAddHasManyUrl(e),method:this.getCreateMethod(),data:t,params:this.getSaveQuery(),headers:this.getDefaultHeaders()}).send()}},{key:"set",value:function(e,t){s(f(n.prototype),"set",this).call(this,e,this._options.parser?this._options.parser(e,t):t),this.triggerAutosave()}},{key:"triggerAutosave",value:function(){var e=this;this._autosaveDisabled||(this.performSaveTimeout&&clearTimeout(this.performSaveTimeout),this.fullyLoaded()&&(this.performSaveTimeout=setTimeout(function(){e.save()},750)))}},{key:"saveAll",value:function(){for(var e=[],t=Object.values(this._attributes),r=0;r<t.length;r++){var i=t[r];(i instanceof n||i instanceof I)&&e.push(i.saveAll())}return e.push(this.save()),Promise.all(e)}},{key:"getSaveData",value:function(){return s(f(n.prototype),"getSaveData",this).call(this)}}]),n}(),H=function(e){function n(){var e,t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null,i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};if(a(this,n),e=v(this,f(n).call(this,t,r,i)),t=C(t,d(d(e))),e.assign(t),!t.hasOwnProperty("resource_url"))throw new Error("Proxy resource has no resource url");return e._url=t.resource_url,e._fullyLoaded=!0,e}return c(n,q),h(n,[{key:"getSaveURL",value:function(){return this._url}},{key:"getDeleteURL",value:function(){return this._url}}]),n}();e.Resource=q,e.ResourceType=I,Object.defineProperty(e,"__esModule",{value:!0})});