@ahoo-wang/fetcher 1.2.3 → 1.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -10
- package/README.zh-CN.md +49 -10
- package/dist/fetchExchange.d.ts +24 -1
- package/dist/fetchExchange.d.ts.map +1 -1
- package/dist/fetcher.d.ts +3 -0
- package/dist/fetcher.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +420 -242
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/index.umd.js.map +1 -1
- package/dist/requestBodyInterceptor.d.ts.map +1 -1
- package/dist/urlBuilder.d.ts +10 -1
- package/dist/urlBuilder.d.ts.map +1 -1
- package/dist/urlTemplateResolver.d.ts +307 -0
- package/dist/urlTemplateResolver.d.ts.map +1 -0
- package/dist/urls.d.ts +0 -47
- package/dist/urls.d.ts.map +1 -1
- package/package.json +3 -2
package/dist/index.umd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(function(s,
|
|
1
|
+
(function(s,a){typeof exports=="object"&&typeof module<"u"?a(exports):typeof define=="function"&&define.amd?define(["exports"],a):(s=typeof globalThis<"u"?globalThis:s||self,a(s.Fetcher={}))})(this,(function(s){"use strict";function a(r){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(r)}function b(r,e){return a(e)?e:e?r.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):r}var w=(r=>(r[r.UriTemplate=0]="UriTemplate",r[r.Express=1]="Express",r))(w||{});function U(r){return r===1?D:C}function y(r,e,t){return t?r.replace(e,(n,o)=>{const c=t[o];if(c===void 0)throw new Error(`Missing required path parameter: ${o}`);return encodeURIComponent(c)}):r}function g(r,e){const t=[];let n;for(;(n=e.exec(r))!==null;)t.push(n[1]);return t}const T=class T{extractPathParams(e){return g(e,T.PATH_PARAM_REGEX)}resolve(e,t){return y(e,T.PATH_PARAM_REGEX,t)}};T.PATH_PARAM_REGEX=/{([^}]+)}/g;let m=T;const C=new m,d=class d{extractPathParams(e){return g(e,d.PATH_PARAM_REGEX)}resolve(e,t){return y(e,d.PATH_PARAM_REGEX,t)}};d.PATH_PARAM_REGEX=/:([^/]+)/g;let f=d;const D=new f;class L{constructor(e,t){this.baseURL=e,this.urlTemplateResolver=U(t)}build(e,t){const n=t?.path,o=t?.query,c=b(this.baseURL,e);let i=this.urlTemplateResolver.resolve(c,n);if(o){const E=new URLSearchParams(o).toString();E&&(i+="?"+E)}return i}resolveRequestUrl(e){return this.build(e.url,e.urlParams)}}class h extends Error{constructor(e,t){const n=e||t?.message||"An error occurred in the fetcher";super(n),this.cause=t,this.name="FetcherError",t?.stack&&(this.stack=t.stack),Object.setPrototypeOf(this,h.prototype)}}class A extends h{constructor(e){const t=e.method||"GET",n=`Request timeout of ${e.timeout}ms exceeded for ${t} ${e.url}`;super(n),this.name="FetchTimeoutError",this.request=e,Object.setPrototypeOf(this,A.prototype)}}function v(r,e){return typeof r<"u"?r:e}async function M(r){const e=r.url,t=r.timeout,n=r;if(!t)return fetch(e,n);const o=new AbortController,c={...n,signal:o.signal};let i=null;const E=new Promise((ue,ie)=>{i=setTimeout(()=>{i&&clearTimeout(i);const te=new A(r);o.abort(te),ie(te)},t)});try{return await Promise.race([fetch(e,c),E])}finally{i&&clearTimeout(i)}}const H="UrlResolveInterceptor",N=Number.MIN_SAFE_INTEGER+1e3;class G{constructor(){this.name=H,this.order=N}intercept(e){const t=e.request;t.url=e.fetcher.urlBuilder.resolveRequestUrl(t)}}var u=(r=>(r.GET="GET",r.POST="POST",r.PUT="PUT",r.DELETE="DELETE",r.PATCH="PATCH",r.HEAD="HEAD",r.OPTIONS="OPTIONS",r))(u||{});const re="Content-Type",O=class O{};O.APPLICATION_JSON="application/json",O.TEXT_EVENT_STREAM="text/event-stream";let l=O;const B="RequestBodyInterceptor",V=N+1e3;class j{constructor(){this.name=B,this.order=V}intercept(e){const t=e.request;if(t.body===void 0||t.body===null||typeof t.body!="object"||t.body instanceof ArrayBuffer||ArrayBuffer.isView(t.body)||t.body instanceof Blob||t.body instanceof File||t.body instanceof URLSearchParams||t.body instanceof FormData||t.body instanceof ReadableStream)return;e.request.body=JSON.stringify(t.body);const n=e.ensureRequestHeaders();n["Content-Type"]||(n["Content-Type"]=l.APPLICATION_JSON)}}const $="FetchInterceptor",X=Number.MAX_SAFE_INTEGER-1e3;class Y{constructor(){this.name=$,this.order=X}async intercept(e){e.response=await M(e.request)}}function P(r,e){return e?r.filter(e).sort((t,n)=>t.order-n.order):[...r].sort((t,n)=>t.order-n.order)}class _{constructor(e=[]){this.sortedInterceptors=[],this.sortedInterceptors=P(e)}get name(){return this.constructor.name}get order(){return Number.MIN_SAFE_INTEGER}get interceptors(){return[...this.sortedInterceptors]}use(e){return this.sortedInterceptors.some(t=>t.name===e.name)?!1:(this.sortedInterceptors=P([...this.sortedInterceptors,e]),!0)}eject(e){const t=this.sortedInterceptors;return this.sortedInterceptors=P(t,n=>n.name!==e),t.length!==this.sortedInterceptors.length}clear(){this.sortedInterceptors=[]}async intercept(e){for(const t of this.sortedInterceptors)await t.intercept(e)}}class I extends h{constructor(e){super(`Request failed with status code ${e.response?.status} for ${e.request.url}`),this.exchange=e,this.name="HttpStatusValidationError",Object.setPrototypeOf(this,I.prototype)}}const se=r=>r>=200&&r<300,k="ValidateStatusInterceptor",J=Number.MAX_SAFE_INTEGER-1e3;class Q{constructor(e=se){this.validateStatus=e}get name(){return k}get order(){return J}intercept(e){if(!e.response)return;const t=e.response.status;if(!this.validateStatus(t))throw new I(e)}}class R extends h{constructor(e,t){const n=t||e.error?.message||e.response?.statusText||`Request to ${e.request.url} failed during exchange`;super(n,e.error),this.exchange=e,this.name="ExchangeError",Object.setPrototypeOf(this,R.prototype)}}class z{constructor(){this.request=new _([new G,new j,new Y]),this.response=new _([new Q]),this.error=new _}async exchange(e){try{return await this.request.intercept(e),await this.response.intercept(e),e}catch(t){if(e.error=t,await this.error.intercept(e),!e.hasError())return e;throw new R(e)}}}class K{constructor(e,t,n,o){this.attributes={},this.fetcher=e,this.request=t,this.response=n,this.error=o}ensureRequestHeaders(){return this.request.headers||(this.request.headers={}),this.request.headers}ensureRequestUrlParams(){return this.request.urlParams||(this.request.urlParams={path:{},query:{}}),this.request.urlParams.path||(this.request.urlParams.path={}),this.request.urlParams.query||(this.request.urlParams.query={}),this.request.urlParams}hasError(){return!!this.error}hasResponse(){return!!this.response}get requiredResponse(){if(!this.response)throw new R(this,`Request to ${this.request.url} failed with no response`);return this.response}}const S={"Content-Type":l.APPLICATION_JSON},q={baseURL:"",headers:S};class W{constructor(e=q){this.headers=S,this.urlBuilder=new L(e.baseURL,e.urlTemplateStyle),this.headers=e.headers??S,this.timeout=e.timeout,this.interceptors=e.interceptors??new z}async fetch(e,t={}){const n=t;return n.url=e,(await this.request(n)).requiredResponse}async request(e){const t={...this.headers,...e.headers},n={...e,headers:t,timeout:v(e.timeout,this.timeout)},o=new K(this,n);return this.interceptors.exchange(o)}async methodFetch(e,t,n={}){return this.fetch(t,{...n,method:e})}async get(e,t={}){return this.methodFetch(u.GET,e,t)}async post(e,t={}){return this.methodFetch(u.POST,e,t)}async put(e,t={}){return this.methodFetch(u.PUT,e,t)}async delete(e,t={}){return this.methodFetch(u.DELETE,e,t)}async patch(e,t={}){return this.methodFetch(u.PATCH,e,t)}async head(e,t={}){return this.methodFetch(u.HEAD,e,t)}async options(e,t={}){return this.methodFetch(u.OPTIONS,e,t)}}const p="default";class Z{constructor(){this.registrar=new Map}register(e,t){this.registrar.set(e,t)}unregister(e){return this.registrar.delete(e)}get(e){return this.registrar.get(e)}requiredGet(e){const t=this.get(e);if(!t)throw new Error(`Fetcher ${e} not found`);return t}get default(){return this.requiredGet(p)}set default(e){this.register(p,e)}get fetchers(){return new Map(this.registrar)}}const x=new Z;function F(r,e){if(!(r===void 0&&e===void 0))return e===void 0?r:r===void 0?e:{...r,...e}}function ne(r,e){if(Object.keys(r).length===0)return e;if(Object.keys(e).length===0)return r;const t={path:F(r.urlParams?.path,e.urlParams?.path),query:F(r.urlParams?.query,e.urlParams?.query)},n={...r.headers,...e.headers},o=e.method??r.method,c=e.body??r.body,i=e.timeout??r.timeout,E=e.signal??r.signal;return{...r,...e,method:o,urlParams:t,headers:n,body:c,timeout:i,signal:E}}class ee extends W{constructor(e,t=q){super(t),this.name=e,x.register(e,this)}}const oe=new ee(p);s.CONTENT_TYPE_HEADER=re,s.ContentTypeValues=l,s.DEFAULT_FETCHER_NAME=p,s.DEFAULT_OPTIONS=q,s.ExchangeError=R,s.ExpressUrlTemplateResolver=f,s.FETCH_INTERCEPTOR_NAME=$,s.FETCH_INTERCEPTOR_ORDER=X,s.FetchExchange=K,s.FetchInterceptor=Y,s.FetchTimeoutError=A,s.Fetcher=W,s.FetcherError=h,s.FetcherRegistrar=Z,s.HttpMethod=u,s.HttpStatusValidationError=I,s.InterceptorManager=z,s.InterceptorRegistry=_,s.NamedFetcher=ee,s.REQUEST_BODY_INTERCEPTOR_NAME=B,s.REQUEST_BODY_INTERCEPTOR_ORDER=V,s.RequestBodyInterceptor=j,s.URL_RESOLVE_INTERCEPTOR_NAME=H,s.URL_RESOLVE_INTERCEPTOR_ORDER=N,s.UriTemplateResolver=m,s.UrlBuilder=L,s.UrlResolveInterceptor=G,s.UrlTemplateStyle=w,s.VALIDATE_STATUS_INTERCEPTOR_NAME=k,s.VALIDATE_STATUS_INTERCEPTOR_ORDER=J,s.ValidateStatusInterceptor=Q,s.combineURLs=b,s.expressUrlTemplateResolver=D,s.fetcher=oe,s.fetcherRegistrar=x,s.getUrlTemplateResolver=U,s.isAbsoluteURL=a,s.mergeRecords=F,s.mergeRequest=ne,s.resolveTimeout=v,s.timeoutFetch=M,s.toSorted=P,s.uriTemplateResolver=C,s.urlTemplateRegexExtract=g,s.urlTemplateRegexResolve=y,Object.defineProperty(s,Symbol.toStringTag,{value:"Module"})}));
|
|
2
2
|
//# sourceMappingURL=index.umd.js.map
|