@wooksjs/event-http 0.4.27 → 0.4.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +31 -21
- package/dist/index.d.ts +18 -9
- package/dist/index.mjs +31 -21
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -90,7 +90,7 @@ function useRequest() {
|
|
|
90
90
|
const { init } = store('request');
|
|
91
91
|
const event = store('event');
|
|
92
92
|
const req = event.get('req');
|
|
93
|
-
const rawBody =
|
|
93
|
+
const rawBody = () => init('rawBody', () => new Promise((resolve, reject) => {
|
|
94
94
|
let body = Buffer.from('');
|
|
95
95
|
req.on('data', chunk => {
|
|
96
96
|
body = Buffer.concat([body, chunk]);
|
|
@@ -113,7 +113,12 @@ function useRequest() {
|
|
|
113
113
|
});
|
|
114
114
|
const remoteIp = () => init('remoteIp', () => req.socket.remoteAddress || req.connection.remoteAddress || '');
|
|
115
115
|
function getIp(options) {
|
|
116
|
-
|
|
116
|
+
if (options?.trustProxy) {
|
|
117
|
+
return forwardedIp() || getIp();
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
return remoteIp();
|
|
121
|
+
}
|
|
117
122
|
}
|
|
118
123
|
const getIpList = () => init('ipList', () => ({
|
|
119
124
|
remoteIp: req.socket.remoteAddress || req.connection.remoteAddress || '',
|
|
@@ -191,7 +196,7 @@ function useSetCookies() {
|
|
|
191
196
|
function cookies() {
|
|
192
197
|
return cookiesStore
|
|
193
198
|
.entries()
|
|
194
|
-
.filter(a =>
|
|
199
|
+
.filter(a => !!a[1])
|
|
195
200
|
.map(([key, value]) => renderCookie(key, value));
|
|
196
201
|
}
|
|
197
202
|
return {
|
|
@@ -208,15 +213,15 @@ function useSetCookie(name) {
|
|
|
208
213
|
name,
|
|
209
214
|
type: 'cookie',
|
|
210
215
|
}, {
|
|
211
|
-
get: () => getCookie(name)
|
|
216
|
+
get: () => getCookie(name)?.value,
|
|
212
217
|
set: (value) => {
|
|
213
|
-
setCookie(name, value, getCookie(name)
|
|
218
|
+
setCookie(name, value, getCookie(name)?.attrs);
|
|
214
219
|
},
|
|
215
220
|
});
|
|
216
221
|
return eventCore.attachHook(valueHook, {
|
|
217
|
-
get: () => getCookie(name)
|
|
222
|
+
get: () => getCookie(name)?.attrs,
|
|
218
223
|
set: (attrs) => {
|
|
219
|
-
setCookie(name, getCookie(name)
|
|
224
|
+
setCookie(name, getCookie(name)?.value || '', attrs);
|
|
220
225
|
},
|
|
221
226
|
}, 'attrs');
|
|
222
227
|
}
|
|
@@ -227,7 +232,7 @@ function useAccept() {
|
|
|
227
232
|
const accepts = (mime) => {
|
|
228
233
|
const { set, get, has } = store('accept');
|
|
229
234
|
if (!has(mime)) {
|
|
230
|
-
return set(mime,
|
|
235
|
+
return set(mime, !!(accept && (accept === '*/*' || accept.includes(mime))));
|
|
231
236
|
}
|
|
232
237
|
return get(mime);
|
|
233
238
|
};
|
|
@@ -342,7 +347,7 @@ function useResponse() {
|
|
|
342
347
|
const responded = store('response').hook('responded');
|
|
343
348
|
const statusCode = store('status').hook('code');
|
|
344
349
|
function status(code) {
|
|
345
|
-
return (statusCode.value = code
|
|
350
|
+
return (statusCode.value = code ? code : statusCode.value);
|
|
346
351
|
}
|
|
347
352
|
const rawResponse = (options) => {
|
|
348
353
|
if (!options || !options.passthrough) {
|
|
@@ -574,7 +579,7 @@ class HttpErrorRenderer extends BaseHttpResponseRenderer {
|
|
|
574
579
|
`<head><title>${data.statusCode} ${httpStatusCodes[data.statusCode]}</title></head>` +
|
|
575
580
|
`<body><center><h1>${data.statusCode} ${httpStatusCodes[data.statusCode]}</h1></center>` +
|
|
576
581
|
`<center><h4>${data.message}</h1></center><hr color="#666">` +
|
|
577
|
-
`<center style="color: #666;"> Wooks v${"0.4.
|
|
582
|
+
`<center style="color: #666;"> Wooks v${"0.4.28"} </center>` +
|
|
578
583
|
`${keys.length > 0
|
|
579
584
|
? `<pre style="${preStyles}">${JSON.stringify({
|
|
580
585
|
...data,
|
|
@@ -607,8 +612,7 @@ class HttpErrorRenderer extends BaseHttpResponseRenderer {
|
|
|
607
612
|
`"error":"${escapeQuotes(data.error)}",` +
|
|
608
613
|
`"message":"${escapeQuotes(data.message)}"` +
|
|
609
614
|
`${keys.length > 0
|
|
610
|
-
?
|
|
611
|
-
`,${keys.map(k => `"${escapeQuotes(k)}":${JSON.stringify(data[k])}`).join(',')}`
|
|
615
|
+
? `,${keys.map(k => `"${escapeQuotes(k)}":${JSON.stringify(data[k])}`).join(',')}`
|
|
612
616
|
: ''}}`);
|
|
613
617
|
}
|
|
614
618
|
render(response) {
|
|
@@ -767,7 +771,7 @@ class BaseHttpResponse {
|
|
|
767
771
|
async respond() {
|
|
768
772
|
const { rawResponse, hasResponded } = useResponse();
|
|
769
773
|
const { method, rawRequest } = useRequest();
|
|
770
|
-
const logger = eventCore.useEventLogger('http-response');
|
|
774
|
+
const logger = eventCore.useEventLogger('http-response') || console;
|
|
771
775
|
if (hasResponded()) {
|
|
772
776
|
this.panic('The response was already sent.', logger);
|
|
773
777
|
}
|
|
@@ -854,7 +858,13 @@ function createWooksResponder(renderer = new BaseHttpResponseRenderer(), errorRe
|
|
|
854
858
|
}
|
|
855
859
|
if (data instanceof Error) {
|
|
856
860
|
const r = new BaseHttpResponse(errorRenderer);
|
|
857
|
-
|
|
861
|
+
let httpError;
|
|
862
|
+
if (data instanceof HttpError) {
|
|
863
|
+
httpError = data;
|
|
864
|
+
}
|
|
865
|
+
else {
|
|
866
|
+
httpError = new HttpError(500, data.message);
|
|
867
|
+
}
|
|
858
868
|
r.setBody(httpError.body);
|
|
859
869
|
return r;
|
|
860
870
|
}
|
|
@@ -867,7 +877,7 @@ function createWooksResponder(renderer = new BaseHttpResponseRenderer(), errorRe
|
|
|
867
877
|
}
|
|
868
878
|
return {
|
|
869
879
|
createResponse,
|
|
870
|
-
respond:
|
|
880
|
+
respond: (data) => createResponse(data)?.respond(),
|
|
871
881
|
};
|
|
872
882
|
}
|
|
873
883
|
|
|
@@ -902,15 +912,15 @@ class WooksHttp extends wooks.WooksAdapterBase {
|
|
|
902
912
|
options(path, handler) {
|
|
903
913
|
return this.on('OPTIONS', path, handler);
|
|
904
914
|
}
|
|
905
|
-
async listen(
|
|
915
|
+
async listen(port, hostname, backlog, listeningListener) {
|
|
906
916
|
const server = (this.server = http.createServer(this.getServerCb()));
|
|
907
917
|
return new Promise((resolve, reject) => {
|
|
908
918
|
server.once('listening', resolve);
|
|
909
919
|
server.once('error', reject);
|
|
910
|
-
server.listen(
|
|
920
|
+
server.listen(port, hostname, backlog, listeningListener);
|
|
911
921
|
});
|
|
912
922
|
}
|
|
913
|
-
|
|
923
|
+
close(server) {
|
|
914
924
|
const srv = server || this.server;
|
|
915
925
|
return new Promise((resolve, reject) => {
|
|
916
926
|
srv?.close(err => {
|
|
@@ -929,8 +939,8 @@ class WooksHttp extends wooks.WooksAdapterBase {
|
|
|
929
939
|
this.server = server;
|
|
930
940
|
}
|
|
931
941
|
respond(data) {
|
|
932
|
-
void this.responder.respond(data)
|
|
933
|
-
this.logger.error('Uncought response exception',
|
|
942
|
+
void this.responder.respond(data)?.catch(e => {
|
|
943
|
+
this.logger.error('Uncought response exception', e);
|
|
934
944
|
});
|
|
935
945
|
}
|
|
936
946
|
getServerCb() {
|
|
@@ -970,7 +980,7 @@ class WooksHttp extends wooks.WooksAdapterBase {
|
|
|
970
980
|
break;
|
|
971
981
|
}
|
|
972
982
|
catch (error) {
|
|
973
|
-
this.logger.error(`Uncought route handler exception: ${store('event').get('req')
|
|
983
|
+
this.logger.error(`Uncought route handler exception: ${store('event').get('req')?.url || ''}`, error);
|
|
974
984
|
if (isLastHandler) {
|
|
975
985
|
restoreCtx();
|
|
976
986
|
this.respond(error);
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { IncomingMessage, ServerResponse, IncomingHttpHeaders, Server } from 'ht
|
|
|
5
5
|
import { URLSearchParams } from 'url';
|
|
6
6
|
import { TConsoleBase } from '@prostojs/logger';
|
|
7
7
|
import * as _prostojs_router from '@prostojs/router';
|
|
8
|
+
import { ListenOptions } from 'net';
|
|
8
9
|
import { TWooksHandler, TWooksOptions, WooksAdapterBase, Wooks } from 'wooks';
|
|
9
10
|
|
|
10
11
|
declare const httpStatusCodes: {
|
|
@@ -214,7 +215,7 @@ declare function useCookies(): {
|
|
|
214
215
|
};
|
|
215
216
|
declare function useSetCookies(): {
|
|
216
217
|
setCookie: (name: string, value: string, attrs?: Partial<TCookieAttributes>) => void;
|
|
217
|
-
getCookie: <K2 extends string>(key2: K2) => TSetCookieData;
|
|
218
|
+
getCookie: <K2 extends string>(key2: K2) => TSetCookieData | undefined;
|
|
218
219
|
removeCookie: <K2_1 extends string>(key2: K2_1) => void;
|
|
219
220
|
clearCookies: () => void;
|
|
220
221
|
cookies: () => string[];
|
|
@@ -269,7 +270,7 @@ declare function useSetCacheControl(): {
|
|
|
269
270
|
declare function useHeaders(): IncomingHttpHeaders;
|
|
270
271
|
declare function useSetHeaders(): {
|
|
271
272
|
setHeader: (name: string, value: string | number) => void;
|
|
272
|
-
getHeader: <K2 extends string>(key2: K2) => string | string[];
|
|
273
|
+
getHeader: <K2 extends string>(key2: K2) => string | string[] | undefined;
|
|
273
274
|
removeHeader: <K2_1 extends string>(key2: K2_1) => void;
|
|
274
275
|
setContentType: (value: string) => void;
|
|
275
276
|
headers: () => Record<string, string | string[]>;
|
|
@@ -383,14 +384,14 @@ declare function createHttpContext(data: THttpEventData, options: TEventOptions)
|
|
|
383
384
|
restoreCtx: () => _wooksjs_event_core.TGenericContextStore<TEmpty>;
|
|
384
385
|
clearCtx: () => null;
|
|
385
386
|
store: <K extends keyof THttpContextStore | keyof _wooksjs_event_core.TGenericContextStore<THttpEventData>>(key: K) => {
|
|
386
|
-
value: (THttpContextStore & _wooksjs_event_core.TGenericContextStore<THttpEventData>)[K]
|
|
387
|
+
value: (THttpContextStore & _wooksjs_event_core.TGenericContextStore<THttpEventData>)[K];
|
|
387
388
|
hook: <K2 extends keyof Required<THttpContextStore & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K]>(key2: K2) => {
|
|
388
389
|
value: Required<THttpContextStore & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K][K2];
|
|
389
390
|
isDefined: boolean;
|
|
390
391
|
};
|
|
391
392
|
init: <K2_1 extends keyof Required<THttpContextStore & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K]>(key2: K2_1, getter: () => Required<Required<THttpContextStore & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K]>[K2_1]) => Required<Required<THttpContextStore & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K]>[K2_1];
|
|
392
393
|
set: <K2_2 extends keyof Required<THttpContextStore & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K]>(key2: K2_2, v: Required<(THttpContextStore & _wooksjs_event_core.TGenericContextStore<THttpEventData>)[K]>[K2_2]) => Required<(THttpContextStore & _wooksjs_event_core.TGenericContextStore<THttpEventData>)[K]>[K2_2];
|
|
393
|
-
get: <K2_3 extends keyof Required<THttpContextStore & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K]>(key2: K2_3) => Required<THttpContextStore & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K][K2_3];
|
|
394
|
+
get: <K2_3 extends keyof Required<THttpContextStore & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K]>(key2: K2_3) => Required<THttpContextStore & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K][K2_3] | undefined;
|
|
394
395
|
has: <K2_4 extends keyof Required<THttpContextStore & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K]>(key2: K2_4) => boolean;
|
|
395
396
|
del: <K2_5 extends keyof Required<THttpContextStore & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K]>(key2: K2_5) => void;
|
|
396
397
|
entries: () => [string, unknown][];
|
|
@@ -408,14 +409,14 @@ declare function useHttpContext<T extends TEmpty>(): {
|
|
|
408
409
|
restoreCtx: () => _wooksjs_event_core.TGenericContextStore<TEmpty>;
|
|
409
410
|
clearCtx: () => null;
|
|
410
411
|
store: <K extends keyof THttpContextStore | keyof _wooksjs_event_core.TGenericContextStore<THttpEventData> | keyof T>(key: K) => {
|
|
411
|
-
value: (THttpContextStore & T & _wooksjs_event_core.TGenericContextStore<THttpEventData>)[K]
|
|
412
|
+
value: (THttpContextStore & T & _wooksjs_event_core.TGenericContextStore<THttpEventData>)[K];
|
|
412
413
|
hook: <K2 extends keyof Required<THttpContextStore & T & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K]>(key2: K2) => {
|
|
413
414
|
value: Required<THttpContextStore & T & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K][K2];
|
|
414
415
|
isDefined: boolean;
|
|
415
416
|
};
|
|
416
417
|
init: <K2_1 extends keyof Required<THttpContextStore & T & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K]>(key2: K2_1, getter: () => Required<Required<THttpContextStore & T & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K]>[K2_1]) => Required<Required<THttpContextStore & T & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K]>[K2_1];
|
|
417
418
|
set: <K2_2 extends keyof Required<THttpContextStore & T & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K]>(key2: K2_2, v: Required<(THttpContextStore & T & _wooksjs_event_core.TGenericContextStore<THttpEventData>)[K]>[K2_2]) => Required<(THttpContextStore & T & _wooksjs_event_core.TGenericContextStore<THttpEventData>)[K]>[K2_2];
|
|
418
|
-
get: <K2_3 extends keyof Required<THttpContextStore & T & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K]>(key2: K2_3) => Required<THttpContextStore & T & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K][K2_3];
|
|
419
|
+
get: <K2_3 extends keyof Required<THttpContextStore & T & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K]>(key2: K2_3) => Required<THttpContextStore & T & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K][K2_3] | undefined;
|
|
419
420
|
has: <K2_4 extends keyof Required<THttpContextStore & T & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K]>(key2: K2_4) => boolean;
|
|
420
421
|
del: <K2_5 extends keyof Required<THttpContextStore & T & _wooksjs_event_core.TGenericContextStore<THttpEventData>>[K]>(key2: K2_5) => void;
|
|
421
422
|
entries: () => [string, unknown][];
|
|
@@ -427,7 +428,7 @@ declare function useHttpContext<T extends TEmpty>(): {
|
|
|
427
428
|
|
|
428
429
|
declare function createWooksResponder(renderer?: TWooksResponseRenderer<any>, errorRenderer?: TWooksResponseRenderer<any>): {
|
|
429
430
|
createResponse: <T = unknown>(data: T) => BaseHttpResponse<TWooksErrorBodyExt | T> | null;
|
|
430
|
-
respond: (data: unknown) => Promise<unknown
|
|
431
|
+
respond: (data: unknown) => Promise<unknown> | undefined;
|
|
431
432
|
};
|
|
432
433
|
|
|
433
434
|
interface TWooksHttpOptions {
|
|
@@ -454,7 +455,15 @@ declare class WooksHttp extends WooksAdapterBase {
|
|
|
454
455
|
*
|
|
455
456
|
* Use this only if you rely on Wooks server.
|
|
456
457
|
*/
|
|
457
|
-
listen(
|
|
458
|
+
listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this;
|
|
459
|
+
listen(port?: number, hostname?: string, listeningListener?: () => void): this;
|
|
460
|
+
listen(port?: number, backlog?: number, listeningListener?: () => void): this;
|
|
461
|
+
listen(port?: number, listeningListener?: () => void): this;
|
|
462
|
+
listen(path: string, backlog?: number, listeningListener?: () => void): this;
|
|
463
|
+
listen(path: string, listeningListener?: () => void): this;
|
|
464
|
+
listen(options: ListenOptions, listeningListener?: () => void): this;
|
|
465
|
+
listen(handle: any, backlog?: number, listeningListener?: () => void): this;
|
|
466
|
+
listen(handle: any, listeningListener?: () => void): this;
|
|
458
467
|
/**
|
|
459
468
|
* Stops the server if it was attached or passed via argument
|
|
460
469
|
* @param server
|
|
@@ -477,7 +486,7 @@ declare class WooksHttp extends WooksAdapterBase {
|
|
|
477
486
|
attachServer(server?: Server): void;
|
|
478
487
|
protected responder: {
|
|
479
488
|
createResponse: <T = unknown>(data: T) => BaseHttpResponse<TWooksErrorBodyExt | T> | null;
|
|
480
|
-
respond: (data: unknown) => Promise<unknown
|
|
489
|
+
respond: (data: unknown) => Promise<unknown> | undefined;
|
|
481
490
|
};
|
|
482
491
|
protected respond(data: unknown): void;
|
|
483
492
|
/**
|
package/dist/index.mjs
CHANGED
|
@@ -88,7 +88,7 @@ function useRequest() {
|
|
|
88
88
|
const { init } = store('request');
|
|
89
89
|
const event = store('event');
|
|
90
90
|
const req = event.get('req');
|
|
91
|
-
const rawBody =
|
|
91
|
+
const rawBody = () => init('rawBody', () => new Promise((resolve, reject) => {
|
|
92
92
|
let body = Buffer.from('');
|
|
93
93
|
req.on('data', chunk => {
|
|
94
94
|
body = Buffer.concat([body, chunk]);
|
|
@@ -111,7 +111,12 @@ function useRequest() {
|
|
|
111
111
|
});
|
|
112
112
|
const remoteIp = () => init('remoteIp', () => req.socket.remoteAddress || req.connection.remoteAddress || '');
|
|
113
113
|
function getIp(options) {
|
|
114
|
-
|
|
114
|
+
if (options?.trustProxy) {
|
|
115
|
+
return forwardedIp() || getIp();
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
return remoteIp();
|
|
119
|
+
}
|
|
115
120
|
}
|
|
116
121
|
const getIpList = () => init('ipList', () => ({
|
|
117
122
|
remoteIp: req.socket.remoteAddress || req.connection.remoteAddress || '',
|
|
@@ -189,7 +194,7 @@ function useSetCookies() {
|
|
|
189
194
|
function cookies() {
|
|
190
195
|
return cookiesStore
|
|
191
196
|
.entries()
|
|
192
|
-
.filter(a =>
|
|
197
|
+
.filter(a => !!a[1])
|
|
193
198
|
.map(([key, value]) => renderCookie(key, value));
|
|
194
199
|
}
|
|
195
200
|
return {
|
|
@@ -206,15 +211,15 @@ function useSetCookie(name) {
|
|
|
206
211
|
name,
|
|
207
212
|
type: 'cookie',
|
|
208
213
|
}, {
|
|
209
|
-
get: () => getCookie(name)
|
|
214
|
+
get: () => getCookie(name)?.value,
|
|
210
215
|
set: (value) => {
|
|
211
|
-
setCookie(name, value, getCookie(name)
|
|
216
|
+
setCookie(name, value, getCookie(name)?.attrs);
|
|
212
217
|
},
|
|
213
218
|
});
|
|
214
219
|
return attachHook(valueHook, {
|
|
215
|
-
get: () => getCookie(name)
|
|
220
|
+
get: () => getCookie(name)?.attrs,
|
|
216
221
|
set: (attrs) => {
|
|
217
|
-
setCookie(name, getCookie(name)
|
|
222
|
+
setCookie(name, getCookie(name)?.value || '', attrs);
|
|
218
223
|
},
|
|
219
224
|
}, 'attrs');
|
|
220
225
|
}
|
|
@@ -225,7 +230,7 @@ function useAccept() {
|
|
|
225
230
|
const accepts = (mime) => {
|
|
226
231
|
const { set, get, has } = store('accept');
|
|
227
232
|
if (!has(mime)) {
|
|
228
|
-
return set(mime,
|
|
233
|
+
return set(mime, !!(accept && (accept === '*/*' || accept.includes(mime))));
|
|
229
234
|
}
|
|
230
235
|
return get(mime);
|
|
231
236
|
};
|
|
@@ -340,7 +345,7 @@ function useResponse() {
|
|
|
340
345
|
const responded = store('response').hook('responded');
|
|
341
346
|
const statusCode = store('status').hook('code');
|
|
342
347
|
function status(code) {
|
|
343
|
-
return (statusCode.value = code
|
|
348
|
+
return (statusCode.value = code ? code : statusCode.value);
|
|
344
349
|
}
|
|
345
350
|
const rawResponse = (options) => {
|
|
346
351
|
if (!options || !options.passthrough) {
|
|
@@ -572,7 +577,7 @@ class HttpErrorRenderer extends BaseHttpResponseRenderer {
|
|
|
572
577
|
`<head><title>${data.statusCode} ${httpStatusCodes[data.statusCode]}</title></head>` +
|
|
573
578
|
`<body><center><h1>${data.statusCode} ${httpStatusCodes[data.statusCode]}</h1></center>` +
|
|
574
579
|
`<center><h4>${data.message}</h1></center><hr color="#666">` +
|
|
575
|
-
`<center style="color: #666;"> Wooks v${"0.4.
|
|
580
|
+
`<center style="color: #666;"> Wooks v${"0.4.28"} </center>` +
|
|
576
581
|
`${keys.length > 0
|
|
577
582
|
? `<pre style="${preStyles}">${JSON.stringify({
|
|
578
583
|
...data,
|
|
@@ -605,8 +610,7 @@ class HttpErrorRenderer extends BaseHttpResponseRenderer {
|
|
|
605
610
|
`"error":"${escapeQuotes(data.error)}",` +
|
|
606
611
|
`"message":"${escapeQuotes(data.message)}"` +
|
|
607
612
|
`${keys.length > 0
|
|
608
|
-
?
|
|
609
|
-
`,${keys.map(k => `"${escapeQuotes(k)}":${JSON.stringify(data[k])}`).join(',')}`
|
|
613
|
+
? `,${keys.map(k => `"${escapeQuotes(k)}":${JSON.stringify(data[k])}`).join(',')}`
|
|
610
614
|
: ''}}`);
|
|
611
615
|
}
|
|
612
616
|
render(response) {
|
|
@@ -765,7 +769,7 @@ class BaseHttpResponse {
|
|
|
765
769
|
async respond() {
|
|
766
770
|
const { rawResponse, hasResponded } = useResponse();
|
|
767
771
|
const { method, rawRequest } = useRequest();
|
|
768
|
-
const logger = useEventLogger('http-response');
|
|
772
|
+
const logger = useEventLogger('http-response') || console;
|
|
769
773
|
if (hasResponded()) {
|
|
770
774
|
this.panic('The response was already sent.', logger);
|
|
771
775
|
}
|
|
@@ -852,7 +856,13 @@ function createWooksResponder(renderer = new BaseHttpResponseRenderer(), errorRe
|
|
|
852
856
|
}
|
|
853
857
|
if (data instanceof Error) {
|
|
854
858
|
const r = new BaseHttpResponse(errorRenderer);
|
|
855
|
-
|
|
859
|
+
let httpError;
|
|
860
|
+
if (data instanceof HttpError) {
|
|
861
|
+
httpError = data;
|
|
862
|
+
}
|
|
863
|
+
else {
|
|
864
|
+
httpError = new HttpError(500, data.message);
|
|
865
|
+
}
|
|
856
866
|
r.setBody(httpError.body);
|
|
857
867
|
return r;
|
|
858
868
|
}
|
|
@@ -865,7 +875,7 @@ function createWooksResponder(renderer = new BaseHttpResponseRenderer(), errorRe
|
|
|
865
875
|
}
|
|
866
876
|
return {
|
|
867
877
|
createResponse,
|
|
868
|
-
respond:
|
|
878
|
+
respond: (data) => createResponse(data)?.respond(),
|
|
869
879
|
};
|
|
870
880
|
}
|
|
871
881
|
|
|
@@ -900,15 +910,15 @@ class WooksHttp extends WooksAdapterBase {
|
|
|
900
910
|
options(path, handler) {
|
|
901
911
|
return this.on('OPTIONS', path, handler);
|
|
902
912
|
}
|
|
903
|
-
async listen(
|
|
913
|
+
async listen(port, hostname, backlog, listeningListener) {
|
|
904
914
|
const server = (this.server = http.createServer(this.getServerCb()));
|
|
905
915
|
return new Promise((resolve, reject) => {
|
|
906
916
|
server.once('listening', resolve);
|
|
907
917
|
server.once('error', reject);
|
|
908
|
-
server.listen(
|
|
918
|
+
server.listen(port, hostname, backlog, listeningListener);
|
|
909
919
|
});
|
|
910
920
|
}
|
|
911
|
-
|
|
921
|
+
close(server) {
|
|
912
922
|
const srv = server || this.server;
|
|
913
923
|
return new Promise((resolve, reject) => {
|
|
914
924
|
srv?.close(err => {
|
|
@@ -927,8 +937,8 @@ class WooksHttp extends WooksAdapterBase {
|
|
|
927
937
|
this.server = server;
|
|
928
938
|
}
|
|
929
939
|
respond(data) {
|
|
930
|
-
void this.responder.respond(data)
|
|
931
|
-
this.logger.error('Uncought response exception',
|
|
940
|
+
void this.responder.respond(data)?.catch(e => {
|
|
941
|
+
this.logger.error('Uncought response exception', e);
|
|
932
942
|
});
|
|
933
943
|
}
|
|
934
944
|
getServerCb() {
|
|
@@ -968,7 +978,7 @@ class WooksHttp extends WooksAdapterBase {
|
|
|
968
978
|
break;
|
|
969
979
|
}
|
|
970
980
|
catch (error) {
|
|
971
|
-
this.logger.error(`Uncought route handler exception: ${store('event').get('req')
|
|
981
|
+
this.logger.error(`Uncought route handler exception: ${store('event').get('req')?.url || ''}`, error);
|
|
972
982
|
if (isLastHandler) {
|
|
973
983
|
restoreCtx();
|
|
974
984
|
this.respond(error);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wooksjs/event-http",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.28",
|
|
4
4
|
"description": "@wooksjs/event-http",
|
|
5
5
|
"main": "dist/index.cjs",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
"url": "https://github.com/wooksjs/wooksjs/issues"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
|
-
"wooks": "0.4.
|
|
42
|
+
"wooks": "0.4.28",
|
|
43
43
|
"@prostojs/router": "^0.2.1",
|
|
44
|
-
"@wooksjs/event-core": "0.4.
|
|
44
|
+
"@wooksjs/event-core": "0.4.28"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"@prostojs/logger": "^0.4.0"
|