@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.
- package/dist/async-wrapper.js +5 -4
- package/dist/error.js +2 -2
- package/dist/healthcheck.d.ts +1 -1
- package/dist/healthcheck.js +5 -5
- package/dist/middleware.d.ts +1 -1
- package/dist/middleware.js +1 -2
- package/dist/shutdown.d.ts +2 -2
- package/dist/shutdown.js +12 -15
- package/package.json +27 -31
package/dist/async-wrapper.js
CHANGED
|
@@ -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((
|
|
31
|
+
.catch((e2) => {
|
|
31
32
|
logger?.error({
|
|
32
33
|
message: "Error occurred while rendering error page!",
|
|
33
|
-
...formatGenericError(
|
|
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,
|
|
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
|
-
//
|
|
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,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsTUFBTSxVQUFVLGtCQUFrQixDQUFDLENBQVU7SUFDM0MsT0FBTztRQUNMLENBQUM7UUFDRCwrRUFBK0U7UUFDL0Usb0VBQW9FO1FBQ3BFLG9FQUFvRTtRQUNwRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7UUFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7S0FDekIsQ0FBQztBQUNKLENBQUMifQ==
|
package/dist/healthcheck.d.ts
CHANGED
package/dist/healthcheck.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
35
|
+
res.status(200).json({ status: "OK" });
|
|
36
|
+
return;
|
|
37
37
|
}
|
|
38
38
|
};
|
|
39
39
|
}
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoY2hlY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaGVhbHRoY2hlY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVkxRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQ3pCLEdBQWdCLEVBQ2hCLE1BQWMsRUFDZCxXQUFvRDtJQUVwRCxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ25CLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUMxRCxJQUFJLE9BQU8sV0FBVyxLQUFLLFNBQVMsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNwRCxNQUFNLENBQUMsSUFBSSxDQUFDLDJEQUEyRCxDQUFDLENBQUM7WUFDekUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUNoRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsV0FBVyxFQUFFO2lCQUNWLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNmLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDaEQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxDQUFDLENBQVUsRUFBRSxFQUFFO2dCQUNwQixNQUFNLElBQUksR0FBRyxHQUFHLENBQUM7Z0JBQ2pCLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVwQyxNQUFNLENBQUMsS0FBSyxDQUFDO29CQUNYLE9BQU8sRUFBRSxxQ0FBcUM7b0JBQzlDLEdBQUcsS0FBSztpQkFDVCxDQUFDLENBQUM7Z0JBRUgsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDcEQsQ0FBQyxDQUFDLENBQUM7WUFDTCxPQUFPO1FBQ1QsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQyJ9
|
package/dist/middleware.d.ts
CHANGED
package/dist/middleware.js
CHANGED
|
@@ -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,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9taWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckM7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxVQUFrQjtJQUVsQixPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUN6QixJQUFJLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNoRCxxRUFBcUU7WUFDckUsK0JBQStCO1lBQy9CLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QixHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUNwQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxJQUFJLEVBQUUsQ0FBQztJQUNULENBQUMsQ0FBQztBQUNKLENBQUMifQ==
|
package/dist/shutdown.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { Application } from "express";
|
|
2
1
|
import { Server } from "http";
|
|
3
|
-
import { Logger } from "
|
|
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,
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2h1dGRvd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2h1dGRvd24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHNUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWhELE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBWSxFQUFFLE1BQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFZLEVBQUUsRUFBRTtJQUN6RSxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ1gsT0FBTyxFQUFFLHlDQUF5QyxJQUFJLE9BQU87UUFDN0QsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUM7S0FDM0IsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsd0VBQXdFO0FBQ3hFLHVFQUF1RTtBQUN2RSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxvQkFBb0IsQ0FBQztBQUM5RCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxtQ0FBbUMsQ0FBQztBQVU5RSxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQVcsRUFBRSxVQUFrQixFQUFVLEVBQUU7SUFDOUQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixHQUFHLHFCQUFxQixDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSw0QkFBNEIsQ0FDMUMsUUFBeUM7SUFFekMsTUFBTSx1QkFBdUIsR0FBRyxXQUFXLENBQ3pDLDhCQUE4QixFQUM5QixRQUFRLEVBQUUsdUJBQXVCLElBQUksRUFBRSxDQUN4QyxDQUFDO0lBRUYsTUFBTSx1QkFBdUIsR0FBRyxXQUFXLENBQ3pDLGdDQUFnQyxFQUNoQyxRQUFRLEVBQUUsdUJBQXVCLElBQUksQ0FBQyxDQUN2QyxDQUFDO0lBRUYsT0FBTztRQUNMLHVCQUF1QjtRQUN2Qix1QkFBdUI7S0FDeEIsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLEdBQWdCLEVBQ2hCLE1BQWMsRUFDZCxNQUE2QjtJQUU3QixHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVqQyxNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUV4RSxJQUNFLE9BQU8sd0JBQXdCLEtBQUssU0FBUztRQUM3Qyx3QkFBd0IsRUFDeEIsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsR0FBRyxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUU5QywrRkFBK0Y7SUFDL0YsNEVBQTRFO0lBQzVFLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO0lBQ2hFLE1BQU0sQ0FBQyxjQUFjLEdBQUcsQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBRXBFLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRTtRQUNoRCxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFFNUQsSUFBSSxPQUFPLGFBQWEsS0FBSyxTQUFTLElBQUksYUFBYSxFQUFFLENBQUM7WUFDeEQsTUFBTSxDQUFDLElBQUksQ0FDVCwrRUFBK0UsQ0FDaEYsQ0FBQztZQUNGLE9BQU87UUFDVCxDQUFDO1FBRUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUU3QyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksTUFBTSxzQ0FBc0MsQ0FBQyxDQUFDO1FBRXhFLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRTtZQUNwQixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLE1BQU0sV0FBVyxHQUFHLEdBQUcsRUFBRTtvQkFDdkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7d0JBQ2hCLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7d0JBRS9CLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDOzRCQUN6QixNQUFNLENBQUMsS0FBSyxDQUNWLCtEQUErRCxDQUNoRSxDQUFDOzRCQUNGLE1BQU07aUNBQ0gsYUFBYSxFQUFFO2lDQUNmLEtBQUssQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2lDQUMvQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNwQyxDQUFDO29CQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQztnQkFFRixJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDMUIsTUFBTTt5QkFDSCxjQUFjLEVBQUU7eUJBQ2hCLEtBQUssQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUM7eUJBQ2hELE9BQU8sQ0FBQyxHQUFHLEVBQUU7d0JBQ1osV0FBVyxFQUFFLENBQUM7b0JBQ2hCLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7cUJBQU0sQ0FBQztvQkFDTixXQUFXLEVBQUUsQ0FBQztnQkFDaEIsQ0FBQztZQUNILENBQUMsRUFBRSxNQUFNLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM1QixNQUFNLENBQUMsS0FBSyxDQUNWLGtFQUFrRSxDQUNuRSxDQUFDO1lBRUYsTUFBTTtpQkFDSCxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7aUJBQ3hCLEtBQUssQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUM7aUJBQ2xELE9BQU8sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osUUFBUSxFQUFFLENBQUM7WUFDYixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7YUFBTSxDQUFDO1lBQ04sUUFBUSxFQUFFLENBQUM7UUFDYixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsT0FBTyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNuRCxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRWpELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMifQ==
|
package/package.json
CHANGED
|
@@ -1,58 +1,54 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@saasquatch/express-boilerplate",
|
|
3
|
-
"version": "2.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
|
-
"
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
"
|
|
15
|
-
|
|
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
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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 &&
|
|
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": "^
|
|
35
|
+
"nanoid": "^6.0.1"
|
|
39
36
|
},
|
|
40
37
|
"devDependencies": {
|
|
41
|
-
"@
|
|
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
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
42
|
+
"oxfmt": "^0.67.0",
|
|
43
|
+
"oxlint": "^1.82.0",
|
|
44
|
+
"oxlint-tsgolint": "^7.0.2001",
|
|
50
45
|
"supertest": "^7.2.2",
|
|
51
|
-
"typescript": "^
|
|
46
|
+
"typescript": "^7.0.2"
|
|
52
47
|
},
|
|
53
48
|
"peerDependencies": {
|
|
54
|
-
"express": "4"
|
|
55
|
-
"winston": "3"
|
|
49
|
+
"express": "^4.0.0"
|
|
56
50
|
},
|
|
57
|
-
"
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": "^24 || ^26"
|
|
53
|
+
}
|
|
58
54
|
}
|