From 5199c61442efcfa0b72e0e34a8a904717279b7f4 Mon Sep 17 00:00:00 2001 From: saltyaom Date: Thu, 21 Nov 2024 04:54:26 +0700 Subject: [PATCH] :tada: feat: optimize resolve handler --- src/adapter/types.ts | 2 +- src/index.ts | 86 ++++++++++++-------------------------------- src/types.ts | 7 ++-- src/ws/types.ts | 75 ++++++++++---------------------------- 4 files changed, 44 insertions(+), 126 deletions(-) diff --git a/src/adapter/types.ts b/src/adapter/types.ts index 3b326865..01bd8065 100644 --- a/src/adapter/types.ts +++ b/src/adapter/types.ts @@ -132,6 +132,6 @@ export interface ElysiaAdapter { ws?( app: AnyElysia, path: string, - handler: WSLocalHook + handler: WSLocalHook ): unknown } diff --git a/src/index.ts b/src/index.ts index ca9a9903..87f71346 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2560,7 +2560,11 @@ export default class Elysia< keyof UnwrapTypeModule & string >, const Schema extends MergeSchema< - UnwrapRoute>, + UnwrapRoute< + Input, + Definitions['typebox'], + JoinPath + >, Metadata['schema'] >, const Resolutions extends MaybeArray< @@ -2734,11 +2738,7 @@ export default class Elysia< keyof UnwrapTypeModule & string >, const Schema extends MergeSchema< - UnwrapRoute< - LocalSchema, - Definitions['typebox'], - BasePath - >, + UnwrapRoute, Metadata['schema'] >, const Type extends LifeCycleType, @@ -2755,16 +2755,9 @@ export default class Elysia< hook: { as: Type } & LocalHook< LocalSchema, Schema, - { - decorator: Singleton['decorator'] - store: Singleton['store'] - derive: Singleton['derive'] & - Ephemeral['derive'] & - Volatile['derive'] - resolve: Singleton['resolve'] & - Ephemeral['resolve'] & - Volatile['resolve'] & - ResolveResolutions + Singleton & { + derive: Ephemeral['derive'] & Volatile['derive'] + resolve: Ephemeral['resolve'] & Volatile['resolve'] }, Definitions['error'], Metadata['macro'], @@ -2852,11 +2845,7 @@ export default class Elysia< keyof UnwrapTypeModule & string >, const Schema extends MergeSchema< - UnwrapRoute< - LocalSchema, - Definitions['typebox'], - BasePath - >, + UnwrapRoute, Metadata['schema'] >, const Resolutions extends MaybeArray< @@ -2872,16 +2861,9 @@ export default class Elysia< hook: LocalHook< LocalSchema, Schema, - { - decorator: Singleton['decorator'] - store: Singleton['store'] - derive: Singleton['derive'] & - Ephemeral['derive'] & - Volatile['derive'] - resolve: Singleton['resolve'] & - Ephemeral['resolve'] & - Volatile['resolve'] & - ResolveResolutions + Singleton & { + derive: Ephemeral['derive'] & Volatile['derive'] + resolve: Ephemeral['resolve'] & Volatile['resolve'] }, Definitions['error'], Metadata['macro'], @@ -2901,11 +2883,7 @@ export default class Elysia< > schema: Prettify< MergeSchema< - UnwrapRoute< - LocalSchema, - Definitions['typebox'], - BasePath - >, + UnwrapRoute, MergeSchema< Volatile['schema'], MergeSchema @@ -2921,11 +2899,7 @@ export default class Elysia< >, const NewElysia extends AnyElysia, const Schema extends MergeSchema< - UnwrapRoute< - LocalSchema, - Definitions['typebox'], - BasePath - >, + UnwrapRoute, Metadata['schema'] > >( @@ -2960,11 +2934,7 @@ export default class Elysia< >, const NewElysia extends AnyElysia, const Schema extends MergeSchema< - UnwrapRoute< - LocalSchema, - Definitions['typebox'], - BasePath - >, + UnwrapRoute, Metadata['schema'] >, const Resolutions extends MaybeArray< @@ -2980,16 +2950,9 @@ export default class Elysia< schema: LocalHook< LocalSchema, Schema, - { - decorator: Singleton['decorator'] - store: Singleton['store'] - derive: Singleton['derive'] & - Ephemeral['derive'] & - Volatile['derive'] - resolve: Singleton['resolve'] & - Ephemeral['resolve'] & - Volatile['resolve'] & - ResolveResolutions + Singleton & { + derive: Ephemeral['derive'] & Volatile['derive'] + resolve: Ephemeral['resolve'] & Volatile['resolve'] }, Definitions['error'], Metadata['macro'], @@ -3805,9 +3768,7 @@ export default class Elysia< const Resolutions extends MaybeArray< ResolveHandler< Schema, - { - decorator: Singleton['decorator'] - store: Singleton['store'] + Singleton & { derive: Ephemeral['derive'] & Volatile['derive'] resolve: Ephemeral['resolve'] & Volatile['resolve'] } @@ -3914,8 +3875,7 @@ export default class Elysia< Singleton & { derive: Ephemeral['derive'] & Volatile['derive'] resolve: Ephemeral['resolve'] & - Volatile['resolve'] & - ResolveResolutions + Volatile['resolve'] }, JoinPath, Metadata['macroFn'], @@ -4774,9 +4734,7 @@ export default class Elysia< const Resolutions extends MaybeArray< ResolveHandler< Schema, - { - decorator: Singleton['decorator'] - store: Singleton['store'] + Singleton & { derive: Ephemeral['derive'] & Volatile['derive'] resolve: Ephemeral['resolve'] & Volatile['resolve'] } diff --git a/src/types.ts b/src/types.ts index b740ad68..361baa3d 100644 --- a/src/types.ts +++ b/src/types.ts @@ -992,7 +992,7 @@ export type DocumentDecoration = Partial & { export type ResolveHandler< in out Route extends RouteSchema, - Singleton extends SingletonBase, + in out Singleton extends SingletonBase, in out Derivative extends Record | void = Record< string, unknown @@ -1047,7 +1047,7 @@ export type LocalHook< Singleton extends SingletonBase, Errors extends Record, Extension extends BaseMacro, - Resolutions extends MaybeArray> + Resolutions extends MaybeArray> > = (LocalSchema extends {} ? LocalSchema : Isolate) & Extension & { /** @@ -1121,7 +1121,6 @@ export type LocalHook< */ error?: MaybeArray> tags?: DocumentDecoration['tags'] - websocket?: WSLocalHook } export type ComposedHandler = (context: Context) => MaybePromise @@ -1133,7 +1132,7 @@ export interface InternalRoute { handler: Handler compile(): Function hooks: LocalHook - websocket?: WSLocalHook + websocket?: WSLocalHook } export type SchemaValidator = { diff --git a/src/ws/types.ts b/src/ws/types.ts index e9a97e2d..50ae2095 100644 --- a/src/ws/types.ts +++ b/src/ws/types.ts @@ -17,7 +17,6 @@ import { OptionalHandler, Prettify, ResolveHandler, - ResolvePath, ResolveResolutions, RouteSchema, SingletonBase, @@ -126,19 +125,7 @@ export type WSLocalHook< Schema extends RouteSchema, Singleton extends SingletonBase, Extension extends BaseMacro, - Resolutions extends MaybeArray>, - Path extends string = '', - TypedRoute extends RouteSchema = Prettify< - Schema extends { - params: Record - } - ? Schema - : Schema & { - params: undefined extends Schema['params'] - ? ResolvePath - : Schema['params'] - } - > + Resolutions extends MaybeArray> > = (LocalSchema extends {} ? LocalSchema : Isolate) & Extension & { /** @@ -158,35 +145,21 @@ export type WSLocalHook< * Headers to register to websocket before `upgrade` */ upgrade?: Record | ((context: Context) => unknown) - parse?: MaybeArray> + parse?: MaybeArray> /** * Transform context's value */ - transform?: MaybeArray< - TransformHandler< - TypedRoute, - { - decorator: Singleton['decorator'] - store: Singleton['decorator'] - derive: Singleton['derive'] - resolve: {} - } - > - > + transform?: MaybeArray> resolve?: Resolutions /** * Execute before main handler */ beforeHandle?: MaybeArray< OptionalHandler< - TypedRoute, - { - decorator: Singleton['decorator'] - store: Singleton['decorator'] - derive: Singleton['derive'] - resolve: Singleton['resolve'] & - ResolveResolutions + Schema, + Singleton & { + resolve: ResolveResolutions } > > @@ -195,13 +168,9 @@ export type WSLocalHook< */ afterHandle?: MaybeArray< AfterHandler< - TypedRoute, - { - decorator: Singleton['decorator'] - store: Singleton['decorator'] - derive: Singleton['derive'] - resolve: Singleton['resolve'] & - ResolveResolutions + Schema, + Singleton & { + resolve: ResolveResolutions } > > @@ -210,13 +179,9 @@ export type WSLocalHook< */ mapResponse?: MaybeArray< MapResponse< - TypedRoute, - { - decorator: Singleton['decorator'] - store: Singleton['decorator'] - derive: Singleton['derive'] - resolve: Singleton['resolve'] & - ResolveResolutions + Schema, + Singleton & { + resolve: ResolveResolutions } > > @@ -225,25 +190,21 @@ export type WSLocalHook< */ afterResponse?: MaybeArray< AfterResponseHandler< - TypedRoute, - { - decorator: Singleton['decorator'] - store: Singleton['decorator'] - derive: Singleton['derive'] - resolve: Singleton['resolve'] & - ResolveResolutions + Schema, + Singleton & { + resolve: ResolveResolutions } > > /** * Catch error */ - error?: MaybeArray> + error?: MaybeArray> tags?: DocumentDecoration['tags'] } & TypedWebSocketHandler< Omit< Context< - TypedRoute, + Schema, Singleton & { resolve: ResolveResolutions } @@ -252,5 +213,5 @@ export type WSLocalHook< > & { body: never }, - TypedRoute + Schema >