This repository has been archived by the owner on Dec 9, 2022. It is now read-only.
/
rest.min.js
1 lines (1 loc) · 5.44 KB
/
rest.min.js
1
"use strict";var _typeof=typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol==="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};var Element={};Element.get=function(){var e=_typeof(arguments[0])==="object"?arguments[0]:arguments[1]||{};var t=typeof arguments[0]==="string"?arguments[0]:null;var n=this.route+("/"+this[this.config.fields.id]);if(t){n+="/"+t}return Rest._makeRequest(this.config,"GET",n,e,this.factory,null)};Element.post=function(e){return Rest._makeRequest(this.config,"POST",this.route+(this.fromServer?"/"+this[this.config.fields.id]:""),e,this.factory,this)};Element.patch=function(){var e=Rest._findBodyAndParams(arguments,this),t=e.body,n=e.params;return Rest._makeRequest(this.config,"PATCH",this.route+("/"+this[this.config.fields.id]),n,this.factory,t)};Element.put=function(e){return Rest._makeRequest(this.config,"PUT",this.route+("/"+this[this.config.fields.id]),e,this.factory,this)};var Factory=function e(){};Factory.create=function(e){var t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var n=Object.create(Element,{route:{configurable:false,enumerable:false,value:this.route},fromServer:{configurable:true,enumerable:false,value:t},config:{configurable:false,enumerable:false,value:this.config},factory:{configurable:false,enumerable:false,value:this}});var r=_typeof(this.elementTransformer)=="object"?this.elementTransformer:{};Object.assign(n,e,r);if(typeof this.elementTransformer=="function")n=this.elementTransformer(n);return n};Factory.getList=function(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};return Rest._makeRequest(this.config,"GET",this.route,e,this,null)};Factory.get=function(e){var t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};return Rest._makeRequest(this.config,"GET",this.route+("/"+e),t,this,null)};Factory.post=function(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};return Rest._makeRequest(this.config,"POST",this.route,t,this,e)};Factory.customPOST=function(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:"";var t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};return Rest._makeRequest(this.config,"POST",this.route+("/"+e),n,this,t)};"use strict";var Rest={};Rest.Config={baseUrl:"",defaultParams:{},fields:{id:"id"},headers:[],responseType:"json"};Rest.Config.set=function(e){Object.assign(Rest.Config,e)};Rest._responseInterceptors=[];Rest.addResponseInterceptor=function(e){Rest._responseInterceptors.push(e)};Rest._responseExtractors=[];Rest.addResponseExtractor=function(e){Rest._responseExtractors.push(e)};Rest._requestInterceptors=[];Rest.addRequestInterceptor=function(e){Rest._requestInterceptors.push(e)};Rest.factory=function(e,t,n,r){var s=arguments.length>4&&arguments[4]!==undefined?arguments[4]:null;var o=Object.create(Factory,{route:{configurable:false,enumerable:false,value:e.replace(/^\/|\/$/g,"")},config:{configurable:false,enumerable:false,value:s||Rest.Config},elementTransformer:{configurable:false,enumerable:false,value:n},collectionTransformer:{configurable:false,enumerable:false,value:r}});var i=(typeof t==="undefined"?"undefined":_typeof(t))=="object"?t:{};Object.assign(o,i);if(typeof t=="function")o=t(o);return o};Rest._makeRequest=function(e,t,n){var r=arguments.length>3&&arguments[3]!==undefined?arguments[3]:{};var s=arguments[4];var o=arguments[5];var i=new Promise(function(i,a){var f=new XMLHttpRequest;if("timeout"in e)f.timeout=e.timeout;f.withCredentials=e.withCredentials;f.responseType=e.responseType;f.onreadystatechange=function(){var t=f.response;if(f.readyState==XMLHttpRequest.DONE){Rest._responseInterceptors.forEach(function(e){e(t,f.responseType,n,f.responseURL,a,f)});Rest._responseExtractors.forEach(function(e){t=e(t)});if(f.status<200||f.status>299)return a({data:t,xhr:f});if(t&&Object.keys(t).length)i(Rest._restify(t,s,e));else i(null)}};r=Object.assign({},Rest.Config.defaultParams,r);var u={route:n,params:r,body:o};Rest._requestInterceptors.forEach(function(e){u=e(u,f)});f.open(t,Rest._createUrl(u.route,u.params),true);f.setRequestHeader("Content-type","application/json");e.headers.forEach(function(e){f.setRequestHeader(e[0],e[1])});if(u.body&&f.responseType=="json")return f.send(JSON.stringify(u.body));else if(u.body)return f.send(u.body);else return f.send()});return i};Rest._createUrl=function(e){var t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var n=Rest.Config.baseUrl.replace(/\/+$/,"");var r=Object.keys(t).reduce(function(e,n){e.push(n+"="+encodeURIComponent(t[n]));return e},[]).join("&");return n+"/"+e+(r?"?"+r:"")};Rest._restify=function(e,t,n){if(Array.isArray(e)){if(typeof t.collectionTransformer=="function")t.collectionTransformer(e);var r=e.reduce(function(e,r){e.push(Rest._restify(r,t,n));return e},[]);if(_typeof(t.collectionTransformer)=="object")Object.assign(r,t.collectionTransformer);return r}return t.create.call(t,e,true)};Rest._findBodyAndParams=function(e,t){var n={},r=void 0;if(e[0]instanceof Array){e[0].forEach(function(e){n[e]=t[e]});r=e[1]||{}}else if(_typeof(e[0])=="object"){n=e[0];r=e[1]||{}}else if(typeof e[0]=="string"){for(var s=0;s<e.length;s++){var o=e[s];if(typeof o=="string"){n[o]=t[o]}else if((typeof o==="undefined"?"undefined":_typeof(o))=="object"&&s==e.length-1){r=o}}}return{body:n,params:r}};Rest.VERSION="1.1.0";