@e22m4u/ts-rest-router 0.0.3 → 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
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@e22m4u/ts-rest-router",
|
3
|
-
"version": "0.0.
|
3
|
+
"version": "0.0.5",
|
4
4
|
"description": "Controllers-based REST router implementation for TypeScript",
|
5
5
|
"author": "e22m4u <e22m4u@yandex.ru>",
|
6
6
|
"keywords": [
|
@@ -48,28 +48,28 @@
|
|
48
48
|
"http-errors": "~2.0.0"
|
49
49
|
},
|
50
50
|
"devDependencies": {
|
51
|
-
"@commitlint/cli": "~19.
|
52
|
-
"@commitlint/config-conventional": "~19.
|
53
|
-
"@eslint/js": "~9.
|
51
|
+
"@commitlint/cli": "~19.6.0",
|
52
|
+
"@commitlint/config-conventional": "~19.6.0",
|
53
|
+
"@eslint/js": "~9.15.0",
|
54
54
|
"@types/chai": "~5.0.1",
|
55
55
|
"@types/debug": "~4.1.12",
|
56
56
|
"@types/http-errors": "~2.0.4",
|
57
|
-
"@types/mocha": "~10.0.
|
58
|
-
"@types/node": "~22.9.
|
57
|
+
"@types/mocha": "~10.0.10",
|
58
|
+
"@types/node": "~22.9.3",
|
59
59
|
"c8": "~10.1.2",
|
60
60
|
"chai": "~5.1.2",
|
61
61
|
"esbuild": "~0.24.0",
|
62
|
-
"eslint": "~9.
|
62
|
+
"eslint": "~9.15.0",
|
63
63
|
"eslint-config-prettier": "~9.1.0",
|
64
64
|
"eslint-plugin-chai-expect": "~3.1.0",
|
65
65
|
"eslint-plugin-mocha": "~10.5.0",
|
66
|
-
"husky": "~9.1.
|
66
|
+
"husky": "~9.1.7",
|
67
67
|
"mocha": "~10.8.2",
|
68
68
|
"prettier": "~3.3.3",
|
69
69
|
"rimraf": "~6.0.1",
|
70
70
|
"tsx": "~4.19.2",
|
71
71
|
"typescript": "~5.6.3",
|
72
|
-
"typescript-eslint": "~8.
|
72
|
+
"typescript-eslint": "~8.15.0"
|
73
73
|
},
|
74
74
|
"license": "MIT"
|
75
75
|
}
|
@@ -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);
|