@elysiajs/eden 0.2.0-rc.2 → 0.2.0-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/types.d.ts CHANGED
@@ -16,11 +16,14 @@ declare type TypedRouteToParams<Route extends TypedRoute> = (Route['body'] exten
16
16
  } : {}) & (Route['query'] extends NonNullable<Route['query']> ? unknown extends Route['query'] ? {} : {
17
17
  $query: Route['query'];
18
18
  } : {});
19
- export declare type CreateEden<Server extends Record<string, Record<string, TypedRoute>>, Path extends string = keyof Server, Full extends string = ''> = Path extends `/${infer Start}` ? CreateEden<Server, Start, Path> : Path extends `${infer A}/${infer B}` ? IsPathParameter<A> extends never ? {
19
+ export declare type CreateEden<Server extends Record<string, Record<string, TypedRoute>>, Path extends string = keyof Server extends string ? keyof Server : never, Full extends string = ''> = Path extends `/${infer Start}` ? CreateEden<Server, Start, Path> : Path extends `${infer A}/${infer B}` ? IsPathParameter<A> extends never ? {
20
20
  [key in A]: CreateEden<Server, B, Full>;
21
21
  } : {
22
22
  [x: string]: CreateEden<Server, B, Full>;
23
- } : {
23
+ } & {
24
+ $params: `Expected path parameters ':${A}', replace this with any string`;
25
+ } : // Iterate until last string then catch method
26
+ {
24
27
  [key in Path extends '' ? 'index' : Path extends `:${infer params}` ? string : Path | CamelCase<Path>]: Full extends keyof Server ? {
25
28
  [key in keyof Server[Full] extends string ? Lowercase<keyof Server[Full]> : keyof Server[Full]]: keyof TypedRouteToParams<Server[Full][key extends string ? Uppercase<key> : key]> extends never ? key extends 'subscribe' ? unknown extends NonNullable<Server[Full][key]['query']> ? (params?: {
26
29
  $query?: EdenCall['$query'];
@@ -31,7 +34,7 @@ export declare type CreateEden<Server extends Record<string, Record<string, Type
31
34
  }) => EdenWS<Server[Full][key]> : (params?: {
32
35
  $query?: EdenCall['$query'];
33
36
  $fetch?: EdenCall['$fetch'];
34
- }) => Promise<Server[Full][key]['response']> : key extends 'subscribe' ? unknown extends NonNullable<Server[Full][key]['query']> ? (params?: {
37
+ }) => Promise<key extends string ? Server[Full][Uppercase<key>]['response'] : Server[Full][key]['response']> : key extends 'subscribe' ? unknown extends NonNullable<Server[Full][key]['query']> ? (params?: {
35
38
  $query?: EdenCall['$query'];
36
39
  }) => EdenWS<Server[Full][key]> : Server[Full][key]['query'] extends NonNullable<Server[Full][key]['query']> ? (params: {
37
40
  $query: Server[Full][key]['query'];
@@ -42,7 +45,9 @@ export declare type CreateEden<Server extends Record<string, Record<string, Type
42
45
  $fetch?: EdenCall['$fetch'];
43
46
  }) => Promise<Server[Full][key extends string ? Uppercase<key> : key]['response']>;
44
47
  } : never;
45
- };
48
+ } & (Path extends `:${infer params}` ? {
49
+ $params: `Expected path parameters ':${params}', replace this with any string`;
50
+ } : {});
46
51
  declare type CamelCase<S extends string> = S extends `${infer P1}-${infer P2}${infer P3}` ? `${Lowercase<P1>}${Uppercase<P2>}${CamelCase<P3>}` : Lowercase<S>;
47
52
  export interface EdenWSOnMessage<Data = unknown> extends MessageEvent {
48
53
  data: Data;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elysiajs/eden",
3
- "version": "0.2.0-rc.2",
3
+ "version": "0.2.0-rc.3",
4
4
  "description": "Fully type-safe Elysia client",
5
5
  "author": {
6
6
  "name": "saltyAom",
package/src/types.ts CHANGED
@@ -40,26 +40,32 @@ type TypedRouteToParams<Route extends TypedRoute> =
40
40
 
41
41
  export type CreateEden<
42
42
  Server extends Record<string, Record<string, TypedRoute>>,
43
- // @ts-ignore
44
- Path extends string = keyof Server,
43
+ // pathnames are always string
44
+ Path extends string = keyof Server extends string ? keyof Server : never,
45
45
  Full extends string = ''
46
46
  > = Path extends `/${infer Start}`
47
47
  ? CreateEden<Server, Start, Path>
48
48
  : Path extends `${infer A}/${infer B}`
49
- ? IsPathParameter<A> extends never
49
+ ? // If path parameters, accept any string
50
+ IsPathParameter<A> extends never
50
51
  ? {
51
52
  [key in A]: CreateEden<Server, B, Full>
52
53
  }
53
54
  : {
54
55
  [x: string]: CreateEden<Server, B, Full>
56
+ } & {
57
+ $params: `Expected path parameters ':${A}', replace this with any string`
55
58
  }
56
- : {
59
+ : // Iterate until last string then catch method
60
+ {
57
61
  [key in Path extends ''
58
- ? 'index'
62
+ ? // If end with empty, then return as index
63
+ 'index'
59
64
  : Path extends `:${infer params}`
60
65
  ? string
61
66
  : Path | CamelCase<Path>]: Full extends keyof Server
62
67
  ? {
68
+ // Check if is method
63
69
  [key in keyof Server[Full] extends string
64
70
  ? Lowercase<keyof Server[Full]>
65
71
  : keyof Server[Full]]: keyof TypedRouteToParams<
@@ -84,7 +90,11 @@ export type CreateEden<
84
90
  : (params?: {
85
91
  $query?: EdenCall['$query']
86
92
  $fetch?: EdenCall['$fetch']
87
- }) => Promise<Server[Full][key]['response']>
93
+ }) => Promise<
94
+ key extends string
95
+ ? Server[Full][Uppercase<key>]['response']
96
+ : Server[Full][key]['response']
97
+ >
88
98
  : key extends 'subscribe'
89
99
  ? unknown extends NonNullable<
90
100
  Server[Full][key]['query']
@@ -117,7 +127,11 @@ export type CreateEden<
117
127
  >
118
128
  }
119
129
  : never
120
- }
130
+ } & (Path extends `:${infer params}`
131
+ ? {
132
+ $params: `Expected path parameters ':${params}', replace this with any string`
133
+ }
134
+ : {})
121
135
 
122
136
  // https://stackoverflow.com/questions/59623524/typescript-how-to-map-type-keys-to-camelcase
123
137
  type CamelCase<S extends string> =