7
7
* file that was distributed with this source code.
8
8
*/
9
9
10
- import fastify , {
11
- FastifyInstance ,
12
- FastifyReply ,
13
- FastifyRequest ,
14
- PrintRoutesOptions ,
15
- } from 'fastify'
16
-
17
- import { String } from '@secjs/utils'
18
- import { Request } from './Context/Request'
19
- import { Response } from './Context/Response'
10
+ import fastify , { FastifyInstance , PrintRoutesOptions } from 'fastify'
11
+
12
+ import { FastifyHandler } from './Utils/FastifyHandler'
20
13
import { HttpMethodTypes } from './Contracts/HttpMethodTypes'
14
+ import { defaultErrorHandler } from './Utils/defaultErrorHandler'
21
15
import { HandlerContract } from './Contracts/Context/HandlerContract'
22
- import { FastifyHandlerContract } from './Contracts/FastifyHandlerContract'
23
-
24
- declare module 'fastify' {
25
- interface FastifyRequest {
26
- data : Record < string , any >
27
- }
28
- }
29
16
30
17
export class Http {
31
18
private readonly server : FastifyInstance
32
19
33
20
constructor ( ) {
34
21
this . server = fastify ( )
35
- this . server . setErrorHandler ( Http . defaultErrorHandler )
22
+ this . setErrorHandler ( defaultErrorHandler )
36
23
}
37
24
38
- private static defaultErrorHandler (
39
- error : any ,
40
- request : FastifyRequest ,
41
- reply : FastifyReply ,
42
- ) {
43
- const code = error . code || error . name
44
- const statusCode = error . statusCode || error . status || 500
45
-
46
- const body = {
47
- code : String . toSnakeCase ( code ) . toUpperCase ( ) ,
48
- path : request . url ,
49
- method : request . method ,
50
- status : statusCode <= 399 ? 'SUCCESS' : 'ERROR' ,
51
- statusCode : statusCode ,
52
- error : {
53
- name : error . name ,
54
- message : error . message ,
55
- stack : error . stack ,
56
- } ,
57
- }
58
-
59
- reply . status ( statusCode ) . send ( body )
60
- }
25
+ setErrorHandler ( handler : HandlerContract ) {
26
+ const fastifyErrorHandler = FastifyHandler . createErrorHandler ( handler )
61
27
62
- private createFastifyHandler (
63
- handler : ( ctx ) => Promise < void > | void ,
64
- ) : FastifyHandlerContract {
65
- return async ( req : FastifyRequest , res : FastifyReply ) => {
66
- const request = new Request ( req )
67
- const response = new Response ( res )
68
-
69
- if ( ! req . data ) req . data = { }
70
- if ( ! req . query ) req . query = { }
71
- if ( ! req . params ) req . params = { }
72
-
73
- return handler ( {
74
- request,
75
- response,
76
- params : req . params ,
77
- queries : req . query ,
78
- data : req . data ,
79
- // eslint-disable-next-line @typescript-eslint/no-empty-function
80
- next : ( ) => { } ,
81
- } )
82
- }
28
+ this . server . setErrorHandler ( fastifyErrorHandler )
83
29
}
84
30
85
31
getServer ( ) : FastifyInstance {
@@ -91,23 +37,7 @@ export class Http {
91
37
}
92
38
93
39
use ( handler : HandlerContract ) {
94
- this . server . addHook ( 'preHandler' , ( req , res , done ) => {
95
- const request = new Request ( req )
96
- const response = new Response ( res )
97
-
98
- if ( ! req . data ) req . data = { }
99
- if ( ! req . query ) req . query = { }
100
- if ( ! req . params ) req . params = { }
101
-
102
- return handler ( {
103
- request,
104
- response,
105
- params : req . params as Record < string , string > ,
106
- queries : req . query as Record < string , string > ,
107
- data : req . data ,
108
- next : done ,
109
- } )
110
- } )
40
+ this . server . addHook ( 'preHandler' , FastifyHandler . createPreHandler ( handler ) )
111
41
}
112
42
113
43
listen (
@@ -130,9 +60,10 @@ export class Http {
130
60
this . server . route ( {
131
61
url,
132
62
method : methods ,
133
- handler : this . createFastifyHandler ( handler ) ,
63
+ handler : FastifyHandler . createRequestHandler ( handler ) ,
134
64
preHandler :
135
- middlewares && middlewares . map ( mid => this . createFastifyHandler ( mid ) ) ,
65
+ middlewares &&
66
+ middlewares . map ( mid => FastifyHandler . createPreHandler ( mid ) ) ,
136
67
} )
137
68
}
138
69
0 commit comments