@elysiajs/eden 0.6.3 → 0.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-G4C5WHQF.mjs +1 -0
- package/dist/chunk-TUC2YNFX.mjs +1 -0
- package/dist/chunk-X77HNZQV.mjs +1 -0
- package/dist/chunk-Y6SMVGJX.mjs +1 -0
- package/dist/errors.d.ts +5 -0
- package/dist/fetch/index.d.ts +4 -0
- package/dist/fetch/types.d.ts +46 -0
- package/dist/fetch.js +1 -1
- package/dist/fetch.mjs +1 -52
- package/dist/fn/index.d.ts +4 -0
- package/dist/fn/types.d.ts +26 -0
- package/dist/fn/utils.d.ts +13 -0
- package/dist/fn.js +1 -1
- package/dist/fn.mjs +1 -93
- package/dist/index.d.ts +3 -0
- package/dist/index.js +1 -25
- package/dist/index.mjs +1 -9
- package/dist/treaty/index.d.ts +16 -0
- package/dist/treaty/types.d.ts +75 -0
- package/dist/treaty/utils.d.ts +1 -0
- package/dist/treaty.js +1 -1
- package/dist/treaty.mjs +1 -173
- package/dist/types.d.ts +25 -0
- package/package.json +5 -5
- package/tsup.config.ts +20 -0
- package/dist/errors-5a40996f.mjs +0 -14
- package/dist/errors-a2cfc56a.js +0 -1
- package/dist/errors.js +0 -10
- package/dist/errors.js.map +0 -1
- package/dist/fetch/index.js +0 -67
- package/dist/fetch/index.js.map +0 -1
- package/dist/fetch/types.js +0 -2
- package/dist/fetch/types.js.map +0 -1
- package/dist/fn/index.js +0 -35
- package/dist/fn/index.js.map +0 -1
- package/dist/fn/types.js +0 -2
- package/dist/fn/types.js.map +0 -1
- package/dist/fn/utils.js +0 -59
- package/dist/fn/utils.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/treaty/index.js +0 -205
- package/dist/treaty/index.js.map +0 -1
- package/dist/treaty/types.js +0 -2
- package/dist/treaty/types.js.map +0 -1
- package/dist/treaty/utils.js +0 -13
- package/dist/treaty/utils.js.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var c=class s{url;config;pendings=[];operation=null;isFetching=!1;sJson;constructor(e,i={}){this.url=e,this.config=i,this.sJson=import("superjson").then(t=>({serialize:t.serialize,deserialize:t.deserialize}))}setConfig(e){this.config=e}clone(e){return new s(this.url,e??this.config)}async run(e,i){let t=+this.pendings.length;if(this.pendings.push(i!==void 0?{n:e,p:i}:{n:e}),this.isFetching)return this.operation?.then(n=>n[t]);this.isFetching=!0,this.operation=new Promise(n=>{setTimeout(async()=>{let r=[...this.pendings];this.pendings=[];let{serialize:o,deserialize:a}=await this.sJson,f=await(this.config?.fetcher||globalThis.fetch)(`${this.url}${this.config.fn??"/~fn"}`,{method:"POST",...this.config.fetch,headers:{"content-type":"elysia/fn",...this.config.fetch?.headers},body:JSON.stringify(o(r))});f.status===200?n(f.json().then(l=>a(l))):n(Array(r.length).fill(new Error(await f.text())))},33)});let h=await this.operation.then(n=>n[t]);return this.operation=null,this.isFetching=!1,h}};var p=(s,e,i)=>new Proxy((...t)=>{},{get(t,h,n){return p(s,[...e,h],i)},apply(t,h,n){let r=n[0],o=e[0];if(e.length===1){if(o in Object.prototype||o in Promise.prototype)return t(...n);switch(o){case"toJSON":return t(...n);case"$set":return i.setConfig(r);case"$clone":return p(s,[],i.clone(r))}}return i.run(e,n).then(a=>{if(a instanceof Error)throw a;return a})}}),d=(s,e)=>p(s,[],new c(s,e));export{d as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as p}from"./chunk-Y6SMVGJX.mjs";var E=(u,f)=>(s,{query:i,params:h,body:a,...n}={})=>{h&&Object.entries(h).forEach(([e,t])=>{s=s.replace(`:${e}`,t)});let o=n.headers?.["Content-Type"];if(!o||o==="application/json")try{a=JSON.stringify(a)}catch{}let l=f?.fetcher||globalThis.fetch,y=i?`?${new URLSearchParams(i).toString()}`:"",c=()=>l(u+s+y,{...n,headers:a?{"content-type":"application/json",...n.headers}:n.headers,body:a}).then(async e=>{let t;switch(e.headers.get("Content-Type")?.split(";")[0]){case"application/json":t=await e.json();break;default:t=await e.text().then(r=>Number.isNaN(+r)?r==="true"?!0:r==="false"?!1:r:+r);break}return e.status>300?{data:null,status:e.status,headers:e.headers,retry:c,error:new p(e.status,t)}:{data:t,error:null,status:e.status,headers:e.headers,retry:c}});return c()};export{E as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as S}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 b=typeof FileList>"u",x=n=>b?n instanceof Blob:n instanceof FileList||n instanceof File,W=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=>b?n:new Promise(e=>{let t=new FileReader;t.onload=()=>{e(new Blob([t.result],{type:n.type}))},t.readAsArrayBuffer(n)}),E=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}},T=(n,e="",t)=>new Proxy(()=>{},{get(r,o,s){return T(n,`${e}/${o.toString()}`,t)},apply(r,o,[{$query:s,$fetch:d,$headers:L,...v}={$fetch:void 0,$headers:void 0,$query:void 0}]=[{}]){let m=e.lastIndexOf("/"),u=e.slice(m+1),h=k(n,e.slice(0,m),s);return u==="subscribe"?new E(h.replace(/^([^]+):\/\//,h.startsWith("https://")?"wss://":"ws://")):(async()=>{let c,w={...t.$fetch?.headers,...d?.headers,...L};if(u!=="GET"&&u!=="HEAD"){c=Object.keys(v).length?v:void 0;let a=typeof c=="object";if(a&&W(c)){let y=new FormData;for(let[p,f]of Object.entries(c))if(b)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 w["content-type"]=a?"application/json":"text/plain",a&&(c=JSON.stringify(c))}let i=await(t.fetcher??fetch)(h,{method:u,body:c,...t.$fetch,...d,headers:w}),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 S(i.status,await l),status:i.status,raw:i,headers:i.headers}:{data:l,status:i.status,response:i,headers:i.headers,error:null}})()}}),R=(n,e={fetcher:fetch})=>new Proxy({},{get(t,r){return T(n,r,e)}});export{E as a,R as b};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var s=class extends Error{status;value;constructor(e,t){super(),this.status=e,this.value=t}};export{s as a};
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { Elysia } from 'elysia';
|
|
2
|
+
import type { EdenFetchError } from '../errors';
|
|
3
|
+
import type { MapError, IsUnknown, IsNever } from '../types';
|
|
4
|
+
type Prettify<T> = {
|
|
5
|
+
[K in keyof T]: T[K];
|
|
6
|
+
} & {};
|
|
7
|
+
export declare namespace EdenFetch {
|
|
8
|
+
type Create<App extends Elysia<any, any>> = App['meta'] extends {
|
|
9
|
+
schema: infer Schema extends Record<string, any>;
|
|
10
|
+
} ? EdenFetch.Fn<Schema> : 'Please install Elysia before using Eden';
|
|
11
|
+
interface Config {
|
|
12
|
+
fetcher?: typeof globalThis.fetch;
|
|
13
|
+
}
|
|
14
|
+
type Fn<Schema extends Record<string, any>> = <Endpoint extends keyof Schema, Method extends Extract<keyof Schema[Endpoint], string>, Route extends Schema[Endpoint][Method]>(endpoint: Endpoint, options: Omit<RequestInit, 'body' | 'method' | 'headers'> & ('get' extends Method ? {
|
|
15
|
+
method?: Uppercase<Method>;
|
|
16
|
+
} : {
|
|
17
|
+
method: Uppercase<Method>;
|
|
18
|
+
}) & (IsNever<keyof Route['params']> extends true ? {
|
|
19
|
+
params?: Record<never, string>;
|
|
20
|
+
} : {
|
|
21
|
+
params: Route['params'];
|
|
22
|
+
}) & (IsNever<keyof Route['query']> extends true ? {
|
|
23
|
+
query?: Record<never, string>;
|
|
24
|
+
} : {
|
|
25
|
+
query: Route['query'];
|
|
26
|
+
}) & (undefined extends Route['headers'] ? {
|
|
27
|
+
headers?: Record<string, string>;
|
|
28
|
+
} : {
|
|
29
|
+
headers: Route['headers'];
|
|
30
|
+
}) & (IsUnknown<Route['body']> extends false ? {
|
|
31
|
+
body: Route['body'];
|
|
32
|
+
} : {
|
|
33
|
+
body?: unknown;
|
|
34
|
+
})) => Promise<Prettify<({
|
|
35
|
+
data: Awaited<Route['response']['200']>;
|
|
36
|
+
error: null;
|
|
37
|
+
} | {
|
|
38
|
+
data: null;
|
|
39
|
+
error: MapError<Route['response']> extends infer Errors ? IsNever<Errors> extends true ? EdenFetchError<number, string> : Errors : EdenFetchError<number, string>;
|
|
40
|
+
}) & {
|
|
41
|
+
status: number;
|
|
42
|
+
response: Response;
|
|
43
|
+
headers: Record<string, string>;
|
|
44
|
+
}>>;
|
|
45
|
+
}
|
|
46
|
+
export {};
|
package/dist/fetch.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
var p=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var E=(r,e)=>{for(var a in e)p(r,a,{get:e[a],enumerable:!0})},S=(r,e,a,u)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of g(e))!x.call(r,s)&&s!==a&&p(r,s,{get:()=>e[s],enumerable:!(u=m(e,s))||u.enumerable});return r};var j=r=>S(p({},"__esModule",{value:!0}),r);var b={};E(b,{edenFetch:()=>w});module.exports=j(b);var h=class extends Error{status;value;constructor(e,a){super(),this.status=e,this.value=a}};var w=(r,e)=>(a,{query:u,params:s,body:c,...o}={})=>{s&&Object.entries(s).forEach(([t,n])=>{a=a.replace(`:${t}`,n)});let f=o.headers?.["Content-Type"];if(!f||f==="application/json")try{c=JSON.stringify(c)}catch{}let y=e?.fetcher||globalThis.fetch,d=u?`?${new URLSearchParams(u).toString()}`:"",l=()=>y(r+a+d,{...o,headers:c?{"content-type":"application/json",...o.headers}:o.headers,body:c}).then(async t=>{let n;switch(t.headers.get("Content-Type")?.split(";")[0]){case"application/json":n=await t.json();break;default:n=await t.text().then(i=>Number.isNaN(+i)?i==="true"?!0:i==="false"?!1:i:+i);break}return t.status>300?{data:null,status:t.status,headers:t.headers,retry:l,error:new h(t.status,n)}:{data:n,error:null,status:t.status,headers:t.headers,retry:l}});return l()};0&&(module.exports={edenFetch});
|
package/dist/fetch.mjs
CHANGED
|
@@ -1,52 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
const E = (p, n) => (
|
|
3
|
-
// @ts-ignore
|
|
4
|
-
(c, { query: u, params: l, body: a, ...s } = {}) => {
|
|
5
|
-
var f;
|
|
6
|
-
l && Object.entries(l).forEach(([t, e]) => {
|
|
7
|
-
c = c.replace(`:${t}`, e);
|
|
8
|
-
});
|
|
9
|
-
const i = (f = s.headers) == null ? void 0 : f["Content-Type"];
|
|
10
|
-
if (!i || i === "application/json")
|
|
11
|
-
try {
|
|
12
|
-
a = JSON.stringify(a);
|
|
13
|
-
} catch {
|
|
14
|
-
}
|
|
15
|
-
const y = (n == null ? void 0 : n.fetcher) || globalThis.fetch, d = u ? `?${new URLSearchParams(u).toString()}` : "", h = () => y(p + c + d, {
|
|
16
|
-
...s,
|
|
17
|
-
headers: a ? {
|
|
18
|
-
"content-type": "application/json",
|
|
19
|
-
...s.headers
|
|
20
|
-
} : s.headers,
|
|
21
|
-
body: a
|
|
22
|
-
}).then(async (t) => {
|
|
23
|
-
var o;
|
|
24
|
-
let e;
|
|
25
|
-
switch ((o = t.headers.get("Content-Type")) == null ? void 0 : o.split(";")[0]) {
|
|
26
|
-
case "application/json":
|
|
27
|
-
e = await t.json();
|
|
28
|
-
break;
|
|
29
|
-
default:
|
|
30
|
-
e = await t.text().then((r) => Number.isNaN(+r) ? r === "true" ? !0 : r === "false" ? !1 : r : +r);
|
|
31
|
-
break;
|
|
32
|
-
}
|
|
33
|
-
return t.status > 300 ? {
|
|
34
|
-
data: null,
|
|
35
|
-
status: t.status,
|
|
36
|
-
headers: t.headers,
|
|
37
|
-
retry: h,
|
|
38
|
-
error: new j(t.status, e)
|
|
39
|
-
} : {
|
|
40
|
-
data: e,
|
|
41
|
-
error: null,
|
|
42
|
-
status: t.status,
|
|
43
|
-
headers: t.headers,
|
|
44
|
-
retry: h
|
|
45
|
-
};
|
|
46
|
-
});
|
|
47
|
-
return h();
|
|
48
|
-
}
|
|
49
|
-
);
|
|
50
|
-
export {
|
|
51
|
-
E as edenFetch
|
|
52
|
-
};
|
|
1
|
+
import{a}from"./chunk-TUC2YNFX.mjs";import"./chunk-Y6SMVGJX.mjs";export{a as edenFetch};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Elysia } from 'elysia';
|
|
2
|
+
export declare namespace EdenFn {
|
|
3
|
+
type Create<App extends Elysia<any, any>> = App['meta'] extends {
|
|
4
|
+
exposed: infer Schema extends Record<string, any>;
|
|
5
|
+
} ? EdenFn.Compose<Schema> : 'Please install Elysia before using Eden';
|
|
6
|
+
interface Config {
|
|
7
|
+
}
|
|
8
|
+
type Compose<Exposed extends Record<string, any>> = Fn<Exposed> & {
|
|
9
|
+
$set(config: Config): void;
|
|
10
|
+
$clone(config?: Config): Compose<Exposed>;
|
|
11
|
+
};
|
|
12
|
+
type Fn<T> = T extends {
|
|
13
|
+
exposed: any;
|
|
14
|
+
value: infer Value;
|
|
15
|
+
} ? Asynctify<Value> : Asynctify<T>;
|
|
16
|
+
interface Config {
|
|
17
|
+
fn?: string;
|
|
18
|
+
fetch?: Omit<RequestInit, 'body'>;
|
|
19
|
+
fetcher?: typeof globalThis.fetch;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
type Promisify<T extends (...args: any[]) => any> = T extends (...args: infer Args) => infer Return ? Return extends Promise<any> ? T : (...args: Args) => Promise<Return> : never;
|
|
23
|
+
type Asynctify<T> = T extends infer Fn extends (...args: any) => any ? Promisify<Fn> : T extends Record<string, any> ? {
|
|
24
|
+
[K in keyof T]: EdenFn.Fn<T[K]>;
|
|
25
|
+
} : never;
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { EdenFn } from './types';
|
|
2
|
+
export declare class Signal {
|
|
3
|
+
private url;
|
|
4
|
+
private config;
|
|
5
|
+
private pendings;
|
|
6
|
+
private operation;
|
|
7
|
+
private isFetching;
|
|
8
|
+
private sJson;
|
|
9
|
+
constructor(url: string, config?: EdenFn.Config);
|
|
10
|
+
setConfig(config: EdenFn.Config): void;
|
|
11
|
+
clone(config?: EdenFn.Config): Signal;
|
|
12
|
+
run(procedure: string[], params: any): Promise<any>;
|
|
13
|
+
}
|
package/dist/fn.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
var u=Object.create;var c=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var F=Object.getOwnPropertyNames;var m=Object.getPrototypeOf,E=Object.prototype.hasOwnProperty;var w=(n,e)=>{for(var t in e)c(n,t,{get:e[t],enumerable:!0})},g=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of F(e))!E.call(n,r)&&r!==t&&c(n,r,{get:()=>e[r],enumerable:!(i=d(e,r))||i.enumerable});return n};var z=(n,e,t)=>(t=n!=null?u(m(n)):{},g(e||!n||!n.__esModule?c(t,"default",{value:n,enumerable:!0}):t,n)),C=n=>g(c({},"__esModule",{value:!0}),n);var P={};w(P,{edenFn:()=>x});module.exports=C(P);var f=class n{url;config;pendings=[];operation=null;isFetching=!1;sJson;constructor(e,t={}){this.url=e,this.config=t,this.sJson=import("superjson").then(i=>({serialize:i.serialize,deserialize:i.deserialize}))}setConfig(e){this.config=e}clone(e){return new n(this.url,e??this.config)}async run(e,t){let i=+this.pendings.length;if(this.pendings.push(t!==void 0?{n:e,p:t}:{n:e}),this.isFetching)return this.operation?.then(s=>s[i]);this.isFetching=!0,this.operation=new Promise(s=>{setTimeout(async()=>{let o=[...this.pendings];this.pendings=[];let{serialize:a,deserialize:h}=await this.sJson,p=await(this.config?.fetcher||globalThis.fetch)(`${this.url}${this.config.fn??"/~fn"}`,{method:"POST",...this.config.fetch,headers:{"content-type":"elysia/fn",...this.config.fetch?.headers},body:JSON.stringify(a(o))});p.status===200?s(p.json().then(y=>h(y))):s(Array(o.length).fill(new Error(await p.text())))},33)});let r=await this.operation.then(s=>s[i]);return this.operation=null,this.isFetching=!1,r}};var l=(n,e,t)=>new Proxy((...i)=>{},{get(i,r,s){return l(n,[...e,r],t)},apply(i,r,s){let o=s[0],a=e[0];if(e.length===1){if(a in Object.prototype||a in Promise.prototype)return i(...s);switch(a){case"toJSON":return i(...s);case"$set":return t.setConfig(o);case"$clone":return l(n,[],t.clone(o))}}return t.run(e,s).then(h=>{if(h instanceof Error)throw h;return h})}}),x=(n,e)=>l(n,[],new f(n,e));0&&(module.exports={edenFn});
|
package/dist/fn.mjs
CHANGED
|
@@ -1,93 +1 @@
|
|
|
1
|
-
|
|
2
|
-
var z = (n, t, e) => t in n ? d(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
|
|
3
|
-
var o = (n, t, e) => (z(n, typeof t != "symbol" ? t + "" : t, e), e);
|
|
4
|
-
class u {
|
|
5
|
-
constructor(t, e = {}) {
|
|
6
|
-
o(this, "url");
|
|
7
|
-
o(this, "config");
|
|
8
|
-
o(this, "pendings", []);
|
|
9
|
-
o(this, "operation", null);
|
|
10
|
-
o(this, "isFetching", !1);
|
|
11
|
-
o(this, "sJson");
|
|
12
|
-
this.url = t, this.config = e, this.sJson = import("superjson").then((i) => ({
|
|
13
|
-
serialize: i.serialize,
|
|
14
|
-
deserialize: i.deserialize
|
|
15
|
-
}));
|
|
16
|
-
}
|
|
17
|
-
setConfig(t) {
|
|
18
|
-
this.config = t;
|
|
19
|
-
}
|
|
20
|
-
clone(t) {
|
|
21
|
-
return new u(this.url, t ?? this.config);
|
|
22
|
-
}
|
|
23
|
-
async run(t, e) {
|
|
24
|
-
var r;
|
|
25
|
-
const i = +this.pendings.length;
|
|
26
|
-
if (this.pendings.push(
|
|
27
|
-
e !== void 0 ? { n: t, p: e } : { n: t }
|
|
28
|
-
), this.isFetching)
|
|
29
|
-
return (r = this.operation) == null ? void 0 : r.then((s) => s[i]);
|
|
30
|
-
this.isFetching = !0, this.operation = new Promise((s) => {
|
|
31
|
-
setTimeout(async () => {
|
|
32
|
-
var g, p;
|
|
33
|
-
const h = [...this.pendings];
|
|
34
|
-
this.pendings = [];
|
|
35
|
-
const { serialize: c, deserialize: y } = await this.sJson, l = await (((g = this.config) == null ? void 0 : g.fetcher) || globalThis.fetch)(
|
|
36
|
-
`${this.url}${this.config.fn ?? "/~fn"}`,
|
|
37
|
-
{
|
|
38
|
-
method: "POST",
|
|
39
|
-
...this.config.fetch,
|
|
40
|
-
headers: {
|
|
41
|
-
"content-type": "elysia/fn",
|
|
42
|
-
...(p = this.config.fetch) == null ? void 0 : p.headers
|
|
43
|
-
},
|
|
44
|
-
body: JSON.stringify(c(h))
|
|
45
|
-
}
|
|
46
|
-
);
|
|
47
|
-
l.status === 200 ? s(l.json().then((w) => y(w))) : s(
|
|
48
|
-
Array(h.length).fill(
|
|
49
|
-
new Error(await l.text())
|
|
50
|
-
)
|
|
51
|
-
);
|
|
52
|
-
}, 33);
|
|
53
|
-
});
|
|
54
|
-
const f = await this.operation.then((s) => s[i]);
|
|
55
|
-
return this.operation = null, this.isFetching = !1, f;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
const a = (n, t, e) => (
|
|
59
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
60
|
-
new Proxy((...i) => {
|
|
61
|
-
}, {
|
|
62
|
-
get(i, f, r) {
|
|
63
|
-
return a(n, [...t, f], e);
|
|
64
|
-
},
|
|
65
|
-
apply(i, f, r) {
|
|
66
|
-
const s = r[0], h = t[0];
|
|
67
|
-
if (t.length === 1) {
|
|
68
|
-
if (h in Object.prototype || h in Promise.prototype)
|
|
69
|
-
return i(...r);
|
|
70
|
-
switch (h) {
|
|
71
|
-
case "toJSON":
|
|
72
|
-
return i(...r);
|
|
73
|
-
case "$set":
|
|
74
|
-
return e.setConfig(s);
|
|
75
|
-
case "$clone":
|
|
76
|
-
return a(n, [], e.clone(s));
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return e.run(t, r).then((c) => {
|
|
80
|
-
if (c instanceof Error)
|
|
81
|
-
throw c;
|
|
82
|
-
return c;
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
})
|
|
86
|
-
), x = (n, t) => (
|
|
87
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
88
|
-
// @ts-ignore
|
|
89
|
-
a(n, [], new u(n, t))
|
|
90
|
-
);
|
|
91
|
-
export {
|
|
92
|
-
x as edenFn
|
|
93
|
-
};
|
|
1
|
+
import{a}from"./chunk-G4C5WHQF.mjs";export{a as edenFn};
|
package/dist/index.d.ts
ADDED
package/dist/index.js
CHANGED
|
@@ -1,25 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { edenFetch } from './fetch';
|
|
3
|
-
export { edenFn } from './fn';
|
|
4
|
-
// @ts-ignore
|
|
5
|
-
// export const eden: Eden = (domain: string) => ({
|
|
6
|
-
// treaty(config) {
|
|
7
|
-
// return import('./treaty').then((x) => x.edenTreaty(domain, config))
|
|
8
|
-
// },
|
|
9
|
-
// fn(config) {
|
|
10
|
-
// return import('./fn').then((x) => x.edenFn(domain, config))
|
|
11
|
-
// },
|
|
12
|
-
// fetch(config) {
|
|
13
|
-
// return import('./fetch').then((x) => x.edenFetch(domain, config))
|
|
14
|
-
// }
|
|
15
|
-
// })
|
|
16
|
-
// type Eden = (domain: string) => {
|
|
17
|
-
// treaty<App extends Elysia<any>>(
|
|
18
|
-
// config?: EdenTreaty.Config
|
|
19
|
-
// ): EdenTreaty.Create<App>
|
|
20
|
-
// fetch<App extends Elysia<any>>(
|
|
21
|
-
// config?: EdenFetch.Config
|
|
22
|
-
// ): EdenFetch.Create<App>
|
|
23
|
-
// fn<App extends Elysia<any>>(config?: EdenFn.Config): EdenFn.Create<App>
|
|
24
|
-
// }
|
|
25
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
var W=Object.create;var b=Object.defineProperty;var K=Object.getOwnPropertyDescriptor;var R=Object.getOwnPropertyNames;var J=Object.getPrototypeOf,M=Object.prototype.hasOwnProperty;var B=(n,e)=>{for(var t in e)b(n,t,{get:e[t],enumerable:!0})},A=(n,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of R(e))!M.call(n,i)&&i!==t&&b(n,i,{get:()=>e[i],enumerable:!(s=K(e,i))||s.enumerable});return n};var D=(n,e,t)=>(t=n!=null?W(J(n)):{},A(e||!n||!n.__esModule?b(t,"default",{value:n,enumerable:!0}):t,n)),q=n=>A(b({},"__esModule",{value:!0}),n);var V={};B(V,{edenFetch:()=>z,edenFn:()=>P,edenTreaty:()=>j});module.exports=q(V);var g=class extends Error{status;value;constructor(e,t){super(),this.status=e,this.value=t}};var O=(n,e,t)=>{if(n.endsWith("/")||(n+="/"),e==="index"&&(e=""),!t||!Object.keys(t).length)return`${n}${e}`;let s="";for(let[i,r]of Object.entries(t))s+=`${i}=${r}&`;return`${n}${e}?${s.slice(0,-1)}`};var k=typeof FileList>"u",C=n=>k?n instanceof Blob:n instanceof FileList||n instanceof File,I=n=>{if(!n)return!1;for(let e in n){if(C(n[e]))return!0;if(Array.isArray(n[e])&&n[e].find(t=>C(t)))return!0}return!1},L=n=>k?n:new Promise(e=>{let t=new FileReader;t.onload=()=>{e(new Blob([t.result],{type:n.type}))},t.readAsArrayBuffer(n)}),F=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,i=>{if(e==="message"){let r=i.data.toString(),o=r.charCodeAt(0);if(o===47||o===123)try{r=JSON.parse(r)}catch{}else Number.isNaN(+r)?r==="true"?r=!0:r==="fase"&&(r=!1):r=+r;t({...i,data:r})}else t(i)},s),this}removeEventListener(e,t,s){return this.off(e,t,s),this}close(){return this.ws.close(),this}},N=(n,e="",t)=>new Proxy(()=>{},{get(s,i,r){return N(n,`${e}/${i.toString()}`,t)},apply(s,i,[{$query:r,$fetch:o,$headers:p,...h}={$fetch:void 0,$headers:void 0,$query:void 0}]=[{}]){let m=e.lastIndexOf("/"),f=e.slice(m+1),a=O(n,e.slice(0,m),r);return f==="subscribe"?new F(a.replace(/^([^]+):\/\//,a.startsWith("https://")?"wss://":"ws://")):(async()=>{let c,$={...t.$fetch?.headers,...o?.headers,...p};if(f!=="GET"&&f!=="HEAD"){c=Object.keys(h).length?h:void 0;let y=typeof c=="object";if(y&&I(c)){let w=new FormData;for(let[S,d]of Object.entries(c))if(k)w.append(S,d);else if(d instanceof File)w.append(S,await L(d));else if(d instanceof FileList)for(let x=0;x<d.length;x++)w.append(S,await L(d[x]));else w.append(S,d);c=w}else $["content-type"]=y?"application/json":"text/plain",y&&(c=JSON.stringify(c))}let l=await(t.fetcher??fetch)(a,{method:f,body:c,...t.$fetch,...o,headers:$}),E;switch(l.headers.get("Content-Type")?.split(";")[0]){case"application/json":E=await l.json();break;default:E=await l.text().then(y=>Number.isNaN(+y)?y==="true"?!0:y==="false"?!1:y:+y)}return l.status>300?{data:E,error:new g(l.status,await E),status:l.status,raw:l,headers:l.headers}:{data:E,status:l.status,response:l,headers:l.headers,error:null}})()}}),j=(n,e={fetcher:fetch})=>new Proxy({},{get(t,s){return N(n,s,e)}});var z=(n,e)=>(t,{query:s,params:i,body:r,...o}={})=>{i&&Object.entries(i).forEach(([a,u])=>{t=t.replace(`:${a}`,u)});let p=o.headers?.["Content-Type"];if(!p||p==="application/json")try{r=JSON.stringify(r)}catch{}let h=e?.fetcher||globalThis.fetch,m=s?`?${new URLSearchParams(s).toString()}`:"",f=()=>h(n+t+m,{...o,headers:r?{"content-type":"application/json",...o.headers}:o.headers,body:r}).then(async a=>{let u;switch(a.headers.get("Content-Type")?.split(";")[0]){case"application/json":u=await a.json();break;default:u=await a.text().then(c=>Number.isNaN(+c)?c==="true"?!0:c==="false"?!1:c:+c);break}return a.status>300?{data:null,status:a.status,headers:a.headers,retry:f,error:new g(a.status,u)}:{data:u,error:null,status:a.status,headers:a.headers,retry:f}});return f()};var v=class n{url;config;pendings=[];operation=null;isFetching=!1;sJson;constructor(e,t={}){this.url=e,this.config=t,this.sJson=import("superjson").then(s=>({serialize:s.serialize,deserialize:s.deserialize}))}setConfig(e){this.config=e}clone(e){return new n(this.url,e??this.config)}async run(e,t){let s=+this.pendings.length;if(this.pendings.push(t!==void 0?{n:e,p:t}:{n:e}),this.isFetching)return this.operation?.then(r=>r[s]);this.isFetching=!0,this.operation=new Promise(r=>{setTimeout(async()=>{let o=[...this.pendings];this.pendings=[];let{serialize:p,deserialize:h}=await this.sJson,f=await(this.config?.fetcher||globalThis.fetch)(`${this.url}${this.config.fn??"/~fn"}`,{method:"POST",...this.config.fetch,headers:{"content-type":"elysia/fn",...this.config.fetch?.headers},body:JSON.stringify(p(o))});f.status===200?r(f.json().then(a=>h(a))):r(Array(o.length).fill(new Error(await f.text())))},33)});let i=await this.operation.then(r=>r[s]);return this.operation=null,this.isFetching=!1,i}};var T=(n,e,t)=>new Proxy((...s)=>{},{get(s,i,r){return T(n,[...e,i],t)},apply(s,i,r){let o=r[0],p=e[0];if(e.length===1){if(p in Object.prototype||p in Promise.prototype)return s(...r);switch(p){case"toJSON":return s(...r);case"$set":return t.setConfig(o);case"$clone":return T(n,[],t.clone(o))}}return t.run(e,r).then(h=>{if(h instanceof Error)throw h;return h})}}),P=(n,e)=>T(n,[],new v(n,e));0&&(module.exports={edenFetch,edenFn,edenTreaty});
|
package/dist/index.mjs
CHANGED
|
@@ -1,9 +1 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { edenFetch as n } from "./fetch.mjs";
|
|
3
|
-
import { edenFn as d } from "./fn.mjs";
|
|
4
|
-
import "./errors-5a40996f.mjs";
|
|
5
|
-
export {
|
|
6
|
-
n as edenFetch,
|
|
7
|
-
d as edenFn,
|
|
8
|
-
t as edenTreaty
|
|
9
|
-
};
|
|
1
|
+
import{b as e}from"./chunk-X77HNZQV.mjs";import{a as t}from"./chunk-TUC2YNFX.mjs";import"./chunk-Y6SMVGJX.mjs";import{a as r}from"./chunk-G4C5WHQF.mjs";export{t as edenFetch,r as edenFn,e as edenTreaty};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Elysia, TypedSchema } from 'elysia';
|
|
2
|
+
import type { EdenTreaty } from './types';
|
|
3
|
+
export type { EdenTreaty } from './types';
|
|
4
|
+
export declare class EdenWS<Schema extends TypedSchema<any> = TypedSchema> {
|
|
5
|
+
ws: WebSocket;
|
|
6
|
+
url: string;
|
|
7
|
+
constructor(url: string);
|
|
8
|
+
send(data: Schema['body'] | Schema['body'][]): this;
|
|
9
|
+
on<K extends keyof WebSocketEventMap>(type: K, listener: (event: EdenTreaty.WSEvent<K, Schema['response']>) => void, options?: boolean | AddEventListenerOptions): this;
|
|
10
|
+
off<K extends keyof WebSocketEventMap>(type: K, listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any, options?: boolean | EventListenerOptions): this;
|
|
11
|
+
subscribe(onMessage: (event: EdenTreaty.WSEvent<'message', Schema['response']>) => void, options?: boolean | AddEventListenerOptions): this;
|
|
12
|
+
addEventListener<K extends keyof WebSocketEventMap>(type: K, listener: (event: EdenTreaty.WSEvent<K, Schema['response']>) => void, options?: boolean | AddEventListenerOptions): this;
|
|
13
|
+
removeEventListener<K extends keyof WebSocketEventMap>(type: K, listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any, options?: boolean | EventListenerOptions): this;
|
|
14
|
+
close(): this;
|
|
15
|
+
}
|
|
16
|
+
export declare const edenTreaty: <App extends Elysia<any, any>>(domain: string, config?: EdenTreaty.Config) => EdenTreaty.Create<App>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { Elysia } from 'elysia';
|
|
2
|
+
import type { EdenWS } from './index';
|
|
3
|
+
import type { IsUnknown, IsNever, UnionToIntersect, MapError } from '../types';
|
|
4
|
+
import type { EdenFetchError } from '../errors';
|
|
5
|
+
type Files = File | FileList;
|
|
6
|
+
type Replace<RecordType, TargetType, GenericType> = {
|
|
7
|
+
[K in keyof RecordType]: RecordType[K] extends TargetType ? GenericType : RecordType[K];
|
|
8
|
+
};
|
|
9
|
+
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];
|
|
10
|
+
type Prettify<T> = {
|
|
11
|
+
[K in keyof T]: T[K];
|
|
12
|
+
} & {};
|
|
13
|
+
type AnySchema = {
|
|
14
|
+
body: unknown;
|
|
15
|
+
headers: Record<string, any> | undefined;
|
|
16
|
+
query: Record<string, any> | undefined;
|
|
17
|
+
params: Record<string, any> | undefined;
|
|
18
|
+
response: any;
|
|
19
|
+
};
|
|
20
|
+
export declare namespace EdenTreaty {
|
|
21
|
+
type Create<App extends Elysia<any, any>> = App['meta'] extends {
|
|
22
|
+
schema: infer Schema extends Record<string, any>;
|
|
23
|
+
} ? UnionToIntersect<Sign<Schema>> : 'Please install Elysia before using Eden';
|
|
24
|
+
interface Config {
|
|
25
|
+
/**
|
|
26
|
+
* Default options to pass to fetch
|
|
27
|
+
*/
|
|
28
|
+
$fetch?: RequestInit;
|
|
29
|
+
fetcher?: typeof fetch;
|
|
30
|
+
}
|
|
31
|
+
type Sign<Schema extends Record<string, Record<string, unknown>>, Paths extends (string | number)[] = Split<keyof Schema>, Carry extends string = ''> = Paths extends [
|
|
32
|
+
infer Prefix extends string | number,
|
|
33
|
+
...infer Rest extends (string | number)[]
|
|
34
|
+
] ? {
|
|
35
|
+
[Key in Prefix as Prefix extends `:${string}` ? (string & {}) | number | Prefix : Prefix]: Sign<Schema, Rest, `${Carry}/${Key}`>;
|
|
36
|
+
} : Schema[Carry extends '' ? '/' : Carry] extends infer Routes ? {
|
|
37
|
+
[Method in keyof Routes]: Routes[Method] extends infer Route extends AnySchema ? Method extends 'subscribe' ? undefined extends Route['query'] ? (params?: {
|
|
38
|
+
$query?: Record<string, string>;
|
|
39
|
+
}) => EdenWS<Route> : (params: {
|
|
40
|
+
$query: Route['query'];
|
|
41
|
+
}) => EdenWS<Route> : ((params: {
|
|
42
|
+
$fetch?: RequestInit;
|
|
43
|
+
} & (IsUnknown<Route['body']> extends false ? Replace<Route['body'], Blob | Blob[], Files> : {}) & (undefined extends Route['query'] ? {
|
|
44
|
+
$query?: Record<string, string>;
|
|
45
|
+
} : {
|
|
46
|
+
$query: Route['query'];
|
|
47
|
+
}) & (undefined extends Route['headers'] ? {
|
|
48
|
+
$headers?: Record<string, unknown>;
|
|
49
|
+
} : {
|
|
50
|
+
$headers: Route['headers'];
|
|
51
|
+
})) => Promise<({
|
|
52
|
+
data: Route['response'] extends {
|
|
53
|
+
200: infer ReturnedType;
|
|
54
|
+
} ? Awaited<ReturnedType> : unknown;
|
|
55
|
+
error: null;
|
|
56
|
+
} | {
|
|
57
|
+
data: null;
|
|
58
|
+
error: MapError<Route['response']> extends infer Errors ? IsNever<Errors> extends true ? EdenFetchError<number, string> : Errors : EdenFetchError<number, string>;
|
|
59
|
+
}) & {
|
|
60
|
+
status: number;
|
|
61
|
+
response: Response;
|
|
62
|
+
headers: Record<string, string>;
|
|
63
|
+
}>) extends (params: infer Params) => infer Response ? {
|
|
64
|
+
$params: undefined;
|
|
65
|
+
$headers: undefined;
|
|
66
|
+
$query: undefined;
|
|
67
|
+
} extends Params ? (params?: Prettify<Params>) => Response : (params: Prettify<Params>) => Response : never : never;
|
|
68
|
+
} : {};
|
|
69
|
+
interface OnMessage<Data = unknown> extends MessageEvent {
|
|
70
|
+
data: Data;
|
|
71
|
+
rawData: MessageEvent['data'];
|
|
72
|
+
}
|
|
73
|
+
type WSEvent<K extends keyof WebSocketEventMap, Data = unknown> = K extends 'message' ? OnMessage<Data> : WebSocketEventMap[K];
|
|
74
|
+
}
|
|
75
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const composePath: (domain: string, path: string, query: Record<string, string> | undefined) => string;
|
package/dist/treaty.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
var m=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var K=(s,e)=>{for(var t in e)m(s,t,{get:e[t],enumerable:!0})},N=(s,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of O(e))!F.call(s,i)&&i!==t&&m(s,i,{get:()=>e[i],enumerable:!(n=A(e,i))||n.enumerable});return s};var R=s=>N(m({},"__esModule",{value:!0}),s);var B={};K(B,{EdenWS:()=>g,edenTreaty:()=>j});module.exports=R(B);var h=class extends Error{status;value;constructor(e,t){super(),this.status=e,this.value=t}};var x=(s,e,t)=>{if(s.endsWith("/")||(s+="/"),e==="index"&&(e=""),!t||!Object.keys(t).length)return`${s}${e}`;let n="";for(let[i,r]of Object.entries(t))n+=`${i}=${r}&`;return`${s}${e}?${n.slice(0,-1)}`};var v=typeof FileList>"u",$=s=>v?s instanceof Blob:s instanceof FileList||s instanceof File,M=s=>{if(!s)return!1;for(let e in s){if($(s[e]))return!0;if(Array.isArray(s[e])&&s[e].find(t=>$(t)))return!0}return!1},T=s=>v?s:new Promise(e=>{let t=new FileReader;t.onload=()=>{e(new Blob([t.result],{type:s.type}))},t.readAsArrayBuffer(s)}),g=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,i=>{if(e==="message"){let r=i.data.toString(),f=r.charCodeAt(0);if(f===47||f===123)try{r=JSON.parse(r)}catch{}else Number.isNaN(+r)?r==="true"?r=!0:r==="fase"&&(r=!1):r=+r;t({...i,data:r})}else t(i)},n),this}removeEventListener(e,t,n){return this.off(e,t,n),this}close(){return this.ws.close(),this}},L=(s,e="",t)=>new Proxy(()=>{},{get(n,i,r){return L(s,`${e}/${i.toString()}`,t)},apply(n,i,[{$query:r,$fetch:f,$headers:W,...S}={$fetch:void 0,$headers:void 0,$query:void 0}]=[{}]){let w=e.lastIndexOf("/"),y=e.slice(w+1),E=x(s,e.slice(0,w),r);return y==="subscribe"?new g(E.replace(/^([^]+):\/\//,E.startsWith("https://")?"wss://":"ws://")):(async()=>{let c,k={...t.$fetch?.headers,...f?.headers,...W};if(y!=="GET"&&y!=="HEAD"){c=Object.keys(S).length?S:void 0;let o=typeof c=="object";if(o&&M(c)){let l=new FormData;for(let[p,u]of Object.entries(c))if(v)l.append(p,u);else if(u instanceof File)l.append(p,await T(u));else if(u instanceof FileList)for(let b=0;b<u.length;b++)l.append(p,await T(u[b]));else l.append(p,u);c=l}else k["content-type"]=o?"application/json":"text/plain",o&&(c=JSON.stringify(c))}let a=await(t.fetcher??fetch)(E,{method:y,body:c,...t.$fetch,...f,headers:k}),d;switch(a.headers.get("Content-Type")?.split(";")[0]){case"application/json":d=await a.json();break;default:d=await a.text().then(o=>Number.isNaN(+o)?o==="true"?!0:o==="false"?!1:o:+o)}return a.status>300?{data:d,error:new h(a.status,await d),status:a.status,raw:a,headers:a.headers}:{data:d,status:a.status,response:a,headers:a.headers,error:null}})()}}),j=(s,e={fetcher:fetch})=>new Proxy({},{get(t,n){return L(s,n,e)}});0&&(module.exports={EdenWS,edenTreaty});
|