@@ -6,44 +6,55 @@ import type {
66} from "./HttpStatus.ts" ;
77import { HttpStatus } from "./HttpStatus.ts" ;
88
9- export interface IHttpErreurData {
9+ export interface THttpErreurData {
1010 name : HttpStatusName ;
1111 code : HttpStatusCode ;
1212 message : HttpStatusMessage ;
1313}
1414
15- const HttpErreurInternal : TErreurStore < IHttpErreurData > = createErreurStore <
16- IHttpErreurData
15+ const HttpErreurInternal : TErreurStore < THttpErreurData > = createErreurStore <
16+ THttpErreurData
1717> ( ) ;
1818
1919export const HttpErreur = HttpErreurInternal . asReadonly ;
2020
21+ export function markHttpErreur (
22+ error : unknown ,
23+ codeOrName : HttpStatusCode | HttpStatusName = 500 ,
24+ message ?: HttpStatusMessage ,
25+ ) : Error {
26+ return HttpErreurInternal . setAndReturn (
27+ error ,
28+ resolveHttpErrorParams ( codeOrName , message ) ,
29+ ) ;
30+ }
31+
2132export function createHttpErreur (
2233 codeOrName : HttpStatusCode | HttpStatusName = 500 ,
23- messageOrCause ?: HttpStatusMessage | Error ,
34+ message ?: HttpStatusMessage ,
35+ cause ?: Error ,
2436) : Error {
37+ const httpError = resolveHttpErrorParams ( codeOrName , message ) ;
38+ const error = new Error ( `${ httpError . message } (${ httpError . name } )` , {
39+ cause,
40+ } ) ;
41+ return HttpErreurInternal . setAndReturn ( error , httpError ) ;
42+ }
43+
44+ function resolveHttpErrorParams (
45+ codeOrName : HttpStatusCode | HttpStatusName = 500 ,
46+ message ?: HttpStatusMessage ,
47+ ) : THttpErreurData {
2548 const code : HttpStatusCode = typeof codeOrName === "number"
2649 ? codeOrName
2750 : HttpStatus . fromName ( codeOrName ) . code ;
2851 const status = HttpStatus . fromCode ( code ) ;
29- const messageStr = messageOrCause
30- ? typeof messageOrCause === "string"
31- ? messageOrCause
32- : messageOrCause . message
33- : undefined ;
34- const fullMessage = `${ code } ${ status . name } ${
35- messageStr ? `: ${ messageStr } ` : ""
36- } `;
37- const error = messageOrCause instanceof Error
38- ? messageOrCause
39- : new Error ( fullMessage ) ;
40- return HttpErreurInternal . setAndReturn ( error , {
41- code,
42- name : status . name ,
43- message : messageStr ?? status . message ,
44- } ) ;
52+ const messageResolved = message ?? status . message ;
53+ return { code, name : status . name , message : messageResolved } ;
4554}
4655
56+ /** */
57+
4758export type THttpErreurDetailsData =
4859 | { type : "Unauthorized" ; reason ?: string }
4960 | { type : "NotFound" }
@@ -59,82 +70,124 @@ const HttpErreurDetailsInternal: TErreurStore<THttpErreurDetailsData> =
5970
6071export const HttpErreurDetails = HttpErreurDetailsInternal . asReadonly ;
6172
62- export function createUnauthorized ( reason ?: string ) : Error {
73+ export function markUnauthorized ( error : unknown , reason ?: string ) : Error {
74+ return HttpErreurDetailsInternal . setAndReturn (
75+ markHttpErreur ( error , "Unauthorized" , "Unauthorized" ) ,
76+ { type : "Unauthorized" , reason } ,
77+ ) ;
78+ }
79+
80+ export function createUnauthorized ( reason ?: string , cause ?: Error ) : Error {
81+ return HttpErreurDetailsInternal . setAndReturn (
82+ createHttpErreur ( "Unauthorized" , "Unauthorized" , cause ) ,
83+ { type : "Unauthorized" , reason } ,
84+ ) ;
85+ }
86+
87+ export function markNotFound ( error : unknown ) : Error {
6388 return HttpErreurDetailsInternal . setAndReturn (
64- createHttpErreur ( "Unauthorized" , "Unauthorized" ) ,
65- {
66- type : "Unauthorized" ,
67- reason,
68- } ,
89+ markHttpErreur ( error , "NotFound" , "Not Found" ) ,
90+ { type : "NotFound" } ,
6991 ) ;
7092}
7193
72- export function createNotFound ( ) : Error {
94+ export function createNotFound ( cause ?: Error ) : Error {
7395 return HttpErreurDetailsInternal . setAndReturn (
74- createHttpErreur ( "NotFound" , "Not Found" ) ,
96+ createHttpErreur ( "NotFound" , "Not Found" , cause ) ,
7597 { type : "NotFound" } ,
7698 ) ;
7799}
78100
79- export function createNotAcceptable ( ) : Error {
101+ export function markNotAcceptable ( error : unknown ) : Error {
102+ return HttpErreurDetailsInternal . setAndReturn (
103+ markHttpErreur ( error , "NotAcceptable" , "Not Acceptable" ) ,
104+ { type : "NotAcceptable" } ,
105+ ) ;
106+ }
107+
108+ export function createNotAcceptable ( cause ?: Error ) : Error {
80109 return HttpErreurDetailsInternal . setAndReturn (
81- createHttpErreur ( "NotAcceptable" , "Not Acceptable" ) ,
82- {
83- type : "NotAcceptable" ,
84- } ,
110+ createHttpErreur ( "NotAcceptable" , "Not Acceptable" , cause ) ,
111+ { type : "NotAcceptable" } ,
85112 ) ;
86113}
87114
88- export function createBadRequest ( message ?: string ) : Error {
115+ export function markBadRequest ( error : unknown , message ?: string ) : Error {
89116 return HttpErreurDetailsInternal . setAndReturn (
90- createHttpErreur ( "BadRequest" , message ?? "Bad Request" ) ,
91- {
92- type : "BadRequest" ,
93- message,
94- } ,
117+ markHttpErreur ( error , "BadRequest" , message ?? "Bad Request" ) ,
118+ { type : "BadRequest" , message } ,
95119 ) ;
96120}
97121
98- export function createForbidden ( reason ?: string ) : Error {
122+ export function createBadRequest ( message ?: string , cause ?: Error ) : Error {
99123 return HttpErreurDetailsInternal . setAndReturn (
100- createHttpErreur ( "Forbidden" , "Forbidden" ) ,
101- {
102- type : "Forbidden" ,
103- reason,
104- } ,
124+ createHttpErreur ( "BadRequest" , message ?? "Bad Request" , cause ) ,
125+ { type : "BadRequest" , message } ,
126+ ) ;
127+ }
128+
129+ export function markForbidden ( error : unknown , reason ?: string ) : Error {
130+ return HttpErreurDetailsInternal . setAndReturn (
131+ markHttpErreur ( error , "Forbidden" , "Forbidden" ) ,
132+ { type : "Forbidden" , reason } ,
133+ ) ;
134+ }
135+
136+ export function createForbidden ( reason ?: string , cause ?: Error ) : Error {
137+ return HttpErreurDetailsInternal . setAndReturn (
138+ createHttpErreur ( "Forbidden" , "Forbidden" , cause ) ,
139+ { type : "Forbidden" , reason } ,
140+ ) ;
141+ }
142+
143+ export function markInternalServerError (
144+ error : unknown ,
145+ message ?: string ,
146+ ) : Error {
147+ return HttpErreurDetailsInternal . setAndReturn (
148+ markHttpErreur ( error , "InternalServerError" , message ) ,
149+ { type : "InternalServerError" , message } ,
105150 ) ;
106151}
107152
108153export function createInternalServerError (
109- messageOrCause ?: string | Error ,
154+ message ?: string ,
155+ cause ?: Error ,
156+ ) : Error {
157+ return HttpErreurDetailsInternal . setAndReturn (
158+ createHttpErreur ( "InternalServerError" , message , cause ) ,
159+ { type : "InternalServerError" , message } ,
160+ ) ;
161+ }
162+
163+ export function markServerDidNotRespond (
164+ error : unknown ,
165+ ) : Error {
166+ return HttpErreurDetailsInternal . setAndReturn (
167+ markHttpErreur ( error , "InternalServerError" , "Server did not respond" ) ,
168+ { type : "ServerDidNotRespond" } ,
169+ ) ;
170+ }
171+
172+ export function createServerDidNotRespond (
173+ cause ?: Error ,
110174) : Error {
111175 return HttpErreurDetailsInternal . setAndReturn (
112- createHttpErreur (
113- "InternalServerError" ,
114- messageOrCause ?? "Internal Server Error" ,
115- ) ,
116- {
117- type : "InternalServerError" ,
118- message : messageOrCause instanceof Error ? undefined : messageOrCause ,
119- } ,
176+ createHttpErreur ( "InternalServerError" , "Server did not respond" , cause ) ,
177+ { type : "ServerDidNotRespond" } ,
120178 ) ;
121179}
122180
123- export function createServerDidNotRespond ( ) : Error {
181+ export function markTooManyRequests ( error : unknown , reason ?: string ) : Error {
124182 return HttpErreurDetailsInternal . setAndReturn (
125- createHttpErreur ( "InternalServerError" , "Server did not respond" ) ,
126- {
127- type : "ServerDidNotRespond" ,
128- } ,
183+ markHttpErreur ( error , "TooManyRequests" , reason ) ,
184+ { type : "TooManyRequests" , reason } ,
129185 ) ;
130186}
131187
132- export function createTooManyRequests ( reason ?: string ) : Error {
188+ export function createTooManyRequests ( reason ?: string , cause ?: Error ) : Error {
133189 return HttpErreurDetailsInternal . setAndReturn (
134- createHttpErreur ( "TooManyRequests" ) ,
135- {
136- type : "TooManyRequests" ,
137- reason,
138- } ,
190+ createHttpErreur ( "TooManyRequests" , reason , cause ) ,
191+ { type : "TooManyRequests" , reason } ,
139192 ) ;
140193}
0 commit comments