UNPKG

xior

Version:

A lite http request lib based on fetch with plugins support and similar API to axios.

3 lines (2 loc) 6.14 kB
import{A as T,B as b,C as O,j as C,k as H,t as D,u as q,v as k,w as I,x}from"../chunk-JGM66FSA.mjs";import{a as E,d as S}from"../chunk-BOVQDIMN.mjs";var j=["get","post","head","delete","patch","put","options"];var M=6,L=2,J=7,U=typeof AbortController!="undefined",w=class extends Error{constructor(r,e){super(r),this.request=e,this.config=e}},P=class{constructor(r,e){this.handlers={};this.history={};this.options=e,this.instance=r,this.plugin=this._mockPlugin.bind(this),r.plugins.use(this.plugin)}_mockPlugin(r){return e=>S(this,null,function*(){var l,g,o,u,f;let t=((l=e.method)==null?void 0:l.toLowerCase())||"get";this.history[t]||(this.history[t]=[]),this.handlers[t]||(this.handlers[t]=[]),(g=this.history[t])==null||g.push(e);let s=this.findHandler(e);if(s){let a=s[J-1]||((o=this.options)==null?void 0:o.delayResponse);s.length===M&&H(this.handlers).forEach(n=>{var p,R;let i=(p=this.handlers[n])==null?void 0:p.indexOf(s);i=i===void 0?-1:i,i>-1&&((R=this.handlers[n])==null||R.splice(i,1))});let c=[],d;if(s.length!==L){let n,i;if(e.timeout&&U){let p=new AbortController;i=setTimeout(()=>{p.abort(new O(`timeout of ${e.timeout}ms exceeded`,e))},e.timeout),c.push(p.signal)}e.signal&&c.push(e.signal),n=c[0],c.length>1&&(n=D(c,()=>{i&&clearTimeout(i)})),d=()=>{var p;i&&clearTimeout(i),(p=n==null?void 0:n.clear)==null||p.call(n)}}a&&a>0&&(yield I(a));let m=c.find(n=>n.aborted);if(m)return d==null||d(),Promise.reject(m.reason);if(s.length===L)return r(e);if(typeof s[2]!="function"){let n=s.slice(2),i=X({data:n[1],status:n[0],statusText:"ok",headers:n[2],request:e,config:e},e);return d==null||d(),i}let h=s[2](e);if(typeof(h==null?void 0:h.then)!="function"){let n=X({data:h[1],status:h[0],statusText:"ok",headers:A(h[2]),request:e,config:e},e);return d==null||d(),n}else{let n=yield h;return d==null||d(),n.config&&n.status?n:X({data:n[1],status:n[0],statusText:"ok",headers:A(n[2]),request:e,config:e},e)}}else{if(((u=this.options)==null?void 0:u.onNoMatch)==="passthrough")return r(e);if(((f=this.options)==null?void 0:f.onNoMatch)==="throwException"){let a=`Could not find mock for: `+JSON.stringify(e,["method","url"],2);throw new w(a,e)}else{let a="Request failed with status code 404";throw new b(a,e,{status:404,statusText:a,config:e})}}})}resetHandlers(){this.handlers={}}resetHistory(){this.history={}}reset(){this.resetHandlers(),this.resetHistory()}restore(){var r;this.reset(),(r=this.instance)==null||r.plugins.eject(this.plugin)}onGet(r,e){return this.createHandler("get").bind(this)(r,e)}onDelete(r,e){return this.createHandler("delete").bind(this)(r,e)}onHead(r,e){return this.createHandler("head").bind(this)(r,e)}onAny(r,e){return this.createHandler("any").bind(this)(r,e)}onPost(r,e,t){return this.createHandler("post").bind(this)(r,q({},t||{},{data:e||{}}))}onPut(r,e,t){return this.createHandler("put").bind(this)(r,q({},t||{},{data:e||{}}))}onPatch(r,e,t){return this.createHandler("patch").bind(this)(r,q({},t||{},{data:e||{}}))}onOptions(r,e){return this.createHandler("options").bind(this)(r,e)}createHandler(r){return(e,t)=>{var f,a,c,d,m,h;t=t?q({},{headers:(a=(f=this.instance)==null?void 0:f.config)==null?void 0:a.headers,params:(d=(c=this.instance)==null?void 0:c.config)==null?void 0:d.params,data:(h=(m=this.instance)==null?void 0:m.config)==null?void 0:h.data},t||{}):{},e=e===void 0?/.*/:e;let s=(n,i,p)=>{let R=[e,t,n,i,p];return this.addHandler(r,R),this},l=(n,i,p)=>{let R=[e,t,n,i,p,!0];return this.addHandler(r,R),this},g=(n,i,p,R)=>{let $=[e,t,i,p,R,!1,n];return this.addHandler(r,$),this};function o(n){return function(i,p,R){return g(n,i,p,R)}}return{reply:s,replyOnce:l,withDelayInMs:o,passThrough:()=>{let n=[e,t];return this.addHandler(r,n),this},abortRequest(){return s(n=>Promise.reject(new b("Request aborted",n)))},abortRequestOnce(){return l(n=>Promise.reject(new b("Request aborted",n,{})))},networkError(){return s(n=>Promise.reject(new b("Network Error",n,{})))},networkErrorOnce(){return l(n=>Promise.reject(new b("Network Error",n,{})))},timeout(){return s(n=>Promise.reject(new O("timeout of 0ms exceeded",n)))},timeoutOnce(){return l(n=>Promise.reject(new O("timeout of 0ms exceeded",n)))}}}}addHandler(r,e){var s,l,g;let t=[...e];if(t[3])try{t[3]=JSON.parse(JSON.stringify(t[3]))}catch(o){}if(t[4]){let o=typeof Headers=="undefined"?(()=>{let u={};return{append(f,a){u[f]=a+""},get(f){return u[f]||C}}})():new Headers;H(t[4]).forEach(u=>{o.append(u,t[4][u])}),t[4]=o}if(r==="any")j.forEach(o=>{var u;this.handlers[o]||(this.handlers[o]=[]),(u=this.handlers[o])==null||u.push(t)});else{this.handlers[r]||(this.handlers[r]=[]);let o=(s=this.handlers[r])==null?void 0:s.findIndex(u=>{if(u.length===M)return!1;let a=k(String(u[0]),u[1],x),c=k(String(t[0]),t[1],x);return a===c});o=o===void 0?-1:o,o>-1&&t.length<M?(l=this.handlers[r])==null||l.splice(o,1,t):(g=this.handlers[r])==null||g.push(t)}}findHandler(r){var f;let{method:e,url:t,headers:s,params:l,data:g={},baseURL:o}=r,u=e==null?void 0:e.toLowerCase();return(f=this.handlers[u])==null?void 0:f.find(a=>{var d;let c=E({},a[1].headers||{});if((d=r.headers)!=null&&d["Content-Type"]&&(H(c).find(h=>h.toLowerCase()==="content-type")||(c["Content-Type"]=r.headers["Content-Type"])),typeof a[0]=="string"){let m=o&&a[0].startsWith(o),h=k(m?T(o,t):T("/",t),{b:l,c:g,a:s},x),n=k(m?a[0]:T("/",a[0]),{b:a[1].params||{},c:a[1].data||{},a:c},x);return h===n||h.startsWith(n)||N([[l,a[1].params],[g,a[1].data],[s,c]])}else if(a[0]instanceof RegExp)return(a[0].test(t)||a[0].test(T(o||"",t)))&&(k(u,{b:l,c:g,a:s},x)===k(u,{b:a[1].params||{},c:a[1].data||{},a:c},x)||N([[l,a[1].params],[g,a[1].data],[s,c]]))})}};function N(y){let r=y.filter(t=>{let[,s]=t;return typeof(s==null?void 0:s.asymmetricMatch)=="function"}),e=r.filter(t=>{let[s,l]=t;return l.asymmetricMatch(s)});return e.length>0&&e.length===r.length}function A(y){y||(y={});let r={},e=typeof Headers=="undefined"?{append(t,s){r[t]=s+""},get(t){return r[t]||C}}:new Headers;return H(y).forEach(t=>{e.append(t,y[t])}),e}function X(y,r){if(y.status>=300)throw new b(`Request failed with status code ${y.status}`,r,y);return y}export{w as MockError,P as default};