@saasquatch/express-boilerplate 2.0.0 → 2.0.1-1

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.
@@ -1,10 +1,11 @@
1
- import { Logger } from "winston";
2
1
  import { formatGenericError } from "./error.js";
3
2
  import { nanoid } from "./nanoid.js";
4
3
  export function asyncHandlerWrapper(handler, renderErrorPage) {
5
4
  return (req, res) => {
6
5
  handler(req, res).catch((e) => {
6
+ // oxlint-disable-next-line typescript/no-unsafe-type-assertion
7
7
  const logger = res.locals["logger"];
8
+ // oxlint-disable-next-line typescript/no-unsafe-type-assertion
8
9
  const requestId = res.locals["requestId"];
9
10
  const debugId = nanoid(8);
10
11
  const error = {
@@ -27,10 +28,10 @@ export function asyncHandlerWrapper(handler, renderErrorPage) {
27
28
  .then((html) => {
28
29
  res.status(status).contentType("text/html;charset=utf8").send(html);
29
30
  })
30
- .catch((e) => {
31
+ .catch((e2) => {
31
32
  logger?.error({
32
33
  message: "Error occurred while rendering error page!",
33
- ...formatGenericError(e),
34
+ ...formatGenericError(e2),
34
35
  });
35
36
  res
36
37
  .status(status)
@@ -47,4 +48,4 @@ export function asyncHandlerWrapper(handler, renderErrorPage) {
47
48
  });
48
49
  };
49
50
  }
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtd3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hc3luYy13cmFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckMsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxPQUFvRCxFQUNwRCxlQUlvQjtJQUVwQixPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBVSxFQUFFLEVBQUU7WUFDckMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQXVCLENBQUM7WUFDMUQsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQXVCLENBQUM7WUFFaEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTFCLE1BQU0sS0FBSyxHQUFHO2dCQUNaLE9BQU87Z0JBQ1AsU0FBUztnQkFDVCxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQzthQUN6QixDQUFDO1lBRUYsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBRTVELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUNuQixNQUFNLE9BQU8sR0FDWCxDQUFDLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQztZQUVoRSxpRUFBaUU7WUFDakUsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3BCLE9BQU87WUFDVCxDQUFDO1lBRUQsb0VBQW9FO1lBQ3BFLDhEQUE4RDtZQUM5RCxJQUNFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO2dCQUNsRCxlQUFlLEVBQ2YsQ0FBQztnQkFDRCxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7cUJBQ3RDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO29CQUNiLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0RSxDQUFDLENBQUM7cUJBQ0QsS0FBSyxDQUFDLENBQUMsQ0FBVSxFQUFFLEVBQUU7b0JBQ3BCLE1BQU0sRUFBRSxLQUFLLENBQUM7d0JBQ1osT0FBTyxFQUFFLDRDQUE0Qzt3QkFDckQsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7cUJBQ3pCLENBQUMsQ0FBQztvQkFFSCxHQUFHO3lCQUNBLE1BQU0sQ0FBQyxNQUFNLENBQUM7eUJBQ2QsV0FBVyxDQUFDLGtCQUFrQixDQUFDO3lCQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7aUJBQU0sQ0FBQztnQkFDTixHQUFHO3FCQUNBLE1BQU0sQ0FBQyxNQUFNLENBQUM7cUJBQ2QsV0FBVyxDQUFDLGtCQUFrQixDQUFDO3FCQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUMifQ==
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtd3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hc3luYy13cmFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXJDLE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsT0FBb0QsRUFDcEQsZUFJb0I7SUFFcEIsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNsQixPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQVUsRUFBRSxFQUFFO1lBQ3JDLCtEQUErRDtZQUMvRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBdUIsQ0FBQztZQUMxRCwrREFBK0Q7WUFDL0QsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQXVCLENBQUM7WUFFaEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTFCLE1BQU0sS0FBSyxHQUFHO2dCQUNaLE9BQU87Z0JBQ1AsU0FBUztnQkFDVCxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQzthQUN6QixDQUFDO1lBRUYsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBRTVELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUNuQixNQUFNLE9BQU8sR0FDWCxDQUFDLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQztZQUVoRSxpRUFBaUU7WUFDakUsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3BCLE9BQU87WUFDVCxDQUFDO1lBRUQsb0VBQW9FO1lBQ3BFLDhEQUE4RDtZQUM5RCxJQUNFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO2dCQUNsRCxlQUFlLEVBQ2YsQ0FBQztnQkFDRCxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7cUJBQ3RDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO29CQUNiLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0RSxDQUFDLENBQUM7cUJBQ0QsS0FBSyxDQUFDLENBQUMsRUFBVyxFQUFFLEVBQUU7b0JBQ3JCLE1BQU0sRUFBRSxLQUFLLENBQUM7d0JBQ1osT0FBTyxFQUFFLDRDQUE0Qzt3QkFDckQsR0FBRyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7cUJBQzFCLENBQUMsQ0FBQztvQkFFSCxHQUFHO3lCQUNBLE1BQU0sQ0FBQyxNQUFNLENBQUM7eUJBQ2QsV0FBVyxDQUFDLGtCQUFrQixDQUFDO3lCQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7aUJBQU0sQ0FBQztnQkFDTixHQUFHO3FCQUNBLE1BQU0sQ0FBQyxNQUFNLENBQUM7cUJBQ2QsV0FBVyxDQUFDLGtCQUFrQixDQUFDO3FCQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUMifQ==
package/dist/error.js CHANGED
@@ -3,9 +3,9 @@ export function formatGenericError(e) {
3
3
  e,
4
4
  // we don't care that the value of e might be weird in the string template, the
5
5
  // whole point is to just convert it to a string no matter the type.
6
- // eslint-disable-next-line -- @typescript-eslint/restrict-template-expressions
6
+ // oxlint-disable-next-line typescript/restrict-template-expressions
7
7
  eStr: `${e}`,
8
8
  eJson: JSON.stringify(e),
9
9
  };
10
10
  }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsTUFBTSxVQUFVLGtCQUFrQixDQUFDLENBQVU7SUFDM0MsT0FBTztRQUNMLENBQUM7UUFDRCwrRUFBK0U7UUFDL0Usb0VBQW9FO1FBQ3BFLCtFQUErRTtRQUMvRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7UUFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7S0FDekIsQ0FBQztBQUNKLENBQUMifQ==
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsTUFBTSxVQUFVLGtCQUFrQixDQUFDLENBQVU7SUFDM0MsT0FBTztRQUNMLENBQUM7UUFDRCwrRUFBK0U7UUFDL0Usb0VBQW9FO1FBQ3BFLG9FQUFvRTtRQUNwRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7UUFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7S0FDekIsQ0FBQztBQUNKLENBQUMifQ==
@@ -1,5 +1,5 @@
1
+ import type { Logger } from "@saasquatch/logger";
1
2
  import type { Application, Request, Response } from "express";
2
- import { Logger } from "winston";
3
3
  export type HealthCheckResult<T, E> = {
4
4
  status: "OK";
5
5
  info?: T;
@@ -1,4 +1,3 @@
1
- import { Logger } from "winston";
2
1
  import { formatGenericError } from "./error.js";
3
2
  import { TERMINATION_APP_LOCAL_KEY } from "./shutdown.js";
4
3
  /**
@@ -9,11 +8,11 @@ import { TERMINATION_APP_LOCAL_KEY } from "./shutdown.js";
9
8
  */
10
9
  export function healthCheck(app, logger, customCheck) {
11
10
  return (_req, res) => {
12
- // eslint-disable-next-line -- @typescript-eslint/no-unsafe-assignment
13
11
  const terminating = app.locals[TERMINATION_APP_LOCAL_KEY];
14
12
  if (typeof terminating === "boolean" && terminating) {
15
13
  logger.info("App is in TERMINATING state, sending health check failure");
16
- return res.status(503).json({ status: "TERMINATING" });
14
+ res.status(503).json({ status: "TERMINATING" });
15
+ return;
17
16
  }
18
17
  if (customCheck) {
19
18
  customCheck()
@@ -33,8 +32,9 @@ export function healthCheck(app, logger, customCheck) {
33
32
  return;
34
33
  }
35
34
  else {
36
- return res.status(200).json({ status: "OK" });
35
+ res.status(200).json({ status: "OK" });
36
+ return;
37
37
  }
38
38
  };
39
39
  }
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoY2hlY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaGVhbHRoY2hlY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBWTFEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsR0FBZ0IsRUFDaEIsTUFBYyxFQUNkLFdBQW9EO0lBRXBELE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDbkIsc0VBQXNFO1FBQ3RFLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUMxRCxJQUFJLE9BQU8sV0FBVyxLQUFLLFNBQVMsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNwRCxNQUFNLENBQUMsSUFBSSxDQUFDLDJEQUEyRCxDQUFDLENBQUM7WUFDekUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFFRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLFdBQVcsRUFBRTtpQkFDVixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDZixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ2hELEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsQ0FBQyxDQUFVLEVBQUUsRUFBRTtnQkFDcEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDO2dCQUNqQixNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFcEMsTUFBTSxDQUFDLEtBQUssQ0FBQztvQkFDWCxPQUFPLEVBQUUscUNBQXFDO29CQUM5QyxHQUFHLEtBQUs7aUJBQ1QsQ0FBQyxDQUFDO2dCQUVILEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELENBQUMsQ0FBQyxDQUFDO1lBQ0wsT0FBTztRQUNULENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDLENBQUM7QUFDSixDQUFDIn0=
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoY2hlY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaGVhbHRoY2hlY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVkxRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQ3pCLEdBQWdCLEVBQ2hCLE1BQWMsRUFDZCxXQUFvRDtJQUVwRCxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ25CLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUMxRCxJQUFJLE9BQU8sV0FBVyxLQUFLLFNBQVMsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNwRCxNQUFNLENBQUMsSUFBSSxDQUFDLDJEQUEyRCxDQUFDLENBQUM7WUFDekUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUNoRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsV0FBVyxFQUFFO2lCQUNWLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNmLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDaEQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxDQUFDLENBQVUsRUFBRSxFQUFFO2dCQUNwQixNQUFNLElBQUksR0FBRyxHQUFHLENBQUM7Z0JBQ2pCLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVwQyxNQUFNLENBQUMsS0FBSyxDQUFDO29CQUNYLE9BQU8sRUFBRSxxQ0FBcUM7b0JBQzlDLEdBQUcsS0FBSztpQkFDVCxDQUFDLENBQUM7Z0JBRUgsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDcEQsQ0FBQyxDQUFDLENBQUM7WUFDTCxPQUFPO1FBQ1QsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQyJ9
@@ -1,5 +1,5 @@
1
+ import type { Logger } from "@saasquatch/logger";
1
2
  import type { NextFunction, Request, Response } from "express";
2
- import { Logger } from "winston";
3
3
  /**
4
4
  * Generate a requestId and derived child logger
5
5
  * for each request
@@ -1,4 +1,3 @@
1
- import { Logger } from "winston";
2
1
  import { nanoid } from "./nanoid.js";
3
2
  /**
4
3
  * Generate a requestId and derived child logger
@@ -16,4 +15,4 @@ export function requestIdAndLogger(baseLogger) {
16
15
  next();
17
16
  };
18
17
  }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9taWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVyQzs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLFVBQWtCO0lBRWxCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ3pCLElBQUksT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2hELHFFQUFxRTtZQUNyRSwrQkFBK0I7WUFDL0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsU0FBUyxDQUFDO1lBQ3BDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELElBQUksRUFBRSxDQUFDO0lBQ1QsQ0FBQyxDQUFDO0FBQ0osQ0FBQyJ9
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9taWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckM7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxVQUFrQjtJQUVsQixPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUN6QixJQUFJLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNoRCxxRUFBcUU7WUFDckUsK0JBQStCO1lBQy9CLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QixHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUNwQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxJQUFJLEVBQUUsQ0FBQztJQUNULENBQUMsQ0FBQztBQUNKLENBQUMifQ==
@@ -1,6 +1,6 @@
1
- import type { Application } from "express";
2
1
  import { Server } from "http";
3
- import { Logger } from "winston";
2
+ import type { Logger } from "@saasquatch/logger";
3
+ import type { Application } from "express";
4
4
  export declare const TERMINATION_APP_LOCAL_KEY = "__ssqt_terminating";
5
5
  export declare const INSTALLATION_APP_LOCAL_KEY = "__ssqt_shutdown_manager_installed";
6
6
  export type ShutdownManagerConfig = {
package/dist/shutdown.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { Server, createServer } from "http";
2
- import { Logger } from "winston";
3
2
  import { formatGenericError } from "./error.js";
4
3
  const handleHookError = (hook, logger) => (err) => {
5
4
  logger.error({
@@ -11,18 +10,18 @@ const handleHookError = (hook, logger) => (err) => {
11
10
  // these variables outside the library can result in unwanted behavior.
12
11
  export const TERMINATION_APP_LOCAL_KEY = "__ssqt_terminating";
13
12
  export const INSTALLATION_APP_LOCAL_KEY = "__ssqt_shutdown_manager_installed";
13
+ const optionalInt = (key, defaultVal) => {
14
+ const env = process.env[key];
15
+ if (!env) {
16
+ return defaultVal;
17
+ }
18
+ const parsedEnv = parseInt(env, 10);
19
+ if (Number.isNaN(parsedEnv)) {
20
+ throw new Error(`Environment variable "${key}" is not an integer`);
21
+ }
22
+ return parsedEnv;
23
+ };
14
24
  export function shutdownManagerConfigFromEnv(defaults) {
15
- const optionalInt = (key, defaultVal) => {
16
- const env = process.env[key];
17
- if (!env) {
18
- return defaultVal;
19
- }
20
- const parsedEnv = parseInt(env, 10);
21
- if (Number.isNaN(parsedEnv)) {
22
- throw new Error(`Environment variable "${key}" is not an integer`);
23
- }
24
- return parsedEnv;
25
- };
26
25
  const keepAliveTimeoutSeconds = optionalInt("SSQT_HTTP_KEEP_ALIVE_SECONDS", defaults?.keepAliveTimeoutSeconds ?? 60);
27
26
  const terminationDelaySeconds = optionalInt("SSQT_TERMINATION_DELAY_SECONDS", defaults?.terminationDelaySeconds ?? 0);
28
27
  return {
@@ -37,7 +36,6 @@ export function shutdownManagerConfigFromEnv(defaults) {
37
36
  export function installShutdownManager(app, logger, config) {
38
37
  app.disable("x-powered-by");
39
38
  const server = createServer(app);
40
- // eslint-disable-next-line -- @typescript-eslint/no-unsafe-assignment
41
39
  const shutdownManagerInstalled = app.locals[INSTALLATION_APP_LOCAL_KEY];
42
40
  if (typeof shutdownManagerInstalled === "boolean" &&
43
41
  shutdownManagerInstalled) {
@@ -49,7 +47,6 @@ export function installShutdownManager(app, logger, config) {
49
47
  server.keepAliveTimeout = config.keepAliveTimeoutSeconds * 1000;
50
48
  server.headersTimeout = (config.keepAliveTimeoutSeconds + 1) * 1000;
51
49
  const gracefulShutdown = (signal) => () => {
52
- // eslint-disable-next-line -- @typescript-eslint/no-unsafe-assignment
53
50
  const isTerminating = app.locals[TERMINATION_APP_LOCAL_KEY];
54
51
  if (typeof isTerminating === "boolean" && isTerminating) {
55
52
  logger.warn("Server is already in TERMINATING state, not starting shutdown procedure again");
@@ -101,4 +98,4 @@ export function installShutdownManager(app, logger, config) {
101
98
  process.on("SIGINT", gracefulShutdown("SIGINT"));
102
99
  return server;
103
100
  }
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2h1dGRvd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2h1dGRvd24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFaEQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxJQUFZLEVBQUUsTUFBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQVksRUFBRSxFQUFFO0lBQ3pFLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDWCxPQUFPLEVBQUUseUNBQXlDLElBQUksT0FBTztRQUM3RCxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQztLQUMzQixDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRix3RUFBd0U7QUFDeEUsdUVBQXVFO0FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLG9CQUFvQixDQUFDO0FBQzlELE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLG1DQUFtQyxDQUFDO0FBVTlFLE1BQU0sVUFBVSw0QkFBNEIsQ0FDMUMsUUFBeUM7SUFFekMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFXLEVBQUUsVUFBa0IsRUFBVSxFQUFFO1FBQzlELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsR0FB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
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2h1dGRvd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2h1dGRvd24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHNUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWhELE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBWSxFQUFFLE1BQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFZLEVBQUUsRUFBRTtJQUN6RSxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ1gsT0FBTyxFQUFFLHlDQUF5QyxJQUFJLE9BQU87UUFDN0QsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUM7S0FDM0IsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsd0VBQXdFO0FBQ3hFLHVFQUF1RTtBQUN2RSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxvQkFBb0IsQ0FBQztBQUM5RCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxtQ0FBbUMsQ0FBQztBQVU5RSxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQVcsRUFBRSxVQUFrQixFQUFVLEVBQUU7SUFDOUQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixHQUFHLHFCQUFxQixDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVGLE1BQU0s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
package/package.json CHANGED
@@ -1,58 +1,54 @@
1
1
  {
2
2
  "name": "@saasquatch/express-boilerplate",
3
- "version": "2.0.0",
4
- "description": "Boilerplate middleware and functions for building Express apps on Kubernetes",
5
- "main": "dist/index.js",
6
- "type": "module",
3
+ "version": "2.0.1-1",
7
4
  "private": false,
8
- "publishConfig": {
9
- "provenance": true,
10
- "access": "public"
5
+ "description": "Boilerplate middleware and functions for building Express apps on Kubernetes",
6
+ "homepage": "https://github.com/saasquatch/program-tools/packages/express-boilerplate#readme",
7
+ "bugs": {
8
+ "url": "https://github.com/saasquatch/program-tools/issues"
11
9
  },
12
- "author": "ReferralSaaSquatch.com, Inc.",
13
10
  "license": "MIT",
14
- "engines": {
15
- "node": "^24 || ^26"
11
+ "author": "ReferralSaaSquatch.com, Inc.",
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://github.com/saasquatch/program-tools.git"
16
15
  },
17
16
  "files": [
18
17
  "dist/*.js",
19
18
  "dist/*.d.ts"
20
19
  ],
21
- "repository": {
22
- "type": "git",
23
- "url": "git+https://github.com/saasquatch/program-tools.git"
24
- },
25
- "bugs": {
26
- "url": "https://github.com/saasquatch/program-tools/issues"
20
+ "type": "module",
21
+ "main": "dist/index.js",
22
+ "publishConfig": {
23
+ "access": "public",
24
+ "provenance": true
27
25
  },
28
- "homepage": "https://github.com/saasquatch/program-tools/packages/express-boilerplate#readme",
29
26
  "scripts": {
30
27
  "test": "node --test --experimental-test-coverage --test-reporter=spec --test-reporter-destination=stdout src/tests/**/*.ts",
31
28
  "build": "tsc -b",
32
- "check": "tsc --noEmit && npm run lint",
29
+ "check": "tsc --noEmit && oxlint",
30
+ "format": "oxfmt",
33
31
  "prepublishOnly": "if [ \"$CI\" != \"true\" ]; then echo Error: Publishing manually is not supported. Please use the GitHub action. && exit 1; fi",
34
- "prepack": "npm run build",
35
- "lint": "eslint ./src --report-unused-disable-directives"
32
+ "prepack": "npm run build"
36
33
  },
37
34
  "dependencies": {
38
- "nanoid": "^3.3.7"
35
+ "nanoid": "^6.0.1"
39
36
  },
40
37
  "devDependencies": {
41
- "@eslint/eslintrc": "^3.3.5",
42
- "@eslint/js": "^10.0.1",
43
- "@saasquatch/logger": "^3.0.0",
38
+ "@saasquatch/logger": "^3.0.1-5",
44
39
  "@types/express": "4",
45
40
  "@types/node": "^24.12.4",
46
41
  "@types/supertest": "^7.2.0",
47
- "@typescript-eslint/eslint-plugin": "^8.59.4",
48
- "@typescript-eslint/parser": "^8.59.4",
49
- "eslint": "^10.4.0",
42
+ "oxfmt": "^0.67.0",
43
+ "oxlint": "^1.82.0",
44
+ "oxlint-tsgolint": "^7.0.2001",
50
45
  "supertest": "^7.2.2",
51
- "typescript": "^6.0.3"
46
+ "typescript": "^7.0.2"
52
47
  },
53
48
  "peerDependencies": {
54
- "express": "4",
55
- "winston": "3"
49
+ "express": "^4.0.0"
56
50
  },
57
- "prettier": {}
51
+ "engines": {
52
+ "node": "^24 || ^26"
53
+ }
58
54
  }