@elysiajs/eden 0.5.6 → 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 CHANGED
@@ -16,6 +16,8 @@
16
16
  "@typescript-eslint"
17
17
  ],
18
18
  "rules": {
19
+ "@typescript-eslint/no-namespace": "off",
20
+ "@typescript-eslint/ban-ts-comment": "off",
19
21
  "@typescript-eslint/ban-types": "off",
20
22
  "@typescript-eslint/no-explicit-any": "off"
21
23
  },
@@ -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"}
@@ -1,10 +1,13 @@
1
1
  /// <reference types="bun-types" />
2
- import type { Elysia, SCHEMA } from '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 Record<typeof SCHEMA, infer Schema extends Record<string, any>> ? EdenFetch.Fn<Schema> : 'Please install Elysia before using Eden';
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 h=require("./utils-a2cfc56a.js"),o=(f,p)=>async(c,{params:i,body:a,...n}={})=>{var u;i&&Object.entries(i).forEach(([e,t])=>{c=c.replace(`:${e}`,t)});const s=(u=n.headers)==null?void 0:u["Content-Type"];if(!s||s==="application/json")try{a=JSON.stringify(a)}catch{}return fetch(f+c,{...n,headers:a?{"content-type":"application/json",...n.headers}:n.headers,body:a}).then(async e=>{var l;let t;switch((l=e.headers.get("Content-Type"))==null?void 0:l.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 h.EdenFetchError(e.status,t)}:{data:t,error:null}})};exports.edenFetch=o;
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 l } from "./utils-5a40996f.mjs";
2
- const j = (h, o) => (
1
+ import { E as o } from "./utils-5a40996f.mjs";
2
+ const y = (f, s) => (
3
3
  // @ts-ignore
4
- async (c, { params: s, body: a, ...n } = {}) => {
4
+ async (c, { params: h, body: a, ...n } = {}) => {
5
5
  var u;
6
- s && Object.entries(s).forEach(([e, t]) => {
6
+ h && Object.entries(h).forEach(([e, t]) => {
7
7
  c = c.replace(`:${e}`, t);
8
8
  });
9
- const i = (u = n.headers) == null ? void 0 : u["Content-Type"];
10
- if (!i || i === "application/json")
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(h + c, {
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 f;
23
+ var i;
24
24
  let t;
25
- switch ((f = e.headers.get("Content-Type")) == null ? void 0 : f.split(";")[0]) {
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 l(e.status, t)
35
+ error: new o(e.status, t)
36
36
  } : { data: t, error: null };
37
37
  });
38
38
  }
39
39
  );
40
40
  export {
41
- j as edenFetch
41
+ y as edenFetch
42
42
  };
@@ -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"}
@@ -1,7 +1,9 @@
1
1
  /// <reference types="bun-types" />
2
- import type { Elysia, EXPOSED } from 'elysia';
2
+ import type { Elysia } from 'elysia';
3
3
  export declare namespace EdenFn {
4
- type Create<App extends Elysia<any>> = App['meta'] extends Record<typeof EXPOSED, infer Schema extends Record<string, any>> ? EdenFn.Compose<Schema> : 'Please install Elysia before using Eden';
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
- [EXPOSED]: any;
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"}
@@ -11,3 +11,4 @@ export declare class Signal {
11
11
  clone(config?: EdenFn.Config): Signal;
12
12
  run(procedure: string[], params: any): Promise<any>;
13
13
  }
14
+ //# sourceMappingURL=utils.d.ts.map
@@ -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 w=Object.create;var f=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var F=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,O=Object.prototype.hasOwnProperty;var S=(e,t,n)=>t in e?f(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var b=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of F(t))!O.call(e,s)&&s!==n&&f(e,s,{get:()=>t[s],enumerable:!(i=z(t,s))||i.enumerable});return e};var J=(e,t,n)=>(n=e!=null?w(P(e)):{},b(t||!e||!e.__esModule?f(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;const c=[...this.pendings];this.pendings=[];const{serialize:l,deserialize:y}=await this.sJson,a=await fetch(`${this.url}${this.config.fn??"/~fn"}`,{method:"POST",...this.config.fetch,headers:{"content-type":"elysia/fn",...(p=this.config.fetch)==null?void 0:p.headers},body:JSON.stringify(l(c))});a.status===200?r(a.json().then(d=>y(d))):r(Array(c.length).fill(new Error(await a.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(l=>{if(l instanceof Error)throw l;return l})}}),$=(e,t)=>u(e,[],new g(e,t));exports.edenFn=$;
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 w = Object.defineProperty;
2
- var d = (n, t, e) => t in n ? w(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
3
- var o = (n, t, e) => (d(n, typeof t != "symbol" ? t + "" : t, e), 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: p } = await this.sJson, f = await fetch(
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
- ...(g = this.config.fetch) == null ? void 0 : g.headers
42
+ ...(p = this.config.fetch) == null ? void 0 : p.headers
43
43
  },
44
44
  body: JSON.stringify(c(h))
45
45
  }
46
46
  );
47
- f.status === 200 ? s(f.json().then((y) => p(y))) : s(
47
+ l.status === 200 ? s(l.json().then((w) => y(w))) : s(
48
48
  Array(h.length).fill(
49
- new Error(await f.text())
49
+ new Error(await l.text())
50
50
  )
51
51
  );
52
52
  }, 33);
53
53
  });
54
- const a = await this.operation.then((s) => s[i]);
55
- return this.operation = null, this.isFetching = !1, a;
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 l = (n, t, e) => (
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, a, r) {
63
- return l(n, [...t, a], e);
62
+ get(i, f, r) {
63
+ return a(n, [...t, f], e);
64
64
  },
65
- apply(i, a, r) {
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 l(n, [], e.clone(s));
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
- ), F = (n, t) => (
86
+ ), x = (n, t) => (
87
87
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
88
88
  // @ts-ignore
89
- l(n, [], new u(n, t))
89
+ a(n, [], new u(n, t))
90
90
  );
91
91
  export {
92
- F as edenFn
92
+ x as edenFn
93
93
  };
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { edenTreaty } from './treaty';
2
2
  export { edenFetch } from './fetch';
3
3
  export { edenFn } from './fn';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -14,6 +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?: {
18
- fetcher?: typeof fetch;
19
- }) => EdenTreaty.Create<App>;
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"}
@@ -1 +1,2 @@
1
1
  export declare const composePath: (domain: string, path: string, query: Record<string, string> | undefined) => string;
2
+ //# sourceMappingURL=utils.d.ts.map
@@ -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 O=Object.defineProperty;var m=(r,e,t)=>e in r?O(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var w=(r,e,t)=>(m(r,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const j=require("./utils-a2cfc56a.js"),k=(r,e,t)=>{if(r.endsWith("/")||(r+="/"),e==="index"&&(e=""),!t||!Object.keys(t).length)return`${r}${e}`;let n="";for(const[f,s]of Object.entries(t))n+=`${f}=${s}&`;return`${r}${e}?${n.slice(0,-1)}`},h=typeof FileList>"u",S=r=>h?r instanceof Blob:r instanceof FileList||r instanceof File,x=r=>{for(let e in r){if(S(r[e]))return!0;if(Array.isArray(r[e])&&r[e].find(t=>S(t)))return!0}return!1},E=r=>h?r:new Promise(e=>{const t=new FileReader;t.onload=()=>{e(new Blob([t.result],{type:r.type}))},t.readAsArrayBuffer(r)});class F{constructor(e){w(this,"ws");w(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,f=>{if(e==="message"){let s=f.data.toString();const i=s.charCodeAt(0);if(i===47||i===123)try{s=JSON.parse(s)}catch{}else Number.isNaN(+s)?s==="true"?s=!0:s==="fase"&&(s=!1):s=+s;t({...f,data:s})}else t(f)},n),this}removeEventListener(e,t,n){return this.off(e,t,n),this}close(){return this.ws.close(),this}}const L=(r,e="",t)=>new Proxy(()=>{},{get(n,f,s){return L(r,`${e}/${f.toString()}`,t)},apply(n,f,[{$query:s,$fetch:i,$body:N,...p}={$fetch:void 0,$query:void 0,$body:void 0}]=[{}]){const b=e.lastIndexOf("/"),g=e.slice(b+1),d=k(r,e.slice(0,b),s);return g==="subscribe"?new F(d.replace(/^([^]+):\/\//,d.startsWith("https://")?"wss://":"ws://")):(async()=>{let c=N??(Object.keys(p).length?p:void 0);const y=typeof c=="object",v=y&&x(c);if(v){const o=new FormData;for(const[a,l]of Object.entries(c))if(h)o.append(a,l);else if(l instanceof File)o.append(a,await E(l));else if(l instanceof FileList)for(let u=0;u<l.length;u++)o.append(a,await E(l[u]));else o.append(a,l);c=o}else y&&(c=JSON.stringify(c));return(t.fetcher??fetch)(d,{method:g,body:c,...i,headers:c?v?i==null?void 0:i.headers:{"content-type":y?"application/json":"text/plain",...i==null?void 0:i.headers}:i==null?void 0:i.headers}).then(async o=>{var l;let a;switch((l=o.headers.get("Content-Type"))==null?void 0:l.split(";")[0]){case"application/json":a=await o.json();break;default:a=await o.text().then(u=>Number.isNaN(+u)?u==="true"?!0:u==="false"?!1:u:+u)}return o.status>300?{data:a,error:new j.EdenFetchError(o.status,await a)}:{data:a,error:null}})})()}}),A=(r,e={fetcher:fetch})=>new Proxy({},{get(t,n){return L(r,n,e)}});exports.EdenWS=F;exports.edenTreaty=A;
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 N = Object.defineProperty;
2
- var S = (r, e, t) => e in r ? N(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t;
3
- var p = (r, e, t) => (S(r, typeof e != "symbol" ? e + "" : e, t), t);
4
- import { E as x } from "./utils-5a40996f.mjs";
5
- const O = (r, e, t) => {
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 [f, s] of Object.entries(t))
10
- n += `${f}=${s}&`;
9
+ for (const [a, s] of Object.entries(t))
10
+ n += `${a}=${s}&`;
11
11
  return `${r}${e}?${n.slice(0, -1)}`;
12
- }, w = typeof FileList > "u", E = (r) => w ? r instanceof Blob : r instanceof FileList || r instanceof File, k = (r) => {
13
- for (let e in r) {
14
- if (E(r[e]))
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) => E(t)))
16
+ if (Array.isArray(r[e]) && r[e].find((t) => N(t)))
17
17
  return !0;
18
18
  }
19
19
  return !1;
20
- }, F = (r) => w ? r : new Promise((e) => {
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 A {
26
+ class J {
27
27
  constructor(e) {
28
- p(this, "ws");
29
- p(this, "url");
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
- (f) => {
49
+ (a) => {
50
50
  if (e === "message") {
51
- let s = f.data.toString();
52
- const i = s.charCodeAt(0);
53
- if (i === 47 || i === 123)
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
- ...f,
61
+ ...a,
62
62
  data: s
63
63
  });
64
64
  } else
65
- t(f);
65
+ t(a);
66
66
  },
67
67
  n
68
68
  ), this;
@@ -74,85 +74,104 @@ class A {
74
74
  return this.ws.close(), this;
75
75
  }
76
76
  }
77
- const m = (r, e = "", t) => new Proxy(() => {
78
- }, {
79
- get(n, f, s) {
80
- return m(r, `${e}/${f.toString()}`, t);
81
- },
82
- apply(n, f, [
83
- { $query: s, $fetch: i, $body: L, ...h } = {
84
- $fetch: void 0,
85
- $query: void 0,
86
- $body: void 0
87
- }
88
- ] = [{}]) {
89
- const b = e.lastIndexOf("/"), g = e.slice(b + 1), d = O(r, e.slice(0, b), s);
90
- return g === "subscribe" ? new A(
91
- d.replace(
92
- /^([^]+):\/\//,
93
- d.startsWith("https://") ? "wss://" : "ws://"
94
- )
95
- ) : (async () => {
96
- let c = L ?? (Object.keys(h).length ? h : void 0);
97
- const y = typeof c == "object", v = y && k(c);
98
- if (v) {
99
- const o = new FormData();
100
- for (const [a, l] of Object.entries(c))
101
- if (w)
102
- o.append(a, l);
103
- else if (l instanceof File)
104
- o.append(
105
- a,
106
- await F(l)
107
- );
108
- else if (l instanceof FileList)
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
- a,
112
- await F(l[u])
110
+ d,
111
+ await S(l)
113
112
  );
114
- else
115
- o.append(a, l);
116
- c = o;
117
- } else
118
- y && (c = JSON.stringify(c));
119
- return (t.fetcher ?? fetch)(d, {
120
- method: g,
121
- body: c,
122
- // ...config.fetch,
123
- ...i,
124
- headers: c ? v ? i == null ? void 0 : i.headers : {
125
- "content-type": y ? "application/json" : "text/plain",
126
- ...i == null ? void 0 : i.headers
127
- } : i == null ? void 0 : i.headers
128
- }).then(async (o) => {
129
- var l;
130
- let a;
131
- switch ((l = o.headers.get("Content-Type")) == null ? void 0 : l.split(";")[0]) {
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
- a = await o.json();
140
+ u = await i.json();
134
141
  break;
135
142
  default:
136
- a = await o.text().then((u) => Number.isNaN(+u) ? u === "true" ? !0 : u === "false" ? !1 : u : +u);
143
+ u = await i.text().then((o) => Number.isNaN(+o) ? o === "true" ? !0 : o === "false" ? !1 : o : +o);
137
144
  }
138
- return o.status > 300 ? {
139
- data: a,
140
- error: new x(o.status, await a)
141
- } : { data: a, error: null };
142
- });
143
- })();
144
- }
145
- }), P = (r, e = {
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 = {
146
165
  fetcher: fetch
147
166
  }) => new Proxy(
148
167
  {},
149
168
  {
150
169
  get(t, n) {
151
- return m(r, n, e);
170
+ return O(r, n, e);
152
171
  }
153
172
  }
154
173
  );
155
174
  export {
156
- A as EdenWS,
157
- P as edenTreaty
175
+ J as EdenWS,
176
+ D as edenTreaty
158
177
  };
package/dist/types.d.ts CHANGED
@@ -23,3 +23,4 @@ export type AnyTypedRoute = {
23
23
  };
24
24
  };
25
25
  export {};
26
+ //# sourceMappingURL=types.d.ts.map
@@ -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
@@ -3,3 +3,4 @@ export declare class EdenFetchError<Status extends number = number, Value = unkn
3
3
  value: Value;
4
4
  constructor(status: Status, value: Value);
5
5
  }
6
+ //# sourceMappingURL=utils.d.ts.map
@@ -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.5.6",
3
+ "version": "0.6.0",
4
4
  "description": "Fully type-safe Elysia client",
5
5
  "author": {
6
6
  "name": "saltyAom",
@@ -69,11 +69,11 @@
69
69
  },
70
70
  "devDependencies": {
71
71
  "@elysiajs/cors": "0.5.0",
72
- "@elysiajs/fn": "^0.5.2",
72
+ "@elysiajs/fn": "^0.6.1",
73
73
  "@sinclair/typebox": "^0.26.8",
74
74
  "@types/node": "^18.15.5",
75
75
  "bun-types": "^0.5.8",
76
- "elysia": "0.5.17",
76
+ "elysia": "0.6.0",
77
77
  "eslint": "^8.26.0",
78
78
  "rimraf": "^4.4.1",
79
79
  "typescript": "^5.0.4",
@@ -83,4 +83,4 @@
83
83
  "dependencies": {
84
84
  "superjson": "^1.12.2"
85
85
  }
86
- }
86
+ }
@@ -25,6 +25,8 @@ export const edenFetch =
25
25
  //
26
26
  }
27
27
 
28
+ const fetch = config?.fetcher || globalThis.fetch
29
+
28
30
  // @ts-ignore
29
31
  return fetch(server + endpoint, {
30
32
  ...options,
@@ -1,16 +1,17 @@
1
- import type { Elysia, SCHEMA } from 'elysia'
1
+ import type { Elysia } from 'elysia'
2
2
  import type { EdenFetchError } from '../utils'
3
- import type { MapError, IsUnknown, IsNever, AnyTypedRoute } from '../types'
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 Record<
7
- typeof SCHEMA,
8
- infer Schema extends Record<string, any>
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, EXPOSED } from '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 Record<
5
- typeof EXPOSED,
6
- infer Schema extends Record<string, any>
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
- [EXPOSED]: any
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
@@ -52,6 +52,7 @@ export class Signal {
52
52
 
53
53
  const { serialize, deserialize } = await this.sJson
54
54
 
55
+ const fetch = this.config?.fetcher || globalThis.fetch
55
56
  const results = await fetch(
56
57
  `${this.url}${this.config.fn ?? '/~fn'}`,
57
58
  {
@@ -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 (let key in obj) {
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: string = '',
155
+ path = '',
154
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
- return (async () => {
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,56 +219,72 @@ const createProxy = (
216
219
  body = newBody
217
220
  } else if (isObject) body = JSON.stringify(body)
218
221
 
219
- return (config.fetcher ?? fetch)(url, {
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
- // ...config.fetch,
230
+ ...config.$fetch,
223
231
  ...$fetch,
224
232
  headers: body
225
233
  ? isFormData
226
- ? $fetch?.['headers']
234
+ ? $headers
227
235
  : {
228
236
  'content-type': isObject
229
237
  ? 'application/json'
230
238
  : 'text/plain',
231
- ...$fetch?.['headers']
239
+ ...$headers
232
240
  }
233
- : $fetch?.['headers']
234
- }).then(async (res) => {
235
- let data
236
-
237
- switch (res.headers.get('Content-Type')?.split(';')[0]) {
238
- case 'application/json':
239
- data = await res.json()
240
- break
241
-
242
- default:
243
- data = await res.text().then((data) => {
244
- if (!Number.isNaN(+data)) return +data
245
- if (data === 'true') return true
246
- if (data === 'false') return false
247
-
248
- return data
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
- if (res.status > 300)
253
- return {
254
- data,
255
- error: new EdenFetchError(res.status, await data)
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
- return { data, error: null }
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: {
267
- fetcher?: typeof fetch
268
- } = {
287
+ config: EdenTreaty.Config = {
269
288
  fetcher: fetch
270
289
  }
271
290
  ): EdenTreaty.Create<App> =>
@@ -1,4 +1,4 @@
1
- import type { Elysia, SCHEMA, AnyTypedSchema } from '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,27 +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 Record<
15
- typeof SCHEMA,
16
- infer Schema extends Record<string, any>
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
23
  export interface Config {
24
+ /**
25
+ * Default options to pass to fetch
26
+ */
27
+ $fetch?: FetchRequestInit
22
28
  fetcher?: typeof fetch
23
29
  }
24
30
 
25
31
  export type Sign<A> = {
26
- [Path in keyof A as Path extends `/${infer Prefix}/${infer _}`
32
+ [Path in keyof A as Path extends `/${infer Prefix}/${string}`
27
33
  ? Prefix
28
34
  : Path extends `/`
29
35
  ? 'index'
30
36
  : Path extends `/${infer Prefix}`
31
37
  ? Prefix
32
38
  : never]: UnionToIntersect<
33
- Path extends `/${infer _}/${infer Rest}`
39
+ Path extends `/${string}/${infer Rest}`
34
40
  ? NestPath<
35
41
  Rest,
36
42
  {
@@ -43,71 +49,45 @@ export namespace EdenTreaty {
43
49
  : (params: {
44
50
  $query: Route['query']
45
51
  }) => EdenWS<Route>
46
- : IsUnknown<Route['body']> extends true
47
- ? undefined extends Route['query']
48
- ? (params?: {
49
- $query?: Record<string, string>
50
- $fetch?: RequestInit
51
- }) => Promise<
52
- | {
53
- data: Awaited<
54
- Route['response']['200']
55
- >
56
- error: null
57
- }
58
- | {
59
- data: null
60
- error: MapError<
61
- Route['response']
62
- > extends infer Errors
63
- ? IsNever<Errors> extends true
64
- ? EdenFetchError<
65
- number,
66
- string
67
- >
68
- : Errors
69
- : EdenFetchError<
70
- number,
71
- string
72
- >
73
- }
74
- >
75
- : (params: {
76
- $query: Route['query']
77
- $fetch?: RequestInit
78
- }) => Promise<
79
- | {
80
- data: Awaited<
81
- Route['response']['200']
82
- >
83
- error: null
84
- }
85
- | {
86
- data: null
87
- error: MapError<
88
- Route['response']
89
- > extends infer Errors
90
- ? IsNever<Errors> extends true
91
- ? EdenFetchError<
92
- number,
93
- string
94
- >
95
- : Errors
96
- : EdenFetchError<
97
- number,
98
- string
99
- >
100
- }
101
- >
102
- : (
103
- params: Replace<
104
- Route['body'],
105
- Blob | Blob[],
106
- File | FileList
107
- > & {
108
- $query?: Route['query']
109
- $fetch?: RequestInit
110
- }
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
+ })
111
91
  ) => Promise<
112
92
  | {
113
93
  data: Route['response'] extends {
@@ -133,7 +113,17 @@ export namespace EdenTreaty {
133
113
  string
134
114
  >
135
115
  }
136
- >
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
137
127
  : never
138
128
  }
139
129
  >
@@ -147,71 +137,45 @@ export namespace EdenTreaty {
147
137
  : (params: {
148
138
  $query: Route['query']
149
139
  }) => EdenWS<Route>
150
- : IsUnknown<Route['body']> extends true
151
- ? undefined extends Route['query']
152
- ? (params?: {
153
- $query?: Record<string, string>
154
- $fetch?: RequestInit
155
- }) => Promise<
156
- | {
157
- data: Awaited<
158
- Route['response']['200']
159
- >
160
- error: null
161
- }
162
- | {
163
- data: null
164
- error: MapError<
165
- Route['response']
166
- > extends infer Errors
167
- ? IsNever<Errors> extends true
168
- ? EdenFetchError<
169
- number,
170
- string
171
- >
172
- : Errors
173
- : EdenFetchError<
174
- number,
175
- string
176
- >
177
- }
178
- >
179
- : (params: {
180
- $query: Route['query']
181
- $fetch?: RequestInit
182
- }) => Promise<
183
- | {
184
- data: Awaited<
185
- Route['response']['200']
186
- >
187
- error: null
188
- }
189
- | {
190
- data: null
191
- error: MapError<
192
- Route['response']
193
- > extends infer Errors
194
- ? IsNever<Errors> extends true
195
- ? EdenFetchError<
196
- number,
197
- string
198
- >
199
- : Errors
200
- : EdenFetchError<
201
- number,
202
- string
203
- >
204
- }
205
- >
206
- : (
207
- params: Replace<
208
- Route['body'],
209
- Blob | Blob[],
210
- File | FileList
211
- > & {
212
- $query?: Route['query']
213
- $fetch?: RequestInit
214
- }
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
+ })
215
179
  ) => Promise<
216
180
  | {
217
181
  data: Route['response'] extends {
@@ -234,7 +198,17 @@ export namespace EdenTreaty {
234
198
  : Errors
235
199
  : EdenFetchError<number, string>
236
200
  }
237
- >
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
238
212
  : never
239
213
  }
240
214
  >
@@ -261,6 +235,6 @@ type NestPath<T extends string, V> = T extends `${infer First}/${infer Rest}`
261
235
  ? First extends `:${infer Parameter}`
262
236
  ? Record<(string & {}) | number | `:${Parameter}`, NestPath<Rest, V>>
263
237
  : Record<First, NestPath<Rest, V>>
264
- : T extends `:${infer Parameter}`
238
+ : T extends `:${string}`
265
239
  ? Record<(string & {}) | number | T, V>
266
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