spiceflow 0.0.7 → 1.0.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.
Files changed (151) hide show
  1. package/README.md +1 -171
  2. package/dist/client/errors.d.ts +7 -0
  3. package/dist/client/errors.d.ts.map +1 -0
  4. package/dist/client/errors.js +18 -0
  5. package/dist/client/errors.js.map +1 -0
  6. package/dist/client/index.d.ts +14 -0
  7. package/dist/client/index.d.ts.map +1 -0
  8. package/dist/client/index.js +376 -0
  9. package/dist/client/index.js.map +1 -0
  10. package/dist/client/types.d.ts +87 -0
  11. package/dist/client/types.d.ts.map +1 -0
  12. package/dist/client/types.js +2 -0
  13. package/dist/client/types.js.map +1 -0
  14. package/dist/client/utils.d.ts +2 -0
  15. package/dist/client/utils.d.ts.map +1 -0
  16. package/dist/client/utils.js +9 -0
  17. package/dist/client/utils.js.map +1 -0
  18. package/dist/client/ws.d.ts +15 -0
  19. package/dist/client/ws.d.ts.map +1 -0
  20. package/dist/client/ws.js +51 -0
  21. package/dist/client/ws.js.map +1 -0
  22. package/dist/client.test.d.ts +2 -0
  23. package/dist/client.test.d.ts.map +1 -0
  24. package/dist/client.test.js +237 -0
  25. package/dist/client.test.js.map +1 -0
  26. package/dist/elysia-fork/context.d.ts +87 -0
  27. package/dist/elysia-fork/context.d.ts.map +1 -0
  28. package/dist/elysia-fork/context.js +2 -0
  29. package/dist/elysia-fork/context.js.map +1 -0
  30. package/dist/elysia-fork/error.d.ts +246 -0
  31. package/dist/elysia-fork/error.d.ts.map +1 -0
  32. package/dist/elysia-fork/error.js +195 -0
  33. package/dist/elysia-fork/error.js.map +1 -0
  34. package/dist/elysia-fork/types.d.ts +652 -0
  35. package/dist/elysia-fork/types.d.ts.map +1 -0
  36. package/dist/elysia-fork/types.js +3 -0
  37. package/dist/elysia-fork/types.js.map +1 -0
  38. package/dist/elysia-fork/utils.d.ts +134 -0
  39. package/dist/elysia-fork/utils.d.ts.map +1 -0
  40. package/dist/elysia-fork/utils.js +70 -0
  41. package/dist/elysia-fork/utils.js.map +1 -0
  42. package/dist/spiceflow.d.ts +253 -0
  43. package/dist/spiceflow.d.ts.map +1 -0
  44. package/dist/spiceflow.js +500 -0
  45. package/dist/spiceflow.js.map +1 -0
  46. package/dist/spiceflow.test.d.ts +2 -0
  47. package/dist/spiceflow.test.d.ts.map +1 -0
  48. package/dist/spiceflow.test.js +225 -0
  49. package/dist/spiceflow.test.js.map +1 -0
  50. package/dist/stream.test.d.ts +2 -0
  51. package/dist/stream.test.d.ts.map +1 -0
  52. package/dist/stream.test.js +286 -0
  53. package/dist/stream.test.js.map +1 -0
  54. package/dist/types.d.ts +1 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +2 -0
  57. package/dist/types.js.map +1 -0
  58. package/dist/utils.d.ts +4 -20
  59. package/dist/utils.d.ts.map +1 -1
  60. package/dist/utils.js +17 -46
  61. package/dist/utils.js.map +1 -1
  62. package/package.json +12 -36
  63. package/src/client/errors.ts +21 -0
  64. package/src/client/index.ts +539 -0
  65. package/src/client/types.ts +233 -0
  66. package/src/client/utils.ts +7 -0
  67. package/src/client/ws.ts +99 -0
  68. package/src/client.test.ts +235 -0
  69. package/src/elysia-fork/context.ts +196 -0
  70. package/src/elysia-fork/error.ts +293 -0
  71. package/src/elysia-fork/types.ts +1454 -0
  72. package/src/elysia-fork/utils.ts +85 -0
  73. package/src/spiceflow.test.ts +290 -0
  74. package/src/spiceflow.ts +1266 -0
  75. package/src/stream.test.ts +342 -0
  76. package/src/types.ts +0 -0
  77. package/src/utils.ts +21 -70
  78. package/context.d.ts +0 -2
  79. package/context.js +0 -1
  80. package/dist/babel.test.d.ts +0 -2
  81. package/dist/babel.test.d.ts.map +0 -1
  82. package/dist/babel.test.js +0 -27
  83. package/dist/babel.test.js.map +0 -1
  84. package/dist/babelDebugOutputs.d.ts +0 -9
  85. package/dist/babelDebugOutputs.d.ts.map +0 -1
  86. package/dist/babelDebugOutputs.js +0 -34
  87. package/dist/babelDebugOutputs.js.map +0 -1
  88. package/dist/babelTransformRpc.d.ts +0 -19
  89. package/dist/babelTransformRpc.d.ts.map +0 -1
  90. package/dist/babelTransformRpc.js +0 -285
  91. package/dist/babelTransformRpc.js.map +0 -1
  92. package/dist/browser.d.ts +0 -8
  93. package/dist/browser.d.ts.map +0 -1
  94. package/dist/browser.js +0 -126
  95. package/dist/browser.js.map +0 -1
  96. package/dist/build.d.ts +0 -13
  97. package/dist/build.d.ts.map +0 -1
  98. package/dist/build.js +0 -230
  99. package/dist/build.js.map +0 -1
  100. package/dist/cli.d.ts +0 -3
  101. package/dist/cli.d.ts.map +0 -1
  102. package/dist/cli.js +0 -111
  103. package/dist/cli.js.map +0 -1
  104. package/dist/context-internal.d.ts +0 -20
  105. package/dist/context-internal.d.ts.map +0 -1
  106. package/dist/context-internal.js +0 -16
  107. package/dist/context-internal.js.map +0 -1
  108. package/dist/context.d.ts +0 -2
  109. package/dist/context.d.ts.map +0 -1
  110. package/dist/context.js +0 -2
  111. package/dist/context.js.map +0 -1
  112. package/dist/expose.d.ts +0 -6
  113. package/dist/expose.d.ts.map +0 -1
  114. package/dist/expose.js +0 -32
  115. package/dist/expose.js.map +0 -1
  116. package/dist/headers.d.ts +0 -2
  117. package/dist/headers.d.ts.map +0 -1
  118. package/dist/headers.js +0 -18
  119. package/dist/headers.js.map +0 -1
  120. package/dist/index.d.ts +0 -8
  121. package/dist/index.d.ts.map +0 -1
  122. package/dist/index.js +0 -23
  123. package/dist/index.js.map +0 -1
  124. package/dist/jsonRpc.d.ts +0 -32
  125. package/dist/jsonRpc.d.ts.map +0 -1
  126. package/dist/jsonRpc.js +0 -3
  127. package/dist/jsonRpc.js.map +0 -1
  128. package/dist/server.d.ts +0 -32
  129. package/dist/server.d.ts.map +0 -1
  130. package/dist/server.js +0 -292
  131. package/dist/server.js.map +0 -1
  132. package/headers.d.ts +0 -2
  133. package/headers.js +0 -1
  134. package/sdk-template/package.json +0 -22
  135. package/sdk-template/src/index.ts +0 -2
  136. package/sdk-template/src/v1/example.ts +0 -5
  137. package/sdk-template/src/v1/generator.ts +0 -12
  138. package/sdk-template/tsconfig.json +0 -16
  139. package/src/babel.test.ts +0 -35
  140. package/src/babelDebugOutputs.ts +0 -56
  141. package/src/babelTransformRpc.ts +0 -394
  142. package/src/browser.ts +0 -141
  143. package/src/build.ts +0 -298
  144. package/src/cli.ts +0 -132
  145. package/src/context-internal.ts +0 -36
  146. package/src/context.ts +0 -5
  147. package/src/expose.ts +0 -34
  148. package/src/headers.ts +0 -19
  149. package/src/index.ts +0 -34
  150. package/src/jsonRpc.ts +0 -43
  151. package/src/server.ts +0 -384
@@ -0,0 +1,1454 @@
1
+ // https://github.com/remorses/elysia/blob/main/src/types.ts#L6
2
+
3
+ /* eslint-disable @typescript-eslint/no-unused-vars */
4
+
5
+ import type { BunFile, Serve, Server, WebSocketHandler } from 'bun'
6
+
7
+
8
+ import type {
9
+ TSchema,
10
+ TObject,
11
+ Static,
12
+ TAnySchema,
13
+ TNull,
14
+ TUndefined,
15
+ StaticDecode,
16
+ OptionalKind
17
+ } from '@sinclair/typebox'
18
+ import type { TypeCheck, ValueError } from '@sinclair/typebox/compiler'
19
+
20
+ import type { OpenAPIV3 } from 'openapi-types'
21
+
22
+ import type { Context, ErrorContext, PreContext } from './context'
23
+ import {
24
+ ELYSIA_RESPONSE,
25
+ InternalServerError,
26
+ InvalidCookieSignature,
27
+ NotFoundError,
28
+ ParseError,
29
+ ValidationError
30
+ } from './error'
31
+ import { Elysia } from '../spiceflow'
32
+
33
+
34
+ export type ElysiaConfig<
35
+ Prefix extends string | undefined,
36
+ Scoped extends boolean | undefined
37
+ > = {
38
+ /**
39
+ * Path prefix of the instance
40
+ *
41
+ * @default '''
42
+ */
43
+ prefix?: Prefix
44
+ /**
45
+ * If set to true, other Elysia handler will not inherits global life-cycle, store, decorators from the current instance
46
+ *
47
+ * @default false
48
+ */
49
+ scoped?: Scoped
50
+ /**
51
+ * Name of the instance for debugging, and plugin deduplication purpose
52
+ */
53
+ name?: string
54
+ /**
55
+ * Seed for generating checksum for plugin deduplication
56
+ *
57
+ * @see https://elysiajs.com/essential/plugin.html#plugin-deduplication
58
+ */
59
+ seed?: unknown
60
+
61
+ /**
62
+ * OpenAPI documentation (use in Swagger)
63
+ *
64
+ * @see https://swagger.io/specification/
65
+ */
66
+ detail?: DocumentDecoration
67
+ /**
68
+ * OpenAPI tags
69
+ *
70
+ * current instance' routes with tags
71
+ *
72
+ * @see https://swagger.io/specification/#tag-object
73
+ */
74
+ tags?: DocumentDecoration['tags']
75
+ /**
76
+ * Warm up Elysia before starting the server
77
+ *
78
+ * This will perform Ahead of Time compilation and generate code for route handlers
79
+ *
80
+ * If set to false, Elysia will perform Just in Time compilation
81
+ *
82
+ * Only required for root instance (instance which use listen) to effect
83
+ *
84
+ * ! If performing a benchmark, it's recommended to set this to `true`
85
+ *
86
+ * @default false
87
+ */
88
+ precompile?:
89
+ | boolean
90
+ | {
91
+ /**
92
+ * Perform dynamic code generation for route handlers before starting the server
93
+ *
94
+ * @default false
95
+ */
96
+ compose?: boolean
97
+ /**
98
+ * Perform Ahead of Time compilation for schema before starting the server
99
+ *
100
+ * @default false
101
+ */
102
+ schema?: boolean
103
+ }
104
+
105
+ // /**
106
+ // * Override websocket configuration
107
+ // *
108
+ // * @see https://bun.sh/docs/api/websockets
109
+ // */
110
+ // websocket?: Omit<
111
+ // WebSocketHandler<any>,
112
+ // 'open' | 'close' | 'message' | 'drain'
113
+ // >
114
+
115
+ /**
116
+ * Capture more detail information for each dependencies
117
+ */
118
+ analytic?: boolean
119
+ /**
120
+ * Enable experimental features
121
+ */
122
+ experimental?: {}
123
+ /**
124
+ * If enabled, the handlers will run a [clean](https://github.com/sinclairzx81/typebox?tab=readme-ov-file#clean) on incoming and outgoing bodies instead of failing directly.
125
+ * This allows for sending unknown or disallowed properties in the bodies. These will simply be filtered out instead of failing the request.
126
+ * This has no effect when the schemas allow additional properties.
127
+ * Since this uses dynamic schema it may have an impact on performance.
128
+ *
129
+ * @default false
130
+ */
131
+ normalize?: boolean
132
+ }
133
+
134
+
135
+ export type MaybeArray<T> = T | T[]
136
+ export type MaybePromise<T> = T | Promise<T>
137
+
138
+ export type ObjectValues<T extends object> = T[keyof T]
139
+
140
+ type IsPathParameter<Part extends string> = Part extends `:${infer Parameter}`
141
+ ? Parameter
142
+ : Part extends `*`
143
+ ? '*'
144
+ : never
145
+
146
+ export type GetPathParameter<Path extends string> =
147
+ Path extends `${infer A}/${infer B}`
148
+ ? IsPathParameter<A> | GetPathParameter<B>
149
+ : IsPathParameter<Path>
150
+
151
+ export type ResolvePath<Path extends string> = Prettify<
152
+ {
153
+ [Param in GetPathParameter<Path> as Param extends `${string}?`
154
+ ? never
155
+ : Param]: string
156
+ } & {
157
+ [Param in GetPathParameter<Path> as Param extends `${infer OptionalParam}?`
158
+ ? OptionalParam
159
+ : never]?: string
160
+ }
161
+ >
162
+
163
+ // https://twitter.com/mattpocockuk/status/1622730173446557697?s=20
164
+ export type Prettify<T> = {
165
+ [K in keyof T]: T[K]
166
+ } & {}
167
+
168
+ export type Prettify2<T> = {
169
+ [K in keyof T]: Prettify<T[K]>
170
+ } & {}
171
+
172
+ export type Partial2<T> = {
173
+ [K in keyof T]?: Partial<T[K]>
174
+ }
175
+
176
+ export type NeverKey<T> = {
177
+ [K in keyof T]?: T[K]
178
+ } & {}
179
+
180
+ type IsBothObject<A, B> = A extends Record<string | number | symbol, unknown>
181
+ ? B extends Record<string | number | symbol, unknown>
182
+ ? IsClass<A> extends false
183
+ ? IsClass<B> extends false
184
+ ? true
185
+ : false
186
+ : false
187
+ : false
188
+ : false
189
+
190
+ type IsClass<V> = V extends abstract new (...args: any) => any ? true : false
191
+ type And<A, B> = A extends true ? (B extends true ? true : false) : false
192
+
193
+ export type Reconcile<
194
+ A extends Object,
195
+ B extends Object,
196
+ Override extends boolean = false,
197
+ // Detect Stack limit, eg. circular dependency
198
+ Stack extends number[] = []
199
+ > = Stack['length'] extends 16
200
+ ? A
201
+ : Override extends true
202
+ ? {
203
+ [key in keyof A as key extends keyof B ? never : key]: A[key]
204
+ } extends infer Collision
205
+ ? {} extends Collision
206
+ ? {
207
+ [key in keyof B]: IsBothObject<
208
+ // @ts-ignore trust me bro
209
+ A[key],
210
+ B[key]
211
+ > extends true
212
+ ? Reconcile<
213
+ // @ts-ignore trust me bro
214
+ A[key],
215
+ B[key],
216
+ Override,
217
+ [0, ...Stack]
218
+ >
219
+ : B[key]
220
+ }
221
+ : Prettify<
222
+ Collision & {
223
+ [key in keyof B]: B[key]
224
+ }
225
+ >
226
+ : never
227
+ : {
228
+ [key in keyof B as key extends keyof A ? never : key]: B[key]
229
+ } extends infer Collision
230
+ ? {} extends Collision
231
+ ? {
232
+ [key in keyof A]: IsBothObject<
233
+ A[key],
234
+ // @ts-ignore trust me bro
235
+ B[key]
236
+ > extends true
237
+ ? Reconcile<
238
+ // @ts-ignore trust me bro
239
+ A[key],
240
+ // @ts-ignore trust me bro
241
+ B[key],
242
+ Override,
243
+ [0, ...Stack]
244
+ >
245
+ : A[key]
246
+ }
247
+ : Prettify<
248
+ {
249
+ [key in keyof A]: A[key]
250
+ } & Collision
251
+ >
252
+ : never
253
+
254
+ export interface SingletonBase {
255
+ decorator: Record<string, unknown>
256
+ store: Record<string, unknown>
257
+ derive: Record<string, unknown>
258
+ resolve: Record<string, unknown>
259
+ }
260
+
261
+ export interface EphemeralType {
262
+ derive: SingletonBase['derive']
263
+ resolve: SingletonBase['resolve']
264
+ schema: MetadataBase['schema']
265
+ }
266
+
267
+ export interface DefinitionBase {
268
+ type: Record<string, unknown>
269
+ error: Record<string, Error>
270
+ }
271
+
272
+ export type RouteBase = Record<string, unknown>
273
+
274
+ export interface MetadataBase {
275
+ schema: RouteSchema
276
+ macro: BaseMacro
277
+ macroFn: BaseMacroFn
278
+ }
279
+
280
+ export interface RouteSchema {
281
+ body?: unknown
282
+ headers?: unknown
283
+ query?: unknown
284
+ params?: unknown
285
+ cookie?: unknown
286
+ response?: unknown
287
+ }
288
+
289
+ type OptionalField = {
290
+ [OptionalKind]: 'Optional'
291
+ }
292
+
293
+ export type UnwrapSchema<
294
+ Schema extends TSchema | string | undefined,
295
+ Definitions extends Record<string, unknown> = {}
296
+ > = undefined extends Schema
297
+ ? unknown
298
+ : Schema extends TSchema
299
+ ? Schema extends OptionalField
300
+ ? Prettify<Partial<Static<Schema>>>
301
+ : StaticDecode<Schema>
302
+ : Schema extends string
303
+ ? Definitions extends Record<Schema, infer NamedSchema>
304
+ ? NamedSchema
305
+ : Definitions
306
+ : unknown
307
+
308
+ export type UnwrapBodySchema<
309
+ Schema extends TSchema | string | undefined,
310
+ Definitions extends Record<string, unknown> = {}
311
+ > = undefined extends Schema
312
+ ? unknown
313
+ : Schema extends TSchema
314
+ ? Schema extends OptionalField
315
+ ? Prettify<Partial<Static<Schema>>> | null
316
+ : StaticDecode<Schema>
317
+ : Schema extends string
318
+ ? Definitions extends Record<Schema, infer NamedSchema>
319
+ ? NamedSchema
320
+ : Definitions
321
+ : unknown
322
+
323
+ export interface UnwrapRoute<
324
+ in out Schema extends InputSchema<any>,
325
+ in out Definitions extends DefinitionBase['type'] = {}
326
+ > {
327
+ body: UnwrapBodySchema<Schema['body'], Definitions>
328
+ // headers: UnwrapSchema<Schema['headers'], Definitions>
329
+ // query: UnwrapSchema<Schema['query'], Definitions>
330
+ // params: UnwrapSchema<Schema['params'], Definitions>
331
+ // cookie: UnwrapSchema<Schema['cookie'], Definitions>
332
+ response: Schema['response'] extends TSchema | string
333
+ ? {
334
+ 200: CoExist<
335
+ UnwrapSchema<Schema['response'], Definitions>,
336
+ File,
337
+ BunFile
338
+ >
339
+ }
340
+ : Schema['response'] extends Record<number, TAnySchema | string>
341
+ ? {
342
+ [k in keyof Schema['response']]: CoExist<
343
+ UnwrapSchema<Schema['response'][k], Definitions>,
344
+ File,
345
+ BunFile
346
+ >
347
+ }
348
+ : unknown | void
349
+ }
350
+
351
+ // export interface UnwrapGroupGuardRoute<
352
+ // in out Schema extends InputSchema<any>,
353
+ // in out Definitions extends Record<string, unknown> = {},
354
+ // Path extends string = ''
355
+ // > {
356
+ // body: UnwrapBodySchema<Schema['body'], Definitions>
357
+ // headers: UnwrapSchema<
358
+ // Schema['headers'],
359
+ // Definitions
360
+ // > extends infer A extends Record<string, unknown>
361
+ // ? A
362
+ // : undefined
363
+ // query: UnwrapSchema<
364
+ // Schema['query'],
365
+ // Definitions
366
+ // > extends infer A extends Record<string, unknown>
367
+ // ? A
368
+ // : undefined
369
+ // params: UnwrapSchema<
370
+ // Schema['params'],
371
+ // Definitions
372
+ // > extends infer A extends Record<string, unknown>
373
+ // ? A
374
+ // : Path extends `${string}/${':' | '*'}${string}`
375
+ // ? Record<GetPathParameter<Path>, string>
376
+ // : never
377
+ // cookie: UnwrapSchema<
378
+ // Schema['cookie'],
379
+ // Definitions
380
+ // > extends infer A extends Record<string, unknown>
381
+ // ? A
382
+ // : undefined
383
+ // response: Schema['response'] extends TSchema | string
384
+ // ? UnwrapSchema<Schema['response'], Definitions>
385
+ // : Schema['response'] extends {
386
+ // [k in string]: TSchema | string
387
+ // }
388
+ // ? UnwrapSchema<
389
+ // Schema['response'][keyof Schema['response']],
390
+ // Definitions
391
+ // >
392
+ // : unknown | void
393
+ // }
394
+
395
+ export type HookContainer<T extends Function = Function> = {
396
+ checksum?: number
397
+ scope?: LifeCycleType
398
+ subType?: 'derive' | 'resolve' | 'mapDerive' | 'mapResolve' | (string & {})
399
+ fn: T
400
+ }
401
+
402
+ export interface LifeCycleStore {
403
+ type?: ContentType
404
+ start: HookContainer<GracefulHandler<any>>[]
405
+ request: HookContainer<PreHandler<any, any>>[]
406
+ parse: HookContainer<BodyHandler<any, any>>[]
407
+ transform: HookContainer<TransformHandler<any, any>>[]
408
+ beforeHandle: HookContainer<OptionalHandler<any, any>>[]
409
+ afterHandle: HookContainer<AfterHandler<any, any>>[]
410
+ mapResponse: HookContainer<MapResponse<any, any>>[]
411
+ afterResponse: HookContainer<AfterResponseHandler<any, any>>[]
412
+ // trace: HookContainer<TraceHandler<any, any>>[]
413
+ error: HookContainer<ErrorHandler<any, any, any>>[]
414
+ stop: HookContainer<GracefulHandler<any>>[]
415
+ }
416
+
417
+ export type LifeCycleEvent =
418
+ | 'start'
419
+ | 'request'
420
+ | 'parse'
421
+ | 'transform'
422
+ | 'beforeHandle'
423
+ | 'afterHandle'
424
+ | 'response'
425
+ | 'error'
426
+ | 'stop'
427
+
428
+ export type ContentType = MaybeArray<
429
+ | (string & {})
430
+ | 'none'
431
+ | 'text'
432
+ | 'json'
433
+ | 'formdata'
434
+ | 'urlencoded'
435
+ | 'arrayBuffer'
436
+ | 'text/plain'
437
+ | 'application/json'
438
+ | 'multipart/form-data'
439
+ | 'application/x-www-form-urlencoded'
440
+ >
441
+
442
+ export type HTTPMethod =
443
+ | (string & {})
444
+ | 'ACL'
445
+ | 'BIND'
446
+ | 'CHECKOUT'
447
+ | 'CONNECT'
448
+ | 'COPY'
449
+ | 'DELETE'
450
+ | 'GET'
451
+ | 'HEAD'
452
+ | 'LINK'
453
+ | 'LOCK'
454
+ | 'M-SEARCH'
455
+ | 'MERGE'
456
+ | 'MKACTIVITY'
457
+ | 'MKCALENDAR'
458
+ | 'MKCOL'
459
+ | 'MOVE'
460
+ | 'NOTIFY'
461
+ | 'OPTIONS'
462
+ | 'PATCH'
463
+ | 'POST'
464
+ | 'PROPFIND'
465
+ | 'PROPPATCH'
466
+ | 'PURGE'
467
+ | 'PUT'
468
+ | 'REBIND'
469
+ | 'REPORT'
470
+ | 'SEARCH'
471
+ | 'SOURCE'
472
+ | 'SUBSCRIBE'
473
+ | 'TRACE'
474
+ | 'UNBIND'
475
+ | 'UNLINK'
476
+ | 'UNLOCK'
477
+ | 'UNSUBSCRIBE'
478
+ | 'ALL'
479
+
480
+ export interface InputSchema<Name extends string = string> {
481
+ body?: TSchema | Name
482
+ // headers?: TObject | TNull | TUndefined | Name
483
+ // query?: TObject | TNull | TUndefined | Name
484
+ // params?: TObject | TNull | TUndefined | Name
485
+ // cookie?: TObject | TNull | TUndefined | Name
486
+ response?:
487
+ | TSchema
488
+ | Record<number, TSchema>
489
+ | Name
490
+ | Record<number, Name | TSchema>
491
+ }
492
+
493
+ export interface MergeSchema<
494
+ in out A extends RouteSchema,
495
+ in out B extends RouteSchema
496
+ > {
497
+ body: undefined extends A['body'] ? B['body'] : A['body']
498
+ headers: undefined extends A['headers'] ? B['headers'] : A['headers']
499
+ query: undefined extends A['query'] ? B['query'] : A['query']
500
+ params: undefined extends A['params'] ? B['params'] : A['params']
501
+ cookie: undefined extends A['cookie'] ? B['cookie'] : A['cookie']
502
+ response: {} extends A['response']
503
+ ? {} extends B['response']
504
+ ? {}
505
+ : B['response']
506
+ : {} extends B['response']
507
+ ? A['response']
508
+ : A['response'] & Omit<B['response'], keyof A['response']>
509
+ }
510
+
511
+ export type Handler<
512
+ in out Route extends RouteSchema = {},
513
+ in out Singleton extends SingletonBase = {
514
+ decorator: {}
515
+ store: {}
516
+ derive: {}
517
+ resolve: {}
518
+ },
519
+ Path extends string = ''
520
+ > = (
521
+ context: Context<Route, Singleton, Path>
522
+ ) => MaybePromise<
523
+ {} extends Route['response']
524
+ ? unknown
525
+ : Route['response'][keyof Route['response']]
526
+ >
527
+
528
+ export type Replace<Original, Target, With> = IsAny<Target> extends true
529
+ ? Original
530
+ : Original extends Record<string, unknown>
531
+ ? {
532
+ [K in keyof Original]: Original[K] extends Target
533
+ ? With
534
+ : Original[K]
535
+ }
536
+ : Original extends Target
537
+ ? With
538
+ : Original
539
+
540
+ type IsAny<T> = 0 extends 1 & T ? true : false
541
+
542
+ export type CoExist<Original, Target, With> = IsAny<Target> extends true
543
+ ? Original
544
+ : Original extends Record<string, unknown>
545
+ ? {
546
+ [K in keyof Original]: Original[K] extends Target
547
+ ? Original[K] | With
548
+ : Original[K]
549
+ }
550
+ : Original extends Target
551
+ ? Original | With
552
+ : Original
553
+
554
+ export type InlineHandler<
555
+ Route extends RouteSchema = {},
556
+ Singleton extends SingletonBase = {
557
+ decorator: {}
558
+ store: {}
559
+ derive: {}
560
+ resolve: {}
561
+ },
562
+ Path extends string = '',
563
+ MacroContext = {}
564
+ > =
565
+ | ((
566
+ context: MacroContext extends Record<
567
+ string | number | symbol,
568
+ unknown
569
+ >
570
+ ? Prettify<MacroContext & Context<Route, Singleton, Path>>
571
+ : Context<Route, Singleton, Path>
572
+ ) =>
573
+ | Response
574
+ | MaybePromise<
575
+ {} extends Route['response']
576
+ ? unknown
577
+ :
578
+ | (Route['response'] extends { 200: any }
579
+ ? Route['response']
580
+ : string | number | boolean | Object)
581
+ | Route['response'][keyof Route['response']]
582
+ | {
583
+ [Status in keyof Route['response']]: {
584
+ _type: Record<
585
+ Status,
586
+ Route['response'][Status]
587
+ >
588
+ [ELYSIA_RESPONSE]: Status
589
+ }
590
+ }[keyof Route['response']]
591
+ >)
592
+ | ({} extends Route['response']
593
+ ? string | number | boolean | Object
594
+ :
595
+ | (Route['response'] extends { 200: any }
596
+ ? Route['response']
597
+ : string | number | boolean | Object)
598
+ | Route['response'][keyof Route['response']]
599
+ | {
600
+ [Status in keyof Route['response']]: {
601
+ _type: Record<Status, Route['response'][Status]>
602
+ [ELYSIA_RESPONSE]: Status
603
+ }
604
+ }[keyof Route['response']])
605
+
606
+ export type OptionalHandler<
607
+ in out Route extends RouteSchema = {},
608
+ in out Singleton extends SingletonBase = {
609
+ decorator: {}
610
+ store: {}
611
+ derive: {}
612
+ resolve: {}
613
+ },
614
+ Path extends string = ''
615
+ > = Handler<Route, Singleton, Path> extends (
616
+ context: infer Context
617
+ ) => infer Returned
618
+ ? (context: Context) => Returned | MaybePromise<void>
619
+ : never
620
+
621
+ export type AfterHandler<
622
+ in out Route extends RouteSchema = {},
623
+ in out Singleton extends SingletonBase = {
624
+ decorator: {}
625
+ store: {}
626
+ derive: {}
627
+ resolve: {}
628
+ },
629
+ Path extends string = ''
630
+ > = Handler<Route, Singleton, Path> extends (
631
+ context: infer Context
632
+ ) => infer Returned
633
+ ? (
634
+ context: Prettify<
635
+ {
636
+ response: Route['response']
637
+ } & Context
638
+ >
639
+ ) => Returned | MaybePromise<void>
640
+ : never
641
+
642
+ export type MapResponse<
643
+ in out Route extends RouteSchema = {},
644
+ in out Singleton extends SingletonBase = {
645
+ decorator: {}
646
+ store: {}
647
+ derive: {}
648
+ resolve: {}
649
+ },
650
+ Path extends string = ''
651
+ > = Handler<
652
+ Omit<Route, 'response'> & {
653
+ response: MaybePromise<Response | undefined | unknown>
654
+ },
655
+ Singleton & {
656
+ derive: {
657
+ response: Route['response']
658
+ }
659
+ },
660
+ Path
661
+ >
662
+
663
+ export type VoidHandler<
664
+ in out Route extends RouteSchema = {},
665
+ in out Singleton extends SingletonBase = {
666
+ decorator: {}
667
+ store: {}
668
+ derive: {}
669
+ resolve: {}
670
+ }
671
+ > = (context: Context<Route, Singleton>) => MaybePromise<void>
672
+
673
+ export type TransformHandler<
674
+ in out Route extends RouteSchema = {},
675
+ in out Singleton extends SingletonBase = {
676
+ decorator: {}
677
+ store: {}
678
+ derive: {}
679
+ resolve: {}
680
+ },
681
+ BasePath extends string = ''
682
+ > = {
683
+ (
684
+ context: Prettify<
685
+ Context<
686
+ Route,
687
+ Omit<Singleton, 'resolve'> & {
688
+ resolve: {}
689
+ },
690
+ BasePath
691
+ >
692
+ >
693
+ ): MaybePromise<void>
694
+ }
695
+
696
+ export type BodyHandler<
697
+ in out Route extends RouteSchema = {},
698
+ in out Singleton extends SingletonBase = {
699
+ decorator: {}
700
+ store: {}
701
+ derive: {}
702
+ resolve: {}
703
+ },
704
+ Path extends string = ''
705
+ > = (
706
+ context: Prettify<
707
+ {
708
+ contentType: string
709
+ } & Context<Route, Singleton, Path>
710
+ >,
711
+ /**
712
+ * @deprecated
713
+ *
714
+ * use `context.contentType` instead
715
+ *
716
+ * @example
717
+ * ```ts
718
+ * new Elysia()
719
+ * .onParse(({ contentType, request }) => {
720
+ * if (contentType === 'application/json')
721
+ * return request.json()
722
+ * })
723
+ * ```
724
+ */
725
+ contentType: string
726
+ ) => MaybePromise<any>
727
+
728
+ export type PreHandler<
729
+ in out Route extends RouteSchema = {},
730
+ in out Singleton extends SingletonBase = {
731
+ decorator: {}
732
+ store: {}
733
+ derive: {}
734
+ resolve: {}
735
+ }
736
+ > = (context: PreContext<Singleton>) => MaybePromise<Route['response'] | void>
737
+
738
+ export type AfterResponseHandler<
739
+ in out Route extends RouteSchema = {},
740
+ in out Singleton extends SingletonBase = {
741
+ decorator: {}
742
+ store: {}
743
+ derive: {}
744
+ resolve: {}
745
+ }
746
+ > = (
747
+ context: Prettify<
748
+ Context<Route, Singleton> & {
749
+ response: Route['response']
750
+ }
751
+ >
752
+ ) => MaybePromise<void>
753
+
754
+ export type GracefulHandler<
755
+ in Instance extends Elysia<any, any, any, any, any, any, any, any>
756
+ > = (data: Instance) => any
757
+
758
+ export type ErrorHandler<
759
+ in out T extends Record<string, Error> = {},
760
+ in out Route extends RouteSchema = {},
761
+ in out Singleton extends SingletonBase = {
762
+ decorator: {}
763
+ store: {}
764
+ derive: {}
765
+ resolve: {}
766
+ },
767
+ // ? scoped
768
+ in out Ephemeral extends EphemeralType = {
769
+ derive: {}
770
+ resolve: {}
771
+ schema: {}
772
+ },
773
+ // ? local
774
+ in out Volatile extends EphemeralType = {
775
+ derive: {}
776
+ resolve: {}
777
+ schema: {}
778
+ }
779
+ > = (
780
+ context: ErrorContext<
781
+ Route,
782
+ {
783
+ store: Singleton['store']
784
+ decorator: Singleton['decorator']
785
+ derive: {}
786
+ resolve: {}
787
+ }
788
+ > &
789
+ (
790
+ | Prettify<
791
+ {
792
+ request: Request
793
+ code: 'UNKNOWN'
794
+ error: Readonly<Error>
795
+ } & Partial<
796
+ Singleton['derive'] &
797
+ Ephemeral['derive'] &
798
+ Volatile['derive']
799
+ > &
800
+ Partial<
801
+ Singleton['derive'] &
802
+ Ephemeral['resolve'] &
803
+ Volatile['resolve']
804
+ >
805
+ >
806
+ | Prettify<
807
+ {
808
+ request: Request
809
+ code: 'VALIDATION'
810
+ error: Readonly<ValidationError>
811
+ } & Singleton['derive'] &
812
+ Ephemeral['derive'] &
813
+ Volatile['derive'] &
814
+ NeverKey<
815
+ Singleton['derive'] &
816
+ Ephemeral['resolve'] &
817
+ Volatile['resolve']
818
+ >
819
+ >
820
+ | Prettify<
821
+ {
822
+ request: Request
823
+ code: 'NOT_FOUND'
824
+ error: Readonly<NotFoundError>
825
+ } & NeverKey<
826
+ Singleton['derive'] &
827
+ Ephemeral['derive'] &
828
+ Volatile['derive']
829
+ > &
830
+ NeverKey<
831
+ Singleton['derive'] &
832
+ Ephemeral['resolve'] &
833
+ Volatile['resolve']
834
+ >
835
+ >
836
+ | Prettify<
837
+ {
838
+ request: Request
839
+ code: 'PARSE'
840
+ error: Readonly<ParseError>
841
+ } & Singleton['derive'] &
842
+ Ephemeral['derive'] &
843
+ Volatile['derive'] &
844
+ NeverKey<
845
+ Singleton['derive'] &
846
+ Ephemeral['resolve'] &
847
+ Volatile['resolve']
848
+ >
849
+ >
850
+ | Prettify<
851
+ {
852
+ request: Request
853
+ code: 'INTERNAL_SERVER_ERROR'
854
+ error: Readonly<InternalServerError>
855
+ } & Partial<
856
+ Singleton['derive'] &
857
+ Ephemeral['derive'] &
858
+ Volatile['derive']
859
+ > &
860
+ Partial<
861
+ Singleton['derive'] &
862
+ Ephemeral['resolve'] &
863
+ Volatile['resolve']
864
+ >
865
+ >
866
+ | Prettify<
867
+ {
868
+ request: Request
869
+ code: 'INVALID_COOKIE_SIGNATURE'
870
+ error: Readonly<InvalidCookieSignature>
871
+ } & NeverKey<
872
+ Singleton['derive'] &
873
+ Ephemeral['derive'] &
874
+ Volatile['derive']
875
+ > &
876
+ NeverKey<
877
+ Singleton['derive'] &
878
+ Ephemeral['resolve'] &
879
+ Volatile['resolve']
880
+ >
881
+ >
882
+ | Prettify<
883
+ {
884
+ [K in keyof T]: {
885
+ request: Request
886
+ code: K
887
+ error: Readonly<T[K]>
888
+ }
889
+ }[keyof T] &
890
+ Partial<
891
+ Singleton['derive'] &
892
+ Ephemeral['derive'] &
893
+ Volatile['derive']
894
+ > &
895
+ Partial<
896
+ Singleton['derive'] &
897
+ Ephemeral['resolve'] &
898
+ Volatile['resolve']
899
+ >
900
+ >
901
+ )
902
+ ) => any | Promise<any>
903
+
904
+ export type Isolate<T> = {
905
+ [P in keyof T]: T[P]
906
+ }
907
+
908
+ export type DocumentDecoration = Partial<OpenAPIV3.OperationObject> & {
909
+ /**
910
+ * Pass `true` to hide route from OpenAPI/swagger document
911
+ * */
912
+ hide?: boolean
913
+ }
914
+
915
+ export type LocalHook<
916
+ LocalSchema extends InputSchema,
917
+ Schema extends RouteSchema,
918
+ Singleton extends SingletonBase,
919
+ Errors extends Record<string, Error>,
920
+ Extension extends BaseMacro,
921
+ Path extends string = '',
922
+ TypedRoute extends RouteSchema = Schema extends {
923
+ params: Record<string, unknown>
924
+ }
925
+ ? Schema
926
+ : Schema & {
927
+ params: undefined extends Schema['params']
928
+ ? ResolvePath<Path>
929
+ : Schema['params']
930
+ }
931
+ > = (LocalSchema extends {} ? LocalSchema : Isolate<LocalSchema>) &
932
+ Extension & {
933
+ /**
934
+ * Short for 'Content-Type'
935
+ *
936
+ * Available:
937
+ * - 'none': do not parse body
938
+ * - 'text' / 'text/plain': parse body as string
939
+ * - 'json' / 'application/json': parse body as json
940
+ * - 'formdata' / 'multipart/form-data': parse body as form-data
941
+ * - 'urlencoded' / 'application/x-www-form-urlencoded: parse body as urlencoded
942
+ * - 'arraybuffer': parse body as readable stream
943
+ */
944
+ type?: ContentType
945
+ detail?: DocumentDecoration
946
+ // /**
947
+ // * Custom body parser
948
+ // */
949
+ // parse?: MaybeArray<BodyHandler<TypedRoute, Singleton>>
950
+ // /**
951
+ // * Transform context's value
952
+ // */
953
+ // transform?: MaybeArray<TransformHandler<TypedRoute, Singleton>>
954
+ // /**
955
+ // * Execute before main handler
956
+ // */
957
+ // beforeHandle?: MaybeArray<OptionalHandler<TypedRoute, Singleton>>
958
+ // /**
959
+ // * Execute after main handler
960
+ // */
961
+ // afterHandle?: MaybeArray<AfterHandler<TypedRoute, Singleton>>
962
+ // /**
963
+ // * Execute after main handler
964
+ // */
965
+ // mapResponse?: MaybeArray<MapResponse<TypedRoute, Singleton>>
966
+ // /**
967
+ // * Execute after response is sent
968
+ // */
969
+ // afterResponse?: MaybeArray<VoidHandler<TypedRoute, Singleton>>
970
+ // /**
971
+ // * Catch error
972
+ // */
973
+ // error?: MaybeArray<ErrorHandler<Errors, TypedRoute, Singleton>>
974
+ // tags?: DocumentDecoration['tags']
975
+ }
976
+
977
+ export type ComposedHandler = (context: Context) => MaybePromise<Response>
978
+
979
+ export interface InternalRoute {
980
+ method: HTTPMethod
981
+ path: string
982
+ composed: ComposedHandler | Response | null
983
+ handler: Handler
984
+ hooks: LocalHook<any, any, any, any, any, any, any>
985
+ }
986
+
987
+
988
+
989
+ export type ListenCallback = (server: Server) => MaybePromise<void>
990
+
991
+ export type AddPrefix<Prefix extends string, T> = {
992
+ [K in keyof T as Prefix extends string ? `${Prefix}${K & string}` : K]: T[K]
993
+ }
994
+
995
+ export type AddPrefixCapitalize<Prefix extends string, T> = {
996
+ [K in keyof T as `${Prefix}${Capitalize<K & string>}`]: T[K]
997
+ }
998
+
999
+ export type AddSuffix<Suffix extends string, T> = {
1000
+ [K in keyof T as `${K & string}${Suffix}`]: T[K]
1001
+ }
1002
+
1003
+ export type AddSuffixCapitalize<Suffix extends string, T> = {
1004
+ [K in keyof T as `${K & string}${Capitalize<Suffix>}`]: T[K]
1005
+ }
1006
+
1007
+ export type Checksum = {
1008
+ name?: string
1009
+ seed?: unknown
1010
+ checksum: number
1011
+ stack?: string
1012
+ routes?: InternalRoute[]
1013
+ decorators?: SingletonBase['decorator']
1014
+ store?: SingletonBase['store']
1015
+ type?: DefinitionBase['type']
1016
+ error?: DefinitionBase['error']
1017
+ dependencies?: Record<string, Checksum[]>
1018
+ derive?: {
1019
+ fn: string
1020
+ stack: string
1021
+ }[]
1022
+ resolve?: {
1023
+ fn: string
1024
+ stack: string
1025
+ }[]
1026
+ }
1027
+
1028
+ export type BaseMacro = Record<
1029
+ string,
1030
+ string | number | boolean | Object | undefined | null
1031
+ >
1032
+ export type BaseMacroFn = Record<string, (...a: any) => unknown>
1033
+
1034
+ export type MacroToProperty<in out T extends BaseMacroFn> = Prettify<{
1035
+ [K in keyof T]: T[K] extends Function
1036
+ ? T[K] extends (a: infer Params) => any
1037
+ ? Params | undefined
1038
+ : T[K]
1039
+ : T[K]
1040
+ }>
1041
+
1042
+ interface MacroOptions {
1043
+ insert?: 'before' | 'after'
1044
+ stack?: 'global' | 'local'
1045
+ }
1046
+
1047
+ export interface MacroManager<
1048
+ in out TypedRoute extends RouteSchema = {},
1049
+ in out Singleton extends SingletonBase = {
1050
+ decorator: {}
1051
+ store: {}
1052
+ derive: {}
1053
+ resolve: {}
1054
+ },
1055
+ in out Errors extends Record<string, Error> = {}
1056
+ > {
1057
+ onParse(fn: MaybeArray<BodyHandler<TypedRoute, Singleton>>): unknown
1058
+ onParse(
1059
+ options: MacroOptions,
1060
+ fn: MaybeArray<BodyHandler<TypedRoute, Singleton>>
1061
+ ): unknown
1062
+
1063
+ onTransform(fn: MaybeArray<VoidHandler<TypedRoute, Singleton>>): unknown
1064
+ onTransform(
1065
+ options: MacroOptions,
1066
+ fn: MaybeArray<VoidHandler<TypedRoute, Singleton>>
1067
+ ): unknown
1068
+
1069
+ onBeforeHandle(
1070
+ fn: MaybeArray<OptionalHandler<TypedRoute, Singleton>>
1071
+ ): unknown
1072
+ onBeforeHandle(
1073
+ options: MacroOptions,
1074
+ fn: MaybeArray<OptionalHandler<TypedRoute, Singleton>>
1075
+ ): unknown
1076
+
1077
+ onAfterHandle(fn: MaybeArray<AfterHandler<TypedRoute, Singleton>>): unknown
1078
+ onAfterHandle(
1079
+ options: MacroOptions,
1080
+ fn: MaybeArray<AfterHandler<TypedRoute, Singleton>>
1081
+ ): unknown
1082
+
1083
+ onError(
1084
+ fn: MaybeArray<ErrorHandler<Errors, TypedRoute, Singleton>>
1085
+ ): unknown
1086
+ onError(
1087
+ options: MacroOptions,
1088
+ fn: MaybeArray<ErrorHandler<Errors, TypedRoute, Singleton>>
1089
+ ): unknown
1090
+
1091
+ mapResponse(fn: MaybeArray<MapResponse<TypedRoute, Singleton>>): unknown
1092
+ mapResponse(
1093
+ options: MacroOptions,
1094
+ fn: MaybeArray<MapResponse<TypedRoute, Singleton>>
1095
+ ): unknown
1096
+
1097
+ onAfterResponse(
1098
+ fn: MaybeArray<AfterResponseHandler<TypedRoute, Singleton>>
1099
+ ): unknown
1100
+ onAfterResponse(
1101
+ options: MacroOptions,
1102
+ fn: MaybeArray<AfterResponseHandler<TypedRoute, Singleton>>
1103
+ ): unknown
1104
+
1105
+ events: {
1106
+ global: Prettify<LifeCycleStore & RouteSchema>
1107
+ local: Prettify<LifeCycleStore & RouteSchema>
1108
+ }
1109
+ }
1110
+
1111
+ export type MacroQueue = HookContainer<
1112
+ (manager: MacroManager<any, any, any>) => unknown
1113
+ >
1114
+
1115
+ type _CreateEden<
1116
+ Path extends string,
1117
+ Property extends Record<string, unknown> = {}
1118
+ > = Path extends `${infer Start}/${infer Rest}`
1119
+ ? {
1120
+ [x in Start]: _CreateEden<Rest, Property>
1121
+ }
1122
+ : {
1123
+ [x in Path]: Property
1124
+ }
1125
+
1126
+ export type CreateEden<
1127
+ Path extends string,
1128
+ Property extends Record<string, unknown> = {}
1129
+ > = Path extends `/${infer Rest}`
1130
+ ? _CreateEden<Rest, Property>
1131
+ : Path extends ''
1132
+ ? _CreateEden<'index', Property>
1133
+ : _CreateEden<Path, Property>
1134
+
1135
+ export type ComposeElysiaResponse<Response, Handle> = Handle extends (
1136
+ ...a: any[]
1137
+ ) => infer A
1138
+ ? _ComposeElysiaResponse<Response, Replace<Awaited<A>, BunFile, File>>
1139
+ : _ComposeElysiaResponse<Response, Replace<Awaited<Handle>, BunFile, File>>
1140
+
1141
+ type _ComposeElysiaResponse<Response, Handle> = Prettify<
1142
+ {} extends Response
1143
+ ? {
1144
+ 200: Exclude<Handle, { [ELYSIA_RESPONSE]: any }>
1145
+ } & {
1146
+ [ErrorResponse in Extract<
1147
+ Handle,
1148
+ { response: any }
1149
+ > as ErrorResponse extends {
1150
+ [ELYSIA_RESPONSE]: infer Status extends number
1151
+ }
1152
+ ? Status
1153
+ : never]: ErrorResponse['response']
1154
+ }
1155
+ : Response
1156
+ >
1157
+
1158
+ export type MergeElysiaInstances<
1159
+ Instances extends Elysia<any, any, any, any, any, any>[] = [],
1160
+ Prefix extends string = '',
1161
+ Scoped extends boolean = false,
1162
+ Singleton extends SingletonBase = {
1163
+ decorator: {}
1164
+ store: {}
1165
+ derive: {}
1166
+ resolve: {}
1167
+ },
1168
+ Definitions extends DefinitionBase = {
1169
+ type: {}
1170
+ error: {}
1171
+ },
1172
+ Metadata extends MetadataBase = {
1173
+ schema: {}
1174
+ macro: {}
1175
+ macroFn: {}
1176
+ },
1177
+ Routes extends RouteBase = {}
1178
+ > = Instances extends [
1179
+ infer Current extends Elysia<any, any, any, any, any, any>,
1180
+ ...infer Rest extends Elysia<any, any, any, any, any, any>[]
1181
+ ]
1182
+ ? Current['_types']['Scoped'] extends true
1183
+ ? MergeElysiaInstances<
1184
+ Rest,
1185
+ Prefix,
1186
+ Scoped,
1187
+ Singleton,
1188
+ Definitions,
1189
+ Metadata,
1190
+ Routes
1191
+ >
1192
+ : MergeElysiaInstances<
1193
+ Rest,
1194
+ Prefix,
1195
+ Scoped,
1196
+ Singleton & Current['_types']['Singleton'],
1197
+ Definitions & Current['_types']['Definitions'],
1198
+ Metadata & Current['_types']['Metadata'],
1199
+ Routes &
1200
+ (Prefix extends ``
1201
+ ? Current['_routes']
1202
+ : AddPrefix<Prefix, Current['_routes']>)
1203
+ >
1204
+ : Elysia<
1205
+ Prefix,
1206
+ Scoped,
1207
+ {
1208
+ decorator: Prettify<Singleton['decorator']>
1209
+ store: Prettify<Singleton['store']>
1210
+ derive: Prettify<Singleton['derive']>
1211
+ resolve: Prettify<Singleton['resolve']>
1212
+ },
1213
+ {
1214
+ type: Prettify<Definitions['type']>
1215
+ error: Prettify<Definitions['error']>
1216
+ },
1217
+ {
1218
+ schema: Prettify<Metadata['schema']>
1219
+ macro: Prettify<Metadata['macro']>
1220
+ macroFn: Prettify<Metadata['macroFn']>
1221
+ },
1222
+ Routes
1223
+ >
1224
+
1225
+ export type LifeCycleType = 'global' | 'local' | 'scoped'
1226
+
1227
+ // Exclude return error()
1228
+ export type ExcludeElysiaResponse<T> = Exclude<
1229
+ undefined extends Awaited<T> ? Partial<Awaited<T>> : Awaited<T>,
1230
+ { [ELYSIA_RESPONSE]: any }
1231
+ >
1232
+
1233
+ export type InferContext<
1234
+ T extends Elysia<any, any, any, any, any, any, any, any>,
1235
+ Path extends string = T['_types']['Prefix'],
1236
+ Schema extends RouteSchema = T['_types']['Metadata']['schema']
1237
+ > = Context<
1238
+ MergeSchema<Schema, T['_types']['Metadata']['schema']>,
1239
+ T['_types']['Singleton'] & {
1240
+ derive: T['_ephemeral']['derive'] & T['_volatile']['derive']
1241
+ resolve: T['_ephemeral']['resolve'] & T['_volatile']['resolve']
1242
+ },
1243
+ Path
1244
+ >
1245
+
1246
+ export type InferHandler<
1247
+ T extends Elysia<any, any, any, any, any, any, any, any>,
1248
+ Path extends string = T['_types']['Prefix'],
1249
+ Schema extends RouteSchema = T['_types']['Metadata']['schema']
1250
+ > = InlineHandler<
1251
+ MergeSchema<Schema, T['_types']['Metadata']['schema']>,
1252
+ T['_types']['Singleton'] & {
1253
+ derive: T['_ephemeral']['derive'] & T['_volatile']['derive']
1254
+ resolve: T['_ephemeral']['resolve'] & T['_volatile']['resolve']
1255
+ },
1256
+ Path
1257
+ >
1258
+
1259
+ export interface ModelValidatorError extends ValueError {
1260
+ summary: string
1261
+ }
1262
+
1263
+ // @ts-ignore trust me bro
1264
+ export interface ModelValidator<T> extends TypeCheck<T> {
1265
+ parse(a: T): T
1266
+ safeParse(a: T):
1267
+ | { success: true; data: T; error: null }
1268
+ | {
1269
+ success: true
1270
+ data: null
1271
+ error: string
1272
+ errors: ModelValidatorError[]
1273
+ }
1274
+ }
1275
+
1276
+ export type UnionToIntersect<U> = (
1277
+ U extends unknown ? (arg: U) => 0 : never
1278
+ ) extends (arg: infer I) => 0
1279
+ ? I
1280
+ : never
1281
+
1282
+ export type ResolveMacroContext<
1283
+ Macro extends BaseMacro,
1284
+ MacroFn extends BaseMacroFn
1285
+ > = UnionToIntersect<
1286
+ {
1287
+ [K in keyof Macro]-?: undefined extends Macro[K]
1288
+ ? never
1289
+ : K extends keyof MacroFn
1290
+ ? ReturnType<MacroFn[K]> extends infer A extends Record<
1291
+ string | number | symbol,
1292
+ unknown
1293
+ >
1294
+ ? A
1295
+ : never
1296
+ : never
1297
+ }[keyof Macro]
1298
+ >
1299
+
1300
+ export type ContextAppendType = 'append' | 'override'
1301
+
1302
+ export type HigherOrderFunction<
1303
+ T extends (...arg: unknown[]) => Function = (...arg: unknown[]) => Function
1304
+ > = (fn: T, request: Request) => ReturnType<T>
1305
+
1306
+ // new Elysia()
1307
+ // .wrap((fn) => {
1308
+ // return fn()
1309
+ // })
1310
+
1311
+ export type HTTPHeaders = Record<string, string> & {
1312
+ // Authentication
1313
+ 'www-authenticate'?: string
1314
+ authorization?: string
1315
+ 'proxy-authenticate'?: string
1316
+ 'proxy-authorization'?: string
1317
+
1318
+ // Caching
1319
+ age?: string
1320
+ 'cache-control'?: string
1321
+ 'clear-site-data'?: string
1322
+ expires?: string
1323
+ 'no-vary-search'?: string
1324
+ pragma?: string
1325
+
1326
+ // Conditionals
1327
+ 'last-modified'?: string
1328
+ etag?: string
1329
+ 'if-match'?: string
1330
+ 'if-none-match'?: string
1331
+ 'if-modified-since'?: string
1332
+ 'if-unmodified-since'?: string
1333
+ vary?: string
1334
+
1335
+ // Connection management
1336
+ connection?: string
1337
+ 'keep-alive'?: string
1338
+
1339
+ // Content negotiation
1340
+ accept?: string
1341
+ 'accept-encoding'?: string
1342
+ 'accept-language'?: string
1343
+
1344
+ // Controls
1345
+ expect?: string
1346
+ 'max-forwards'?: string
1347
+
1348
+ // Cokies
1349
+ cookie?: string
1350
+ 'set-cookie'?: string | string[]
1351
+
1352
+ // CORS
1353
+ 'access-control-allow-origin'?: string
1354
+ 'access-control-allow-credentials'?: string
1355
+ 'access-control-allow-headers'?: string
1356
+ 'access-control-allow-methods'?: string
1357
+ 'access-control-expose-headers'?: string
1358
+ 'access-control-max-age'?: string
1359
+ 'access-control-request-headers'?: string
1360
+ 'access-control-request-method'?: string
1361
+ origin?: string
1362
+ 'timing-allow-origin'?: string
1363
+
1364
+ // Downloads
1365
+ 'content-disposition'?: string
1366
+
1367
+ // Message body information
1368
+ 'content-length'?: string
1369
+ 'content-type'?: string
1370
+ 'content-encoding'?: string
1371
+ 'content-language'?: string
1372
+ 'content-location'?: string
1373
+
1374
+ // Proxies
1375
+ forwarded?: string
1376
+ via?: string
1377
+
1378
+ // Redirects
1379
+ location?: string
1380
+ refresh?: string
1381
+
1382
+ // Request context
1383
+ // from?: string
1384
+ // host?: string
1385
+ // referer?: string
1386
+ // 'user-agent'?: string
1387
+
1388
+ // Response context
1389
+ allow?: string
1390
+ server?: 'Elysia' | (string & {})
1391
+
1392
+ // Range requests
1393
+ 'accept-ranges'?: string
1394
+ range?: string
1395
+ 'if-range'?: string
1396
+ 'content-range'?: string
1397
+
1398
+ // Security
1399
+ 'content-security-policy'?: string
1400
+ 'content-security-policy-report-only'?: string
1401
+ 'cross-origin-embedder-policy'?: string
1402
+ 'cross-origin-opener-policy'?: string
1403
+ 'cross-origin-resource-policy'?: string
1404
+ 'expect-ct'?: string
1405
+ 'permission-policy'?: string
1406
+ 'strict-transport-security'?: string
1407
+ 'upgrade-insecure-requests'?: string
1408
+ 'x-content-type-options'?: string
1409
+ 'x-frame-options'?: string
1410
+ 'x-xss-protection'?: string
1411
+
1412
+ // Server-sent events
1413
+ 'last-event-id'?: string
1414
+ 'ping-from'?: string
1415
+ 'ping-to'?: string
1416
+ 'report-to'?: string
1417
+
1418
+ // Transfer coding
1419
+ te?: string
1420
+ trailer?: string
1421
+ 'transfer-encoding'?: string
1422
+
1423
+ // Other
1424
+ 'alt-svg'?: string
1425
+ 'alt-used'?: string
1426
+ date?: string
1427
+ dnt?: string
1428
+ 'early-data'?: string
1429
+ 'large-allocation'?: string
1430
+ link?: string
1431
+ 'retry-after'?: string
1432
+ 'service-worker-allowed'?: string
1433
+ 'source-map'?: string
1434
+ upgrade?: string
1435
+
1436
+ // Non-standard
1437
+ 'x-dns-prefetch-control'?: string
1438
+ 'x-forwarded-for'?: string
1439
+ 'x-forwarded-host'?: string
1440
+ 'x-forwarded-proto'?: string
1441
+ 'x-powered-by'?: 'Elysia' | (string & {})
1442
+ 'x-request-id'?: string
1443
+ 'x-requested-with'?: string
1444
+ 'x-robots-tag'?: string
1445
+ 'x-ua-compatible'?: string
1446
+ }
1447
+
1448
+ export type JoinPath<A extends string, B extends string> = `${A}${B extends '/'
1449
+ ? '/index'
1450
+ : B extends ''
1451
+ ? B
1452
+ : B extends `/${string}`
1453
+ ? B
1454
+ : B}`