@@ -54,17 +54,18 @@ export class AlephAPIRequest implements APIRequest {
54
54
55
55
export class AlephAPIResponse implements APIResponse {
56
56
#req: ServerRequest
57
- #headers: Headers
58
57
#status: number
58
+ #headers: Headers
59
+ #sent: boolean
59
60
60
61
constructor ( req : ServerRequest ) {
61
62
this . #req = req
63
+ this . #status = 200
62
64
this . #headers = new Headers ( {
63
65
'Status' : '200' ,
64
66
'Server' : 'Aleph.js' ,
65
- 'Date' : ( new Date ) . toUTCString ( ) ,
66
67
} )
67
- this . #status = 200
68
+ this . #sent = false
68
69
}
69
70
70
71
status ( code : number ) : this {
@@ -95,7 +96,16 @@ export class AlephAPIResponse implements APIResponse {
95
96
} ) . catch ( err => log . warn ( 'ServerRequest.respond:' , err . message ) )
96
97
}
97
98
99
+ async json ( data : any , replacer ?: ( this : any , key : string , value : any ) => any , space ?: string | number ) {
100
+ return this . send ( JSON . stringify ( data , replacer , space ) , 'application/json' , true )
101
+ }
102
+
98
103
async send ( data : string | Uint8Array | ArrayBuffer , contentType ?: string , gzip = false ) {
104
+ if ( this . #sent) {
105
+ log . warn ( 'ServerRequest.respond: repeat send calls' )
106
+ return
107
+ }
108
+
99
109
let body : Uint8Array
100
110
if ( typeof data === 'string' ) {
101
111
body = new TextEncoder ( ) . encode ( data )
@@ -114,19 +124,12 @@ export class AlephAPIResponse implements APIResponse {
114
124
this . #headers. set ( 'Content-Encoding' , 'gzip' )
115
125
body = gzipEncode ( body )
116
126
}
127
+ this . #headers. set ( 'Date' , ( new Date ) . toUTCString ( ) )
128
+ this . #sent = true
117
129
return this . #req. respond ( {
118
130
status : this . #status,
119
131
headers : this . #headers,
120
132
body
121
133
} ) . catch ( err => log . warn ( 'ServerRequest.respond:' , err . message ) )
122
134
}
123
-
124
- async json ( data : any ) {
125
- this . #headers. set ( 'Content-Type' , 'application/json' )
126
- return this . #req. respond ( {
127
- status : this . #status,
128
- headers : this . #headers,
129
- body : JSON . stringify ( data )
130
- } ) . catch ( err => log . warn ( 'ServerRequest.respond:' , err . message ) )
131
- }
132
135
}
0 commit comments