@e22m4u/ts-rest-router 0.0.3 → 0.0.5
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/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);
|