@elysiajs/eden 0.8.1 → 1.0.0-beta.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.
@@ -1,25 +1,71 @@
1
1
  /// <reference lib="dom" />
2
- import type { Elysia } from 'elysia';
2
+ import { Elysia } from 'elysia';
3
3
  import type { EdenWS } from './index';
4
- import type { IsUnknown, IsNever, UnionToIntersect, MapError } from '../types';
4
+ import type { IsUnknown, IsNever, MapError, Prettify } from '../types';
5
5
  import type { EdenFetchError } from '../errors';
6
6
  type Files = File | FileList;
7
7
  type Replace<RecordType, TargetType, GenericType> = {
8
8
  [K in keyof RecordType]: RecordType[K] extends TargetType ? GenericType : RecordType[K];
9
9
  };
10
- type Split<S extends string> = S extends `${infer Head}/${infer Tail}` ? Head extends '' ? Tail extends '' ? [] : Split<Tail> : [Head, ...Split<Tail>] : S extends `/` ? [] : S extends `${infer Head}/` ? [Head] : [S];
11
- type AnySchema = {
12
- body: unknown;
13
- headers: unknown;
14
- query: unknown;
15
- params: unknown;
16
- response: any;
17
- };
18
10
  type MaybeArray<T> = T | T[];
19
11
  export declare namespace EdenTreaty {
20
12
  export type Create<App extends Elysia<any, any, any, any, any, any>> = App extends {
21
- schema: infer Schema extends Record<string, any>;
22
- } ? UnionToIntersect<Sign<Schema>> : 'Please install Elysia before using Eden';
13
+ _routes: infer Schema extends Record<string, unknown>;
14
+ } ? Prettify<Sign<Schema>> : 'Please install Elysia before using Eden';
15
+ export type Sign<Route extends Record<string, any>> = {
16
+ [K in keyof Route as K extends `:${string}` ? (string & {}) | number | K : K]: Route[K] extends {
17
+ [method in string]: {
18
+ body: infer Body;
19
+ headers: infer Headers;
20
+ query: infer Query;
21
+ params: unknown;
22
+ response: unknown;
23
+ };
24
+ } ? {
25
+ [Method in keyof Route[K]]: Method extends 'subscribe' ? undefined extends Route['query'] ? (params?: {
26
+ $query?: Record<string, string>;
27
+ }) => EdenWS<Route> : (params: {
28
+ $query: Route['query'];
29
+ }) => EdenWS<Route> : ((params: Prettify<{
30
+ $fetch?: RequestInit;
31
+ getRaw?: boolean;
32
+ } & (IsUnknown<Body> extends false ? Replace<Body, Blob | Blob[], Files> : {}) & (undefined extends Query ? {
33
+ $query?: Record<string, string>;
34
+ } : {
35
+ $query: Query;
36
+ }) & (undefined extends Headers ? {
37
+ $headers?: Record<string, unknown>;
38
+ } : {
39
+ $headers: Headers;
40
+ })>) => Promise<({
41
+ data: Response extends {
42
+ 200: infer ReturnedType;
43
+ } ? Awaited<ReturnedType> : unknown;
44
+ error: null;
45
+ } | {
46
+ data: null;
47
+ error: Response extends Record<number, unknown> ? MapError<Response> extends infer Errors ? IsNever<Errors> extends true ? EdenFetchError<number, string> : Errors : EdenFetchError<number, string> : Record<number, Error>;
48
+ }) & {
49
+ status: number;
50
+ response: Response;
51
+ headers: Record<string, string>;
52
+ }>) extends (params: infer Params) => infer Response ? {
53
+ $params: undefined;
54
+ $headers: undefined;
55
+ $query: undefined;
56
+ } extends Params ? (params?: Params, options?: {
57
+ fetch?: RequestInit;
58
+ transform?: EdenTreaty.Transform<Response>;
59
+ query?: Params['query'];
60
+ headers?: Params['headers'];
61
+ }) => Response : (params: Params, options?: {
62
+ fetch?: RequestInit;
63
+ transform?: EdenTreaty.Transform<Response>;
64
+ query?: Params['query'];
65
+ headers?: Params['headers'];
66
+ }) => Response : never;
67
+ } : Prettify<Sign<Route[K]>>;
68
+ };
23
69
  type UnwrapPromise<T> = T extends Promise<infer A> ? A : T;
24
70
  export type Transform<T = unknown> = MaybeArray<(response: unknown extends T ? {
25
71
  data: any;
@@ -43,55 +89,6 @@ export declare namespace EdenTreaty {
43
89
  status: number;
44
90
  headers: Headers;
45
91
  };
46
- export type Sign<Schema extends Record<string, Record<string, unknown>>, Paths extends (string | number)[] = Split<keyof Schema & string>, Carry extends string = ''> = Paths extends [
47
- infer Prefix extends string | number,
48
- ...infer Rest extends (string | number)[]
49
- ] ? {
50
- [Key in Prefix as Prefix extends `:${string}` ? (string & {}) | number | Prefix : Prefix]: Sign<Schema, Rest, `${Carry}/${Key}`>;
51
- } : Schema[Carry extends '' ? '/' : Carry] extends infer Routes ? {
52
- [Method in keyof Routes]: Routes[Method] extends infer Route extends AnySchema ? Method extends 'subscribe' ? undefined extends Route['query'] ? (params?: {
53
- $query?: Record<string, string>;
54
- }) => EdenWS<Route> : (params: {
55
- $query: Route['query'];
56
- }) => EdenWS<Route> : ((params: {
57
- $fetch?: RequestInit;
58
- getRaw?: boolean;
59
- } & (IsUnknown<Route['body']> extends false ? Replace<Route['body'], Blob | Blob[], Files> : {}) & (undefined extends Route['query'] ? {
60
- $query?: Record<string, string>;
61
- } : {
62
- $query: Route['query'];
63
- }) & (undefined extends Route['headers'] ? {
64
- $headers?: Record<string, unknown>;
65
- } : {
66
- $headers: Route['headers'];
67
- })) => Promise<({
68
- data: Route['response'] extends {
69
- 200: infer ReturnedType;
70
- } ? Awaited<ReturnedType> : unknown;
71
- error: null;
72
- } | {
73
- data: null;
74
- error: MapError<Route['response']> extends infer Errors ? IsNever<Errors> extends true ? EdenFetchError<number, string> : Errors : EdenFetchError<number, string>;
75
- }) & {
76
- status: number;
77
- response: Response;
78
- headers: Record<string, string>;
79
- }>) extends (params: infer Params) => infer Response ? {
80
- $params: undefined;
81
- $headers: undefined;
82
- $query: undefined;
83
- } extends Params ? (params?: Params, options?: {
84
- fetch?: RequestInit;
85
- transform?: EdenTreaty.Transform<Response>;
86
- query?: Params['query'];
87
- headers?: Params['headers'];
88
- }) => Response : (params: Params, options?: {
89
- fetch?: RequestInit;
90
- transform?: EdenTreaty.Transform<Response>;
91
- query?: Params['query'];
92
- headers?: Params['headers'];
93
- }) => Response : never : never;
94
- } : {};
95
92
  export interface OnMessage<Data = unknown> extends MessageEvent {
96
93
  data: Data;
97
94
  rawData: MessageEvent['data'];
package/dist/treaty.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Elysia, InputSchema } from 'elysia';
2
- import { U as UnionToIntersect, I as IsUnknown, M as MapError, a as IsNever, E as EdenFetchError } from './types-d1b334ad.js';
2
+ import { P as Prettify, I as IsUnknown, M as MapError, a as IsNever, E as EdenFetchError } from './types-BQi-Ff9p.js';
3
3
 
4
4
  /// <reference lib="dom" />
5
5
 
@@ -7,19 +7,65 @@ type Files = File | FileList;
7
7
  type Replace<RecordType, TargetType, GenericType> = {
8
8
  [K in keyof RecordType]: RecordType[K] extends TargetType ? GenericType : RecordType[K];
9
9
  };
10
- type Split<S extends string> = S extends `${infer Head}/${infer Tail}` ? Head extends '' ? Tail extends '' ? [] : Split<Tail> : [Head, ...Split<Tail>] : S extends `/` ? [] : S extends `${infer Head}/` ? [Head] : [S];
11
- type AnySchema = {
12
- body: unknown;
13
- headers: unknown;
14
- query: unknown;
15
- params: unknown;
16
- response: any;
17
- };
18
10
  type MaybeArray<T> = T | T[];
19
11
  declare namespace EdenTreaty {
20
12
  export type Create<App extends Elysia<any, any, any, any, any, any>> = App extends {
21
- schema: infer Schema extends Record<string, any>;
22
- } ? UnionToIntersect<Sign<Schema>> : 'Please install Elysia before using Eden';
13
+ _routes: infer Schema extends Record<string, unknown>;
14
+ } ? Prettify<Sign<Schema>> : 'Please install Elysia before using Eden';
15
+ export type Sign<Route extends Record<string, any>> = {
16
+ [K in keyof Route as K extends `:${string}` ? (string & {}) | number | K : K]: Route[K] extends {
17
+ [method in string]: {
18
+ body: infer Body;
19
+ headers: infer Headers;
20
+ query: infer Query;
21
+ params: unknown;
22
+ response: unknown;
23
+ };
24
+ } ? {
25
+ [Method in keyof Route[K]]: Method extends 'subscribe' ? undefined extends Route['query'] ? (params?: {
26
+ $query?: Record<string, string>;
27
+ }) => EdenWS<Route> : (params: {
28
+ $query: Route['query'];
29
+ }) => EdenWS<Route> : ((params: Prettify<{
30
+ $fetch?: RequestInit;
31
+ getRaw?: boolean;
32
+ } & (IsUnknown<Body> extends false ? Replace<Body, Blob | Blob[], Files> : {}) & (undefined extends Query ? {
33
+ $query?: Record<string, string>;
34
+ } : {
35
+ $query: Query;
36
+ }) & (undefined extends Headers ? {
37
+ $headers?: Record<string, unknown>;
38
+ } : {
39
+ $headers: Headers;
40
+ })>) => Promise<({
41
+ data: Response extends {
42
+ 200: infer ReturnedType;
43
+ } ? Awaited<ReturnedType> : unknown;
44
+ error: null;
45
+ } | {
46
+ data: null;
47
+ error: Response extends Record<number, unknown> ? MapError<Response> extends infer Errors ? IsNever<Errors> extends true ? EdenFetchError<number, string> : Errors : EdenFetchError<number, string> : Record<number, Error>;
48
+ }) & {
49
+ status: number;
50
+ response: Response;
51
+ headers: Record<string, string>;
52
+ }>) extends (params: infer Params) => infer Response ? {
53
+ $params: undefined;
54
+ $headers: undefined;
55
+ $query: undefined;
56
+ } extends Params ? (params?: Params, options?: {
57
+ fetch?: RequestInit;
58
+ transform?: EdenTreaty.Transform<Response>;
59
+ query?: Params['query'];
60
+ headers?: Params['headers'];
61
+ }) => Response : (params: Params, options?: {
62
+ fetch?: RequestInit;
63
+ transform?: EdenTreaty.Transform<Response>;
64
+ query?: Params['query'];
65
+ headers?: Params['headers'];
66
+ }) => Response : never;
67
+ } : Prettify<Sign<Route[K]>>;
68
+ };
23
69
  type UnwrapPromise<T> = T extends Promise<infer A> ? A : T;
24
70
  export type Transform<T = unknown> = MaybeArray<(response: unknown extends T ? {
25
71
  data: any;
@@ -43,55 +89,6 @@ declare namespace EdenTreaty {
43
89
  status: number;
44
90
  headers: Headers;
45
91
  };
46
- export type Sign<Schema extends Record<string, Record<string, unknown>>, Paths extends (string | number)[] = Split<keyof Schema & string>, Carry extends string = ''> = Paths extends [
47
- infer Prefix extends string | number,
48
- ...infer Rest extends (string | number)[]
49
- ] ? {
50
- [Key in Prefix as Prefix extends `:${string}` ? (string & {}) | number | Prefix : Prefix]: Sign<Schema, Rest, `${Carry}/${Key}`>;
51
- } : Schema[Carry extends '' ? '/' : Carry] extends infer Routes ? {
52
- [Method in keyof Routes]: Routes[Method] extends infer Route extends AnySchema ? Method extends 'subscribe' ? undefined extends Route['query'] ? (params?: {
53
- $query?: Record<string, string>;
54
- }) => EdenWS<Route> : (params: {
55
- $query: Route['query'];
56
- }) => EdenWS<Route> : ((params: {
57
- $fetch?: RequestInit;
58
- getRaw?: boolean;
59
- } & (IsUnknown<Route['body']> extends false ? Replace<Route['body'], Blob | Blob[], Files> : {}) & (undefined extends Route['query'] ? {
60
- $query?: Record<string, string>;
61
- } : {
62
- $query: Route['query'];
63
- }) & (undefined extends Route['headers'] ? {
64
- $headers?: Record<string, unknown>;
65
- } : {
66
- $headers: Route['headers'];
67
- })) => Promise<({
68
- data: Route['response'] extends {
69
- 200: infer ReturnedType;
70
- } ? Awaited<ReturnedType> : unknown;
71
- error: null;
72
- } | {
73
- data: null;
74
- error: MapError<Route['response']> extends infer Errors ? IsNever<Errors> extends true ? EdenFetchError<number, string> : Errors : EdenFetchError<number, string>;
75
- }) & {
76
- status: number;
77
- response: Response;
78
- headers: Record<string, string>;
79
- }>) extends (params: infer Params) => infer Response ? {
80
- $params: undefined;
81
- $headers: undefined;
82
- $query: undefined;
83
- } extends Params ? (params?: Params, options?: {
84
- fetch?: RequestInit;
85
- transform?: EdenTreaty.Transform<Response>;
86
- query?: Params['query'];
87
- headers?: Params['headers'];
88
- }) => Response : (params: Params, options?: {
89
- fetch?: RequestInit;
90
- transform?: EdenTreaty.Transform<Response>;
91
- query?: Params['query'];
92
- headers?: Params['headers'];
93
- }) => Response : never : never;
94
- } : {};
95
92
  export interface OnMessage<Data = unknown> extends MessageEvent {
96
93
  data: Data;
97
94
  rawData: MessageEvent['data'];
@@ -101,7 +98,7 @@ declare namespace EdenTreaty {
101
98
  };
102
99
  export type ExecuteReturnType<T extends ExecuteOptions> = T['getRaw'] extends true ? Response : DetailedResponse;
103
100
  export type WSEvent<K extends keyof WebSocketEventMap, Data = unknown> = K extends 'message' ? OnMessage<Data> : WebSocketEventMap[K];
104
- export {};
101
+ export { };
105
102
  }
106
103
 
107
104
  declare class EdenWS<Schema extends InputSchema<any> = InputSchema> {
@@ -116,6 +113,6 @@ declare class EdenWS<Schema extends InputSchema<any> = InputSchema> {
116
113
  removeEventListener<K extends keyof WebSocketEventMap>(type: K, listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any, options?: boolean | EventListenerOptions): this;
117
114
  close(): this;
118
115
  }
119
- declare const edenTreaty: <App extends Elysia<any, any, any, any, any, any, false>>(domain: string, config?: EdenTreaty.Config) => EdenTreaty.Create<App>;
116
+ declare const edenTreaty: <App extends Elysia<any, any, any, any, any, any>>(domain: string, config?: EdenTreaty.Config) => EdenTreaty.Create<App>;
120
117
 
121
118
  export { EdenTreaty, EdenWS, edenTreaty };
package/dist/treaty.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Elysia, InputSchema } from 'elysia';
2
- import { U as UnionToIntersect, I as IsUnknown, M as MapError, a as IsNever, E as EdenFetchError } from './types-d1b334ad.js';
2
+ import { P as Prettify, I as IsUnknown, M as MapError, a as IsNever, E as EdenFetchError } from './types-BQi-Ff9p.js';
3
3
 
4
4
  /// <reference lib="dom" />
5
5
 
@@ -7,19 +7,65 @@ type Files = File | FileList;
7
7
  type Replace<RecordType, TargetType, GenericType> = {
8
8
  [K in keyof RecordType]: RecordType[K] extends TargetType ? GenericType : RecordType[K];
9
9
  };
10
- type Split<S extends string> = S extends `${infer Head}/${infer Tail}` ? Head extends '' ? Tail extends '' ? [] : Split<Tail> : [Head, ...Split<Tail>] : S extends `/` ? [] : S extends `${infer Head}/` ? [Head] : [S];
11
- type AnySchema = {
12
- body: unknown;
13
- headers: unknown;
14
- query: unknown;
15
- params: unknown;
16
- response: any;
17
- };
18
10
  type MaybeArray<T> = T | T[];
19
11
  declare namespace EdenTreaty {
20
12
  export type Create<App extends Elysia<any, any, any, any, any, any>> = App extends {
21
- schema: infer Schema extends Record<string, any>;
22
- } ? UnionToIntersect<Sign<Schema>> : 'Please install Elysia before using Eden';
13
+ _routes: infer Schema extends Record<string, unknown>;
14
+ } ? Prettify<Sign<Schema>> : 'Please install Elysia before using Eden';
15
+ export type Sign<Route extends Record<string, any>> = {
16
+ [K in keyof Route as K extends `:${string}` ? (string & {}) | number | K : K]: Route[K] extends {
17
+ [method in string]: {
18
+ body: infer Body;
19
+ headers: infer Headers;
20
+ query: infer Query;
21
+ params: unknown;
22
+ response: unknown;
23
+ };
24
+ } ? {
25
+ [Method in keyof Route[K]]: Method extends 'subscribe' ? undefined extends Route['query'] ? (params?: {
26
+ $query?: Record<string, string>;
27
+ }) => EdenWS<Route> : (params: {
28
+ $query: Route['query'];
29
+ }) => EdenWS<Route> : ((params: Prettify<{
30
+ $fetch?: RequestInit;
31
+ getRaw?: boolean;
32
+ } & (IsUnknown<Body> extends false ? Replace<Body, Blob | Blob[], Files> : {}) & (undefined extends Query ? {
33
+ $query?: Record<string, string>;
34
+ } : {
35
+ $query: Query;
36
+ }) & (undefined extends Headers ? {
37
+ $headers?: Record<string, unknown>;
38
+ } : {
39
+ $headers: Headers;
40
+ })>) => Promise<({
41
+ data: Response extends {
42
+ 200: infer ReturnedType;
43
+ } ? Awaited<ReturnedType> : unknown;
44
+ error: null;
45
+ } | {
46
+ data: null;
47
+ error: Response extends Record<number, unknown> ? MapError<Response> extends infer Errors ? IsNever<Errors> extends true ? EdenFetchError<number, string> : Errors : EdenFetchError<number, string> : Record<number, Error>;
48
+ }) & {
49
+ status: number;
50
+ response: Response;
51
+ headers: Record<string, string>;
52
+ }>) extends (params: infer Params) => infer Response ? {
53
+ $params: undefined;
54
+ $headers: undefined;
55
+ $query: undefined;
56
+ } extends Params ? (params?: Params, options?: {
57
+ fetch?: RequestInit;
58
+ transform?: EdenTreaty.Transform<Response>;
59
+ query?: Params['query'];
60
+ headers?: Params['headers'];
61
+ }) => Response : (params: Params, options?: {
62
+ fetch?: RequestInit;
63
+ transform?: EdenTreaty.Transform<Response>;
64
+ query?: Params['query'];
65
+ headers?: Params['headers'];
66
+ }) => Response : never;
67
+ } : Prettify<Sign<Route[K]>>;
68
+ };
23
69
  type UnwrapPromise<T> = T extends Promise<infer A> ? A : T;
24
70
  export type Transform<T = unknown> = MaybeArray<(response: unknown extends T ? {
25
71
  data: any;
@@ -43,55 +89,6 @@ declare namespace EdenTreaty {
43
89
  status: number;
44
90
  headers: Headers;
45
91
  };
46
- export type Sign<Schema extends Record<string, Record<string, unknown>>, Paths extends (string | number)[] = Split<keyof Schema & string>, Carry extends string = ''> = Paths extends [
47
- infer Prefix extends string | number,
48
- ...infer Rest extends (string | number)[]
49
- ] ? {
50
- [Key in Prefix as Prefix extends `:${string}` ? (string & {}) | number | Prefix : Prefix]: Sign<Schema, Rest, `${Carry}/${Key}`>;
51
- } : Schema[Carry extends '' ? '/' : Carry] extends infer Routes ? {
52
- [Method in keyof Routes]: Routes[Method] extends infer Route extends AnySchema ? Method extends 'subscribe' ? undefined extends Route['query'] ? (params?: {
53
- $query?: Record<string, string>;
54
- }) => EdenWS<Route> : (params: {
55
- $query: Route['query'];
56
- }) => EdenWS<Route> : ((params: {
57
- $fetch?: RequestInit;
58
- getRaw?: boolean;
59
- } & (IsUnknown<Route['body']> extends false ? Replace<Route['body'], Blob | Blob[], Files> : {}) & (undefined extends Route['query'] ? {
60
- $query?: Record<string, string>;
61
- } : {
62
- $query: Route['query'];
63
- }) & (undefined extends Route['headers'] ? {
64
- $headers?: Record<string, unknown>;
65
- } : {
66
- $headers: Route['headers'];
67
- })) => Promise<({
68
- data: Route['response'] extends {
69
- 200: infer ReturnedType;
70
- } ? Awaited<ReturnedType> : unknown;
71
- error: null;
72
- } | {
73
- data: null;
74
- error: MapError<Route['response']> extends infer Errors ? IsNever<Errors> extends true ? EdenFetchError<number, string> : Errors : EdenFetchError<number, string>;
75
- }) & {
76
- status: number;
77
- response: Response;
78
- headers: Record<string, string>;
79
- }>) extends (params: infer Params) => infer Response ? {
80
- $params: undefined;
81
- $headers: undefined;
82
- $query: undefined;
83
- } extends Params ? (params?: Params, options?: {
84
- fetch?: RequestInit;
85
- transform?: EdenTreaty.Transform<Response>;
86
- query?: Params['query'];
87
- headers?: Params['headers'];
88
- }) => Response : (params: Params, options?: {
89
- fetch?: RequestInit;
90
- transform?: EdenTreaty.Transform<Response>;
91
- query?: Params['query'];
92
- headers?: Params['headers'];
93
- }) => Response : never : never;
94
- } : {};
95
92
  export interface OnMessage<Data = unknown> extends MessageEvent {
96
93
  data: Data;
97
94
  rawData: MessageEvent['data'];
@@ -101,7 +98,7 @@ declare namespace EdenTreaty {
101
98
  };
102
99
  export type ExecuteReturnType<T extends ExecuteOptions> = T['getRaw'] extends true ? Response : DetailedResponse;
103
100
  export type WSEvent<K extends keyof WebSocketEventMap, Data = unknown> = K extends 'message' ? OnMessage<Data> : WebSocketEventMap[K];
104
- export {};
101
+ export { };
105
102
  }
106
103
 
107
104
  declare class EdenWS<Schema extends InputSchema<any> = InputSchema> {
@@ -116,6 +113,6 @@ declare class EdenWS<Schema extends InputSchema<any> = InputSchema> {
116
113
  removeEventListener<K extends keyof WebSocketEventMap>(type: K, listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any, options?: boolean | EventListenerOptions): this;
117
114
  close(): this;
118
115
  }
119
- declare const edenTreaty: <App extends Elysia<any, any, any, any, any, any, false>>(domain: string, config?: EdenTreaty.Config) => EdenTreaty.Create<App>;
116
+ declare const edenTreaty: <App extends Elysia<any, any, any, any, any, any>>(domain: string, config?: EdenTreaty.Config) => EdenTreaty.Create<App>;
120
117
 
121
118
  export { EdenTreaty, EdenWS, edenTreaty };
@@ -1 +1 @@
1
- "use strict";var Eden=(()=>{var $=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var z=Object.getOwnPropertyNames;var B=Object.prototype.hasOwnProperty;var H=(n,e)=>{for(var t in e)$(n,t,{get:e[t],enumerable:!0})},U=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of z(e))!B.call(n,a)&&a!==t&&$(n,a,{get:()=>e[a],enumerable:!(r=V(e,a))||r.enumerable});return n};var G=n=>U($({},"__esModule",{value:!0}),n);var X={};H(X,{EdenWS:()=>w,edenTreaty:()=>Q});var b=class extends Error{status;value;constructor(e,t){super(),this.status=e,this.value=t}};var K=(n,e,t)=>{if(n.endsWith("/")||(n+="/"),e==="index"&&(e=""),!t||!Object.keys(t).length)return`${n}${e}`;let r="";for(let[a,s]of Object.entries(t))r+=`${a}=${s}&`;return`${n}${e}?${r.slice(0,-1)}`},O=n=>!Number.isNaN(parseInt(n));var F=typeof FileList>"u",j=n=>F?n instanceof Blob:n instanceof FileList||n instanceof File,_=n=>{if(!n)return!1;for(let e in n){if(j(n[e]))return!0;if(Array.isArray(n[e])&&n[e].find(t=>j(t)))return!0}return!1},R=n=>F?n:new Promise(e=>{let t=new FileReader;t.onload=()=>{let r=new File([t.result],n.name,{lastModified:n.lastModified,type:n.type});e(r)},t.readAsArrayBuffer(n)}),w=class{ws;url;constructor(e){this.ws=new WebSocket(e),this.url=e}send(e){return Array.isArray(e)?(e.forEach(t=>this.send(t)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,t,r){return this.addEventListener(e,t,r)}off(e,t,r){return this.ws.removeEventListener(e,t,r),this}subscribe(e,t){return this.addEventListener("message",e,t)}addEventListener(e,t,r){return this.ws.addEventListener(e,a=>{if(e==="message"){let s=a.data.toString(),l=s.charCodeAt(0);if(l===47||l===123)try{s=JSON.parse(s)}catch{}else O(s)?s=+s:s==="true"?s=!0:s==="false"&&(s=!1);t({...a,data:s})}else t(a)},r),this}removeEventListener(e,t,r){return this.off(e,t,r),this}close(){return this.ws.close(),this}},I=(n,e="",t)=>new Proxy(()=>{},{get(r,a,s){return I(n,`${e}/${a.toString()}`,t)},apply(r,a,[s,l={}]=[{},{}]){let u=s!==void 0&&(typeof s!="object"||Array.isArray(s))?s:void 0,{$query:M,$fetch:L,$headers:N,$transform:g,getRaw:P,...C}=s??{};u??=C;let v=e.lastIndexOf("/"),E=e.slice(v+1).toUpperCase(),x=K(n,v===-1?"/":e.slice(0,v),Object.assign(l.query??{},M)),q=t.fetcher??fetch,p=t.transform?Array.isArray(t.transform)?t.transform:[t.transform]:void 0,k=g?Array.isArray(g)?g:[g]:void 0;return k&&(p?p=k.concat(p):p=k),E==="SUBSCRIBE"?new w(x.replace(/^([^]+):\/\//,x.startsWith("https://")?"wss://":"ws://")):(async D=>{let f,W={...t.$fetch?.headers,...L?.headers,...l.headers,...N};if(E!=="GET"&&E!=="HEAD"){f=Object.keys(u).length||Array.isArray(u)?u:void 0;let i=typeof f=="object"||Array.isArray(u);if(i&&_(f)){let h=new FormData;for(let[m,c]of Object.entries(f))if(F)h.append(m,c);else if(c instanceof File)h.append(m,await R(c));else if(c instanceof FileList)for(let d=0;d<c.length;d++)h.append(m,await R(c[d]));else if(Array.isArray(c))for(let d=0;d<c.length;d++){let T=c[d];h.append(m,T instanceof File?await R(T):T)}else h.append(m,c);f=h}else W["content-type"]=i?"application/json":"text/plain",f=i?JSON.stringify(f):u}let o=await q(x,{method:E,body:f,...t.$fetch,...l.fetch,...L,headers:W}),S;if(D.getRaw)return o;switch(o.headers.get("Content-Type")?.split(";")[0]){case"application/json":S=await o.json();break;default:S=await o.text().then(i=>O(i)?+i:i==="true"?!0:i==="false"?!1:i)}let J=o.status>=300||o.status<200?new b(o.status,S):null,A={data:S,error:J,response:o,status:o.status,headers:o.headers};if(p)for(let i of p){let y=i(A);y instanceof Promise&&(y=await y),y!=null&&(A=y)}return A})({getRaw:P})}}),Q=(n,e={fetcher:fetch})=>new Proxy({},{get(t,r){return I(n,r,e)}});return G(X);})();
1
+ "use strict";var Eden=(()=>{var $=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var U=Object.prototype.hasOwnProperty;var V=(t,e)=>{for(var n in e)$(t,n,{get:e[n],enumerable:!0})},G=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of H(e))!U.call(t,a)&&a!==n&&$(t,a,{get:()=>e[a],enumerable:!(r=B(e,a))||r.enumerable});return t};var _=t=>G($({},"__esModule",{value:!0}),t);var X={};V(X,{EdenWS:()=>w,edenTreaty:()=>Q});var S=class extends Error{constructor(n,r){super(r+"");this.status=n;this.value=r}};var K=(t,e,n)=>{if(t.endsWith("/")||(t+="/"),e==="index"&&(e=""),!n||!Object.keys(n).length)return`${t}${e}`;let r="";for(let[a,s]of Object.entries(n))r+=`${a}=${s}&`;return`${t}${e}?${r.slice(0,-1)}`},O=t=>t.trim().length!==0&&!Number.isNaN(Number(t));var F=typeof FileList>"u",N=t=>F?t instanceof Blob:t instanceof FileList||t instanceof File,z=t=>{if(!t)return!1;for(let e in t){if(N(t[e]))return!0;if(Array.isArray(t[e])&&t[e].find(n=>N(n)))return!0}return!1},R=t=>F?t:new Promise(e=>{let n=new FileReader;n.onload=()=>{let r=new File([n.result],t.name,{lastModified:t.lastModified,type:t.type});e(r)},n.readAsArrayBuffer(t)}),w=class{ws;url;constructor(e){this.ws=new WebSocket(e),this.url=e}send(e){return Array.isArray(e)?(e.forEach(n=>this.send(n)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,n,r){return this.addEventListener(e,n,r)}off(e,n,r){return this.ws.removeEventListener(e,n,r),this}subscribe(e,n){return this.addEventListener("message",e,n)}addEventListener(e,n,r){return this.ws.addEventListener(e,a=>{if(e==="message"){let s=a.data.toString(),l=s.charCodeAt(0);if(l===47||l===123)try{s=JSON.parse(s)}catch{}else O(s)?s=+s:s==="true"?s=!0:s==="false"&&(s=!1);n({...a,data:s})}else n(a)},r),this}removeEventListener(e,n,r){return this.off(e,n,r),this}close(){return this.ws.close(),this}},j=(t,e="",n)=>new Proxy(()=>{},{get(r,a,s){return j(t,`${e}/${a.toString()}`,n)},apply(r,a,[s,l={}]=[{},{}]){let y=s!==void 0&&(typeof s!="object"||Array.isArray(s))?s:void 0,{$query:M,$fetch:L,$headers:I,$transform:g,getRaw:P,...C}=s??{};y??=C;let v=e.lastIndexOf("/"),E=e.slice(v+1).toUpperCase(),x=K(t,v===-1?"/":e.slice(0,v),Object.assign(l.query??{},M)),q=n.fetcher??fetch,p=n.transform?Array.isArray(n.transform)?n.transform:[n.transform]:void 0,k=g?Array.isArray(g)?g:[g]:void 0;return k&&(p?p=k.concat(p):p=k),E==="SUBSCRIBE"?new w(x.replace(/^([^]+):\/\//,x.startsWith("https://")?"wss://":"ws://")):(async D=>{let f,W={...n.$fetch?.headers,...L?.headers,...l.headers,...I};if(E!=="GET"&&E!=="HEAD"){f=Object.keys(y).length||Array.isArray(y)?y:void 0;let i=typeof f=="object"||Array.isArray(y);if(i&&z(f)){let h=new FormData;for(let[m,c]of Object.entries(f))if(F)h.append(m,c);else if(c instanceof File)h.append(m,await R(c));else if(c instanceof FileList)for(let d=0;d<c.length;d++)h.append(m,await R(c[d]));else if(Array.isArray(c))for(let d=0;d<c.length;d++){let T=c[d];h.append(m,T instanceof File?await R(T):T)}else h.append(m,c);f=h}else W["content-type"]=i?"application/json":"text/plain",f=i?JSON.stringify(f):y}let o=await q(x,{method:E,body:f,...n.$fetch,...l.fetch,...L,headers:W}),b;if(D.getRaw)return o;switch(o.headers.get("Content-Type")?.split(";")[0]){case"application/json":b=await o.json();break;default:b=await o.text().then(i=>O(i)?+i:i==="true"?!0:i==="false"?!1:i)}let J=o.status>=300||o.status<200?new S(o.status,b):null,A={data:b,error:J,response:o,status:o.status,headers:o.headers};if(p)for(let i of p){let u=i(A);u instanceof Promise&&(u=await u),u!=null&&(A=u)}return A})({getRaw:P})}}),Q=(t,e={fetcher:fetch})=>new Proxy({},{get(n,r){return j(t,r,e)}});return _(X);})();
package/dist/treaty.js CHANGED
@@ -1 +1 @@
1
- "use strict";var $=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var z=Object.getOwnPropertyNames;var B=Object.prototype.hasOwnProperty;var H=(n,e)=>{for(var t in e)$(n,t,{get:e[t],enumerable:!0})},U=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of z(e))!B.call(n,a)&&a!==t&&$(n,a,{get:()=>e[a],enumerable:!(r=V(e,a))||r.enumerable});return n};var G=n=>U($({},"__esModule",{value:!0}),n);var X={};H(X,{EdenWS:()=>w,edenTreaty:()=>Q});module.exports=G(X);var b=class extends Error{status;value;constructor(e,t){super(),this.status=e,this.value=t}};var K=(n,e,t)=>{if(n.endsWith("/")||(n+="/"),e==="index"&&(e=""),!t||!Object.keys(t).length)return`${n}${e}`;let r="";for(let[a,s]of Object.entries(t))r+=`${a}=${s}&`;return`${n}${e}?${r.slice(0,-1)}`},O=n=>!Number.isNaN(parseInt(n));var F=typeof FileList>"u",j=n=>F?n instanceof Blob:n instanceof FileList||n instanceof File,_=n=>{if(!n)return!1;for(let e in n){if(j(n[e]))return!0;if(Array.isArray(n[e])&&n[e].find(t=>j(t)))return!0}return!1},R=n=>F?n:new Promise(e=>{let t=new FileReader;t.onload=()=>{let r=new File([t.result],n.name,{lastModified:n.lastModified,type:n.type});e(r)},t.readAsArrayBuffer(n)}),w=class{ws;url;constructor(e){this.ws=new WebSocket(e),this.url=e}send(e){return Array.isArray(e)?(e.forEach(t=>this.send(t)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,t,r){return this.addEventListener(e,t,r)}off(e,t,r){return this.ws.removeEventListener(e,t,r),this}subscribe(e,t){return this.addEventListener("message",e,t)}addEventListener(e,t,r){return this.ws.addEventListener(e,a=>{if(e==="message"){let s=a.data.toString(),l=s.charCodeAt(0);if(l===47||l===123)try{s=JSON.parse(s)}catch{}else O(s)?s=+s:s==="true"?s=!0:s==="false"&&(s=!1);t({...a,data:s})}else t(a)},r),this}removeEventListener(e,t,r){return this.off(e,t,r),this}close(){return this.ws.close(),this}},I=(n,e="",t)=>new Proxy(()=>{},{get(r,a,s){return I(n,`${e}/${a.toString()}`,t)},apply(r,a,[s,l={}]=[{},{}]){let u=s!==void 0&&(typeof s!="object"||Array.isArray(s))?s:void 0,{$query:M,$fetch:L,$headers:N,$transform:g,getRaw:P,...C}=s??{};u??=C;let v=e.lastIndexOf("/"),E=e.slice(v+1).toUpperCase(),x=K(n,v===-1?"/":e.slice(0,v),Object.assign(l.query??{},M)),q=t.fetcher??fetch,p=t.transform?Array.isArray(t.transform)?t.transform:[t.transform]:void 0,k=g?Array.isArray(g)?g:[g]:void 0;return k&&(p?p=k.concat(p):p=k),E==="SUBSCRIBE"?new w(x.replace(/^([^]+):\/\//,x.startsWith("https://")?"wss://":"ws://")):(async D=>{let f,W={...t.$fetch?.headers,...L?.headers,...l.headers,...N};if(E!=="GET"&&E!=="HEAD"){f=Object.keys(u).length||Array.isArray(u)?u:void 0;let i=typeof f=="object"||Array.isArray(u);if(i&&_(f)){let h=new FormData;for(let[m,c]of Object.entries(f))if(F)h.append(m,c);else if(c instanceof File)h.append(m,await R(c));else if(c instanceof FileList)for(let d=0;d<c.length;d++)h.append(m,await R(c[d]));else if(Array.isArray(c))for(let d=0;d<c.length;d++){let T=c[d];h.append(m,T instanceof File?await R(T):T)}else h.append(m,c);f=h}else W["content-type"]=i?"application/json":"text/plain",f=i?JSON.stringify(f):u}let o=await q(x,{method:E,body:f,...t.$fetch,...l.fetch,...L,headers:W}),S;if(D.getRaw)return o;switch(o.headers.get("Content-Type")?.split(";")[0]){case"application/json":S=await o.json();break;default:S=await o.text().then(i=>O(i)?+i:i==="true"?!0:i==="false"?!1:i)}let J=o.status>=300||o.status<200?new b(o.status,S):null,A={data:S,error:J,response:o,status:o.status,headers:o.headers};if(p)for(let i of p){let y=i(A);y instanceof Promise&&(y=await y),y!=null&&(A=y)}return A})({getRaw:P})}}),Q=(n,e={fetcher:fetch})=>new Proxy({},{get(t,r){return I(n,r,e)}});0&&(module.exports={EdenWS,edenTreaty});
1
+ "use strict";var $=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var U=Object.prototype.hasOwnProperty;var V=(t,e)=>{for(var n in e)$(t,n,{get:e[n],enumerable:!0})},G=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of H(e))!U.call(t,a)&&a!==n&&$(t,a,{get:()=>e[a],enumerable:!(r=B(e,a))||r.enumerable});return t};var _=t=>G($({},"__esModule",{value:!0}),t);var X={};V(X,{EdenWS:()=>w,edenTreaty:()=>Q});module.exports=_(X);var S=class extends Error{constructor(n,r){super(r+"");this.status=n;this.value=r}};var K=(t,e,n)=>{if(t.endsWith("/")||(t+="/"),e==="index"&&(e=""),!n||!Object.keys(n).length)return`${t}${e}`;let r="";for(let[a,s]of Object.entries(n))r+=`${a}=${s}&`;return`${t}${e}?${r.slice(0,-1)}`},O=t=>t.trim().length!==0&&!Number.isNaN(Number(t));var F=typeof FileList>"u",N=t=>F?t instanceof Blob:t instanceof FileList||t instanceof File,z=t=>{if(!t)return!1;for(let e in t){if(N(t[e]))return!0;if(Array.isArray(t[e])&&t[e].find(n=>N(n)))return!0}return!1},R=t=>F?t:new Promise(e=>{let n=new FileReader;n.onload=()=>{let r=new File([n.result],t.name,{lastModified:t.lastModified,type:t.type});e(r)},n.readAsArrayBuffer(t)}),w=class{ws;url;constructor(e){this.ws=new WebSocket(e),this.url=e}send(e){return Array.isArray(e)?(e.forEach(n=>this.send(n)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,n,r){return this.addEventListener(e,n,r)}off(e,n,r){return this.ws.removeEventListener(e,n,r),this}subscribe(e,n){return this.addEventListener("message",e,n)}addEventListener(e,n,r){return this.ws.addEventListener(e,a=>{if(e==="message"){let s=a.data.toString(),l=s.charCodeAt(0);if(l===47||l===123)try{s=JSON.parse(s)}catch{}else O(s)?s=+s:s==="true"?s=!0:s==="false"&&(s=!1);n({...a,data:s})}else n(a)},r),this}removeEventListener(e,n,r){return this.off(e,n,r),this}close(){return this.ws.close(),this}},j=(t,e="",n)=>new Proxy(()=>{},{get(r,a,s){return j(t,`${e}/${a.toString()}`,n)},apply(r,a,[s,l={}]=[{},{}]){let y=s!==void 0&&(typeof s!="object"||Array.isArray(s))?s:void 0,{$query:M,$fetch:L,$headers:I,$transform:g,getRaw:P,...C}=s??{};y??=C;let v=e.lastIndexOf("/"),E=e.slice(v+1).toUpperCase(),x=K(t,v===-1?"/":e.slice(0,v),Object.assign(l.query??{},M)),q=n.fetcher??fetch,p=n.transform?Array.isArray(n.transform)?n.transform:[n.transform]:void 0,k=g?Array.isArray(g)?g:[g]:void 0;return k&&(p?p=k.concat(p):p=k),E==="SUBSCRIBE"?new w(x.replace(/^([^]+):\/\//,x.startsWith("https://")?"wss://":"ws://")):(async D=>{let f,W={...n.$fetch?.headers,...L?.headers,...l.headers,...I};if(E!=="GET"&&E!=="HEAD"){f=Object.keys(y).length||Array.isArray(y)?y:void 0;let i=typeof f=="object"||Array.isArray(y);if(i&&z(f)){let h=new FormData;for(let[m,c]of Object.entries(f))if(F)h.append(m,c);else if(c instanceof File)h.append(m,await R(c));else if(c instanceof FileList)for(let d=0;d<c.length;d++)h.append(m,await R(c[d]));else if(Array.isArray(c))for(let d=0;d<c.length;d++){let T=c[d];h.append(m,T instanceof File?await R(T):T)}else h.append(m,c);f=h}else W["content-type"]=i?"application/json":"text/plain",f=i?JSON.stringify(f):y}let o=await q(x,{method:E,body:f,...n.$fetch,...l.fetch,...L,headers:W}),b;if(D.getRaw)return o;switch(o.headers.get("Content-Type")?.split(";")[0]){case"application/json":b=await o.json();break;default:b=await o.text().then(i=>O(i)?+i:i==="true"?!0:i==="false"?!1:i)}let J=o.status>=300||o.status<200?new S(o.status,b):null,A={data:b,error:J,response:o,status:o.status,headers:o.headers};if(p)for(let i of p){let u=i(A);u instanceof Promise&&(u=await u),u!=null&&(A=u)}return A})({getRaw:P})}}),Q=(t,e={fetcher:fetch})=>new Proxy({},{get(n,r){return j(t,r,e)}});0&&(module.exports={EdenWS,edenTreaty});
package/dist/treaty.mjs CHANGED
@@ -1 +1 @@
1
- import{a,b}from"./chunk-3IC43ZE4.mjs";import"./chunk-Y6SMVGJX.mjs";export{a as EdenWS,b as edenTreaty};
1
+ import{a,b}from"./chunk-VMCNRAXS.mjs";import"./chunk-R27QELXO.mjs";export{a as EdenWS,b as edenTreaty};
@@ -0,0 +1,4 @@
1
+ import type { Elysia } from 'elysia';
2
+ import type { EdenTreaty2 } from './types';
3
+ export declare const treaty: <const App extends Elysia<any, any, any, any, any, any>>(domain: string | App, config?: EdenTreaty2.Config) => EdenTreaty2.Create<App>;
4
+ export type { EdenTreaty2 };
@@ -0,0 +1,64 @@
1
+ /// <reference types="bun-types" />
2
+ /// <reference lib="dom" />
3
+ import type { Elysia } from 'elysia';
4
+ import type { Prettify } from '../types';
5
+ type Files = File | FileList;
6
+ type ReplaceBlobWithFiles<in out RecordType extends Record<string, unknown>> = {
7
+ [K in keyof RecordType]: RecordType[K] extends Blob | Blob[] ? Files : RecordType[K];
8
+ } & {};
9
+ type MaybeArray<T> = T | T[];
10
+ type MaybePromise<T> = T | Promise<T>;
11
+ export declare namespace EdenTreaty2 {
12
+ interface TreatyParam {
13
+ fetch?: RequestInit;
14
+ }
15
+ export type Create<App extends Elysia<any, any, any, any, any, any>> = App extends {
16
+ _routes: infer Schema extends Record<string, any>;
17
+ } ? Prettify<Sign<Schema>> : 'Please install Elysia before using Eden';
18
+ export type Sign<in out Route extends Record<string, any>> = {
19
+ [K in keyof Route as K extends '' ? 'index' : K extends `:${string}` ? never : K]: Route[K] extends {
20
+ body: infer Body;
21
+ headers: infer Headers;
22
+ query: infer Query;
23
+ response: infer Response extends Record<number, unknown>;
24
+ } ? (undefined extends Headers ? {
25
+ headers?: Record<string, unknown>;
26
+ } : {
27
+ headers: Headers;
28
+ }) & (undefined extends Query ? {
29
+ query?: Record<string, unknown>;
30
+ } : {
31
+ query: Query;
32
+ }) extends infer Param ? {} extends Param ? undefined extends Body ? (body?: Body, options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : (body: Body extends Record<string, unknown> ? ReplaceBlobWithFiles<Body> : Body, options?: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : (body: Body extends Record<string, unknown> ? ReplaceBlobWithFiles<Body> : Body, options: Prettify<Param & TreatyParam>) => Promise<TreatyResponse<Response>> : never : keyof Route[K] extends `:${infer Param}` ? (params: {
33
+ [param in Param]: string;
34
+ }) => Prettify<Prettify<Sign<Route[K]>> & Sign<Route[K][`:${Param}`]>> : Prettify<Sign<Route[K]>>;
35
+ };
36
+ export interface Config extends Omit<RequestInit, 'headers'> {
37
+ fetcher?: typeof fetch;
38
+ headers?: RequestInit['headers'] | MaybeArray<(path: string, options: RequestInit) => RequestInit['headers'] | void>;
39
+ onRequest?: MaybeArray<(path: string, options: FetchRequestInit) => MaybePromise<unknown>>;
40
+ onResponse?: MaybeArray<(response: Response) => MaybePromise<unknown>>;
41
+ }
42
+ type TreatyResponse<Response extends Record<number, unknown>> = {
43
+ data: Response[200];
44
+ error: null;
45
+ } | {
46
+ data: null;
47
+ error: 200 extends keyof Response ? {
48
+ status: unknown;
49
+ value: unknown;
50
+ } : {
51
+ [Status in keyof Response as Status extends 200 ? never : Status]: {
52
+ status: Status;
53
+ value: Response[Status];
54
+ };
55
+ }[Exclude<keyof Response, 200>];
56
+ };
57
+ export interface OnMessage<Data = unknown> extends MessageEvent {
58
+ data: Data;
59
+ rawData: MessageEvent['data'];
60
+ }
61
+ export type WSEvent<K extends keyof WebSocketEventMap, Data = unknown> = K extends 'message' ? OnMessage<Data> : WebSocketEventMap[K];
62
+ export {};
63
+ }
64
+ export {};
@@ -0,0 +1,14 @@
1
+ import type { InputSchema } from 'elysia';
2
+ import type { EdenTreaty2 } from './types';
3
+ export declare class EdenWS<Schema extends InputSchema<any> = {}> {
4
+ url: string;
5
+ ws: WebSocket;
6
+ constructor(url: string);
7
+ send(data: Schema['body'] | Schema['body'][]): this;
8
+ on<K extends keyof WebSocketEventMap>(type: K, listener: (event: EdenTreaty2.WSEvent<K, Schema['response']>) => void, options?: boolean | AddEventListenerOptions): this;
9
+ off<K extends keyof WebSocketEventMap>(type: K, listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any, options?: boolean | EventListenerOptions): this;
10
+ subscribe(onMessage: (event: EdenTreaty2.WSEvent<'message', Schema['response']>) => void, options?: boolean | AddEventListenerOptions): this;
11
+ addEventListener<K extends keyof WebSocketEventMap>(type: K, listener: (event: EdenTreaty2.WSEvent<K, Schema['response']>) => void, options?: boolean | AddEventListenerOptions): this;
12
+ removeEventListener<K extends keyof WebSocketEventMap>(type: K, listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any, options?: boolean | EventListenerOptions): this;
13
+ close(): this;
14
+ }
@@ -18,5 +18,26 @@ type UnionToIntersect<U> = (U extends any ? (arg: U) => any : never) extends (ar
18
18
  type IsAny<T> = 0 extends 1 & T ? true : false;
19
19
  type IsNever<T> = [T] extends [never] ? true : false;
20
20
  type IsUnknown<T> = IsAny<T> extends true ? false : unknown extends T ? true : false;
21
+ type AnyTypedRoute = {
22
+ body?: unknown;
23
+ headers?: unknown;
24
+ query?: unknown;
25
+ params?: unknown;
26
+ response: Record<number, unknown>;
27
+ };
28
+ type Prettify<T> = {
29
+ [K in keyof T]: T[K];
30
+ } & {};
31
+ type TreatyToPath<T, Path extends string = ''> = UnionToIntersect<T extends Record<string, unknown> ? {
32
+ [K in keyof T]: T[K] extends AnyTypedRoute ? {
33
+ [path in Path]: {
34
+ [method in K]: T[K];
35
+ };
36
+ } : unknown extends T[K] ? {
37
+ [path in Path]: {
38
+ [method in K]: T[K];
39
+ };
40
+ } : TreatyToPath<T[K], `${Path}/${K & string}`>;
41
+ }[keyof T] : {}>;
21
42
 
22
- export { EdenFetchError as E, IsUnknown as I, MapError as M, UnionToIntersect as U, IsNever as a };
43
+ export { EdenFetchError as E, type IsUnknown as I, type MapError as M, type Prettify as P, type TreatyToPath as T, type IsNever as a };