@e22m4u/ts-rest-router 0.1.2 → 0.2.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/README.md +59 -57
- package/dist/cjs/index.cjs +346 -360
- package/dist/esm/controller-registry.js +28 -28
- package/dist/esm/debuggable-service.d.ts +10 -1
- package/dist/esm/debuggable-service.js +14 -3
- package/dist/esm/decorators/after-action/after-action-decorator.d.ts +9 -0
- package/dist/esm/decorators/{before/before-decorator.js → after-action/after-action-decorator.js} +7 -7
- package/dist/esm/decorators/{before/before-decorator.spec.js → after-action/after-action-decorator.spec.js} +19 -19
- package/dist/esm/decorators/{after/after-metadata.d.ts → after-action/after-action-metadata.d.ts} +4 -4
- package/dist/esm/decorators/after-action/after-action-metadata.js +5 -0
- package/dist/esm/decorators/{after/after-reflector.d.ts → after-action/after-action-reflector.d.ts} +5 -5
- package/dist/esm/decorators/{after/after-reflector.js → after-action/after-action-reflector.js} +6 -6
- package/dist/esm/decorators/{before/before-reflector.spec.js → after-action/after-action-reflector.spec.js} +23 -23
- package/dist/esm/decorators/after-action/index.d.ts +3 -0
- package/dist/esm/decorators/after-action/index.js +3 -0
- package/dist/esm/decorators/before-action/before-action-decorator.d.ts +9 -0
- package/dist/esm/decorators/{after/after-decorator.js → before-action/before-action-decorator.js} +7 -7
- package/dist/esm/decorators/{after/after-decorator.spec.js → before-action/before-action-decorator.spec.js} +19 -19
- package/dist/esm/decorators/{before/before-metadata.d.ts → before-action/before-action-metadata.d.ts} +4 -4
- package/dist/esm/decorators/before-action/before-action-metadata.js +5 -0
- package/dist/esm/decorators/{before/before-reflector.d.ts → before-action/before-action-reflector.d.ts} +5 -5
- package/dist/esm/decorators/{before/before-reflector.js → before-action/before-action-reflector.js} +6 -6
- package/dist/esm/decorators/{after/after-reflector.spec.js → before-action/before-action-reflector.spec.js} +23 -23
- package/dist/esm/decorators/before-action/index.d.ts +3 -0
- package/dist/esm/decorators/before-action/index.js +3 -0
- package/dist/esm/decorators/index.d.ts +4 -4
- package/dist/esm/decorators/index.js +4 -4
- package/dist/esm/decorators/request-context/request-context-decorator.d.ts +4 -4
- package/dist/esm/decorators/request-context/request-context-decorator.js +4 -4
- package/dist/esm/decorators/request-context/request-context-decorator.spec.js +6 -0
- package/dist/esm/decorators/request-data/request-data-decorator.d.ts +10 -10
- package/dist/esm/decorators/request-data/request-data-decorator.js +10 -10
- package/dist/esm/decorators/request-data/request-data-decorator.spec.js +44 -32
- package/dist/esm/decorators/request-data/request-data-metadata.d.ts +1 -1
- package/dist/esm/decorators/rest-action/index.d.ts +3 -0
- package/dist/esm/decorators/rest-action/index.js +3 -0
- package/dist/esm/decorators/rest-action/rest-action-decorator.d.ts +57 -0
- package/dist/esm/decorators/rest-action/rest-action-decorator.js +52 -0
- package/dist/esm/decorators/rest-action/rest-action-decorator.spec.js +401 -0
- package/dist/esm/decorators/{action/action-metadata.d.ts → rest-action/rest-action-metadata.d.ts} +6 -6
- package/dist/esm/decorators/rest-action/rest-action-metadata.js +5 -0
- package/dist/esm/decorators/rest-action/rest-action-reflector.d.ts +22 -0
- package/dist/esm/decorators/{action/action-reflector.js → rest-action/rest-action-reflector.js} +6 -6
- package/dist/esm/decorators/{action/action-reflector.spec.js → rest-action/rest-action-reflector.spec.js} +13 -13
- package/dist/esm/decorators/rest-controller/index.d.ts +3 -0
- package/dist/esm/decorators/rest-controller/index.js +3 -0
- package/dist/esm/decorators/rest-controller/rest-controller-decorator.d.ts +14 -0
- package/dist/esm/decorators/{controller/controller-decorator.js → rest-controller/rest-controller-decorator.js} +5 -5
- package/dist/esm/decorators/{controller/controller-decorator.spec.js → rest-controller/rest-controller-decorator.spec.js} +15 -15
- package/dist/esm/decorators/{controller/controller-metadata.d.ts → rest-controller/rest-controller-metadata.d.ts} +5 -5
- package/dist/esm/decorators/rest-controller/rest-controller-metadata.js +5 -0
- package/dist/esm/decorators/rest-controller/rest-controller-reflector.d.ts +20 -0
- package/dist/esm/decorators/rest-controller/rest-controller-reflector.js +24 -0
- package/dist/esm/decorators/{controller/controller-reflector.spec.js → rest-controller/rest-controller-reflector.spec.js} +12 -12
- package/dist/esm/errors/not-a-controller-error.js +1 -1
- package/dist/esm/types.d.ts +0 -10
- package/dist/esm/utils/index.d.ts +0 -1
- package/dist/esm/utils/index.js +0 -1
- package/package.json +2 -2
- package/src/controller-registry.spec.ts +122 -122
- package/src/controller-registry.ts +33 -35
- package/src/debuggable-service.ts +17 -4
- package/src/decorators/{before/before-decorator.spec.ts → after-action/after-action-decorator.spec.ts} +19 -19
- package/src/decorators/{before/before-decorator.ts → after-action/after-action-decorator.ts} +9 -9
- package/src/decorators/{after/after-metadata.ts → after-action/after-action-metadata.ts} +5 -5
- package/src/decorators/{before/before-reflector.spec.ts → after-action/after-action-reflector.spec.ts} +33 -23
- package/src/decorators/{before/before-reflector.ts → after-action/after-action-reflector.ts} +13 -9
- package/src/decorators/after-action/index.ts +3 -0
- package/src/decorators/{after/after-decorator.spec.ts → before-action/before-action-decorator.spec.ts} +19 -19
- package/src/decorators/{after/after-decorator.ts → before-action/before-action-decorator.ts} +9 -9
- package/src/decorators/before-action/before-action-metadata.ts +17 -0
- package/src/decorators/{after/after-reflector.spec.ts → before-action/before-action-reflector.spec.ts} +40 -23
- package/src/decorators/{after/after-reflector.ts → before-action/before-action-reflector.ts} +18 -9
- package/src/decorators/before-action/index.ts +3 -0
- package/src/decorators/index.ts +4 -4
- package/src/decorators/request-context/request-context-decorator.spec.ts +7 -0
- package/src/decorators/request-context/request-context-decorator.ts +4 -4
- package/src/decorators/request-data/request-data-decorator.spec.ts +45 -32
- package/src/decorators/request-data/request-data-decorator.ts +10 -10
- package/src/decorators/request-data/request-data-metadata.ts +1 -1
- package/src/decorators/rest-action/index.ts +3 -0
- package/src/decorators/rest-action/rest-action-decorator.spec.ts +325 -0
- package/src/decorators/rest-action/rest-action-decorator.ts +166 -0
- package/src/decorators/{action/action-metadata.ts → rest-action/rest-action-metadata.ts} +7 -7
- package/src/decorators/{action/action-reflector.spec.ts → rest-action/rest-action-reflector.spec.ts} +13 -13
- package/src/decorators/rest-action/rest-action-reflector.ts +41 -0
- package/src/decorators/rest-controller/index.ts +3 -0
- package/src/decorators/{controller/controller-decorator.spec.ts → rest-controller/rest-controller-decorator.spec.ts} +16 -16
- package/src/decorators/{controller/controller-decorator.ts → rest-controller/rest-controller-decorator.ts} +14 -10
- package/src/decorators/{controller/controller-metadata.ts → rest-controller/rest-controller-metadata.ts} +6 -7
- package/src/decorators/{controller/controller-reflector.spec.ts → rest-controller/rest-controller-reflector.spec.ts} +21 -12
- package/src/decorators/rest-controller/rest-controller-reflector.ts +32 -0
- package/src/errors/not-a-controller-error.ts +4 -1
- package/src/types.ts +0 -10
- package/src/utils/index.ts +0 -1
- package/dist/esm/decorators/action/action-decorator.d.ts +0 -52
- package/dist/esm/decorators/action/action-decorator.js +0 -62
- package/dist/esm/decorators/action/action-decorator.spec.js +0 -59
- package/dist/esm/decorators/action/action-metadata.js +0 -5
- package/dist/esm/decorators/action/action-reflector.d.ts +0 -22
- package/dist/esm/decorators/action/index.d.ts +0 -3
- package/dist/esm/decorators/action/index.js +0 -3
- package/dist/esm/decorators/after/after-decorator.d.ts +0 -9
- package/dist/esm/decorators/after/after-metadata.js +0 -5
- package/dist/esm/decorators/after/index.d.ts +0 -3
- package/dist/esm/decorators/after/index.js +0 -3
- package/dist/esm/decorators/before/before-decorator.d.ts +0 -9
- package/dist/esm/decorators/before/before-metadata.js +0 -5
- package/dist/esm/decorators/before/index.d.ts +0 -3
- package/dist/esm/decorators/before/index.js +0 -3
- package/dist/esm/decorators/controller/controller-decorator.d.ts +0 -14
- package/dist/esm/decorators/controller/controller-metadata.js +0 -5
- package/dist/esm/decorators/controller/controller-reflector.d.ts +0 -20
- package/dist/esm/decorators/controller/controller-reflector.js +0 -24
- package/dist/esm/decorators/controller/index.d.ts +0 -3
- package/dist/esm/decorators/controller/index.js +0 -3
- package/dist/esm/utils/create-debugger.d.ts +0 -44
- package/dist/esm/utils/create-debugger.js +0 -81
- package/dist/esm/utils/create-debugger.spec.d.ts +0 -1
- package/dist/esm/utils/create-debugger.spec.js +0 -8
- package/src/decorators/action/action-decorator.spec.ts +0 -42
- package/src/decorators/action/action-decorator.ts +0 -98
- package/src/decorators/action/action-reflector.ts +0 -38
- package/src/decorators/action/index.ts +0 -3
- package/src/decorators/after/index.ts +0 -3
- package/src/decorators/before/before-metadata.ts +0 -17
- package/src/decorators/before/index.ts +0 -3
- package/src/decorators/controller/controller-reflector.ts +0 -28
- package/src/decorators/controller/index.ts +0 -3
- package/src/utils/create-debugger.spec.ts +0 -9
- package/src/utils/create-debugger.ts +0 -98
- /package/dist/esm/decorators/{action/action-decorator.spec.d.ts → after-action/after-action-decorator.spec.d.ts} +0 -0
- /package/dist/esm/decorators/{action/action-reflector.spec.d.ts → after-action/after-action-reflector.spec.d.ts} +0 -0
- /package/dist/esm/decorators/{after/after-decorator.spec.d.ts → before-action/before-action-decorator.spec.d.ts} +0 -0
- /package/dist/esm/decorators/{after/after-reflector.spec.d.ts → before-action/before-action-reflector.spec.d.ts} +0 -0
- /package/dist/esm/decorators/{before/before-decorator.spec.d.ts → rest-action/rest-action-decorator.spec.d.ts} +0 -0
- /package/dist/esm/decorators/{before/before-reflector.spec.d.ts → rest-action/rest-action-reflector.spec.d.ts} +0 -0
- /package/dist/esm/decorators/{controller/controller-decorator.spec.d.ts → rest-controller/rest-controller-decorator.spec.d.ts} +0 -0
- /package/dist/esm/decorators/{controller/controller-reflector.spec.d.ts → rest-controller/rest-controller-reflector.spec.d.ts} +0 -0
package/README.md
CHANGED
@@ -8,7 +8,7 @@ REST маршрутизатор на основе контроллеров дл
|
|
8
8
|
- Типизированные параметры запросов (body, query, params).
|
9
9
|
- Поддержка middleware до и после обработки запроса.
|
10
10
|
- Валидация входящих данных.
|
11
|
-
- Поддержка всех HTTP методов (GET, POST, PUT,
|
11
|
+
- Поддержка всех HTTP методов (GET, POST, PUT, PATCH и DELETE).
|
12
12
|
|
13
13
|
## Установка
|
14
14
|
|
@@ -30,27 +30,27 @@ npm install @e22m4u/ts-rest-router
|
|
30
30
|
|
31
31
|
## Базовое использование
|
32
32
|
|
33
|
-
Создание контроллера и
|
33
|
+
Создание контроллера и методов.
|
34
34
|
|
35
35
|
```ts
|
36
|
-
import {get} from '@e22m4u/ts-rest-router';
|
37
|
-
import {post} from '@e22m4u/ts-rest-router';
|
38
|
-
import {field} from '@e22m4u/ts-rest-router';
|
39
36
|
import {DataType} from '@e22m4u/ts-rest-router';
|
40
|
-
import {
|
41
|
-
|
42
|
-
@
|
43
|
-
|
44
|
-
|
37
|
+
import {getAction} from '@e22m4u/ts-rest-router';
|
38
|
+
import {postAction} from '@e22m4u/ts-rest-router';
|
39
|
+
import {requestField} from '@e22m4u/ts-rest-router';
|
40
|
+
import {restController} from '@e22m4u/ts-rest-router';
|
41
|
+
|
42
|
+
@restController('/users') // путь контроллера
|
43
|
+
class UserController { // класс контроллера
|
44
|
+
@postAction('/login') // метод POST /users/login
|
45
45
|
async login(
|
46
|
-
@
|
47
|
-
type: DataType.STRING,
|
48
|
-
required: true,
|
46
|
+
@requestField('username', { // поле "username" в теле запроса
|
47
|
+
type: DataType.STRING, // тип параметра допускает только строки
|
48
|
+
required: true, // параметр является обязательным
|
49
49
|
})
|
50
50
|
username: string,
|
51
|
-
@
|
52
|
-
type: DataType.STRING,
|
53
|
-
required: true,
|
51
|
+
@requestField('password', { // поле "password" в теле запроса
|
52
|
+
type: DataType.STRING, // тип параметра допускает только строки
|
53
|
+
required: true, // параметр является обязательным
|
54
54
|
})
|
55
55
|
password: string,
|
56
56
|
) {
|
@@ -63,13 +63,13 @@ class UserController { // класс контроллера
|
|
63
63
|
}
|
64
64
|
```
|
65
65
|
|
66
|
-
Регистрация контроллеров и запуск
|
66
|
+
Регистрация контроллеров и запуск сервера.
|
67
67
|
|
68
68
|
```ts
|
69
69
|
import http from 'http';
|
70
70
|
import {RestRouter} from '@e22m4u/ts-rest-router';
|
71
71
|
|
72
|
-
// создание
|
72
|
+
// создание маршрутизатора и регистрация контроллеров
|
73
73
|
const router = new RestRouter();
|
74
74
|
router.registerController(UserController);
|
75
75
|
router.registerController(ProductController);
|
@@ -88,40 +88,42 @@ server.listen('8080', '0.0.0.0', () => {
|
|
88
88
|
|
89
89
|
Контроллер и методы:
|
90
90
|
|
91
|
-
- `@
|
92
|
-
- `@
|
93
|
-
- `@
|
94
|
-
- `@
|
95
|
-
- `@
|
96
|
-
- `@
|
97
|
-
- `@
|
91
|
+
- `@restController` - определяет класс как контроллер;
|
92
|
+
- `@restAction` - базовый декоратор для методов;
|
93
|
+
- `@getAction` - метод GET;
|
94
|
+
- `@postAction` - метод POST;
|
95
|
+
- `@putAction` - метод PUT;
|
96
|
+
- `@patchAction` - метод PATCH;
|
97
|
+
- `@deleteAction` - метод DELETE;
|
98
98
|
|
99
99
|
Хуки запроса:
|
100
100
|
|
101
|
-
- `@
|
102
|
-
- `@
|
101
|
+
- `@beforeAction` - middleware перед обработкой запроса;
|
102
|
+
- `@afterAction` - middleware после обработки запроса;
|
103
103
|
|
104
104
|
Параметры запроса:
|
105
105
|
|
106
|
-
- `@
|
107
|
-
- `@
|
108
|
-
- `@
|
109
|
-
- `@
|
110
|
-
- `@
|
111
|
-
- `@
|
112
|
-
- `@
|
113
|
-
- `@
|
114
|
-
- `@
|
115
|
-
- `@
|
116
|
-
- `@requestContext` - доступ к контексту
|
117
|
-
- `@requestData` -
|
118
|
-
|
119
|
-
|
106
|
+
- `@requestParam` - определенный URL параметр;
|
107
|
+
- `@requestParams` - все параметры URL как объект;
|
108
|
+
- `@requestQuery` - определенный query параметр;
|
109
|
+
- `@requestQueries` - все query параметры как объект;
|
110
|
+
- `@requestBody` - тело запроса;
|
111
|
+
- `@requestField` - поле в теле запроса;
|
112
|
+
- `@requestHeader` - определенный заголовок запроса;
|
113
|
+
- `@requestHeaders` - все заголовки запроса как объект;
|
114
|
+
- `@requestCookie` - определенный cookie запроса;
|
115
|
+
- `@requestCookies` - все cookies запроса как объект;
|
116
|
+
- `@requestContext` - доступ к контексту запроса;
|
117
|
+
- `@requestData` - доступ к данным запроса;
|
118
|
+
- `@httpRequest` - экземпляр `IncomingMessage`;
|
119
|
+
- `@httpResponse` - экземпляр `ServerResponse`;
|
120
|
+
|
121
|
+
#### `@restController(options?: ControllerOptions)`
|
120
122
|
|
121
123
|
Определение контроллера.
|
122
124
|
|
123
125
|
```ts
|
124
|
-
@
|
126
|
+
@restController()
|
125
127
|
class UserController {
|
126
128
|
// методы контроллера
|
127
129
|
}
|
@@ -130,7 +132,7 @@ class UserController {
|
|
130
132
|
Определение пути контроллера.
|
131
133
|
|
132
134
|
```ts
|
133
|
-
@
|
135
|
+
@restController('/users') // путь контроллера
|
134
136
|
class UserController {
|
135
137
|
// методы контроллера
|
136
138
|
}
|
@@ -139,7 +141,7 @@ class UserController {
|
|
139
141
|
Дополнительные параметры декоратора.
|
140
142
|
|
141
143
|
```ts
|
142
|
-
@
|
144
|
+
@restController({
|
143
145
|
path: '/api', // путь контроллера
|
144
146
|
before: [authMiddleware], // middleware до обработки запроса
|
145
147
|
after: [loggerMiddleware], // middleware после обработки запроса
|
@@ -149,18 +151,18 @@ class UserController {
|
|
149
151
|
}
|
150
152
|
```
|
151
153
|
|
152
|
-
#### `@
|
154
|
+
#### `@getAction(path: string, options?: ActionOptions)`
|
153
155
|
|
154
156
|
Определение метода GET.
|
155
157
|
|
156
158
|
```ts
|
157
|
-
@
|
158
|
-
class UserController {
|
159
|
-
@
|
159
|
+
@restController('/users') // путь контроллера
|
160
|
+
class UserController { // класс контроллера
|
161
|
+
@getAction('/whoAmI') // маршрут GET /users/whoAmI
|
160
162
|
async whoAmI() {
|
161
|
-
return {
|
162
|
-
name: 'John',
|
163
|
-
surname: 'Doe',
|
163
|
+
return { // если метод возвращает объект,
|
164
|
+
name: 'John', // то результат будет представлен
|
165
|
+
surname: 'Doe', // как "Content-Type: application/json"
|
164
166
|
};
|
165
167
|
}
|
166
168
|
}
|
@@ -169,9 +171,9 @@ class UserController { // класс контроллера
|
|
169
171
|
Дополнительные параметры декоратора.
|
170
172
|
|
171
173
|
```ts
|
172
|
-
@
|
174
|
+
@restController('/users') // путь контроллера
|
173
175
|
class UserController { // класс контроллера
|
174
|
-
@
|
176
|
+
@getAction('/whoAmI', { // маршрут GET /users/whoAmI
|
175
177
|
before: [authMiddleware], // middleware до обработки запроса
|
176
178
|
after: [loggerMiddleware], // middleware после обработки запроса
|
177
179
|
})
|
@@ -191,9 +193,9 @@ class UserController { // класс контроллера
|
|
191
193
|
```ts
|
192
194
|
import {RequestContext} from '@e22m4u/js-trie-router';
|
193
195
|
|
194
|
-
@
|
196
|
+
@restController('/users') // путь контроллера
|
195
197
|
class UserController { // класс контроллера
|
196
|
-
@
|
198
|
+
@getAction('/:id') // маршрут GET /users/:id
|
197
199
|
findById(
|
198
200
|
@requestContext() // включениее контекста запроса
|
199
201
|
ctx: RequestContext, // в качестве параметра метода
|
@@ -218,9 +220,9 @@ class UserController { // класс контроллера
|
|
218
220
|
import {ServerResponse} from 'http';
|
219
221
|
import {IncomingMessage} from 'http';
|
220
222
|
|
221
|
-
@
|
223
|
+
@restController('/users') // путь контроллера
|
222
224
|
class UserController { // класс контроллера
|
223
|
-
@
|
225
|
+
@getAction('/:id') // маршрут GET /users/:id
|
224
226
|
findById(
|
225
227
|
@requestContext('req') // декоратор контекста запроса
|
226
228
|
req: IncomingMessage, // включающий свойство "req"
|