@elysiajs/eden 1.0.0-rc.2 → 1.0.0-rc.4

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/fetch.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Elysia } from 'elysia';
2
- import { T as TreatyToPath, a as IsNever, I as IsUnknown, P as Prettify, M as MapError, E as EdenFetchError } from './types-DNydNaKe.js';
2
+ import { T as TreatyToPath, I as IsNever, a as IsUnknown, P as Prettify, M as MapError, E as EdenFetchError } from './types-DcP_1Cpm.js';
3
3
 
4
4
  declare namespace EdenFetch {
5
5
  type Create<App extends Elysia<any, any, any, any, any, any, any, any>> = App extends {
package/dist/fetch.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Elysia } from 'elysia';
2
- import { T as TreatyToPath, a as IsNever, I as IsUnknown, P as Prettify, M as MapError, E as EdenFetchError } from './types-DNydNaKe.js';
2
+ import { T as TreatyToPath, I as IsNever, a as IsUnknown, P as Prettify, M as MapError, E as EdenFetchError } from './types-DcP_1Cpm.js';
3
3
 
4
4
  declare namespace EdenFetch {
5
5
  type Create<App extends Elysia<any, any, any, any, any, any, any, any>> = App extends {
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { InputSchema, Elysia } from 'elysia';
2
- import { P as Prettify } from './types-DNydNaKe.js';
2
+ import { P as Prettify, I as IsNever } from './types-DcP_1Cpm.js';
3
3
  export { edenTreaty } from './treaty.mjs';
4
4
  export { edenFetch } from './fetch.mjs';
5
5
 
@@ -32,7 +32,7 @@ declare namespace Treaty {
32
32
  _routes: infer Schema extends Record<string, any>;
33
33
  } ? Prettify<Sign<Schema>> : 'Please install Elysia before using Eden';
34
34
  export type Sign<in out Route extends Record<string, any>> = {
35
- [K in keyof Route as K extends '/' | '' ? 'index' : K extends `:${string}` ? never : K]: K extends 'subscribe' ? (undefined extends Route['subscribe']['headers'] ? {
35
+ [K in keyof Route as K extends `:${string}` ? never : K]: K extends 'subscribe' ? (undefined extends Route['subscribe']['headers'] ? {
36
36
  headers?: Record<string, unknown>;
37
37
  } : {
38
38
  headers: Route['subscribe']['headers'];
@@ -54,7 +54,10 @@ declare namespace Treaty {
54
54
  query?: Record<string, unknown>;
55
55
  } : {
56
56
  query: Query;
57
- }) extends infer Param ? {} extends Param ? undefined extends Body ? K extends 'get' | 'head' ? (options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : (body?: Body, options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : (body: Body extends Record<string, unknown> ? ReplaceBlobWithFiles<Body> : Body, options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : K extends 'get' | 'head' ? (options: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : (body: Body extends Record<string, unknown> ? ReplaceBlobWithFiles<Body> : Body, options: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : never : keyof Route[K] extends `:${infer Param}` ? (params: Record<Param, string>) => Prettify<Prettify<Sign<Route[K]>> & Sign<Route[K][`:${Param}`]>> : Prettify<Sign<Route[K]>>;
57
+ }) extends infer Param ? {} extends Param ? undefined extends Body ? K extends 'get' | 'head' ? (options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : (body?: Body, options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : (body: Body extends Record<string, unknown> ? ReplaceBlobWithFiles<Body> : Body, options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : K extends 'get' | 'head' ? (options: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : (body: Body extends Record<string, unknown> ? ReplaceBlobWithFiles<Body> : Body, options: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : never : Extract<keyof Route[K], `:${string}`> extends infer Path extends string ? IsNever<Path> extends true ? Prettify<Sign<Route[K]>> : // ! DO NOT USE PRETTIFY ON THIS LINE, OTHERWISE FUNCTION CALLING WILL BE OMITTED
58
+ ((params: {
59
+ [param in Path extends `:${infer Param}` ? Param : never]: string | number;
60
+ }) => Prettify<Sign<Route[K][Path]>>) & Prettify<Sign<Route[K]>> : never;
58
61
  };
59
62
  export interface Config {
60
63
  fetch?: Omit<RequestInit, 'headers' | 'method'>;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { InputSchema, Elysia } from 'elysia';
2
- import { P as Prettify } from './types-DNydNaKe.js';
2
+ import { P as Prettify, I as IsNever } from './types-DcP_1Cpm.js';
3
3
  export { edenTreaty } from './treaty.js';
4
4
  export { edenFetch } from './fetch.js';
5
5
 
@@ -32,7 +32,7 @@ declare namespace Treaty {
32
32
  _routes: infer Schema extends Record<string, any>;
33
33
  } ? Prettify<Sign<Schema>> : 'Please install Elysia before using Eden';
34
34
  export type Sign<in out Route extends Record<string, any>> = {
35
- [K in keyof Route as K extends '/' | '' ? 'index' : K extends `:${string}` ? never : K]: K extends 'subscribe' ? (undefined extends Route['subscribe']['headers'] ? {
35
+ [K in keyof Route as K extends `:${string}` ? never : K]: K extends 'subscribe' ? (undefined extends Route['subscribe']['headers'] ? {
36
36
  headers?: Record<string, unknown>;
37
37
  } : {
38
38
  headers: Route['subscribe']['headers'];
@@ -54,7 +54,10 @@ declare namespace Treaty {
54
54
  query?: Record<string, unknown>;
55
55
  } : {
56
56
  query: Query;
57
- }) extends infer Param ? {} extends Param ? undefined extends Body ? K extends 'get' | 'head' ? (options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : (body?: Body, options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : (body: Body extends Record<string, unknown> ? ReplaceBlobWithFiles<Body> : Body, options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : K extends 'get' | 'head' ? (options: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : (body: Body extends Record<string, unknown> ? ReplaceBlobWithFiles<Body> : Body, options: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : never : keyof Route[K] extends `:${infer Param}` ? (params: Record<Param, string>) => Prettify<Prettify<Sign<Route[K]>> & Sign<Route[K][`:${Param}`]>> : Prettify<Sign<Route[K]>>;
57
+ }) extends infer Param ? {} extends Param ? undefined extends Body ? K extends 'get' | 'head' ? (options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : (body?: Body, options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : (body: Body extends Record<string, unknown> ? ReplaceBlobWithFiles<Body> : Body, options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : K extends 'get' | 'head' ? (options: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : (body: Body extends Record<string, unknown> ? ReplaceBlobWithFiles<Body> : Body, options: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : never : Extract<keyof Route[K], `:${string}`> extends infer Path extends string ? IsNever<Path> extends true ? Prettify<Sign<Route[K]>> : // ! DO NOT USE PRETTIFY ON THIS LINE, OTHERWISE FUNCTION CALLING WILL BE OMITTED
58
+ ((params: {
59
+ [param in Path extends `:${infer Param}` ? Param : never]: string | number;
60
+ }) => Prettify<Sign<Route[K][Path]>>) & Prettify<Sign<Route[K]>> : never;
58
61
  };
59
62
  export interface Config {
60
63
  fetch?: Omit<RequestInit, 'headers' | 'method'>;
@@ -1 +1 @@
1
- "use strict";var Eden=(()=>{var P=Object.defineProperty;var Z=Object.getOwnPropertyDescriptor;var ee=Object.getOwnPropertyNames;var te=Object.prototype.hasOwnProperty;var re=(t,e)=>{for(var r in e)P(t,r,{get:e[r],enumerable:!0})},ne=(t,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let f of ee(e))!te.call(t,f)&&f!==r&&P(t,f,{get:()=>e[f],enumerable:!(a=Z(e,f))||a.enumerable});return t};var se=t=>ne(P({},"__esModule",{value:!0}),t);var ce={};re(ce,{edenFetch:()=>Y,edenTreaty:()=>X,treaty:()=>V});var U=(t,e,r)=>{if(t.endsWith("/")||(t+="/"),e==="index"&&(e=""),!r||!Object.keys(r).length)return`${t}${e}`;let a="";for(let[f,n]of Object.entries(r))a+=`${f}=${n}&`;return`${t}${e}?${a.slice(0,-1)}`},x=t=>t.trim().length!==0&&!Number.isNaN(Number(t));var A=class extends Error{constructor(r,a){super(a+"");this.status=r;this.value=a}};var M=class{constructor(e){this.url=e;this.ws=new WebSocket(e)}ws;send(e){return Array.isArray(e)?(e.forEach(r=>this.send(r)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,r,a){return this.addEventListener(e,r,a)}off(e,r,a){return this.ws.removeEventListener(e,r,a),this}subscribe(e,r){return this.addEventListener("message",e,r)}addEventListener(e,r,a){return this.ws.addEventListener(e,f=>{if(e==="message"){let n=f.data.toString(),i=n.charCodeAt(0);if(i===47||i===123)try{n=JSON.parse(n)}catch{}else x(n)?n=+n:n==="true"?n=!0:n==="false"&&(n=!1);r({...f,data:n})}else r(f)},a),this}removeEventListener(e,r,a){return this.off(e,r,a),this}close(){return this.ws.close(),this}};var ae=["get","post","put","delete","patch","options","head","connect","subscribe"],G=["localhost","127.0.0.1","0.0.0.0"],D=typeof FileList>"u",_=t=>D?t instanceof Blob:t instanceof FileList||t instanceof File,ie=t=>{if(!t)return!1;for(let e in t)if(_(t[e])||Array.isArray(t[e])&&t[e].find(_))return!0;return!1},q=t=>D?t:new Promise(e=>{let r=new FileReader;r.onload=()=>{let a=new File([r.result],t.name,{lastModified:t.lastModified,type:t.type});e(a)},r.readAsArrayBuffer(t)}),N=(t,e,r=[],a)=>new Proxy(()=>{},{get(f,n){return N(t,e,n==="index"?r:[...r,n],a)},apply(f,n,[i,p={}]){if(!i||p||typeof i=="object"&&Object.keys(i).length!==1||ae.includes(r.at(-1))){let k=r.pop(),w="/"+r.join("/"),{fetcher:T=fetch,headers:s,onRequest:h,onResponse:g,fetch:K}=e,F=k==="get"||k==="head"||k==="subscribe";s={...typeof s=="object"&&!Array.isArray(s)?s:{},...F?i?.headers:p?.headers};let L=F?i?.query:p?.query,R="";if(L)for(let[c,u]of Object.entries(L))R+=(R?"&":"?")+`${c}=${u}`;if(typeof e.headers=="function"&&!(s instanceof Headers)){let c=e.headers(w,p);c&&(s={...s,...c})}else if(Array.isArray(e.headers)&&e.headers.every(c=>typeof c=="function"))for(let c of e.headers){let u=c(w,p);u&&(s={...s,...u})}else if(s instanceof Headers){s||(s={});for(let[c,u]of Object.entries(s))s[c]=u}if(k==="subscribe"){let c=t.replace(/^([^]+):\/\//,t.startsWith("https://")?"wss://":t.startsWith("http://")||G.find(u=>t.includes(u))?"ws://":"wss://")+w+R;return new M(c)}return(async()=>{let c=(s instanceof Headers?s.get("content-type"):Array.isArray(s)?s.find(o=>Array.isArray(o)&&o[0]==="headers"?o[1]:!1):typeof s=="function"?s(w,p):s?.contentType)||p?.headers?.contentType;if(!c)if(typeof i=="object")c="application/json",i=JSON.stringify(i);else if(ie(i)){let o=new FormData;for(let[d,m]of Object.entries(i)){if(D){o.append(d,m);continue}if(m instanceof File){o.append(d,await q(m));continue}if(m instanceof FileList){for(let l=0;l<m.length;l++)o.append(d,await q(m[l]));continue}if(Array.isArray(m)){for(let l=0;l<m.length;l++){let b=m[l];o.append(d,b instanceof File?await q(b):b)}continue}o.append(d,m)}i=o}else i!=null&&(c="text/plain");let u={method:k,body:i,...K,headers:{...s,"content-type":c}};if(F&&delete u.body,h){Array.isArray(h)||(h=[h]);for(let o of h){let d=await o(w,u);typeof d=="object"&&(u={...u,...d,headers:{...u.headers,...d.headers}})}}let C=t+w+R,E=await(a?.handle(new Request(C,u))??T(C,u)),y,O;if(g){Array.isArray(g)||(g=[g]);for(let o of g)try{if(y=await o(E.clone()),y!==void 0)break}catch(d){d instanceof A?O=d:O=new A(422,d);break}}if(y===void 0){switch(E.headers.get("Content-Type")?.split(";")[0]){case"application/json":y=await E.json();break;case"application/octet-stream":y=await E.arrayBuffer();break;default:y=await E.text().then(o=>{if(x(o))return+o;if(o==="true")return!0;if(o==="false")return!1;if(!o)return o;let d=new Date(o);return Number.isNaN(d.getTime())?o:d})}(E.status>=300||E.status<200)&&(O=new A(E.status,y),y=void 0)}return{data:y,error:O,response:E,status:E.status,headers:E.headers}})()}return typeof i=="object"?N(t,e,[...r,Object.values(i)[0]],a):N(t,e,r)}}),V=(t,e={})=>typeof t=="string"?(t.includes("://")||(t=(G.find(r=>t.includes(r))?"http://":"https://")+t),t.endsWith("/")&&(t=t.slice(0,-1)),N(t,e)):(typeof window<"u"&&console.warn("Elysia instance server found on client side, this is not recommended for security reason. Use generic type instead."),N("http://e.ly",e,[],t));var B=typeof FileList>"u",z=t=>B?t instanceof Blob:t instanceof FileList||t instanceof File,oe=t=>{if(!t)return!1;for(let e in t){if(z(t[e]))return!0;if(Array.isArray(t[e])&&t[e].find(r=>z(r)))return!0}return!1},J=t=>B?t:new Promise(e=>{let r=new FileReader;r.onload=()=>{let a=new File([r.result],t.name,{lastModified:t.lastModified,type:t.type});e(a)},r.readAsArrayBuffer(t)}),H=class{ws;url;constructor(e){this.ws=new WebSocket(e),this.url=e}send(e){return Array.isArray(e)?(e.forEach(r=>this.send(r)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,r,a){return this.addEventListener(e,r,a)}off(e,r,a){return this.ws.removeEventListener(e,r,a),this}subscribe(e,r){return this.addEventListener("message",e,r)}addEventListener(e,r,a){return this.ws.addEventListener(e,f=>{if(e==="message"){let n=f.data.toString(),i=n.charCodeAt(0);if(i===47||i===123)try{n=JSON.parse(n)}catch{}else x(n)?n=+n:n==="true"?n=!0:n==="false"&&(n=!1);r({...f,data:n})}else r(f)},a),this}removeEventListener(e,r,a){return this.off(e,r,a),this}close(){return this.ws.close(),this}},Q=(t,e="",r)=>new Proxy(()=>{},{get(a,f,n){return Q(t,`${e}/${f.toString()}`,r)},apply(a,f,[n,i={}]=[{},{}]){let p=n!==void 0&&(typeof n!="object"||Array.isArray(n))?n:void 0,{$query:k,$fetch:w,$headers:T,$transform:s,getRaw:h,...g}=n??{};p??=g;let K=e.lastIndexOf("/"),F=e.slice(K+1).toUpperCase(),L=U(t,K===-1?"/":e.slice(0,K),Object.assign(i.query??{},k)),R=r.fetcher??fetch,c=r.transform?Array.isArray(r.transform)?r.transform:[r.transform]:void 0,u=s?Array.isArray(s)?s:[s]:void 0;return u&&(c?c=u.concat(c):c=u),F==="SUBSCRIBE"?new H(L.replace(/^([^]+):\/\//,L.startsWith("https://")?"wss://":"ws://")):(async E=>{let y,O={...r.$fetch?.headers,...w?.headers,...i.headers,...T};if(F!=="GET"&&F!=="HEAD"){y=Object.keys(p).length||Array.isArray(p)?p:void 0;let l=y&&(typeof y=="object"||Array.isArray(p));if(l&&oe(y)){let j=new FormData;for(let[$,v]of Object.entries(y))if(B)j.append($,v);else if(v instanceof File)j.append($,await J(v));else if(v instanceof FileList)for(let W=0;W<v.length;W++)j.append($,await J(v[W]));else if(Array.isArray(v))for(let W=0;W<v.length;W++){let I=v[W];j.append($,I instanceof File?await J(I):I)}else j.append($,v);y=j}else y!=null&&(O["content-type"]=l?"application/json":"text/plain",y=l?JSON.stringify(y):p)}let S=await R(L,{method:F,body:y,...r.$fetch,...i.fetch,...w,headers:O}),o;if(E.getRaw)return S;switch(S.headers.get("Content-Type")?.split(";")[0]){case"application/json":o=await S.json();break;default:o=await S.text().then(l=>x(l)?+l:l==="true"?!0:l==="false"?!1:l)}let d=S.status>=300||S.status<200?new A(S.status,o):null,m={data:o,error:d,response:S,status:S.status,headers:S.headers};if(c)for(let l of c){let b=l(m);b instanceof Promise&&(b=await b),b!=null&&(m=b)}return m})({getRaw:h})}}),X=(t,e={fetcher:fetch})=>new Proxy({},{get(r,a){return Q(t,a,e)}});var Y=(t,e)=>(r,{query:a,params:f,body:n,...i}={})=>{f&&Object.entries(f).forEach(([s,h])=>{r=r.replace(`:${s}`,h)});let p=i.headers?.["Content-Type"];if(!p||p==="application/json")try{n=JSON.stringify(n)}catch{}let k=e?.fetcher||globalThis.fetch,w=a?`?${new URLSearchParams(a).toString()}`:"",T=()=>k(t+r+w,{...i,method:i.method?.toUpperCase()||"GET",headers:n?{"content-type":"application/json",...i.headers}:i.headers,body:n}).then(async s=>{let h;switch(s.headers.get("Content-Type")?.split(";")[0]){case"application/json":h=await s.json();break;default:h=await s.text().then(g=>x(g)?parseInt(g):g==="true"?!0:g==="false"?!1:g);break}return s.status>300?{data:null,status:s.status,headers:s.headers,retry:T,error:new A(s.status,h)}:{data:h,error:null,status:s.status,headers:s.headers,retry:T}});return T()};return se(ce);})();
1
+ "use strict";var Eden=(()=>{var P=Object.defineProperty;var Z=Object.getOwnPropertyDescriptor;var ee=Object.getOwnPropertyNames;var te=Object.prototype.hasOwnProperty;var re=(t,e)=>{for(var r in e)P(t,r,{get:e[r],enumerable:!0})},ne=(t,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let f of ee(e))!te.call(t,f)&&f!==r&&P(t,f,{get:()=>e[f],enumerable:!(a=Z(e,f))||a.enumerable});return t};var se=t=>ne(P({},"__esModule",{value:!0}),t);var ce={};re(ce,{edenFetch:()=>Y,edenTreaty:()=>X,treaty:()=>V});var U=(t,e,r)=>{if(t.endsWith("/")||(t+="/"),e==="index"&&(e=""),!r||!Object.keys(r).length)return`${t}${e}`;let a="";for(let[f,n]of Object.entries(r))a+=`${f}=${n}&`;return`${t}${e}?${a.slice(0,-1)}`},x=t=>t.trim().length!==0&&!Number.isNaN(Number(t));var A=class extends Error{constructor(r,a){super(a+"");this.status=r;this.value=a}};var M=class{constructor(e){this.url=e;this.ws=new WebSocket(e)}ws;send(e){return Array.isArray(e)?(e.forEach(r=>this.send(r)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,r,a){return this.addEventListener(e,r,a)}off(e,r,a){return this.ws.removeEventListener(e,r,a),this}subscribe(e,r){return this.addEventListener("message",e,r)}addEventListener(e,r,a){return this.ws.addEventListener(e,f=>{if(e==="message"){let n=f.data.toString(),i=n.charCodeAt(0);if(i===47||i===123)try{n=JSON.parse(n)}catch{}else x(n)?n=+n:n==="true"?n=!0:n==="false"&&(n=!1);r({...f,data:n})}else r(f)},a),this}removeEventListener(e,r,a){return this.off(e,r,a),this}close(){return this.ws.close(),this}};var ae=["get","post","put","delete","patch","options","head","connect","subscribe"],G=["localhost","127.0.0.1","0.0.0.0"],D=typeof FileList>"u",_=t=>D?t instanceof Blob:t instanceof FileList||t instanceof File,ie=t=>{if(!t)return!1;for(let e in t)if(_(t[e])||Array.isArray(t[e])&&t[e].find(_))return!0;return!1},q=t=>D?t:new Promise(e=>{let r=new FileReader;r.onload=()=>{let a=new File([r.result],t.name,{lastModified:t.lastModified,type:t.type});e(a)},r.readAsArrayBuffer(t)}),N=(t,e,r=[],a)=>new Proxy(()=>{},{get(f,n){return N(t,e,n==="index"?r:[...r,n],a)},apply(f,n,[i,p]){if(!i||p||typeof i=="object"&&Object.keys(i).length!==1||ae.includes(r.at(-1))){let k=r.pop(),w="/"+r.join("/"),{fetcher:T=fetch,headers:s,onRequest:h,onResponse:g,fetch:K}=e,F=k==="get"||k==="head"||k==="subscribe";s={...typeof s=="object"&&!Array.isArray(s)?s:{},...F?i?.headers:p?.headers};let L=F?i?.query:p?.query,R="";if(L)for(let[c,u]of Object.entries(L))R+=(R?"&":"?")+`${c}=${u}`;if(typeof e.headers=="function"&&!(s instanceof Headers)){let c=e.headers(w,p??{});c&&(s={...s,...c})}else if(Array.isArray(e.headers)&&e.headers.every(c=>typeof c=="function"))for(let c of e.headers){let u=c(w,p??{});u&&(s={...s,...u})}else if(s instanceof Headers){s||(s={});for(let[c,u]of Object.entries(s))s[c]=u}if(k==="subscribe"){let c=t.replace(/^([^]+):\/\//,t.startsWith("https://")?"wss://":t.startsWith("http://")||G.find(u=>t.includes(u))?"ws://":"wss://")+w+R;return new M(c)}return(async()=>{let c=(s instanceof Headers?s.get("content-type"):Array.isArray(s)?s.find(o=>Array.isArray(o)&&o[0]==="headers"?o[1]:!1):typeof s=="function"?s(w,p??{}):s?.contentType)||p?.headers?.contentType;if(!c)if(typeof i=="object")c="application/json",i=JSON.stringify(i);else if(ie(i)){let o=new FormData;for(let[d,m]of Object.entries(i)){if(D){o.append(d,m);continue}if(m instanceof File){o.append(d,await q(m));continue}if(m instanceof FileList){for(let l=0;l<m.length;l++)o.append(d,await q(m[l]));continue}if(Array.isArray(m)){for(let l=0;l<m.length;l++){let b=m[l];o.append(d,b instanceof File?await q(b):b)}continue}o.append(d,m)}i=o}else i!=null&&(c="text/plain");let u={method:k,body:i,...K,headers:{...s,"content-type":c}};if(F&&delete u.body,h){Array.isArray(h)||(h=[h]);for(let o of h){let d=await o(w,u);typeof d=="object"&&(u={...u,...d,headers:{...u.headers,...d.headers}})}}let C=t+w+R,E=await(a?.handle(new Request(C,u))??T(C,u)),y,O;if(g){Array.isArray(g)||(g=[g]);for(let o of g)try{if(y=await o(E.clone()),y!==void 0)break}catch(d){d instanceof A?O=d:O=new A(422,d);break}}if(y===void 0){switch(E.headers.get("Content-Type")?.split(";")[0]){case"application/json":y=await E.json();break;case"application/octet-stream":y=await E.arrayBuffer();break;default:y=await E.text().then(o=>{if(x(o))return+o;if(o==="true")return!0;if(o==="false")return!1;if(!o)return o;let d=new Date(o);return Number.isNaN(d.getTime())?o:d})}(E.status>=300||E.status<200)&&(O=new A(E.status,y),y=void 0)}return{data:y,error:O,response:E,status:E.status,headers:E.headers}})()}return typeof i=="object"?N(t,e,[...r,Object.values(i)[0]],a):N(t,e,r)}}),V=(t,e={})=>typeof t=="string"?(t.includes("://")||(t=(G.find(r=>t.includes(r))?"http://":"https://")+t),t.endsWith("/")&&(t=t.slice(0,-1)),N(t,e)):(typeof window<"u"&&console.warn("Elysia instance server found on client side, this is not recommended for security reason. Use generic type instead."),N("http://e.ly",e,[],t));var B=typeof FileList>"u",z=t=>B?t instanceof Blob:t instanceof FileList||t instanceof File,oe=t=>{if(!t)return!1;for(let e in t){if(z(t[e]))return!0;if(Array.isArray(t[e])&&t[e].find(r=>z(r)))return!0}return!1},J=t=>B?t:new Promise(e=>{let r=new FileReader;r.onload=()=>{let a=new File([r.result],t.name,{lastModified:t.lastModified,type:t.type});e(a)},r.readAsArrayBuffer(t)}),H=class{ws;url;constructor(e){this.ws=new WebSocket(e),this.url=e}send(e){return Array.isArray(e)?(e.forEach(r=>this.send(r)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,r,a){return this.addEventListener(e,r,a)}off(e,r,a){return this.ws.removeEventListener(e,r,a),this}subscribe(e,r){return this.addEventListener("message",e,r)}addEventListener(e,r,a){return this.ws.addEventListener(e,f=>{if(e==="message"){let n=f.data.toString(),i=n.charCodeAt(0);if(i===47||i===123)try{n=JSON.parse(n)}catch{}else x(n)?n=+n:n==="true"?n=!0:n==="false"&&(n=!1);r({...f,data:n})}else r(f)},a),this}removeEventListener(e,r,a){return this.off(e,r,a),this}close(){return this.ws.close(),this}},Q=(t,e="",r)=>new Proxy(()=>{},{get(a,f,n){return Q(t,`${e}/${f.toString()}`,r)},apply(a,f,[n,i={}]=[{},{}]){let p=n!==void 0&&(typeof n!="object"||Array.isArray(n))?n:void 0,{$query:k,$fetch:w,$headers:T,$transform:s,getRaw:h,...g}=n??{};p??=g;let K=e.lastIndexOf("/"),F=e.slice(K+1).toUpperCase(),L=U(t,K===-1?"/":e.slice(0,K),Object.assign(i.query??{},k)),R=r.fetcher??fetch,c=r.transform?Array.isArray(r.transform)?r.transform:[r.transform]:void 0,u=s?Array.isArray(s)?s:[s]:void 0;return u&&(c?c=u.concat(c):c=u),F==="SUBSCRIBE"?new H(L.replace(/^([^]+):\/\//,L.startsWith("https://")?"wss://":"ws://")):(async E=>{let y,O={...r.$fetch?.headers,...w?.headers,...i.headers,...T};if(F!=="GET"&&F!=="HEAD"){y=Object.keys(p).length||Array.isArray(p)?p:void 0;let l=y&&(typeof y=="object"||Array.isArray(p));if(l&&oe(y)){let j=new FormData;for(let[$,v]of Object.entries(y))if(B)j.append($,v);else if(v instanceof File)j.append($,await J(v));else if(v instanceof FileList)for(let W=0;W<v.length;W++)j.append($,await J(v[W]));else if(Array.isArray(v))for(let W=0;W<v.length;W++){let I=v[W];j.append($,I instanceof File?await J(I):I)}else j.append($,v);y=j}else y!=null&&(O["content-type"]=l?"application/json":"text/plain",y=l?JSON.stringify(y):p)}let S=await R(L,{method:F,body:y,...r.$fetch,...i.fetch,...w,headers:O}),o;if(E.getRaw)return S;switch(S.headers.get("Content-Type")?.split(";")[0]){case"application/json":o=await S.json();break;default:o=await S.text().then(l=>x(l)?+l:l==="true"?!0:l==="false"?!1:l)}let d=S.status>=300||S.status<200?new A(S.status,o):null,m={data:o,error:d,response:S,status:S.status,headers:S.headers};if(c)for(let l of c){let b=l(m);b instanceof Promise&&(b=await b),b!=null&&(m=b)}return m})({getRaw:h})}}),X=(t,e={fetcher:fetch})=>new Proxy({},{get(r,a){return Q(t,a,e)}});var Y=(t,e)=>(r,{query:a,params:f,body:n,...i}={})=>{f&&Object.entries(f).forEach(([s,h])=>{r=r.replace(`:${s}`,h)});let p=i.headers?.["Content-Type"];if(!p||p==="application/json")try{n=JSON.stringify(n)}catch{}let k=e?.fetcher||globalThis.fetch,w=a?`?${new URLSearchParams(a).toString()}`:"",T=()=>k(t+r+w,{...i,method:i.method?.toUpperCase()||"GET",headers:n?{"content-type":"application/json",...i.headers}:i.headers,body:n}).then(async s=>{let h;switch(s.headers.get("Content-Type")?.split(";")[0]){case"application/json":h=await s.json();break;default:h=await s.text().then(g=>x(g)?parseInt(g):g==="true"?!0:g==="false"?!1:g);break}return s.status>300?{data:null,status:s.status,headers:s.headers,retry:T,error:new A(s.status,h)}:{data:h,error:null,status:s.status,headers:s.headers,retry:T}});return T()};return se(ce);})();
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var P=Object.defineProperty;var Z=Object.getOwnPropertyDescriptor;var ee=Object.getOwnPropertyNames;var te=Object.prototype.hasOwnProperty;var re=(t,e)=>{for(var r in e)P(t,r,{get:e[r],enumerable:!0})},ne=(t,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let f of ee(e))!te.call(t,f)&&f!==r&&P(t,f,{get:()=>e[f],enumerable:!(a=Z(e,f))||a.enumerable});return t};var se=t=>ne(P({},"__esModule",{value:!0}),t);var ce={};re(ce,{edenFetch:()=>Y,edenTreaty:()=>X,treaty:()=>V});module.exports=se(ce);var U=(t,e,r)=>{if(t.endsWith("/")||(t+="/"),e==="index"&&(e=""),!r||!Object.keys(r).length)return`${t}${e}`;let a="";for(let[f,n]of Object.entries(r))a+=`${f}=${n}&`;return`${t}${e}?${a.slice(0,-1)}`},x=t=>t.trim().length!==0&&!Number.isNaN(Number(t));var A=class extends Error{constructor(r,a){super(a+"");this.status=r;this.value=a}};var M=class{constructor(e){this.url=e;this.ws=new WebSocket(e)}ws;send(e){return Array.isArray(e)?(e.forEach(r=>this.send(r)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,r,a){return this.addEventListener(e,r,a)}off(e,r,a){return this.ws.removeEventListener(e,r,a),this}subscribe(e,r){return this.addEventListener("message",e,r)}addEventListener(e,r,a){return this.ws.addEventListener(e,f=>{if(e==="message"){let n=f.data.toString(),i=n.charCodeAt(0);if(i===47||i===123)try{n=JSON.parse(n)}catch{}else x(n)?n=+n:n==="true"?n=!0:n==="false"&&(n=!1);r({...f,data:n})}else r(f)},a),this}removeEventListener(e,r,a){return this.off(e,r,a),this}close(){return this.ws.close(),this}};var ae=["get","post","put","delete","patch","options","head","connect","subscribe"],G=["localhost","127.0.0.1","0.0.0.0"],D=typeof FileList>"u",_=t=>D?t instanceof Blob:t instanceof FileList||t instanceof File,ie=t=>{if(!t)return!1;for(let e in t)if(_(t[e])||Array.isArray(t[e])&&t[e].find(_))return!0;return!1},q=t=>D?t:new Promise(e=>{let r=new FileReader;r.onload=()=>{let a=new File([r.result],t.name,{lastModified:t.lastModified,type:t.type});e(a)},r.readAsArrayBuffer(t)}),N=(t,e,r=[],a)=>new Proxy(()=>{},{get(f,n){return N(t,e,n==="index"?r:[...r,n],a)},apply(f,n,[i,p={}]){if(!i||p||typeof i=="object"&&Object.keys(i).length!==1||ae.includes(r.at(-1))){let k=r.pop(),w="/"+r.join("/"),{fetcher:T=fetch,headers:s,onRequest:h,onResponse:g,fetch:K}=e,F=k==="get"||k==="head"||k==="subscribe";s={...typeof s=="object"&&!Array.isArray(s)?s:{},...F?i?.headers:p?.headers};let L=F?i?.query:p?.query,R="";if(L)for(let[c,u]of Object.entries(L))R+=(R?"&":"?")+`${c}=${u}`;if(typeof e.headers=="function"&&!(s instanceof Headers)){let c=e.headers(w,p);c&&(s={...s,...c})}else if(Array.isArray(e.headers)&&e.headers.every(c=>typeof c=="function"))for(let c of e.headers){let u=c(w,p);u&&(s={...s,...u})}else if(s instanceof Headers){s||(s={});for(let[c,u]of Object.entries(s))s[c]=u}if(k==="subscribe"){let c=t.replace(/^([^]+):\/\//,t.startsWith("https://")?"wss://":t.startsWith("http://")||G.find(u=>t.includes(u))?"ws://":"wss://")+w+R;return new M(c)}return(async()=>{let c=(s instanceof Headers?s.get("content-type"):Array.isArray(s)?s.find(o=>Array.isArray(o)&&o[0]==="headers"?o[1]:!1):typeof s=="function"?s(w,p):s?.contentType)||p?.headers?.contentType;if(!c)if(typeof i=="object")c="application/json",i=JSON.stringify(i);else if(ie(i)){let o=new FormData;for(let[d,m]of Object.entries(i)){if(D){o.append(d,m);continue}if(m instanceof File){o.append(d,await q(m));continue}if(m instanceof FileList){for(let l=0;l<m.length;l++)o.append(d,await q(m[l]));continue}if(Array.isArray(m)){for(let l=0;l<m.length;l++){let b=m[l];o.append(d,b instanceof File?await q(b):b)}continue}o.append(d,m)}i=o}else i!=null&&(c="text/plain");let u={method:k,body:i,...K,headers:{...s,"content-type":c}};if(F&&delete u.body,h){Array.isArray(h)||(h=[h]);for(let o of h){let d=await o(w,u);typeof d=="object"&&(u={...u,...d,headers:{...u.headers,...d.headers}})}}let C=t+w+R,E=await(a?.handle(new Request(C,u))??T(C,u)),y,O;if(g){Array.isArray(g)||(g=[g]);for(let o of g)try{if(y=await o(E.clone()),y!==void 0)break}catch(d){d instanceof A?O=d:O=new A(422,d);break}}if(y===void 0){switch(E.headers.get("Content-Type")?.split(";")[0]){case"application/json":y=await E.json();break;case"application/octet-stream":y=await E.arrayBuffer();break;default:y=await E.text().then(o=>{if(x(o))return+o;if(o==="true")return!0;if(o==="false")return!1;if(!o)return o;let d=new Date(o);return Number.isNaN(d.getTime())?o:d})}(E.status>=300||E.status<200)&&(O=new A(E.status,y),y=void 0)}return{data:y,error:O,response:E,status:E.status,headers:E.headers}})()}return typeof i=="object"?N(t,e,[...r,Object.values(i)[0]],a):N(t,e,r)}}),V=(t,e={})=>typeof t=="string"?(t.includes("://")||(t=(G.find(r=>t.includes(r))?"http://":"https://")+t),t.endsWith("/")&&(t=t.slice(0,-1)),N(t,e)):(typeof window<"u"&&console.warn("Elysia instance server found on client side, this is not recommended for security reason. Use generic type instead."),N("http://e.ly",e,[],t));var B=typeof FileList>"u",z=t=>B?t instanceof Blob:t instanceof FileList||t instanceof File,oe=t=>{if(!t)return!1;for(let e in t){if(z(t[e]))return!0;if(Array.isArray(t[e])&&t[e].find(r=>z(r)))return!0}return!1},J=t=>B?t:new Promise(e=>{let r=new FileReader;r.onload=()=>{let a=new File([r.result],t.name,{lastModified:t.lastModified,type:t.type});e(a)},r.readAsArrayBuffer(t)}),H=class{ws;url;constructor(e){this.ws=new WebSocket(e),this.url=e}send(e){return Array.isArray(e)?(e.forEach(r=>this.send(r)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,r,a){return this.addEventListener(e,r,a)}off(e,r,a){return this.ws.removeEventListener(e,r,a),this}subscribe(e,r){return this.addEventListener("message",e,r)}addEventListener(e,r,a){return this.ws.addEventListener(e,f=>{if(e==="message"){let n=f.data.toString(),i=n.charCodeAt(0);if(i===47||i===123)try{n=JSON.parse(n)}catch{}else x(n)?n=+n:n==="true"?n=!0:n==="false"&&(n=!1);r({...f,data:n})}else r(f)},a),this}removeEventListener(e,r,a){return this.off(e,r,a),this}close(){return this.ws.close(),this}},Q=(t,e="",r)=>new Proxy(()=>{},{get(a,f,n){return Q(t,`${e}/${f.toString()}`,r)},apply(a,f,[n,i={}]=[{},{}]){let p=n!==void 0&&(typeof n!="object"||Array.isArray(n))?n:void 0,{$query:k,$fetch:w,$headers:T,$transform:s,getRaw:h,...g}=n??{};p??=g;let K=e.lastIndexOf("/"),F=e.slice(K+1).toUpperCase(),L=U(t,K===-1?"/":e.slice(0,K),Object.assign(i.query??{},k)),R=r.fetcher??fetch,c=r.transform?Array.isArray(r.transform)?r.transform:[r.transform]:void 0,u=s?Array.isArray(s)?s:[s]:void 0;return u&&(c?c=u.concat(c):c=u),F==="SUBSCRIBE"?new H(L.replace(/^([^]+):\/\//,L.startsWith("https://")?"wss://":"ws://")):(async E=>{let y,O={...r.$fetch?.headers,...w?.headers,...i.headers,...T};if(F!=="GET"&&F!=="HEAD"){y=Object.keys(p).length||Array.isArray(p)?p:void 0;let l=y&&(typeof y=="object"||Array.isArray(p));if(l&&oe(y)){let j=new FormData;for(let[$,v]of Object.entries(y))if(B)j.append($,v);else if(v instanceof File)j.append($,await J(v));else if(v instanceof FileList)for(let W=0;W<v.length;W++)j.append($,await J(v[W]));else if(Array.isArray(v))for(let W=0;W<v.length;W++){let I=v[W];j.append($,I instanceof File?await J(I):I)}else j.append($,v);y=j}else y!=null&&(O["content-type"]=l?"application/json":"text/plain",y=l?JSON.stringify(y):p)}let S=await R(L,{method:F,body:y,...r.$fetch,...i.fetch,...w,headers:O}),o;if(E.getRaw)return S;switch(S.headers.get("Content-Type")?.split(";")[0]){case"application/json":o=await S.json();break;default:o=await S.text().then(l=>x(l)?+l:l==="true"?!0:l==="false"?!1:l)}let d=S.status>=300||S.status<200?new A(S.status,o):null,m={data:o,error:d,response:S,status:S.status,headers:S.headers};if(c)for(let l of c){let b=l(m);b instanceof Promise&&(b=await b),b!=null&&(m=b)}return m})({getRaw:h})}}),X=(t,e={fetcher:fetch})=>new Proxy({},{get(r,a){return Q(t,a,e)}});var Y=(t,e)=>(r,{query:a,params:f,body:n,...i}={})=>{f&&Object.entries(f).forEach(([s,h])=>{r=r.replace(`:${s}`,h)});let p=i.headers?.["Content-Type"];if(!p||p==="application/json")try{n=JSON.stringify(n)}catch{}let k=e?.fetcher||globalThis.fetch,w=a?`?${new URLSearchParams(a).toString()}`:"",T=()=>k(t+r+w,{...i,method:i.method?.toUpperCase()||"GET",headers:n?{"content-type":"application/json",...i.headers}:i.headers,body:n}).then(async s=>{let h;switch(s.headers.get("Content-Type")?.split(";")[0]){case"application/json":h=await s.json();break;default:h=await s.text().then(g=>x(g)?parseInt(g):g==="true"?!0:g==="false"?!1:g);break}return s.status>300?{data:null,status:s.status,headers:s.headers,retry:T,error:new A(s.status,h)}:{data:h,error:null,status:s.status,headers:s.headers,retry:T}});return T()};0&&(module.exports={edenFetch,edenTreaty,treaty});
1
+ "use strict";var P=Object.defineProperty;var Z=Object.getOwnPropertyDescriptor;var ee=Object.getOwnPropertyNames;var te=Object.prototype.hasOwnProperty;var re=(t,e)=>{for(var r in e)P(t,r,{get:e[r],enumerable:!0})},ne=(t,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let f of ee(e))!te.call(t,f)&&f!==r&&P(t,f,{get:()=>e[f],enumerable:!(a=Z(e,f))||a.enumerable});return t};var se=t=>ne(P({},"__esModule",{value:!0}),t);var ce={};re(ce,{edenFetch:()=>Y,edenTreaty:()=>X,treaty:()=>V});module.exports=se(ce);var U=(t,e,r)=>{if(t.endsWith("/")||(t+="/"),e==="index"&&(e=""),!r||!Object.keys(r).length)return`${t}${e}`;let a="";for(let[f,n]of Object.entries(r))a+=`${f}=${n}&`;return`${t}${e}?${a.slice(0,-1)}`},x=t=>t.trim().length!==0&&!Number.isNaN(Number(t));var A=class extends Error{constructor(r,a){super(a+"");this.status=r;this.value=a}};var M=class{constructor(e){this.url=e;this.ws=new WebSocket(e)}ws;send(e){return Array.isArray(e)?(e.forEach(r=>this.send(r)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,r,a){return this.addEventListener(e,r,a)}off(e,r,a){return this.ws.removeEventListener(e,r,a),this}subscribe(e,r){return this.addEventListener("message",e,r)}addEventListener(e,r,a){return this.ws.addEventListener(e,f=>{if(e==="message"){let n=f.data.toString(),i=n.charCodeAt(0);if(i===47||i===123)try{n=JSON.parse(n)}catch{}else x(n)?n=+n:n==="true"?n=!0:n==="false"&&(n=!1);r({...f,data:n})}else r(f)},a),this}removeEventListener(e,r,a){return this.off(e,r,a),this}close(){return this.ws.close(),this}};var ae=["get","post","put","delete","patch","options","head","connect","subscribe"],G=["localhost","127.0.0.1","0.0.0.0"],D=typeof FileList>"u",_=t=>D?t instanceof Blob:t instanceof FileList||t instanceof File,ie=t=>{if(!t)return!1;for(let e in t)if(_(t[e])||Array.isArray(t[e])&&t[e].find(_))return!0;return!1},q=t=>D?t:new Promise(e=>{let r=new FileReader;r.onload=()=>{let a=new File([r.result],t.name,{lastModified:t.lastModified,type:t.type});e(a)},r.readAsArrayBuffer(t)}),N=(t,e,r=[],a)=>new Proxy(()=>{},{get(f,n){return N(t,e,n==="index"?r:[...r,n],a)},apply(f,n,[i,p]){if(!i||p||typeof i=="object"&&Object.keys(i).length!==1||ae.includes(r.at(-1))){let k=r.pop(),w="/"+r.join("/"),{fetcher:T=fetch,headers:s,onRequest:h,onResponse:g,fetch:K}=e,F=k==="get"||k==="head"||k==="subscribe";s={...typeof s=="object"&&!Array.isArray(s)?s:{},...F?i?.headers:p?.headers};let L=F?i?.query:p?.query,R="";if(L)for(let[c,u]of Object.entries(L))R+=(R?"&":"?")+`${c}=${u}`;if(typeof e.headers=="function"&&!(s instanceof Headers)){let c=e.headers(w,p??{});c&&(s={...s,...c})}else if(Array.isArray(e.headers)&&e.headers.every(c=>typeof c=="function"))for(let c of e.headers){let u=c(w,p??{});u&&(s={...s,...u})}else if(s instanceof Headers){s||(s={});for(let[c,u]of Object.entries(s))s[c]=u}if(k==="subscribe"){let c=t.replace(/^([^]+):\/\//,t.startsWith("https://")?"wss://":t.startsWith("http://")||G.find(u=>t.includes(u))?"ws://":"wss://")+w+R;return new M(c)}return(async()=>{let c=(s instanceof Headers?s.get("content-type"):Array.isArray(s)?s.find(o=>Array.isArray(o)&&o[0]==="headers"?o[1]:!1):typeof s=="function"?s(w,p??{}):s?.contentType)||p?.headers?.contentType;if(!c)if(typeof i=="object")c="application/json",i=JSON.stringify(i);else if(ie(i)){let o=new FormData;for(let[d,m]of Object.entries(i)){if(D){o.append(d,m);continue}if(m instanceof File){o.append(d,await q(m));continue}if(m instanceof FileList){for(let l=0;l<m.length;l++)o.append(d,await q(m[l]));continue}if(Array.isArray(m)){for(let l=0;l<m.length;l++){let b=m[l];o.append(d,b instanceof File?await q(b):b)}continue}o.append(d,m)}i=o}else i!=null&&(c="text/plain");let u={method:k,body:i,...K,headers:{...s,"content-type":c}};if(F&&delete u.body,h){Array.isArray(h)||(h=[h]);for(let o of h){let d=await o(w,u);typeof d=="object"&&(u={...u,...d,headers:{...u.headers,...d.headers}})}}let C=t+w+R,E=await(a?.handle(new Request(C,u))??T(C,u)),y,O;if(g){Array.isArray(g)||(g=[g]);for(let o of g)try{if(y=await o(E.clone()),y!==void 0)break}catch(d){d instanceof A?O=d:O=new A(422,d);break}}if(y===void 0){switch(E.headers.get("Content-Type")?.split(";")[0]){case"application/json":y=await E.json();break;case"application/octet-stream":y=await E.arrayBuffer();break;default:y=await E.text().then(o=>{if(x(o))return+o;if(o==="true")return!0;if(o==="false")return!1;if(!o)return o;let d=new Date(o);return Number.isNaN(d.getTime())?o:d})}(E.status>=300||E.status<200)&&(O=new A(E.status,y),y=void 0)}return{data:y,error:O,response:E,status:E.status,headers:E.headers}})()}return typeof i=="object"?N(t,e,[...r,Object.values(i)[0]],a):N(t,e,r)}}),V=(t,e={})=>typeof t=="string"?(t.includes("://")||(t=(G.find(r=>t.includes(r))?"http://":"https://")+t),t.endsWith("/")&&(t=t.slice(0,-1)),N(t,e)):(typeof window<"u"&&console.warn("Elysia instance server found on client side, this is not recommended for security reason. Use generic type instead."),N("http://e.ly",e,[],t));var B=typeof FileList>"u",z=t=>B?t instanceof Blob:t instanceof FileList||t instanceof File,oe=t=>{if(!t)return!1;for(let e in t){if(z(t[e]))return!0;if(Array.isArray(t[e])&&t[e].find(r=>z(r)))return!0}return!1},J=t=>B?t:new Promise(e=>{let r=new FileReader;r.onload=()=>{let a=new File([r.result],t.name,{lastModified:t.lastModified,type:t.type});e(a)},r.readAsArrayBuffer(t)}),H=class{ws;url;constructor(e){this.ws=new WebSocket(e),this.url=e}send(e){return Array.isArray(e)?(e.forEach(r=>this.send(r)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,r,a){return this.addEventListener(e,r,a)}off(e,r,a){return this.ws.removeEventListener(e,r,a),this}subscribe(e,r){return this.addEventListener("message",e,r)}addEventListener(e,r,a){return this.ws.addEventListener(e,f=>{if(e==="message"){let n=f.data.toString(),i=n.charCodeAt(0);if(i===47||i===123)try{n=JSON.parse(n)}catch{}else x(n)?n=+n:n==="true"?n=!0:n==="false"&&(n=!1);r({...f,data:n})}else r(f)},a),this}removeEventListener(e,r,a){return this.off(e,r,a),this}close(){return this.ws.close(),this}},Q=(t,e="",r)=>new Proxy(()=>{},{get(a,f,n){return Q(t,`${e}/${f.toString()}`,r)},apply(a,f,[n,i={}]=[{},{}]){let p=n!==void 0&&(typeof n!="object"||Array.isArray(n))?n:void 0,{$query:k,$fetch:w,$headers:T,$transform:s,getRaw:h,...g}=n??{};p??=g;let K=e.lastIndexOf("/"),F=e.slice(K+1).toUpperCase(),L=U(t,K===-1?"/":e.slice(0,K),Object.assign(i.query??{},k)),R=r.fetcher??fetch,c=r.transform?Array.isArray(r.transform)?r.transform:[r.transform]:void 0,u=s?Array.isArray(s)?s:[s]:void 0;return u&&(c?c=u.concat(c):c=u),F==="SUBSCRIBE"?new H(L.replace(/^([^]+):\/\//,L.startsWith("https://")?"wss://":"ws://")):(async E=>{let y,O={...r.$fetch?.headers,...w?.headers,...i.headers,...T};if(F!=="GET"&&F!=="HEAD"){y=Object.keys(p).length||Array.isArray(p)?p:void 0;let l=y&&(typeof y=="object"||Array.isArray(p));if(l&&oe(y)){let j=new FormData;for(let[$,v]of Object.entries(y))if(B)j.append($,v);else if(v instanceof File)j.append($,await J(v));else if(v instanceof FileList)for(let W=0;W<v.length;W++)j.append($,await J(v[W]));else if(Array.isArray(v))for(let W=0;W<v.length;W++){let I=v[W];j.append($,I instanceof File?await J(I):I)}else j.append($,v);y=j}else y!=null&&(O["content-type"]=l?"application/json":"text/plain",y=l?JSON.stringify(y):p)}let S=await R(L,{method:F,body:y,...r.$fetch,...i.fetch,...w,headers:O}),o;if(E.getRaw)return S;switch(S.headers.get("Content-Type")?.split(";")[0]){case"application/json":o=await S.json();break;default:o=await S.text().then(l=>x(l)?+l:l==="true"?!0:l==="false"?!1:l)}let d=S.status>=300||S.status<200?new A(S.status,o):null,m={data:o,error:d,response:S,status:S.status,headers:S.headers};if(c)for(let l of c){let b=l(m);b instanceof Promise&&(b=await b),b!=null&&(m=b)}return m})({getRaw:h})}}),X=(t,e={fetcher:fetch})=>new Proxy({},{get(r,a){return Q(t,a,e)}});var Y=(t,e)=>(r,{query:a,params:f,body:n,...i}={})=>{f&&Object.entries(f).forEach(([s,h])=>{r=r.replace(`:${s}`,h)});let p=i.headers?.["Content-Type"];if(!p||p==="application/json")try{n=JSON.stringify(n)}catch{}let k=e?.fetcher||globalThis.fetch,w=a?`?${new URLSearchParams(a).toString()}`:"",T=()=>k(t+r+w,{...i,method:i.method?.toUpperCase()||"GET",headers:n?{"content-type":"application/json",...i.headers}:i.headers,body:n}).then(async s=>{let h;switch(s.headers.get("Content-Type")?.split(";")[0]){case"application/json":h=await s.json();break;default:h=await s.text().then(g=>x(g)?parseInt(g):g==="true"?!0:g==="false"?!1:g);break}return s.status>300?{data:null,status:s.status,headers:s.headers,retry:T,error:new A(s.status,h)}:{data:h,error:null,status:s.status,headers:s.headers,retry:T}});return T()};0&&(module.exports={edenFetch,edenTreaty,treaty});
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{b as C}from"./chunk-Q3DJMDQ2.mjs";import{a as H}from"./chunk-FGCQ7BRI.mjs";import{b as k,c as F}from"./chunk-HUZ6GXDC.mjs";var T=class{constructor(e){this.url=e;this.ws=new WebSocket(e)}ws;send(e){return Array.isArray(e)?(e.forEach(r=>this.send(r)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,r,y){return this.addEventListener(e,r,y)}off(e,r,y){return this.ws.removeEventListener(e,r,y),this}subscribe(e,r){return this.addEventListener("message",e,r)}addEventListener(e,r,y){return this.ws.addEventListener(e,v=>{if(e==="message"){let c=v.data.toString(),i=c.charCodeAt(0);if(i===47||i===123)try{c=JSON.parse(c)}catch{}else k(c)?c=+c:c==="true"?c=!0:c==="false"&&(c=!1);r({...v,data:c})}else r(v)},y),this}removeEventListener(e,r,y){return this.off(e,r,y),this}close(){return this.ws.close(),this}};var I=["get","post","put","delete","patch","options","head","connect","subscribe"],N=["localhost","127.0.0.1","0.0.0.0"],O=typeof FileList>"u",M=t=>O?t instanceof Blob:t instanceof FileList||t instanceof File,P=t=>{if(!t)return!1;for(let e in t)if(M(t[e])||Array.isArray(t[e])&&t[e].find(M))return!0;return!1},L=t=>O?t:new Promise(e=>{let r=new FileReader;r.onload=()=>{let y=new File([r.result],t.name,{lastModified:t.lastModified,type:t.type});e(y)},r.readAsArrayBuffer(t)}),S=(t,e,r=[],y)=>new Proxy(()=>{},{get(v,c){return S(t,e,c==="index"?r:[...r,c],y)},apply(v,c,[i,h={}]){if(!i||h||typeof i=="object"&&Object.keys(i).length!==1||I.includes(r.at(-1))){let w=r.pop(),m="/"+r.join("/"),{fetcher:R=fetch,headers:s,onRequest:E,onResponse:g,fetch:q}=e,W=w==="get"||w==="head"||w==="subscribe";s={...typeof s=="object"&&!Array.isArray(s)?s:{},...W?i?.headers:h?.headers};let K=W?i?.query:h?.query,b="";if(K)for(let[a,o]of Object.entries(K))b+=(b?"&":"?")+`${a}=${o}`;if(typeof e.headers=="function"&&!(s instanceof Headers)){let a=e.headers(m,h);a&&(s={...s,...a})}else if(Array.isArray(e.headers)&&e.headers.every(a=>typeof a=="function"))for(let a of e.headers){let o=a(m,h);o&&(s={...s,...o})}else if(s instanceof Headers){s||(s={});for(let[a,o]of Object.entries(s))s[a]=o}if(w==="subscribe"){let a=t.replace(/^([^]+):\/\//,t.startsWith("https://")?"wss://":t.startsWith("http://")||N.find(o=>t.includes(o))?"ws://":"wss://")+m+b;return new T(a)}return(async()=>{let a=(s instanceof Headers?s.get("content-type"):Array.isArray(s)?s.find(n=>Array.isArray(n)&&n[0]==="headers"?n[1]:!1):typeof s=="function"?s(m,h):s?.contentType)||h?.headers?.contentType;if(!a)if(typeof i=="object")a="application/json",i=JSON.stringify(i);else if(P(i)){let n=new FormData;for(let[f,l]of Object.entries(i)){if(O){n.append(f,l);continue}if(l instanceof File){n.append(f,await L(l));continue}if(l instanceof FileList){for(let d=0;d<l.length;d++)n.append(f,await L(l[d]));continue}if(Array.isArray(l)){for(let d=0;d<l.length;d++){let x=l[d];n.append(f,x instanceof File?await L(x):x)}continue}n.append(f,l)}i=n}else i!=null&&(a="text/plain");let o={method:w,body:i,...q,headers:{...s,"content-type":a}};if(W&&delete o.body,E){Array.isArray(E)||(E=[E]);for(let n of E){let f=await n(m,o);typeof f=="object"&&(o={...o,...f,headers:{...o.headers,...f.headers}})}}let j=t+m+b,p=await(y?.handle(new Request(j,o))??R(j,o)),u,A;if(g){Array.isArray(g)||(g=[g]);for(let n of g)try{if(u=await n(p.clone()),u!==void 0)break}catch(f){f instanceof F?A=f:A=new F(422,f);break}}if(u===void 0){switch(p.headers.get("Content-Type")?.split(";")[0]){case"application/json":u=await p.json();break;case"application/octet-stream":u=await p.arrayBuffer();break;default:u=await p.text().then(n=>{if(k(n))return+n;if(n==="true")return!0;if(n==="false")return!1;if(!n)return n;let f=new Date(n);return Number.isNaN(f.getTime())?n:f})}(p.status>=300||p.status<200)&&(A=new F(p.status,u),u=void 0)}return{data:u,error:A,response:p,status:p.status,headers:p.headers}})()}return typeof i=="object"?S(t,e,[...r,Object.values(i)[0]],y):S(t,e,r)}}),_=(t,e={})=>typeof t=="string"?(t.includes("://")||(t=(N.find(r=>t.includes(r))?"http://":"https://")+t),t.endsWith("/")&&(t=t.slice(0,-1)),S(t,e)):(typeof window<"u"&&console.warn("Elysia instance server found on client side, this is not recommended for security reason. Use generic type instead."),S("http://e.ly",e,[],t));export{H as edenFetch,C as edenTreaty,_ as treaty};
1
+ import{b as C}from"./chunk-Q3DJMDQ2.mjs";import{a as H}from"./chunk-FGCQ7BRI.mjs";import{b as k,c as F}from"./chunk-HUZ6GXDC.mjs";var T=class{constructor(e){this.url=e;this.ws=new WebSocket(e)}ws;send(e){return Array.isArray(e)?(e.forEach(r=>this.send(r)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,r,y){return this.addEventListener(e,r,y)}off(e,r,y){return this.ws.removeEventListener(e,r,y),this}subscribe(e,r){return this.addEventListener("message",e,r)}addEventListener(e,r,y){return this.ws.addEventListener(e,v=>{if(e==="message"){let c=v.data.toString(),i=c.charCodeAt(0);if(i===47||i===123)try{c=JSON.parse(c)}catch{}else k(c)?c=+c:c==="true"?c=!0:c==="false"&&(c=!1);r({...v,data:c})}else r(v)},y),this}removeEventListener(e,r,y){return this.off(e,r,y),this}close(){return this.ws.close(),this}};var I=["get","post","put","delete","patch","options","head","connect","subscribe"],N=["localhost","127.0.0.1","0.0.0.0"],O=typeof FileList>"u",M=t=>O?t instanceof Blob:t instanceof FileList||t instanceof File,P=t=>{if(!t)return!1;for(let e in t)if(M(t[e])||Array.isArray(t[e])&&t[e].find(M))return!0;return!1},L=t=>O?t:new Promise(e=>{let r=new FileReader;r.onload=()=>{let y=new File([r.result],t.name,{lastModified:t.lastModified,type:t.type});e(y)},r.readAsArrayBuffer(t)}),S=(t,e,r=[],y)=>new Proxy(()=>{},{get(v,c){return S(t,e,c==="index"?r:[...r,c],y)},apply(v,c,[i,h]){if(!i||h||typeof i=="object"&&Object.keys(i).length!==1||I.includes(r.at(-1))){let w=r.pop(),m="/"+r.join("/"),{fetcher:R=fetch,headers:s,onRequest:E,onResponse:g,fetch:q}=e,W=w==="get"||w==="head"||w==="subscribe";s={...typeof s=="object"&&!Array.isArray(s)?s:{},...W?i?.headers:h?.headers};let K=W?i?.query:h?.query,b="";if(K)for(let[a,o]of Object.entries(K))b+=(b?"&":"?")+`${a}=${o}`;if(typeof e.headers=="function"&&!(s instanceof Headers)){let a=e.headers(m,h??{});a&&(s={...s,...a})}else if(Array.isArray(e.headers)&&e.headers.every(a=>typeof a=="function"))for(let a of e.headers){let o=a(m,h??{});o&&(s={...s,...o})}else if(s instanceof Headers){s||(s={});for(let[a,o]of Object.entries(s))s[a]=o}if(w==="subscribe"){let a=t.replace(/^([^]+):\/\//,t.startsWith("https://")?"wss://":t.startsWith("http://")||N.find(o=>t.includes(o))?"ws://":"wss://")+m+b;return new T(a)}return(async()=>{let a=(s instanceof Headers?s.get("content-type"):Array.isArray(s)?s.find(n=>Array.isArray(n)&&n[0]==="headers"?n[1]:!1):typeof s=="function"?s(m,h??{}):s?.contentType)||h?.headers?.contentType;if(!a)if(typeof i=="object")a="application/json",i=JSON.stringify(i);else if(P(i)){let n=new FormData;for(let[f,l]of Object.entries(i)){if(O){n.append(f,l);continue}if(l instanceof File){n.append(f,await L(l));continue}if(l instanceof FileList){for(let d=0;d<l.length;d++)n.append(f,await L(l[d]));continue}if(Array.isArray(l)){for(let d=0;d<l.length;d++){let x=l[d];n.append(f,x instanceof File?await L(x):x)}continue}n.append(f,l)}i=n}else i!=null&&(a="text/plain");let o={method:w,body:i,...q,headers:{...s,"content-type":a}};if(W&&delete o.body,E){Array.isArray(E)||(E=[E]);for(let n of E){let f=await n(m,o);typeof f=="object"&&(o={...o,...f,headers:{...o.headers,...f.headers}})}}let j=t+m+b,p=await(y?.handle(new Request(j,o))??R(j,o)),u,A;if(g){Array.isArray(g)||(g=[g]);for(let n of g)try{if(u=await n(p.clone()),u!==void 0)break}catch(f){f instanceof F?A=f:A=new F(422,f);break}}if(u===void 0){switch(p.headers.get("Content-Type")?.split(";")[0]){case"application/json":u=await p.json();break;case"application/octet-stream":u=await p.arrayBuffer();break;default:u=await p.text().then(n=>{if(k(n))return+n;if(n==="true")return!0;if(n==="false")return!1;if(!n)return n;let f=new Date(n);return Number.isNaN(f.getTime())?n:f})}(p.status>=300||p.status<200)&&(A=new F(p.status,u),u=void 0)}return{data:u,error:A,response:p,status:p.status,headers:p.headers}})()}return typeof i=="object"?S(t,e,[...r,Object.values(i)[0]],y):S(t,e,r)}}),_=(t,e={})=>typeof t=="string"?(t.includes("://")||(t=(N.find(r=>t.includes(r))?"http://":"https://")+t),t.endsWith("/")&&(t=t.slice(0,-1)),S(t,e)):(typeof window<"u"&&console.warn("Elysia instance server found on client side, this is not recommended for security reason. Use generic type instead."),S("http://e.ly",e,[],t));export{H as edenFetch,C as edenTreaty,_ as treaty};
package/dist/treaty.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Elysia, InputSchema } from 'elysia';
2
- import { P as Prettify, I as IsUnknown, M as MapError, a as IsNever, E as EdenFetchError } from './types-DNydNaKe.js';
2
+ import { P as Prettify, a as IsUnknown, M as MapError, I as IsNever, E as EdenFetchError } from './types-DcP_1Cpm.js';
3
3
 
4
4
  /// <reference lib="dom" />
5
5
 
package/dist/treaty.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Elysia, InputSchema } from 'elysia';
2
- import { P as Prettify, I as IsUnknown, M as MapError, a as IsNever, E as EdenFetchError } from './types-DNydNaKe.js';
2
+ import { P as Prettify, a as IsUnknown, M as MapError, I as IsNever, E as EdenFetchError } from './types-DcP_1Cpm.js';
3
3
 
4
4
  /// <reference lib="dom" />
5
5
 
@@ -2,7 +2,7 @@
2
2
  /// <reference lib="dom" />
3
3
  import type { Elysia } from 'elysia';
4
4
  import { EdenWS } from './ws';
5
- import type { Prettify } from '../types';
5
+ import type { IsNever, Prettify } from '../types';
6
6
  type Files = File | FileList;
7
7
  type ReplaceBlobWithFiles<in out RecordType extends Record<string, unknown>> = {
8
8
  [K in keyof RecordType]: RecordType[K] extends Blob | Blob[] ? Files : RecordType[K];
@@ -17,7 +17,7 @@ export declare namespace Treaty {
17
17
  _routes: infer Schema extends Record<string, any>;
18
18
  } ? Prettify<Sign<Schema>> : 'Please install Elysia before using Eden';
19
19
  export type Sign<in out Route extends Record<string, any>> = {
20
- [K in keyof Route as K extends '/' | '' ? 'index' : K extends `:${string}` ? never : K]: K extends 'subscribe' ? (undefined extends Route['subscribe']['headers'] ? {
20
+ [K in keyof Route as K extends `:${string}` ? never : K]: K extends 'subscribe' ? (undefined extends Route['subscribe']['headers'] ? {
21
21
  headers?: Record<string, unknown>;
22
22
  } : {
23
23
  headers: Route['subscribe']['headers'];
@@ -39,7 +39,10 @@ export declare namespace Treaty {
39
39
  query?: Record<string, unknown>;
40
40
  } : {
41
41
  query: Query;
42
- }) extends infer Param ? {} extends Param ? undefined extends Body ? K extends 'get' | 'head' ? (options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : (body?: Body, options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : (body: Body extends Record<string, unknown> ? ReplaceBlobWithFiles<Body> : Body, options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : K extends 'get' | 'head' ? (options: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : (body: Body extends Record<string, unknown> ? ReplaceBlobWithFiles<Body> : Body, options: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : never : keyof Route[K] extends `:${infer Param}` ? (params: Record<Param, string>) => Prettify<Prettify<Sign<Route[K]>> & Sign<Route[K][`:${Param}`]>> : Prettify<Sign<Route[K]>>;
42
+ }) extends infer Param ? {} extends Param ? undefined extends Body ? K extends 'get' | 'head' ? (options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : (body?: Body, options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : (body: Body extends Record<string, unknown> ? ReplaceBlobWithFiles<Body> : Body, options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : K extends 'get' | 'head' ? (options: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : (body: Body extends Record<string, unknown> ? ReplaceBlobWithFiles<Body> : Body, options: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : never : Extract<keyof Route[K], `:${string}`> extends infer Path extends string ? IsNever<Path> extends true ? Prettify<Sign<Route[K]>> : // ! DO NOT USE PRETTIFY ON THIS LINE, OTHERWISE FUNCTION CALLING WILL BE OMITTED
43
+ ((params: {
44
+ [param in Path extends `:${infer Param}` ? Param : never]: string | number;
45
+ }) => Prettify<Sign<Route[K][Path]>>) & Prettify<Sign<Route[K]>> : never;
43
46
  };
44
47
  export interface Config {
45
48
  fetch?: Omit<RequestInit, 'headers' | 'method'>;
@@ -40,4 +40,4 @@ type TreatyToPath<T, Path extends string = ''> = UnionToIntersect<T extends Reco
40
40
  } : TreatyToPath<T[K], `${Path}/${K & string}`>;
41
41
  }[keyof T] : {}>;
42
42
 
43
- export { EdenFetchError as E, type IsUnknown as I, type MapError as M, type Prettify as P, type TreatyToPath as T, type IsNever as a };
43
+ export { EdenFetchError as E, type IsNever as I, type MapError as M, type Prettify as P, type TreatyToPath as T, type IsUnknown as a };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elysiajs/eden",
3
- "version": "1.0.0-rc.2",
3
+ "version": "1.0.0-rc.4",
4
4
  "description": "Fully type-safe Elysia client",
5
5
  "author": {
6
6
  "name": "saltyAom",
@@ -59,7 +59,7 @@
59
59
  "@elysiajs/cors": "0.7.0",
60
60
  "@types/bun": "^1.0.3",
61
61
  "@types/node": "^18.15.5",
62
- "elysia": "1.0.0-rc.9",
62
+ "elysia": "1.0.0-rc.11",
63
63
  "esbuild": "^0.19.3",
64
64
  "eslint": "^8.26.0",
65
65
  "expect-type": "^0.17.3",