@elysiajs/eden 0.5.5 → 0.6.0
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/.eslintrc +2 -0
- package/dist/fetch/index.d.ts +1 -0
- package/dist/fetch/index.d.ts.map +1 -0
- package/dist/fetch/types.d.ts +6 -2
- package/dist/fetch/types.d.ts.map +1 -0
- package/dist/fetch.js +1 -1
- package/dist/fetch.mjs +11 -11
- package/dist/fn/index.d.ts +1 -0
- package/dist/fn/index.d.ts.map +1 -0
- package/dist/fn/types.d.ts +7 -3
- package/dist/fn/types.d.ts.map +1 -0
- package/dist/fn/utils.d.ts +1 -0
- package/dist/fn/utils.d.ts.map +1 -0
- package/dist/fn.js +1 -1
- package/dist/fn.mjs +18 -18
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/treaty/index.d.ts +2 -1
- package/dist/treaty/index.d.ts.map +1 -0
- package/dist/treaty/utils.d.ts +1 -0
- package/dist/treaty/utils.d.ts.map +1 -0
- package/dist/treaty.js +1 -1
- package/dist/treaty.mjs +108 -87
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -0
- package/package.json +9 -9
- package/src/fetch/index.ts +2 -0
- package/src/fetch/types.ts +8 -7
- package/src/fn/types.ts +6 -6
- package/src/fn/utils.ts +1 -0
- package/src/treaty/index.ts +58 -35
- package/src/treaty/types.ts +117 -133
- package/src/types.ts +0 -13
package/.eslintrc
CHANGED
package/dist/fetch/index.d.ts
CHANGED
|
@@ -2,3 +2,4 @@ import type { Elysia } from 'elysia';
|
|
|
2
2
|
import type { EdenFetch } from './types';
|
|
3
3
|
export type { EdenFetch } from './types';
|
|
4
4
|
export declare const edenFetch: <App extends Elysia<any>>(server: string, config?: EdenFetch.Config) => EdenFetch.Create<App>;
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fetch/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAGpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACxC,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,eAAO,MAAM,SAAS,oCAEN,MAAM,WACL,UAAU,MAAM,0BAyD5B,CAAA"}
|
package/dist/fetch/types.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
/// <reference types="bun-types" />
|
|
2
|
-
import type { Elysia
|
|
2
|
+
import type { Elysia } from 'elysia';
|
|
3
3
|
import type { EdenFetchError } from '../utils';
|
|
4
4
|
import type { MapError, IsUnknown, IsNever } from '../types';
|
|
5
5
|
export declare namespace EdenFetch {
|
|
6
|
-
type Create<App extends Elysia<any>> = App['meta'] extends
|
|
6
|
+
type Create<App extends Elysia<any>> = App['meta'] extends {
|
|
7
|
+
schema: infer Schema extends Record<string, any>;
|
|
8
|
+
} ? EdenFetch.Fn<Schema> : 'Please install Elysia before using Eden';
|
|
7
9
|
interface Config {
|
|
10
|
+
fetcher?: typeof globalThis.fetch;
|
|
8
11
|
}
|
|
9
12
|
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 ? {
|
|
10
13
|
method?: Uppercase<Method>;
|
|
@@ -30,3 +33,4 @@ export declare namespace EdenFetch {
|
|
|
30
33
|
error: MapError<Route['response']> extends infer Errors ? IsNever<Errors> extends true ? EdenFetchError<number, string> : Errors : EdenFetchError<number, string>;
|
|
31
34
|
}>;
|
|
32
35
|
}
|
|
36
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/fetch/types.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAE5D,yBAAiB,SAAS,CAAC;IACvB,KAAY,MAAM,CAAC,GAAG,SAAS,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS;QAC9D,MAAM,EAAE,MAAM,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KACnD,GACK,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,GACpB,yCAAyC,CAAA;IAE/C,UAAiB,MAAM;QACnB,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;KACpC;IAED,KAAY,EAAE,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CACjD,QAAQ,SAAS,MAAM,MAAM,EAC7B,MAAM,SAAS,OAAO,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,EACtD,KAAK,SAAS,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAEtC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC,GACrD,CAAC,KAAK,SAAS,MAAM,GACf;QACI,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;KAC7B,GACD;QACI,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;KAC5B,CAAC,GACR,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC,SAAS,IAAI,GACtC;QACI,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;KACjC,GACD;QACI,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;KAC1B,CAAC,GACR,CAAC,SAAS,SAAS,KAAK,CAAC,SAAS,CAAC,GAC7B;QACI,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KACnC,GACD;QACI,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;KAC5B,CAAC,GACR,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK,GACjC;QAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;KAAE,GACvB;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,KAC5B,OAAO,CACN;QACI,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;QACvC,KAAK,EAAE,IAAI,CAAA;KACd,GACD;QACI,IAAI,EAAE,IAAI,CAAA;QACV,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,SAAS,MAAM,MAAM,GACjD,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,GACxB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,GACV,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KACvC,CACN,CAAA;CACJ"}
|
package/dist/fetch.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./utils-a2cfc56a.js"),p=(f,c)=>async(s,{params:u,body:a,...n}={})=>{var h;u&&Object.entries(u).forEach(([e,t])=>{s=s.replace(`:${e}`,t)});const l=(h=n.headers)==null?void 0:h["Content-Type"];if(!l||l==="application/json")try{a=JSON.stringify(a)}catch{}return((c==null?void 0:c.fetcher)||globalThis.fetch)(f+s,{...n,headers:a?{"content-type":"application/json",...n.headers}:n.headers,body:a}).then(async e=>{var i;let t;switch((i=e.headers.get("Content-Type"))==null?void 0:i.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,error:new o.EdenFetchError(e.status,t)}:{data:t,error:null}})};exports.edenFetch=p;
|
package/dist/fetch.mjs
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { E as
|
|
2
|
-
const
|
|
1
|
+
import { E as o } from "./utils-5a40996f.mjs";
|
|
2
|
+
const y = (f, s) => (
|
|
3
3
|
// @ts-ignore
|
|
4
|
-
async (c, { params:
|
|
4
|
+
async (c, { params: h, body: a, ...n } = {}) => {
|
|
5
5
|
var u;
|
|
6
|
-
|
|
6
|
+
h && Object.entries(h).forEach(([e, t]) => {
|
|
7
7
|
c = c.replace(`:${e}`, t);
|
|
8
8
|
});
|
|
9
|
-
const
|
|
10
|
-
if (!
|
|
9
|
+
const l = (u = n.headers) == null ? void 0 : u["Content-Type"];
|
|
10
|
+
if (!l || l === "application/json")
|
|
11
11
|
try {
|
|
12
12
|
a = JSON.stringify(a);
|
|
13
13
|
} catch {
|
|
14
14
|
}
|
|
15
|
-
return fetch(
|
|
15
|
+
return ((s == null ? void 0 : s.fetcher) || globalThis.fetch)(f + c, {
|
|
16
16
|
...n,
|
|
17
17
|
headers: a ? {
|
|
18
18
|
"content-type": "application/json",
|
|
@@ -20,9 +20,9 @@ const j = (h, o) => (
|
|
|
20
20
|
} : n.headers,
|
|
21
21
|
body: a
|
|
22
22
|
}).then(async (e) => {
|
|
23
|
-
var
|
|
23
|
+
var i;
|
|
24
24
|
let t;
|
|
25
|
-
switch ((
|
|
25
|
+
switch ((i = e.headers.get("Content-Type")) == null ? void 0 : i.split(";")[0]) {
|
|
26
26
|
case "application/json":
|
|
27
27
|
t = await e.json();
|
|
28
28
|
break;
|
|
@@ -32,11 +32,11 @@ const j = (h, o) => (
|
|
|
32
32
|
}
|
|
33
33
|
return e.status > 300 ? {
|
|
34
34
|
data: null,
|
|
35
|
-
error: new
|
|
35
|
+
error: new o(e.status, t)
|
|
36
36
|
} : { data: t, error: null };
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
39
|
);
|
|
40
40
|
export {
|
|
41
|
-
|
|
41
|
+
y as edenFetch
|
|
42
42
|
};
|
package/dist/fn/index.d.ts
CHANGED
|
@@ -2,3 +2,4 @@ import type { Elysia } from 'elysia';
|
|
|
2
2
|
import type { EdenFn } from './types';
|
|
3
3
|
export type { EdenFn } from './types';
|
|
4
4
|
export declare const edenFn: <App extends Elysia<any>>(domain: string, config?: EdenFn.Config) => EdenFn.Create<App>;
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fn/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAIpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AACrC,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AA2CrC,eAAO,MAAM,MAAM,oCACP,MAAM,WACL,OAAO,MAAM,uBAI6B,CAAA"}
|
package/dist/fn/types.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/// <reference types="bun-types" />
|
|
2
|
-
import type { Elysia
|
|
2
|
+
import type { Elysia } from 'elysia';
|
|
3
3
|
export declare namespace EdenFn {
|
|
4
|
-
type Create<App extends Elysia<any>> = App['meta'] extends
|
|
4
|
+
type Create<App extends Elysia<any>> = App['meta'] extends {
|
|
5
|
+
exposed: infer Schema extends Record<string, any>;
|
|
6
|
+
} ? EdenFn.Compose<Schema> : 'Please install Elysia before using Eden';
|
|
5
7
|
interface Config {
|
|
6
8
|
}
|
|
7
9
|
type Compose<Exposed extends Record<string, any>> = Fn<Exposed> & {
|
|
@@ -9,12 +11,13 @@ export declare namespace EdenFn {
|
|
|
9
11
|
$clone(config?: Config): Compose<Exposed>;
|
|
10
12
|
};
|
|
11
13
|
type Fn<T> = T extends {
|
|
12
|
-
|
|
14
|
+
exposed: any;
|
|
13
15
|
value: infer Value;
|
|
14
16
|
} ? Asynctify<Value> : Asynctify<T>;
|
|
15
17
|
interface Config {
|
|
16
18
|
fn?: string;
|
|
17
19
|
fetch?: Omit<RequestInit, 'body'>;
|
|
20
|
+
fetcher?: typeof globalThis.fetch;
|
|
18
21
|
}
|
|
19
22
|
}
|
|
20
23
|
type Promisify<T extends (...args: any[]) => any> = T extends (...args: infer Args) => infer Return ? Return extends Promise<any> ? T : (...args: Args) => Promise<Return> : never;
|
|
@@ -22,3 +25,4 @@ type Asynctify<T> = T extends infer Fn extends (...args: any) => any ? Promisify
|
|
|
22
25
|
[K in keyof T]: EdenFn.Fn<T[K]>;
|
|
23
26
|
} : never;
|
|
24
27
|
export {};
|
|
28
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/fn/types.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpC,yBAAiB,MAAM,CAAC;IACpB,KAAY,MAAM,CAAC,GAAG,SAAS,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS;QAC9D,OAAO,EAAE,MAAM,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KACpD,GACK,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GACtB,yCAAyC,CAAA;IAE/C,UAAiB,MAAM;KAAG;IAE1B,KAAY,OAAO,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG;QACrE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;QAC1B,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;KAC5C,CAAA;IAED,KAAY,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS;QAC1B,OAAO,EAAE,GAAG,CAAA;QACZ,KAAK,EAAE,MAAM,KAAK,CAAA;KACrB,GACK,SAAS,CAAC,KAAK,CAAC,GAChB,SAAS,CAAC,CAAC,CAAC,CAAA;IAElB,UAAiB,MAAM;QACnB,EAAE,CAAC,EAAE,MAAM,CAAA;QACX,KAAK,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;QACjC,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;KACpC;CACJ;AAED,KAAK,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,IAAI,CAAC,SAAS,CAC1D,GAAG,IAAI,EAAE,MAAM,IAAI,KAClB,MAAM,MAAM,GACX,MAAM,SAAS,OAAO,CAAC,GAAG,CAAC,GACvB,CAAC,GACD,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,GACtC,KAAK,CAAA;AAEX,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,GAC9D,SAAS,CAAC,EAAE,CAAC,GACb,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B;KACK,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAClC,GACD,KAAK,CAAA"}
|
package/dist/fn/utils.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/fn/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAErC,qBAAa,MAAM;IACf,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,MAAM,CAAe;IAE7B,OAAO,CAAC,QAAQ,CAAuD;IACvE,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,UAAU,CAAQ;IAE1B,OAAO,CAAC,KAAK,CAGX;gBAEU,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAW;IAYnD,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM;IAI/B,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM;IAItB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG;CAkD7C"}
|
package/dist/fn.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var z=Object.create;var a=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var b=Object.getPrototypeOf,O=Object.prototype.hasOwnProperty;var S=(e,t,n)=>t in e?a(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var J=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of P(t))!O.call(e,s)&&s!==n&&a(e,s,{get:()=>t[s],enumerable:!(i=F(t,s))||i.enumerable});return e};var T=(e,t,n)=>(n=e!=null?z(b(e)):{},J(t||!e||!e.__esModule?a(n,"default",{value:e,enumerable:!0}):n,e));var h=(e,t,n)=>(S(e,typeof t!="symbol"?t+"":t,n),n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class g{constructor(t,n={}){h(this,"url");h(this,"config");h(this,"pendings",[]);h(this,"operation",null);h(this,"isFetching",!1);h(this,"sJson");this.url=t,this.config=n,this.sJson=import("superjson").then(i=>({serialize:i.serialize,deserialize:i.deserialize}))}setConfig(t){this.config=t}clone(t){return new g(this.url,t??this.config)}async run(t,n){var o;const i=+this.pendings.length;if(this.pendings.push(n!==void 0?{n:t,p:n}:{n:t}),this.isFetching)return(o=this.operation)==null?void 0:o.then(r=>r[i]);this.isFetching=!0,this.operation=new Promise(r=>{setTimeout(async()=>{var p,y;const c=[...this.pendings];this.pendings=[];const{serialize:f,deserialize:d}=await this.sJson,l=await(((p=this.config)==null?void 0:p.fetcher)||globalThis.fetch)(`${this.url}${this.config.fn??"/~fn"}`,{method:"POST",...this.config.fetch,headers:{"content-type":"elysia/fn",...(y=this.config.fetch)==null?void 0:y.headers},body:JSON.stringify(f(c))});l.status===200?r(l.json().then(w=>d(w))):r(Array(c.length).fill(new Error(await l.text())))},33)});const s=await this.operation.then(r=>r[i]);return this.operation=null,this.isFetching=!1,s}}const u=(e,t,n)=>new Proxy((...i)=>{},{get(i,s,o){return u(e,[...t,s],n)},apply(i,s,o){const r=o[0],c=t[0];if(t.length===1){if(c in Object.prototype||c in Promise.prototype)return i(...o);switch(c){case"toJSON":return i(...o);case"$set":return n.setConfig(r);case"$clone":return u(e,[],n.clone(r))}}return n.run(t,o).then(f=>{if(f instanceof Error)throw f;return f})}}),$=(e,t)=>u(e,[],new g(e,t));exports.edenFn=$;
|
package/dist/fn.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var o = (n, t, e) => (
|
|
1
|
+
var d = Object.defineProperty;
|
|
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
4
|
class u {
|
|
5
5
|
constructor(t, e = {}) {
|
|
6
6
|
o(this, "url");
|
|
@@ -29,40 +29,40 @@ class u {
|
|
|
29
29
|
return (r = this.operation) == null ? void 0 : r.then((s) => s[i]);
|
|
30
30
|
this.isFetching = !0, this.operation = new Promise((s) => {
|
|
31
31
|
setTimeout(async () => {
|
|
32
|
-
var g;
|
|
32
|
+
var g, p;
|
|
33
33
|
const h = [...this.pendings];
|
|
34
34
|
this.pendings = [];
|
|
35
|
-
const { serialize: c, deserialize:
|
|
35
|
+
const { serialize: c, deserialize: y } = await this.sJson, l = await (((g = this.config) == null ? void 0 : g.fetcher) || globalThis.fetch)(
|
|
36
36
|
`${this.url}${this.config.fn ?? "/~fn"}`,
|
|
37
37
|
{
|
|
38
38
|
method: "POST",
|
|
39
39
|
...this.config.fetch,
|
|
40
40
|
headers: {
|
|
41
41
|
"content-type": "elysia/fn",
|
|
42
|
-
...(
|
|
42
|
+
...(p = this.config.fetch) == null ? void 0 : p.headers
|
|
43
43
|
},
|
|
44
44
|
body: JSON.stringify(c(h))
|
|
45
45
|
}
|
|
46
46
|
);
|
|
47
|
-
|
|
47
|
+
l.status === 200 ? s(l.json().then((w) => y(w))) : s(
|
|
48
48
|
Array(h.length).fill(
|
|
49
|
-
new Error(await
|
|
49
|
+
new Error(await l.text())
|
|
50
50
|
)
|
|
51
51
|
);
|
|
52
52
|
}, 33);
|
|
53
53
|
});
|
|
54
|
-
const
|
|
55
|
-
return this.operation = null, this.isFetching = !1,
|
|
54
|
+
const f = await this.operation.then((s) => s[i]);
|
|
55
|
+
return this.operation = null, this.isFetching = !1, f;
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
-
const
|
|
58
|
+
const a = (n, t, e) => (
|
|
59
59
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
60
60
|
new Proxy((...i) => {
|
|
61
61
|
}, {
|
|
62
|
-
get(i,
|
|
63
|
-
return
|
|
62
|
+
get(i, f, r) {
|
|
63
|
+
return a(n, [...t, f], e);
|
|
64
64
|
},
|
|
65
|
-
apply(i,
|
|
65
|
+
apply(i, f, r) {
|
|
66
66
|
const s = r[0], h = t[0];
|
|
67
67
|
if (t.length === 1) {
|
|
68
68
|
if (h in Object.prototype || h in Promise.prototype)
|
|
@@ -73,7 +73,7 @@ const l = (n, t, e) => (
|
|
|
73
73
|
case "$set":
|
|
74
74
|
return e.setConfig(s);
|
|
75
75
|
case "$clone":
|
|
76
|
-
return
|
|
76
|
+
return a(n, [], e.clone(s));
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
return e.run(t, r).then((c) => {
|
|
@@ -83,11 +83,11 @@ const l = (n, t, e) => (
|
|
|
83
83
|
});
|
|
84
84
|
}
|
|
85
85
|
})
|
|
86
|
-
),
|
|
86
|
+
), x = (n, t) => (
|
|
87
87
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
88
88
|
// @ts-ignore
|
|
89
|
-
|
|
89
|
+
a(n, [], new u(n, t))
|
|
90
90
|
);
|
|
91
91
|
export {
|
|
92
|
-
|
|
92
|
+
x as edenFn
|
|
93
93
|
};
|
package/dist/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA"}
|
package/dist/treaty/index.d.ts
CHANGED
|
@@ -14,4 +14,5 @@ export declare class EdenWS<Schema extends TypedSchema<any> = TypedSchema> {
|
|
|
14
14
|
removeEventListener<K extends keyof WebSocketEventMap>(type: K, listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any, options?: boolean | EventListenerOptions): this;
|
|
15
15
|
close(): this;
|
|
16
16
|
}
|
|
17
|
-
export declare const edenTreaty: <App extends Elysia<any>>(domain: string, config?:
|
|
17
|
+
export declare const edenTreaty: <App extends Elysia<any>>(domain: string, config?: EdenTreaty.Config) => EdenTreaty.Create<App>;
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/treaty/index.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAKjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AA4CzC,qBAAa,MAAM,CAAC,MAAM,SAAS,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW;IAC7D,EAAE,EAAE,SAAS,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;gBAEC,GAAG,EAAE,MAAM;IAKvB,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE;IAc5C,EAAE,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAChC,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,IAAI,EACpE,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB;IAK/C,GAAG,CAAC,CAAC,SAAS,MAAM,iBAAiB,EACjC,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,GAAG,EAC5D,OAAO,CAAC,EAAE,OAAO,GAAG,oBAAoB;IAO5C,SAAS,CACL,SAAS,EAAE,CACP,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,KACvD,IAAI,EACT,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB;IAK/C,gBAAgB,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAC9C,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,IAAI,EACpE,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB;IA+B/C,mBAAmB,CAAC,CAAC,SAAS,MAAM,iBAAiB,EACjD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,GAAG,EAC5D,OAAO,CAAC,EAAE,OAAO,GAAG,oBAAoB;IAO5C,KAAK;CAKR;AAsID,eAAO,MAAM,UAAU,oCACX,MAAM,WACN,WAAW,MAAM,2BAWjB,CAAA"}
|
package/dist/treaty/utils.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/treaty/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,WACZ,MAAM,QACR,MAAM,SACL,OAAO,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,WAW5C,CAAA"}
|
package/dist/treaty.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var A=Object.defineProperty;var P=(r,e,t)=>e in r?A(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var g=(r,e,t)=>(P(r,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const B=require("./utils-a2cfc56a.js"),T=(r,e,t)=>{if(r.endsWith("/")||(r+="/"),e==="index"&&(e=""),!t||!Object.keys(t).length)return`${r}${e}`;let n="";for(const[a,s]of Object.entries(t))n+=`${a}=${s}&`;return`${r}${e}?${n.slice(0,-1)}`},v=typeof FileList>"u",O=r=>v?r instanceof Blob:r instanceof FileList||r instanceof File,W=r=>{for(const e in r){if(O(r[e]))return!0;if(Array.isArray(r[e])&&r[e].find(t=>O(t)))return!0}return!1},m=r=>v?r:new Promise(e=>{const t=new FileReader;t.onload=()=>{e(new Blob([t.result],{type:r.type}))},t.readAsArrayBuffer(r)});class x{constructor(e){g(this,"ws");g(this,"url");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();const c=s.charCodeAt(0);if(c===47||c===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}}const j=(r,e="",t)=>new Proxy(()=>{},{get(n,a,s){return j(r,`${e}/${a.toString()}`,t)},apply(n,a,[{$query:s,$fetch:c,$body:k,...S}={$fetch:void 0,$query:void 0,$body:void 0}]=[{}]){const E=e.lastIndexOf("/"),F=e.slice(E+1),h=T(r,e.slice(0,E),s);if(F==="subscribe")return new x(h.replace(/^([^]+):\/\//,h.startsWith("https://")?"wss://":"ws://"));const y=async()=>{var L,N;let l=k??(Object.keys(S).length?S:void 0);const w=typeof l=="object",$=w&&W(l);if($){const o=new FormData;for(const[d,f]of Object.entries(l))if(v)o.append(d,f);else if(f instanceof File)o.append(d,await m(f));else if(f instanceof FileList)for(let b=0;b<f.length;b++)o.append(d,await m(f[b]));else o.append(d,f);l=o}else w&&(l=JSON.stringify(l));const p={...(L=t.$fetch)==null?void 0:L.headers,...c==null?void 0:c.headers},i=await(t.fetcher??fetch)(h,{method:F,body:l,...t.$fetch,...c,headers:l?$?p:{"content-type":w?"application/json":"text/plain",...p}:p});let u;switch((N=i.headers.get("Content-Type"))==null?void 0:N.split(";")[0]){case"application/json":u=await i.json();break;default:u=await i.text().then(o=>Number.isNaN(+o)?o==="true"?!0:o==="false"?!1:o:+o)}return i.status>300?{data:u,error:new B.EdenFetchError(i.status,await u),status:i.status,raw:i,headers:i.headers,retry:y}:{data:u,status:i.status,raw:i,headers:i.headers,error:null,retry:y}};return y()}}),J=(r,e={fetcher:fetch})=>new Proxy({},{get(t,n){return j(r,n,e)}});exports.EdenWS=x;exports.edenTreaty=J;
|
package/dist/treaty.mjs
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
import { E as
|
|
5
|
-
const
|
|
1
|
+
var A = Object.defineProperty;
|
|
2
|
+
var j = (r, e, t) => e in r ? A(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t;
|
|
3
|
+
var g = (r, e, t) => (j(r, typeof e != "symbol" ? e + "" : e, t), t);
|
|
4
|
+
import { E as B } from "./utils-5a40996f.mjs";
|
|
5
|
+
const P = (r, e, t) => {
|
|
6
6
|
if (r.endsWith("/") || (r += "/"), e === "index" && (e = ""), !t || !Object.keys(t).length)
|
|
7
7
|
return `${r}${e}`;
|
|
8
8
|
let n = "";
|
|
9
|
-
for (const [
|
|
10
|
-
n += `${
|
|
9
|
+
for (const [a, s] of Object.entries(t))
|
|
10
|
+
n += `${a}=${s}&`;
|
|
11
11
|
return `${r}${e}?${n.slice(0, -1)}`;
|
|
12
|
-
},
|
|
13
|
-
for (
|
|
14
|
-
if (
|
|
12
|
+
}, v = typeof FileList > "u", N = (r) => v ? r instanceof Blob : r instanceof FileList || r instanceof File, W = (r) => {
|
|
13
|
+
for (const e in r) {
|
|
14
|
+
if (N(r[e]))
|
|
15
15
|
return !0;
|
|
16
|
-
if (Array.isArray(r[e]) && r[e].find((t) =>
|
|
16
|
+
if (Array.isArray(r[e]) && r[e].find((t) => N(t)))
|
|
17
17
|
return !0;
|
|
18
18
|
}
|
|
19
19
|
return !1;
|
|
20
|
-
},
|
|
20
|
+
}, S = (r) => v ? r : new Promise((e) => {
|
|
21
21
|
const t = new FileReader();
|
|
22
22
|
t.onload = () => {
|
|
23
23
|
e(new Blob([t.result], { type: r.type }));
|
|
24
24
|
}, t.readAsArrayBuffer(r);
|
|
25
25
|
});
|
|
26
|
-
class
|
|
26
|
+
class J {
|
|
27
27
|
constructor(e) {
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
g(this, "ws");
|
|
29
|
+
g(this, "url");
|
|
30
30
|
this.ws = new WebSocket(e), this.url = e;
|
|
31
31
|
}
|
|
32
32
|
send(e) {
|
|
@@ -46,11 +46,11 @@ class A {
|
|
|
46
46
|
addEventListener(e, t, n) {
|
|
47
47
|
return this.ws.addEventListener(
|
|
48
48
|
e,
|
|
49
|
-
(
|
|
49
|
+
(a) => {
|
|
50
50
|
if (e === "message") {
|
|
51
|
-
let s =
|
|
52
|
-
const
|
|
53
|
-
if (
|
|
51
|
+
let s = a.data.toString();
|
|
52
|
+
const f = s.charCodeAt(0);
|
|
53
|
+
if (f === 47 || f === 123)
|
|
54
54
|
try {
|
|
55
55
|
s = JSON.parse(s);
|
|
56
56
|
} catch {
|
|
@@ -58,11 +58,11 @@ class A {
|
|
|
58
58
|
else
|
|
59
59
|
Number.isNaN(+s) ? s === "true" ? s = !0 : s === "fase" && (s = !1) : s = +s;
|
|
60
60
|
t({
|
|
61
|
-
...
|
|
61
|
+
...a,
|
|
62
62
|
data: s
|
|
63
63
|
});
|
|
64
64
|
} else
|
|
65
|
-
t(
|
|
65
|
+
t(a);
|
|
66
66
|
},
|
|
67
67
|
n
|
|
68
68
|
), this;
|
|
@@ -74,83 +74,104 @@ class A {
|
|
|
74
74
|
return this.ws.close(), this;
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
$query:
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
for (let u = 0; u < l.length; u++)
|
|
77
|
+
const O = (r, e = "", t) => (
|
|
78
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
79
|
+
new Proxy(() => {
|
|
80
|
+
}, {
|
|
81
|
+
get(n, a, s) {
|
|
82
|
+
return O(r, `${e}/${a.toString()}`, t);
|
|
83
|
+
},
|
|
84
|
+
apply(n, a, [
|
|
85
|
+
{ $query: s, $fetch: f, $body: k, ...E } = {
|
|
86
|
+
$fetch: void 0,
|
|
87
|
+
$query: void 0,
|
|
88
|
+
$body: void 0
|
|
89
|
+
}
|
|
90
|
+
] = [{}]) {
|
|
91
|
+
const F = e.lastIndexOf("/"), $ = e.slice(F + 1), h = P(r, e.slice(0, F), s);
|
|
92
|
+
if ($ === "subscribe")
|
|
93
|
+
return new J(
|
|
94
|
+
h.replace(
|
|
95
|
+
/^([^]+):\/\//,
|
|
96
|
+
h.startsWith("https://") ? "wss://" : "ws://"
|
|
97
|
+
)
|
|
98
|
+
);
|
|
99
|
+
const y = async () => {
|
|
100
|
+
var x, L;
|
|
101
|
+
let c = k ?? (Object.keys(E).length ? E : void 0);
|
|
102
|
+
const w = typeof c == "object", m = w && W(c);
|
|
103
|
+
if (m) {
|
|
104
|
+
const o = new FormData();
|
|
105
|
+
for (const [d, l] of Object.entries(c))
|
|
106
|
+
if (v)
|
|
107
|
+
o.append(d, l);
|
|
108
|
+
else if (l instanceof File)
|
|
110
109
|
o.append(
|
|
111
|
-
|
|
112
|
-
await
|
|
110
|
+
d,
|
|
111
|
+
await S(l)
|
|
113
112
|
);
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
...
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
113
|
+
else if (l instanceof FileList)
|
|
114
|
+
for (let b = 0; b < l.length; b++)
|
|
115
|
+
o.append(
|
|
116
|
+
d,
|
|
117
|
+
await S(l[b])
|
|
118
|
+
);
|
|
119
|
+
else
|
|
120
|
+
o.append(d, l);
|
|
121
|
+
c = o;
|
|
122
|
+
} else
|
|
123
|
+
w && (c = JSON.stringify(c));
|
|
124
|
+
const p = {
|
|
125
|
+
...(x = t.$fetch) == null ? void 0 : x.headers,
|
|
126
|
+
...f == null ? void 0 : f.headers
|
|
127
|
+
}, i = await (t.fetcher ?? fetch)(h, {
|
|
128
|
+
method: $,
|
|
129
|
+
body: c,
|
|
130
|
+
...t.$fetch,
|
|
131
|
+
...f,
|
|
132
|
+
headers: c ? m ? p : {
|
|
133
|
+
"content-type": w ? "application/json" : "text/plain",
|
|
134
|
+
...p
|
|
135
|
+
} : p
|
|
136
|
+
});
|
|
137
|
+
let u;
|
|
138
|
+
switch ((L = i.headers.get("Content-Type")) == null ? void 0 : L.split(";")[0]) {
|
|
132
139
|
case "application/json":
|
|
133
|
-
|
|
140
|
+
u = await i.json();
|
|
134
141
|
break;
|
|
135
142
|
default:
|
|
136
|
-
|
|
143
|
+
u = await i.text().then((o) => Number.isNaN(+o) ? o === "true" ? !0 : o === "false" ? !1 : o : +o);
|
|
137
144
|
}
|
|
138
|
-
return
|
|
139
|
-
data:
|
|
140
|
-
error: new
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}
|
|
145
|
+
return i.status > 300 ? {
|
|
146
|
+
data: u,
|
|
147
|
+
error: new B(i.status, await u),
|
|
148
|
+
status: i.status,
|
|
149
|
+
raw: i,
|
|
150
|
+
headers: i.headers,
|
|
151
|
+
retry: y
|
|
152
|
+
} : {
|
|
153
|
+
data: u,
|
|
154
|
+
status: i.status,
|
|
155
|
+
raw: i,
|
|
156
|
+
headers: i.headers,
|
|
157
|
+
error: null,
|
|
158
|
+
retry: y
|
|
159
|
+
};
|
|
160
|
+
};
|
|
161
|
+
return y();
|
|
162
|
+
}
|
|
163
|
+
})
|
|
164
|
+
), D = (r, e = {
|
|
165
|
+
fetcher: fetch
|
|
166
|
+
}) => new Proxy(
|
|
146
167
|
{},
|
|
147
168
|
{
|
|
148
169
|
get(t, n) {
|
|
149
|
-
return
|
|
170
|
+
return O(r, n, e);
|
|
150
171
|
}
|
|
151
172
|
}
|
|
152
173
|
);
|
|
153
174
|
export {
|
|
154
|
-
|
|
155
|
-
|
|
175
|
+
J as EdenWS,
|
|
176
|
+
D as edenTreaty
|
|
156
177
|
};
|
package/dist/types.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAG7C,KAAK,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,IAAI,OAAO,CACpD,SAAS,CAAC,CAAC,CAAC,EACZ,SAAS,CAAC,CAAC,CAAC,CACf,CAAA;AAED,KAAK,SAAS,CACV,CAAC,SAAS,MAAM,EAChB,GAAG,SAAS,MAAM,EAAE,GAAG,EAAE,IACzB,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,GACrB,GAAG,CAAC,MAAM,CAAC,GACX,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;AAE3C,KAAK,UAAU,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;AAEjC,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IACtD;SACK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,UAAU,GAAG,CAAC,GAAG,KAAK;KACrD,CAAC,MAAM,CAAC,CAAC;CACb,SAAS,CAAC,MAAM,CAAC,SAAS,MAAM,CAAC,GAC5B;KACK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,CAAC,CAAC,CAAC,GACJ,KAAK,CAAA;AAEX,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAC9B,CAAC,SAAS,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,CAC5C,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GACvB,CAAC,GACD,KAAK,CAAA;AAEX,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK,CAAA;AAErD,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,KAAK,CAAA;AAE3D,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,GAC1C,KAAK,GACL,OAAO,SAAS,CAAC,GACjB,IAAI,GACJ,KAAK,CAAA;AAEX,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAA;IACxC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAA;IACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAA;IACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QAChC,KAAK,EAAE,OAAO,CAAA;KACjB,CAAA;CACJ,CAAA"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,qBAAa,cAAc,CACvB,MAAM,SAAS,MAAM,GAAG,MAAM,EAC9B,KAAK,GAAG,OAAO,CACjB,SAAQ,KAAK;IACX,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,KAAK,CAAA;gBAEA,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAM3C"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elysiajs/eden",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Fully type-safe Elysia client",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "saltyAom",
|
|
@@ -51,6 +51,12 @@
|
|
|
51
51
|
},
|
|
52
52
|
"bugs": "https://github.com/elysiajs/elysia-eden/issues",
|
|
53
53
|
"license": "MIT",
|
|
54
|
+
"scripts": {
|
|
55
|
+
"dev": "bun run --hot example/index.ts",
|
|
56
|
+
"test": "bun wiptest",
|
|
57
|
+
"build": "vite build && tsc",
|
|
58
|
+
"release": "npm run build && npm run test && npm publish --access public"
|
|
59
|
+
},
|
|
54
60
|
"peerDependencies": {
|
|
55
61
|
"@elysiajs/fn": ">= 0.5.0",
|
|
56
62
|
"@sinclair/typebox": ">= 0.28.10",
|
|
@@ -63,11 +69,11 @@
|
|
|
63
69
|
},
|
|
64
70
|
"devDependencies": {
|
|
65
71
|
"@elysiajs/cors": "0.5.0",
|
|
66
|
-
"@elysiajs/fn": "^0.
|
|
72
|
+
"@elysiajs/fn": "^0.6.1",
|
|
67
73
|
"@sinclair/typebox": "^0.26.8",
|
|
68
74
|
"@types/node": "^18.15.5",
|
|
69
75
|
"bun-types": "^0.5.8",
|
|
70
|
-
"elysia": "0.
|
|
76
|
+
"elysia": "0.6.0",
|
|
71
77
|
"eslint": "^8.26.0",
|
|
72
78
|
"rimraf": "^4.4.1",
|
|
73
79
|
"typescript": "^5.0.4",
|
|
@@ -76,11 +82,5 @@
|
|
|
76
82
|
},
|
|
77
83
|
"dependencies": {
|
|
78
84
|
"superjson": "^1.12.2"
|
|
79
|
-
},
|
|
80
|
-
"scripts": {
|
|
81
|
-
"dev": "bun run --hot example/index.ts",
|
|
82
|
-
"test": "bun wiptest",
|
|
83
|
-
"build": "vite build && tsc",
|
|
84
|
-
"release": "npm run build && npm run test && npm publish --access public"
|
|
85
85
|
}
|
|
86
86
|
}
|
package/src/fetch/index.ts
CHANGED
package/src/fetch/types.ts
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import type { Elysia
|
|
1
|
+
import type { Elysia } from 'elysia'
|
|
2
2
|
import type { EdenFetchError } from '../utils'
|
|
3
|
-
import type { MapError, IsUnknown, IsNever
|
|
3
|
+
import type { MapError, IsUnknown, IsNever } from '../types'
|
|
4
4
|
|
|
5
5
|
export namespace EdenFetch {
|
|
6
|
-
export type Create<App extends Elysia<any>> = App['meta'] extends
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
>
|
|
6
|
+
export type Create<App extends Elysia<any>> = App['meta'] extends {
|
|
7
|
+
schema: infer Schema extends Record<string, any>
|
|
8
|
+
}
|
|
10
9
|
? EdenFetch.Fn<Schema>
|
|
11
10
|
: 'Please install Elysia before using Eden'
|
|
12
11
|
|
|
13
|
-
export interface Config {
|
|
12
|
+
export interface Config {
|
|
13
|
+
fetcher?: typeof globalThis.fetch
|
|
14
|
+
}
|
|
14
15
|
|
|
15
16
|
export type Fn<Schema extends Record<string, any>> = <
|
|
16
17
|
Endpoint extends keyof Schema,
|
package/src/fn/types.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import type { Elysia
|
|
1
|
+
import type { Elysia } from 'elysia'
|
|
2
2
|
|
|
3
3
|
export namespace EdenFn {
|
|
4
|
-
export type Create<App extends Elysia<any>> = App['meta'] extends
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
>
|
|
4
|
+
export type Create<App extends Elysia<any>> = App['meta'] extends {
|
|
5
|
+
exposed: infer Schema extends Record<string, any>
|
|
6
|
+
}
|
|
8
7
|
? EdenFn.Compose<Schema>
|
|
9
8
|
: 'Please install Elysia before using Eden'
|
|
10
9
|
|
|
@@ -16,7 +15,7 @@ export namespace EdenFn {
|
|
|
16
15
|
}
|
|
17
16
|
|
|
18
17
|
export type Fn<T> = T extends {
|
|
19
|
-
|
|
18
|
+
exposed: any
|
|
20
19
|
value: infer Value
|
|
21
20
|
}
|
|
22
21
|
? Asynctify<Value>
|
|
@@ -25,6 +24,7 @@ export namespace EdenFn {
|
|
|
25
24
|
export interface Config {
|
|
26
25
|
fn?: string
|
|
27
26
|
fetch?: Omit<RequestInit, 'body'>
|
|
27
|
+
fetcher?: typeof globalThis.fetch
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
|
package/src/fn/utils.ts
CHANGED
package/src/treaty/index.ts
CHANGED
|
@@ -22,7 +22,7 @@ const isFile = (v: any) => {
|
|
|
22
22
|
|
|
23
23
|
// FormData is 1 level deep
|
|
24
24
|
const hasFile = (obj: Record<string, any>) => {
|
|
25
|
-
for (
|
|
25
|
+
for (const key in obj) {
|
|
26
26
|
if (isFile(obj[key])) return true
|
|
27
27
|
else if (
|
|
28
28
|
Array.isArray(obj[key]) &&
|
|
@@ -114,7 +114,9 @@ export class EdenWS<Schema extends TypedSchema<any> = TypedSchema> {
|
|
|
114
114
|
if (start === 47 || start === 123)
|
|
115
115
|
try {
|
|
116
116
|
data = JSON.parse(data)
|
|
117
|
-
} catch {
|
|
117
|
+
} catch {
|
|
118
|
+
// Not Empty
|
|
119
|
+
}
|
|
118
120
|
else if (!Number.isNaN(+data)) data = +data
|
|
119
121
|
else if (data === 'true') data = true
|
|
120
122
|
else if (data === 'fase') data = false
|
|
@@ -150,9 +152,10 @@ export class EdenWS<Schema extends TypedSchema<any> = TypedSchema> {
|
|
|
150
152
|
|
|
151
153
|
const createProxy = (
|
|
152
154
|
domain: string,
|
|
153
|
-
path
|
|
154
|
-
config:
|
|
155
|
+
path = '',
|
|
156
|
+
config: EdenTreaty.Config
|
|
155
157
|
): Record<string, unknown> =>
|
|
158
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
156
159
|
new Proxy(() => {}, {
|
|
157
160
|
get(target, key, value) {
|
|
158
161
|
return createProxy(domain, `${path}/${key.toString()}`, config)
|
|
@@ -180,7 +183,7 @@ const createProxy = (
|
|
|
180
183
|
)
|
|
181
184
|
)
|
|
182
185
|
|
|
183
|
-
|
|
186
|
+
const execute = async () => {
|
|
184
187
|
let body =
|
|
185
188
|
$body ?? (Object.keys(bodyObj).length ? bodyObj : undefined)
|
|
186
189
|
const isObject = typeof body === 'object'
|
|
@@ -216,54 +219,74 @@ const createProxy = (
|
|
|
216
219
|
body = newBody
|
|
217
220
|
} else if (isObject) body = JSON.stringify(body)
|
|
218
221
|
|
|
219
|
-
|
|
222
|
+
const $headers = {
|
|
223
|
+
...config.$fetch?.headers,
|
|
224
|
+
...$fetch?.headers
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
const response = await (config.fetcher ?? fetch)(url, {
|
|
220
228
|
method,
|
|
221
229
|
body,
|
|
222
|
-
|
|
230
|
+
...config.$fetch,
|
|
223
231
|
...$fetch,
|
|
224
232
|
headers: body
|
|
225
233
|
? isFormData
|
|
226
|
-
? $
|
|
234
|
+
? $headers
|
|
227
235
|
: {
|
|
228
236
|
'content-type': isObject
|
|
229
237
|
? 'application/json'
|
|
230
238
|
: 'text/plain',
|
|
231
|
-
...$
|
|
239
|
+
...$headers
|
|
232
240
|
}
|
|
233
|
-
: $
|
|
234
|
-
})
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
241
|
+
: $headers
|
|
242
|
+
})
|
|
243
|
+
|
|
244
|
+
let data
|
|
245
|
+
|
|
246
|
+
switch (response.headers.get('Content-Type')?.split(';')[0]) {
|
|
247
|
+
case 'application/json':
|
|
248
|
+
data = await response.json()
|
|
249
|
+
break
|
|
250
|
+
|
|
251
|
+
default:
|
|
252
|
+
data = await response.text().then((data) => {
|
|
253
|
+
if (!Number.isNaN(+data)) return +data
|
|
254
|
+
if (data === 'true') return true
|
|
255
|
+
if (data === 'false') return false
|
|
256
|
+
|
|
257
|
+
return data
|
|
258
|
+
})
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
if (response.status > 300)
|
|
262
|
+
return {
|
|
263
|
+
data,
|
|
264
|
+
error: new EdenFetchError(response.status, await data),
|
|
265
|
+
status: response.status,
|
|
266
|
+
raw: response,
|
|
267
|
+
headers: response.headers,
|
|
268
|
+
retry: execute
|
|
250
269
|
}
|
|
251
270
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
271
|
+
return {
|
|
272
|
+
data,
|
|
273
|
+
status: response.status,
|
|
274
|
+
raw: response,
|
|
275
|
+
headers: response.headers,
|
|
276
|
+
error: null,
|
|
277
|
+
retry: execute
|
|
278
|
+
}
|
|
279
|
+
}
|
|
257
280
|
|
|
258
|
-
|
|
259
|
-
})
|
|
260
|
-
})()
|
|
281
|
+
return execute()
|
|
261
282
|
}
|
|
262
283
|
}) as unknown as Record<string, unknown>
|
|
263
284
|
|
|
264
285
|
export const edenTreaty = <App extends Elysia<any>>(
|
|
265
286
|
domain: string,
|
|
266
|
-
config:
|
|
287
|
+
config: EdenTreaty.Config = {
|
|
288
|
+
fetcher: fetch
|
|
289
|
+
}
|
|
267
290
|
): EdenTreaty.Create<App> =>
|
|
268
291
|
new Proxy(
|
|
269
292
|
{},
|
package/src/treaty/types.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Elysia,
|
|
1
|
+
import type { Elysia, AnyTypedSchema } from 'elysia'
|
|
2
2
|
|
|
3
3
|
import type { EdenWS } from './index'
|
|
4
4
|
import type { IsNever, IsUnknown, MapError, UnionToIntersect } from '../types'
|
|
@@ -10,25 +10,33 @@ type Replace<RecordType, TargetType, GenericType> = {
|
|
|
10
10
|
: RecordType[K]
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
// @ts-ignore
|
|
14
|
+
type Files = File | FileList
|
|
15
|
+
|
|
13
16
|
export namespace EdenTreaty {
|
|
14
|
-
export type Create<App extends Elysia<any>> = App['meta'] extends
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
>
|
|
17
|
+
export type Create<App extends Elysia<any>> = App['meta'] extends {
|
|
18
|
+
schema: infer Schema extends Record<string, any>
|
|
19
|
+
}
|
|
18
20
|
? EdenTreaty.Sign<Schema>
|
|
19
21
|
: 'Please install Elysia before using Eden'
|
|
20
22
|
|
|
21
|
-
export interface Config {
|
|
23
|
+
export interface Config {
|
|
24
|
+
/**
|
|
25
|
+
* Default options to pass to fetch
|
|
26
|
+
*/
|
|
27
|
+
$fetch?: FetchRequestInit
|
|
28
|
+
fetcher?: typeof fetch
|
|
29
|
+
}
|
|
22
30
|
|
|
23
31
|
export type Sign<A> = {
|
|
24
|
-
[Path in keyof A as Path extends `/${infer Prefix}/${
|
|
32
|
+
[Path in keyof A as Path extends `/${infer Prefix}/${string}`
|
|
25
33
|
? Prefix
|
|
26
34
|
: Path extends `/`
|
|
27
35
|
? 'index'
|
|
28
36
|
: Path extends `/${infer Prefix}`
|
|
29
37
|
? Prefix
|
|
30
38
|
: never]: UnionToIntersect<
|
|
31
|
-
Path extends `/${
|
|
39
|
+
Path extends `/${string}/${infer Rest}`
|
|
32
40
|
? NestPath<
|
|
33
41
|
Rest,
|
|
34
42
|
{
|
|
@@ -41,67 +49,45 @@ export namespace EdenTreaty {
|
|
|
41
49
|
: (params: {
|
|
42
50
|
$query: Route['query']
|
|
43
51
|
}) => EdenWS<Route>
|
|
44
|
-
:
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
> extends infer Errors
|
|
84
|
-
? IsNever<Errors> extends true
|
|
85
|
-
? EdenFetchError<
|
|
86
|
-
number,
|
|
87
|
-
string
|
|
88
|
-
>
|
|
89
|
-
: Errors
|
|
90
|
-
: EdenFetchError<
|
|
91
|
-
number,
|
|
92
|
-
string
|
|
93
|
-
>
|
|
94
|
-
}
|
|
95
|
-
>
|
|
96
|
-
: (
|
|
97
|
-
params: Replace<
|
|
98
|
-
Route['body'],
|
|
99
|
-
Blob | Blob[],
|
|
100
|
-
File | FileList
|
|
101
|
-
> & {
|
|
102
|
-
$query?: Route['query']
|
|
103
|
-
$fetch?: RequestInit
|
|
104
|
-
}
|
|
52
|
+
: ((
|
|
53
|
+
params: (IsUnknown<
|
|
54
|
+
Route['body']
|
|
55
|
+
> extends false
|
|
56
|
+
? Replace<
|
|
57
|
+
Route['body'],
|
|
58
|
+
Blob | Blob[],
|
|
59
|
+
Files
|
|
60
|
+
>
|
|
61
|
+
: {}) &
|
|
62
|
+
(undefined extends Route['query']
|
|
63
|
+
? {
|
|
64
|
+
$query?: Record<
|
|
65
|
+
string,
|
|
66
|
+
string
|
|
67
|
+
>
|
|
68
|
+
}
|
|
69
|
+
: {
|
|
70
|
+
$query: Route['query']
|
|
71
|
+
}) &
|
|
72
|
+
(undefined extends Route['headers']
|
|
73
|
+
? {
|
|
74
|
+
$headers?: Record<
|
|
75
|
+
string,
|
|
76
|
+
unknown
|
|
77
|
+
>
|
|
78
|
+
}
|
|
79
|
+
: {
|
|
80
|
+
$headers: Route['headers']
|
|
81
|
+
}) &
|
|
82
|
+
(IsUnknown<
|
|
83
|
+
Route['params']
|
|
84
|
+
> extends false
|
|
85
|
+
? {
|
|
86
|
+
$params?: never
|
|
87
|
+
}
|
|
88
|
+
: {
|
|
89
|
+
$params: Route['params']
|
|
90
|
+
})
|
|
105
91
|
) => Promise<
|
|
106
92
|
| {
|
|
107
93
|
data: Route['response'] extends {
|
|
@@ -127,7 +113,17 @@ export namespace EdenTreaty {
|
|
|
127
113
|
string
|
|
128
114
|
>
|
|
129
115
|
}
|
|
130
|
-
>
|
|
116
|
+
>) extends (
|
|
117
|
+
params: infer Params
|
|
118
|
+
) => infer Response
|
|
119
|
+
? {
|
|
120
|
+
$params: undefined
|
|
121
|
+
$headers: undefined
|
|
122
|
+
$query: undefined
|
|
123
|
+
} extends Params
|
|
124
|
+
? (params?: Params) => Response
|
|
125
|
+
: (params: Params) => Response
|
|
126
|
+
: never
|
|
131
127
|
: never
|
|
132
128
|
}
|
|
133
129
|
>
|
|
@@ -141,67 +137,45 @@ export namespace EdenTreaty {
|
|
|
141
137
|
: (params: {
|
|
142
138
|
$query: Route['query']
|
|
143
139
|
}) => EdenWS<Route>
|
|
144
|
-
:
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
> extends infer Errors
|
|
184
|
-
? IsNever<Errors> extends true
|
|
185
|
-
? EdenFetchError<
|
|
186
|
-
number,
|
|
187
|
-
string
|
|
188
|
-
>
|
|
189
|
-
: Errors
|
|
190
|
-
: EdenFetchError<
|
|
191
|
-
number,
|
|
192
|
-
string
|
|
193
|
-
>
|
|
194
|
-
}
|
|
195
|
-
>
|
|
196
|
-
: (
|
|
197
|
-
params: Replace<
|
|
198
|
-
Route['body'],
|
|
199
|
-
Blob | Blob[],
|
|
200
|
-
File | FileList
|
|
201
|
-
> & {
|
|
202
|
-
$query?: Route['query']
|
|
203
|
-
$fetch?: RequestInit
|
|
204
|
-
}
|
|
140
|
+
: ((
|
|
141
|
+
params: (IsUnknown<
|
|
142
|
+
Route['body']
|
|
143
|
+
> extends false
|
|
144
|
+
? Replace<
|
|
145
|
+
Route['body'],
|
|
146
|
+
Blob | Blob[],
|
|
147
|
+
Files
|
|
148
|
+
>
|
|
149
|
+
: {}) &
|
|
150
|
+
(undefined extends Route['query']
|
|
151
|
+
? {
|
|
152
|
+
$query?: Record<
|
|
153
|
+
string,
|
|
154
|
+
string
|
|
155
|
+
>
|
|
156
|
+
}
|
|
157
|
+
: {
|
|
158
|
+
$query: Route['query']
|
|
159
|
+
}) &
|
|
160
|
+
(undefined extends Route['headers']
|
|
161
|
+
? {
|
|
162
|
+
$headers?: Record<
|
|
163
|
+
string,
|
|
164
|
+
unknown
|
|
165
|
+
>
|
|
166
|
+
}
|
|
167
|
+
: {
|
|
168
|
+
$headers: Route['headers']
|
|
169
|
+
}) &
|
|
170
|
+
(IsUnknown<
|
|
171
|
+
Route['params']
|
|
172
|
+
> extends false
|
|
173
|
+
? {
|
|
174
|
+
$params?: never
|
|
175
|
+
}
|
|
176
|
+
: {
|
|
177
|
+
$params: Route['params']
|
|
178
|
+
})
|
|
205
179
|
) => Promise<
|
|
206
180
|
| {
|
|
207
181
|
data: Route['response'] extends {
|
|
@@ -224,7 +198,17 @@ export namespace EdenTreaty {
|
|
|
224
198
|
: Errors
|
|
225
199
|
: EdenFetchError<number, string>
|
|
226
200
|
}
|
|
227
|
-
>
|
|
201
|
+
>) extends (
|
|
202
|
+
params: infer Params
|
|
203
|
+
) => infer Response
|
|
204
|
+
? {
|
|
205
|
+
$params: undefined
|
|
206
|
+
$headers: undefined
|
|
207
|
+
$query: undefined
|
|
208
|
+
} extends Params
|
|
209
|
+
? (params?: Params) => Response
|
|
210
|
+
: (params: Params) => Response
|
|
211
|
+
: never
|
|
228
212
|
: never
|
|
229
213
|
}
|
|
230
214
|
>
|
|
@@ -251,6 +235,6 @@ type NestPath<T extends string, V> = T extends `${infer First}/${infer Rest}`
|
|
|
251
235
|
? First extends `:${infer Parameter}`
|
|
252
236
|
? Record<(string & {}) | number | `:${Parameter}`, NestPath<Rest, V>>
|
|
253
237
|
: Record<First, NestPath<Rest, V>>
|
|
254
|
-
: T extends `:${
|
|
238
|
+
: T extends `:${string}`
|
|
255
239
|
? Record<(string & {}) | number | T, V>
|
|
256
240
|
: Record<T, V>
|
package/src/types.ts
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
Elysia,
|
|
3
|
-
SCHEMA,
|
|
4
|
-
IsPathParameter,
|
|
5
|
-
EXPOSED,
|
|
6
|
-
AnyTypedSchema
|
|
7
|
-
} from 'elysia'
|
|
8
|
-
|
|
9
1
|
import type { EdenFetchError } from './utils'
|
|
10
2
|
|
|
11
3
|
// https://stackoverflow.com/a/39495173
|
|
@@ -33,11 +25,6 @@ export type MapError<T extends Record<number, unknown>> = [
|
|
|
33
25
|
}[A]
|
|
34
26
|
: false
|
|
35
27
|
|
|
36
|
-
// https://twitter.com/mattpocockuk/status/1622730173446557697?s=20
|
|
37
|
-
type Prettify<T> = {
|
|
38
|
-
[K in keyof T]: T[K]
|
|
39
|
-
} & {}
|
|
40
|
-
|
|
41
28
|
export type UnionToIntersect<U> = (
|
|
42
29
|
U extends unknown ? (arg: U) => 0 : never
|
|
43
30
|
) extends (arg: infer I) => 0
|