@e22m4u/ts-rest-router 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
package/dist/cjs/index.cjs
CHANGED
@@ -556,9 +556,7 @@ var _ControllerRegistry = class _ControllerRegistry extends DebuggableService {
|
|
556
556
|
const dataValidator = this.getService(import_ts_data_schema2.DataValidator);
|
557
557
|
return (requestContext2) => {
|
558
558
|
this.debug("Executing route handler for %s.%s.", controllerCtor.name, actionName);
|
559
|
-
const args = Array(argsNumber).map((
|
560
|
-
if (value != null)
|
561
|
-
return value;
|
559
|
+
const args = Array(argsNumber).fill(void 0).map((_, index) => {
|
562
560
|
const requestContextMd = requestContextMetadataMap.get(index);
|
563
561
|
if (requestContextMd != null) {
|
564
562
|
this.debug("Argument %v has request context metadata.", index);
|
@@ -186,9 +186,9 @@ export class ControllerRegistry extends DebuggableService {
|
|
186
186
|
const dataValidator = this.getService(DataValidator);
|
187
187
|
return (requestContext) => {
|
188
188
|
this.debug('Executing route handler for %s.%s.', controllerCtor.name, actionName);
|
189
|
-
const args = Array(argsNumber)
|
190
|
-
|
191
|
-
|
189
|
+
const args = Array(argsNumber)
|
190
|
+
.fill(undefined)
|
191
|
+
.map((_, index) => {
|
192
192
|
// заполнение аргументов операции
|
193
193
|
// значениями из контекста запроса
|
194
194
|
const requestContextMd = requestContextMetadataMap.get(index);
|
package/package.json
CHANGED
@@ -253,100 +253,101 @@ export class ControllerRegistry extends DebuggableService {
|
|
253
253
|
controllerCtor.name,
|
254
254
|
actionName,
|
255
255
|
);
|
256
|
-
const args = Array(argsNumber)
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
}
|
285
|
-
// заполнение аргументов операции
|
286
|
-
// значениями из данных запроса
|
287
|
-
const requestDataMd = requestDataMetadataMap.get(index);
|
288
|
-
if (requestDataMd != null) {
|
289
|
-
this.debug('Argument %v has request data metadata.', index);
|
290
|
-
// получение данных
|
291
|
-
// согласно источнику
|
292
|
-
let data: unknown;
|
293
|
-
switch (requestDataMd.source) {
|
294
|
-
case RequestDataSource.PARAMS:
|
295
|
-
data = requestContext.params;
|
296
|
-
break;
|
297
|
-
case RequestDataSource.QUERY:
|
298
|
-
data = requestContext.query;
|
299
|
-
break;
|
300
|
-
case RequestDataSource.HEADERS:
|
301
|
-
data = requestContext.headers;
|
302
|
-
break;
|
303
|
-
case RequestDataSource.COOKIE:
|
304
|
-
data = requestContext.cookie;
|
305
|
-
break;
|
306
|
-
case RequestDataSource.BODY:
|
307
|
-
data = requestContext.body;
|
308
|
-
break;
|
309
|
-
}
|
310
|
-
this.debug('Request data source is %v.', requestDataMd.source);
|
311
|
-
// при наличии схемы данных выполняется
|
312
|
-
// их конвертация и валидация
|
313
|
-
if (requestDataMd.schema) {
|
314
|
-
data = dataTypeCaster.cast(data, requestDataMd.schema, {
|
315
|
-
noTypeCastError: true,
|
316
|
-
sourcePath: requestDataMd.source,
|
317
|
-
});
|
318
|
-
this.debug('Data type casting is passed.');
|
319
|
-
dataValidator.validate(
|
320
|
-
data,
|
321
|
-
requestDataMd.schema,
|
322
|
-
requestDataMd.source,
|
256
|
+
const args = Array(argsNumber)
|
257
|
+
.fill(undefined)
|
258
|
+
.map((_, index) => {
|
259
|
+
// заполнение аргументов операции
|
260
|
+
// значениями из контекста запроса
|
261
|
+
const requestContextMd = requestContextMetadataMap.get(index);
|
262
|
+
if (requestContextMd != null) {
|
263
|
+
this.debug('Argument %v has request context metadata.', index);
|
264
|
+
// если свойство контекста не определено,
|
265
|
+
// то используем весь объект контекста
|
266
|
+
// в качестве значения текущего аргумента
|
267
|
+
if (requestContextMd.property == null) {
|
268
|
+
this.debug('Request context property is not specified.');
|
269
|
+
this.debug('Argument %v is set to %v.', index, requestContext);
|
270
|
+
return requestContext;
|
271
|
+
}
|
272
|
+
// если свойство контекста определено,
|
273
|
+
// то используем значение этого свойства
|
274
|
+
// в качестве текущего аргумента
|
275
|
+
const propName = requestContextMd.property;
|
276
|
+
const propValue = requestContext[propName];
|
277
|
+
this.debug('Request context property is %v.', propName);
|
278
|
+
this.debug('Argument %v is set to %v.', index, propValue);
|
279
|
+
return propValue;
|
280
|
+
} else {
|
281
|
+
this.debug(
|
282
|
+
'No RequestContextMetadata specified for %v argument.',
|
283
|
+
index,
|
323
284
|
);
|
324
|
-
this.debug('Data validation is passed.');
|
325
285
|
}
|
326
|
-
//
|
327
|
-
//
|
328
|
-
|
329
|
-
if (requestDataMd
|
330
|
-
this.debug('
|
331
|
-
|
332
|
-
|
286
|
+
// заполнение аргументов операции
|
287
|
+
// значениями из данных запроса
|
288
|
+
const requestDataMd = requestDataMetadataMap.get(index);
|
289
|
+
if (requestDataMd != null) {
|
290
|
+
this.debug('Argument %v has request data metadata.', index);
|
291
|
+
// получение данных
|
292
|
+
// согласно источнику
|
293
|
+
let data: unknown;
|
294
|
+
switch (requestDataMd.source) {
|
295
|
+
case RequestDataSource.PARAMS:
|
296
|
+
data = requestContext.params;
|
297
|
+
break;
|
298
|
+
case RequestDataSource.QUERY:
|
299
|
+
data = requestContext.query;
|
300
|
+
break;
|
301
|
+
case RequestDataSource.HEADERS:
|
302
|
+
data = requestContext.headers;
|
303
|
+
break;
|
304
|
+
case RequestDataSource.COOKIE:
|
305
|
+
data = requestContext.cookie;
|
306
|
+
break;
|
307
|
+
case RequestDataSource.BODY:
|
308
|
+
data = requestContext.body;
|
309
|
+
break;
|
310
|
+
}
|
311
|
+
this.debug('Request data source is %v.', requestDataMd.source);
|
312
|
+
// при наличии схемы данных выполняется
|
313
|
+
// их конвертация и валидация
|
314
|
+
if (requestDataMd.schema) {
|
315
|
+
data = dataTypeCaster.cast(data, requestDataMd.schema, {
|
316
|
+
noTypeCastError: true,
|
317
|
+
sourcePath: requestDataMd.source,
|
318
|
+
});
|
319
|
+
this.debug('Data type casting is passed.');
|
320
|
+
dataValidator.validate(
|
321
|
+
data,
|
322
|
+
requestDataMd.schema,
|
323
|
+
requestDataMd.source,
|
324
|
+
);
|
325
|
+
this.debug('Data validation is passed.');
|
326
|
+
}
|
327
|
+
// если свойство данных не определено,
|
328
|
+
// то используем весь объекта данных
|
329
|
+
// в качестве значения текущего аргумента
|
330
|
+
if (requestDataMd.property == null) {
|
331
|
+
this.debug('Request data property is not specified.');
|
332
|
+
this.debug('Argument %v is set to %v.', index, data);
|
333
|
+
return data;
|
334
|
+
}
|
335
|
+
// если свойство данных определено,
|
336
|
+
// то используем значение этого свойства
|
337
|
+
// в качестве текущего аргумента
|
338
|
+
const dataAsObject = data as Record<string, unknown>;
|
339
|
+
const propName = requestDataMd.property;
|
340
|
+
const propValue = dataAsObject[propName];
|
341
|
+
this.debug('Request data property is %v.', propName);
|
342
|
+
this.debug('Argument %v is set to %v.', index, propValue);
|
343
|
+
return propValue;
|
344
|
+
} else {
|
345
|
+
this.debug(
|
346
|
+
'No RequestDataMetadata specified for %v argument.',
|
347
|
+
index,
|
348
|
+
);
|
333
349
|
}
|
334
|
-
|
335
|
-
// то используем значение этого свойства
|
336
|
-
// в качестве текущего аргумента
|
337
|
-
const dataAsObject = data as Record<string, unknown>;
|
338
|
-
const propName = requestDataMd.property;
|
339
|
-
const propValue = dataAsObject[propName];
|
340
|
-
this.debug('Request data property is %v.', propName);
|
341
|
-
this.debug('Argument %v is set to %v.', index, propValue);
|
342
|
-
return propValue;
|
343
|
-
} else {
|
344
|
-
this.debug(
|
345
|
-
'No RequestDataMetadata specified for %v argument.',
|
346
|
-
index,
|
347
|
-
);
|
348
|
-
}
|
349
|
-
});
|
350
|
+
});
|
350
351
|
// выполнение операции контроллера
|
351
352
|
const controller = this.getService(controllerCtor);
|
352
353
|
return (controller as AnyObject)[actionName](...args);
|