express-zod-api 5.5.3 → 5.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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,43 @@
2
2
 
3
3
  ## Version 5
4
4
 
5
+ ### v5.6.0
6
+
7
+ - Feature #311. `EndpointsFactory::addExpressMiddleware()` or its alias `use()`.
8
+ - A method to connect a native (regular) `express` middleware to your endpoint(s).
9
+ - You can connect any middleware that has a regular express middleware signature
10
+ `(req, res, next) => void | Promise<void>` and can be supplied to `app.use()`.
11
+ - You can also specify a provider of options for endpoint handlers and next middlewares.
12
+ - You can also specify an error transformer so that the `ResultHandler` would send the status you need.
13
+ - In case the error is not a `HttpError`, the `ResultHandler` will send the status `500`.
14
+
15
+ ```typescript
16
+ import { defaultEndpointsFactory, createHttpError } from "express-zod-api";
17
+ import cors from "cors";
18
+ import { auth } from "express-oauth2-jwt-bearer";
19
+
20
+ const simpleUsage = defaultEndpointsFactory.addExpressMiddleware(
21
+ cors({ credentials: true })
22
+ );
23
+
24
+ const advancedUsage = defaultEndpointsFactory.use(auth(), {
25
+ provider: (req) => ({ auth: req.auth }), // optional, can be async
26
+ transformer: (err) => createHttpError(401, err.message), // optional
27
+ });
28
+ ```
29
+
30
+ ### v5.5.6
31
+
32
+ - `winston` version is 3.6.0.
33
+
34
+ ### v5.5.5
35
+
36
+ - `winston-transport` version is 4.5.0.
37
+
38
+ ### v5.5.4
39
+
40
+ - `express-fileupload` version is 1.3.1.
41
+
5
42
  ### v5.5.3
6
43
 
7
44
  - `winston` version is 3.5.1.
package/README.md CHANGED
@@ -34,16 +34,17 @@ Start your API server with I/O schema validation and custom middlewares in minut
34
34
  6. [Route path params](#route-path-params)
35
35
  7. [Response customization](#response-customization)
36
36
  8. [Non-object response](#non-object-response) including file downloads
37
- 9. [File uploads](#file-uploads)
38
- 10. [Customizing logger](#customizing-logger)
39
- 11. [Connect to your own express app](#connect-to-your-own-express-app)
40
- 12. [Multiple schemas for one route](#multiple-schemas-for-one-route)
41
- 13. [Serving static files](#serving-static-files)
42
- 14. [Customizing input sources](#customizing-input-sources)
43
- 15. [Enabling compression](#enabling-compression)
44
- 16. [Enabling HTTPS](#enabling-https)
45
- 17. [Informing the frontend about the API](#informing-the-frontend-about-the-api)
46
- 18. [Creating a documentation](#creating-a-documentation)
37
+ 9. [Using native express middlewares](#using-native-express-middlewares)
38
+ 10. [File uploads](#file-uploads)
39
+ 11. [Customizing logger](#customizing-logger)
40
+ 12. [Connect to your own express app](#connect-to-your-own-express-app)
41
+ 13. [Multiple schemas for one route](#multiple-schemas-for-one-route)
42
+ 14. [Serving static files](#serving-static-files)
43
+ 15. [Customizing input sources](#customizing-input-sources)
44
+ 16. [Enabling compression](#enabling-compression)
45
+ 17. [Enabling HTTPS](#enabling-https)
46
+ 18. [Informing the frontend about the API](#informing-the-frontend-about-the-api)
47
+ 19. [Creating a documentation](#creating-a-documentation)
47
48
  5. [Additional hints](#additional-hints)
48
49
  1. [How to test endpoints](#how-to-test-endpoints)
49
50
  2. [Excessive properties in endpoint output](#excessive-properties-in-endpoint-output)
@@ -510,6 +511,28 @@ const fileStreamingEndpointsFactory = new EndpointsFactory(
510
511
  );
511
512
  ```
512
513
 
514
+ ## Using native express middlewares
515
+
516
+ You can connect any native `express` middleware that can be supplied to `express` method `app.use()`.
517
+ For this purpose the `EndpointsFactory` provides method `addExpressMiddleware()` and its alias `use()`.
518
+ There are also two optional features available: a provider of options and an error transformer for `ResultHandler`.
519
+ In case the error in middleware is not a `HttpError`, the `ResultHandler` will send the status `500`.
520
+
521
+ ```typescript
522
+ import { defaultEndpointsFactory, createHttpError } from "express-zod-api";
523
+ import cors from "cors";
524
+ import { auth } from "express-oauth2-jwt-bearer";
525
+
526
+ const simpleUsage = defaultEndpointsFactory.addExpressMiddleware(
527
+ cors({ credentials: true })
528
+ );
529
+
530
+ const advancedUsage = defaultEndpointsFactory.use(auth(), {
531
+ provider: (req) => ({ auth: req.auth }), // optional, can be async
532
+ transformer: (err) => createHttpError(401, err.message), // optional
533
+ });
534
+ ```
535
+
513
536
  ## File uploads
514
537
 
515
538
  You can switch the `Endpoint` to handle requests with the `multipart/form-data` content type instead of JSON by using
@@ -1,9 +1,11 @@
1
+ /// <reference types="qs" />
2
+ import { Request, Response } from "express";
1
3
  import { z } from "zod";
2
4
  import { ApiResponse } from "./api-response";
3
5
  import { Endpoint, Handler } from "./endpoint";
4
6
  import { FlatObject, IOSchema, Merge } from "./common-helpers";
5
7
  import { Method, MethodsDefinition } from "./method";
6
- import { MiddlewareDefinition } from "./middleware";
8
+ import { ExpressMiddleware, ExpressMiddlewareFeatures, MiddlewareDefinition } from "./middleware";
7
9
  import { ResultHandlerDefinition } from "./result-handler";
8
10
  declare type BuildProps<IN extends IOSchema, OUT extends IOSchema, MwIN, MwOUT, M extends Method> = {
9
11
  input: IN;
@@ -17,6 +19,8 @@ export declare class EndpointsFactory<MwIN, MwOUT, POS extends ApiResponse, NEG
17
19
  protected middlewares: MiddlewareDefinition<any, any, any>[];
18
20
  constructor(resultHandler: ResultHandlerDefinition<POS, NEG>);
19
21
  addMiddleware<IN extends IOSchema, OUT extends FlatObject>(definition: MiddlewareDefinition<IN, MwOUT, OUT>): EndpointsFactory<Merge<IN, MwIN>, MwOUT & OUT, POS, NEG>;
22
+ use: <R extends Request<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>, S extends Response<any, Record<string, any>>, OUT extends FlatObject = {}>(middleware: ExpressMiddleware<R, S>, features?: ExpressMiddlewareFeatures<R, S, OUT> | undefined) => EndpointsFactory<MwIN, MwOUT & OUT, POS, NEG>;
23
+ addExpressMiddleware<R extends Request, S extends Response, OUT extends FlatObject = {}>(middleware: ExpressMiddleware<R, S>, features?: ExpressMiddlewareFeatures<R, S, OUT>): EndpointsFactory<MwIN, MwOUT & OUT, POS, NEG>;
20
24
  addOptions<OUT extends FlatObject>(options: OUT): EndpointsFactory<MwIN, MwOUT & OUT, POS, NEG>;
21
25
  build<IN extends IOSchema, OUT extends IOSchema, M extends Method>({ input, output, handler, description, ...rest }: BuildProps<IN, OUT, MwIN, MwOUT, M>): Endpoint<IN, OUT, MwIN, MwOUT, M, POS, NEG>;
22
26
  }
@@ -17,11 +17,29 @@ class EndpointsFactory {
17
17
  constructor(resultHandler) {
18
18
  this.resultHandler = resultHandler;
19
19
  this.middlewares = [];
20
+ this.use = this.addExpressMiddleware;
20
21
  this.resultHandler = resultHandler;
21
22
  }
22
23
  addMiddleware(definition) {
23
24
  return __classPrivateFieldGet(EndpointsFactory, _a, "m", _EndpointsFactory_create).call(EndpointsFactory, this.middlewares.concat(definition), this.resultHandler);
24
25
  }
26
+ addExpressMiddleware(middleware, features) {
27
+ const transformer = (features === null || features === void 0 ? void 0 : features.transformer) || ((err) => err);
28
+ const provider = (features === null || features === void 0 ? void 0 : features.provider) || (() => ({}));
29
+ const definition = (0, middleware_1.createMiddleware)({
30
+ input: zod_1.z.object({}),
31
+ middleware: async ({ request, response }) => new Promise((resolve, reject) => {
32
+ const next = (err) => {
33
+ if (err && err instanceof Error) {
34
+ return reject(transformer(err));
35
+ }
36
+ resolve(provider(request, response));
37
+ };
38
+ middleware(request, response, next);
39
+ }),
40
+ });
41
+ return __classPrivateFieldGet(EndpointsFactory, _a, "m", _EndpointsFactory_create).call(EndpointsFactory, this.middlewares.concat(definition), this.resultHandler);
42
+ }
25
43
  addOptions(options) {
26
44
  return __classPrivateFieldGet(EndpointsFactory, _a, "m", _EndpointsFactory_create).call(EndpointsFactory, this.middlewares.concat((0, middleware_1.createMiddleware)({
27
45
  input: zod_1.z.object({}),
@@ -1 +1 @@
1
- {"version":3,"file":"endpoints-factory.js","sourceRoot":"","sources":["../src/endpoints-factory.ts"],"names":[],"mappings":";;;;;;;;;AAAA,6BAAwB;AAExB,yCAA+C;AAC/C,qDAA0E;AAE1E,6CAAsE;AACtE,iCAAiD;AACjD,qDAG0B;AAe1B,MAAa,gBAAgB;IAQ3B,YAAsB,aAAgD;QAAhD,kBAAa,GAAb,aAAa,CAAmC;QAF5D,gBAAW,GAA0C,EAAE,CAAC;QAGhE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAkBM,aAAa,CAClB,UAAgD;QAEhD,OAAO,uBAAA,gBAAgB,oCAAQ,MAAxB,gBAAgB,EACrB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,EACnC,IAAI,CAAC,aAAa,CACnB,CAAC;IACJ,CAAC;IAEM,UAAU,CAAyB,OAAY;QACpD,OAAO,uBAAA,gBAAgB,oCAAQ,MAAxB,gBAAgB,EACrB,IAAI,CAAC,WAAW,CAAC,MAAM,CACrB,IAAA,6BAAgB,EAAC;YACf,KAAK,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YACnB,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,OAAO;SAChC,CAAC,CACH,EACD,IAAI,CAAC,aAAa,CACnB,CAAC;IACJ,CAAC;IAEM,KAAK,CAA8D,EACxE,KAAK,EACL,MAAM,EACN,OAAO,EACP,WAAW,EACX,GAAG,IAAI,EAC6B;QACpC,OAAO,IAAI,mBAAQ,CAAoC;YACrD,OAAO;YACP,WAAW;YACX,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,MAAM;YACpB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,SAAS,EAAE,IAAA,0BAAS,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAa,CAAC,CAAC,CAAC,CAAC,CAAC,eAAQ,CAAC;YAC1D,GAAG,IAAI;SACR,CAAC,CAAC;IACL,CAAC;CACF;AAnED,4CAmEC;oFAjDG,WAAkD,EAClD,aAAoD;IAEpD,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAClC,aAAa,CACd,CAAC;IACF,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;IAClC,OAAO,OAAO,CAAC;AACjB,CAAC;AA2CU,QAAA,uBAAuB,GAAG,IAAI,gBAAgB,CACzD,qCAAoB,CACrB,CAAC"}
1
+ {"version":3,"file":"endpoints-factory.js","sourceRoot":"","sources":["../src/endpoints-factory.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { Request, Response } from "express";
2
+ import { HttpError } from "http-errors";
2
3
  import { Logger } from "winston";
3
4
  import { z } from "zod";
4
5
  import { FlatObject, IOSchema } from "./common-helpers";
@@ -15,4 +16,9 @@ export interface MiddlewareDefinition<IN extends IOSchema, OPT, OUT extends Flat
15
16
  middleware: Middleware<z.output<IN>, OPT, OUT>;
16
17
  }
17
18
  export declare const createMiddleware: <IN extends IOSchema, OPT, OUT extends FlatObject>(definition: MiddlewareDefinition<IN, OPT, OUT>) => MiddlewareDefinition<IN, OPT, OUT>;
19
+ export declare type ExpressMiddleware<R extends Request, S extends Response> = (request: R, response: S, next: (error?: any) => void) => void | Promise<void>;
20
+ export interface ExpressMiddlewareFeatures<R extends Request, S extends Response, OUT extends FlatObject> {
21
+ provider?: (request: R, response: S) => OUT | Promise<OUT>;
22
+ transformer?: (err: Error) => HttpError | Error;
23
+ }
18
24
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":";;;AA0BO,MAAM,gBAAgB,GAAG,CAK9B,UAA8C,EAC9C,EAAE,CAAC,UAAU,CAAC;AANH,QAAA,gBAAgB,oBAMb"}
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":";;;AA2BO,MAAM,gBAAgB,GAAG,CAK9B,UAA8C,EAC9C,EAAE,CAAC,UAAU,CAAC;AANH,QAAA,gBAAgB,oBAMb"}
@@ -7,18 +7,36 @@ var _a, _EndpointsFactory_create;
7
7
  import { z } from "zod";
8
8
  import { Endpoint } from "./endpoint.js";
9
9
  import { hasUpload } from "./common-helpers.js";
10
- import { createMiddleware } from "./middleware.js";
10
+ import { createMiddleware, } from "./middleware.js";
11
11
  import { mimeJson, mimeMultipart } from "./mime.js";
12
12
  import { defaultResultHandler, } from "./result-handler.js";
13
13
  export class EndpointsFactory {
14
14
  constructor(resultHandler) {
15
15
  this.resultHandler = resultHandler;
16
16
  this.middlewares = [];
17
+ this.use = this.addExpressMiddleware;
17
18
  this.resultHandler = resultHandler;
18
19
  }
19
20
  addMiddleware(definition) {
20
21
  return __classPrivateFieldGet(EndpointsFactory, _a, "m", _EndpointsFactory_create).call(EndpointsFactory, this.middlewares.concat(definition), this.resultHandler);
21
22
  }
23
+ addExpressMiddleware(middleware, features) {
24
+ const transformer = (features === null || features === void 0 ? void 0 : features.transformer) || ((err) => err);
25
+ const provider = (features === null || features === void 0 ? void 0 : features.provider) || (() => ({}));
26
+ const definition = createMiddleware({
27
+ input: z.object({}),
28
+ middleware: async ({ request, response }) => new Promise((resolve, reject) => {
29
+ const next = (err) => {
30
+ if (err && err instanceof Error) {
31
+ return reject(transformer(err));
32
+ }
33
+ resolve(provider(request, response));
34
+ };
35
+ middleware(request, response, next);
36
+ }),
37
+ });
38
+ return __classPrivateFieldGet(EndpointsFactory, _a, "m", _EndpointsFactory_create).call(EndpointsFactory, this.middlewares.concat(definition), this.resultHandler);
39
+ }
22
40
  addOptions(options) {
23
41
  return __classPrivateFieldGet(EndpointsFactory, _a, "m", _EndpointsFactory_create).call(EndpointsFactory, this.middlewares.concat(createMiddleware({
24
42
  input: z.object({}),
@@ -1 +1 @@
1
- {"version":3,"file":"endpoints-factory.js","sourceRoot":"","sources":["../src/endpoints-factory.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAW,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAwB,SAAS,EAAS,MAAM,kBAAkB,CAAC;AAE1E,OAAO,EAAE,gBAAgB,EAAwB,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EACL,oBAAoB,GAErB,MAAM,kBAAkB,CAAC;AAe1B,MAAM,OAAO,gBAAgB;IAQ3B,YAAsB,aAAgD;QAAhD,kBAAa,GAAb,aAAa,CAAmC;QAF5D,gBAAW,GAA0C,EAAE,CAAC;QAGhE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAkBM,aAAa,CAClB,UAAgD;QAEhD,OAAO,uBAAA,gBAAgB,oCAAQ,MAAxB,gBAAgB,EACrB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,EACnC,IAAI,CAAC,aAAa,CACnB,CAAC;IACJ,CAAC;IAEM,UAAU,CAAyB,OAAY;QACpD,OAAO,uBAAA,gBAAgB,oCAAQ,MAAxB,gBAAgB,EACrB,IAAI,CAAC,WAAW,CAAC,MAAM,CACrB,gBAAgB,CAAC;YACf,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YACnB,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,OAAO;SAChC,CAAC,CACH,EACD,IAAI,CAAC,aAAa,CACnB,CAAC;IACJ,CAAC;IAEM,KAAK,CAA8D,EACxE,KAAK,EACL,MAAM,EACN,OAAO,EACP,WAAW,EACX,GAAG,IAAI,EAC6B;QACpC,OAAO,IAAI,QAAQ,CAAoC;YACrD,OAAO;YACP,WAAW;YACX,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,MAAM;YACpB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC1D,GAAG,IAAI;SACR,CAAC,CAAC;IACL,CAAC;CACF;oFAjDG,WAAkD,EAClD,aAAoD;IAEpD,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAClC,aAAa,CACd,CAAC;IACF,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;IAClC,OAAO,OAAO,CAAC;AACjB,CAAC;AA2CH,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,gBAAgB,CACzD,oBAAoB,CACrB,CAAC"}
1
+ {"version":3,"file":"endpoints-factory.js","sourceRoot":"","sources":["../src/endpoints-factory.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AA0BA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAK9B,UAA8C,EAC9C,EAAE,CAAC,UAAU,CAAC"}
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AA2BA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAK9B,UAA8C,EAC9C,EAAE,CAAC,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"type":"module","version":"5.5.3"}
1
+ {"type":"module","version":"5.6.0"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "express-zod-api",
3
- "version": "5.5.3",
3
+ "version": "5.6.0",
4
4
  "description": "A Typescript library to help you get an API server up and running with I/O schema validation and custom middlewares in minutes.",
5
5
  "license": "MIT",
6
6
  "scripts": {
@@ -41,13 +41,13 @@
41
41
  "@types/node": "*",
42
42
  "compression": "1.7.4",
43
43
  "express": "4.17.2",
44
- "express-fileupload": "1.2.1",
44
+ "express-fileupload": "1.3.1",
45
45
  "http-errors": "2.0.0",
46
46
  "mime": "3.0.0",
47
47
  "openapi3-ts": "2.0.1",
48
48
  "ramda": "0.28.0",
49
49
  "triple-beam": "1.3.0",
50
- "winston": "3.5.1",
50
+ "winston": "3.6.0",
51
51
  "zod": "3.11.6"
52
52
  },
53
53
  "peerDependencies": {
@@ -64,6 +64,7 @@
64
64
  },
65
65
  "devDependencies": {
66
66
  "@tsconfig/node12": "^1.0.9",
67
+ "@types/cors": "^2.8.12",
67
68
  "@types/jest": "^27.0.2",
68
69
  "@types/mime": "^2.0.3",
69
70
  "@types/node-fetch": "^2.5.12",
@@ -71,6 +72,7 @@
71
72
  "@types/triple-beam": "^1.3.2",
72
73
  "@typescript-eslint/eslint-plugin": "^5.4.0",
73
74
  "@typescript-eslint/parser": "^5.4.0",
75
+ "cors": "^2.8.5",
74
76
  "eslint": "^8.2.0",
75
77
  "eslint-config-airbnb-base": "^15.0.0",
76
78
  "eslint-config-airbnb-typescript": "^16.0.0",