@cley_faye/boilerplate 3.5.1 → 3.6.0

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.
@@ -30,6 +30,10 @@ export interface LogOptions {
30
30
  logger?: winston.Logger;
31
31
  timestamp?: boolean;
32
32
  }
33
+ export interface DefaultErrorHandlerConfig {
34
+ /** Set to true to allow server errors without a code to be sent as-is in the response */
35
+ noErrorFilter?: boolean;
36
+ }
33
37
  export interface PipelineSettings {
34
38
  topLevels?: Array<RouterWithNullDef>;
35
39
  routes?: Array<RouterWithNullDef>;
@@ -39,7 +43,7 @@ export interface PipelineSettings {
39
43
  options?: {
40
44
  log?: LogOptions;
41
45
  middleware?: MiddlewareOptions;
42
- defaultErrorHandler?: boolean;
46
+ defaultErrorHandler?: boolean | DefaultErrorHandlerConfig;
43
47
  };
44
48
  }
45
49
  export default class PipelineBuilder {
@@ -32,30 +32,40 @@ Object.defineProperty(exports, "__esModule", { value: true });
32
32
  const express_1 = __importDefault(require("express"));
33
33
  const winston_js_1 = require("../winston.js");
34
34
  const logger_js_1 = require("./logger.js");
35
- const defaultErrorHandler = (err, req, res, next) => {
36
- if (!res.headersSent && err.statusCode) {
37
- const message = err.expose
38
- ? err.message
39
- : undefined;
40
- const accepted = req.accepts([
41
- "text",
42
- "html",
43
- "json",
44
- ]);
45
- if (accepted === "json") {
46
- res.status(err.statusCode).send({
47
- statusCode: err.statusCode,
48
- message,
49
- });
35
+ const defaultErrorHandler = (errorHandlerConfig) => (err, req, res, next) => {
36
+ const noErrorFilter = typeof errorHandlerConfig === "boolean"
37
+ ? false
38
+ : Boolean(errorHandlerConfig.noErrorFilter);
39
+ if (!res.headersSent) {
40
+ if (err.statusCode) {
41
+ const message = err.expose
42
+ ? err.message
43
+ : undefined;
44
+ const accepted = req.accepts([
45
+ "text",
46
+ "html",
47
+ "json",
48
+ ]);
49
+ if (accepted === "json") {
50
+ res.status(err.statusCode).send({
51
+ statusCode: err.statusCode,
52
+ message,
53
+ });
54
+ return;
55
+ }
56
+ if (message) {
57
+ res.status(err.statusCode).send(message);
58
+ }
59
+ else {
60
+ res.sendStatus(err.statusCode);
61
+ }
50
62
  return;
51
63
  }
52
- if (message) {
53
- res.status(err.statusCode).send(message);
54
- }
55
- else {
56
- res.sendStatus(err.statusCode);
64
+ if (!noErrorFilter) {
65
+ // eslint-disable-next-line @typescript-eslint/no-magic-numbers
66
+ res.status(500).send("An unexpected error occured");
67
+ return;
57
68
  }
58
- return;
59
69
  }
60
70
  next(err);
61
71
  };
@@ -257,10 +267,10 @@ class PipelineBuilder {
257
267
  (0, logger_js_1.registerErrorLogger)(router, logOptions);
258
268
  }
259
269
  }
260
- _setDefaultErrorHandler(router, enableDefaultErrorHandler) {
261
- if (enableDefaultErrorHandler) {
270
+ _setDefaultErrorHandler(router, defaultErrorHandlerConfig) {
271
+ if (defaultErrorHandlerConfig) {
262
272
  this.internalLog("Adding default error handler");
263
- router.use(defaultErrorHandler);
273
+ router.use(defaultErrorHandler(defaultErrorHandlerConfig));
264
274
  }
265
275
  }
266
276
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cley_faye/boilerplate",
3
- "version": "3.5.1",
3
+ "version": "3.6.0",
4
4
  "description": "Boilerplate code generator for generic projects",
5
5
  "repository": {
6
6
  "type": "git",