Skip to content

Commit 0439224

Browse files
cdimasciocarmine
andauthored
allow mutation for express 5 validaiton (#1043)
Co-authored-by: carmine <carmine@everco.ai>
1 parent 405a9ff commit 0439224

File tree

1 file changed

+23
-12
lines changed

1 file changed

+23
-12
lines changed

src/middlewares/openapi.request.validator.ts

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
import Ajv, { ValidateFunction } from 'ajv';
2-
import { createRequestAjv } from '../framework/ajv';
3-
import {
4-
ContentType,
5-
ajvErrorsToValidatorError,
6-
augmentAjvErrors,
7-
} from './util';
82
import { NextFunction, RequestHandler, Response } from 'express';
3+
import { createRequestAjv } from '../framework/ajv';
94
import {
5+
BadRequest,
6+
BodySchema,
7+
NotFound,
108
OpenAPIV3,
119
OpenApiRequest,
12-
RequestValidatorOptions,
13-
ValidateRequestOpts,
1410
OpenApiRequestMetadata,
15-
NotFound,
16-
BadRequest,
1711
ParametersSchema,
18-
BodySchema,
12+
RequestValidatorOptions,
13+
ValidateRequestOpts,
1914
ValidationSchema,
2015
} from '../framework/types';
2116
import { BodySchemaParser } from './parsers/body.parse';
22-
import { ParametersSchemaParser } from './parsers/schema.parse';
2317
import { RequestParameterMutator } from './parsers/req.parameter.mutator';
18+
import { ParametersSchemaParser } from './parsers/schema.parse';
19+
import {
20+
ContentType,
21+
ajvErrorsToValidatorError,
22+
augmentAjvErrors,
23+
} from './util';
2424

2525
type OperationObject = OpenAPIV3.OperationObject;
2626
type SchemaObject = OpenAPIV3.SchemaObject;
@@ -140,6 +140,12 @@ export class RequestValidator {
140140
req.params = openapi.pathParams ?? req.params;
141141
}
142142

143+
// HACK for express 5, temporarily make req.query mutable
144+
const reqQueryDescriptor = Object.getOwnPropertyDescriptor(req, 'query');
145+
Object.defineProperty(req, 'query', {
146+
writable: true,
147+
value: req.query,
148+
})
143149
const schemaProperties = validator.allSchemaProperties;
144150
const mutator = new RequestParameterMutator(
145151
this.ajv,
@@ -158,6 +164,11 @@ export class RequestValidator {
158164
);
159165
}
160166

167+
// HACK for express 5, Restore the original descriptor
168+
if (reqQueryDescriptor) {
169+
Object.defineProperty(req, 'query', reqQueryDescriptor);
170+
}
171+
161172
const cookies = req.cookies
162173
? {
163174
...req.cookies,

0 commit comments

Comments
 (0)