@elysiajs/eden 0.7.3 → 0.7.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/dist/chunk-VFBRC7KF.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 +27 -9
- package/dist/treaty.d.mts +27 -9
- package/dist/treaty.d.ts +27 -9
- package/dist/treaty.global.js +1 -1
- package/dist/treaty.js +1 -1
- package/dist/treaty.mjs +1 -1
- package/package.json +70 -74
- package/src/treaty/index.ts +95 -30
- package/src/treaty/types.ts +118 -71
- package/dist/chunk-6KKDNR4U.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 W}from"./chunk-Y6SMVGJX.mjs";var T=(s,e,t)=>{if(s.endsWith("/")||(s+="/"),e==="index"&&(e=""),!t||!Object.keys(t).length)return`${s}${e}`;let r="";for(let[f,n]of Object.entries(t))r+=`${f}=${n}&`;return`${s}${e}?${r.slice(0,-1)}`};var $=typeof FileList>"u",K=s=>$?s instanceof Blob:s instanceof FileList||s instanceof File,C=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},k=s=>$?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)}),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,f=>{if(e==="message"){let n=f.data.toString(),u=n.charCodeAt(0);if(u===47||u===123)try{n=JSON.parse(n)}catch{}else Number.isNaN(+n)?n==="true"?n=!0:n==="fase"&&(n=!1):n=+n;t({...f,data:n})}else t(f)},r),this}removeEventListener(e,t,r){return this.off(e,t,r),this}close(){return this.ws.close(),this}},R=(s,e="",t)=>new Proxy(()=>{},{get(r,f,n){return R(s,`${e}/${f.toString()}`,t)},apply(r,f,[n,u={}]=[{},{}]){let y=n!==void 0&&(typeof n!="object"||Array.isArray(n))?n:void 0,{$query:N,$fetch:F,$headers:j,$transform:E,...M}=n??{};y??=M;let S=e.lastIndexOf("/"),b=e.slice(S+1).toUpperCase(),v=T(s,S===-1?"/":e.slice(0,S),Object.assign(u.query??{},N)),I=t.fetcher??fetch,h=t.transform?Array.isArray(t.transform)?t.transform:[t.transform]:void 0,w=E?Array.isArray(E)?E:[E]:void 0;return w&&(h?h=w.concat(h):h=w),b==="SUBSCRIBE"?new x(v.replace(/^([^]+):\/\//,v.startsWith("https://")?"wss://":"ws://")):(async()=>{let c,O={...t.$fetch?.headers,...F?.headers,...u.headers,...j};if(b!=="GET"&&b!=="HEAD"){c=Object.keys(y).length||Array.isArray(y)?y:void 0;let i=typeof c=="object"||Array.isArray(y);if(i&&C(c)){let m=new FormData;for(let[g,o]of Object.entries(c))if($)m.append(g,o);else if(o instanceof File)m.append(g,await k(o));else if(o instanceof FileList)for(let l=0;l<o.length;l++)m.append(g,await k(o[l]));else if(Array.isArray(o))for(let l=0;l<o.length;l++){let A=o[l];m.append(g,A instanceof File?k(A):A)}else m.append(g,o);c=m}else O["content-type"]=i?"application/json":"text/plain",c=i?JSON.stringify(c):y}let a=await I(v,{method:b,body:c,...t.$fetch,...u.fetch,...F,headers:O}),p;switch(a.headers.get("Content-Type")?.split(";")[0]){case"application/json":p=await a.json();break;default:p=await a.text().then(i=>Number.isNaN(+i)?i==="true"?!0:i==="false"?!1:i:+i)}let L=a.status>=300||a.status<200?new W(a.status,p):null;if(h)for(let i of h){let d=i({data:p,status:a.status,headers:a.headers,response:a,error:L});d instanceof Promise&&(d=await d),d!=null&&(p=d)}return{data:p,error:L,response:a,status:a.status,headers:a.headers}})()}}),B=(s,e={fetcher:fetch})=>new Proxy({},{get(t,r){return R(s,r,e)}});export{x as a,B as b};
|
package/dist/index.global.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var Eden=(()=>{var
|
|
1
|
+
"use strict";var Eden=(()=>{var O=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var U=Object.prototype.hasOwnProperty;var V=(r,e)=>{for(var t in e)O(r,t,{get:e[t],enumerable:!0})},z=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of J(e))!U.call(r,a)&&a!==t&&O(r,a,{get:()=>e[a],enumerable:!(n=D(e,a))||n.enumerable});return r};var B=r=>z(O({},"__esModule",{value:!0}),r);var H={};V(H,{edenFetch:()=>P,edenTreaty:()=>I});var S=class extends Error{status;value;constructor(e,t){super(),this.status=e,this.value=t}};var C=(r,e,t)=>{if(r.endsWith("/")||(r+="/"),e==="index"&&(e=""),!t||!Object.keys(t).length)return`${r}${e}`;let n="";for(let[a,s]of Object.entries(t))n+=`${a}=${s}&`;return`${r}${e}?${n.slice(0,-1)}`};var N=typeof FileList>"u",K=r=>N?r instanceof Blob:r instanceof FileList||r instanceof File,G=r=>{if(!r)return!1;for(let e in r){if(K(r[e]))return!0;if(Array.isArray(r[e])&&r[e].find(t=>K(t)))return!0}return!1},j=r=>N?r:new Promise(e=>{let t=new FileReader;t.onload=()=>{let n=new File([t.result],r.name,{lastModified:r.lastModified,type:r.type});e(n)},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,n){return this.addEventListener(e,t,n)}off(e,t,n){return this.ws.removeEventListener(e,t,n),this}subscribe(e,t){return this.addEventListener("message",e,t)}addEventListener(e,t,n){return this.ws.addEventListener(e,a=>{if(e==="message"){let s=a.data.toString(),o=s.charCodeAt(0);if(o===47||o===123)try{s=JSON.parse(s)}catch{}else Number.isNaN(+s)?s==="true"?s=!0:s==="fase"&&(s=!1):s=+s;t({...a,data:s})}else t(a)},n),this}removeEventListener(e,t,n){return this.off(e,t,n),this}close(){return this.ws.close(),this}},M=(r,e="",t)=>new Proxy(()=>{},{get(n,a,s){return M(r,`${e}/${a.toString()}`,t)},apply(n,a,[s,o={}]=[{},{}]){let y=s!==void 0&&(typeof s!="object"||Array.isArray(s))?s:void 0,{$query:A,$fetch:x,$headers:w,$transform:i,...l}=s??{};y??=l;let d=e.lastIndexOf("/"),k=e.slice(d+1).toUpperCase(),F=C(r,d===-1?"/":e.slice(0,d),Object.assign(o.query??{},A)),q=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()=>{let p,W={...t.$fetch?.headers,...x?.headers,...o.headers,...w};if(k!=="GET"&&k!=="HEAD"){p=Object.keys(y).length||Array.isArray(y)?y:void 0;let f=typeof p=="object"||Array.isArray(y);if(f&&G(p)){let b=new FormData;for(let[v,u]of Object.entries(p))if(N)b.append(v,u);else if(u instanceof File)b.append(v,await j(u));else if(u instanceof FileList)for(let m=0;m<u.length;m++)b.append(v,await j(u[m]));else if(Array.isArray(u))for(let m=0;m<u.length;m++){let T=u[m];b.append(v,T instanceof File?j(T):T)}else b.append(v,u);p=b}else W["content-type"]=f?"application/json":"text/plain",p=f?JSON.stringify(p):y}let c=await q(F,{method:k,body:p,...t.$fetch,...o.fetch,...x,headers:W}),g;switch(c.headers.get("Content-Type")?.split(";")[0]){case"application/json":g=await c.json();break;default:g=await c.text().then(f=>Number.isNaN(+f)?f==="true"?!0:f==="false"?!1:f:+f)}let R=c.status>=300||c.status<200?new S(c.status,g):null;if(E)for(let f of E){let h=f({data:g,status:c.status,headers:c.headers,response:c,error:R});h instanceof Promise&&(h=await h),h!=null&&(g=h)}return{data:g,error:R,response:c,status:c.status,headers:c.headers}})()}}),I=(r,e={fetcher:fetch})=>new Proxy({},{get(t,n){return M(r,n,e)}});var P=(r,e)=>(t,{query:n,params:a,body:s,...o}={})=>{a&&Object.entries(a).forEach(([i,l])=>{t=t.replace(`:${i}`,l)});let y=o.headers?.["Content-Type"];if(!y||y==="application/json")try{s=JSON.stringify(s)}catch{}let A=e?.fetcher||globalThis.fetch,x=n?`?${new URLSearchParams(n).toString()}`:"",w=()=>A(r+t+x,{...o,method:o.method?.toUpperCase()||"GET",headers:s?{"content-type":"application/json",...o.headers}:o.headers,body:s}).then(async i=>{let l;switch(i.headers.get("Content-Type")?.split(";")[0]){case"application/json":l=await i.json();break;default:l=await i.text().then(d=>Number.isNaN(+d)?d==="true"?!0:d==="false"?!1:d:+d);break}return i.status>300?{data:null,status:i.status,headers:i.headers,retry:w,error:new S(i.status,l)}:{data:l,error:null,status:i.status,headers:i.headers,retry:w}});return w()};return B(H);})();
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var O=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var U=Object.prototype.hasOwnProperty;var V=(r,e)=>{for(var t in e)O(r,t,{get:e[t],enumerable:!0})},z=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of J(e))!U.call(r,a)&&a!==t&&O(r,a,{get:()=>e[a],enumerable:!(n=D(e,a))||n.enumerable});return r};var B=r=>z(O({},"__esModule",{value:!0}),r);var H={};V(H,{edenFetch:()=>P,edenTreaty:()=>I});module.exports=B(H);var S=class extends Error{status;value;constructor(e,t){super(),this.status=e,this.value=t}};var C=(r,e,t)=>{if(r.endsWith("/")||(r+="/"),e==="index"&&(e=""),!t||!Object.keys(t).length)return`${r}${e}`;let n="";for(let[a,s]of Object.entries(t))n+=`${a}=${s}&`;return`${r}${e}?${n.slice(0,-1)}`};var N=typeof FileList>"u",K=r=>N?r instanceof Blob:r instanceof FileList||r instanceof File,G=r=>{if(!r)return!1;for(let e in r){if(K(r[e]))return!0;if(Array.isArray(r[e])&&r[e].find(t=>K(t)))return!0}return!1},j=r=>N?r:new Promise(e=>{let t=new FileReader;t.onload=()=>{let n=new File([t.result],r.name,{lastModified:r.lastModified,type:r.type});e(n)},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,n){return this.addEventListener(e,t,n)}off(e,t,n){return this.ws.removeEventListener(e,t,n),this}subscribe(e,t){return this.addEventListener("message",e,t)}addEventListener(e,t,n){return this.ws.addEventListener(e,a=>{if(e==="message"){let s=a.data.toString(),o=s.charCodeAt(0);if(o===47||o===123)try{s=JSON.parse(s)}catch{}else Number.isNaN(+s)?s==="true"?s=!0:s==="fase"&&(s=!1):s=+s;t({...a,data:s})}else t(a)},n),this}removeEventListener(e,t,n){return this.off(e,t,n),this}close(){return this.ws.close(),this}},M=(r,e="",t)=>new Proxy(()=>{},{get(n,a,s){return M(r,`${e}/${a.toString()}`,t)},apply(n,a,[s,o={}]=[{},{}]){let y=s!==void 0&&(typeof s!="object"||Array.isArray(s))?s:void 0,{$query:A,$fetch:x,$headers:w,$transform:i,...l}=s??{};y??=l;let d=e.lastIndexOf("/"),k=e.slice(d+1).toUpperCase(),F=C(r,d===-1?"/":e.slice(0,d),Object.assign(o.query??{},A)),q=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()=>{let p,W={...t.$fetch?.headers,...x?.headers,...o.headers,...w};if(k!=="GET"&&k!=="HEAD"){p=Object.keys(y).length||Array.isArray(y)?y:void 0;let f=typeof p=="object"||Array.isArray(y);if(f&&G(p)){let b=new FormData;for(let[v,u]of Object.entries(p))if(N)b.append(v,u);else if(u instanceof File)b.append(v,await j(u));else if(u instanceof FileList)for(let m=0;m<u.length;m++)b.append(v,await j(u[m]));else if(Array.isArray(u))for(let m=0;m<u.length;m++){let T=u[m];b.append(v,T instanceof File?j(T):T)}else b.append(v,u);p=b}else W["content-type"]=f?"application/json":"text/plain",p=f?JSON.stringify(p):y}let c=await q(F,{method:k,body:p,...t.$fetch,...o.fetch,...x,headers:W}),g;switch(c.headers.get("Content-Type")?.split(";")[0]){case"application/json":g=await c.json();break;default:g=await c.text().then(f=>Number.isNaN(+f)?f==="true"?!0:f==="false"?!1:f:+f)}let R=c.status>=300||c.status<200?new S(c.status,g):null;if(E)for(let f of E){let h=f({data:g,status:c.status,headers:c.headers,response:c,error:R});h instanceof Promise&&(h=await h),h!=null&&(g=h)}return{data:g,error:R,response:c,status:c.status,headers:c.headers}})()}}),I=(r,e={fetcher:fetch})=>new Proxy({},{get(t,n){return M(r,n,e)}});var P=(r,e)=>(t,{query:n,params:a,body:s,...o}={})=>{a&&Object.entries(a).forEach(([i,l])=>{t=t.replace(`:${i}`,l)});let y=o.headers?.["Content-Type"];if(!y||y==="application/json")try{s=JSON.stringify(s)}catch{}let A=e?.fetcher||globalThis.fetch,x=n?`?${new URLSearchParams(n).toString()}`:"",w=()=>A(r+t+x,{...o,method:o.method?.toUpperCase()||"GET",headers:s?{"content-type":"application/json",...o.headers}:o.headers,body:s}).then(async i=>{let l;switch(i.headers.get("Content-Type")?.split(";")[0]){case"application/json":l=await i.json();break;default:l=await i.text().then(d=>Number.isNaN(+d)?d==="true"?!0:d==="false"?!1:d:+d);break}return i.status>300?{data:null,status:i.status,headers:i.headers,retry:w,error:new S(i.status,l)}:{data:l,error:null,status:i.status,headers:i.headers,retry:w}});return w()};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-VFBRC7KF.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;
|
|
@@ -18,18 +15,28 @@ type AnySchema = {
|
|
|
18
15
|
params: unknown;
|
|
19
16
|
response: any;
|
|
20
17
|
};
|
|
18
|
+
type MaybeArray<T> = T | T[];
|
|
21
19
|
export declare namespace EdenTreaty {
|
|
22
|
-
type Create<App extends Elysia<any, any, any, any, any, any>> = App extends {
|
|
20
|
+
export type Create<App extends Elysia<any, any, any, any, any, any>> = App extends {
|
|
23
21
|
schema: infer Schema extends Record<string, any>;
|
|
24
22
|
} ? UnionToIntersect<Sign<Schema>> : 'Please install Elysia before using Eden';
|
|
25
|
-
|
|
23
|
+
type UnwrapPromise<T> = T extends Promise<infer A> ? A : T;
|
|
24
|
+
export type Transform<T = unknown> = MaybeArray<(response: unknown extends T ? {
|
|
25
|
+
data: any;
|
|
26
|
+
error: any;
|
|
27
|
+
response: Response;
|
|
28
|
+
status: number;
|
|
29
|
+
headers: Headers;
|
|
30
|
+
} : UnwrapPromise<T>) => UnwrapPromise<T> | void>;
|
|
31
|
+
export interface Config {
|
|
26
32
|
/**
|
|
27
33
|
* Default options to pass to fetch
|
|
28
34
|
*/
|
|
29
35
|
$fetch?: RequestInit;
|
|
30
36
|
fetcher?: typeof fetch;
|
|
37
|
+
transform?: Transform;
|
|
31
38
|
}
|
|
32
|
-
type Sign<Schema extends Record<string, Record<string, unknown>>, Paths extends (string | number)[] = Split<keyof Schema & string>, Carry extends string = ''> = Paths extends [
|
|
39
|
+
export type Sign<Schema extends Record<string, Record<string, unknown>>, Paths extends (string | number)[] = Split<keyof Schema & string>, Carry extends string = ''> = Paths extends [
|
|
33
40
|
infer Prefix extends string | number,
|
|
34
41
|
...infer Rest extends (string | number)[]
|
|
35
42
|
] ? {
|
|
@@ -65,12 +72,23 @@ export declare namespace EdenTreaty {
|
|
|
65
72
|
$params: undefined;
|
|
66
73
|
$headers: undefined;
|
|
67
74
|
$query: undefined;
|
|
68
|
-
} extends Params ? (params?:
|
|
75
|
+
} extends Params ? (params?: Params, options?: {
|
|
76
|
+
fetch?: RequestInit;
|
|
77
|
+
transform?: EdenTreaty.Transform<Response>;
|
|
78
|
+
query?: Params['query'];
|
|
79
|
+
headers?: Params['headers'];
|
|
80
|
+
}) => Response : (params: Params, options?: {
|
|
81
|
+
fetch?: RequestInit;
|
|
82
|
+
transform?: EdenTreaty.Transform<Response>;
|
|
83
|
+
query?: Params['query'];
|
|
84
|
+
headers?: Params['headers'];
|
|
85
|
+
}) => Response : never : never;
|
|
69
86
|
} : {};
|
|
70
|
-
interface OnMessage<Data = unknown> extends MessageEvent {
|
|
87
|
+
export interface OnMessage<Data = unknown> extends MessageEvent {
|
|
71
88
|
data: Data;
|
|
72
89
|
rawData: MessageEvent['data'];
|
|
73
90
|
}
|
|
74
|
-
type WSEvent<K extends keyof WebSocketEventMap, Data = unknown> = K extends 'message' ? OnMessage<Data> : WebSocketEventMap[K];
|
|
91
|
+
export type WSEvent<K extends keyof WebSocketEventMap, Data = unknown> = K extends 'message' ? OnMessage<Data> : WebSocketEventMap[K];
|
|
92
|
+
export {};
|
|
75
93
|
}
|
|
76
94
|
export {};
|
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;
|
|
@@ -18,18 +15,28 @@ type AnySchema = {
|
|
|
18
15
|
params: unknown;
|
|
19
16
|
response: any;
|
|
20
17
|
};
|
|
18
|
+
type MaybeArray<T> = T | T[];
|
|
21
19
|
declare namespace EdenTreaty {
|
|
22
|
-
type Create<App extends Elysia<any, any, any, any, any, any>> = App extends {
|
|
20
|
+
export type Create<App extends Elysia<any, any, any, any, any, any>> = App extends {
|
|
23
21
|
schema: infer Schema extends Record<string, any>;
|
|
24
22
|
} ? UnionToIntersect<Sign<Schema>> : 'Please install Elysia before using Eden';
|
|
25
|
-
|
|
23
|
+
type UnwrapPromise<T> = T extends Promise<infer A> ? A : T;
|
|
24
|
+
export type Transform<T = unknown> = MaybeArray<(response: unknown extends T ? {
|
|
25
|
+
data: any;
|
|
26
|
+
error: any;
|
|
27
|
+
response: Response;
|
|
28
|
+
status: number;
|
|
29
|
+
headers: Headers;
|
|
30
|
+
} : UnwrapPromise<T>) => UnwrapPromise<T> | void>;
|
|
31
|
+
export interface Config {
|
|
26
32
|
/**
|
|
27
33
|
* Default options to pass to fetch
|
|
28
34
|
*/
|
|
29
35
|
$fetch?: RequestInit;
|
|
30
36
|
fetcher?: typeof fetch;
|
|
37
|
+
transform?: Transform;
|
|
31
38
|
}
|
|
32
|
-
type Sign<Schema extends Record<string, Record<string, unknown>>, Paths extends (string | number)[] = Split<keyof Schema & string>, Carry extends string = ''> = Paths extends [
|
|
39
|
+
export type Sign<Schema extends Record<string, Record<string, unknown>>, Paths extends (string | number)[] = Split<keyof Schema & string>, Carry extends string = ''> = Paths extends [
|
|
33
40
|
infer Prefix extends string | number,
|
|
34
41
|
...infer Rest extends (string | number)[]
|
|
35
42
|
] ? {
|
|
@@ -65,13 +72,24 @@ declare namespace EdenTreaty {
|
|
|
65
72
|
$params: undefined;
|
|
66
73
|
$headers: undefined;
|
|
67
74
|
$query: undefined;
|
|
68
|
-
} extends Params ? (params?:
|
|
75
|
+
} extends Params ? (params?: Params, options?: {
|
|
76
|
+
fetch?: RequestInit;
|
|
77
|
+
transform?: EdenTreaty.Transform<Response>;
|
|
78
|
+
query?: Params['query'];
|
|
79
|
+
headers?: Params['headers'];
|
|
80
|
+
}) => Response : (params: Params, options?: {
|
|
81
|
+
fetch?: RequestInit;
|
|
82
|
+
transform?: EdenTreaty.Transform<Response>;
|
|
83
|
+
query?: Params['query'];
|
|
84
|
+
headers?: Params['headers'];
|
|
85
|
+
}) => Response : never : never;
|
|
69
86
|
} : {};
|
|
70
|
-
interface OnMessage<Data = unknown> extends MessageEvent {
|
|
87
|
+
export interface OnMessage<Data = unknown> extends MessageEvent {
|
|
71
88
|
data: Data;
|
|
72
89
|
rawData: MessageEvent['data'];
|
|
73
90
|
}
|
|
74
|
-
type WSEvent<K extends keyof WebSocketEventMap, Data = unknown> = K extends 'message' ? OnMessage<Data> : WebSocketEventMap[K];
|
|
91
|
+
export type WSEvent<K extends keyof WebSocketEventMap, Data = unknown> = K extends 'message' ? OnMessage<Data> : WebSocketEventMap[K];
|
|
92
|
+
export {};
|
|
75
93
|
}
|
|
76
94
|
|
|
77
95
|
declare class EdenWS<Schema extends InputSchema<any> = InputSchema> {
|
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;
|
|
@@ -18,18 +15,28 @@ type AnySchema = {
|
|
|
18
15
|
params: unknown;
|
|
19
16
|
response: any;
|
|
20
17
|
};
|
|
18
|
+
type MaybeArray<T> = T | T[];
|
|
21
19
|
declare namespace EdenTreaty {
|
|
22
|
-
type Create<App extends Elysia<any, any, any, any, any, any>> = App extends {
|
|
20
|
+
export type Create<App extends Elysia<any, any, any, any, any, any>> = App extends {
|
|
23
21
|
schema: infer Schema extends Record<string, any>;
|
|
24
22
|
} ? UnionToIntersect<Sign<Schema>> : 'Please install Elysia before using Eden';
|
|
25
|
-
|
|
23
|
+
type UnwrapPromise<T> = T extends Promise<infer A> ? A : T;
|
|
24
|
+
export type Transform<T = unknown> = MaybeArray<(response: unknown extends T ? {
|
|
25
|
+
data: any;
|
|
26
|
+
error: any;
|
|
27
|
+
response: Response;
|
|
28
|
+
status: number;
|
|
29
|
+
headers: Headers;
|
|
30
|
+
} : UnwrapPromise<T>) => UnwrapPromise<T> | void>;
|
|
31
|
+
export interface Config {
|
|
26
32
|
/**
|
|
27
33
|
* Default options to pass to fetch
|
|
28
34
|
*/
|
|
29
35
|
$fetch?: RequestInit;
|
|
30
36
|
fetcher?: typeof fetch;
|
|
37
|
+
transform?: Transform;
|
|
31
38
|
}
|
|
32
|
-
type Sign<Schema extends Record<string, Record<string, unknown>>, Paths extends (string | number)[] = Split<keyof Schema & string>, Carry extends string = ''> = Paths extends [
|
|
39
|
+
export type Sign<Schema extends Record<string, Record<string, unknown>>, Paths extends (string | number)[] = Split<keyof Schema & string>, Carry extends string = ''> = Paths extends [
|
|
33
40
|
infer Prefix extends string | number,
|
|
34
41
|
...infer Rest extends (string | number)[]
|
|
35
42
|
] ? {
|
|
@@ -65,13 +72,24 @@ declare namespace EdenTreaty {
|
|
|
65
72
|
$params: undefined;
|
|
66
73
|
$headers: undefined;
|
|
67
74
|
$query: undefined;
|
|
68
|
-
} extends Params ? (params?:
|
|
75
|
+
} extends Params ? (params?: Params, options?: {
|
|
76
|
+
fetch?: RequestInit;
|
|
77
|
+
transform?: EdenTreaty.Transform<Response>;
|
|
78
|
+
query?: Params['query'];
|
|
79
|
+
headers?: Params['headers'];
|
|
80
|
+
}) => Response : (params: Params, options?: {
|
|
81
|
+
fetch?: RequestInit;
|
|
82
|
+
transform?: EdenTreaty.Transform<Response>;
|
|
83
|
+
query?: Params['query'];
|
|
84
|
+
headers?: Params['headers'];
|
|
85
|
+
}) => Response : never : never;
|
|
69
86
|
} : {};
|
|
70
|
-
interface OnMessage<Data = unknown> extends MessageEvent {
|
|
87
|
+
export interface OnMessage<Data = unknown> extends MessageEvent {
|
|
71
88
|
data: Data;
|
|
72
89
|
rawData: MessageEvent['data'];
|
|
73
90
|
}
|
|
74
|
-
type WSEvent<K extends keyof WebSocketEventMap, Data = unknown> = K extends 'message' ? OnMessage<Data> : WebSocketEventMap[K];
|
|
91
|
+
export type WSEvent<K extends keyof WebSocketEventMap, Data = unknown> = K extends 'message' ? OnMessage<Data> : WebSocketEventMap[K];
|
|
92
|
+
export {};
|
|
75
93
|
}
|
|
76
94
|
|
|
77
95
|
declare class EdenWS<Schema extends InputSchema<any> = InputSchema> {
|
package/dist/treaty.global.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var Eden=(()=>{var
|
|
1
|
+
"use strict";var Eden=(()=>{var $=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var J=(s,e)=>{for(var t in e)$(s,t,{get:e[t],enumerable:!0})},V=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of q(e))!D.call(s,a)&&a!==t&&$(s,a,{get:()=>e[a],enumerable:!(r=P(e,a))||r.enumerable});return s};var z=s=>V($({},"__esModule",{value:!0}),s);var U={};J(U,{EdenWS:()=>v,edenTreaty:()=>H});var S=class extends Error{status;value;constructor(e,t){super(),this.status=e,this.value=t}};var K=(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",R=s=>O?s instanceof Blob:s instanceof FileList||s instanceof File,B=s=>{if(!s)return!1;for(let e in s){if(R(s[e]))return!0;if(Array.isArray(s[e])&&s[e].find(t=>R(t)))return!0}return!1},F=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)}),v=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==="fase"&&(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:L,$headers:M,$transform:E,...I}=n??{};u??=I;let w=e.lastIndexOf("/"),b=e.slice(w+1).toUpperCase(),k=K(s,w===-1?"/":e.slice(0,w),Object.assign(l.query??{},N)),C=t.fetcher??fetch,p=t.transform?Array.isArray(t.transform)?t.transform:[t.transform]:void 0,A=E?Array.isArray(E)?E:[E]:void 0;return A&&(p?p=A.concat(p):p=A),b==="SUBSCRIBE"?new v(k.replace(/^([^]+):\/\//,k.startsWith("https://")?"wss://":"ws://")):(async()=>{let f,W={...t.$fetch?.headers,...L?.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&&B(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 F(c));else if(c instanceof FileList)for(let y=0;y<c.length;y++)m.append(g,await F(c[y]));else if(Array.isArray(c))for(let y=0;y<c.length;y++){let x=c[y];m.append(g,x instanceof File?F(x):x)}else m.append(g,c);f=m}else W["content-type"]=o?"application/json":"text/plain",f=o?JSON.stringify(f):u}let i=await C(k,{method:b,body:f,...t.$fetch,...l.fetch,...L,headers:W}),h;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 T=i.status>=300||i.status<200?new S(i.status,h):null;if(p)for(let o of p){let d=o({data:h,status:i.status,headers:i.headers,response:i,error:T});d instanceof Promise&&(d=await d),d!=null&&(h=d)}return{data:h,error:T,response:i,status:i.status,headers:i.headers}})()}}),H=(s,e={fetcher:fetch})=>new Proxy({},{get(t,r){return j(s,r,e)}});return z(U);})();
|
package/dist/treaty.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var $=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var J=(s,e)=>{for(var t in e)$(s,t,{get:e[t],enumerable:!0})},V=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of q(e))!D.call(s,a)&&a!==t&&$(s,a,{get:()=>e[a],enumerable:!(r=P(e,a))||r.enumerable});return s};var z=s=>V($({},"__esModule",{value:!0}),s);var U={};J(U,{EdenWS:()=>v,edenTreaty:()=>H});module.exports=z(U);var S=class extends Error{status;value;constructor(e,t){super(),this.status=e,this.value=t}};var K=(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",R=s=>O?s instanceof Blob:s instanceof FileList||s instanceof File,B=s=>{if(!s)return!1;for(let e in s){if(R(s[e]))return!0;if(Array.isArray(s[e])&&s[e].find(t=>R(t)))return!0}return!1},F=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)}),v=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==="fase"&&(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:L,$headers:M,$transform:E,...I}=n??{};u??=I;let w=e.lastIndexOf("/"),b=e.slice(w+1).toUpperCase(),k=K(s,w===-1?"/":e.slice(0,w),Object.assign(l.query??{},N)),C=t.fetcher??fetch,p=t.transform?Array.isArray(t.transform)?t.transform:[t.transform]:void 0,A=E?Array.isArray(E)?E:[E]:void 0;return A&&(p?p=A.concat(p):p=A),b==="SUBSCRIBE"?new v(k.replace(/^([^]+):\/\//,k.startsWith("https://")?"wss://":"ws://")):(async()=>{let f,W={...t.$fetch?.headers,...L?.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&&B(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 F(c));else if(c instanceof FileList)for(let y=0;y<c.length;y++)m.append(g,await F(c[y]));else if(Array.isArray(c))for(let y=0;y<c.length;y++){let x=c[y];m.append(g,x instanceof File?F(x):x)}else m.append(g,c);f=m}else W["content-type"]=o?"application/json":"text/plain",f=o?JSON.stringify(f):u}let i=await C(k,{method:b,body:f,...t.$fetch,...l.fetch,...L,headers:W}),h;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 T=i.status>=300||i.status<200?new S(i.status,h):null;if(p)for(let o of p){let d=o({data:h,status:i.status,headers:i.headers,response:i,error:T});d instanceof Promise&&(d=await d),d!=null&&(h=d)}return{data:h,error:T,response:i,status:i.status,headers:i.headers}})()}}),H=(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-VFBRC7KF.mjs";import"./chunk-Y6SMVGJX.mjs";export{a as EdenWS,b as edenTreaty};
|
package/package.json
CHANGED
|
@@ -1,79 +1,75 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
},
|
|
10
|
-
"main": "./dist/index.js",
|
|
11
|
-
"exports": {
|
|
12
|
-
".": {
|
|
13
|
-
"require": "./dist/index.js",
|
|
14
|
-
"import": "./dist/index.mjs",
|
|
15
|
-
"node": "./dist/index.js",
|
|
16
|
-
"default": "./dist/index.js",
|
|
17
|
-
"types": "./dist/index.d.ts"
|
|
2
|
+
"name": "@elysiajs/eden",
|
|
3
|
+
"version": "0.7.6",
|
|
4
|
+
"description": "Fully type-safe Elysia client",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "saltyAom",
|
|
7
|
+
"url": "https://github.com/SaltyAom",
|
|
8
|
+
"email": "saltyaom@gmail.com"
|
|
18
9
|
},
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
10
|
+
"main": "./dist/index.js",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"require": "./dist/index.js",
|
|
14
|
+
"import": "./dist/index.mjs",
|
|
15
|
+
"node": "./dist/index.js",
|
|
16
|
+
"default": "./dist/index.js",
|
|
17
|
+
"types": "./dist/index.d.ts"
|
|
18
|
+
},
|
|
19
|
+
"./treaty": {
|
|
20
|
+
"require": "./dist/treaty.js",
|
|
21
|
+
"import": "./dist/treaty.mjs",
|
|
22
|
+
"node": "./dist/treaty.js",
|
|
23
|
+
"default": "./dist/treaty.js",
|
|
24
|
+
"types": "./dist/treaty/index.d.ts"
|
|
25
|
+
},
|
|
26
|
+
"./fetch": {
|
|
27
|
+
"require": "./dist/fetch.js",
|
|
28
|
+
"import": "./dist/fetch.mjs",
|
|
29
|
+
"node": "./dist/fetch.js",
|
|
30
|
+
"default": "./dist/fetch.js",
|
|
31
|
+
"types": "./dist/fetch/index.d.ts"
|
|
32
|
+
}
|
|
25
33
|
},
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
"
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
34
|
+
"types": "./src/index.ts",
|
|
35
|
+
"keywords": ["elysia", "eden", "connector"],
|
|
36
|
+
"homepage": "https://github.com/elysiajs/eden",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "https://github.com/elysiajs/eden"
|
|
40
|
+
},
|
|
41
|
+
"bugs": "https://github.com/elysiajs/eden/issues",
|
|
42
|
+
"license": "MIT",
|
|
43
|
+
"scripts": {
|
|
44
|
+
"dev": "bun run --watch example/index.ts",
|
|
45
|
+
"test": "bun test",
|
|
46
|
+
"build": "rimraf dist && tsup",
|
|
47
|
+
"release": "npm run build && npm run test && npm publish --access public"
|
|
48
|
+
},
|
|
49
|
+
"peerDependencies": {
|
|
50
|
+
"elysia": ">= 0.7.0"
|
|
51
|
+
},
|
|
52
|
+
"peerDependenciesMeta": {
|
|
53
|
+
"@sinclair/typebox": {
|
|
54
|
+
"optional": true
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@elysiajs/cors": "0.7.0",
|
|
59
|
+
"@sinclair/typebox": "^0.31.6",
|
|
60
|
+
"@types/node": "^18.15.5",
|
|
61
|
+
"bun-types": "^1.0.1",
|
|
62
|
+
"elysia": "^0.7.15",
|
|
63
|
+
"esbuild": "^0.19.3",
|
|
64
|
+
"eslint": "^8.26.0",
|
|
65
|
+
"rimraf": "^4.4.1",
|
|
66
|
+
"tsup": "^7.2.0",
|
|
67
|
+
"typescript": "^5.2.2"
|
|
68
|
+
},
|
|
69
|
+
"prettier": {
|
|
70
|
+
"semi": false,
|
|
71
|
+
"tabWidth": 4,
|
|
72
|
+
"singleQuote": true,
|
|
73
|
+
"trailingComma": "none"
|
|
59
74
|
}
|
|
60
|
-
},
|
|
61
|
-
"devDependencies": {
|
|
62
|
-
"@elysiajs/cors": "0.7.0",
|
|
63
|
-
"@sinclair/typebox": "^0.31.6",
|
|
64
|
-
"@types/node": "^18.15.5",
|
|
65
|
-
"bun-types": "^1.0.1",
|
|
66
|
-
"elysia": "^0.7.9",
|
|
67
|
-
"esbuild": "^0.19.3",
|
|
68
|
-
"eslint": "^8.26.0",
|
|
69
|
-
"rimraf": "^4.4.1",
|
|
70
|
-
"tsup": "^7.2.0",
|
|
71
|
-
"typescript": "^5.2.2"
|
|
72
|
-
},
|
|
73
|
-
"prettier": {
|
|
74
|
-
"semi": false,
|
|
75
|
-
"tabWidth": 4,
|
|
76
|
-
"singleQuote": true,
|
|
77
|
-
"trailingComma": "none"
|
|
78
|
-
}
|
|
79
75
|
}
|
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)
|
|
@@ -161,31 +165,61 @@ 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
|
+
[initialBody, options = {}]: [
|
|
173
|
+
{
|
|
174
|
+
[x: string]: any
|
|
175
|
+
$fetch?: RequestInit
|
|
176
|
+
$headers?: HeadersInit
|
|
177
|
+
$query?: Record<string, string>
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
fetch?: RequestInit
|
|
181
|
+
transform?: EdenTreaty.Transform
|
|
182
|
+
headers?: Record<string, string>
|
|
183
|
+
query?: Record<string, string | number>
|
|
172
184
|
}
|
|
173
|
-
]
|
|
174
|
-
[x: string]: any
|
|
175
|
-
$fetch?: RequestInit
|
|
176
|
-
$headers?: HeadersInit
|
|
177
|
-
$query?: Record<string, string>
|
|
178
|
-
}[] = [{}]
|
|
185
|
+
] = [{}, {}]
|
|
179
186
|
) {
|
|
187
|
+
let bodyObj: any =
|
|
188
|
+
initialBody !== undefined &&
|
|
189
|
+
(typeof initialBody !== 'object' || Array.isArray(initialBody))
|
|
190
|
+
? initialBody
|
|
191
|
+
: undefined
|
|
192
|
+
|
|
193
|
+
const { $query, $fetch, $headers, $transform, ...restBody } =
|
|
194
|
+
initialBody ?? {}
|
|
195
|
+
|
|
196
|
+
bodyObj ??= restBody
|
|
197
|
+
|
|
180
198
|
const i = path.lastIndexOf('/'),
|
|
181
199
|
method = path.slice(i + 1).toUpperCase(),
|
|
182
200
|
url = composePath(
|
|
183
201
|
domain,
|
|
184
202
|
i === -1 ? '/' : path.slice(0, i),
|
|
185
|
-
$query
|
|
203
|
+
Object.assign(options.query ?? {}, $query)
|
|
186
204
|
)
|
|
187
205
|
|
|
188
206
|
const fetcher = config.fetcher ?? fetch
|
|
207
|
+
let transforms = config.transform
|
|
208
|
+
? Array.isArray(config.transform)
|
|
209
|
+
? config.transform
|
|
210
|
+
: [config.transform]
|
|
211
|
+
: undefined
|
|
212
|
+
|
|
213
|
+
const $transforms = $transform
|
|
214
|
+
? Array.isArray($transform)
|
|
215
|
+
? $transform
|
|
216
|
+
: [$transform]
|
|
217
|
+
: undefined
|
|
218
|
+
|
|
219
|
+
if ($transforms) {
|
|
220
|
+
if (transforms) transforms = $transforms.concat(transforms)
|
|
221
|
+
else transforms = $transforms as any
|
|
222
|
+
}
|
|
189
223
|
|
|
190
224
|
if (method === 'SUBSCRIBE')
|
|
191
225
|
return new EdenWS(
|
|
@@ -201,12 +235,19 @@ const createProxy = (
|
|
|
201
235
|
const headers = {
|
|
202
236
|
...config.$fetch?.headers,
|
|
203
237
|
...$fetch?.headers,
|
|
238
|
+
...options.headers,
|
|
204
239
|
...$headers
|
|
205
240
|
} as Record<string, string>
|
|
206
241
|
|
|
207
242
|
if (method !== 'GET' && method !== 'HEAD') {
|
|
208
|
-
body = Object.keys(bodyObj).length
|
|
209
|
-
|
|
243
|
+
body = Object.keys(bodyObj).length
|
|
244
|
+
? bodyObj
|
|
245
|
+
: Array.isArray(bodyObj)
|
|
246
|
+
? bodyObj
|
|
247
|
+
: undefined
|
|
248
|
+
|
|
249
|
+
const isObject =
|
|
250
|
+
typeof body === 'object' || Array.isArray(bodyObj)
|
|
210
251
|
const isFormData = isObject && hasFile(body)
|
|
211
252
|
|
|
212
253
|
if (isFormData) {
|
|
@@ -221,7 +262,7 @@ const createProxy = (
|
|
|
221
262
|
if (field instanceof File)
|
|
222
263
|
newBody.append(
|
|
223
264
|
key,
|
|
224
|
-
await
|
|
265
|
+
await createNewFile(field as any)
|
|
225
266
|
)
|
|
226
267
|
// @ts-ignore
|
|
227
268
|
else if (field instanceof FileList) {
|
|
@@ -229,7 +270,20 @@ const createProxy = (
|
|
|
229
270
|
for (let i = 0; i < field.length; i++) {
|
|
230
271
|
newBody.append(
|
|
231
272
|
key as any,
|
|
232
|
-
await
|
|
273
|
+
await createNewFile(
|
|
274
|
+
(field as any)[i]
|
|
275
|
+
)
|
|
276
|
+
)
|
|
277
|
+
}
|
|
278
|
+
} else if (Array.isArray(field)) {
|
|
279
|
+
for (let i = 0; i < field.length; i++) {
|
|
280
|
+
const value = (field as any)[i]
|
|
281
|
+
|
|
282
|
+
newBody.append(
|
|
283
|
+
key as any,
|
|
284
|
+
value instanceof File
|
|
285
|
+
? createNewFile(value)
|
|
286
|
+
: value
|
|
233
287
|
)
|
|
234
288
|
}
|
|
235
289
|
} else newBody.append(key, field as string)
|
|
@@ -242,7 +296,7 @@ const createProxy = (
|
|
|
242
296
|
? 'application/json'
|
|
243
297
|
: 'text/plain'
|
|
244
298
|
|
|
245
|
-
|
|
299
|
+
body = isObject ? JSON.stringify(body) : bodyObj
|
|
246
300
|
}
|
|
247
301
|
}
|
|
248
302
|
|
|
@@ -250,6 +304,7 @@ const createProxy = (
|
|
|
250
304
|
method,
|
|
251
305
|
body,
|
|
252
306
|
...config.$fetch,
|
|
307
|
+
...options.fetch,
|
|
253
308
|
...$fetch,
|
|
254
309
|
headers
|
|
255
310
|
})
|
|
@@ -271,21 +326,31 @@ const createProxy = (
|
|
|
271
326
|
})
|
|
272
327
|
}
|
|
273
328
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
data
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
329
|
+
const error =
|
|
330
|
+
response.status >= 300 || response.status < 200
|
|
331
|
+
? new EdenFetchError(response.status, data)
|
|
332
|
+
: null
|
|
333
|
+
|
|
334
|
+
if (transforms)
|
|
335
|
+
for (const transform of transforms) {
|
|
336
|
+
let temp = transform({
|
|
337
|
+
data,
|
|
338
|
+
status: response.status,
|
|
339
|
+
headers: response.headers,
|
|
340
|
+
response,
|
|
341
|
+
error
|
|
342
|
+
})
|
|
343
|
+
if (temp instanceof Promise) temp = await temp
|
|
344
|
+
|
|
345
|
+
if (temp !== undefined && temp !== null) data = temp
|
|
281
346
|
}
|
|
282
347
|
|
|
283
348
|
return {
|
|
284
349
|
data,
|
|
285
|
-
|
|
350
|
+
error,
|
|
286
351
|
response: response,
|
|
287
|
-
|
|
288
|
-
|
|
352
|
+
status: response.status,
|
|
353
|
+
headers: response.headers
|
|
289
354
|
}
|
|
290
355
|
}
|
|
291
356
|
|
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]
|
|
@@ -42,6 +42,8 @@ type AnySchema = {
|
|
|
42
42
|
response: any
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
type MaybeArray<T> = T | T[]
|
|
46
|
+
|
|
45
47
|
export namespace EdenTreaty {
|
|
46
48
|
export type Create<App extends Elysia<any, any, any, any, any, any>> =
|
|
47
49
|
App extends {
|
|
@@ -53,8 +55,24 @@ export namespace EdenTreaty {
|
|
|
53
55
|
type SplitKeys<T> = T extends [infer First, ...infer Rest]
|
|
54
56
|
? [First, Rest]
|
|
55
57
|
: T extends [infer First, ...infer Rest][number]
|
|
56
|
-
|
|
57
|
-
|
|
58
|
+
? [First, Rest]
|
|
59
|
+
: never
|
|
60
|
+
|
|
61
|
+
type UnwrapPromise<T> = T extends Promise<infer A> ? A : T
|
|
62
|
+
|
|
63
|
+
export type Transform<T = unknown> = MaybeArray<
|
|
64
|
+
(
|
|
65
|
+
response: unknown extends T
|
|
66
|
+
? {
|
|
67
|
+
data: any
|
|
68
|
+
error: any
|
|
69
|
+
response: Response
|
|
70
|
+
status: number
|
|
71
|
+
headers: Headers
|
|
72
|
+
}
|
|
73
|
+
: UnwrapPromise<T>
|
|
74
|
+
) => UnwrapPromise<T> | void
|
|
75
|
+
>
|
|
58
76
|
|
|
59
77
|
export interface Config {
|
|
60
78
|
/**
|
|
@@ -62,6 +80,7 @@ export namespace EdenTreaty {
|
|
|
62
80
|
*/
|
|
63
81
|
$fetch?: RequestInit
|
|
64
82
|
fetcher?: typeof fetch
|
|
83
|
+
transform?: Transform
|
|
65
84
|
}
|
|
66
85
|
|
|
67
86
|
export type Sign<
|
|
@@ -78,73 +97,101 @@ export namespace EdenTreaty {
|
|
|
78
97
|
: Prefix]: Sign<Schema, Rest, `${Carry}/${Key}`>
|
|
79
98
|
}
|
|
80
99
|
: Schema[Carry extends '' ? '/' : Carry] extends infer Routes
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
: {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
100
|
+
? {
|
|
101
|
+
[Method in keyof Routes]: Routes[Method] extends infer Route extends
|
|
102
|
+
AnySchema
|
|
103
|
+
? Method extends 'subscribe'
|
|
104
|
+
? undefined extends Route['query']
|
|
105
|
+
? (params?: {
|
|
106
|
+
$query?: Record<string, string>
|
|
107
|
+
}) => EdenWS<Route>
|
|
108
|
+
: (params: {
|
|
109
|
+
$query: Route['query']
|
|
110
|
+
}) => EdenWS<Route>
|
|
111
|
+
: ((
|
|
112
|
+
params: {
|
|
113
|
+
$fetch?: RequestInit
|
|
114
|
+
} & (IsUnknown<Route['body']> extends false
|
|
115
|
+
? Replace<
|
|
116
|
+
Route['body'],
|
|
117
|
+
Blob | Blob[],
|
|
118
|
+
Files
|
|
119
|
+
>
|
|
120
|
+
: {}) &
|
|
121
|
+
(undefined extends Route['query']
|
|
122
|
+
? {
|
|
123
|
+
$query?: Record<string, string>
|
|
124
|
+
}
|
|
125
|
+
: {
|
|
126
|
+
$query: Route['query']
|
|
127
|
+
}) &
|
|
128
|
+
(undefined extends Route['headers']
|
|
129
|
+
? {
|
|
130
|
+
$headers?: Record<string, unknown>
|
|
131
|
+
}
|
|
132
|
+
: {
|
|
133
|
+
$headers: Route['headers']
|
|
134
|
+
})
|
|
135
|
+
) => Promise<
|
|
136
|
+
(
|
|
137
|
+
| {
|
|
138
|
+
data: Route['response'] extends {
|
|
139
|
+
200: infer ReturnedType
|
|
140
|
+
}
|
|
141
|
+
? Awaited<ReturnedType>
|
|
142
|
+
: unknown
|
|
143
|
+
error: null
|
|
107
144
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
145
|
+
| {
|
|
146
|
+
data: null
|
|
147
|
+
error: MapError<
|
|
148
|
+
Route['response']
|
|
149
|
+
> extends infer Errors
|
|
150
|
+
? IsNever<Errors> extends true
|
|
151
|
+
? EdenFetchError<
|
|
152
|
+
number,
|
|
153
|
+
string
|
|
154
|
+
>
|
|
155
|
+
: Errors
|
|
156
|
+
: EdenFetchError<number, string>
|
|
116
157
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
158
|
+
) & {
|
|
159
|
+
status: number
|
|
160
|
+
response: Response
|
|
161
|
+
headers: Record<string, string>
|
|
162
|
+
}
|
|
163
|
+
>) extends (params: infer Params) => infer Response
|
|
164
|
+
? {
|
|
165
|
+
$params: undefined
|
|
166
|
+
$headers: undefined
|
|
167
|
+
$query: undefined
|
|
168
|
+
} extends Params
|
|
169
|
+
? (
|
|
170
|
+
params?: Params,
|
|
171
|
+
options?: {
|
|
172
|
+
fetch?: RequestInit
|
|
173
|
+
transform?: EdenTreaty.Transform<Response>
|
|
174
|
+
// @ts-ignore
|
|
175
|
+
query?: Params['query']
|
|
176
|
+
// @ts-ignore
|
|
177
|
+
headers?: Params['headers']
|
|
178
|
+
}
|
|
179
|
+
) => Response
|
|
180
|
+
: (
|
|
181
|
+
params: Params,
|
|
182
|
+
options?: {
|
|
183
|
+
fetch?: RequestInit
|
|
184
|
+
transform?: EdenTreaty.Transform<Response>
|
|
185
|
+
// @ts-ignore
|
|
186
|
+
query?: Params['query']
|
|
187
|
+
// @ts-ignore
|
|
188
|
+
headers?: Params['headers']
|
|
189
|
+
}
|
|
190
|
+
) => Response
|
|
191
|
+
: never
|
|
192
|
+
: never
|
|
193
|
+
}
|
|
194
|
+
: {}
|
|
148
195
|
|
|
149
196
|
export interface OnMessage<Data = unknown> extends MessageEvent {
|
|
150
197
|
data: Data
|
package/dist/chunk-6KKDNR4U.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as w}from"./chunk-Y6SMVGJX.mjs";var k=(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 S=typeof FileList>"u",x=n=>S?n instanceof Blob:n instanceof FileList||n instanceof File,F=n=>{if(!n)return!1;for(let e in n){if(x(n[e]))return!0;if(Array.isArray(n[e])&&n[e].find(t=>x(t)))return!0}return!1},$=n=>S?n:new Promise(e=>{let t=new FileReader;t.onload=()=>{e(new Blob([t.result],{type:n.type}))},t.readAsArrayBuffer(n)}),v=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(),d=s.charCodeAt(0);if(d===47||d===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}},L=(n,e="",t)=>new Proxy(()=>{},{get(r,o,s){return L(n,`${e}/${o.toString()}`,t)},apply(r,o,[{$query:s,$fetch:d,$headers:W,...b}={$fetch:void 0,$headers:void 0,$query:void 0}]=[{}]){let h=e.lastIndexOf("/"),u=e.slice(h+1).toUpperCase(),E=k(n,h===-1?"/":e.slice(0,h),s),A=t.fetcher??fetch;return u==="SUBSCRIBE"?new v(E.replace(/^([^]+):\/\//,E.startsWith("https://")?"wss://":"ws://")):(async()=>{let c,m={...t.$fetch?.headers,...d?.headers,...W};if(u!=="GET"&&u!=="HEAD"){c=Object.keys(b).length?b:void 0;let a=typeof c=="object";if(a&&F(c)){let y=new FormData;for(let[p,f]of Object.entries(c))if(S)y.append(p,f);else if(f instanceof File)y.append(p,await $(f));else if(f instanceof FileList)for(let g=0;g<f.length;g++)y.append(p,await $(f[g]));else y.append(p,f);c=y}else m["content-type"]=a?"application/json":"text/plain",a&&(c=JSON.stringify(c))}let i=await A(E,{method:u,body:c,...t.$fetch,...d,headers:m}),l;switch(i.headers.get("Content-Type")?.split(";")[0]){case"application/json":l=await i.json();break;default:l=await i.text().then(a=>Number.isNaN(+a)?a==="true"?!0:a==="false"?!1:a:+a)}return i.status>300?{data:l,error:new w(i.status,await l),status:i.status,raw:i,headers:i.headers}:{data:l,status:i.status,response:i,headers:i.headers,error:null}})()}}),B=(n,e={fetcher:fetch})=>new Proxy({},{get(t,r){return L(n,r,e)}});export{v as a,B as b};
|