@drunkcod/express-kit 0.0.17 → 0.0.19

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,17 +6,18 @@ export * from './stopwatch.js';
6
6
  type AsyncFn<T> = () => Promise<T>;
7
7
  type ExpressServer = ReturnType<express.Application['listen']>;
8
8
  export type ErrorHandler = (error: Error, request: express.Request, response: express.Response, next: express.NextFunction) => void;
9
+ export type WithReqBody<T, ReqBody> = T extends express.Request<infer P, infer ResBody, unknown, infer Query, infer Locals> ? express.Request<P, ResBody, ReqBody, Query, Locals> : never;
9
10
  export declare function onceAsync<T>(fn: AsyncFn<T>): AsyncFn<T>;
10
11
  export declare function mergeCallsAsync<T>(fn: AsyncFn<T>): AsyncFn<T>;
11
12
  interface Listener<T> {
12
13
  listen(cb: () => void): T;
13
14
  listen(port: number, cb: () => void): T;
14
15
  }
15
- export declare function listenAsync<T>(server: Listener<T>, options?: {
16
+ export declare const listenAsync: <T>(server: Listener<T>, options?: {
16
17
  port?: number;
17
- }): Promise<T>;
18
- export declare function closeAsync(server: {
18
+ }) => Promise<T>;
19
+ export declare const closeAsync: (server: {
19
20
  close: (cb: (error?: Error) => void) => void;
20
- }): Promise<void>;
21
- export declare function registerShutdown<Server extends ExpressServer = ExpressServer>(server: Server, shutdown?: () => Promise<void>): void;
22
- export declare function requestTimingMiddleware(onRequestFinish: (req: express.Request, duration: Timespan) => void): (req: express.Request, res: express.Response, next: express.NextFunction) => void;
21
+ }) => Promise<void>;
22
+ export declare function registerShutdown<Server extends ExpressServer = ExpressServer>(server: Server, shutdown?: () => Promise<unknown>): void;
23
+ export declare const requestTimingMiddleware: (onRequestFinish: (req: express.Request, duration: Timespan) => void) => (req: express.Request, res: express.Response, next: express.NextFunction) => void;
package/lib/cjs/index.js CHANGED
@@ -14,12 +14,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.requestTimingMiddleware = exports.closeAsync = exports.listenAsync = void 0;
17
18
  exports.onceAsync = onceAsync;
18
19
  exports.mergeCallsAsync = mergeCallsAsync;
19
- exports.listenAsync = listenAsync;
20
- exports.closeAsync = closeAsync;
21
20
  exports.registerShutdown = registerShutdown;
22
- exports.requestTimingMiddleware = requestTimingMiddleware;
23
21
  const stopwatch_js_1 = require("./stopwatch.js");
24
22
  __exportStar(require("@drunkcod/express-async"), exports);
25
23
  __exportStar(require("./loggable.js"), exports);
@@ -47,44 +45,39 @@ function mergeCallsAsync(fn) {
47
45
  }
48
46
  };
49
47
  }
50
- function listenAsync(server, options) {
51
- return new Promise((resolve, reject) => {
52
- try {
53
- if (options?.port) {
54
- const r = server.listen(options.port, () => resolve(r));
55
- }
56
- else {
57
- const r = server.listen(() => resolve(r));
58
- }
48
+ const listenAsync = (server, options) => new Promise((resolve, reject) => {
49
+ try {
50
+ if (options?.port) {
51
+ const r = server.listen(options.port, () => resolve(r));
59
52
  }
60
- catch (err) {
61
- reject(err);
53
+ else {
54
+ const r = server.listen(() => resolve(r));
62
55
  }
63
- });
64
- }
65
- function closeAsync(server) {
66
- return new Promise((resolve, reject) => {
67
- server.close((err) => {
68
- if (err)
69
- reject(err);
70
- else
71
- resolve();
72
- });
73
- });
74
- }
56
+ }
57
+ catch (err) {
58
+ reject(err);
59
+ }
60
+ });
61
+ exports.listenAsync = listenAsync;
62
+ const closeAsync = (server) => new Promise((resolve, reject) => server.close((err) => {
63
+ if (err)
64
+ reject(err);
65
+ else
66
+ resolve();
67
+ }));
68
+ exports.closeAsync = closeAsync;
75
69
  function registerShutdown(server, shutdown) {
76
70
  const onShutdown = onceAsync(async () => {
77
- await closeAsync(server);
71
+ await (0, exports.closeAsync)(server);
78
72
  if (shutdown)
79
73
  await shutdown();
80
74
  });
81
75
  process.on('SIGINT', onShutdown);
82
76
  process.on('SIGTERM', onShutdown);
83
77
  }
84
- function requestTimingMiddleware(onRequestFinish) {
85
- return (req, res, next) => {
86
- const s = stopwatch_js_1.Stopwatch.startNew();
87
- res.on('finish', () => onRequestFinish(req, s.elapsed));
88
- next();
89
- };
90
- }
78
+ const requestTimingMiddleware = (onRequestFinish) => (req, res, next) => {
79
+ const s = stopwatch_js_1.Stopwatch.startNew();
80
+ res.on('finish', () => onRequestFinish(req, s.elapsed));
81
+ next();
82
+ };
83
+ exports.requestTimingMiddleware = requestTimingMiddleware;
package/lib/index.d.ts CHANGED
@@ -6,17 +6,18 @@ export * from './stopwatch.js';
6
6
  type AsyncFn<T> = () => Promise<T>;
7
7
  type ExpressServer = ReturnType<express.Application['listen']>;
8
8
  export type ErrorHandler = (error: Error, request: express.Request, response: express.Response, next: express.NextFunction) => void;
9
+ export type WithReqBody<T, ReqBody> = T extends express.Request<infer P, infer ResBody, unknown, infer Query, infer Locals> ? express.Request<P, ResBody, ReqBody, Query, Locals> : never;
9
10
  export declare function onceAsync<T>(fn: AsyncFn<T>): AsyncFn<T>;
10
11
  export declare function mergeCallsAsync<T>(fn: AsyncFn<T>): AsyncFn<T>;
11
12
  interface Listener<T> {
12
13
  listen(cb: () => void): T;
13
14
  listen(port: number, cb: () => void): T;
14
15
  }
15
- export declare function listenAsync<T>(server: Listener<T>, options?: {
16
+ export declare const listenAsync: <T>(server: Listener<T>, options?: {
16
17
  port?: number;
17
- }): Promise<T>;
18
- export declare function closeAsync(server: {
18
+ }) => Promise<T>;
19
+ export declare const closeAsync: (server: {
19
20
  close: (cb: (error?: Error) => void) => void;
20
- }): Promise<void>;
21
- export declare function registerShutdown<Server extends ExpressServer = ExpressServer>(server: Server, shutdown?: () => Promise<void>): void;
22
- export declare function requestTimingMiddleware(onRequestFinish: (req: express.Request, duration: Timespan) => void): (req: express.Request, res: express.Response, next: express.NextFunction) => void;
21
+ }) => Promise<void>;
22
+ export declare function registerShutdown<Server extends ExpressServer = ExpressServer>(server: Server, shutdown?: () => Promise<unknown>): void;
23
+ export declare const requestTimingMiddleware: (onRequestFinish: (req: express.Request, duration: Timespan) => void) => (req: express.Request, res: express.Response, next: express.NextFunction) => void;
package/lib/index.js CHANGED
@@ -25,31 +25,25 @@ export function mergeCallsAsync(fn) {
25
25
  }
26
26
  };
27
27
  }
28
- export function listenAsync(server, options) {
29
- return new Promise((resolve, reject) => {
30
- try {
31
- if (options?.port) {
32
- const r = server.listen(options.port, () => resolve(r));
33
- }
34
- else {
35
- const r = server.listen(() => resolve(r));
36
- }
28
+ export const listenAsync = (server, options) => new Promise((resolve, reject) => {
29
+ try {
30
+ if (options?.port) {
31
+ const r = server.listen(options.port, () => resolve(r));
37
32
  }
38
- catch (err) {
39
- reject(err);
33
+ else {
34
+ const r = server.listen(() => resolve(r));
40
35
  }
41
- });
42
- }
43
- export function closeAsync(server) {
44
- return new Promise((resolve, reject) => {
45
- server.close((err) => {
46
- if (err)
47
- reject(err);
48
- else
49
- resolve();
50
- });
51
- });
52
- }
36
+ }
37
+ catch (err) {
38
+ reject(err);
39
+ }
40
+ });
41
+ export const closeAsync = (server) => new Promise((resolve, reject) => server.close((err) => {
42
+ if (err)
43
+ reject(err);
44
+ else
45
+ resolve();
46
+ }));
53
47
  export function registerShutdown(server, shutdown) {
54
48
  const onShutdown = onceAsync(async () => {
55
49
  await closeAsync(server);
@@ -59,10 +53,8 @@ export function registerShutdown(server, shutdown) {
59
53
  process.on('SIGINT', onShutdown);
60
54
  process.on('SIGTERM', onShutdown);
61
55
  }
62
- export function requestTimingMiddleware(onRequestFinish) {
63
- return (req, res, next) => {
64
- const s = Stopwatch.startNew();
65
- res.on('finish', () => onRequestFinish(req, s.elapsed));
66
- next();
67
- };
68
- }
56
+ export const requestTimingMiddleware = (onRequestFinish) => (req, res, next) => {
57
+ const s = Stopwatch.startNew();
58
+ res.on('finish', () => onRequestFinish(req, s.elapsed));
59
+ next();
60
+ };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@drunkcod/express-kit",
3
3
  "type": "module",
4
- "version": "0.0.17",
4
+ "version": "0.0.19",
5
5
  "description": "Express4 utility things",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
@@ -26,9 +26,10 @@
26
26
  "compile": "tsc",
27
27
  "cjs:compile": "tsc --module commonjs --outdir lib/cjs",
28
28
  "cjs:fixup": "echo '{\"type\": \"commonjs\"}' > lib/cjs/package.json",
29
- "test": "NODE_OPTIONS=\"--experimental-vm-modules --no-warnings\" jest",
29
+ "test": "node --experimental-vm-modules --disable-warning=ExperimentalWarning node_modules/jest/bin/jest.js",
30
30
  "test:all": "npm-run-all \"test --workspaces --include-workspace-root\" --silent",
31
- "build": "npm-run-all clean -p compile cjs:compile -s cjs:fixup --silent"
31
+ "build": "npm-run-all clean -p compile cjs:compile -s cjs:fixup --silent",
32
+ "build:all": "npm-run-all \"build --workspaces --include-workspace-root\" --silent"
32
33
  },
33
34
  "keywords": [
34
35
  "express"
@@ -39,17 +40,18 @@
39
40
  "express-async"
40
41
  ],
41
42
  "dependencies": {
42
- "@drunkcod/argis": "^0.0.11",
43
- "@drunkcod/express-async": "^0.0.17"
43
+ "@drunkcod/argis": "^0.0.13",
44
+ "@drunkcod/express-async": "^0.0.18"
44
45
  },
45
46
  "devDependencies": {
46
- "@drunkcod/ts-jest-esm": "^0.0.1",
47
- "@jest/globals": "^29.7.0",
48
- "@types/node": "^22.13.10",
49
- "jest": "^29.7.0",
47
+ "@drunkcod/ts-jest-esm": "^0.0.3",
48
+ "@jest/globals": "^30.2.0",
49
+ "@types/node": "^24.9.1",
50
+ "jest": "^30.2.0",
51
+ "jest-util": "^30.2.0",
50
52
  "npm-run-all": "^4.1.5",
51
53
  "rimraf": "^6.0.1",
52
- "ts-jest": "^29.2.6",
53
- "typescript": "^5.8.2"
54
+ "ts-jest": "^29.4.5",
55
+ "typescript": "^5.9.3"
54
56
  }
55
57
  }