77 * file that was distributed with this source code.
88 */
99
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'
2013import { HttpMethodTypes } from './Contracts/HttpMethodTypes'
14+ import { defaultErrorHandler } from './Utils/defaultErrorHandler'
2115import { 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- }
2916
3017export class Http {
3118 private readonly server : FastifyInstance
3219
3320 constructor ( ) {
3421 this . server = fastify ( )
35- this . server . setErrorHandler ( Http . defaultErrorHandler )
22+ this . setErrorHandler ( defaultErrorHandler )
3623 }
3724
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 )
6127
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 )
8329 }
8430
8531 getServer ( ) : FastifyInstance {
@@ -91,23 +37,7 @@ export class Http {
9137 }
9238
9339 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 ) )
11141 }
11242
11343 listen (
@@ -130,9 +60,10 @@ export class Http {
13060 this . server . route ( {
13161 url,
13262 method : methods ,
133- handler : this . createFastifyHandler ( handler ) ,
63+ handler : FastifyHandler . createRequestHandler ( handler ) ,
13464 preHandler :
135- middlewares && middlewares . map ( mid => this . createFastifyHandler ( mid ) ) ,
65+ middlewares &&
66+ middlewares . map ( mid => FastifyHandler . createPreHandler ( mid ) ) ,
13667 } )
13768 }
13869
0 commit comments