@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 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,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?: {}) => 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)}`},p=typeof FileList>"u",S=r=>p?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=>p?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()}`)},apply(n,f,[{$query:s,$fetch:i,$body:N,...g}={$fetch:void 0,$query:void 0,$body:void 0}]=[{}]){const h=e.lastIndexOf("/"),b=e.slice(h+1),d=k(r,e.slice(0,h),s);return b==="subscribe"?new F(d.replace(/^([^]+):\/\//,d.startsWith("https://")?"wss://":"ws://")):(async()=>{let c=N??(Object.keys(g).length?g: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(p)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 fetch(d,{method:b,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={})=>new Proxy({},{get(t,n){return L(r,n)}});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,83 +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()}`);
81
- },
82
- apply(n, f, [
83
- { $query: s, $fetch: i, $body: L, ...g } = {
84
- $fetch: void 0,
85
- $query: void 0,
86
- $body: void 0
87
- }
88
- ] = [{}]) {
89
- const h = e.lastIndexOf("/"), b = e.slice(h + 1), d = O(r, e.slice(0, h), s);
90
- return b === "subscribe" ? new A(
91
- d.replace(
92
- /^([^]+):\/\//,
93
- d.startsWith("https://") ? "wss://" : "ws://"
94
- )
95
- ) : (async () => {
96
- let c = L ?? (Object.keys(g).length ? g : 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 fetch(d, {
120
- method: b,
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 = {}) => new Proxy(
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 m(r, n);
170
+ return O(r, n, e);
150
171
  }
151
172
  }
152
173
  );
153
174
  export {
154
- A as EdenWS,
155
- P as edenTreaty
175
+ J as EdenWS,
176
+ D as edenTreaty
156
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.5",
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.5.2",
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.5.17",
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
  }
@@ -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 = '',
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
- 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,54 +219,74 @@ const createProxy = (
216
219
  body = newBody
217
220
  } else if (isObject) body = JSON.stringify(body)
218
221
 
219
- return 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: {} = {}
287
+ config: EdenTreaty.Config = {
288
+ fetcher: fetch
289
+ }
267
290
  ): EdenTreaty.Create<App> =>
268
291
  new Proxy(
269
292
  {},
@@ -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,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 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
- 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}/${infer _}`
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 `/${infer _}/${infer Rest}`
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
- : IsUnknown<Route['body']> extends true
45
- ? undefined extends Route['query']
46
- ? (params?: {
47
- $query?: Record<string, string>
48
- $fetch?: RequestInit
49
- }) => Promise<
50
- | {
51
- data: Awaited<Route['response']['200']>
52
- error: null
53
- }
54
- | {
55
- data: null
56
- error: MapError<
57
- Route['response']
58
- > extends infer Errors
59
- ? IsNever<Errors> extends true
60
- ? EdenFetchError<
61
- number,
62
- string
63
- >
64
- : Errors
65
- : EdenFetchError<
66
- number,
67
- string
68
- >
69
- }
70
- >
71
- : (params: {
72
- $query: Route['query']
73
- $fetch?: RequestInit
74
- }) => Promise<
75
- | {
76
- data: Awaited<Route['response']['200']>
77
- error: null
78
- }
79
- | {
80
- data: null
81
- error: MapError<
82
- Route['response']
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
- : IsUnknown<Route['body']> extends true
145
- ? undefined extends Route['query']
146
- ? (params?: {
147
- $query?: Record<string, string>
148
- $fetch?: RequestInit
149
- }) => Promise<
150
- | {
151
- data: Awaited<Route['response']['200']>
152
- error: null
153
- }
154
- | {
155
- data: null
156
- error: MapError<
157
- Route['response']
158
- > extends infer Errors
159
- ? IsNever<Errors> extends true
160
- ? EdenFetchError<
161
- number,
162
- string
163
- >
164
- : Errors
165
- : EdenFetchError<
166
- number,
167
- string
168
- >
169
- }
170
- >
171
- : (params: {
172
- $query: Route['query']
173
- $fetch?: RequestInit
174
- }) => Promise<
175
- | {
176
- data: Awaited<Route['response']['200']>
177
- error: null
178
- }
179
- | {
180
- data: null
181
- error: MapError<
182
- Route['response']
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 `:${infer Parameter}`
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