@webtypen/webframez-core 0.0.54 → 0.0.55

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.
@@ -6,7 +6,7 @@ export declare class LambdaApplication {
6
6
  statusCode: number;
7
7
  body: any;
8
8
  headers: {
9
- [key: string]: string;
9
+ [key: string]: any;
10
10
  };
11
11
  }>;
12
12
  }
@@ -1,12 +1,13 @@
1
1
  /// <reference types="node" />
2
- import { ServerResponse } from "http";
2
+ import { IncomingMessage, ServerResponse } from "http";
3
3
  export declare class Response {
4
4
  res?: ServerResponse;
5
5
  statusCode: number;
6
6
  content?: any | null | undefined;
7
7
  headers: {
8
- [key: string]: string;
8
+ [key: string]: any;
9
9
  };
10
+ events: any;
10
11
  /**
11
12
  * Mode
12
13
  */
@@ -40,4 +41,13 @@ export declare class Response {
40
41
  * @param content
41
42
  */
42
43
  send(content: any): this;
44
+ registerEvent(eventKey: string, func: any): Promise<void>;
45
+ /**
46
+ * Runs the registered events for an event-type
47
+ *
48
+ * @param eventKey
49
+ * @param req
50
+ * @param payload
51
+ */
52
+ handleEvents(eventKey: string, req: IncomingMessage, payload: any): Promise<void>;
43
53
  }
@@ -1,10 +1,20 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  exports.Response = void 0;
4
13
  class Response {
5
14
  constructor(options) {
6
15
  this.statusCode = 200;
7
16
  this.headers = {};
17
+ this.events = { after: [] };
8
18
  /**
9
19
  * Mode
10
20
  */
@@ -72,5 +82,29 @@ class Response {
72
82
  }
73
83
  return this;
74
84
  }
85
+ registerEvent(eventKey, func) {
86
+ return __awaiter(this, void 0, void 0, function* () {
87
+ this.events[eventKey].push({ function: func });
88
+ });
89
+ }
90
+ /**
91
+ * Runs the registered events for an event-type
92
+ *
93
+ * @param eventKey
94
+ * @param req
95
+ * @param payload
96
+ */
97
+ handleEvents(eventKey, req, payload) {
98
+ return __awaiter(this, void 0, void 0, function* () {
99
+ if (!this.events || !this.events[eventKey] || this.events[eventKey].length < 1) {
100
+ return;
101
+ }
102
+ for (let i in this.events[eventKey]) {
103
+ if (this.events[eventKey](i).function && typeof this.events[eventKey](i).function === "function") {
104
+ this.events[eventKey](i).function(req, payload);
105
+ }
106
+ }
107
+ });
108
+ }
75
109
  }
76
110
  exports.Response = Response;
@@ -110,9 +110,10 @@ declare class RouterFacade {
110
110
  statusCode: number;
111
111
  body: any;
112
112
  headers: {
113
- [key: string]: string;
113
+ [key: string]: any;
114
114
  };
115
115
  }>;
116
+ handleResponseAfter(response: any, req: any, payload: any): Promise<void>;
116
117
  requestConsoleLog(req: IncomingMessage, httpCode: number): void;
117
118
  }
118
119
  export declare const Router: RouterFacade;
@@ -294,6 +294,7 @@ class RouterFacade {
294
294
  for (let middlewareKey of route.options.middleware) {
295
295
  const middleware = this.kernel.middleware[middlewareKey];
296
296
  if (!middleware) {
297
+ this.handleResponseAfter(response, req, { status: 500 });
297
298
  if (this.mode === "aws-lambda") {
298
299
  return {
299
300
  statusCode: 500,
@@ -318,6 +319,7 @@ class RouterFacade {
318
319
  }
319
320
  catch (e) {
320
321
  console.error(e);
322
+ this.handleResponseAfter(response, req, { status: 500 });
321
323
  if (this.mode === "aws-lambda") {
322
324
  return {
323
325
  statusCode: 500,
@@ -336,6 +338,7 @@ class RouterFacade {
336
338
  });
337
339
  }
338
340
  catch (e) {
341
+ this.handleResponseAfter(response, req, { status: 500, error: typeof e.data === "object" ? JSON.stringify(e.data) : e.data ? e.data : undefined });
339
342
  // Send Middleware-Abort
340
343
  if (this.mode === "aws-lambda") {
341
344
  return {
@@ -374,6 +377,7 @@ class RouterFacade {
374
377
  const split = route.component.split("@");
375
378
  const controller = this.kernel.controller[split[0]];
376
379
  if (!controller) {
380
+ this.handleResponseAfter(response, req, { status: 500, error: "Controller `" + split[0] + "` not found ..." });
377
381
  if (this.mode === "aws-lambda") {
378
382
  return {
379
383
  statusCode: 500,
@@ -393,6 +397,7 @@ class RouterFacade {
393
397
  // Set Controller method as route-component
394
398
  const controllerInstance = new controller();
395
399
  if (!controllerInstance || !split || !split[1] || !controllerInstance[split[1]]) {
400
+ this.handleResponseAfter(response, req, { status: 500, error: "controllerInstance `" + split[1] + "` not found ..." });
396
401
  throw new Error("controllerInstance " + split[1] + " not found ...");
397
402
  }
398
403
  route.component = controllerInstance[split[1]].bind(controllerInstance);
@@ -400,6 +405,7 @@ class RouterFacade {
400
405
  if (route && route.component !== undefined) {
401
406
  try {
402
407
  yield route.component(request, response);
408
+ this.handleResponseAfter(response, req, { status: response.statusCode });
403
409
  if (this.mode === "aws-lambda") {
404
410
  return {
405
411
  statusCode: response.statusCode,
@@ -413,6 +419,10 @@ class RouterFacade {
413
419
  }
414
420
  }
415
421
  catch (e) {
422
+ if (process.env.APP_DEBUG_CONSOLE) {
423
+ console.error(e);
424
+ }
425
+ this.handleResponseAfter(response, req, { status: 500, error: e && e.stack && e.stack.toString().trim() !== '' ? e.stack : e && e.toString() !== '' ? e.toString() : "Error running the component ..." });
416
426
  if (this.mode === "aws-lambda") {
417
427
  return {
418
428
  statusCode: 500,
@@ -425,12 +435,13 @@ class RouterFacade {
425
435
  };
426
436
  }
427
437
  else if (res && req) {
428
- this.sendError(res, 500);
438
+ this.sendError(res, 500, process.env.APP_DEBUG && process.env.APP_DEBUG !== "false" ? e.stack : null);
429
439
  this.requestConsoleLog(req, 500);
430
440
  }
431
441
  }
432
442
  }
433
443
  else {
444
+ this.handleResponseAfter(response, req, { status: 500, error: "Route component not found ..." });
434
445
  if (this.mode === "aws-lambda") {
435
446
  return {
436
447
  statusCode: 500,
@@ -448,6 +459,11 @@ class RouterFacade {
448
459
  }
449
460
  });
450
461
  }
462
+ handleResponseAfter(response, req, payload) {
463
+ return __awaiter(this, void 0, void 0, function* () {
464
+ response.handleEvents("after", req, payload);
465
+ });
466
+ }
451
467
  requestConsoleLog(req, httpCode) {
452
468
  if (Config_1.Config.get("application.router.requests.logConsole") !== true && !Config_1.Config.get("application.router.requests.logFile")) {
453
469
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webtypen/webframez-core",
3
- "version": "0.0.54",
3
+ "version": "0.0.55",
4
4
  "description": "The core package of the typescript based webframez (web-framework) by webtypen.de",
5
5
  "homepage": "https://webtypen.de/",
6
6
  "license": "MIT",
@@ -1,10 +1,11 @@
1
- import { ServerResponse } from "http";
1
+ import { IncomingMessage, ServerResponse } from "http";
2
2
 
3
3
  export class Response {
4
4
  res?: ServerResponse;
5
5
  statusCode: number = 200;
6
6
  content?: any | null | undefined;
7
- headers: { [key: string]: string } = {};
7
+ headers: { [key: string]: any } = {};
8
+ events: any = { after: [] };
8
9
 
9
10
  /**
10
11
  * Mode
@@ -81,4 +82,27 @@ export class Response {
81
82
  }
82
83
  return this;
83
84
  }
85
+
86
+ async registerEvent(eventKey: string, func: any) {
87
+ this.events[eventKey].push({ function: func });
88
+ }
89
+
90
+ /**
91
+ * Runs the registered events for an event-type
92
+ *
93
+ * @param eventKey
94
+ * @param req
95
+ * @param payload
96
+ */
97
+ async handleEvents(eventKey: string, req: IncomingMessage, payload: any) {
98
+ if (!this.events || !this.events[eventKey] || this.events[eventKey].length < 1) {
99
+ return;
100
+ }
101
+
102
+ for (let i in this.events[eventKey]) {
103
+ if (this.events[eventKey](i).function && typeof this.events[eventKey](i).function === "function") {
104
+ this.events[eventKey](i).function(req, payload);
105
+ }
106
+ }
107
+ }
84
108
  }
@@ -335,6 +335,8 @@ class RouterFacade {
335
335
  for (let middlewareKey of route.options.middleware) {
336
336
  const middleware = this.kernel.middleware[middlewareKey];
337
337
  if (!middleware) {
338
+ this.handleResponseAfter(response, req, { status: 500 });
339
+
338
340
  if (this.mode === "aws-lambda") {
339
341
  return {
340
342
  statusCode: 500,
@@ -364,6 +366,7 @@ class RouterFacade {
364
366
  } catch (e) {
365
367
  console.error(e);
366
368
 
369
+ this.handleResponseAfter(response, req, { status: 500 });
367
370
  if (this.mode === "aws-lambda") {
368
371
  return {
369
372
  statusCode: 500,
@@ -380,6 +383,8 @@ class RouterFacade {
380
383
  }
381
384
  });
382
385
  } catch (e: any) {
386
+ this.handleResponseAfter(response, req, { status: 500, error: typeof e.data === "object" ? JSON.stringify(e.data) : e.data ? e.data : undefined });
387
+
383
388
  // Send Middleware-Abort
384
389
  if (this.mode === "aws-lambda") {
385
390
  return {
@@ -421,6 +426,8 @@ class RouterFacade {
421
426
  const split = route.component.split("@");
422
427
  const controller = this.kernel.controller[split[0]];
423
428
  if (!controller) {
429
+ this.handleResponseAfter(response, req, { status: 500, error: "Controller `" + split[0] + "` not found ..." });
430
+
424
431
  if (this.mode === "aws-lambda") {
425
432
  return {
426
433
  statusCode: 500,
@@ -434,13 +441,13 @@ class RouterFacade {
434
441
  res.writeHead(500, { "Content-Type": "text/html" });
435
442
  res.end("Controller `" + split[0] + "` not found ...");
436
443
  }
437
-
438
444
  return;
439
445
  }
440
446
 
441
447
  // Set Controller method as route-component
442
448
  const controllerInstance = new controller();
443
449
  if (!controllerInstance || !split || !split[1] || !controllerInstance[split[1]]) {
450
+ this.handleResponseAfter(response, req, { status: 500, error: "controllerInstance `" + split[1] + "` not found ..." });
444
451
  throw new Error("controllerInstance " + split[1] + " not found ...");
445
452
  }
446
453
  route.component = controllerInstance[split[1]].bind(controllerInstance);
@@ -450,6 +457,7 @@ class RouterFacade {
450
457
  try {
451
458
  await route.component(request, response);
452
459
 
460
+ this.handleResponseAfter(response, req, { status: response.statusCode });
453
461
  if (this.mode === "aws-lambda") {
454
462
  return {
455
463
  statusCode: response.statusCode,
@@ -461,6 +469,11 @@ class RouterFacade {
461
469
  this.requestConsoleLog(req, response.statusCode);
462
470
  }
463
471
  } catch (e: any) {
472
+ if (process.env.APP_DEBUG_CONSOLE) {
473
+ console.error(e);
474
+ }
475
+
476
+ this.handleResponseAfter(response, req, { status: 500, error: e && e.stack && e.stack.toString().trim() !== '' ? e.stack : e && e.toString() !== '' ? e.toString() : "Error running the component ..." });
464
477
  if (this.mode === "aws-lambda") {
465
478
  return {
466
479
  statusCode: 500,
@@ -472,11 +485,12 @@ class RouterFacade {
472
485
  headers: response.headers,
473
486
  };
474
487
  } else if (res && req) {
475
- this.sendError(res, 500);
488
+ this.sendError(res, 500, process.env.APP_DEBUG && process.env.APP_DEBUG !== "false" ? e.stack : null);
476
489
  this.requestConsoleLog(req, 500);
477
490
  }
478
491
  }
479
492
  } else {
493
+ this.handleResponseAfter(response, req, { status: 500, error: "Route component not found ..." });
480
494
  if (this.mode === "aws-lambda") {
481
495
  return {
482
496
  statusCode: 500,
@@ -493,6 +507,10 @@ class RouterFacade {
493
507
  }
494
508
  }
495
509
 
510
+ async handleResponseAfter(response: any, req: any, payload: any) {
511
+ response.handleEvents("after", req, payload);
512
+ }
513
+
496
514
  requestConsoleLog(req: IncomingMessage, httpCode: number) {
497
515
  if (Config.get("application.router.requests.logConsole") !== true && !Config.get("application.router.requests.logFile")) {
498
516
  return;