@elysiajs/eden 0.7.4 → 0.7.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/LICENSE +1 -1
- package/dist/chunk-NZCTJ6S3.mjs +1 -0
- package/dist/index.global.js +1 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/treaty/types.d.ts +23 -8
- package/dist/treaty.d.mts +23 -8
- package/dist/treaty.d.ts +23 -8
- package/dist/treaty.global.js +1 -1
- package/dist/treaty.js +1 -1
- package/dist/treaty.mjs +1 -1
- package/package.json +5 -6
- package/src/treaty/index.ts +65 -26
- package/src/treaty/types.ts +111 -81
- package/dist/chunk-2G5RO3ND.mjs +0 -1
package/LICENSE
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Copyright
|
|
1
|
+
Copyright 2023 saltyAom
|
|
2
2
|
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
4
4
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as R}from"./chunk-Y6SMVGJX.mjs";var L=(n,e,t)=>{if(n.endsWith("/")||(n+="/"),e==="index"&&(e=""),!t||!Object.keys(t).length)return`${n}${e}`;let r="";for(let[c,s]of Object.entries(t))r+=`${c}=${s}&`;return`${n}${e}?${r.slice(0,-1)}`};var T=typeof FileList>"u",W=n=>T?n instanceof Blob:n instanceof FileList||n instanceof File,q=n=>{if(!n)return!1;for(let e in n){if(W(n[e]))return!0;if(Array.isArray(n[e])&&n[e].find(t=>W(t)))return!0}return!1},k=n=>T?n:new Promise(e=>{let t=new FileReader;t.onload=()=>{let r=new File([t.result],n.name,{lastModified:n.lastModified,type:n.type});e(r)},t.readAsArrayBuffer(n)}),x=class{ws;url;constructor(e){this.ws=new WebSocket(e),this.url=e}send(e){return Array.isArray(e)?(e.forEach(t=>this.send(t)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,t,r){return this.addEventListener(e,t,r)}off(e,t,r){return this.ws.removeEventListener(e,t,r),this}subscribe(e,t){return this.addEventListener("message",e,t)}addEventListener(e,t,r){return this.ws.addEventListener(e,c=>{if(e==="message"){let s=c.data.toString(),u=s.charCodeAt(0);if(u===47||u===123)try{s=JSON.parse(s)}catch{}else Number.isNaN(+s)?s==="true"?s=!0:s==="false"&&(s=!1):s=+s;t({...c,data:s})}else t(c)},r),this}removeEventListener(e,t,r){return this.off(e,t,r),this}close(){return this.ws.close(),this}},K=(n,e="",t)=>new Proxy(()=>{},{get(r,c,s){return K(n,`${e}/${c.toString()}`,t)},apply(r,c,[s,u={}]=[{},{}]){let y=s!==void 0&&(typeof s!="object"||Array.isArray(s))?s:void 0,{$query:N,$fetch:$,$headers:j,$transform:g,getRaw:M,...I}=s??{};y??=I;let w=e.lastIndexOf("/"),b=e.slice(w+1).toUpperCase(),S=L(n,w===-1?"/":e.slice(0,w),Object.assign(u.query??{},N)),P=t.fetcher??fetch,p=t.transform?Array.isArray(t.transform)?t.transform:[t.transform]:void 0,v=g?Array.isArray(g)?g:[g]:void 0;return v&&(p?p=v.concat(p):p=v),b==="SUBSCRIBE"?new x(S.replace(/^([^]+):\/\//,S.startsWith("https://")?"wss://":"ws://")):(async C=>{let f,F={...t.$fetch?.headers,...$?.headers,...u.headers,...j};if(b!=="GET"&&b!=="HEAD"){f=Object.keys(y).length||Array.isArray(y)?y:void 0;let i=typeof f=="object"||Array.isArray(y);if(i&&q(f)){let m=new FormData;for(let[E,o]of Object.entries(f))if(T)m.append(E,o);else if(o instanceof File)m.append(E,await k(o));else if(o instanceof FileList)for(let l=0;l<o.length;l++)m.append(E,await k(o[l]));else if(Array.isArray(o))for(let l=0;l<o.length;l++){let A=o[l];m.append(E,A instanceof File?await k(A):A)}else m.append(E,o);f=m}else F["content-type"]=i?"application/json":"text/plain",f=i?JSON.stringify(f):y}let a=await P(S,{method:b,body:f,...t.$fetch,...u.fetch,...$,headers:F}),h;if(C.getRaw)return a;switch(a.headers.get("Content-Type")?.split(";")[0]){case"application/json":h=await a.json();break;default:h=await a.text().then(i=>Number.isNaN(+i)?i==="true"?!0:i==="false"?!1:i:+i)}let O=a.status>=300||a.status<200?new R(a.status,h):null;if(p)for(let i of p){let d=i({data:h,status:a.status,headers:a.headers,response:a,error:O});d instanceof Promise&&(d=await d),d!=null&&(h=d)}return{data:h,error:O,response:a,status:a.status,headers:a.headers}})({getRaw:M})}}),U=(n,e={fetcher:fetch})=>new Proxy({},{get(t,r){return K(n,r,e)}});export{x as a,U as b};
|
package/dist/index.global.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var Eden=(()=>{var
|
|
1
|
+
"use strict";var Eden=(()=>{var R=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var z=Object.prototype.hasOwnProperty;var B=(r,e)=>{for(var t in e)R(r,t,{get:e[t],enumerable:!0})},G=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of V(e))!z.call(r,a)&&a!==t&&R(r,a,{get:()=>e[a],enumerable:!(s=U(e,a))||s.enumerable});return r};var H=r=>G(R({},"__esModule",{value:!0}),r);var Q={};B(Q,{edenFetch:()=>q,edenTreaty:()=>I});var w=class extends Error{status;value;constructor(e,t){super(),this.status=e,this.value=t}};var K=(r,e,t)=>{if(r.endsWith("/")||(r+="/"),e==="index"&&(e=""),!t||!Object.keys(t).length)return`${r}${e}`;let s="";for(let[a,n]of Object.entries(t))s+=`${a}=${n}&`;return`${r}${e}?${s.slice(0,-1)}`};var N=typeof FileList>"u",M=r=>N?r instanceof Blob:r instanceof FileList||r instanceof File,_=r=>{if(!r)return!1;for(let e in r){if(M(r[e]))return!0;if(Array.isArray(r[e])&&r[e].find(t=>M(t)))return!0}return!1},j=r=>N?r:new Promise(e=>{let t=new FileReader;t.onload=()=>{let s=new File([t.result],r.name,{lastModified:r.lastModified,type:r.type});e(s)},t.readAsArrayBuffer(r)}),L=class{ws;url;constructor(e){this.ws=new WebSocket(e),this.url=e}send(e){return Array.isArray(e)?(e.forEach(t=>this.send(t)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,t,s){return this.addEventListener(e,t,s)}off(e,t,s){return this.ws.removeEventListener(e,t,s),this}subscribe(e,t){return this.addEventListener("message",e,t)}addEventListener(e,t,s){return this.ws.addEventListener(e,a=>{if(e==="message"){let n=a.data.toString(),c=n.charCodeAt(0);if(c===47||c===123)try{n=JSON.parse(n)}catch{}else Number.isNaN(+n)?n==="true"?n=!0:n==="false"&&(n=!1):n=+n;t({...a,data:n})}else t(a)},s),this}removeEventListener(e,t,s){return this.off(e,t,s),this}close(){return this.ws.close(),this}},P=(r,e="",t)=>new Proxy(()=>{},{get(s,a,n){return P(r,`${e}/${a.toString()}`,t)},apply(s,a,[n,c={}]=[{},{}]){let y=n!==void 0&&(typeof n!="object"||Array.isArray(n))?n:void 0,{$query:A,$fetch:v,$headers:S,$transform:i,getRaw:d,...p}=n??{};y??=p;let T=e.lastIndexOf("/"),k=e.slice(T+1).toUpperCase(),F=K(r,T===-1?"/":e.slice(0,T),Object.assign(c.query??{},A)),D=t.fetcher??fetch,E=t.transform?Array.isArray(t.transform)?t.transform:[t.transform]:void 0,$=i?Array.isArray(i)?i:[i]:void 0;return $&&(E?E=$.concat(E):E=$),k==="SUBSCRIBE"?new L(F.replace(/^([^]+):\/\//,F.startsWith("https://")?"wss://":"ws://")):(async J=>{let l,W={...t.$fetch?.headers,...v?.headers,...c.headers,...S};if(k!=="GET"&&k!=="HEAD"){l=Object.keys(y).length||Array.isArray(y)?y:void 0;let f=typeof l=="object"||Array.isArray(y);if(f&&_(l)){let b=new FormData;for(let[x,u]of Object.entries(l))if(N)b.append(x,u);else if(u instanceof File)b.append(x,await j(u));else if(u instanceof FileList)for(let m=0;m<u.length;m++)b.append(x,await j(u[m]));else if(Array.isArray(u))for(let m=0;m<u.length;m++){let O=u[m];b.append(x,O instanceof File?await j(O):O)}else b.append(x,u);l=b}else W["content-type"]=f?"application/json":"text/plain",l=f?JSON.stringify(l):y}let o=await D(F,{method:k,body:l,...t.$fetch,...c.fetch,...v,headers:W}),g;if(J.getRaw)return o;switch(o.headers.get("Content-Type")?.split(";")[0]){case"application/json":g=await o.json();break;default:g=await o.text().then(f=>Number.isNaN(+f)?f==="true"?!0:f==="false"?!1:f:+f)}let C=o.status>=300||o.status<200?new w(o.status,g):null;if(E)for(let f of E){let h=f({data:g,status:o.status,headers:o.headers,response:o,error:C});h instanceof Promise&&(h=await h),h!=null&&(g=h)}return{data:g,error:C,response:o,status:o.status,headers:o.headers}})({getRaw:d})}}),I=(r,e={fetcher:fetch})=>new Proxy({},{get(t,s){return P(r,s,e)}});var q=(r,e)=>(t,{query:s,params:a,body:n,...c}={})=>{a&&Object.entries(a).forEach(([i,d])=>{t=t.replace(`:${i}`,d)});let y=c.headers?.["Content-Type"];if(!y||y==="application/json")try{n=JSON.stringify(n)}catch{}let A=e?.fetcher||globalThis.fetch,v=s?`?${new URLSearchParams(s).toString()}`:"",S=()=>A(r+t+v,{...c,method:c.method?.toUpperCase()||"GET",headers:n?{"content-type":"application/json",...c.headers}:c.headers,body:n}).then(async i=>{let d;switch(i.headers.get("Content-Type")?.split(";")[0]){case"application/json":d=await i.json();break;default:d=await i.text().then(p=>Number.isNaN(+p)?p==="true"?!0:p==="false"?!1:p:+p);break}return i.status>300?{data:null,status:i.status,headers:i.headers,retry:S,error:new w(i.status,d)}:{data:d,error:null,status:i.status,headers:i.headers,retry:S}});return S()};return H(Q);})();
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var R=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var z=Object.prototype.hasOwnProperty;var B=(r,e)=>{for(var t in e)R(r,t,{get:e[t],enumerable:!0})},G=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of V(e))!z.call(r,a)&&a!==t&&R(r,a,{get:()=>e[a],enumerable:!(s=U(e,a))||s.enumerable});return r};var H=r=>G(R({},"__esModule",{value:!0}),r);var Q={};B(Q,{edenFetch:()=>q,edenTreaty:()=>I});module.exports=H(Q);var w=class extends Error{status;value;constructor(e,t){super(),this.status=e,this.value=t}};var K=(r,e,t)=>{if(r.endsWith("/")||(r+="/"),e==="index"&&(e=""),!t||!Object.keys(t).length)return`${r}${e}`;let s="";for(let[a,n]of Object.entries(t))s+=`${a}=${n}&`;return`${r}${e}?${s.slice(0,-1)}`};var N=typeof FileList>"u",M=r=>N?r instanceof Blob:r instanceof FileList||r instanceof File,_=r=>{if(!r)return!1;for(let e in r){if(M(r[e]))return!0;if(Array.isArray(r[e])&&r[e].find(t=>M(t)))return!0}return!1},j=r=>N?r:new Promise(e=>{let t=new FileReader;t.onload=()=>{let s=new File([t.result],r.name,{lastModified:r.lastModified,type:r.type});e(s)},t.readAsArrayBuffer(r)}),L=class{ws;url;constructor(e){this.ws=new WebSocket(e),this.url=e}send(e){return Array.isArray(e)?(e.forEach(t=>this.send(t)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,t,s){return this.addEventListener(e,t,s)}off(e,t,s){return this.ws.removeEventListener(e,t,s),this}subscribe(e,t){return this.addEventListener("message",e,t)}addEventListener(e,t,s){return this.ws.addEventListener(e,a=>{if(e==="message"){let n=a.data.toString(),c=n.charCodeAt(0);if(c===47||c===123)try{n=JSON.parse(n)}catch{}else Number.isNaN(+n)?n==="true"?n=!0:n==="false"&&(n=!1):n=+n;t({...a,data:n})}else t(a)},s),this}removeEventListener(e,t,s){return this.off(e,t,s),this}close(){return this.ws.close(),this}},P=(r,e="",t)=>new Proxy(()=>{},{get(s,a,n){return P(r,`${e}/${a.toString()}`,t)},apply(s,a,[n,c={}]=[{},{}]){let y=n!==void 0&&(typeof n!="object"||Array.isArray(n))?n:void 0,{$query:A,$fetch:v,$headers:S,$transform:i,getRaw:d,...p}=n??{};y??=p;let T=e.lastIndexOf("/"),k=e.slice(T+1).toUpperCase(),F=K(r,T===-1?"/":e.slice(0,T),Object.assign(c.query??{},A)),D=t.fetcher??fetch,E=t.transform?Array.isArray(t.transform)?t.transform:[t.transform]:void 0,$=i?Array.isArray(i)?i:[i]:void 0;return $&&(E?E=$.concat(E):E=$),k==="SUBSCRIBE"?new L(F.replace(/^([^]+):\/\//,F.startsWith("https://")?"wss://":"ws://")):(async J=>{let l,W={...t.$fetch?.headers,...v?.headers,...c.headers,...S};if(k!=="GET"&&k!=="HEAD"){l=Object.keys(y).length||Array.isArray(y)?y:void 0;let f=typeof l=="object"||Array.isArray(y);if(f&&_(l)){let b=new FormData;for(let[x,u]of Object.entries(l))if(N)b.append(x,u);else if(u instanceof File)b.append(x,await j(u));else if(u instanceof FileList)for(let m=0;m<u.length;m++)b.append(x,await j(u[m]));else if(Array.isArray(u))for(let m=0;m<u.length;m++){let O=u[m];b.append(x,O instanceof File?await j(O):O)}else b.append(x,u);l=b}else W["content-type"]=f?"application/json":"text/plain",l=f?JSON.stringify(l):y}let o=await D(F,{method:k,body:l,...t.$fetch,...c.fetch,...v,headers:W}),g;if(J.getRaw)return o;switch(o.headers.get("Content-Type")?.split(";")[0]){case"application/json":g=await o.json();break;default:g=await o.text().then(f=>Number.isNaN(+f)?f==="true"?!0:f==="false"?!1:f:+f)}let C=o.status>=300||o.status<200?new w(o.status,g):null;if(E)for(let f of E){let h=f({data:g,status:o.status,headers:o.headers,response:o,error:C});h instanceof Promise&&(h=await h),h!=null&&(g=h)}return{data:g,error:C,response:o,status:o.status,headers:o.headers}})({getRaw:d})}}),I=(r,e={fetcher:fetch})=>new Proxy({},{get(t,s){return P(r,s,e)}});var q=(r,e)=>(t,{query:s,params:a,body:n,...c}={})=>{a&&Object.entries(a).forEach(([i,d])=>{t=t.replace(`:${i}`,d)});let y=c.headers?.["Content-Type"];if(!y||y==="application/json")try{n=JSON.stringify(n)}catch{}let A=e?.fetcher||globalThis.fetch,v=s?`?${new URLSearchParams(s).toString()}`:"",S=()=>A(r+t+v,{...c,method:c.method?.toUpperCase()||"GET",headers:n?{"content-type":"application/json",...c.headers}:c.headers,body:n}).then(async i=>{let d;switch(i.headers.get("Content-Type")?.split(";")[0]){case"application/json":d=await i.json();break;default:d=await i.text().then(p=>Number.isNaN(+p)?p==="true"?!0:p==="false"?!1:p:+p);break}return i.status>300?{data:null,status:i.status,headers:i.headers,retry:S,error:new w(i.status,d)}:{data:d,error:null,status:i.status,headers:i.headers,retry:S}});return S()};0&&(module.exports={edenFetch,edenTreaty});
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as e}from"./chunk-
|
|
1
|
+
import{b as e}from"./chunk-NZCTJ6S3.mjs";import{a as t}from"./chunk-3KYW6H6M.mjs";import"./chunk-Y6SMVGJX.mjs";export{t as edenFetch,e as edenTreaty};
|
package/dist/treaty/types.d.ts
CHANGED
|
@@ -8,9 +8,6 @@ type Replace<RecordType, TargetType, GenericType> = {
|
|
|
8
8
|
[K in keyof RecordType]: RecordType[K] extends TargetType ? GenericType : RecordType[K];
|
|
9
9
|
};
|
|
10
10
|
type Split<S extends string> = S extends `${infer Head}/${infer Tail}` ? Head extends '' ? Tail extends '' ? [] : Split<Tail> : [Head, ...Split<Tail>] : S extends `/` ? [] : S extends `${infer Head}/` ? [Head] : [S];
|
|
11
|
-
type Prettify<T> = {
|
|
12
|
-
[K in keyof T]: T[K];
|
|
13
|
-
} & {};
|
|
14
11
|
type AnySchema = {
|
|
15
12
|
body: unknown;
|
|
16
13
|
headers: unknown;
|
|
@@ -39,6 +36,13 @@ export declare namespace EdenTreaty {
|
|
|
39
36
|
fetcher?: typeof fetch;
|
|
40
37
|
transform?: Transform;
|
|
41
38
|
}
|
|
39
|
+
export type DetailedResponse = {
|
|
40
|
+
data: any;
|
|
41
|
+
error: any;
|
|
42
|
+
response: Response;
|
|
43
|
+
status: number;
|
|
44
|
+
headers: Headers;
|
|
45
|
+
};
|
|
42
46
|
export type Sign<Schema extends Record<string, Record<string, unknown>>, Paths extends (string | number)[] = Split<keyof Schema & string>, Carry extends string = ''> = Paths extends [
|
|
43
47
|
infer Prefix extends string | number,
|
|
44
48
|
...infer Rest extends (string | number)[]
|
|
@@ -51,6 +55,7 @@ export declare namespace EdenTreaty {
|
|
|
51
55
|
$query: Route['query'];
|
|
52
56
|
}) => EdenWS<Route> : ((params: {
|
|
53
57
|
$fetch?: RequestInit;
|
|
58
|
+
getRaw?: boolean;
|
|
54
59
|
} & (IsUnknown<Route['body']> extends false ? Replace<Route['body'], Blob | Blob[], Files> : {}) & (undefined extends Route['query'] ? {
|
|
55
60
|
$query?: Record<string, string>;
|
|
56
61
|
} : {
|
|
@@ -75,16 +80,26 @@ export declare namespace EdenTreaty {
|
|
|
75
80
|
$params: undefined;
|
|
76
81
|
$headers: undefined;
|
|
77
82
|
$query: undefined;
|
|
78
|
-
} extends Params ? (params?:
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
+
} extends Params ? (params?: Params, options?: {
|
|
84
|
+
fetch?: RequestInit;
|
|
85
|
+
transform?: EdenTreaty.Transform<Response>;
|
|
86
|
+
query?: Params['query'];
|
|
87
|
+
headers?: Params['headers'];
|
|
88
|
+
}) => Response : (params: Params, options?: {
|
|
89
|
+
fetch?: RequestInit;
|
|
90
|
+
transform?: EdenTreaty.Transform<Response>;
|
|
91
|
+
query?: Params['query'];
|
|
92
|
+
headers?: Params['headers'];
|
|
93
|
+
}) => Response : never : never;
|
|
83
94
|
} : {};
|
|
84
95
|
export interface OnMessage<Data = unknown> extends MessageEvent {
|
|
85
96
|
data: Data;
|
|
86
97
|
rawData: MessageEvent['data'];
|
|
87
98
|
}
|
|
99
|
+
export type ExecuteOptions = {
|
|
100
|
+
getRaw?: boolean;
|
|
101
|
+
};
|
|
102
|
+
export type ExecuteReturnType<T extends ExecuteOptions> = T['getRaw'] extends true ? Response : DetailedResponse;
|
|
88
103
|
export type WSEvent<K extends keyof WebSocketEventMap, Data = unknown> = K extends 'message' ? OnMessage<Data> : WebSocketEventMap[K];
|
|
89
104
|
export {};
|
|
90
105
|
}
|
package/dist/treaty.d.mts
CHANGED
|
@@ -8,9 +8,6 @@ type Replace<RecordType, TargetType, GenericType> = {
|
|
|
8
8
|
[K in keyof RecordType]: RecordType[K] extends TargetType ? GenericType : RecordType[K];
|
|
9
9
|
};
|
|
10
10
|
type Split<S extends string> = S extends `${infer Head}/${infer Tail}` ? Head extends '' ? Tail extends '' ? [] : Split<Tail> : [Head, ...Split<Tail>] : S extends `/` ? [] : S extends `${infer Head}/` ? [Head] : [S];
|
|
11
|
-
type Prettify<T> = {
|
|
12
|
-
[K in keyof T]: T[K];
|
|
13
|
-
} & {};
|
|
14
11
|
type AnySchema = {
|
|
15
12
|
body: unknown;
|
|
16
13
|
headers: unknown;
|
|
@@ -39,6 +36,13 @@ declare namespace EdenTreaty {
|
|
|
39
36
|
fetcher?: typeof fetch;
|
|
40
37
|
transform?: Transform;
|
|
41
38
|
}
|
|
39
|
+
export type DetailedResponse = {
|
|
40
|
+
data: any;
|
|
41
|
+
error: any;
|
|
42
|
+
response: Response;
|
|
43
|
+
status: number;
|
|
44
|
+
headers: Headers;
|
|
45
|
+
};
|
|
42
46
|
export type Sign<Schema extends Record<string, Record<string, unknown>>, Paths extends (string | number)[] = Split<keyof Schema & string>, Carry extends string = ''> = Paths extends [
|
|
43
47
|
infer Prefix extends string | number,
|
|
44
48
|
...infer Rest extends (string | number)[]
|
|
@@ -51,6 +55,7 @@ declare namespace EdenTreaty {
|
|
|
51
55
|
$query: Route['query'];
|
|
52
56
|
}) => EdenWS<Route> : ((params: {
|
|
53
57
|
$fetch?: RequestInit;
|
|
58
|
+
getRaw?: boolean;
|
|
54
59
|
} & (IsUnknown<Route['body']> extends false ? Replace<Route['body'], Blob | Blob[], Files> : {}) & (undefined extends Route['query'] ? {
|
|
55
60
|
$query?: Record<string, string>;
|
|
56
61
|
} : {
|
|
@@ -75,16 +80,26 @@ declare namespace EdenTreaty {
|
|
|
75
80
|
$params: undefined;
|
|
76
81
|
$headers: undefined;
|
|
77
82
|
$query: undefined;
|
|
78
|
-
} extends Params ? (params?:
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
+
} extends Params ? (params?: Params, options?: {
|
|
84
|
+
fetch?: RequestInit;
|
|
85
|
+
transform?: EdenTreaty.Transform<Response>;
|
|
86
|
+
query?: Params['query'];
|
|
87
|
+
headers?: Params['headers'];
|
|
88
|
+
}) => Response : (params: Params, options?: {
|
|
89
|
+
fetch?: RequestInit;
|
|
90
|
+
transform?: EdenTreaty.Transform<Response>;
|
|
91
|
+
query?: Params['query'];
|
|
92
|
+
headers?: Params['headers'];
|
|
93
|
+
}) => Response : never : never;
|
|
83
94
|
} : {};
|
|
84
95
|
export interface OnMessage<Data = unknown> extends MessageEvent {
|
|
85
96
|
data: Data;
|
|
86
97
|
rawData: MessageEvent['data'];
|
|
87
98
|
}
|
|
99
|
+
export type ExecuteOptions = {
|
|
100
|
+
getRaw?: boolean;
|
|
101
|
+
};
|
|
102
|
+
export type ExecuteReturnType<T extends ExecuteOptions> = T['getRaw'] extends true ? Response : DetailedResponse;
|
|
88
103
|
export type WSEvent<K extends keyof WebSocketEventMap, Data = unknown> = K extends 'message' ? OnMessage<Data> : WebSocketEventMap[K];
|
|
89
104
|
export {};
|
|
90
105
|
}
|
package/dist/treaty.d.ts
CHANGED
|
@@ -8,9 +8,6 @@ type Replace<RecordType, TargetType, GenericType> = {
|
|
|
8
8
|
[K in keyof RecordType]: RecordType[K] extends TargetType ? GenericType : RecordType[K];
|
|
9
9
|
};
|
|
10
10
|
type Split<S extends string> = S extends `${infer Head}/${infer Tail}` ? Head extends '' ? Tail extends '' ? [] : Split<Tail> : [Head, ...Split<Tail>] : S extends `/` ? [] : S extends `${infer Head}/` ? [Head] : [S];
|
|
11
|
-
type Prettify<T> = {
|
|
12
|
-
[K in keyof T]: T[K];
|
|
13
|
-
} & {};
|
|
14
11
|
type AnySchema = {
|
|
15
12
|
body: unknown;
|
|
16
13
|
headers: unknown;
|
|
@@ -39,6 +36,13 @@ declare namespace EdenTreaty {
|
|
|
39
36
|
fetcher?: typeof fetch;
|
|
40
37
|
transform?: Transform;
|
|
41
38
|
}
|
|
39
|
+
export type DetailedResponse = {
|
|
40
|
+
data: any;
|
|
41
|
+
error: any;
|
|
42
|
+
response: Response;
|
|
43
|
+
status: number;
|
|
44
|
+
headers: Headers;
|
|
45
|
+
};
|
|
42
46
|
export type Sign<Schema extends Record<string, Record<string, unknown>>, Paths extends (string | number)[] = Split<keyof Schema & string>, Carry extends string = ''> = Paths extends [
|
|
43
47
|
infer Prefix extends string | number,
|
|
44
48
|
...infer Rest extends (string | number)[]
|
|
@@ -51,6 +55,7 @@ declare namespace EdenTreaty {
|
|
|
51
55
|
$query: Route['query'];
|
|
52
56
|
}) => EdenWS<Route> : ((params: {
|
|
53
57
|
$fetch?: RequestInit;
|
|
58
|
+
getRaw?: boolean;
|
|
54
59
|
} & (IsUnknown<Route['body']> extends false ? Replace<Route['body'], Blob | Blob[], Files> : {}) & (undefined extends Route['query'] ? {
|
|
55
60
|
$query?: Record<string, string>;
|
|
56
61
|
} : {
|
|
@@ -75,16 +80,26 @@ declare namespace EdenTreaty {
|
|
|
75
80
|
$params: undefined;
|
|
76
81
|
$headers: undefined;
|
|
77
82
|
$query: undefined;
|
|
78
|
-
} extends Params ? (params?:
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
+
} extends Params ? (params?: Params, options?: {
|
|
84
|
+
fetch?: RequestInit;
|
|
85
|
+
transform?: EdenTreaty.Transform<Response>;
|
|
86
|
+
query?: Params['query'];
|
|
87
|
+
headers?: Params['headers'];
|
|
88
|
+
}) => Response : (params: Params, options?: {
|
|
89
|
+
fetch?: RequestInit;
|
|
90
|
+
transform?: EdenTreaty.Transform<Response>;
|
|
91
|
+
query?: Params['query'];
|
|
92
|
+
headers?: Params['headers'];
|
|
93
|
+
}) => Response : never : never;
|
|
83
94
|
} : {};
|
|
84
95
|
export interface OnMessage<Data = unknown> extends MessageEvent {
|
|
85
96
|
data: Data;
|
|
86
97
|
rawData: MessageEvent['data'];
|
|
87
98
|
}
|
|
99
|
+
export type ExecuteOptions = {
|
|
100
|
+
getRaw?: boolean;
|
|
101
|
+
};
|
|
102
|
+
export type ExecuteReturnType<T extends ExecuteOptions> = T['getRaw'] extends true ? Response : DetailedResponse;
|
|
88
103
|
export type WSEvent<K extends keyof WebSocketEventMap, Data = unknown> = K extends 'message' ? OnMessage<Data> : WebSocketEventMap[K];
|
|
89
104
|
export {};
|
|
90
105
|
}
|
package/dist/treaty.global.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var Eden=(()=>{var
|
|
1
|
+
"use strict";var Eden=(()=>{var T=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var V=Object.prototype.hasOwnProperty;var z=(s,e)=>{for(var t in e)T(s,t,{get:e[t],enumerable:!0})},B=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of J(e))!V.call(s,a)&&a!==t&&T(s,a,{get:()=>e[a],enumerable:!(r=D(e,a))||r.enumerable});return s};var H=s=>B(T({},"__esModule",{value:!0}),s);var _={};z(_,{EdenWS:()=>S,edenTreaty:()=>G});var w=class extends Error{status;value;constructor(e,t){super(),this.status=e,this.value=t}};var W=(s,e,t)=>{if(s.endsWith("/")||(s+="/"),e==="index"&&(e=""),!t||!Object.keys(t).length)return`${s}${e}`;let r="";for(let[a,n]of Object.entries(t))r+=`${a}=${n}&`;return`${s}${e}?${r.slice(0,-1)}`};var O=typeof FileList>"u",K=s=>O?s instanceof Blob:s instanceof FileList||s instanceof File,U=s=>{if(!s)return!1;for(let e in s){if(K(s[e]))return!0;if(Array.isArray(s[e])&&s[e].find(t=>K(t)))return!0}return!1},$=s=>O?s:new Promise(e=>{let t=new FileReader;t.onload=()=>{let r=new File([t.result],s.name,{lastModified:s.lastModified,type:s.type});e(r)},t.readAsArrayBuffer(s)}),S=class{ws;url;constructor(e){this.ws=new WebSocket(e),this.url=e}send(e){return Array.isArray(e)?(e.forEach(t=>this.send(t)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,t,r){return this.addEventListener(e,t,r)}off(e,t,r){return this.ws.removeEventListener(e,t,r),this}subscribe(e,t){return this.addEventListener("message",e,t)}addEventListener(e,t,r){return this.ws.addEventListener(e,a=>{if(e==="message"){let n=a.data.toString(),l=n.charCodeAt(0);if(l===47||l===123)try{n=JSON.parse(n)}catch{}else Number.isNaN(+n)?n==="true"?n=!0:n==="false"&&(n=!1):n=+n;t({...a,data:n})}else t(a)},r),this}removeEventListener(e,t,r){return this.off(e,t,r),this}close(){return this.ws.close(),this}},j=(s,e="",t)=>new Proxy(()=>{},{get(r,a,n){return j(s,`${e}/${a.toString()}`,t)},apply(r,a,[n,l={}]=[{},{}]){let u=n!==void 0&&(typeof n!="object"||Array.isArray(n))?n:void 0,{$query:N,$fetch:F,$headers:M,$transform:E,getRaw:I,...P}=n??{};u??=P;let v=e.lastIndexOf("/"),b=e.slice(v+1).toUpperCase(),x=W(s,v===-1?"/":e.slice(0,v),Object.assign(l.query??{},N)),C=t.fetcher??fetch,p=t.transform?Array.isArray(t.transform)?t.transform:[t.transform]:void 0,k=E?Array.isArray(E)?E:[E]:void 0;return k&&(p?p=k.concat(p):p=k),b==="SUBSCRIBE"?new S(x.replace(/^([^]+):\/\//,x.startsWith("https://")?"wss://":"ws://")):(async q=>{let f,R={...t.$fetch?.headers,...F?.headers,...l.headers,...M};if(b!=="GET"&&b!=="HEAD"){f=Object.keys(u).length||Array.isArray(u)?u:void 0;let o=typeof f=="object"||Array.isArray(u);if(o&&U(f)){let m=new FormData;for(let[g,c]of Object.entries(f))if(O)m.append(g,c);else if(c instanceof File)m.append(g,await $(c));else if(c instanceof FileList)for(let d=0;d<c.length;d++)m.append(g,await $(c[d]));else if(Array.isArray(c))for(let d=0;d<c.length;d++){let A=c[d];m.append(g,A instanceof File?await $(A):A)}else m.append(g,c);f=m}else R["content-type"]=o?"application/json":"text/plain",f=o?JSON.stringify(f):u}let i=await C(x,{method:b,body:f,...t.$fetch,...l.fetch,...F,headers:R}),h;if(q.getRaw)return i;switch(i.headers.get("Content-Type")?.split(";")[0]){case"application/json":h=await i.json();break;default:h=await i.text().then(o=>Number.isNaN(+o)?o==="true"?!0:o==="false"?!1:o:+o)}let L=i.status>=300||i.status<200?new w(i.status,h):null;if(p)for(let o of p){let y=o({data:h,status:i.status,headers:i.headers,response:i,error:L});y instanceof Promise&&(y=await y),y!=null&&(h=y)}return{data:h,error:L,response:i,status:i.status,headers:i.headers}})({getRaw:I})}}),G=(s,e={fetcher:fetch})=>new Proxy({},{get(t,r){return j(s,r,e)}});return H(_);})();
|
package/dist/treaty.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var T=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var V=Object.prototype.hasOwnProperty;var z=(s,e)=>{for(var t in e)T(s,t,{get:e[t],enumerable:!0})},B=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of J(e))!V.call(s,a)&&a!==t&&T(s,a,{get:()=>e[a],enumerable:!(r=D(e,a))||r.enumerable});return s};var H=s=>B(T({},"__esModule",{value:!0}),s);var _={};z(_,{EdenWS:()=>S,edenTreaty:()=>G});module.exports=H(_);var w=class extends Error{status;value;constructor(e,t){super(),this.status=e,this.value=t}};var W=(s,e,t)=>{if(s.endsWith("/")||(s+="/"),e==="index"&&(e=""),!t||!Object.keys(t).length)return`${s}${e}`;let r="";for(let[a,n]of Object.entries(t))r+=`${a}=${n}&`;return`${s}${e}?${r.slice(0,-1)}`};var O=typeof FileList>"u",K=s=>O?s instanceof Blob:s instanceof FileList||s instanceof File,U=s=>{if(!s)return!1;for(let e in s){if(K(s[e]))return!0;if(Array.isArray(s[e])&&s[e].find(t=>K(t)))return!0}return!1},$=s=>O?s:new Promise(e=>{let t=new FileReader;t.onload=()=>{let r=new File([t.result],s.name,{lastModified:s.lastModified,type:s.type});e(r)},t.readAsArrayBuffer(s)}),S=class{ws;url;constructor(e){this.ws=new WebSocket(e),this.url=e}send(e){return Array.isArray(e)?(e.forEach(t=>this.send(t)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,t,r){return this.addEventListener(e,t,r)}off(e,t,r){return this.ws.removeEventListener(e,t,r),this}subscribe(e,t){return this.addEventListener("message",e,t)}addEventListener(e,t,r){return this.ws.addEventListener(e,a=>{if(e==="message"){let n=a.data.toString(),l=n.charCodeAt(0);if(l===47||l===123)try{n=JSON.parse(n)}catch{}else Number.isNaN(+n)?n==="true"?n=!0:n==="false"&&(n=!1):n=+n;t({...a,data:n})}else t(a)},r),this}removeEventListener(e,t,r){return this.off(e,t,r),this}close(){return this.ws.close(),this}},j=(s,e="",t)=>new Proxy(()=>{},{get(r,a,n){return j(s,`${e}/${a.toString()}`,t)},apply(r,a,[n,l={}]=[{},{}]){let u=n!==void 0&&(typeof n!="object"||Array.isArray(n))?n:void 0,{$query:N,$fetch:F,$headers:M,$transform:E,getRaw:I,...P}=n??{};u??=P;let v=e.lastIndexOf("/"),b=e.slice(v+1).toUpperCase(),x=W(s,v===-1?"/":e.slice(0,v),Object.assign(l.query??{},N)),C=t.fetcher??fetch,p=t.transform?Array.isArray(t.transform)?t.transform:[t.transform]:void 0,k=E?Array.isArray(E)?E:[E]:void 0;return k&&(p?p=k.concat(p):p=k),b==="SUBSCRIBE"?new S(x.replace(/^([^]+):\/\//,x.startsWith("https://")?"wss://":"ws://")):(async q=>{let f,R={...t.$fetch?.headers,...F?.headers,...l.headers,...M};if(b!=="GET"&&b!=="HEAD"){f=Object.keys(u).length||Array.isArray(u)?u:void 0;let o=typeof f=="object"||Array.isArray(u);if(o&&U(f)){let m=new FormData;for(let[g,c]of Object.entries(f))if(O)m.append(g,c);else if(c instanceof File)m.append(g,await $(c));else if(c instanceof FileList)for(let d=0;d<c.length;d++)m.append(g,await $(c[d]));else if(Array.isArray(c))for(let d=0;d<c.length;d++){let A=c[d];m.append(g,A instanceof File?await $(A):A)}else m.append(g,c);f=m}else R["content-type"]=o?"application/json":"text/plain",f=o?JSON.stringify(f):u}let i=await C(x,{method:b,body:f,...t.$fetch,...l.fetch,...F,headers:R}),h;if(q.getRaw)return i;switch(i.headers.get("Content-Type")?.split(";")[0]){case"application/json":h=await i.json();break;default:h=await i.text().then(o=>Number.isNaN(+o)?o==="true"?!0:o==="false"?!1:o:+o)}let L=i.status>=300||i.status<200?new w(i.status,h):null;if(p)for(let o of p){let y=o({data:h,status:i.status,headers:i.headers,response:i,error:L});y instanceof Promise&&(y=await y),y!=null&&(h=y)}return{data:h,error:L,response:i,status:i.status,headers:i.headers}})({getRaw:I})}}),G=(s,e={fetcher:fetch})=>new Proxy({},{get(t,r){return j(s,r,e)}});0&&(module.exports={EdenWS,edenTreaty});
|
package/dist/treaty.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a,b}from"./chunk-
|
|
1
|
+
import{a,b}from"./chunk-NZCTJ6S3.mjs";import"./chunk-Y6SMVGJX.mjs";export{a as EdenWS,b as edenTreaty};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elysiajs/eden",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.7",
|
|
4
4
|
"description": "Fully type-safe Elysia client",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "saltyAom",
|
|
@@ -32,11 +32,7 @@
|
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
34
|
"types": "./src/index.ts",
|
|
35
|
-
"keywords": [
|
|
36
|
-
"elysia",
|
|
37
|
-
"eden",
|
|
38
|
-
"connector"
|
|
39
|
-
],
|
|
35
|
+
"keywords": ["elysia", "eden", "connector"],
|
|
40
36
|
"homepage": "https://github.com/elysiajs/eden",
|
|
41
37
|
"repository": {
|
|
42
38
|
"type": "git",
|
|
@@ -75,5 +71,8 @@
|
|
|
75
71
|
"tabWidth": 4,
|
|
76
72
|
"singleQuote": true,
|
|
77
73
|
"trailingComma": "none"
|
|
74
|
+
},
|
|
75
|
+
"dependencies": {
|
|
76
|
+
"superjson": "^2.2.1"
|
|
78
77
|
}
|
|
79
78
|
}
|
package/src/treaty/index.ts
CHANGED
|
@@ -37,15 +37,19 @@ const hasFile = (obj: Record<string, any>) => {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
// @ts-ignore
|
|
40
|
-
const
|
|
40
|
+
const createNewFile = (v: File) =>
|
|
41
41
|
isServer
|
|
42
42
|
? v
|
|
43
|
-
: new Promise<
|
|
43
|
+
: new Promise<File>((resolve) => {
|
|
44
44
|
// @ts-ignore
|
|
45
45
|
const reader = new FileReader()
|
|
46
46
|
|
|
47
47
|
reader.onload = () => {
|
|
48
|
-
|
|
48
|
+
const file = new File([reader.result!], v.name, {
|
|
49
|
+
lastModified: v.lastModified,
|
|
50
|
+
type: v.type
|
|
51
|
+
})
|
|
52
|
+
resolve(file)
|
|
49
53
|
}
|
|
50
54
|
|
|
51
55
|
reader.readAsArrayBuffer(v)
|
|
@@ -121,7 +125,7 @@ export class EdenWS<Schema extends InputSchema<any> = InputSchema> {
|
|
|
121
125
|
}
|
|
122
126
|
else if (!Number.isNaN(+data)) data = +data
|
|
123
127
|
else if (data === 'true') data = true
|
|
124
|
-
else if (data === '
|
|
128
|
+
else if (data === 'false') data = false
|
|
125
129
|
|
|
126
130
|
listener({
|
|
127
131
|
...ws,
|
|
@@ -161,30 +165,43 @@ const createProxy = (
|
|
|
161
165
|
get(target, key, value) {
|
|
162
166
|
return createProxy(domain, `${path}/${key.toString()}`, config)
|
|
163
167
|
},
|
|
168
|
+
// @ts-ignore
|
|
164
169
|
apply(
|
|
165
170
|
target,
|
|
166
171
|
_,
|
|
167
|
-
[
|
|
168
|
-
{
|
|
169
|
-
|
|
170
|
-
$
|
|
171
|
-
$
|
|
172
|
-
$
|
|
172
|
+
[initialBody, options = {}]: [
|
|
173
|
+
{
|
|
174
|
+
[x: string]: any
|
|
175
|
+
$fetch?: RequestInit
|
|
176
|
+
$headers?: HeadersInit
|
|
177
|
+
$query?: Record<string, string>
|
|
178
|
+
getRaw?: boolean
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
fetch?: RequestInit
|
|
182
|
+
transform?: EdenTreaty.Transform
|
|
183
|
+
headers?: Record<string, string>
|
|
184
|
+
query?: Record<string, string | number>
|
|
173
185
|
}
|
|
174
|
-
]
|
|
175
|
-
[x: string]: any
|
|
176
|
-
$fetch?: RequestInit
|
|
177
|
-
$headers?: HeadersInit
|
|
178
|
-
$query?: Record<string, string>
|
|
179
|
-
$transform?: EdenTreaty.Transform
|
|
180
|
-
}[] = [{}]
|
|
186
|
+
] = [{}, {}]
|
|
181
187
|
) {
|
|
188
|
+
let bodyObj: any =
|
|
189
|
+
initialBody !== undefined &&
|
|
190
|
+
(typeof initialBody !== 'object' || Array.isArray(initialBody))
|
|
191
|
+
? initialBody
|
|
192
|
+
: undefined
|
|
193
|
+
|
|
194
|
+
const { $query, $fetch, $headers, $transform, getRaw, ...restBody } =
|
|
195
|
+
initialBody ?? {}
|
|
196
|
+
|
|
197
|
+
bodyObj ??= restBody
|
|
198
|
+
|
|
182
199
|
const i = path.lastIndexOf('/'),
|
|
183
200
|
method = path.slice(i + 1).toUpperCase(),
|
|
184
201
|
url = composePath(
|
|
185
202
|
domain,
|
|
186
203
|
i === -1 ? '/' : path.slice(0, i),
|
|
187
|
-
$query
|
|
204
|
+
Object.assign(options.query ?? {}, $query)
|
|
188
205
|
)
|
|
189
206
|
|
|
190
207
|
const fetcher = config.fetcher ?? fetch
|
|
@@ -213,18 +230,25 @@ const createProxy = (
|
|
|
213
230
|
)
|
|
214
231
|
)
|
|
215
232
|
|
|
216
|
-
const execute = async () => {
|
|
233
|
+
const execute = async <T extends EdenTreaty.ExecuteOptions>(modifiers: T): Promise<EdenTreaty.ExecuteReturnType<T>> => {
|
|
217
234
|
let body: any
|
|
218
235
|
|
|
219
236
|
const headers = {
|
|
220
237
|
...config.$fetch?.headers,
|
|
221
238
|
...$fetch?.headers,
|
|
239
|
+
...options.headers,
|
|
222
240
|
...$headers
|
|
223
241
|
} as Record<string, string>
|
|
224
242
|
|
|
225
243
|
if (method !== 'GET' && method !== 'HEAD') {
|
|
226
|
-
body = Object.keys(bodyObj).length
|
|
227
|
-
|
|
244
|
+
body = Object.keys(bodyObj).length
|
|
245
|
+
? bodyObj
|
|
246
|
+
: Array.isArray(bodyObj)
|
|
247
|
+
? bodyObj
|
|
248
|
+
: undefined
|
|
249
|
+
|
|
250
|
+
const isObject =
|
|
251
|
+
typeof body === 'object' || Array.isArray(bodyObj)
|
|
228
252
|
const isFormData = isObject && hasFile(body)
|
|
229
253
|
|
|
230
254
|
if (isFormData) {
|
|
@@ -239,7 +263,7 @@ const createProxy = (
|
|
|
239
263
|
if (field instanceof File)
|
|
240
264
|
newBody.append(
|
|
241
265
|
key,
|
|
242
|
-
await
|
|
266
|
+
await createNewFile(field as any)
|
|
243
267
|
)
|
|
244
268
|
// @ts-ignore
|
|
245
269
|
else if (field instanceof FileList) {
|
|
@@ -247,7 +271,20 @@ const createProxy = (
|
|
|
247
271
|
for (let i = 0; i < field.length; i++) {
|
|
248
272
|
newBody.append(
|
|
249
273
|
key as any,
|
|
250
|
-
await
|
|
274
|
+
await createNewFile(
|
|
275
|
+
(field as any)[i]
|
|
276
|
+
)
|
|
277
|
+
)
|
|
278
|
+
}
|
|
279
|
+
} else if (Array.isArray(field)) {
|
|
280
|
+
for (let i = 0; i < field.length; i++) {
|
|
281
|
+
const value = (field as any)[i]
|
|
282
|
+
|
|
283
|
+
newBody.append(
|
|
284
|
+
key as any,
|
|
285
|
+
value instanceof File
|
|
286
|
+
? await createNewFile(value)
|
|
287
|
+
: value
|
|
251
288
|
)
|
|
252
289
|
}
|
|
253
290
|
} else newBody.append(key, field as string)
|
|
@@ -260,7 +297,7 @@ const createProxy = (
|
|
|
260
297
|
? 'application/json'
|
|
261
298
|
: 'text/plain'
|
|
262
299
|
|
|
263
|
-
|
|
300
|
+
body = isObject ? JSON.stringify(body) : bodyObj
|
|
264
301
|
}
|
|
265
302
|
}
|
|
266
303
|
|
|
@@ -268,12 +305,14 @@ const createProxy = (
|
|
|
268
305
|
method,
|
|
269
306
|
body,
|
|
270
307
|
...config.$fetch,
|
|
308
|
+
...options.fetch,
|
|
271
309
|
...$fetch,
|
|
272
310
|
headers
|
|
273
311
|
})
|
|
274
312
|
|
|
275
313
|
let data
|
|
276
314
|
|
|
315
|
+
if (modifiers.getRaw) return response as any
|
|
277
316
|
switch (response.headers.get('Content-Type')?.split(';')[0]) {
|
|
278
317
|
case 'application/json':
|
|
279
318
|
data = await response.json()
|
|
@@ -314,10 +353,10 @@ const createProxy = (
|
|
|
314
353
|
response: response,
|
|
315
354
|
status: response.status,
|
|
316
355
|
headers: response.headers
|
|
317
|
-
}
|
|
356
|
+
} as any
|
|
318
357
|
}
|
|
319
358
|
|
|
320
|
-
return execute()
|
|
359
|
+
return execute({ getRaw })
|
|
321
360
|
}
|
|
322
361
|
}) as unknown as Record<string, unknown>
|
|
323
362
|
|
package/src/treaty/types.ts
CHANGED
|
@@ -25,10 +25,10 @@ type Split<S extends string> = S extends `${infer Head}/${infer Tail}`
|
|
|
25
25
|
: Split<Tail>
|
|
26
26
|
: [Head, ...Split<Tail>]
|
|
27
27
|
: S extends `/`
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
? []
|
|
29
|
+
: S extends `${infer Head}/`
|
|
30
|
+
? [Head]
|
|
31
|
+
: [S]
|
|
32
32
|
|
|
33
33
|
type Prettify<T> = {
|
|
34
34
|
[K in keyof T]: T[K]
|
|
@@ -55,8 +55,8 @@ export namespace EdenTreaty {
|
|
|
55
55
|
type SplitKeys<T> = T extends [infer First, ...infer Rest]
|
|
56
56
|
? [First, Rest]
|
|
57
57
|
: T extends [infer First, ...infer Rest][number]
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
? [First, Rest]
|
|
59
|
+
: never
|
|
60
60
|
|
|
61
61
|
type UnwrapPromise<T> = T extends Promise<infer A> ? A : T
|
|
62
62
|
|
|
@@ -83,6 +83,14 @@ export namespace EdenTreaty {
|
|
|
83
83
|
transform?: Transform
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
+
export type DetailedResponse = {
|
|
87
|
+
data: any
|
|
88
|
+
error: any
|
|
89
|
+
response: Response
|
|
90
|
+
status: number
|
|
91
|
+
headers: Headers
|
|
92
|
+
};
|
|
93
|
+
|
|
86
94
|
export type Sign<
|
|
87
95
|
Schema extends Record<string, Record<string, unknown>>,
|
|
88
96
|
Paths extends (string | number)[] = Split<keyof Schema & string>,
|
|
@@ -97,91 +105,113 @@ export namespace EdenTreaty {
|
|
|
97
105
|
: Prefix]: Sign<Schema, Rest, `${Carry}/${Key}`>
|
|
98
106
|
}
|
|
99
107
|
: Schema[Carry extends '' ? '/' : Carry] extends infer Routes
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
108
|
+
? {
|
|
109
|
+
[Method in keyof Routes]: Routes[Method] extends infer Route extends
|
|
110
|
+
AnySchema
|
|
111
|
+
? Method extends 'subscribe'
|
|
112
|
+
? undefined extends Route['query']
|
|
113
|
+
? (params?: {
|
|
114
|
+
$query?: Record<string, string>
|
|
115
|
+
}) => EdenWS<Route>
|
|
116
|
+
: (params: {
|
|
117
|
+
$query: Route['query']
|
|
118
|
+
}) => EdenWS<Route>
|
|
119
|
+
: ((
|
|
120
|
+
params: {
|
|
121
|
+
$fetch?: RequestInit
|
|
122
|
+
getRaw?: boolean
|
|
123
|
+
} & (IsUnknown<Route['body']> extends false
|
|
124
|
+
? Replace<
|
|
125
|
+
Route['body'],
|
|
126
|
+
Blob | Blob[],
|
|
127
|
+
Files
|
|
128
|
+
>
|
|
129
|
+
: {}) &
|
|
130
|
+
(undefined extends Route['query']
|
|
131
|
+
? {
|
|
132
|
+
$query?: Record<string, string>
|
|
133
|
+
}
|
|
134
|
+
: {
|
|
135
|
+
$query: Route['query']
|
|
136
|
+
}) &
|
|
137
|
+
(undefined extends Route['headers']
|
|
138
|
+
? {
|
|
139
|
+
$headers?: Record<string, unknown>
|
|
140
|
+
}
|
|
141
|
+
: {
|
|
142
|
+
$headers: Route['headers']
|
|
143
|
+
})
|
|
144
|
+
) => Promise<
|
|
145
|
+
(
|
|
146
|
+
| {
|
|
147
|
+
data: Route['response'] extends {
|
|
148
|
+
200: infer ReturnedType
|
|
149
|
+
}
|
|
150
|
+
? Awaited<ReturnedType>
|
|
151
|
+
: unknown
|
|
152
|
+
error: null
|
|
119
153
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
154
|
+
| {
|
|
155
|
+
data: null
|
|
156
|
+
error: MapError<
|
|
157
|
+
Route['response']
|
|
158
|
+
> extends infer Errors
|
|
159
|
+
? IsNever<Errors> extends true
|
|
160
|
+
? EdenFetchError<
|
|
161
|
+
number,
|
|
162
|
+
string
|
|
163
|
+
>
|
|
164
|
+
: Errors
|
|
165
|
+
: EdenFetchError<number, string>
|
|
126
166
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
: Errors
|
|
148
|
-
: EdenFetchError<number, string>
|
|
149
|
-
}
|
|
150
|
-
) & {
|
|
151
|
-
status: number
|
|
152
|
-
response: Response
|
|
153
|
-
headers: Record<string, string>
|
|
154
|
-
}
|
|
155
|
-
>) extends (params: infer Params) => infer Response
|
|
156
|
-
? {
|
|
157
|
-
$params: undefined
|
|
158
|
-
$headers: undefined
|
|
159
|
-
$query: undefined
|
|
160
|
-
} extends Params
|
|
161
|
-
? (
|
|
162
|
-
params?: Prettify<
|
|
163
|
-
Params & {
|
|
164
|
-
$transform?: EdenTreaty.Transform<Response>
|
|
167
|
+
) & {
|
|
168
|
+
status: number
|
|
169
|
+
response: Response
|
|
170
|
+
headers: Record<string, string>
|
|
171
|
+
}
|
|
172
|
+
>) extends (params: infer Params) => infer Response
|
|
173
|
+
? {
|
|
174
|
+
$params: undefined
|
|
175
|
+
$headers: undefined
|
|
176
|
+
$query: undefined
|
|
177
|
+
} extends Params
|
|
178
|
+
? (
|
|
179
|
+
params?: Params,
|
|
180
|
+
options?: {
|
|
181
|
+
fetch?: RequestInit
|
|
182
|
+
transform?: EdenTreaty.Transform<Response>
|
|
183
|
+
// @ts-ignore
|
|
184
|
+
query?: Params['query']
|
|
185
|
+
// @ts-ignore
|
|
186
|
+
headers?: Params['headers']
|
|
165
187
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
188
|
+
) => Response
|
|
189
|
+
: (
|
|
190
|
+
params: Params,
|
|
191
|
+
options?: {
|
|
192
|
+
fetch?: RequestInit
|
|
193
|
+
transform?: EdenTreaty.Transform<Response>
|
|
194
|
+
// @ts-ignore
|
|
195
|
+
query?: Params['query']
|
|
196
|
+
// @ts-ignore
|
|
197
|
+
headers?: Params['headers']
|
|
172
198
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
}
|
|
178
|
-
: {}
|
|
199
|
+
) => Response
|
|
200
|
+
: never
|
|
201
|
+
: never
|
|
202
|
+
}
|
|
203
|
+
: {}
|
|
179
204
|
|
|
180
205
|
export interface OnMessage<Data = unknown> extends MessageEvent {
|
|
181
206
|
data: Data
|
|
182
207
|
rawData: MessageEvent['data']
|
|
183
208
|
}
|
|
184
209
|
|
|
210
|
+
export type ExecuteOptions = {
|
|
211
|
+
getRaw?: boolean
|
|
212
|
+
};
|
|
213
|
+
export type ExecuteReturnType<T extends ExecuteOptions> = T['getRaw'] extends true ? Response : DetailedResponse;
|
|
214
|
+
|
|
185
215
|
export type WSEvent<
|
|
186
216
|
K extends keyof WebSocketEventMap,
|
|
187
217
|
Data = unknown
|
package/dist/chunk-2G5RO3ND.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as L}from"./chunk-Y6SMVGJX.mjs";var T=(n,e,t)=>{if(n.endsWith("/")||(n+="/"),e==="index"&&(e=""),!t||!Object.keys(t).length)return`${n}${e}`;let r="";for(let[o,s]of Object.entries(t))r+=`${o}=${s}&`;return`${n}${e}?${r.slice(0,-1)}`};var k=typeof FileList>"u",W=n=>k?n instanceof Blob:n instanceof FileList||n instanceof File,R=n=>{if(!n)return!1;for(let e in n){if(W(n[e]))return!0;if(Array.isArray(n[e])&&n[e].find(t=>W(t)))return!0}return!1},F=n=>k?n:new Promise(e=>{let t=new FileReader;t.onload=()=>{e(new Blob([t.result],{type:n.type}))},t.readAsArrayBuffer(n)}),w=class{ws;url;constructor(e){this.ws=new WebSocket(e),this.url=e}send(e){return Array.isArray(e)?(e.forEach(t=>this.send(t)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,t,r){return this.addEventListener(e,t,r)}off(e,t,r){return this.ws.removeEventListener(e,t,r),this}subscribe(e,t){return this.addEventListener("message",e,t)}addEventListener(e,t,r){return this.ws.addEventListener(e,o=>{if(e==="message"){let s=o.data.toString(),u=s.charCodeAt(0);if(u===47||u===123)try{s=JSON.parse(s)}catch{}else Number.isNaN(+s)?s==="true"?s=!0:s==="fase"&&(s=!1):s=+s;t({...o,data:s})}else t(o)},r),this}removeEventListener(e,t,r){return this.off(e,t,r),this}close(){return this.ws.close(),this}},O=(n,e="",t)=>new Proxy(()=>{},{get(r,o,s){return O(n,`${e}/${o.toString()}`,t)},apply(r,o,[{$query:s,$fetch:u,$headers:K,$transform:h,...x}={$fetch:void 0,$headers:void 0,$query:void 0,$transform:void 0}]=[{}]){let g=e.lastIndexOf("/"),m=e.slice(g+1).toUpperCase(),v=T(n,g===-1?"/":e.slice(0,g),s),N=t.fetcher??fetch,y=t.transform?Array.isArray(t.transform)?t.transform:[t.transform]:void 0,S=h?Array.isArray(h)?h:[h]:void 0;return S&&(y?y=S.concat(y):y=S),m==="SUBSCRIBE"?new w(v.replace(/^([^]+):\/\//,v.startsWith("https://")?"wss://":"ws://")):(async()=>{let f,A={...t.$fetch?.headers,...u?.headers,...K};if(m!=="GET"&&m!=="HEAD"){f=Object.keys(x).length?x:void 0;let i=typeof f=="object";if(i&&R(f)){let p=new FormData;for(let[E,d]of Object.entries(f))if(k)p.append(E,d);else if(d instanceof File)p.append(E,await F(d));else if(d instanceof FileList)for(let b=0;b<d.length;b++)p.append(E,await F(d[b]));else p.append(E,d);f=p}else A["content-type"]=i?"application/json":"text/plain",i&&(f=JSON.stringify(f))}let a=await N(v,{method:m,body:f,...t.$fetch,...u,headers:A}),l;switch(a.headers.get("Content-Type")?.split(";")[0]){case"application/json":l=await a.json();break;default:l=await a.text().then(i=>Number.isNaN(+i)?i==="true"?!0:i==="false"?!1:i:+i)}let $=a.status>=300||a.status<200?new L(a.status,l):null;if(y)for(let i of y){let c=i({data:l,status:a.status,headers:a.headers,response:a,error:$});c instanceof Promise&&(c=await c),c!=null&&(l=c)}return{data:l,error:$,response:a,status:a.status,headers:a.headers}})()}}),P=(n,e={fetcher:fetch})=>new Proxy({},{get(t,r){return O(n,r,e)}});export{w as a,P as b};
|