@opra/client 0.33.13 → 1.0.0-alpha.2
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/browser.js +3 -3
- package/cjs/core/backend.js +1 -1
- package/cjs/http/fetch-backend.js +15 -13
- package/cjs/http/http-backend.js +4 -1
- package/cjs/http/http-client-base.js +59 -65
- package/cjs/http/http-interceptor-handler.js +2 -2
- package/cjs/http/http-request-observable.js +14 -18
- package/cjs/http/http-response.js +2 -2
- package/cjs/http/http-utils.js +12 -0
- package/cjs/index.js +1 -5
- package/esm/core/backend.js +1 -1
- package/esm/http/fetch-backend.js +17 -15
- package/esm/http/http-backend.js +4 -1
- package/esm/http/http-client-base.js +60 -66
- package/esm/http/http-interceptor-handler.js +2 -2
- package/esm/http/http-request-observable.js +15 -19
- package/esm/http/http-response.js +2 -2
- package/esm/http/http-utils.js +8 -0
- package/esm/index.js +1 -5
- package/package.json +14 -12
- package/types/core/backend.d.ts +2 -2
- package/types/http/http-backend.d.ts +3 -2
- package/types/http/http-client-base.d.ts +24 -25
- package/types/http/http-request-observable.d.ts +3 -4
- package/types/http/http-response.d.ts +1 -0
- package/types/http/http-utils.d.ts +1 -0
- package/types/index.d.ts +1 -5
- package/cjs/core/client-base.js +0 -18
- package/cjs/http/http-collection-node.js +0 -119
- package/cjs/http/http-singleton-node.js +0 -62
- package/cjs/http/http-storage-node.js +0 -55
- package/cjs/types.js +0 -3
- package/esm/core/client-base.js +0 -14
- package/esm/http/http-collection-node.js +0 -115
- package/esm/http/http-singleton-node.js +0 -58
- package/esm/http/http-storage-node.js +0 -51
- package/esm/types.js +0 -2
- package/types/core/client-base.d.ts +0 -21
- package/types/http/http-collection-node.d.ts +0 -55
- package/types/http/http-singleton-node.d.ts +0 -35
- package/types/http/http-storage-node.d.ts +0 -14
- package/types/types.d.ts +0 -1
package/browser.js
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
* http://www.panates.com
|
|
4
4
|
*****************************************/
|
|
5
5
|
|
|
6
|
-
var ae=Object.defineProperty,de=Object.defineProperties;var he=Object.getOwnPropertyDescriptors;var re=Object.getOwnPropertySymbols;var me=Object.prototype.hasOwnProperty,fe=Object.prototype.propertyIsEnumerable;var te=(d,r,e)=>r in d?ae(d,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):d[r]=e,g=(d,r)=>{for(var e in r||(r={}))me.call(r,e)&&te(d,e,r[e]);if(re)for(var e of re(r))fe.call(r,e)&&te(d,e,r[e]);return d},k=(d,r)=>de(d,he(r)),l=(d,r)=>ae(d,"name",{value:r,configurable:!0});var G=class G{constructor(r){this.api=r==null?void 0:r.api}};l(G,"Backend");var p=G;var ne=Symbol.for("kClient"),f=Symbol.for("kBackend"),u=Symbol.for("kContext");var M=class M{constructor(r){Object.defineProperty(this,f,{enumerable:!1,value:r})}};l(M,"ClientBase");var j=M;var z=class z extends Error{constructor(r,e){super(r.message),this.cause=e,this.issues=r.issues||[],this.status=r.status,e&&(this.cause=e,e.stack&&(this.stack=e.stack))}};l(z,"ClientError");var S=z;import{Observable as ue}from"rxjs";import{isReadableStreamLike as ie}from"rxjs/internal/util/isReadableStreamLike";import I from"@browsery/type-is";import{isBlob as oe,isFormData as ye,OpraURL as ge}from"@opra/common";var F=class F extends p{constructor(r,e){super(e),this.serviceUrl=r}};l(F,"HttpBackend");var _=F;var T=class T{constructor(r){this.hasBody=!1,this.headers=(r==null?void 0:r.headers)instanceof Headers?r==null?void 0:r.headers:new Headers(r==null?void 0:r.headers),this.status=(r==null?void 0:r.status)||200,this.statusText=(r==null?void 0:r.statusText)||"OK",this.url=(r==null?void 0:r.url)||null,this.ok=this.status>=200&&this.status<300,this.body=r==null?void 0:r.body,this.hasBody=(r==null?void 0:r.body)!=null||!!(r!=null&&r.hasBody),this.contentType=(this.headers.get("content-type")||"").split(";")[0]}clone(r){return new T(g(g({},this),r))}};l(T,"HttpResponse");var R=T;var i;(function(d){d.Sent="Sent",d.UploadProgress="UploadProgress",d.ResponseHeader="ResponseHeader",d.DownloadProgress="DownloadProgress",d.Response="Response",d.User="User"})(i||(i={}));var J=class J extends _{constructor(r,e){var t,s,a,c,h,w;super(r,e),this.interceptors=Array.from(new Set([...(e==null?void 0:e.interceptors)||[]])),this.defaults=k(g({},e==null?void 0:e.defaults),{headers:((t=e==null?void 0:e.defaults)==null?void 0:t.headers)instanceof Headers?(s=e==null?void 0:e.defaults)==null?void 0:s.headers:new Headers((a=e==null?void 0:e.defaults)==null?void 0:a.headers),params:((c=e==null?void 0:e.defaults)==null?void 0:c.params)instanceof URLSearchParams?(h=e==null?void 0:e.defaults)==null?void 0:h.params:new URLSearchParams((w=e==null?void 0:e.defaults)==null?void 0:w.params)})}handle(r){return new ue(e=>{(async()=>{let t=this.prepareRequest(r);if(t.body&&r.reportProgress){let O=t.body,D=t.headers.get("content-length")||"0",q=parseInt(D,10)||0,x=0,H=new TransformStream({transform(b,A){A.enqueue(b),x+=b.byteLength,e.next({type:i.UploadProgress,request:t,total:q,loaded:x})}});t=new Request(t.url,{cache:t.cache,credentials:t.credentials,headers:t.headers,integrity:t.integrity,keepalive:t.keepalive,method:t.method,mode:t.mode,redirect:t.redirect,referrer:t.referrer,referrerPolicy:t.referrerPolicy,signal:t.signal,body:O.pipeThrough(H),window:r.window,duplex:"half"})}let s=this.send(t);e.next({request:t,type:i.Sent});let a=await s,c=this.createResponse({url:a.url,headers:a.headers,status:a.status,statusText:a.statusText,hasBody:!!a.body});e.next({request:t,type:i.ResponseHeader,response:c});let h;if(a.body)if(r.reportProgress){let O=a.body,D=a.headers.get("content-length")||"0",q=parseInt(D,10)||0,x=0,H=new Response(new ReadableStream({async start(b){let A=O.getReader();for(;;){let{done:le,value:ee}=await A.read();if(le)break;x+=ee.byteLength,b.enqueue(ee),e.next({type:i.DownloadProgress,request:t,total:q,loaded:x})}b.close()}}));h=await this.parseBody(H)}else h=await this.parseBody(a);let w=this.createResponse({url:a.url,headers:a.headers,status:a.status,statusText:a.statusText,body:h});e.next({request:t,type:i.Response,response:w}),e.complete()})().catch(t=>e.error(t))})}send(r){return fetch(r)}prepareRequest(r){let e=r.headers||new Headers,t=k(g({},r),{headers:e});this.defaults.headers.forEach((c,h)=>{e.has(h)||e.set(h,c)});let s=new ge(t.url,this.serviceUrl);this.defaults.params.size&&(this.defaults.params.forEach((c,h)=>{s.searchParams.has(h)||s.searchParams.set(h,c)}),t.url=s.toString());let a=t.body;if(a){let c="";typeof a=="string"||typeof a=="number"||typeof a=="boolean"?(c='text/plain; charset="UTF-8"',t.body=new Blob([String(a)],{type:c}),e.set("Content-Length",String(t.body.size)),delete t.duplex):ie(a)?(c="application/octet-stream",t.duplex="half"):Buffer.isBuffer(a)?(c="application/octet-stream",e.set("Content-Length",String(a.length)),delete t.duplex):oe(a)?(c=a.type||"application/octet-stream",e.set("Content-Length",String(a.size)),delete t.duplex):(ye(a)||(c='application/json;charset="UTF-8"',t.body=new Blob([JSON.stringify(a)],{type:c}),e.set("Content-Length",String(t.body.size))),delete t.duplex),c&&!e.has("Content-Type")&&e.set("Content-Type",c)}return new Request(s.toString(),t)}createResponse(r){return new R(r)}async parseBody(r){let e,t=r.headers.get("Content-Type")||"";if(I.is(t,["json","application/*+json"]))e=await r.json(),typeof e=="string"&&(e=JSON.parse(e));else if(I.is(t,["text"]))e=await r.text();else if(I.is(t,["multipart"]))e=await r.formData();else{let s=await r.arrayBuffer();s.byteLength&&(e=s)}return e}};l(J,"FetchBackend");var P=J;import{ApiDocumentFactory as pe,ResponsiveMap as Y}from"@opra/common";import{toArrayDef as n}from"putil-varhelpers";import{OpraURL as V}from"@opra/common";import{lastValueFrom as se,Observable as xe}from"rxjs";import be from"@browsery/type-is";import{OpraURL as ke}from"@opra/common";var o;(function(d){d.ResponseHeader="response-header",d.Response="response",d.Body="body",d.Events="events"})(o||(o={}));var K=class K{constructor(r,e){this.chain=r.reduceRight((t,s)=>(a,c)=>s.intercept(a,{handle:h=>t(h,c)}),we),this.finalHandler=e}handle(r){return this.chain(r,e=>this.finalHandler.handle(e))}};l(K,"HttpInterceptorHandler");var E=K;function we(d,r){return r(d)}l(we,"chainEnd");var v=class v extends xe{constructor(r,e){super(s=>{let a=this[u].observe;new E(r.interceptors||[],this[f]).handle(this[u]).subscribe({next(c){if(a===o.Events){s.next(c);return}if(a===o.ResponseHeader&&c.type===i.ResponseHeader){s.next(c.response),s.complete();return}if(c.type===i.Response){let{response:h}=c;if(a===o.Response){s.next(h),s.complete();return}let w=be.is(c.response.contentType||"",["application/opra+json"]);if(h.status>=400&&h.status<600){s.error(new S({message:h.status+" "+h.statusText,status:h.status,issues:w?h.body.errors:void 0})),s.complete();return}s.next(c.response.body),s.complete()}},error(c){s.error(c)},complete(){s.complete()}})}),Object.defineProperty(this,f,{enumerable:!1,value:r});let t=new ke(e==null?void 0:e.url);Object.defineProperty(this,u,{enumerable:!1,value:k(g({},e),{observe:o.Body,headers:new Headers(e==null?void 0:e.headers),url:t})})}clone(){return new v(this[f],this[u])}options(r){return Object.assign(this[u],r),this}header(r,e){let t=this[u].headers;return typeof r=="object"?((r instanceof Headers?r:new Headers(r)).forEach((a,c)=>{c.toLowerCase()==="set-cookie"?t.append(c,a):t.set(c,a)}),this):(e==null||e===""?t.delete(r):t.append(r,String(e)),this)}param(r,e){e&&typeof e=="object"&&(e=JSON.stringify(e));let t=this[u].url.searchParams;return typeof r=="object"?((r instanceof URLSearchParams?r:new URLSearchParams(r)).forEach((a,c)=>t.set(c,a)),this):(e==null?t.delete(r):t.set(r,String(e)),this)}observe(r){if(r===this[u].observe)return this;let e=this.clone();return e[u].observe=r||o.Body,e}getBody(){return se(this.observe(o.Body))}getResponse(){return se(this.observe(o.Response))}};l(v,"HttpRequestObservable");var m=v;var N=class N{constructor(r,e){this._backend=r,this._path=e}create(r,e){let t=new m(this._backend,{method:"POST",url:this._path,body:r});return e!=null&&e.include&&t.param("include",n(e.include,[]).join(",")),e!=null&&e.pick&&t.param("pick",n(e.pick,[]).join(",")),e!=null&&e.omit&&t.param("omit",n(e.omit,[]).join(",")),t}delete(r){if(r==null||r==="")throw new TypeError("'id' argument must have a value");let e=new V;return e.join({resource:this._path,key:r}),new m(this._backend,{method:"DELETE",url:e})}deleteMany(r){let e=new m(this._backend,{method:"DELETE",url:this._path});return r!=null&&r.filter&&e.param("filter",String(r.filter)),e}get(r,e){if(r==null||r==="")throw new TypeError("'id' argument must have a value");let t=new V;t.join({resource:this._path,key:r});let s=new m(this._backend,{method:"GET",url:t});return e!=null&&e.include&&s.param("include",n(e.include,[]).join(",")),e!=null&&e.pick&&s.param("pick",n(e.pick,[]).join(",")),e!=null&&e.omit&&s.param("omit",n(e.omit,[]).join(",")),s}findMany(r){let e=new m(this._backend,{method:"GET",url:this._path});return r!=null&&r.include&&e.param("include",n(r.include,[]).join(",")),r!=null&&r.pick&&e.param("pick",n(r.pick,[]).join(",")),r!=null&&r.omit&&e.param("omit",n(r.omit,[]).join(",")),r!=null&&r.sort&&e.param("sort",n(r.sort,[]).join(",")),r!=null&&r.filter&&e.param("filter",String(r.filter)),(r==null?void 0:r.limit)!=null&&e.param("limit",String(r.limit)),(r==null?void 0:r.skip)!=null&&e.param("skip",String(r.skip)),(r==null?void 0:r.count)!=null&&e.param("count",String(r.count)),(r==null?void 0:r.distinct)!=null&&e.param("distinct",String(r.distinct)),e}update(r,e,t){if(r==null)throw new TypeError("'id' argument must have a value");let s=new V;s.join({resource:this._path,key:r});let a=new m(this._backend,{method:"PATCH",url:s,body:e});return t!=null&&t.include&&a.param("include",n(t.include,[]).join(",")),t!=null&&t.pick&&a.param("pick",n(t.pick,[]).join(",")),t!=null&&t.omit&&a.param("omit",n(t.omit,[]).join(",")),a}updateMany(r,e){let t=new m(this._backend,{method:"PATCH",url:this._path,body:r});return e!=null&&e.filter&&t.param("filter",String(e.filter)),t}};l(N,"HttpCollectionNode");var L=N;import{toArrayDef as y}from"putil-varhelpers";var Q=class Q{constructor(r,e){this._backend=r,this._path=e}create(r,e){let t=new m(this._backend,{method:"POST",url:this._path,body:r});return e!=null&&e.include&&t.param("include",y(e.include,[]).join(",")),e!=null&&e.pick&&t.param("pick",y(e.pick,[]).join(",")),e!=null&&e.omit&&t.param("omit",y(e.omit,[]).join(",")),t}delete(){return new m(this._backend,{method:"DELETE",url:this._path})}get(r){let e=new m(this._backend,{method:"GET",url:this._path});return r!=null&&r.include&&e.param("include",y(r.include,[]).join(",")),r!=null&&r.pick&&e.param("pick",y(r.pick,[]).join(",")),r!=null&&r.omit&&e.param("omit",y(r.omit,[]).join(",")),e}update(r,e){let t=new m(this._backend,{method:"PATCH",url:this._path,body:r});return e!=null&&e.include&&t.param("include",y(e.include,[]).join(",")),e!=null&&e.pick&&t.param("pick",y(e.pick,[]).join(",")),e!=null&&e.omit&&t.param("omit",y(e.omit,[]).join(",")),t}};l(Q,"HttpSingletonNode");var B=Q;import{OpraURL as W}from"@opra/common";var X=class X{constructor(r,e){this._backend=r,this._path=e}delete(r){if(r){let e=new W(this._path);e.join(r),r=e.toString()}else r=this._path;return new m(this._backend,{method:"DELETE",url:r})}get(r){if(r){let e=new W(this._path);e.join(r),r=e.toString()}else r=this._path;return new m(this._backend,{method:"GET",url:r})}post(r,e){if(e){let t=new W(this._path);t.join(e),e=t.toString()}else e=this._path;return new m(this._backend,{method:"POST",url:e,body:r})}};l(X,"HttpStorageNode");var C=X;var Z=class Z extends j{constructor(r){super(r),this._collectionCache=new Y,this._singletonCache=new Y,this._storageCache=new Y}get serviceUrl(){return this[f].serviceUrl}async getMetadata(){if(this._metadataPromise)return this._metadataPromise;let r=new m(this[f],{method:"GET",url:"/",headers:new Headers({accept:"application/json"})}),e;try{this._metadataPromise=r.getBody(),e=await this._metadataPromise}catch(t){throw t.message="Error fetching metadata from url ("+this.serviceUrl+`).
|
|
7
|
-
`+
|
|
8
|
-
`+
|
|
6
|
+
var K=Object.defineProperty,$=Object.defineProperties;var Q=Object.getOwnPropertyDescriptors;var N=Object.getOwnPropertySymbols;var X=Object.prototype.hasOwnProperty,Y=Object.prototype.propertyIsEnumerable;var G=(o,e,t)=>e in o?K(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,c=(o,e)=>{for(var t in e||(e={}))X.call(e,t)&&G(o,t,e[t]);if(N)for(var t of N(e))Y.call(e,t)&&G(o,t,e[t]);return o},l=(o,e)=>$(o,Q(e)),d=(o,e)=>K(o,"name",{value:e,configurable:!0});var v=class v{constructor(e){this.document=e==null?void 0:e.document}};d(v,"Backend");var g=v;var O=class O extends Error{constructor(e,t){super(e.message),this.cause=t,this.issues=e.issues||[],this.status=e.status,t&&(this.cause=t,t.stack&&(this.stack=t.stack))}};d(O,"ClientError");var w=O;import{Observable as Z}from"rxjs";import{isReadableStreamLike as _}from"rxjs/internal/util/isReadableStreamLike";import H from"@browsery/type-is";import{isBlob as ee,isFormData as te}from"@opra/common";var D=class D extends g{constructor(e,t){super(t);let r=new URL(e);this.serviceUrl=r.toString().split("?")[0].split("#")[0],this.serviceUrl.endsWith("/")||(this.serviceUrl+="/")}};d(D,"HttpBackend");var R=D;var b=class b{constructor(e){this.hasBody=!1,this.headers=(e==null?void 0:e.headers)instanceof Headers?e==null?void 0:e.headers:new Headers(e==null?void 0:e.headers),this.status=(e==null?void 0:e.status)||200,this.statusText=(e==null?void 0:e.statusText)||"OK",this.url=(e==null?void 0:e.url)||null,this.ok=this.status>=200&&this.status<300,this.body=e==null?void 0:e.body,this.hasBody=(e==null?void 0:e.body)!=null||!!(e!=null&&e.hasBody),this.contentType=(this.headers.get("content-type")||"").split(";")[0]}clone(e){return new b(c(c({},this),e))}};d(b,"HttpResponse");var S=b;var m;(function(o){o.Sent="Sent",o.UploadProgress="UploadProgress",o.ResponseHeader="ResponseHeader",o.DownloadProgress="DownloadProgress",o.Response="Response",o.User="User"})(m||(m={}));var I=class I extends R{constructor(e,t){var r,n,s,a,h,x;super(e,t),this.interceptors=Array.from(new Set([...(t==null?void 0:t.interceptors)||[]])),this.defaults=l(c({},t==null?void 0:t.defaults),{headers:((r=t==null?void 0:t.defaults)==null?void 0:r.headers)instanceof Headers?(n=t==null?void 0:t.defaults)==null?void 0:n.headers:new Headers((s=t==null?void 0:t.defaults)==null?void 0:s.headers),params:((a=t==null?void 0:t.defaults)==null?void 0:a.params)instanceof URLSearchParams?(h=t==null?void 0:t.defaults)==null?void 0:h.params:new URLSearchParams((x=t==null?void 0:t.defaults)==null?void 0:x.params)})}handle(e){return new Z(t=>{(async()=>{let r=this.prepareRequest(e);if(r.body&&e.reportProgress){let q=r.body,L=r.headers.get("content-length")||"0",j=parseInt(L,10)||0,y=0,E=new TransformStream({transform(i,C){C.enqueue(i),y+=i.byteLength,t.next({type:m.UploadProgress,request:r,total:j,loaded:y})}});r=new Request(r.url,{cache:r.cache,credentials:r.credentials,headers:r.headers,integrity:r.integrity,keepalive:r.keepalive,method:r.method,mode:r.mode,redirect:r.redirect,referrer:r.referrer,referrerPolicy:r.referrerPolicy,signal:r.signal,body:q.pipeThrough(E),window:e.window,duplex:"half"})}let n=this.send(r);t.next({request:r,type:m.Sent});let s=await n,a=this.createResponse({url:s.url,headers:s.headers,status:s.status,statusText:s.statusText,hasBody:!!s.body});t.next({request:r,type:m.ResponseHeader,response:a});let h;if(s.body)if(e.reportProgress){let q=s.body,L=s.headers.get("content-length")||"0",j=parseInt(L,10)||0,y=0,E=new Response(new ReadableStream({async start(i){let C=q.getReader();for(;;){let{done:W,value:J}=await C.read();if(W)break;y+=J.byteLength,i.enqueue(J),t.next({type:m.DownloadProgress,request:r,total:j,loaded:y})}i.close()}}));h=await this.parseBody(E)}else h=await this.parseBody(s);let x=this.createResponse({url:s.url,headers:s.headers,status:s.status,statusText:s.statusText,body:h});t.next({request:r,type:m.Response,response:x}),t.complete()})().catch(r=>t.error(r))})}send(e){return fetch(e)}prepareRequest(e){let t=e.headers||new Headers,r=l(c({},e),{headers:t});this.defaults.headers.forEach((a,h)=>{t.has(h)||t.set(h,a)});let n=new URL(r.url,this.serviceUrl);this.defaults.params.size&&(this.defaults.params.forEach((a,h)=>{n.searchParams.has(h)||n.searchParams.set(h,a)}),r.url=n.toString());let s=r.body;if(s){let a="";typeof s=="string"||typeof s=="number"||typeof s=="boolean"?(a='text/plain; charset="UTF-8"',r.body=new Blob([String(s)],{type:a}),t.set("Content-Length",String(r.body.size)),delete r.duplex):_(s)?(a="application/octet-stream",r.duplex="half"):Buffer.isBuffer(s)?(a="application/octet-stream",t.set("Content-Length",String(s.length)),delete r.duplex):ee(s)?(a=s.type||"application/octet-stream",t.set("Content-Length",String(s.size)),delete r.duplex):(te(s)||(a='application/json;charset="UTF-8"',r.body=new Blob([JSON.stringify(s)],{type:a}),t.set("Content-Length",String(r.body.size))),delete r.duplex),a&&!t.has("Content-Type")&&t.set("Content-Type",a)}return new Request(n.toString(),r)}createResponse(e){return new S(e)}async parseBody(e){let t,r=e.headers.get("Content-Type")||"";if(H.is(r,["json","application/*+json"]))t=await e.json(),typeof t=="string"&&(t=JSON.parse(t));else if(H.is(r,["text"]))t=await e.text();else if(H.is(r,["multipart"]))t=await e.formData();else{let n=await e.arrayBuffer();n.byteLength&&(t=n)}return t}};d(I,"FetchBackend");var P=I;var re=Symbol.for("kClient"),f=Symbol.for("kBackend"),u=Symbol.for("kContext");import{ApiDocumentFactory as de}from"@opra/common";import{lastValueFrom as M,Observable as ae}from"rxjs";import oe from"@browsery/type-is";import{MimeTypes as ne}from"@opra/common";var p;(function(o){o.ResponseHeader="response-header",o.Response="response",o.Body="body",o.Events="events"})(p||(p={}));var z=class z{constructor(e,t){this.chain=e.reduceRight((r,n)=>(s,a)=>n.intercept(s,{handle:d(h=>r(h,a),"handle")}),se),this.finalHandler=t}handle(e){return this.chain(e,t=>this.finalHandler.handle(t))}};d(z,"HttpInterceptorHandler");var T=z;function se(o,e){return e(o)}d(se,"chainEnd");var U=class U extends ae{constructor(e,t){super(r=>{let n=this[u].observe;new T(e.interceptors||[],this[f]).handle(this[u]).subscribe({next(s){if(n===p.Events){r.next(s);return}if(n===p.ResponseHeader&&s.type===m.ResponseHeader){r.next(s.response),r.complete();return}if(s.type===m.Response){let{response:a}=s;if(n===p.Response){r.next(a),r.complete();return}let h=oe.is(s.response.contentType||"",[ne.opra_response_json]);if(a.status>=400&&a.status<600){r.error(new w({message:a.status+" "+a.statusText,status:a.status,issues:h?a.body.errors:void 0})),r.complete();return}r.next(s.response.body),r.complete()}},error(s){r.error(s)},complete(){r.complete()}})}),Object.defineProperty(this,f,{enumerable:!1,value:e}),Object.defineProperty(this,u,{enumerable:!1,value:l(c({},t),{observe:p.Body,headers:new Headers(t==null?void 0:t.headers)})})}clone(){return new U(this[f],this[u])}options(e){return Object.assign(this[u],e),this}header(e,t){let r=this[u].headers;return typeof e=="object"?((e instanceof Headers?e:new Headers(e)).forEach((s,a)=>{a.toLowerCase()==="set-cookie"?r.append(a,s):r.set(a,s)}),this):(t==null||t===""?r.delete(e):r.append(e,String(t)),this)}param(e,t){t&&typeof t=="object"&&(t=JSON.stringify(t));let r=this[u].url.searchParams;return typeof e=="object"?(typeof e.forEach=="function"?e.forEach((n,s)=>r.set(String(s),String(n))):Object.entries(e).forEach(n=>r.set(String(n[0]),String(n[1]))),this):(t==null?r.delete(e):r.set(e,String(t)),this)}observe(e){if(e===this[u].observe)return this;let t=this.clone();return t[u].observe=e||p.Body,t}getBody(){return M(this.observe(p.Body))}getResponse(){return M(this.observe(p.Response))}};d(U,"HttpRequestObservable");var B=U;var F=class F{constructor(e){Object.defineProperty(this,f,{enumerable:!1,value:e})}get serviceUrl(){return this[f].serviceUrl}async getSchema(){this._schemaRequest||(this._schemaRequest=this.request("$schema",{headers:new Headers({accept:"application/json"})}).getBody().catch(r=>{throw r.message="Error fetching api schema from url ("+this.serviceUrl+`).
|
|
7
|
+
`+r.message,r}));let e=await this._schemaRequest,t=await de.createDocument(e).catch(r=>{throw r.message=`Error loading api document.
|
|
8
|
+
`+r.message,r});return this[f].document=t,this._schemaRequest=void 0,t}request(e,t){let r=new B(this[f],l(c({},t),{method:(t==null?void 0:t.method)||"GET",url:new URL(e,this.serviceUrl)}));return t!=null&&t.params&&r.param(t.params),r}delete(e,t){return this.request(e,l(c({},t),{method:"DELETE"}))}get(e,t){return this.request(e,l(c({},t),{method:"GET"}))}patch(e,t,r){return this.request(e,l(c({},r),{method:"PATCH",body:t}))}post(e,t,r){return this.request(e,l(c({},r),{method:"POST",body:t}))}put(e,t,r){return this.request(e,l(c({},r),{method:"PUT",body:t}))}};d(F,"HttpClientBase");var k=F;var A=class A extends k{constructor(e,t){super(new P(e,t))}get defaults(){return this[f].defaults}};d(A,"OpraHttpClient");var V=A;function Ze(o,...e){let t="",r;for(r=0;r<o.length;r++)t+=o[0]+encodeURIComponent(e[r]);return t}d(Ze,"urlPath");export{g as Backend,w as ClientError,P as FetchBackend,R as HttpBackend,k as HttpClientBase,m as HttpEventType,p as HttpObserveType,B as HttpRequestObservable,S as HttpResponse,V as OpraHttpClient,f as kBackend,re as kClient,u as kContext,Ze as urlPath};
|
package/cjs/core/backend.js
CHANGED
|
@@ -22,13 +22,15 @@ class FetchBackend extends http_backend_js_1.HttpBackend {
|
|
|
22
22
|
this.defaults = {
|
|
23
23
|
...options?.defaults,
|
|
24
24
|
headers: options?.defaults?.headers instanceof Headers
|
|
25
|
-
? options?.defaults?.headers
|
|
25
|
+
? options?.defaults?.headers
|
|
26
|
+
: new Headers(options?.defaults?.headers),
|
|
26
27
|
params: options?.defaults?.params instanceof URLSearchParams
|
|
27
|
-
? options?.defaults?.params
|
|
28
|
+
? options?.defaults?.params
|
|
29
|
+
: new URLSearchParams(options?.defaults?.params),
|
|
28
30
|
};
|
|
29
31
|
}
|
|
30
32
|
handle(init) {
|
|
31
|
-
return new rxjs_1.Observable(
|
|
33
|
+
return new rxjs_1.Observable(subscriber => {
|
|
32
34
|
(async () => {
|
|
33
35
|
let request = this.prepareRequest(init);
|
|
34
36
|
if (request.body && init.reportProgress) {
|
|
@@ -45,9 +47,9 @@ class FetchBackend extends http_backend_js_1.HttpBackend {
|
|
|
45
47
|
type: http_event_js_1.HttpEventType.UploadProgress,
|
|
46
48
|
request,
|
|
47
49
|
total,
|
|
48
|
-
loaded
|
|
50
|
+
loaded,
|
|
49
51
|
});
|
|
50
|
-
}
|
|
52
|
+
},
|
|
51
53
|
});
|
|
52
54
|
request = new Request(request.url, {
|
|
53
55
|
cache: request.cache,
|
|
@@ -65,7 +67,7 @@ class FetchBackend extends http_backend_js_1.HttpBackend {
|
|
|
65
67
|
window: init.window,
|
|
66
68
|
...{
|
|
67
69
|
// undici library requires
|
|
68
|
-
duplex: 'half'
|
|
70
|
+
duplex: 'half',
|
|
69
71
|
},
|
|
70
72
|
});
|
|
71
73
|
}
|
|
@@ -83,12 +85,12 @@ class FetchBackend extends http_backend_js_1.HttpBackend {
|
|
|
83
85
|
headers: fetchResponse.headers,
|
|
84
86
|
status: fetchResponse.status,
|
|
85
87
|
statusText: fetchResponse.statusText,
|
|
86
|
-
hasBody: !!fetchResponse.body
|
|
88
|
+
hasBody: !!fetchResponse.body,
|
|
87
89
|
});
|
|
88
90
|
subscriber.next({
|
|
89
91
|
request,
|
|
90
92
|
type: http_event_js_1.HttpEventType.ResponseHeader,
|
|
91
|
-
response: headersResponse
|
|
93
|
+
response: headersResponse,
|
|
92
94
|
});
|
|
93
95
|
// Parse body
|
|
94
96
|
let body;
|
|
@@ -112,7 +114,7 @@ class FetchBackend extends http_backend_js_1.HttpBackend {
|
|
|
112
114
|
type: http_event_js_1.HttpEventType.DownloadProgress,
|
|
113
115
|
request,
|
|
114
116
|
total,
|
|
115
|
-
loaded
|
|
117
|
+
loaded,
|
|
116
118
|
});
|
|
117
119
|
}
|
|
118
120
|
controller.close();
|
|
@@ -135,7 +137,7 @@ class FetchBackend extends http_backend_js_1.HttpBackend {
|
|
|
135
137
|
subscriber.next({
|
|
136
138
|
request,
|
|
137
139
|
type: http_event_js_1.HttpEventType.Response,
|
|
138
|
-
response
|
|
140
|
+
response,
|
|
139
141
|
});
|
|
140
142
|
subscriber.complete();
|
|
141
143
|
})().catch(error => subscriber.error(error));
|
|
@@ -148,13 +150,13 @@ class FetchBackend extends http_backend_js_1.HttpBackend {
|
|
|
148
150
|
const headers = init.headers || new Headers();
|
|
149
151
|
const requestInit = {
|
|
150
152
|
...init,
|
|
151
|
-
headers
|
|
153
|
+
headers,
|
|
152
154
|
};
|
|
153
155
|
this.defaults.headers.forEach((val, key) => {
|
|
154
156
|
if (!headers.has(key))
|
|
155
157
|
headers.set(key, val);
|
|
156
158
|
});
|
|
157
|
-
const url = new
|
|
159
|
+
const url = new URL(requestInit.url, this.serviceUrl);
|
|
158
160
|
if (this.defaults.params.size) {
|
|
159
161
|
this.defaults.params.forEach((val, key) => {
|
|
160
162
|
if (!url.searchParams.has(key))
|
|
@@ -204,7 +206,7 @@ class FetchBackend extends http_backend_js_1.HttpBackend {
|
|
|
204
206
|
}
|
|
205
207
|
async parseBody(fetchResponse) {
|
|
206
208
|
let body;
|
|
207
|
-
const contentType =
|
|
209
|
+
const contentType = fetchResponse.headers.get('Content-Type') || '';
|
|
208
210
|
if (type_is_1.default.is(contentType, ['json', 'application/*+json'])) {
|
|
209
211
|
body = await fetchResponse.json();
|
|
210
212
|
if (typeof body === 'string')
|
package/cjs/http/http-backend.js
CHANGED
|
@@ -9,7 +9,10 @@ const backend_js_1 = require("../core/backend.js");
|
|
|
9
9
|
class HttpBackend extends backend_js_1.Backend {
|
|
10
10
|
constructor(serviceUrl, options) {
|
|
11
11
|
super(options);
|
|
12
|
-
|
|
12
|
+
const u = new URL(serviceUrl);
|
|
13
|
+
this.serviceUrl = u.toString().split('?')[0].split('#')[0];
|
|
14
|
+
if (!this.serviceUrl.endsWith('/'))
|
|
15
|
+
this.serviceUrl += '/';
|
|
13
16
|
}
|
|
14
17
|
}
|
|
15
18
|
exports.HttpBackend = HttpBackend;
|
|
@@ -3,90 +3,84 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.HttpClientBase = void 0;
|
|
4
4
|
const common_1 = require("@opra/common");
|
|
5
5
|
const constants_js_1 = require("../constants.js");
|
|
6
|
-
const client_base_js_1 = require("../core/client-base.js");
|
|
7
|
-
const http_collection_node_js_1 = require("./http-collection-node.js");
|
|
8
6
|
const http_request_observable_js_1 = require("./http-request-observable.js");
|
|
9
|
-
const http_singleton_node_js_1 = require("./http-singleton-node.js");
|
|
10
|
-
const http_storage_node_js_1 = require("./http-storage-node.js");
|
|
11
7
|
/**
|
|
12
8
|
*
|
|
13
9
|
* @class OpraClientBase
|
|
14
10
|
* @abstract
|
|
15
11
|
*/
|
|
16
|
-
class HttpClientBase
|
|
12
|
+
class HttpClientBase {
|
|
17
13
|
constructor(backend) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
Object.defineProperty(this, constants_js_1.kBackend, {
|
|
15
|
+
enumerable: false,
|
|
16
|
+
value: backend,
|
|
17
|
+
});
|
|
22
18
|
}
|
|
23
19
|
get serviceUrl() {
|
|
24
20
|
return this[constants_js_1.kBackend].serviceUrl;
|
|
25
21
|
}
|
|
26
|
-
async
|
|
27
|
-
if (this.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
this._metadataPromise = request.getBody();
|
|
37
|
-
body = await this._metadataPromise;
|
|
38
|
-
}
|
|
39
|
-
catch (e) {
|
|
40
|
-
e.message = 'Error fetching metadata from url (' + this.serviceUrl + ').\n' + e.message;
|
|
41
|
-
throw e;
|
|
42
|
-
}
|
|
43
|
-
finally {
|
|
44
|
-
this._metadataPromise = undefined;
|
|
45
|
-
}
|
|
46
|
-
try {
|
|
47
|
-
const api = await common_1.ApiDocumentFactory.createDocument(body);
|
|
48
|
-
this[constants_js_1.kBackend].api = api;
|
|
49
|
-
return api;
|
|
22
|
+
async getSchema() {
|
|
23
|
+
if (!this._schemaRequest) {
|
|
24
|
+
this._schemaRequest = this.request('$schema', {
|
|
25
|
+
headers: new Headers({ accept: 'application/json' }),
|
|
26
|
+
})
|
|
27
|
+
.getBody()
|
|
28
|
+
.catch(e => {
|
|
29
|
+
e.message = 'Error fetching api schema from url (' + this.serviceUrl + ').\n' + e.message;
|
|
30
|
+
throw e;
|
|
31
|
+
});
|
|
50
32
|
}
|
|
51
|
-
|
|
33
|
+
const body = await this._schemaRequest;
|
|
34
|
+
const document = await common_1.ApiDocumentFactory.createDocument(body).catch(e => {
|
|
52
35
|
e.message = 'Error loading api document.\n' + e.message;
|
|
53
36
|
throw e;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
if (!node) {
|
|
59
|
-
node = new http_collection_node_js_1.HttpCollectionNode(this[constants_js_1.kBackend], path);
|
|
60
|
-
this._collectionCache.set(path, node);
|
|
61
|
-
}
|
|
62
|
-
return node;
|
|
37
|
+
});
|
|
38
|
+
this[constants_js_1.kBackend].document = document;
|
|
39
|
+
this._schemaRequest = undefined;
|
|
40
|
+
return document;
|
|
63
41
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
|
|
42
|
+
request(path, options) {
|
|
43
|
+
const observable = new http_request_observable_js_1.HttpRequestObservable(this[constants_js_1.kBackend], {
|
|
44
|
+
...options,
|
|
45
|
+
method: options?.method || 'GET',
|
|
46
|
+
url: new URL(path, this.serviceUrl),
|
|
47
|
+
});
|
|
48
|
+
if (options?.params)
|
|
49
|
+
observable.param(options.params);
|
|
50
|
+
return observable;
|
|
71
51
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
return node;
|
|
52
|
+
delete(path, options) {
|
|
53
|
+
return this.request(path, {
|
|
54
|
+
...options,
|
|
55
|
+
method: 'DELETE',
|
|
56
|
+
});
|
|
79
57
|
}
|
|
80
|
-
|
|
81
|
-
|
|
58
|
+
get(path, options) {
|
|
59
|
+
return this.request(path, {
|
|
60
|
+
...options,
|
|
82
61
|
method: 'GET',
|
|
83
|
-
url: path
|
|
84
62
|
});
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
63
|
+
}
|
|
64
|
+
patch(path, requestBody, options) {
|
|
65
|
+
return this.request(path, {
|
|
66
|
+
...options,
|
|
67
|
+
method: 'PATCH',
|
|
68
|
+
body: requestBody,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
post(path, requestBody, options) {
|
|
72
|
+
return this.request(path, {
|
|
73
|
+
...options,
|
|
74
|
+
method: 'POST',
|
|
75
|
+
body: requestBody,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
put(path, requestBody, options) {
|
|
79
|
+
return this.request(path, {
|
|
80
|
+
...options,
|
|
81
|
+
method: 'PUT',
|
|
82
|
+
body: requestBody,
|
|
83
|
+
});
|
|
90
84
|
}
|
|
91
85
|
}
|
|
92
86
|
exports.HttpClientBase = HttpClientBase;
|
|
@@ -4,12 +4,12 @@ exports.HttpInterceptorHandler = void 0;
|
|
|
4
4
|
class HttpInterceptorHandler {
|
|
5
5
|
constructor(interceptors, finalHandler) {
|
|
6
6
|
this.chain = interceptors.reduceRight((chainTailFn, interceptor) => (initialRequest, handler) => interceptor.intercept(initialRequest, {
|
|
7
|
-
handle:
|
|
7
|
+
handle: downstreamRequest => chainTailFn(downstreamRequest, handler),
|
|
8
8
|
}), chainEnd);
|
|
9
9
|
this.finalHandler = finalHandler;
|
|
10
10
|
}
|
|
11
11
|
handle(initialRequest) {
|
|
12
|
-
return this.chain(initialRequest,
|
|
12
|
+
return this.chain(initialRequest, req => this.finalHandler.handle(req));
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
exports.HttpInterceptorHandler = HttpInterceptorHandler;
|
|
@@ -16,11 +16,9 @@ const http_event_js_1 = require("./interfaces/http-event.js");
|
|
|
16
16
|
*/
|
|
17
17
|
class HttpRequestObservable extends rxjs_1.Observable {
|
|
18
18
|
constructor(backend, init) {
|
|
19
|
-
super(
|
|
19
|
+
super(subscriber => {
|
|
20
20
|
const observe = this[constants_js_1.kContext].observe;
|
|
21
|
-
new http_interceptor_handler_js_1.HttpInterceptorHandler(backend.interceptors || [], this[constants_js_1.kBackend])
|
|
22
|
-
.handle(this[constants_js_1.kContext])
|
|
23
|
-
.subscribe({
|
|
21
|
+
new http_interceptor_handler_js_1.HttpInterceptorHandler(backend.interceptors || [], this[constants_js_1.kBackend]).handle(this[constants_js_1.kContext]).subscribe({
|
|
24
22
|
next(event) {
|
|
25
23
|
if (observe === http_observable_type_enum_js_1.HttpObserveType.Events) {
|
|
26
24
|
subscriber.next(event);
|
|
@@ -38,12 +36,12 @@ class HttpRequestObservable extends rxjs_1.Observable {
|
|
|
38
36
|
subscriber.complete();
|
|
39
37
|
return;
|
|
40
38
|
}
|
|
41
|
-
const isOpraResponse = type_is_1.default.is(event.response.contentType || '', [
|
|
39
|
+
const isOpraResponse = type_is_1.default.is(event.response.contentType || '', [common_1.MimeTypes.opra_response_json]);
|
|
42
40
|
if (response.status >= 400 && response.status < 600) {
|
|
43
41
|
subscriber.error(new client_error_js_1.ClientError({
|
|
44
42
|
message: response.status + ' ' + response.statusText,
|
|
45
43
|
status: response.status,
|
|
46
|
-
issues: isOpraResponse ? response.body.errors : undefined
|
|
44
|
+
issues: isOpraResponse ? response.body.errors : undefined,
|
|
47
45
|
}));
|
|
48
46
|
subscriber.complete();
|
|
49
47
|
return;
|
|
@@ -57,22 +55,20 @@ class HttpRequestObservable extends rxjs_1.Observable {
|
|
|
57
55
|
},
|
|
58
56
|
complete() {
|
|
59
57
|
subscriber.complete();
|
|
60
|
-
}
|
|
58
|
+
},
|
|
61
59
|
});
|
|
62
60
|
});
|
|
63
61
|
Object.defineProperty(this, constants_js_1.kBackend, {
|
|
64
62
|
enumerable: false,
|
|
65
|
-
value: backend
|
|
63
|
+
value: backend,
|
|
66
64
|
});
|
|
67
|
-
const url = new common_1.OpraURL(init?.url);
|
|
68
65
|
Object.defineProperty(this, constants_js_1.kContext, {
|
|
69
66
|
enumerable: false,
|
|
70
67
|
value: {
|
|
71
68
|
...init,
|
|
72
69
|
observe: http_observable_type_enum_js_1.HttpObserveType.Body,
|
|
73
70
|
headers: new Headers(init?.headers),
|
|
74
|
-
|
|
75
|
-
}
|
|
71
|
+
},
|
|
76
72
|
});
|
|
77
73
|
}
|
|
78
74
|
clone() {
|
|
@@ -85,9 +81,7 @@ class HttpRequestObservable extends rxjs_1.Observable {
|
|
|
85
81
|
header(arg0, value) {
|
|
86
82
|
const target = this[constants_js_1.kContext].headers;
|
|
87
83
|
if (typeof arg0 === 'object') {
|
|
88
|
-
const h = arg0 instanceof Headers
|
|
89
|
-
? arg0
|
|
90
|
-
: new Headers(arg0);
|
|
84
|
+
const h = arg0 instanceof Headers ? arg0 : new Headers(arg0);
|
|
91
85
|
h.forEach((v, k) => {
|
|
92
86
|
if (k.toLowerCase() === 'set-cookie') {
|
|
93
87
|
target.append(k, v);
|
|
@@ -109,10 +103,12 @@ class HttpRequestObservable extends rxjs_1.Observable {
|
|
|
109
103
|
}
|
|
110
104
|
const target = this[constants_js_1.kContext].url.searchParams;
|
|
111
105
|
if (typeof arg0 === 'object') {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
106
|
+
if (typeof arg0.forEach === 'function') {
|
|
107
|
+
arg0.forEach((v, k) => target.set(String(k), String(v)));
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
Object.entries(arg0).forEach(entry => target.set(String(entry[0]), String(entry[1])));
|
|
111
|
+
}
|
|
116
112
|
return this;
|
|
117
113
|
}
|
|
118
114
|
if (value == null)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/// <reference lib="dom" />
|
|
2
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
4
|
exports.HttpResponse = void 0;
|
|
4
5
|
class HttpResponse {
|
|
@@ -7,8 +8,7 @@ class HttpResponse {
|
|
|
7
8
|
* Returns true if response has body to be received
|
|
8
9
|
*/
|
|
9
10
|
this.hasBody = false;
|
|
10
|
-
this.headers = init?.headers instanceof Headers ? init?.headers
|
|
11
|
-
: new Headers(init?.headers);
|
|
11
|
+
this.headers = init?.headers instanceof Headers ? init?.headers : new Headers(init?.headers);
|
|
12
12
|
this.status = init?.status || 200;
|
|
13
13
|
this.statusText = init?.statusText || 'OK';
|
|
14
14
|
this.url = init?.url || null;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.urlPath = void 0;
|
|
4
|
+
function urlPath(strings, ...values) {
|
|
5
|
+
let str = '';
|
|
6
|
+
let i;
|
|
7
|
+
for (i = 0; i < strings.length; i++) {
|
|
8
|
+
str += strings[0] + encodeURIComponent(values[i]);
|
|
9
|
+
}
|
|
10
|
+
return str;
|
|
11
|
+
}
|
|
12
|
+
exports.urlPath = urlPath;
|
package/cjs/index.js
CHANGED
|
@@ -2,19 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.kClient = exports.kContext = exports.kBackend = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
tslib_1.__exportStar(require("./types.js"), exports);
|
|
6
5
|
tslib_1.__exportStar(require("./core/backend.js"), exports);
|
|
7
|
-
tslib_1.__exportStar(require("./core/client-base.js"), exports);
|
|
8
6
|
tslib_1.__exportStar(require("./core/client-error.js"), exports);
|
|
9
7
|
tslib_1.__exportStar(require("./http/fetch-backend.js"), exports);
|
|
10
8
|
tslib_1.__exportStar(require("./http/http-backend.js"), exports);
|
|
11
9
|
tslib_1.__exportStar(require("./http/http-client.js"), exports);
|
|
12
10
|
tslib_1.__exportStar(require("./http/http-client-base.js"), exports);
|
|
13
|
-
tslib_1.__exportStar(require("./http/http-collection-node.js"), exports);
|
|
14
11
|
tslib_1.__exportStar(require("./http/http-request-observable.js"), exports);
|
|
15
12
|
tslib_1.__exportStar(require("./http/http-response.js"), exports);
|
|
16
|
-
tslib_1.__exportStar(require("./http/http-
|
|
17
|
-
tslib_1.__exportStar(require("./http/http-storage-node.js"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./http/http-utils.js"), exports);
|
|
18
14
|
tslib_1.__exportStar(require("./http/enums/http-observable-type.enum.js"), exports);
|
|
19
15
|
tslib_1.__exportStar(require("./http/interfaces/http-event.js"), exports);
|
|
20
16
|
tslib_1.__exportStar(require("./http/interfaces/http-handler.js"), exports);
|
package/esm/core/backend.js
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
3
|
import { isReadableStreamLike } from 'rxjs/internal/util/isReadableStreamLike';
|
|
4
4
|
import typeIs from '@browsery/type-is';
|
|
5
|
-
import { isBlob, isFormData
|
|
5
|
+
import { isBlob, isFormData } from '@opra/common';
|
|
6
6
|
import { HttpBackend } from './http-backend.js';
|
|
7
7
|
import { HttpResponse } from './http-response.js';
|
|
8
|
-
import { HttpEventType } from './interfaces/http-event.js';
|
|
8
|
+
import { HttpEventType, } from './interfaces/http-event.js';
|
|
9
9
|
/**
|
|
10
10
|
*
|
|
11
11
|
* @class FetchBackend
|
|
@@ -18,13 +18,15 @@ export class FetchBackend extends HttpBackend {
|
|
|
18
18
|
this.defaults = {
|
|
19
19
|
...options?.defaults,
|
|
20
20
|
headers: options?.defaults?.headers instanceof Headers
|
|
21
|
-
? options?.defaults?.headers
|
|
21
|
+
? options?.defaults?.headers
|
|
22
|
+
: new Headers(options?.defaults?.headers),
|
|
22
23
|
params: options?.defaults?.params instanceof URLSearchParams
|
|
23
|
-
? options?.defaults?.params
|
|
24
|
+
? options?.defaults?.params
|
|
25
|
+
: new URLSearchParams(options?.defaults?.params),
|
|
24
26
|
};
|
|
25
27
|
}
|
|
26
28
|
handle(init) {
|
|
27
|
-
return new Observable(
|
|
29
|
+
return new Observable(subscriber => {
|
|
28
30
|
(async () => {
|
|
29
31
|
let request = this.prepareRequest(init);
|
|
30
32
|
if (request.body && init.reportProgress) {
|
|
@@ -41,9 +43,9 @@ export class FetchBackend extends HttpBackend {
|
|
|
41
43
|
type: HttpEventType.UploadProgress,
|
|
42
44
|
request,
|
|
43
45
|
total,
|
|
44
|
-
loaded
|
|
46
|
+
loaded,
|
|
45
47
|
});
|
|
46
|
-
}
|
|
48
|
+
},
|
|
47
49
|
});
|
|
48
50
|
request = new Request(request.url, {
|
|
49
51
|
cache: request.cache,
|
|
@@ -61,7 +63,7 @@ export class FetchBackend extends HttpBackend {
|
|
|
61
63
|
window: init.window,
|
|
62
64
|
...{
|
|
63
65
|
// undici library requires
|
|
64
|
-
duplex: 'half'
|
|
66
|
+
duplex: 'half',
|
|
65
67
|
},
|
|
66
68
|
});
|
|
67
69
|
}
|
|
@@ -79,12 +81,12 @@ export class FetchBackend extends HttpBackend {
|
|
|
79
81
|
headers: fetchResponse.headers,
|
|
80
82
|
status: fetchResponse.status,
|
|
81
83
|
statusText: fetchResponse.statusText,
|
|
82
|
-
hasBody: !!fetchResponse.body
|
|
84
|
+
hasBody: !!fetchResponse.body,
|
|
83
85
|
});
|
|
84
86
|
subscriber.next({
|
|
85
87
|
request,
|
|
86
88
|
type: HttpEventType.ResponseHeader,
|
|
87
|
-
response: headersResponse
|
|
89
|
+
response: headersResponse,
|
|
88
90
|
});
|
|
89
91
|
// Parse body
|
|
90
92
|
let body;
|
|
@@ -108,7 +110,7 @@ export class FetchBackend extends HttpBackend {
|
|
|
108
110
|
type: HttpEventType.DownloadProgress,
|
|
109
111
|
request,
|
|
110
112
|
total,
|
|
111
|
-
loaded
|
|
113
|
+
loaded,
|
|
112
114
|
});
|
|
113
115
|
}
|
|
114
116
|
controller.close();
|
|
@@ -131,7 +133,7 @@ export class FetchBackend extends HttpBackend {
|
|
|
131
133
|
subscriber.next({
|
|
132
134
|
request,
|
|
133
135
|
type: HttpEventType.Response,
|
|
134
|
-
response
|
|
136
|
+
response,
|
|
135
137
|
});
|
|
136
138
|
subscriber.complete();
|
|
137
139
|
})().catch(error => subscriber.error(error));
|
|
@@ -144,13 +146,13 @@ export class FetchBackend extends HttpBackend {
|
|
|
144
146
|
const headers = init.headers || new Headers();
|
|
145
147
|
const requestInit = {
|
|
146
148
|
...init,
|
|
147
|
-
headers
|
|
149
|
+
headers,
|
|
148
150
|
};
|
|
149
151
|
this.defaults.headers.forEach((val, key) => {
|
|
150
152
|
if (!headers.has(key))
|
|
151
153
|
headers.set(key, val);
|
|
152
154
|
});
|
|
153
|
-
const url = new
|
|
155
|
+
const url = new URL(requestInit.url, this.serviceUrl);
|
|
154
156
|
if (this.defaults.params.size) {
|
|
155
157
|
this.defaults.params.forEach((val, key) => {
|
|
156
158
|
if (!url.searchParams.has(key))
|
|
@@ -200,7 +202,7 @@ export class FetchBackend extends HttpBackend {
|
|
|
200
202
|
}
|
|
201
203
|
async parseBody(fetchResponse) {
|
|
202
204
|
let body;
|
|
203
|
-
const contentType =
|
|
205
|
+
const contentType = fetchResponse.headers.get('Content-Type') || '';
|
|
204
206
|
if (typeIs.is(contentType, ['json', 'application/*+json'])) {
|
|
205
207
|
body = await fetchResponse.json();
|
|
206
208
|
if (typeof body === 'string')
|
package/esm/http/http-backend.js
CHANGED
|
@@ -6,6 +6,9 @@ import { Backend } from '../core/backend.js';
|
|
|
6
6
|
export class HttpBackend extends Backend {
|
|
7
7
|
constructor(serviceUrl, options) {
|
|
8
8
|
super(options);
|
|
9
|
-
|
|
9
|
+
const u = new URL(serviceUrl);
|
|
10
|
+
this.serviceUrl = u.toString().split('?')[0].split('#')[0];
|
|
11
|
+
if (!this.serviceUrl.endsWith('/'))
|
|
12
|
+
this.serviceUrl += '/';
|
|
10
13
|
}
|
|
11
14
|
}
|