Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Epic: Supporting Express 5 #1530

Merged
merged 78 commits into from
Sep 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
e33287c
Installing 5.0.0-beta1.
RobinTail Jan 30, 2024
fd57fa7
Allowing 5x peer.
RobinTail Jan 30, 2024
de3b660
Merge branch 'master' into express5-2024
RobinTail Feb 19, 2024
5d672c7
Merge branch 'master' into express5-2024
RobinTail Feb 23, 2024
7a06a94
Merge branch 'master' into express5-2024
RobinTail Feb 27, 2024
34abc9d
Merge branch 'master' into express5-2024
RobinTail Feb 29, 2024
8db0f81
Merge branch 'master' into express5-2024
RobinTail Mar 2, 2024
ca57c7d
Merge branch 'master' into express5-2024
RobinTail Mar 8, 2024
db76fb9
Merge branch 'master' into express5-2024
RobinTail Mar 12, 2024
768db55
Merge branch 'master' into express5-2024
RobinTail Mar 14, 2024
2b677b2
Merge branch 'master' into express5-2024
RobinTail Mar 16, 2024
c320b12
Merge branch 'master' into express5-2024
RobinTail Mar 16, 2024
5c04299
Merge branch 'master' into express5-2024
RobinTail Mar 16, 2024
8be24f8
Merge branch 'master' into express5-2024
RobinTail Mar 19, 2024
0a9c332
Merge branch 'master' into express5-2024
RobinTail Mar 21, 2024
61b3d58
Using beta2.
RobinTail Mar 21, 2024
3168255
Merging from master and using beta3.
RobinTail Mar 25, 2024
1c46b4b
Merge branch 'master' into express5-2024
RobinTail Mar 27, 2024
4dfac7f
Merge branch 'master' into express5-2024
RobinTail Mar 30, 2024
dca19ac
Merge branch 'master' into express5-2024
RobinTail Apr 2, 2024
96378c5
Merge branch 'master' into express5-2024
RobinTail Apr 3, 2024
a126e6d
Merge branch 'master' into express5-2024
RobinTail Apr 5, 2024
6cb2e8a
Merge branch 'master' into express5-2024
RobinTail Apr 8, 2024
bacc7af
Merge branch 'master' into express5-2024
RobinTail Apr 10, 2024
28d9d54
Merge branch 'master' into express5-2024
RobinTail Apr 19, 2024
ba6a146
Merge branch 'master' into express5-2024
RobinTail Apr 20, 2024
db132cd
Merge branch 'master' into express5-2024
RobinTail Apr 22, 2024
4319190
Merge branch 'master' into express5-2024
RobinTail Apr 24, 2024
fb0ead3
Merge branch 'master' into express5-2024
RobinTail Apr 29, 2024
0064934
Merge branch 'master' into express5-2024
RobinTail Apr 30, 2024
fdbd084
Merge branch 'master' into express5-2024
RobinTail May 1, 2024
d640fee
Merge branch 'master' into express5-2024
RobinTail May 4, 2024
847e14e
Merge branch 'master' into express5-2024
RobinTail May 6, 2024
7a5f113
Merge branch 'master' into express5-2024
RobinTail May 7, 2024
7c26c5f
Merge branch 'master' into express5-2024
RobinTail May 12, 2024
f5e83f6
Merge branch 'master' into express5-2024
RobinTail May 12, 2024
f13753b
Merge branch 'master' into express5-2024
RobinTail May 13, 2024
97e55c4
Merge branch 'master' into express5-2024
RobinTail May 13, 2024
b67889d
Merge branch 'master' into express5-2024
RobinTail May 13, 2024
dd98a69
Merge branch 'master' into express5-2024
RobinTail May 16, 2024
e732a9b
Merge branch 'master' into express5-2024
RobinTail May 18, 2024
02376f8
Merge branch 'master' into express5-2024
RobinTail May 23, 2024
3f4c66b
Merge branch 'master' into express5-2024
RobinTail Jun 2, 2024
138c056
Merge branch 'master' into express5-2024
RobinTail Jun 5, 2024
a1b4838
Merge branch 'master' into express5-2024
RobinTail Jun 6, 2024
364ff7a
Merge branch 'master' into express5-2024
RobinTail Jun 26, 2024
48e7c47
Merge branch 'master' into express5-2024
RobinTail Jun 28, 2024
23b9132
Merge branch 'master' into express5-2024
RobinTail Jul 3, 2024
92c049a
Merge branch 'master' into express5-2024
RobinTail Jul 7, 2024
4139f04
Merge branch 'master' into express5-2024
RobinTail Jul 7, 2024
aec2097
Merge branch 'master' into express5-2024
RobinTail Jul 8, 2024
23bbd5c
Merge branch 'master' into express5-2024
RobinTail Jul 9, 2024
85f9fa1
Merge branch 'master' into express5-2024
RobinTail Jul 19, 2024
c94a57a
Merge branch 'master' into express5-2024
RobinTail Jul 21, 2024
8c8815d
Merge branch 'master' into express5-2024
RobinTail Jul 23, 2024
ea126ed
Merge branch 'master' into express5-2024
RobinTail Aug 4, 2024
276073d
Merge branch 'master' into express5-2024
RobinTail Aug 8, 2024
33c767e
Merge branch 'master' into express5-2024
RobinTail Aug 18, 2024
9dce72d
Merge branch 'master' into express5-2024
RobinTail Aug 29, 2024
289a701
Merge branch 'master' into express5-2024
RobinTail Aug 30, 2024
ae52b37
Merge branch 'master' into express5-2024
RobinTail Sep 1, 2024
b6926b3
Merge branch 'master' into express5-2024
RobinTail Sep 6, 2024
950e6a8
Merge branch 'master' into express5-2024
RobinTail Sep 9, 2024
9430c44
Merge branch 'master' into express5-2024
RobinTail Sep 10, 2024
78e9c0f
Using 5.0.0 prod ready.
RobinTail Sep 10, 2024
e2751aa
Tmp: testing with supported Promise using augmentation.
RobinTail Sep 10, 2024
c50afa5
Revert "Tmp: testing with supported Promise using augmentation."
RobinTail Sep 10, 2024
e69c363
Tmp: patching @types/express-serve-static-core until v5 is released.
RobinTail Sep 10, 2024
808294c
postintall script.
RobinTail Sep 10, 2024
d097d4f
Add return statement to createParserFailureHandler().
RobinTail Sep 10, 2024
ca8e588
Add return statement into createUploadParsers().
RobinTail Sep 10, 2024
3a6a9e1
Tmp: testing with express 4.
RobinTail Sep 10, 2024
f5667ee
Revert "Tmp: testing with express 4."
RobinTail Sep 10, 2024
832b76c
Changelog: 20.10.0.
RobinTail Sep 10, 2024
905b2a6
Supporting async native middlewares.
RobinTail Sep 10, 2024
de3f4be
Readme: listing the feature.
RobinTail Sep 10, 2024
b22bd70
Ref: using vitest/chai/assert in test.
RobinTail Sep 10, 2024
3a59641
20.10.0-beta.1
RobinTail Sep 10, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

## Version 20

### v20.10.0

- Feat: Supporting Express 5
- Epic news: after 10 years of struggles and anticipations
[Express 5.0.0 is finally released](https://github.com/expressjs/express/releases/tag/v5.0.0);
- The primary a mostly awaited feature is the proper support of asynchronous handlers;
- This version introduces the initial support of Express 5 without breaking changes;
- Notice: the corresponding `@types/express` for the version 5 is not yet released;
- [Instructions on migrating to Express 5](https://expressjs.com/en/guide/migrating-5.html).

### v20.9.2

- Minor syntax adjustments and cleanup;
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ Therefore, many basic tasks can be accomplished faster and easier, in particular
## Technologies

- [Typescript](https://www.typescriptlang.org/) first.
- Web server — [Express.js](https://expressjs.com/).
- Web server — [Express.js](https://expressjs.com/) v4 or v5.
- Schema validation — [Zod 3.x](https://github.com/colinhacks/zod) including [Zod Plugin](#zod-plugin).
- Supports any logger having `info()`, `debug()`, `error()` and `warn()` methods;
- Built-in console logger with colorful and pretty inspections by default.
Expand Down
2 changes: 1 addition & 1 deletion example/example.documentation.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
openapi: 3.1.0
info:
title: Example API
version: 20.9.2
version: 20.10.0-beta.1
paths:
/v1/user/retrieve:
get:
Expand Down
7 changes: 4 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "express-zod-api",
"version": "20.9.2",
"version": "20.10.0-beta.1",
"description": "A Typescript library to help you get an API server up and running with I/O schema validation and custom middlewares in minutes.",
"license": "MIT",
"repository": {
Expand All @@ -17,6 +17,7 @@
"url": "https://github.com/RobinTail/express-zod-api/issues"
},
"scripts": {
"postinstall": "npx patch-package",
"start": "tsx example/index.ts",
"build": "yarn build:compile && yarn build:tests && yarn build:assets",
"build:compile": "tsup && attw --pack",
Expand Down Expand Up @@ -88,7 +89,7 @@
"@types/express-fileupload": "^1.5.0",
"@types/http-errors": "^2.0.2",
"compression": "^1.7.4",
"express": "^4.19.2",
"express": "^4.18.2 || ^5.0.0",
"express-fileupload": "^1.5.0",
"http-errors": "^2.0.0",
"typescript": "^5.1.3",
Expand Down Expand Up @@ -139,7 +140,7 @@
"eslint-plugin-allowed-dependencies": "^1.0.0",
"eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-unicorn": "^55.0.0",
"express": "^4.19.2",
"express": "^5.0.0",
"express-fileupload": "^1.5.0",
"globals": "^15.3.0",
"http-errors": "^2.0.0",
Expand Down
22 changes: 22 additions & 0 deletions patches/@types+express-serve-static-core+4.19.5.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
diff --git a/node_modules/@types/express-serve-static-core/index.d.ts b/node_modules/@types/express-serve-static-core/index.d.ts
index aee3041..69755e5 100644
--- a/node_modules/@types/express-serve-static-core/index.d.ts
+++ b/node_modules/@types/express-serve-static-core/index.d.ts
@@ -61,7 +61,7 @@ export interface RequestHandler<
req: Request<P, ResBody, ReqBody, ReqQuery, LocalsObj>,
res: Response<ResBody, LocalsObj>,
next: NextFunction,
- ): void;
+ ): void | Promise<void>;
}

export type ErrorRequestHandler<
@@ -75,7 +75,7 @@ export type ErrorRequestHandler<
req: Request<P, ResBody, ReqBody, ReqQuery, LocalsObj>,
res: Response<ResBody, LocalsObj>,
next: NextFunction,
-) => void;
+) => void | Promise<void>;

export type PathParams = string | RegExp | Array<string | RegExp>;

2 changes: 1 addition & 1 deletion src/middleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ export class ExpressMiddleware<
}
resolve(provider(request as R, response as S));
};
nativeMw(request as R, response as S, next);
nativeMw(request as R, response as S, next)?.catch(next);
}),
});
}
Expand Down
4 changes: 2 additions & 2 deletions src/server-helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ export const createParserFailureHandler =
if (!error) {
return next();
}
errorHandler.execute({
return errorHandler.execute({
error: isHttpError(error)
? error
: createHttpError(400, makeErrorFromAnything(error).message),
Expand Down Expand Up @@ -111,7 +111,7 @@ export const createUploadParsers = async ({
} catch (error) {
return next(error);
}
uploader({
return uploader({
debug: true,
...options,
abortOnLimit: false,
Expand Down
14 changes: 14 additions & 0 deletions tests/unit/endpoints-factory.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,20 @@ describe("EndpointsFactory", () => {
expect(options).toEqual({ result: "Here is the test" });
});

test("Should handle rejects from async middlewares", async () => {
const factory = new EndpointsFactory(resultHandlerMock);
const middleware: RequestHandler = vi.fn(async () =>
assert.fail("Rejected"),
);
const newFactory = factory[method](middleware);
await expect(() =>
testMiddleware({
middleware: newFactory["middlewares"][0],
}),
).rejects.toThrow(new Error("Rejected"));
expect(middleware).toHaveBeenCalledTimes(1);
});

test("Should operate without options provider", async () => {
const factory = new EndpointsFactory(resultHandlerMock);
const middleware: RequestHandler = vi.fn((req, {}, next) => {
Expand Down
Loading