@elysiajs/eden 1.4.5 → 1.4.7

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.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { InputSchema, Elysia, ELYSIA_FORM_DATA } from 'elysia';
2
- import { P as Prettify, b as MaybeEmptyObject, a as IsNever, N as Not } from './types-BdHMTa_C.js';
2
+ import { b as ThrowHttpError, P as Prettify, c as MaybeEmptyObject, a as IsNever, N as Not } from './types-0YqzVuGd.js';
3
3
 
4
4
  declare class EdenWS<in out Schema extends InputSchema<any> = {}> {
5
5
  url: string;
@@ -18,49 +18,71 @@ type And<A extends boolean, B extends boolean> = A extends true ? B extends true
18
18
  type ReplaceGeneratorWithAsyncGenerator<in out RecordType extends Record<string, unknown>> = {
19
19
  [K in keyof RecordType]: IsNever<RecordType[K]> extends true ? RecordType[K] : RecordType[K] extends Generator<infer A, infer B, infer C> ? void extends B ? AsyncGenerator<A, B, C> : And<IsNever<A>, void extends B ? false : true> extends true ? B : AsyncGenerator<A, B, C> | B : RecordType[K] extends AsyncGenerator<infer A, infer B, infer C> ? And<Not<IsNever<A>>, void extends B ? true : false> extends true ? AsyncGenerator<A, B, C> : And<IsNever<A>, void extends B ? false : true> extends true ? B : AsyncGenerator<A, B, C> | B : RecordType[K] extends ReadableStream<infer A> ? AsyncGenerator<A, void, unknown> : RecordType[K];
20
20
  } & {};
21
- type Enumerate<N extends number, Acc extends number[] = []> = Acc['length'] extends N ? Acc[number] : Enumerate<N, [...Acc, Acc['length']]>;
22
- type IntegerRange<F extends number, T extends number> = Exclude<Enumerate<T>, Enumerate<F>>;
23
- type SuccessCodeRange = IntegerRange<200, 300>;
21
+ type SuccessCodes = 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 226;
24
22
  type MaybeArray<T> = T | T[];
23
+ type MaybeArrayFile<T> = T extends File[] ? File[] | File : T extends File ? File : T;
24
+ type RelaxFileArrays<T> = T extends Record<string, unknown> ? {
25
+ [K in keyof T]: MaybeArrayFile<T[K]>;
26
+ } : T;
27
+ type SerializeQueryParams<T> = T extends Record<string, any> ? {
28
+ [K in keyof T]: T[K] extends Date ? string | Date : T[K] extends Date | undefined ? string | Date | undefined : T[K];
29
+ } : T;
25
30
  declare namespace Treaty {
26
- interface TreatyParam {
31
+ export interface TreatyParam {
27
32
  fetch?: RequestInit;
33
+ throwHttpError?: ThrowHttpError;
28
34
  }
29
- export type Create<App extends Elysia<any, any, any, any, any, any, any>> = App extends {
35
+ export type Create<App extends Elysia<any, any, any, any, any, any, any>, Head extends Record<string, unknown> = {}> = App extends {
30
36
  '~Routes': infer Schema extends Record<any, any>;
31
- } ? Prettify<Sign<Schema>> & CreateParams<Schema> : 'Please install Elysia before using Eden';
32
- export type Sign<in out Route extends Record<any, any>> = {
33
- [K in keyof Route as K extends `:${string}` ? never : K]: K extends 'subscribe' ? MaybeEmptyObject<Route['subscribe']['headers'], 'headers'> & MaybeEmptyObject<Route['subscribe']['query'], 'query'> extends infer Param ? (options?: Param) => EdenWS<Route['subscribe']> : never : Route[K] extends {
37
+ } ? Prettify<Sign<Schema, Head>> & CreateParams<Schema, Head> : 'Please install Elysia before using Eden';
38
+ type ToTreatyParam<Target, Head extends Record<string, unknown>> = Prettify<TreatyParam & ({} extends Head ? Target : // @ts-ignore
39
+ Omit<Target['headers'], keyof Head> & Partial<Head> extends infer Head ? {} extends Head ? {
40
+ headers?: Head;
41
+ } & Omit<Target, 'headers'> : {
42
+ headers: Head;
43
+ } & Omit<Target, 'headers'> : Target)>;
44
+ export type Sign<in out Route extends Record<any, any>, in out Head extends Record<string, unknown> = {}> = {
45
+ [K in keyof Route as K extends `:${string}` ? never : K]: K extends 'subscribe' ? MaybeEmptyObject<Route['subscribe']['headers'], 'headers'> & MaybeEmptyObject<SerializeQueryParams<Route['subscribe']['query']>, 'query'> extends infer Param ? (options?: Param) => EdenWS<Route['subscribe']> : never : Route[K] extends {
34
46
  body: infer Body;
35
47
  headers: infer Headers;
36
48
  params: any;
37
49
  query: infer Query;
38
50
  response: infer Res extends Record<number, unknown>;
39
- } ? MaybeEmptyObject<Headers, 'headers'> & MaybeEmptyObject<Query, 'query'> extends infer Param ? {} extends Param ? undefined extends Body ? K extends 'get' | 'head' ? (options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<ReplaceGeneratorWithAsyncGenerator<Res>>> : (body?: Body, options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<ReplaceGeneratorWithAsyncGenerator<Res>>> : K extends 'get' | 'head' ? (options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<ReplaceGeneratorWithAsyncGenerator<Res>>> : {} extends Body ? (body?: Body, options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<ReplaceGeneratorWithAsyncGenerator<Res>>> : (body: Body, options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<ReplaceGeneratorWithAsyncGenerator<Res>>> : K extends 'get' | 'head' ? (options: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<ReplaceGeneratorWithAsyncGenerator<Res>>> : (body: Body, options: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<ReplaceGeneratorWithAsyncGenerator<Res>>> : never : CreateParams<Route[K]>;
51
+ } ? MaybeEmptyObject<Headers, 'headers'> & MaybeEmptyObject<SerializeQueryParams<Query>, 'query'> extends infer Param ? {} extends Param ? undefined extends Body ? K extends 'get' | 'head' ? (options?: ToTreatyParam<Param, Head>) => Promise<TreatyResponse<ReplaceGeneratorWithAsyncGenerator<Res>>> : (body?: RelaxFileArrays<Body>, options?: ToTreatyParam<Param, Head>) => Promise<TreatyResponse<ReplaceGeneratorWithAsyncGenerator<Res>>> : K extends 'get' | 'head' ? (options?: ToTreatyParam<Param, Head>) => Promise<TreatyResponse<ReplaceGeneratorWithAsyncGenerator<Res>>> : {} extends Body ? (body?: RelaxFileArrays<Body>, options?: ToTreatyParam<Param, Head>) => Promise<TreatyResponse<ReplaceGeneratorWithAsyncGenerator<Res>>> : (body: RelaxFileArrays<Body>, options?: ToTreatyParam<Param, Head>) => Promise<TreatyResponse<ReplaceGeneratorWithAsyncGenerator<Res>>> : K extends 'get' | 'head' ? (options: ToTreatyParam<Param, Head>) => Promise<TreatyResponse<ReplaceGeneratorWithAsyncGenerator<Res>>> : (body: RelaxFileArrays<Body>, options: ToTreatyParam<Param, Head>) => Promise<TreatyResponse<ReplaceGeneratorWithAsyncGenerator<Res>>> : never : CreateParams<Route[K], Head>;
40
52
  };
41
- type CreateParams<Route extends Record<string, any>> = Extract<keyof Route, `:${string}`> extends infer Path extends string ? IsNever<Path> extends true ? Prettify<Sign<Route>> : // ! DO NOT USE PRETTIFY ON THIS LINE, OTHERWISE FUNCTION CALLING WILL BE OMITTED
53
+ type CreateParams<Route extends Record<string, any>, Head extends Record<string, unknown> = {}> = Extract<keyof Route, `:${string}`> extends infer Path extends string ? IsNever<Path> extends true ? Prettify<Sign<Route, Head>> : // ! DO NOT USE PRETTIFY ON THIS LINE, OTHERWISE FUNCTION CALLING WILL BE OMITTED
42
54
  (((params: {
43
55
  [param in Path extends `:${infer Param}` ? Param extends `${infer Param}?` ? Param : Param : never]: string | number;
44
- }) => Prettify<Sign<Route[Path]>> & CreateParams<Route[Path]>) & Prettify<Sign<Route>>) & (Path extends `:${string}?` ? CreateParams<Route[Path]> : {}) : never;
45
- export interface Config {
56
+ }) => Prettify<Sign<Route[Path], Head>> & CreateParams<Route[Path], Head>) & Prettify<Sign<Route, Head>>) & (Path extends `:${string}?` ? CreateParams<Route[Path], Head> : {}) : never;
57
+ export interface Config<Head extends {} = {}> {
46
58
  fetch?: Omit<RequestInit, 'headers' | 'method'>;
47
59
  fetcher?: typeof fetch;
48
- headers?: MaybeArray<RequestInit['headers'] | ((path: string, options: RequestInit) => RequestInit['headers'] | void)>;
60
+ headers?: MaybeArray<Head | RequestInit['headers'] | ((path: string, options: RequestInit) => MaybePromise<Head | RequestInit['headers'] | void>)>;
49
61
  onRequest?: MaybeArray<(path: string, options: RequestInit) => MaybePromise<RequestInit | void>>;
50
62
  onResponse?: MaybeArray<(response: Response) => MaybePromise<unknown>>;
51
63
  keepDomain?: boolean;
64
+ /**
65
+ * @default true
66
+ *
67
+ * parse stringifed Date to new Date
68
+ */
69
+ parseDate?: boolean;
70
+ /**
71
+ *
72
+ */
73
+ throwHttpError?: ThrowHttpError;
52
74
  }
53
75
  export type TreatyResponse<Res extends Record<number, unknown>> = {
54
- data: Res[Extract<keyof Res, SuccessCodeRange>] extends {
76
+ data: Res[Extract<keyof Res, SuccessCodes>] extends {
55
77
  [ELYSIA_FORM_DATA]: infer Data;
56
- } ? Data : Res[Extract<keyof Res, SuccessCodeRange>];
78
+ } ? Data : Res[Extract<keyof Res, SuccessCodes>];
57
79
  error: null;
58
80
  response: Response;
59
81
  status: number;
60
82
  headers: ResponseInit['headers'];
61
83
  } | {
62
84
  data: null;
63
- error: Exclude<keyof Res, SuccessCodeRange> extends never ? {
85
+ error: Exclude<keyof Res, SuccessCodes> extends never ? {
64
86
  status: unknown;
65
87
  value: unknown;
66
88
  } : {
@@ -70,7 +92,7 @@ declare namespace Treaty {
70
92
  [ELYSIA_FORM_DATA]: infer Data;
71
93
  } ? Data : Res[Status];
72
94
  };
73
- }[Exclude<keyof Res, SuccessCodeRange>];
95
+ }[Exclude<keyof Res, SuccessCodes>];
74
96
  response: Response;
75
97
  status: number;
76
98
  headers: ResponseInit['headers'];
@@ -88,7 +110,9 @@ declare namespace Treaty {
88
110
  export { };
89
111
  }
90
112
 
91
- declare function streamResponse(response: Response): AsyncGenerator<any, void, unknown>;
92
- declare const treaty: <const App extends Elysia<any, any, any, any, any, any, any>>(domain: string | App, config?: Treaty.Config) => Treaty.Create<App>;
113
+ declare function streamResponse(response: Response, options?: {
114
+ parseDate?: boolean;
115
+ }): AsyncGenerator<Record<string, unknown>, void, any>;
116
+ declare const treaty: <const App extends Elysia<any, any, any, any, any, any, any>, const Head extends {} = {}>(domain: string | App, config?: Treaty.Config<Head>) => Treaty.Create<App, Head>;
93
117
 
94
118
  export { Treaty, streamResponse, treaty };
@@ -1,6 +1,4 @@
1
- "use strict";var Eden=(()=>{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});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 Eden=(()=>{var H=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var ee=Object.prototype.hasOwnProperty;var te=(e,t)=>{for(var n in t)H(e,n,{get:t[n],enumerable:!0})},ne=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Y(t))!ee.call(e,s)&&s!==n&&H(e,s,{get:()=>t[s],enumerable:!(r=X(t,s))||r.enumerable});return e};var re=e=>ne(H({},"__esModule",{value:!0}),e);var pe={};te(pe,{streamResponse:()=>G,treaty:()=>de});var x=class extends Error{constructor(n,r){super(r+"");this.status=n;this.value=r}};var se=/(\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))/,ae=/(?: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\([^)]+\)/,ie=/^(?:(?:(?:(?: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)?)?$/,oe=e=>e.trim().length!==0&&!Number.isNaN(Number(e)),N=(e,t)=>{if(typeof e!="string"||t?.parseDate===!1)return null;let n=e.replace(/"/g,"");if(se.test(n)||ae.test(n)||ie.test(n)){let r=new Date(n);if(!Number.isNaN(r.getTime()))return r}return null},ce=e=>{let t=e.charCodeAt(0),n=e.charCodeAt(e.length-1);return t===123&&n===125||t===91&&n===93},fe=(e,t)=>JSON.parse(e,(n,r)=>{let s=N(r,t);return s||r}),W=(e,t)=>{if(!e)return e;if(oe(e))return+e;if(e==="true")return!0;if(e==="false")return!1;if(t?.parseDate!==!1){let n=N(e,t);if(n)return n}if(ce(e))try{return fe(e,t)}catch{}return e},P=(e,t)=>{let n=e.data.toString();return n==="null"?null:W(n,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,s=>{if(t==="message"){let o=P(s);n({...s,data:o})}else n(s)},r),this}removeEventListener(t,n,r){return this.off(t,n,r),this}close(){return this.ws.close(),this}};var ue=["get","post","put","delete","patch","options","head","connect","subscribe"],V=(e,t)=>typeof t=="function"?t(e):t===!0,_=["localhost","127.0.0.1","0.0.0.0"],q=typeof FileList>"u",C=e=>q?e instanceof Blob:e instanceof FileList||e instanceof File,le=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=>q?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)}),D=async(e,t,n={},r={})=>{if(Array.isArray(e)){for(let s of e)if(!Array.isArray(s))r=await D(s,t,n,r);else{let o=s[0];if(typeof o=="string")r[o.toLowerCase()]=s[1];else for(let[i,u]of o)r[i.toLowerCase()]=u}return r}if(!e)return r;switch(typeof e){case"function":if(e instanceof Headers)return D(e,t,n,r);let s=await e(t,n);return s?D(s,t,n,r):r;case"object":if(e instanceof Headers)return e.forEach((o,i)=>{r[i.toLowerCase()]=o}),r;for(let[o,i]of Object.entries(e))r[o.toLowerCase()]=i;return r;default:return r}};function U(e,t){let n=e.split(`
2
+ `),r={};for(let s of n){if(!s||s.startsWith(":"))continue;let o=s.indexOf(":");if(o>0){let i=s.slice(0,o).trim(),u=s.slice(o+1).replace(/^ /,"");r[i]=u&&W(u,t)}}return Object.keys(r).length>0?r:null}function*B(e,t){let n;for(;(n=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));return Z(ie);})();
4
+ `))!==-1;){let r=e.value.slice(0,n);if(e.value=e.value.slice(n+2),r.trim()){let s=U(r,t);s&&(yield s)}}}async function*G(e,t){let n=e.body;if(!n)return;let r=n.getReader(),s=new TextDecoder("utf-8"),o={value:""};try{for(;;){let{done:u,value:O}=await r.read();if(u)break;let S=typeof O=="string"?O:s.decode(O,{stream:!0});o.value+=S,yield*B(o,t)}let i=s.decode();if(i&&(o.value+=i),yield*B(o,t),o.value.trim()){let u=U(o.value,t);u&&(yield u)}}finally{r.releaseLock()}}var j=(e,t,n=[],r)=>new Proxy(()=>{},{get(s,o){if(!(n.length===0&&(o==="then"||o==="catch"||o==="finally")))return j(e,t,[...n,o],r)},apply(s,o,[i,u]){if(!i||u||typeof i=="object"&&Object.keys(i).length!==1||ue.includes(n.at(-1))){let O=[...n],S=O.pop(),b="/"+O.join("/"),{fetcher:Z=fetch,headers:F,onRequest:w,onResponse:T,fetch:$}=t,k=S==="get"||S==="head"||S==="subscribe",I=k?i?.query:u?.query,R="";if(I){let a=(m,y)=>{y!=null&&(y instanceof Date&&(y=y.toISOString()),R+=(R?"&":"?")+`${encodeURIComponent(m)}=${encodeURIComponent(typeof y=="object"?JSON.stringify(y):y+"")}`)};for(let[m,y]of Object.entries(I)){if(Array.isArray(y)){for(let L of y)a(m,L);continue}a(m,y)}}if(S==="subscribe"){let a=e.replace(/^([^]+):\/\//,e.startsWith("https://")?"wss://":e.startsWith("http://")||_.find(m=>e.includes(m))?"ws://":"wss://")+b+R;return new M(a)}return(async()=>{F=await D(F,b,u);let a={method:S?.toUpperCase(),body:i,...$,headers:F};a.headers={...F,...await D(k?i?.headers:u?.headers,b,a)};let m=k&&typeof i=="object"?i.fetch:u?.fetch,L=(k&&typeof i=="object"?i.throwHttpError:u?.throwHttpError)??t.throwHttpError;if(a={...a,...m},k&&delete a.body,w){Array.isArray(w)||(w=[w]);for(let l of w){let c=await l(b,a);typeof c=="object"&&(a={...a,...c,headers:{...a.headers,...await D(c.headers,b,a)}})}}if(k&&delete a.body,le(i)){let l=new FormData,c=f=>{if(typeof f=="string"||C(f))return!1;if(typeof f=="object"){if(f!==null)return!0;if(f instanceof Date)return!1}return!1},g=async f=>f instanceof File?await K(f):c(f)?JSON.stringify(f):f;for(let[f,p]of Object.entries(a.body)){if(Array.isArray(p)){if(p.some(A=>typeof A=="object"&&A!==null&&!C(A)))l.append(f,JSON.stringify(p));else for(let A=0;A<p.length;A++){let z=p[A],Q=await g(z);l.append(f,Q)}continue}if(q){if(Array.isArray(p))for(let v of p)l.append(f,await g(v));else l.append(f,await g(p));continue}if(p instanceof File){l.append(f,await K(p));continue}if(p instanceof FileList){for(let v=0;v<p.length;v++)l.append(f,await K(p[v]));continue}l.append(f,await g(p))}a.body=l}else typeof i=="object"?(a.headers["content-type"]="application/json",a.body=JSON.stringify(i)):i!=null&&(a.headers["content-type"]="text/plain");if(k&&delete a.body,w){Array.isArray(w)||(w=[w]);for(let l of w){let c=await l(b,a);typeof c=="object"&&(a={...a,...c,headers:{...a.headers,...await D(c.headers,b,a)}})}}u?.headers?.["content-type"]&&(a.headers["content-type"]=u?.headers["content-type"]);let J=e+b+R,d;try{d=await(r?.handle(new Request(J,a))??Z(J,a))}catch(l){let c=new x(503,l);if(V(c,L))throw c;return{data:null,error:c,response:void 0,status:503,headers:void 0}}let h=null,E=null;if(T){Array.isArray(T)||(T=[T]);for(let l of T)try{let c=await l(d.clone());if(c!=null){h=c;break}}catch(c){c instanceof x?E=c:E=new x(422,c);break}}if(h!==null)return{data:h,error:E,response:d,status:d.status,headers:d.headers};switch(d.headers.get("Content-Type")?.split(";")[0]){case"text/event-stream":h=G(d,{parseDate:t.parseDate});break;case"application/json":h=JSON.parse(await d.text(),(c,g)=>{if(typeof g!="string")return g;let f=N(g,{parseDate:t.parseDate});return f||g});break;case"application/octet-stream":h=await d.arrayBuffer();break;case"multipart/form-data":let l=await d.formData();h={},l.forEach((c,g)=>{h[g]=c});break;default:h=await d.text().then(c=>W(c,{parseDate:t.parseDate}))}if(d.status>=300||d.status<200){if(E=new x(d.status,h),V(E,L))throw E;h=null}return{data:h,error:E,response:d,status:d.status,headers:d.headers}})()}return typeof i=="object"?j(e,t,[...n,Object.values(i)[0]],r):j(e,t,n)}}),de=(e,t={})=>typeof e=="string"?(t.keepDomain||(e.includes("://")||(e=(_.find(n=>e.includes(n))?"http://":"https://")+e),e.endsWith("/")&&(e=e.slice(0,-1))),j(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."),j("http://e.ly",t,[],e));return re(pe);})();
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 H=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var ee=Object.prototype.hasOwnProperty;var te=(e,t)=>{for(var n in t)H(e,n,{get:t[n],enumerable:!0})},ne=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Y(t))!ee.call(e,s)&&s!==n&&H(e,s,{get:()=>t[s],enumerable:!(r=X(t,s))||r.enumerable});return e};var re=e=>ne(H({},"__esModule",{value:!0}),e);var pe={};te(pe,{streamResponse:()=>G,treaty:()=>de});module.exports=re(pe);var x=class extends Error{constructor(n,r){super(r+"");this.status=n;this.value=r}};var se=/(\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))/,ae=/(?: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\([^)]+\)/,ie=/^(?:(?:(?:(?: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)?)?$/,oe=e=>e.trim().length!==0&&!Number.isNaN(Number(e)),N=(e,t)=>{if(typeof e!="string"||t?.parseDate===!1)return null;let n=e.replace(/"/g,"");if(se.test(n)||ae.test(n)||ie.test(n)){let r=new Date(n);if(!Number.isNaN(r.getTime()))return r}return null},ce=e=>{let t=e.charCodeAt(0),n=e.charCodeAt(e.length-1);return t===123&&n===125||t===91&&n===93},fe=(e,t)=>JSON.parse(e,(n,r)=>{let s=N(r,t);return s||r}),W=(e,t)=>{if(!e)return e;if(oe(e))return+e;if(e==="true")return!0;if(e==="false")return!1;if(t?.parseDate!==!1){let n=N(e,t);if(n)return n}if(ce(e))try{return fe(e,t)}catch{}return e},P=(e,t)=>{let n=e.data.toString();return n==="null"?null:W(n,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,s=>{if(t==="message"){let o=P(s);n({...s,data:o})}else n(s)},r),this}removeEventListener(t,n,r){return this.off(t,n,r),this}close(){return this.ws.close(),this}};var ue=["get","post","put","delete","patch","options","head","connect","subscribe"],V=(e,t)=>typeof t=="function"?t(e):t===!0,_=["localhost","127.0.0.1","0.0.0.0"],q=typeof FileList>"u",C=e=>q?e instanceof Blob:e instanceof FileList||e instanceof File,le=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=>q?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)}),D=async(e,t,n={},r={})=>{if(Array.isArray(e)){for(let s of e)if(!Array.isArray(s))r=await D(s,t,n,r);else{let o=s[0];if(typeof o=="string")r[o.toLowerCase()]=s[1];else for(let[i,u]of o)r[i.toLowerCase()]=u}return r}if(!e)return r;switch(typeof e){case"function":if(e instanceof Headers)return D(e,t,n,r);let s=await e(t,n);return s?D(s,t,n,r):r;case"object":if(e instanceof Headers)return e.forEach((o,i)=>{r[i.toLowerCase()]=o}),r;for(let[o,i]of Object.entries(e))r[o.toLowerCase()]=i;return r;default:return r}};function U(e,t){let n=e.split(`
2
+ `),r={};for(let s of n){if(!s||s.startsWith(":"))continue;let o=s.indexOf(":");if(o>0){let i=s.slice(0,o).trim(),u=s.slice(o+1).replace(/^ /,"");r[i]=u&&W(u,t)}}return Object.keys(r).length>0?r:null}function*B(e,t){let n;for(;(n=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 r=e.value.slice(0,n);if(e.value=e.value.slice(n+2),r.trim()){let s=U(r,t);s&&(yield s)}}}async function*G(e,t){let n=e.body;if(!n)return;let r=n.getReader(),s=new TextDecoder("utf-8"),o={value:""};try{for(;;){let{done:u,value:O}=await r.read();if(u)break;let S=typeof O=="string"?O:s.decode(O,{stream:!0});o.value+=S,yield*B(o,t)}let i=s.decode();if(i&&(o.value+=i),yield*B(o,t),o.value.trim()){let u=U(o.value,t);u&&(yield u)}}finally{r.releaseLock()}}var j=(e,t,n=[],r)=>new Proxy(()=>{},{get(s,o){if(!(n.length===0&&(o==="then"||o==="catch"||o==="finally")))return j(e,t,[...n,o],r)},apply(s,o,[i,u]){if(!i||u||typeof i=="object"&&Object.keys(i).length!==1||ue.includes(n.at(-1))){let O=[...n],S=O.pop(),b="/"+O.join("/"),{fetcher:Z=fetch,headers:F,onRequest:w,onResponse:T,fetch:$}=t,k=S==="get"||S==="head"||S==="subscribe",I=k?i?.query:u?.query,R="";if(I){let a=(m,y)=>{y!=null&&(y instanceof Date&&(y=y.toISOString()),R+=(R?"&":"?")+`${encodeURIComponent(m)}=${encodeURIComponent(typeof y=="object"?JSON.stringify(y):y+"")}`)};for(let[m,y]of Object.entries(I)){if(Array.isArray(y)){for(let L of y)a(m,L);continue}a(m,y)}}if(S==="subscribe"){let a=e.replace(/^([^]+):\/\//,e.startsWith("https://")?"wss://":e.startsWith("http://")||_.find(m=>e.includes(m))?"ws://":"wss://")+b+R;return new M(a)}return(async()=>{F=await D(F,b,u);let a={method:S?.toUpperCase(),body:i,...$,headers:F};a.headers={...F,...await D(k?i?.headers:u?.headers,b,a)};let m=k&&typeof i=="object"?i.fetch:u?.fetch,L=(k&&typeof i=="object"?i.throwHttpError:u?.throwHttpError)??t.throwHttpError;if(a={...a,...m},k&&delete a.body,w){Array.isArray(w)||(w=[w]);for(let l of w){let c=await l(b,a);typeof c=="object"&&(a={...a,...c,headers:{...a.headers,...await D(c.headers,b,a)}})}}if(k&&delete a.body,le(i)){let l=new FormData,c=f=>{if(typeof f=="string"||C(f))return!1;if(typeof f=="object"){if(f!==null)return!0;if(f instanceof Date)return!1}return!1},g=async f=>f instanceof File?await K(f):c(f)?JSON.stringify(f):f;for(let[f,p]of Object.entries(a.body)){if(Array.isArray(p)){if(p.some(A=>typeof A=="object"&&A!==null&&!C(A)))l.append(f,JSON.stringify(p));else for(let A=0;A<p.length;A++){let z=p[A],Q=await g(z);l.append(f,Q)}continue}if(q){if(Array.isArray(p))for(let v of p)l.append(f,await g(v));else l.append(f,await g(p));continue}if(p instanceof File){l.append(f,await K(p));continue}if(p instanceof FileList){for(let v=0;v<p.length;v++)l.append(f,await K(p[v]));continue}l.append(f,await g(p))}a.body=l}else typeof i=="object"?(a.headers["content-type"]="application/json",a.body=JSON.stringify(i)):i!=null&&(a.headers["content-type"]="text/plain");if(k&&delete a.body,w){Array.isArray(w)||(w=[w]);for(let l of w){let c=await l(b,a);typeof c=="object"&&(a={...a,...c,headers:{...a.headers,...await D(c.headers,b,a)}})}}u?.headers?.["content-type"]&&(a.headers["content-type"]=u?.headers["content-type"]);let J=e+b+R,d;try{d=await(r?.handle(new Request(J,a))??Z(J,a))}catch(l){let c=new x(503,l);if(V(c,L))throw c;return{data:null,error:c,response:void 0,status:503,headers:void 0}}let h=null,E=null;if(T){Array.isArray(T)||(T=[T]);for(let l of T)try{let c=await l(d.clone());if(c!=null){h=c;break}}catch(c){c instanceof x?E=c:E=new x(422,c);break}}if(h!==null)return{data:h,error:E,response:d,status:d.status,headers:d.headers};switch(d.headers.get("Content-Type")?.split(";")[0]){case"text/event-stream":h=G(d,{parseDate:t.parseDate});break;case"application/json":h=JSON.parse(await d.text(),(c,g)=>{if(typeof g!="string")return g;let f=N(g,{parseDate:t.parseDate});return f||g});break;case"application/octet-stream":h=await d.arrayBuffer();break;case"multipart/form-data":let l=await d.formData();h={},l.forEach((c,g)=>{h[g]=c});break;default:h=await d.text().then(c=>W(c,{parseDate:t.parseDate}))}if(d.status>=300||d.status<200){if(E=new x(d.status,h),V(E,L))throw E;h=null}return{data:h,error:E,response:d,status:d.status,headers:d.headers}})()}return typeof i=="object"?j(e,t,[...n,Object.values(i)[0]],r):j(e,t,n)}}),de=(e,t={})=>typeof e=="string"?(t.keepDomain||(e.includes("://")||(e=(_.find(n=>e.includes(n))?"http://":"https://")+e),e.endsWith("/")&&(e=e.slice(0,-1))),j(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."),j("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-AB4FCYGG.mjs";import"./chunk-I5KHAGLL.mjs";export{a as streamResponse,b as treaty};
@@ -4,6 +4,7 @@ declare class EdenFetchError<Status extends number = number, Value = unknown> ex
4
4
  constructor(status: Status, value: Value);
5
5
  }
6
6
 
7
+ type ThrowHttpError = boolean | ((error: EdenFetchError<number, unknown>) => boolean);
7
8
  type Range<F extends number, T extends number> = Exclude<Enumerate<T>, Enumerate<F>>;
8
9
  type Enumerate<N extends number, Acc extends number[] = []> = Acc['length'] extends N ? Acc[number] : Enumerate<N, [...Acc, Acc['length']]>;
9
10
  type ErrorRange = Range<300, 599>;
@@ -57,4 +58,4 @@ type TreatyToPath<T, Path extends string = ''> = UnionToIntersect<T extends Reco
57
58
  }[keyof T] : {}>;
58
59
  type Not<T> = T extends true ? false : true;
59
60
 
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 };
61
+ 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 ThrowHttpError as b, type MaybeEmptyObject as c };
@@ -4,6 +4,7 @@ declare class EdenFetchError<Status extends number = number, Value = unknown> ex
4
4
  constructor(status: Status, value: Value);
5
5
  }
6
6
 
7
+ type ThrowHttpError = boolean | ((error: EdenFetchError<number, unknown>) => boolean);
7
8
  type Range<F extends number, T extends number> = Exclude<Enumerate<T>, Enumerate<F>>;
8
9
  type Enumerate<N extends number, Acc extends number[] = []> = Acc['length'] extends N ? Acc[number] : Enumerate<N, [...Acc, Acc['length']]>;
9
10
  type ErrorRange = Range<300, 599>;
@@ -57,4 +58,4 @@ type TreatyToPath<T, Path extends string = ''> = UnionToIntersect<T extends Reco
57
58
  }[keyof T] : {}>;
58
59
  type Not<T> = T extends true ? false : true;
59
60
 
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 };
61
+ 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 ThrowHttpError as b, type MaybeEmptyObject as c };
package/dist/types.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { EdenFetchError } from './errors';
2
+ export type ThrowHttpError = boolean | ((error: EdenFetchError<number, unknown>) => boolean);
2
3
  type Range<F extends number, T extends number> = Exclude<Enumerate<T>, Enumerate<F>>;
3
4
  type Enumerate<N extends number, Acc extends number[] = []> = Acc['length'] extends N ? Acc[number] : Enumerate<N, [...Acc, Acc['length']]>;
4
5
  type ErrorRange = Range<300, 599>;
@@ -0,0 +1,14 @@
1
+ export declare const isNumericString: (message: string) => boolean;
2
+ export declare const parseStringifiedDate: (value: any, options?: {
3
+ parseDate?: boolean;
4
+ }) => Date | null;
5
+ export declare const isStringifiedObject: (value: string) => boolean;
6
+ export declare const parseStringifiedObject: (data: string, options?: {
7
+ parseDate?: boolean;
8
+ }) => any;
9
+ export declare const parseStringifiedValue: (value: string, options?: {
10
+ parseDate?: boolean;
11
+ }) => any;
12
+ export declare const parseMessageEvent: (event: MessageEvent, options?: {
13
+ parseDate?: boolean;
14
+ }) => any;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elysiajs/eden",
3
- "version": "1.4.5",
3
+ "version": "1.4.7",
4
4
  "description": "Fully type-safe Elysia client",
5
5
  "author": {
6
6
  "name": "saltyAom",
@@ -12,24 +12,24 @@
12
12
  "exports": {
13
13
  "./package.json": "./package.json",
14
14
  ".": {
15
- "require": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
16
16
  "import": "./dist/index.mjs",
17
- "types": "./dist/index.d.ts"
17
+ "require": "./dist/index.js"
18
18
  },
19
19
  "./treaty": {
20
- "require": "./dist/treaty.js",
20
+ "types": "./dist/treaty/index.d.ts",
21
21
  "import": "./dist/treaty.mjs",
22
- "types": "./dist/treaty/index.d.ts"
22
+ "require": "./dist/treaty.js"
23
23
  },
24
24
  "./treaty2": {
25
- "require": "./dist/2.js",
25
+ "types": "./dist/treaty2/index.d.ts",
26
26
  "import": "./dist/treaty2.mjs",
27
- "types": "./dist/treaty2/index.d.ts"
27
+ "require": "./dist/treaty2.js"
28
28
  },
29
29
  "./fetch": {
30
- "require": "./dist/fetch.js",
30
+ "types": "./dist/fetch/index.d.ts",
31
31
  "import": "./dist/fetch.mjs",
32
- "types": "./dist/fetch/index.d.ts"
32
+ "require": "./dist/fetch.js"
33
33
  }
34
34
  },
35
35
  "types": "./dist/index.d.ts",
@@ -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"
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.15",
62
+ "elysia": "^1.4.23",
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};
@@ -1 +0,0 @@
1
- var s=class extends Error{constructor(e,n){super(n+"");this.status=e;this.value=n}};var i=/(\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))/,o=/(?: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\([^)]+\)/,c=/^(?:(?:(?:(?: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)?)?$/,u=t=>t.trim().length!==0&&!Number.isNaN(Number(t)),d=t=>{if(typeof t!="string")return null;let r=t.replace(/"/g,"");if(i.test(r)||o.test(r)||c.test(r)){let e=new Date(r);if(!Number.isNaN(e.getTime()))return e}return null},a=t=>{let r=t.charCodeAt(0),e=t.charCodeAt(t.length-1);return r===123&&e===125||r===91&&e===93},p=t=>JSON.parse(t,(r,e)=>{let n=d(e);return n||e}),g=t=>{if(!t)return t;if(u(t))return+t;if(t==="true")return!0;if(t==="false")return!1;let r=d(t);if(r)return r;if(a(t))try{return p(t)}catch{}return t},S=t=>{let r=t.data.toString();return r==="null"?null:g(r)};export{s as a,d as b,g as c,S as d};
@@ -1,6 +0,0 @@
1
- export declare const isNumericString: (message: string) => boolean;
2
- export declare const parseStringifiedDate: (value: any) => Date | null;
3
- export declare const isStringifiedObject: (value: string) => boolean;
4
- export declare const parseStringifiedObject: (data: string) => any;
5
- export declare const parseStringifiedValue: (value: string) => any;
6
- export declare const parseMessageEvent: (event: MessageEvent) => any;