@elysiajs/eden 1.4.4 → 1.4.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/dist/treaty2.js CHANGED
@@ -1,6 +1,4 @@
1
- "use strict";var j=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var V=Object.prototype.hasOwnProperty;var $=(e,t)=>{for(var n in t)j(e,n,{get:t[n],enumerable:!0})},B=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of U(t))!V.call(e,o)&&o!==n&&j(e,o,{get:()=>t[o],enumerable:!(s=H(t,o))||s.enumerable});return e};var Z=e=>B(j({},"__esModule",{value:!0}),e);var ie={};$(ie,{streamResponse:()=>J,treaty:()=>re});module.exports=Z(ie);var k=class extends Error{constructor(n,s){super(s+"");this.status=n;this.value=s}};var G=/(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/,z=/(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{2}\s\d{4}\s\d{2}:\d{2}:\d{2}\sGMT(?:\+|-)\d{4}\s\([^)]+\)/,Q=/^(?:(?:(?:(?:0?[1-9]|[12][0-9]|3[01])[/\s-](?:0?[1-9]|1[0-2])[/\s-](?:19|20)\d{2})|(?:(?:19|20)\d{2}[/\s-](?:0?[1-9]|1[0-2])[/\s-](?:0?[1-9]|[12][0-9]|3[01]))))(?:\s(?:1[012]|0?[1-9]):[0-5][0-9](?::[0-5][0-9])?(?:\s[AP]M)?)?$/,X=e=>e.trim().length!==0&&!Number.isNaN(Number(e)),F=e=>{if(typeof e!="string")return null;let t=e.replace(/"/g,"");if(G.test(t)||z.test(t)||Q.test(t)){let n=new Date(t);if(!Number.isNaN(n.getTime()))return n}return null},Y=e=>{let t=e.charCodeAt(0),n=e.charCodeAt(e.length-1);return t===123&&n===125||t===91&&n===93},ee=e=>JSON.parse(e,(t,n)=>{let s=F(n);return s||n}),A=e=>{if(!e)return e;if(X(e))return+e;if(e==="true")return!0;if(e==="false")return!1;let t=F(e);if(t)return t;if(Y(e))try{return ee(e)}catch{}return e},D=e=>{let t=e.data.toString();return t==="null"?null:A(t)};var M=class{constructor(t){this.url=t;this.ws=new WebSocket(t)}ws;send(t){return Array.isArray(t)?(t.forEach(n=>this.send(n)),this):(this.ws.send(typeof t=="object"?JSON.stringify(t):t.toString()),this)}on(t,n,s){return this.addEventListener(t,n,s)}off(t,n,s){return this.ws.removeEventListener(t,n,s),this}subscribe(t,n){return this.addEventListener("message",t,n)}addEventListener(t,n,s){return this.ws.addEventListener(t,o=>{if(t==="message"){let c=D(o);n({...o,data:c})}else n(o)},s),this}removeEventListener(t,n,s){return this.off(t,n,s),this}close(){return this.ws.close(),this}};var te=["get","post","put","delete","patch","options","head","connect","subscribe"],I=["localhost","127.0.0.1","0.0.0.0"],C=typeof FileList>"u",q=e=>C?e instanceof Blob:e instanceof FileList||e instanceof File,ne=e=>{if(!e)return!1;for(let t in e)if(q(e[t])||Array.isArray(e[t])&&e[t].find(q))return!0;return!1},N=e=>C?e:new Promise(t=>{let n=new FileReader;n.onload=()=>{let s=new File([n.result],e.name,{lastModified:e.lastModified,type:e.type});t(s)},n.readAsArrayBuffer(e)}),S=(e,t,n={},s={})=>{if(Array.isArray(e)){for(let o of e)if(!Array.isArray(o))s=S(o,t,n,s);else{let c=o[0];if(typeof c=="string")s[c.toLowerCase()]=o[1];else for(let[i,g]of c)s[i.toLowerCase()]=g}return s}if(!e)return s;switch(typeof e){case"function":if(e instanceof Headers)return S(e,t,n,s);let o=e(t,n);return o?S(o,t,n,s):s;case"object":if(e instanceof Headers)return e.forEach((c,i)=>{s[i.toLowerCase()]=c}),s;for(let[c,i]of Object.entries(e))s[c.toLowerCase()]=i;return s;default:return s}};async function*J(e){let t=e.body;if(!t)return;let n=t.getReader(),s=new TextDecoder;try{for(;;){let{done:o,value:c}=await n.read();if(o)break;let i=typeof c=="string"?c:s.decode(c);i.includes(`
1
+ "use strict";var D=Object.defineProperty;var Z=Object.getOwnPropertyDescriptor;var z=Object.getOwnPropertyNames;var Q=Object.prototype.hasOwnProperty;var X=(e,t)=>{for(var n in t)D(e,n,{get:t[n],enumerable:!0})},Y=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of z(t))!Q.call(e,i)&&i!==n&&D(e,i,{get:()=>t[i],enumerable:!(r=Z(t,i))||r.enumerable});return e};var ee=e=>Y(D({},"__esModule",{value:!0}),e);var ue={};X(ue,{streamResponse:()=>_,treaty:()=>fe});module.exports=ee(ue);var k=class extends Error{constructor(n,r){super(r+"");this.status=n;this.value=r}};var te=/(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/,ne=/(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{2}\s\d{4}\s\d{2}:\d{2}:\d{2}\sGMT(?:\+|-)\d{4}\s\([^)]+\)/,re=/^(?:(?:(?:(?:0?[1-9]|[12][0-9]|3[01])[/\s-](?:0?[1-9]|1[0-2])[/\s-](?:19|20)\d{2})|(?:(?:19|20)\d{2}[/\s-](?:0?[1-9]|1[0-2])[/\s-](?:0?[1-9]|[12][0-9]|3[01]))))(?:\s(?:1[012]|0?[1-9]):[0-5][0-9](?::[0-5][0-9])?(?:\s[AP]M)?)?$/,se=e=>e.trim().length!==0&&!Number.isNaN(Number(e)),T=e=>{if(typeof e!="string")return null;let t=e.replace(/"/g,"");if(te.test(t)||ne.test(t)||re.test(t)){let n=new Date(t);if(!Number.isNaN(n.getTime()))return n}return null},ie=e=>{let t=e.charCodeAt(0),n=e.charCodeAt(e.length-1);return t===123&&n===125||t===91&&n===93},ae=e=>JSON.parse(e,(t,n)=>{let r=T(n);return r||n}),W=e=>{if(!e)return e;if(se(e))return+e;if(e==="true")return!0;if(e==="false")return!1;let t=T(e);if(t)return t;if(ie(e))try{return ae(e)}catch{}return e},q=e=>{let t=e.data.toString();return t==="null"?null:W(t)};var M=class{constructor(t){this.url=t;this.ws=new WebSocket(t)}ws;send(t){return Array.isArray(t)?(t.forEach(n=>this.send(n)),this):(this.ws.send(typeof t=="object"?JSON.stringify(t):t.toString()),this)}on(t,n,r){return this.addEventListener(t,n,r)}off(t,n,r){return this.ws.removeEventListener(t,n,r),this}subscribe(t,n){return this.addEventListener("message",t,n)}addEventListener(t,n,r){return this.ws.addEventListener(t,i=>{if(t==="message"){let u=q(i);n({...i,data:u})}else n(i)},r),this}removeEventListener(t,n,r){return this.off(t,n,r),this}close(){return this.ws.close(),this}};var oe=["get","post","put","delete","patch","options","head","connect","subscribe"],V=["localhost","127.0.0.1","0.0.0.0"],J=typeof FileList>"u",C=e=>J?e instanceof Blob:e instanceof FileList||e instanceof File,ce=e=>{if(!e)return!1;for(let t in e)if(C(e[t])||Array.isArray(e[t])&&e[t].find(C))return!0;return!1},K=e=>J?e:new Promise(t=>{let n=new FileReader;n.onload=()=>{let r=new File([n.result],e.name,{lastModified:e.lastModified,type:e.type});t(r)},n.readAsArrayBuffer(e)}),E=async(e,t,n={},r={})=>{if(Array.isArray(e)){for(let i of e)if(!Array.isArray(i))r=await E(i,t,n,r);else{let u=i[0];if(typeof u=="string")r[u.toLowerCase()]=i[1];else for(let[a,y]of u)r[a.toLowerCase()]=y}return r}if(!e)return r;switch(typeof e){case"function":if(e instanceof Headers)return E(e,t,n,r);let i=await e(t,n);return i?E(i,t,n,r):r;case"object":if(e instanceof Headers)return e.forEach((u,a)=>{r[a.toLowerCase()]=u}),r;for(let[u,a]of Object.entries(e))r[u.toLowerCase()]=a;return r;default:return r}};function B(e){let t=e.split(`
2
+ `),n={};for(let r of t){if(!r||r.startsWith(":"))continue;let i=r.indexOf(":");if(i>0){let u=r.slice(0,i).trim(),a=r.slice(i+1).replace(/^ /,"");n[u]=a&&W(a)}}return Object.keys(n).length>0?n:null}function*P(e){let t;for(;(t=e.value.indexOf(`
2
3
 
3
- `)?yield*se(i):yield A(i)}}finally{n.releaseLock()}}function*se(e){let t=e.split(`
4
-
5
- `);for(let n of t){if(n.indexOf(":")<=0){n&&(yield A(n));continue}let s=n.split(`
6
- `),o={};for(let c of s){let i=c.indexOf(":");if(i>0){let g=c.slice(0,i).trim(),L=c.slice(i+1).trim();o[g]=A(L)}}yield o}}var O=(e,t,n=[],s)=>new Proxy(()=>{},{get(o,c){return O(e,t,c==="index"?n:[...n,c],s)},apply(o,c,[i,g]){if(!i||g||typeof i=="object"&&Object.keys(i).length!==1||te.includes(n.at(-1))){let L=[...n],E=L.pop(),m="/"+L.join("/"),{fetcher:P=fetch,headers:R,onRequest:h,onResponse:v,fetch:_}=t,w=E==="get"||E==="head"||E==="subscribe";R=S(R,m,g);let K=w?i?.query:g?.query,T="";if(K){let r=(b,l)=>{T+=(T?"&":"?")+`${encodeURIComponent(b)}=${encodeURIComponent(l)}`};for(let[b,l]of Object.entries(K)){if(Array.isArray(l)){for(let d of l)r(b,d);continue}if(l!=null){if(typeof l=="object"){r(b,JSON.stringify(l));continue}r(b,`${l}`)}}}if(E==="subscribe"){let r=e.replace(/^([^]+):\/\//,e.startsWith("https://")?"wss://":e.startsWith("http://")||I.find(b=>e.includes(b))?"ws://":"wss://")+m+T;return new M(r)}return(async()=>{let r={method:E?.toUpperCase(),body:i,..._,headers:R};r.headers={...R,...S(w?i?.headers:g?.headers,m,r)};let b=w&&typeof i=="object"?i.fetch:g?.fetch;if(r={...r,...b},w&&delete r.body,h){Array.isArray(h)||(h=[h]);for(let u of h){let a=await u(m,r);typeof a=="object"&&(r={...r,...a,headers:{...r.headers,...S(a.headers,m,r)}})}}if(w&&delete r.body,ne(i)){let u=new FormData;for(let[a,f]of Object.entries(r.body)){if(Array.isArray(f)){for(let p=0;p<f.length;p++){let W=f[p];u.append(a,W instanceof File?await N(W):W)}continue}if(C){if(Array.isArray(f))for(let p of f)u.append(a,p);else u.append(a,f);continue}if(f instanceof File){u.append(a,await N(f));continue}if(f instanceof FileList){for(let p=0;p<f.length;p++)u.append(a,await N(f[p]));continue}u.append(a,f)}r.body=u}else typeof i=="object"?(r.headers["content-type"]="application/json",r.body=JSON.stringify(i)):i!=null&&(r.headers["content-type"]="text/plain");if(w&&delete r.body,h){Array.isArray(h)||(h=[h]);for(let u of h){let a=await u(m,r);typeof a=="object"&&(r={...r,...a,headers:{...r.headers,...S(a.headers,m,r)}})}}g?.headers?.["content-type"]&&(r.headers["content-type"]=g?.headers["content-type"]);let l=e+m+T,d=await(s?.handle(new Request(l,r))??P(l,r)),y=null,x=null;if(v){Array.isArray(v)||(v=[v]);for(let u of v)try{let a=await u(d.clone());if(a!=null){y=a;break}}catch(a){a instanceof k?x=a:x=new k(422,a);break}}if(y!==null)return{data:y,error:x,response:d,status:d.status,headers:d.headers};switch(d.headers.get("Content-Type")?.split(";")[0]){case"text/event-stream":y=J(d);break;case"application/json":y=JSON.parse(await d.text(),(a,f)=>{if(typeof f!="string")return f;let p=F(f);return p||f});break;case"application/octet-stream":y=await d.arrayBuffer();break;case"multipart/form-data":let u=await d.formData();y={},u.forEach((a,f)=>{y[f]=a});break;default:y=await d.text().then(A)}return(d.status>=300||d.status<200)&&(x=new k(d.status,y),y=null),{data:y,error:x,response:d,status:d.status,headers:d.headers}})()}return typeof i=="object"?O(e,t,[...n,Object.values(i)[0]],s):O(e,t,n)}}),re=(e,t={})=>typeof e=="string"?(t.keepDomain||(e.includes("://")||(e=(I.find(n=>e.includes(n))?"http://":"https://")+e),e.endsWith("/")&&(e=e.slice(0,-1))),O(e,t)):(typeof window<"u"&&console.warn("Elysia instance server found on client side, this is not recommended for security reason. Use generic type instead."),O("http://e.ly",t,[],e));0&&(module.exports={streamResponse,treaty});
4
+ `))!==-1;){let n=e.value.slice(0,t);if(e.value=e.value.slice(t+2),n.trim()){let r=B(n);r&&(yield r)}}}async function*_(e){let t=e.body;if(!t)return;let n=t.getReader(),r=new TextDecoder("utf-8"),i={value:""};try{for(;;){let{done:a,value:y}=await n.read();if(a)break;let R=typeof y=="string"?y:r.decode(y,{stream:!0});i.value+=R,yield*P(i)}let u=r.decode();if(u&&(i.value+=u),yield*P(i),i.value.trim()){let a=B(i.value);a&&(yield a)}}finally{n.releaseLock()}}var F=(e,t,n=[],r)=>new Proxy(()=>{},{get(i,u){return F(e,t,u==="index"?n:[...n,u],r)},apply(i,u,[a,y]){if(!a||y||typeof a=="object"&&Object.keys(a).length!==1||oe.includes(n.at(-1))){let R=[...n],x=R.pop(),m="/"+R.join("/"),{fetcher:H=fetch,headers:L,onRequest:w,onResponse:O,fetch:U}=t,v=x==="get"||x==="head"||x==="subscribe",I=v?a?.query:y?.query,N="";if(I){let s=(b,p)=>{N+=(N?"&":"?")+`${encodeURIComponent(b)}=${encodeURIComponent(p)}`};for(let[b,p]of Object.entries(I)){if(Array.isArray(p)){for(let f of p)s(b,f);continue}if(p!=null){if(typeof p=="object"){s(b,JSON.stringify(p));continue}s(b,`${p}`)}}}if(x==="subscribe"){let s=e.replace(/^([^]+):\/\//,e.startsWith("https://")?"wss://":e.startsWith("http://")||V.find(b=>e.includes(b))?"ws://":"wss://")+m+N;return new M(s)}return(async()=>{L=await E(L,m,y);let s={method:x?.toUpperCase(),body:a,...U,headers:L};s.headers={...L,...await E(v?a?.headers:y?.headers,m,s)};let b=v&&typeof a=="object"?a.fetch:y?.fetch;if(s={...s,...b},v&&delete s.body,w){Array.isArray(w)||(w=[w]);for(let d of w){let c=await d(m,s);typeof c=="object"&&(s={...s,...c,headers:{...s.headers,...await E(c.headers,m,s)}})}}if(v&&delete s.body,ce(a)){let d=new FormData,c=o=>{if(typeof o=="string"||C(o))return!1;if(typeof o=="object"){if(o!==null)return!0;if(o instanceof Date)return!1}return!1},h=async o=>o instanceof File?await K(o):c(o)?JSON.stringify(o):o;for(let[o,l]of Object.entries(s.body)){if(Array.isArray(l)){if(l.some(S=>typeof S=="object"&&S!==null&&!C(S)))d.append(o,JSON.stringify(l));else for(let S=0;S<l.length;S++){let $=l[S],G=await h($);d.append(o,G)}continue}if(J){if(Array.isArray(l))for(let A of l)d.append(o,await h(A));else d.append(o,await h(l));continue}if(l instanceof File){d.append(o,await K(l));continue}if(l instanceof FileList){for(let A=0;A<l.length;A++)d.append(o,await K(l[A]));continue}d.append(o,await h(l))}s.body=d}else typeof a=="object"?(s.headers["content-type"]="application/json",s.body=JSON.stringify(a)):a!=null&&(s.headers["content-type"]="text/plain");if(v&&delete s.body,w){Array.isArray(w)||(w=[w]);for(let d of w){let c=await d(m,s);typeof c=="object"&&(s={...s,...c,headers:{...s.headers,...await E(c.headers,m,s)}})}}y?.headers?.["content-type"]&&(s.headers["content-type"]=y?.headers["content-type"]);let p=e+m+N,f;try{f=await(r?.handle(new Request(p,s))??H(p,s))}catch(d){return{data:null,error:new k(503,d),response:void 0,status:503,headers:void 0}}let g=null,j=null;if(O){Array.isArray(O)||(O=[O]);for(let d of O)try{let c=await d(f.clone());if(c!=null){g=c;break}}catch(c){c instanceof k?j=c:j=new k(422,c);break}}if(g!==null)return{data:g,error:j,response:f,status:f.status,headers:f.headers};switch(f.headers.get("Content-Type")?.split(";")[0]){case"text/event-stream":g=_(f);break;case"application/json":g=JSON.parse(await f.text(),(c,h)=>{if(typeof h!="string")return h;let o=T(h);return o||h});break;case"application/octet-stream":g=await f.arrayBuffer();break;case"multipart/form-data":let d=await f.formData();g={},d.forEach((c,h)=>{g[h]=c});break;default:g=await f.text().then(W)}return(f.status>=300||f.status<200)&&(j=new k(f.status,g),g=null),{data:g,error:j,response:f,status:f.status,headers:f.headers}})()}return typeof a=="object"?F(e,t,[...n,Object.values(a)[0]],r):F(e,t,n)}}),fe=(e,t={})=>typeof e=="string"?(t.keepDomain||(e.includes("://")||(e=(V.find(n=>e.includes(n))?"http://":"https://")+e),e.endsWith("/")&&(e=e.slice(0,-1))),F(e,t)):(typeof window<"u"&&console.warn("Elysia instance server found on client side, this is not recommended for security reason. Use generic type instead."),F("http://e.ly",t,[],e));0&&(module.exports={streamResponse,treaty});
package/dist/treaty2.mjs CHANGED
@@ -1 +1 @@
1
- import{a,b}from"./chunk-LJDYVDXQ.mjs";import"./chunk-QSLHAOSM.mjs";export{a as streamResponse,b as treaty};
1
+ import{a,b}from"./chunk-7WR4DS5F.mjs";import"./chunk-QSLHAOSM.mjs";export{a as streamResponse,b as treaty};
@@ -18,6 +18,22 @@ type UnionToIntersect<U> = (U extends any ? (arg: U) => any : never) extends (ar
18
18
  type IsAny<T> = 0 extends 1 & T ? true : false;
19
19
  type IsNever<T> = [T] extends [never] ? true : false;
20
20
  type IsUnknown<T> = IsAny<T> extends true ? false : unknown extends T ? true : false;
21
+ type IsExactlyUnknown<T> = [T] extends [unknown] ? [unknown] extends [T] ? true : false : false;
22
+ type IsUndefined<T> = [T] extends [undefined] ? true : false;
23
+ type IsMatchingEmptyObject<T> = [T] extends [{}] ? [{}] extends [T] ? true : false : false;
24
+ type MaybeEmptyObject<TObj, TKey extends PropertyKey, TFallback = Record<string, unknown>> = IsUndefined<TObj> extends true ? {
25
+ [K in TKey]?: TFallback;
26
+ } : IsExactlyUnknown<TObj> extends true ? {
27
+ [K in TKey]?: TFallback;
28
+ } : IsMatchingEmptyObject<TObj> extends true ? {
29
+ [K in TKey]?: TObj;
30
+ } : undefined extends TObj ? {
31
+ [K in TKey]?: TObj;
32
+ } : null extends TObj ? {
33
+ [K in TKey]?: TObj;
34
+ } : {
35
+ [K in TKey]: TObj;
36
+ };
21
37
  type AnyTypedRoute = {
22
38
  body?: unknown;
23
39
  headers?: unknown;
@@ -41,4 +57,4 @@ type TreatyToPath<T, Path extends string = ''> = UnionToIntersect<T extends Reco
41
57
  }[keyof T] : {}>;
42
58
  type Not<T> = T extends true ? false : true;
43
59
 
44
- export { EdenFetchError as E, type IsUnknown as I, type MapError as M, type Not as N, type Prettify as P, type TreatyToPath as T, type IsNever as a };
60
+ export { EdenFetchError as E, type IsUnknown as I, type MapError as M, type Not as N, type Prettify as P, type TreatyToPath as T, type IsNever as a, type MaybeEmptyObject as b };
@@ -18,6 +18,22 @@ type UnionToIntersect<U> = (U extends any ? (arg: U) => any : never) extends (ar
18
18
  type IsAny<T> = 0 extends 1 & T ? true : false;
19
19
  type IsNever<T> = [T] extends [never] ? true : false;
20
20
  type IsUnknown<T> = IsAny<T> extends true ? false : unknown extends T ? true : false;
21
+ type IsExactlyUnknown<T> = [T] extends [unknown] ? [unknown] extends [T] ? true : false : false;
22
+ type IsUndefined<T> = [T] extends [undefined] ? true : false;
23
+ type IsMatchingEmptyObject<T> = [T] extends [{}] ? [{}] extends [T] ? true : false : false;
24
+ type MaybeEmptyObject<TObj, TKey extends PropertyKey, TFallback = Record<string, unknown>> = IsUndefined<TObj> extends true ? {
25
+ [K in TKey]?: TFallback;
26
+ } : IsExactlyUnknown<TObj> extends true ? {
27
+ [K in TKey]?: TFallback;
28
+ } : IsMatchingEmptyObject<TObj> extends true ? {
29
+ [K in TKey]?: TObj;
30
+ } : undefined extends TObj ? {
31
+ [K in TKey]?: TObj;
32
+ } : null extends TObj ? {
33
+ [K in TKey]?: TObj;
34
+ } : {
35
+ [K in TKey]: TObj;
36
+ };
21
37
  type AnyTypedRoute = {
22
38
  body?: unknown;
23
39
  headers?: unknown;
@@ -41,4 +57,4 @@ type TreatyToPath<T, Path extends string = ''> = UnionToIntersect<T extends Reco
41
57
  }[keyof T] : {}>;
42
58
  type Not<T> = T extends true ? false : true;
43
59
 
44
- export { EdenFetchError as E, type IsUnknown as I, type MapError as M, type Not as N, type Prettify as P, type TreatyToPath as T, type IsNever as a };
60
+ export { EdenFetchError as E, type IsUnknown as I, type MapError as M, type Not as N, type Prettify as P, type TreatyToPath as T, type IsNever as a, type MaybeEmptyObject as b };
package/dist/types.d.ts CHANGED
@@ -14,6 +14,22 @@ export type UnionToTuple<T> = UnionToIntersect<T extends any ? (t: T) => T : nev
14
14
  export type IsAny<T> = 0 extends 1 & T ? true : false;
15
15
  export type IsNever<T> = [T] extends [never] ? true : false;
16
16
  export type IsUnknown<T> = IsAny<T> extends true ? false : unknown extends T ? true : false;
17
+ type IsExactlyUnknown<T> = [T] extends [unknown] ? [unknown] extends [T] ? true : false : false;
18
+ type IsUndefined<T> = [T] extends [undefined] ? true : false;
19
+ type IsMatchingEmptyObject<T> = [T] extends [{}] ? [{}] extends [T] ? true : false : false;
20
+ export type MaybeEmptyObject<TObj, TKey extends PropertyKey, TFallback = Record<string, unknown>> = IsUndefined<TObj> extends true ? {
21
+ [K in TKey]?: TFallback;
22
+ } : IsExactlyUnknown<TObj> extends true ? {
23
+ [K in TKey]?: TFallback;
24
+ } : IsMatchingEmptyObject<TObj> extends true ? {
25
+ [K in TKey]?: TObj;
26
+ } : undefined extends TObj ? {
27
+ [K in TKey]?: TObj;
28
+ } : null extends TObj ? {
29
+ [K in TKey]?: TObj;
30
+ } : {
31
+ [K in TKey]: TObj;
32
+ };
17
33
  export type AnyTypedRoute = {
18
34
  body?: unknown;
19
35
  headers?: unknown;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elysiajs/eden",
3
- "version": "1.4.4",
3
+ "version": "1.4.6",
4
4
  "description": "Fully type-safe Elysia client",
5
5
  "author": {
6
6
  "name": "saltyAom",
@@ -53,13 +53,13 @@
53
53
  "release": "npm run build && npm run test && npm publish --access public"
54
54
  },
55
55
  "peerDependencies": {
56
- "elysia": ">= 1.4.0-exp.0"
56
+ "elysia": ">=1.4.19"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@elysiajs/cors": "1.3.3",
60
60
  "@types/bun": "^1.2.20",
61
61
  "@types/node": "^24.3.0",
62
- "elysia": "^1.4.10",
62
+ "elysia": "^1.4.19",
63
63
  "esbuild": "^0.25.9",
64
64
  "eslint": "^9.34.0",
65
65
  "expect-type": "^1.2.2",
@@ -1 +0,0 @@
1
- import{a as u,c as y}from"./chunk-QSLHAOSM.mjs";var j=async t=>{switch(t.headers.get("Content-Type")?.split(";")[0]){case"application/json":return t.json();case"application/octet-stream":return t.arrayBuffer();case"multipart/form-data":{let e=await t.formData(),r={};return e.forEach((c,a)=>{r[a]=c}),r}}return t.text().then(y)},F=async(t,n)=>{let e=await j(t);return t.status>300?{data:null,status:t.status,headers:t.headers,retry:n,error:new u(t.status,e)}:{data:e,error:null,status:t.status,headers:t.headers,retry:n}},S=(t,n)=>(e,{query:r,params:c,body:a,...i}={})=>{c&&Object.entries(c).forEach(([s,o])=>{e=e.replace(`:${s}`,o)});let d=n?.fetcher||globalThis.fetch,l=r?Object.fromEntries(Object.entries(r).filter(([s,o])=>o!=null)):null,m=l?`?${new URLSearchParams(l).toString()}`:"",E=`${t}${e}${m}`,h=new Headers(i.headers||{}),f=h.get("content-type");if(!(a instanceof FormData)&&!(a instanceof URLSearchParams)&&(!f||f==="application/json"))try{a=JSON.stringify(a),f||h.set("content-type","application/json")}catch{}let g={...i,method:i.method?.toUpperCase()||"GET",headers:h,body:a},p=()=>d(E,g).then(s=>F(s,p));return p()};export{S as a};
@@ -1,6 +0,0 @@
1
- import{a as W,b as M,c as A,d as q}from"./chunk-QSLHAOSM.mjs";var F=class{constructor(t){this.url=t;this.ws=new WebSocket(t)}ws;send(t){return Array.isArray(t)?(t.forEach(n=>this.send(n)),this):(this.ws.send(typeof t=="object"?JSON.stringify(t):t.toString()),this)}on(t,n,s){return this.addEventListener(t,n,s)}off(t,n,s){return this.ws.removeEventListener(t,n,s),this}subscribe(t,n){return this.addEventListener("message",t,n)}addEventListener(t,n,s){return this.ws.addEventListener(t,f=>{if(t==="message"){let o=q(f);n({...f,data:o})}else n(f)},s),this}removeEventListener(t,n,s){return this.off(t,n,s),this}close(){return this.ws.close(),this}};var J=["get","post","put","delete","patch","options","head","connect","subscribe"],D=["localhost","127.0.0.1","0.0.0.0"],K=typeof FileList>"u",I=e=>K?e instanceof Blob:e instanceof FileList||e instanceof File,P=e=>{if(!e)return!1;for(let t in e)if(I(e[t])||Array.isArray(e[t])&&e[t].find(I))return!0;return!1},C=e=>K?e:new Promise(t=>{let n=new FileReader;n.onload=()=>{let s=new File([n.result],e.name,{lastModified:e.lastModified,type:e.type});t(s)},n.readAsArrayBuffer(e)}),b=(e,t,n={},s={})=>{if(Array.isArray(e)){for(let f of e)if(!Array.isArray(f))s=b(f,t,n,s);else{let o=f[0];if(typeof o=="string")s[o.toLowerCase()]=f[1];else for(let[i,h]of o)s[i.toLowerCase()]=h}return s}if(!e)return s;switch(typeof e){case"function":if(e instanceof Headers)return b(e,t,n,s);let f=e(t,n);return f?b(f,t,n,s):s;case"object":if(e instanceof Headers)return e.forEach((o,i)=>{s[i.toLowerCase()]=o}),s;for(let[o,i]of Object.entries(e))s[o.toLowerCase()]=i;return s;default:return s}};async function*U(e){let t=e.body;if(!t)return;let n=t.getReader(),s=new TextDecoder;try{for(;;){let{done:f,value:o}=await n.read();if(f)break;let i=typeof o=="string"?o:s.decode(o);i.includes(`
2
-
3
- `)?yield*_(i):yield A(i)}}finally{n.releaseLock()}}function*_(e){let t=e.split(`
4
-
5
- `);for(let n of t){if(n.indexOf(":")<=0){n&&(yield A(n));continue}let s=n.split(`
6
- `),f={};for(let o of s){let i=o.indexOf(":");if(i>0){let h=o.slice(0,i).trim(),L=o.slice(i+1).trim();f[h]=A(L)}}yield f}}var x=(e,t,n=[],s)=>new Proxy(()=>{},{get(f,o){return x(e,t,o==="index"?n:[...n,o],s)},apply(f,o,[i,h]){if(!i||h||typeof i=="object"&&Object.keys(i).length!==1||J.includes(n.at(-1))){let L=[...n],k=L.pop(),v="/"+L.join("/"),{fetcher:N=fetch,headers:R,onRequest:g,onResponse:E,fetch:H}=t,m=k==="get"||k==="head"||k==="subscribe";R=b(R,v,h);let T=m?i?.query:h?.query,O="";if(T){let r=(w,u)=>{O+=(O?"&":"?")+`${encodeURIComponent(w)}=${encodeURIComponent(u)}`};for(let[w,u]of Object.entries(T)){if(Array.isArray(u)){for(let y of u)r(w,y);continue}if(u!=null){if(typeof u=="object"){r(w,JSON.stringify(u));continue}r(w,`${u}`)}}}if(k==="subscribe"){let r=e.replace(/^([^]+):\/\//,e.startsWith("https://")?"wss://":e.startsWith("http://")||D.find(w=>e.includes(w))?"ws://":"wss://")+v+O;return new F(r)}return(async()=>{let r={method:k?.toUpperCase(),body:i,...H,headers:R};r.headers={...R,...b(m?i?.headers:h?.headers,v,r)};let w=m&&typeof i=="object"?i.fetch:h?.fetch;if(r={...r,...w},m&&delete r.body,g){Array.isArray(g)||(g=[g]);for(let l of g){let a=await l(v,r);typeof a=="object"&&(r={...r,...a,headers:{...r.headers,...b(a.headers,v,r)}})}}if(m&&delete r.body,P(i)){let l=new FormData;for(let[a,c]of Object.entries(r.body)){if(Array.isArray(c)){for(let d=0;d<c.length;d++){let j=c[d];l.append(a,j instanceof File?await C(j):j)}continue}if(K){if(Array.isArray(c))for(let d of c)l.append(a,d);else l.append(a,c);continue}if(c instanceof File){l.append(a,await C(c));continue}if(c instanceof FileList){for(let d=0;d<c.length;d++)l.append(a,await C(c[d]));continue}l.append(a,c)}r.body=l}else typeof i=="object"?(r.headers["content-type"]="application/json",r.body=JSON.stringify(i)):i!=null&&(r.headers["content-type"]="text/plain");if(m&&delete r.body,g){Array.isArray(g)||(g=[g]);for(let l of g){let a=await l(v,r);typeof a=="object"&&(r={...r,...a,headers:{...r.headers,...b(a.headers,v,r)}})}}h?.headers?.["content-type"]&&(r.headers["content-type"]=h?.headers["content-type"]);let u=e+v+O,y=await(s?.handle(new Request(u,r))??N(u,r)),p=null,S=null;if(E){Array.isArray(E)||(E=[E]);for(let l of E)try{let a=await l(y.clone());if(a!=null){p=a;break}}catch(a){a instanceof W?S=a:S=new W(422,a);break}}if(p!==null)return{data:p,error:S,response:y,status:y.status,headers:y.headers};switch(y.headers.get("Content-Type")?.split(";")[0]){case"text/event-stream":p=U(y);break;case"application/json":p=JSON.parse(await y.text(),(a,c)=>{if(typeof c!="string")return c;let d=M(c);return d||c});break;case"application/octet-stream":p=await y.arrayBuffer();break;case"multipart/form-data":let l=await y.formData();p={},l.forEach((a,c)=>{p[c]=a});break;default:p=await y.text().then(A)}return(y.status>=300||y.status<200)&&(S=new W(y.status,p),p=null),{data:p,error:S,response:y,status:y.status,headers:y.headers}})()}return typeof i=="object"?x(e,t,[...n,Object.values(i)[0]],s):x(e,t,n)}}),Q=(e,t={})=>typeof e=="string"?(t.keepDomain||(e.includes("://")||(e=(D.find(n=>e.includes(n))?"http://":"https://")+e),e.endsWith("/")&&(e=e.slice(0,-1))),x(e,t)):(typeof window<"u"&&console.warn("Elysia instance server found on client side, this is not recommended for security reason. Use generic type instead."),x("http://e.ly",t,[],e));export{U as a,Q as b};