@openapi-typescript-infra/service 6.4.1 → 6.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/.github/workflows/nodejs.yml +2 -2
- package/__tests__/fake-serv.test.ts +2 -2
- package/build/openapi.js +5 -1
- package/build/openapi.js.map +1 -1
- package/package.json +31 -31
- package/src/openapi.ts +8 -1
|
@@ -99,9 +99,9 @@ describe('fake-serv', () => {
|
|
|
99
99
|
.expect((res) => {
|
|
100
100
|
expect(res.text).toMatch(/nodejs_version_info{version/);
|
|
101
101
|
expect(res.text).toMatch(/# UNIT http_server_duration ms/);
|
|
102
|
-
expect(res.text).toMatch(/world_requests_total{method="get"} 1/);
|
|
102
|
+
expect(res.text).toMatch(/world_requests_total{method="get".*} 1/);
|
|
103
103
|
expect(res.text).toContain(
|
|
104
|
-
'http_request_duration_seconds_bucket{status_code="200",method="GET",path="/world"',
|
|
104
|
+
'http_request_duration_seconds_bucket{status_code="200",method="GET",path="/world",service="fake-serv"',
|
|
105
105
|
);
|
|
106
106
|
});
|
|
107
107
|
|
package/build/openapi.js
CHANGED
|
@@ -2,7 +2,7 @@ import path from 'path';
|
|
|
2
2
|
import { merge } from 'moderndash';
|
|
3
3
|
import * as OpenApiValidator from 'express-openapi-validator';
|
|
4
4
|
import { OpenAPIFramework } from 'express-openapi-validator/dist/framework/index.js';
|
|
5
|
-
import { getNodeEnv } from './env.js';
|
|
5
|
+
import { getNodeEnv, isProd, isStaging } from './env.js';
|
|
6
6
|
import { getFilesInDir } from './express-app/modules.js';
|
|
7
7
|
const notImplementedHandler = (req, res) => {
|
|
8
8
|
res.status(501).json({
|
|
@@ -24,6 +24,10 @@ export async function openApi(app, rootDirectory, codepath, pattern, openApiOpti
|
|
|
24
24
|
const preloadedModules = await Promise.all(moduleFiles.map((file) => {
|
|
25
25
|
const fullPath = path.join(basePath, file);
|
|
26
26
|
return import(fullPath).catch((error) => {
|
|
27
|
+
if (isStaging() || isProd()) {
|
|
28
|
+
app.locals.logger.fatal({ file: fullPath, message: error.message }, 'Could not load potential API handler');
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
27
31
|
app.locals.logger.warn({ file: fullPath, message: error.message }, 'Could not load potential API handler');
|
|
28
32
|
return undefined;
|
|
29
33
|
});
|
package/build/openapi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.js","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,gBAAgB,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAC;AAIrF,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"openapi.js","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openapi-typescript-infra/service",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.6.0",
|
|
4
4
|
"description": "An opinionated framework for building configuration driven services - web, api, or ob. Uses OpenAPI, pino logging, express, confit, Typescript and vitest.",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -71,55 +71,55 @@
|
|
|
71
71
|
"dependencies": {
|
|
72
72
|
"@godaddy/terminus": "^4.12.1",
|
|
73
73
|
"@opentelemetry/api": "^1.9.0",
|
|
74
|
-
"@opentelemetry/auto-instrumentations-node": "^0.
|
|
75
|
-
"@opentelemetry/exporter-prometheus": "^0.
|
|
76
|
-
"@opentelemetry/instrumentation-dns": "^0.
|
|
77
|
-
"@opentelemetry/instrumentation-express": "^0.
|
|
78
|
-
"@opentelemetry/instrumentation-generic-pool": "^0.
|
|
79
|
-
"@opentelemetry/instrumentation-graphql": "^0.
|
|
80
|
-
"@opentelemetry/instrumentation-http": "^0.
|
|
81
|
-
"@opentelemetry/instrumentation-net": "^0.
|
|
82
|
-
"@opentelemetry/instrumentation-pg": "^0.
|
|
83
|
-
"@opentelemetry/instrumentation-pino": "^0.
|
|
84
|
-
"@opentelemetry/instrumentation-redis": "^0.
|
|
85
|
-
"@opentelemetry/instrumentation-undici": "^0.
|
|
86
|
-
"@opentelemetry/resource-detector-container": "^0.
|
|
87
|
-
"@opentelemetry/resource-detector-gcp": "^0.
|
|
88
|
-
"@opentelemetry/sdk-node": "^0.
|
|
89
|
-
"@opentelemetry/semantic-conventions": "^1.
|
|
74
|
+
"@opentelemetry/auto-instrumentations-node": "^0.69.0",
|
|
75
|
+
"@opentelemetry/exporter-prometheus": "^0.212.0",
|
|
76
|
+
"@opentelemetry/instrumentation-dns": "^0.54.0",
|
|
77
|
+
"@opentelemetry/instrumentation-express": "^0.59.0",
|
|
78
|
+
"@opentelemetry/instrumentation-generic-pool": "^0.54.0",
|
|
79
|
+
"@opentelemetry/instrumentation-graphql": "^0.58.0",
|
|
80
|
+
"@opentelemetry/instrumentation-http": "^0.212.0",
|
|
81
|
+
"@opentelemetry/instrumentation-net": "^0.55.0",
|
|
82
|
+
"@opentelemetry/instrumentation-pg": "^0.63.0",
|
|
83
|
+
"@opentelemetry/instrumentation-pino": "^0.57.0",
|
|
84
|
+
"@opentelemetry/instrumentation-redis": "^0.59.0",
|
|
85
|
+
"@opentelemetry/instrumentation-undici": "^0.21.0",
|
|
86
|
+
"@opentelemetry/resource-detector-container": "^0.8.2",
|
|
87
|
+
"@opentelemetry/resource-detector-gcp": "^0.46.0",
|
|
88
|
+
"@opentelemetry/sdk-node": "^0.212.0",
|
|
89
|
+
"@opentelemetry/semantic-conventions": "^1.39.0",
|
|
90
90
|
"@sesamecare-oss/confit": "^2.2.1",
|
|
91
|
-
"@sesamecare-oss/opentelemetry-node-metrics": "^
|
|
91
|
+
"@sesamecare-oss/opentelemetry-node-metrics": "^2.0.0",
|
|
92
92
|
"ajv": "^8.17.1",
|
|
93
93
|
"clean-stack": "^6.0.0",
|
|
94
94
|
"cookie-parser": "^1.4.7",
|
|
95
|
-
"dotenv": "^17.
|
|
95
|
+
"dotenv": "^17.3.1",
|
|
96
96
|
"express": "^5.2.1",
|
|
97
|
-
"express-openapi-validator": "^5.6.
|
|
98
|
-
"glob": "^13.0.
|
|
99
|
-
"import-in-the-middle": "^2.0.
|
|
97
|
+
"express-openapi-validator": "^5.6.2",
|
|
98
|
+
"glob": "^13.0.3",
|
|
99
|
+
"import-in-the-middle": "^2.0.6",
|
|
100
100
|
"minimist": "^1.2.8",
|
|
101
101
|
"moderndash": "^4.0.0",
|
|
102
102
|
"opentelemetry-resource-detector-sync-api": "^0.30.0",
|
|
103
|
-
"pino": "^10.
|
|
103
|
+
"pino": "^10.3.1",
|
|
104
104
|
"read-package-up": "^12.0.0",
|
|
105
105
|
"request-ip": "^3.3.0"
|
|
106
106
|
},
|
|
107
107
|
"devDependencies": {
|
|
108
|
-
"@commitlint/cli": "^20.
|
|
109
|
-
"@commitlint/config-conventional": "^20.
|
|
108
|
+
"@commitlint/cli": "^20.4.1",
|
|
109
|
+
"@commitlint/config-conventional": "^20.4.1",
|
|
110
110
|
"@openapi-typescript-infra/cpconfig": "^1.1.0",
|
|
111
111
|
"@semantic-release/commit-analyzer": "^13.0.1",
|
|
112
112
|
"@semantic-release/exec": "^7.1.0",
|
|
113
|
-
"@semantic-release/github": "^12.0.
|
|
113
|
+
"@semantic-release/github": "^12.0.6",
|
|
114
114
|
"@semantic-release/release-notes-generator": "^14.1.0",
|
|
115
115
|
"@types/cookie-parser": "^1.4.10",
|
|
116
116
|
"@types/express": "^5.0.6",
|
|
117
117
|
"@types/minimist": "^1.2.5",
|
|
118
|
-
"@types/node": "^24.10.
|
|
118
|
+
"@types/node": "^24.10.13",
|
|
119
119
|
"@types/request-ip": "^0.0.41",
|
|
120
120
|
"@types/supertest": "^6.0.3",
|
|
121
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
122
|
-
"@typescript-eslint/parser": "^8.
|
|
121
|
+
"@typescript-eslint/eslint-plugin": "^8.55.0",
|
|
122
|
+
"@typescript-eslint/parser": "^8.55.0",
|
|
123
123
|
"cpconfig": "^1.4.4",
|
|
124
124
|
"eslint": "^9.39.2",
|
|
125
125
|
"eslint-config-prettier": "^10.1.8",
|
|
@@ -127,12 +127,12 @@
|
|
|
127
127
|
"eslint-plugin-import": "^2.32.0",
|
|
128
128
|
"pino-pretty": "^13.1.3",
|
|
129
129
|
"pinst": "^3.0.0",
|
|
130
|
-
"prettier": "^3.
|
|
130
|
+
"prettier": "^3.8.1",
|
|
131
131
|
"supertest": "^7.2.2",
|
|
132
132
|
"tsconfig-paths": "^4.2.0",
|
|
133
133
|
"tsx": "^4.21.0",
|
|
134
134
|
"typescript": "^5.9.3",
|
|
135
|
-
"vitest": "^4.0.
|
|
135
|
+
"vitest": "^4.0.18"
|
|
136
136
|
},
|
|
137
137
|
"resolutions": {
|
|
138
138
|
"qs": "^6.11.0"
|
package/src/openapi.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { OpenAPIFramework } from 'express-openapi-validator/dist/framework/index
|
|
|
6
6
|
import type { Handler, Request, RequestHandler } from 'express';
|
|
7
7
|
|
|
8
8
|
import type { AnyServiceLocals, ServiceExpress, ServiceLocals } from './types.js';
|
|
9
|
-
import { getNodeEnv } from './env.js';
|
|
9
|
+
import { getNodeEnv, isProd, isStaging } from './env.js';
|
|
10
10
|
import { getFilesInDir } from './express-app/modules.js';
|
|
11
11
|
import type { ConfigurationSchema } from './config/schema.js';
|
|
12
12
|
|
|
@@ -47,6 +47,13 @@ export async function openApi<
|
|
|
47
47
|
moduleFiles.map((file) => {
|
|
48
48
|
const fullPath = path.join(basePath, file);
|
|
49
49
|
return import(fullPath).catch((error) => {
|
|
50
|
+
if (isStaging() || isProd()) {
|
|
51
|
+
app.locals.logger.fatal(
|
|
52
|
+
{ file: fullPath, message: error.message },
|
|
53
|
+
'Could not load potential API handler',
|
|
54
|
+
);
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
50
57
|
app.locals.logger.warn(
|
|
51
58
|
{ file: fullPath, message: error.message },
|
|
52
59
|
'Could not load potential API handler',
|