@e22m4u/js-trie-router 0.4.3 → 0.5.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.
Files changed (58) hide show
  1. package/.mocharc.json +5 -0
  2. package/README.md +38 -3
  3. package/dist/cjs/index.cjs +88 -84
  4. package/eslint.config.js +5 -2
  5. package/examples/uptime-example.js +1 -1
  6. package/jsconfig.json +7 -0
  7. package/package.json +15 -18
  8. package/src/hooks/hook-invoker.spec.js +2 -4
  9. package/src/hooks/hook-registry.spec.js +1 -2
  10. package/src/parsers/body-parser.js +6 -3
  11. package/src/parsers/body-parser.spec.js +6 -3
  12. package/src/parsers/cookies-parser.js +1 -2
  13. package/src/request-context.js +7 -0
  14. package/src/request-context.spec.js +11 -0
  15. package/src/route-registry.spec.js +1 -2
  16. package/src/route.spec.js +2 -4
  17. package/src/senders/error-sender.spec.js +3 -5
  18. package/src/trie-router.spec.js +5 -10
  19. package/src/utils/create-error.js +1 -2
  20. package/.mocharc.cjs +0 -5
  21. package/src/debuggable-service.d.ts +0 -6
  22. package/src/hooks/hook-invoker.d.ts +0 -25
  23. package/src/hooks/hook-registry.d.ts +0 -93
  24. package/src/hooks/index.d.ts +0 -2
  25. package/src/index.d.ts +0 -9
  26. package/src/parsers/body-parser.d.ts +0 -52
  27. package/src/parsers/cookies-parser.d.ts +0 -15
  28. package/src/parsers/index.d.ts +0 -4
  29. package/src/parsers/query-parser.d.ts +0 -21
  30. package/src/parsers/request-parser.d.ts +0 -34
  31. package/src/request-context.d.ts +0 -96
  32. package/src/route-registry.d.ts +0 -39
  33. package/src/route.d.ts +0 -100
  34. package/src/router-options.d.ts +0 -18
  35. package/src/senders/data-sender.d.ts +0 -15
  36. package/src/senders/error-sender.d.ts +0 -30
  37. package/src/senders/index.d.ts +0 -2
  38. package/src/trie-router.d.ts +0 -104
  39. package/src/types.d.ts +0 -19
  40. package/src/utils/clone-deep.d.ts +0 -6
  41. package/src/utils/create-cookies-string.d.ts +0 -6
  42. package/src/utils/create-debugger.d.ts +0 -11
  43. package/src/utils/create-error.d.ts +0 -14
  44. package/src/utils/create-request-mock.d.ts +0 -27
  45. package/src/utils/create-response-mock.d.ts +0 -17
  46. package/src/utils/create-route-mock.d.ts +0 -18
  47. package/src/utils/fetch-request-body.d.ts +0 -26
  48. package/src/utils/get-request-pathname.d.ts +0 -8
  49. package/src/utils/index.d.ts +0 -16
  50. package/src/utils/is-promise.d.ts +0 -10
  51. package/src/utils/is-readable-stream.d.ts +0 -9
  52. package/src/utils/is-response-sent.d.ts +0 -8
  53. package/src/utils/is-writable-stream.d.ts +0 -9
  54. package/src/utils/parse-content-type.d.ts +0 -15
  55. package/src/utils/parse-cookies.d.ts +0 -19
  56. package/src/utils/to-camel-case.d.ts +0 -6
  57. package/tsconfig.json +0 -11
  58. /package/{mocha-setup.js → mocha.setup.js} +0 -0
package/.mocharc.json ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "extension": ["js"],
3
+ "spec": "src/**/*.spec.js",
4
+ "require": "./mocha.setup.js"
5
+ }
package/README.md CHANGED
@@ -22,7 +22,8 @@ HTTP маршрутизатор для Node.js на основе
22
22
  - [preHandler](#prehandler)
23
23
  - [postHandler](#posthandler)
24
24
  - [Глобальные хуки](#глобальные-хуки)
25
- - [Метаданные](#метаданные)
25
+ - [Метаданные маршрута](#метаданные-маршрута)
26
+ - [Состояние запроса](#состояние-запроса)
26
27
  - [Отладка](#отладка)
27
28
  - [Тестирование](#тестирование)
28
29
  - [Лицензия](#лицензия)
@@ -100,6 +101,7 @@ server.listen(3000, 'localhost'); // прослушивание за
100
101
  - `response: ServerResponse` нативный поток ответа сервера;
101
102
  - `route: Route` экземпляр текущего маршрута;
102
103
  - `meta: object` геттер для доступа к метаданным маршрута (`route.meta`);
104
+ - `state: object` объект для обмена данными между хуками и обработчиком;
103
105
 
104
106
  Пример доступа к контексту из обработчика маршрута.
105
107
 
@@ -124,6 +126,7 @@ router.defineRoute({
124
126
  console.log(ctx.response); // ServerResponse
125
127
  console.log(ctx.route); // Route
126
128
  console.log(ctx.meta); // {prop: 'value'}
129
+ console.log(ctx.state); // {}
127
130
  // ...
128
131
  },
129
132
  });
@@ -265,7 +268,7 @@ router.addPostHandler((ctx, data) => {
265
268
  отличное от `undefined` и `null`, то такое значение будет использовано
266
269
  как ответ сервера.
267
270
 
268
- ### Метаданные
271
+ ### Метаданные маршрута
269
272
 
270
273
  Иногда требуется связать с маршрутом дополнительные, статические данные, которые
271
274
  могут быть использованы хуками для расширения функционала. Например, это могут
@@ -293,7 +296,7 @@ router.addPreHandler((ctx) => {
293
296
  router.defineRoute({
294
297
  method: HttpMethod.GET,
295
298
  path: '/',
296
- meta: {foo: 'bar'}, // <= мета-данные
299
+ meta: {foo: 'bar'}, // <= метаданные
297
300
  handler(ctx) {
298
301
  return 'Hello World!';
299
302
  },
@@ -303,6 +306,38 @@ server.on('request', router.requestListener);
303
306
  server.listen(3000, 'localhost');
304
307
  ```
305
308
 
309
+ ### Состояние запроса
310
+
311
+ Объект `ctx.state` инициализируется как пустой объект `{}` для каждого нового
312
+ запроса. Он предназначен для передачи динамических данных (например, профиля
313
+ пользователя после авторизации) из `preHandler` хуков в основной обработчик
314
+ маршрута или `postHandler` хуки.
315
+
316
+ ```js
317
+ import http from 'http';
318
+ import {TrieRouter, HttpMethod} from '@e22m4u/js-trie-router';
319
+
320
+ const router = new TrieRouter();
321
+
322
+ // глобальный хук авторизации
323
+ router.addPreHandler((ctx) => {
324
+ // логика получения пользователя (например, из заголовков)
325
+ const user = {id: 1, name: 'John', role: 'admin'};
326
+ // сохранение данных в state
327
+ ctx.state.user = user;
328
+ });
329
+
330
+ router.defineRoute({
331
+ method: HttpMethod.GET,
332
+ path: '/profile',
333
+ handler(ctx) {
334
+ // доступ к данным, установленным в хуке
335
+ const user = ctx.state.user;
336
+ return `Hello, ${user.name}!`;
337
+ },
338
+ });
339
+ ```
340
+
306
341
  ## Отладка
307
342
 
308
343
  Установка переменной `DEBUG` включает вывод логов.