express-zod-api 2.5.1 → 2.5.2
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/CHANGELOG.md +7 -0
- package/README.md +3 -0
- package/dist/endpoint.js +6 -2
- package/dist/endpoint.js.map +1 -1
- package/dist/errors.d.ts +6 -0
- package/dist/errors.js +14 -1
- package/dist/errors.js.map +1 -1
- package/dist/result-handler.d.ts +7 -0
- package/dist/result-handler.js +7 -1
- package/dist/result-handler.js.map +1 -1
- package/dist/server.d.ts +4 -0
- package/dist/server.js +55 -23
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
## Version 2
|
|
4
4
|
|
|
5
|
+
### v2.5.2
|
|
6
|
+
|
|
7
|
+
- Fixed a bug due to which the API did not respond in case of an error within the `ResultHandler`.
|
|
8
|
+
- In this case the `LastResortHandler` comes into play.
|
|
9
|
+
- It sets the status code to `500` and sends out plain text with an error message.
|
|
10
|
+
- It is not customizable yet, and it's meant to be kept very simple in case of JSON conversion errors.
|
|
11
|
+
|
|
5
12
|
### v2.5.1
|
|
6
13
|
|
|
7
14
|
- Fixed a bug due to which the execution of the code could continue despite the possible closing of the response
|
package/README.md
CHANGED
|
@@ -307,6 +307,9 @@ import {EndpointsFactory} from 'express-zod-api';
|
|
|
307
307
|
const endpointsFactory = new EndpointsFactory(myResultHandler);
|
|
308
308
|
```
|
|
309
309
|
|
|
310
|
+
Please note: `ResultHandler` must handle any errors and not throw its own. Otherwise, the case will be passed to the
|
|
311
|
+
`LastResortHandler`, which will set the status code to `500` and send the error message as plain text.
|
|
312
|
+
|
|
310
313
|
## Non-object response
|
|
311
314
|
|
|
312
315
|
`ResultHandler` also supports non-object response types, for example, sending an image file including its MIME type
|
package/dist/endpoint.js
CHANGED
|
@@ -8,8 +8,10 @@ var _Endpoint_instances, _Endpoint_setupCorsHeaders, _Endpoint_parseOutput, _End
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.Endpoint = exports.AbstractEndpoint = void 0;
|
|
10
10
|
const zod_1 = require("zod");
|
|
11
|
+
const errors_1 = require("./errors");
|
|
11
12
|
const helpers_1 = require("./helpers");
|
|
12
13
|
const mime_1 = require("./mime");
|
|
14
|
+
const result_handler_1 = require("./result-handler");
|
|
13
15
|
class AbstractEndpoint {
|
|
14
16
|
}
|
|
15
17
|
exports.AbstractEndpoint = AbstractEndpoint;
|
|
@@ -151,9 +153,11 @@ _Endpoint_instances = new WeakSet(), _Endpoint_setupCorsHeaders = function _Endp
|
|
|
151
153
|
}
|
|
152
154
|
catch (e) {
|
|
153
155
|
if (e instanceof Error) {
|
|
154
|
-
|
|
156
|
+
(0, result_handler_1.lastResortHandler)({
|
|
157
|
+
logger, response,
|
|
158
|
+
error: new errors_1.ResultHandlerError(e.message, error)
|
|
159
|
+
});
|
|
155
160
|
}
|
|
156
|
-
// throw e;
|
|
157
161
|
}
|
|
158
162
|
};
|
|
159
163
|
//# sourceMappingURL=endpoint.js.map
|
package/dist/endpoint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../src/endpoint.ts"],"names":[],"mappings":";;;;;;;;;AAEA,6BAAsB;AAGtB,uCAOmB;AAGnB,iCAAqC;
|
|
1
|
+
{"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../src/endpoint.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -4,3 +4,9 @@ export declare class DependsOnMethodError extends RoutingError {
|
|
|
4
4
|
}
|
|
5
5
|
export declare class OpenAPIError extends Error {
|
|
6
6
|
}
|
|
7
|
+
export declare class ResultHandlerError extends Error {
|
|
8
|
+
protected readonly originalError?: Error;
|
|
9
|
+
constructor(message: string, originalError?: Error | null);
|
|
10
|
+
hasOriginalError(): boolean;
|
|
11
|
+
getOriginalErrorMessage(): string | undefined;
|
|
12
|
+
}
|
package/dist/errors.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OpenAPIError = exports.DependsOnMethodError = exports.RoutingError = void 0;
|
|
3
|
+
exports.ResultHandlerError = exports.OpenAPIError = exports.DependsOnMethodError = exports.RoutingError = void 0;
|
|
4
4
|
class RoutingError extends Error {
|
|
5
5
|
}
|
|
6
6
|
exports.RoutingError = RoutingError;
|
|
@@ -10,4 +10,17 @@ exports.DependsOnMethodError = DependsOnMethodError;
|
|
|
10
10
|
class OpenAPIError extends Error {
|
|
11
11
|
}
|
|
12
12
|
exports.OpenAPIError = OpenAPIError;
|
|
13
|
+
class ResultHandlerError extends Error {
|
|
14
|
+
constructor(message, originalError) {
|
|
15
|
+
super(message);
|
|
16
|
+
this.originalError = originalError || undefined;
|
|
17
|
+
}
|
|
18
|
+
hasOriginalError() {
|
|
19
|
+
return this.originalError !== undefined;
|
|
20
|
+
}
|
|
21
|
+
getOriginalErrorMessage() {
|
|
22
|
+
return this.originalError ? this.originalError.message : undefined;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.ResultHandlerError = ResultHandlerError;
|
|
13
26
|
//# sourceMappingURL=errors.js.map
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,YAAa,SAAQ,KAAK;CACtC;AADD,oCACC;AAED,MAAa,oBAAqB,SAAQ,YAAY;CACrD;AADD,oDACC;AAED,MAAa,YAAa,SAAQ,KAAK;CACtC;AADD,oCACC"}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,YAAa,SAAQ,KAAK;CACtC;AADD,oCACC;AAED,MAAa,oBAAqB,SAAQ,YAAY;CACrD;AADD,oDACC;AAED,MAAa,YAAa,SAAQ,KAAK;CACtC;AADD,oCACC;AAED,MAAa,kBAAmB,SAAQ,KAAK;IAG3C,YAAY,OAAe,EAAE,aAA4B;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,aAAa,GAAG,aAAa,IAAI,SAAS,CAAC;IAClD,CAAC;IAEM,gBAAgB;QACrB,OAAO,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC;IAC1C,CAAC;IAEM,uBAAuB;QAC5B,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,CAAC;CACF;AAfD,gDAeC"}
|
package/dist/result-handler.d.ts
CHANGED
|
@@ -2,7 +2,13 @@ import { Request, Response } from 'express';
|
|
|
2
2
|
import { Logger } from 'winston';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { ApiResponse } from './api-response';
|
|
5
|
+
import { ResultHandlerError } from './errors';
|
|
5
6
|
import { IOSchema } from './helpers';
|
|
7
|
+
interface LastResortHandlerParams {
|
|
8
|
+
error: ResultHandlerError;
|
|
9
|
+
logger: Logger;
|
|
10
|
+
response: Response;
|
|
11
|
+
}
|
|
6
12
|
interface ResultHandlerParams<RES> {
|
|
7
13
|
error: Error | null;
|
|
8
14
|
input: any;
|
|
@@ -55,4 +61,5 @@ export declare const defaultResultHandler: ResultHandlerDefinition<ApiResponse<z
|
|
|
55
61
|
message: string;
|
|
56
62
|
};
|
|
57
63
|
}>>>;
|
|
64
|
+
export declare const lastResortHandler: ({ error, logger, response }: LastResortHandlerParams) => void;
|
|
58
65
|
export {};
|
package/dist/result-handler.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.defaultResultHandler = exports.createResultHandler = void 0;
|
|
3
|
+
exports.lastResortHandler = exports.defaultResultHandler = exports.createResultHandler = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
const api_response_1 = require("./api-response");
|
|
6
6
|
const helpers_1 = require("./helpers");
|
|
@@ -38,4 +38,10 @@ exports.defaultResultHandler = (0, exports.createResultHandler)({
|
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
40
|
});
|
|
41
|
+
const lastResortHandler = ({ error, logger, response }) => {
|
|
42
|
+
logger.error(`Result handler failure: ${error.message}.`);
|
|
43
|
+
response.status(500).end(`An error occurred while serving the result: ${error.message}.` +
|
|
44
|
+
(error.hasOriginalError() ? `\nOriginal error: ${error.getOriginalErrorMessage()}.` : ''));
|
|
45
|
+
};
|
|
46
|
+
exports.lastResortHandler = lastResortHandler;
|
|
41
47
|
//# sourceMappingURL=result-handler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result-handler.js","sourceRoot":"","sources":["../src/result-handler.ts"],"names":[],"mappings":";;;AAEA,6BAAsB;AACtB,iDAA8D;
|
|
1
|
+
{"version":3,"file":"result-handler.js","sourceRoot":"","sources":["../src/result-handler.ts"],"names":[],"mappings":";;;AAEA,6BAAsB;AACtB,iDAA8D;AAE9D,uCAKmB;AAyBZ,MAAM,mBAAmB,GAAG,CACjC,UAA6C,EAC7C,EAAE,CAAC,UAAU,CAAC;AAFH,QAAA,mBAAmB,uBAEhB;AAEH,QAAA,oBAAoB,GAAG,IAAA,2BAAmB,EAAC;IACtD,mBAAmB,EAAE,CAAuB,MAAW,EAAE,EAAE,CAAC,IAAA,gCAAiB,EAAC,OAAC,CAAC,MAAM,CAAC;QACrF,MAAM,EAAE,OAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QAC5B,IAAI,EAAE,IAAA,oBAAU,EAAC,MAAM,CAAC;KACzB,CAAC,CAAC;IACH,mBAAmB,EAAE,GAAG,EAAE,CAAC,IAAA,gCAAiB,EAAC,OAAC,CAAC,MAAM,CAAC;QACpD,MAAM,EAAE,OAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAC1B,KAAK,EAAE,OAAC,CAAC,MAAM,CAAC;YACd,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;SACpB,CAAC;KACH,CAAC,CAAC;IACH,OAAO,EAAE,CAAC,EAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAC,EAAE,EAAE;QAC7D,IAAI,CAAC,KAAK,EAAE;YACV,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACxB,MAAM,EAAE,SAAkB;gBAC1B,IAAI,EAAE,MAAM;aACb,CAAC,CAAC;YACH,OAAO;SACR;QACD,MAAM,UAAU,GAAG,IAAA,gCAAsB,EAAC,KAAK,CAAC,CAAC;QACjD,IAAI,UAAU,KAAK,GAAG,EAAE;YACtB,MAAM,CAAC,KAAK,CACV,0BAA0B,KAAK,CAAC,KAAK,IAAI,EACzC;gBACE,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,OAAO,EAAE,KAAK;aACf,CACF,CAAC;SACH;QACD,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;YAC/B,MAAM,EAAE,OAAgB;YACxB,KAAK,EAAE,EAAE,OAAO,EAAE,IAAA,6BAAmB,EAAC,KAAK,CAAC,EAAE;SAC/C,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC;AAEI,MAAM,iBAAiB,GAAG,CAAC,EAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAA0B,EAAE,EAAE;IACtF,MAAM,CAAC,KAAK,CAAC,2BAA2B,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;IAC1D,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CACtB,+CAA+C,KAAK,CAAC,OAAO,GAAG;QAC/D,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,qBAAqB,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAC1F,CAAC;AACJ,CAAC,CAAC;AANW,QAAA,iBAAiB,qBAM5B"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
+
import { ErrorRequestHandler, RequestHandler } from 'express';
|
|
2
3
|
import { Server } from 'http';
|
|
4
|
+
import { Logger } from 'winston';
|
|
3
5
|
import { AppConfig, CommonConfig, ServerConfig } from './config-type';
|
|
4
6
|
import { Routing } from './routing';
|
|
7
|
+
export declare const createParserFailureHandler: (errorHandler: import("./result-handler").ResultHandlerDefinition<any, any>, logger: Logger) => ErrorRequestHandler;
|
|
8
|
+
export declare const createNotFoundHandler: (errorHandler: import("./result-handler").ResultHandlerDefinition<any, any>, logger: Logger) => RequestHandler;
|
|
5
9
|
export declare function attachRouting(config: AppConfig & CommonConfig, routing: Routing): void;
|
|
6
10
|
export declare function createServer(config: ServerConfig & CommonConfig, routing: Routing): Server;
|
package/dist/server.js
CHANGED
|
@@ -1,16 +1,66 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
2
21
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
22
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
23
|
};
|
|
5
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.createServer = exports.attachRouting = void 0;
|
|
7
|
-
const express_1 =
|
|
25
|
+
exports.createServer = exports.attachRouting = exports.createNotFoundHandler = exports.createParserFailureHandler = void 0;
|
|
26
|
+
const express_1 = __importStar(require("express"));
|
|
8
27
|
const express_fileupload_1 = __importDefault(require("express-fileupload"));
|
|
28
|
+
const errors_1 = require("./errors");
|
|
9
29
|
const helpers_1 = require("./helpers");
|
|
10
30
|
const logger_1 = require("./logger");
|
|
11
31
|
const result_handler_1 = require("./result-handler");
|
|
12
32
|
const routing_1 = require("./routing");
|
|
13
33
|
const http_errors_1 = __importDefault(require("http-errors"));
|
|
34
|
+
const createParserFailureHandler = (errorHandler, logger) => (error, request, response, next) => {
|
|
35
|
+
if (!error) {
|
|
36
|
+
return next();
|
|
37
|
+
}
|
|
38
|
+
errorHandler.handler({
|
|
39
|
+
error, request, response, logger,
|
|
40
|
+
input: request.body,
|
|
41
|
+
output: null
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
exports.createParserFailureHandler = createParserFailureHandler;
|
|
45
|
+
const createNotFoundHandler = (errorHandler, logger) => (request, response) => {
|
|
46
|
+
const error = (0, http_errors_1.default)(404, `Can not ${request.method} ${request.path}`);
|
|
47
|
+
try {
|
|
48
|
+
errorHandler.handler({
|
|
49
|
+
request, response, logger, error,
|
|
50
|
+
input: null,
|
|
51
|
+
output: null
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
if (e instanceof Error) {
|
|
56
|
+
(0, result_handler_1.lastResortHandler)({
|
|
57
|
+
response, logger,
|
|
58
|
+
error: new errors_1.ResultHandlerError(e.message, error)
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
exports.createNotFoundHandler = createNotFoundHandler;
|
|
14
64
|
function attachRouting(config, routing) {
|
|
15
65
|
const logger = (0, helpers_1.isLoggerConfig)(config.logger) ? (0, logger_1.createLogger)(config.logger) : config.logger;
|
|
16
66
|
return (0, routing_1.initRouting)({ app: config.app, routing, logger, config });
|
|
@@ -20,34 +70,16 @@ function createServer(config, routing) {
|
|
|
20
70
|
const logger = (0, helpers_1.isLoggerConfig)(config.logger) ? (0, logger_1.createLogger)(config.logger) : config.logger;
|
|
21
71
|
const app = (0, express_1.default)();
|
|
22
72
|
const errorHandler = config.errorHandler || result_handler_1.defaultResultHandler;
|
|
23
|
-
const jsonParser = config.server.jsonParser || express_1.
|
|
73
|
+
const jsonParser = config.server.jsonParser || (0, express_1.json)();
|
|
24
74
|
const multipartParser = config.server.upload ? (0, express_fileupload_1.default)({
|
|
25
75
|
...(typeof config.server.upload === 'object' ? config.server.upload : {}),
|
|
26
76
|
abortOnLimit: false,
|
|
27
77
|
parseNested: true,
|
|
28
78
|
}) : undefined;
|
|
29
|
-
const parserFailureHandler = (error, request, response, next) => {
|
|
30
|
-
if (!error) {
|
|
31
|
-
return next();
|
|
32
|
-
}
|
|
33
|
-
errorHandler.handler({
|
|
34
|
-
error, request, response, logger,
|
|
35
|
-
input: request.body,
|
|
36
|
-
output: null
|
|
37
|
-
});
|
|
38
|
-
};
|
|
39
|
-
const lastResortHandler = (request, response) => {
|
|
40
|
-
errorHandler.handler({
|
|
41
|
-
request, response, logger,
|
|
42
|
-
error: (0, http_errors_1.default)(404, `Can not ${request.method} ${request.path}`),
|
|
43
|
-
input: null,
|
|
44
|
-
output: null
|
|
45
|
-
});
|
|
46
|
-
};
|
|
47
79
|
app.use([jsonParser].concat(multipartParser || []));
|
|
48
|
-
app.use(
|
|
80
|
+
app.use((0, exports.createParserFailureHandler)(errorHandler, logger));
|
|
49
81
|
(0, routing_1.initRouting)({ app, routing, logger, config });
|
|
50
|
-
app.use(
|
|
82
|
+
app.use((0, exports.createNotFoundHandler)(errorHandler, logger));
|
|
51
83
|
return app.listen(config.server.listen, () => {
|
|
52
84
|
logger.info(`Listening ${config.server.listen}`);
|
|
53
85
|
});
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED