@sx3/ultra 0.2.0 → 0.2.1
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/dist/client.mjs +1 -1
- package/package.json +1 -1
package/dist/client.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{compress as e}from"./compression.mjs";function t(e,n=[]){return new Proxy(()=>{},{get(r,i){if(typeof i==`string`)return t(e,[...n,i])},apply(t,r,i){if(!n.length)throw Error(`Cannot call client root; select a procedure first`);let a=n.join(`/`),o=i[0],s=i[1];return e(a,o,s)}})}function n(...e){let t=new Headers;for(let n of e)n&&new Headers(n).forEach((e,n)=>t.set(n,e));return t}function r(e){return t(async(t,r,i)=>{let a={...e,...i},o=a?.timeout||1e4,s=new AbortController,c=a?.method||`POST`,l=`${a.baseUrl}/${t}`,u=n(e?.headers,a?.headers,i?.headers),d=null,f=setTimeout(()=>s.abort(`Timeout: ${o}`),o);switch(!0){case c===`GET`:{if(d=null,!r)break;if(typeof r!=`object`)throw Error(`GET requests params to be an object for query string generation`);let e=Object.entries(r).filter(([,e])=>e!=null).map(([e,t])=>[e,String(t)]),t=new URLSearchParams(e).toString();t&&(l+=`?${t}`);break}case r instanceof FormData:d=r;break;case typeof r==`string`:u.set(`Content-Type`,`text/plain`),d=r;break;default:u.set(`Content-Type`,`application/json`),d=JSON.stringify(r)}try{let e=await fetch(l,{method:c,...d&&{body:d},...a,signal:s.signal,headers:u});if(!e.ok)throw Error(`${e.statusText} ${e.status}`);let t=e.headers.get(`Content-Type`)||``;switch(!0){case e.status===204:return null;case t.startsWith(`application/json`):return await e.json();case t.startsWith(`text/`):return await e.text();default:return await e.blob()}}catch(e){throw e.name===`AbortError`?Error(`Request aborted: ${e.message}`):e}finally{clearTimeout(f)}})}function i(n){let
|
|
1
|
+
import{compress as e}from"./compression.mjs";function t(e,n=[]){return new Proxy(()=>{},{get(r,i){if(typeof i==`string`)return t(e,[...n,i])},apply(t,r,i){if(!n.length)throw Error(`Cannot call client root; select a procedure first`);let a=n.join(`/`),o=i[0],s=i[1];return e(a,o,s)}})}function n(...e){let t=new Headers;for(let n of e)n&&new Headers(n).forEach((e,n)=>t.set(n,e));return t}function r(e){return t(async(t,r,i)=>{let a={...e,...i},o=a?.timeout||1e4,s=new AbortController,c=a?.method||`POST`,l=`${a.baseUrl}/${t}`,u=n(e?.headers,a?.headers,i?.headers),d=null,f=setTimeout(()=>s.abort(`Timeout: ${o}`),o);switch(!0){case c===`GET`:{if(d=null,!r)break;if(typeof r!=`object`)throw Error(`GET requests params to be an object for query string generation`);let e=Object.entries(r).filter(([,e])=>e!=null).map(([e,t])=>[e,String(t)]),t=new URLSearchParams(e).toString();t&&(l+=`?${t}`);break}case r instanceof FormData:d=r;break;case typeof r==`string`:u.set(`Content-Type`,`text/plain`),d=r;break;default:u.set(`Content-Type`,`application/json`),d=JSON.stringify(r)}try{let e=await fetch(l,{method:c,...d&&{body:d},...a,signal:s.signal,headers:u});if(!e.ok)throw Error(`${e.statusText} ${e.status}`);let t=e.headers.get(`Content-Type`)||``;switch(!0){case e.status===204:return null;case t.startsWith(`application/json`):return await e.json();case t.startsWith(`text/`):return await e.text();default:return await e.blob()}}catch(e){throw e.name===`AbortError`?Error(`Request aborted: ${e.message}`):e}finally{clearTimeout(f)}})}function i(n){let{retryCount:r=3,retryDelay:i=1e3,batchSize:a=99,batchDelay:o=0,onBeforeSend:s,compression:c}=n,l=()=>Math.random().toString(36),u=[],d=null,f=(t=0)=>{if(d!==null&&(clearTimeout(d),d=null),!u.length)return;let a=n.socket();if(!a||a.readyState!==WebSocket.OPEN)return t>=r?u.forEach(e=>{clearTimeout(e.timeout),e.reject(`WebSocket is not open`)}):setTimeout(()=>f(t+1),i);let o=e=>{try{let t=JSON.parse(e.data),n=u.find(e=>e.id===t.id);if(!n)return;clearTimeout(n.timeout),`error`in t?n.reject(t.error):n.resolve(t.result),u.length||a.removeEventListener(`message`,o)}catch(e){console.error(`Client failed parse server message`,e)}};a.addEventListener(`message`,o),a.addEventListener(`close`,()=>{a.removeEventListener(`message`,o),setTimeout(f,i)});let l=[];for(let e of u)e.pending||(e.pending=!0,l.push({id:e.id,method:e.method,params:e.params}));let p=JSON.stringify(l);c&&p.length>=c?e(new TextEncoder().encode(p)).then(e=>a.send(s?.(e)??e)):a.send(s?.(p)??p)},p=(e,t)=>(...n)=>{let r=u.findIndex(t=>t.id===e);return r!==-1&&(clearTimeout(u[r].timeout),u.splice(r,1)),t(...n)};return t((e,t,r)=>{let i={timeout:1e4,...n,...r},{promise:s,resolve:c,reject:m}=Promise.withResolvers(),h=l();return u.push({id:h,method:e,params:t,options:i,resolve:p(h,c),reject:p(h,m),timeout:setTimeout(p(h,m),i.timeout),pending:!1}),u.length>=a?f():d===null&&(d=setTimeout(f,o)),s})}function a(e){return t((t,n,r)=>{let i=e.pick(t,n,r),a=t.split(`/`).filter(Boolean),o=i;for(let e of a)o[e]&&(o=o[e]);return o(n,r)})}export{r as createHTTPClient,a as createSuperClient,i as createWebSocketClient};
|