@e22m4u/js-trie-router 0.3.1 → 0.3.2

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.
@@ -925,6 +925,10 @@ var _Route = class _Route extends import_js_debug.Debuggable {
925
925
  __name(_Route, "Route");
926
926
  var Route = _Route;
927
927
 
928
+ // src/trie-router.js
929
+ var import_http4 = require("http");
930
+ var import_http5 = require("http");
931
+
928
932
  // src/senders/data-sender.js
929
933
  var import_js_format15 = require("@e22m4u/js-format");
930
934
  var _DataSender = class _DataSender extends DebuggableService {
@@ -1619,6 +1623,8 @@ var _TrieRouter = class _TrieRouter extends DebuggableService {
1619
1623
  const container = new import_js_service5.ServiceContainer(this.container);
1620
1624
  const context = new RequestContext(container, req, res);
1621
1625
  container.set(RequestContext, context);
1626
+ container.set(import_http5.IncomingMessage, req);
1627
+ container.set(import_http4.ServerResponse, res);
1622
1628
  context.params = params;
1623
1629
  let data;
1624
1630
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@e22m4u/js-trie-router",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "HTTP маршрутизатор для Node.js на основе префиксного дерева",
5
5
  "author": "Mikhail Evstropov <e22m4u@yandex.ru>",
6
6
  "license": "MIT",
@@ -41,7 +41,7 @@
41
41
  "@e22m4u/js-debug": "~0.3.1",
42
42
  "@e22m4u/js-format": "~0.2.0",
43
43
  "@e22m4u/js-path-trie": "~0.0.12",
44
- "@e22m4u/js-service": "~0.4.0",
44
+ "@e22m4u/js-service": "~0.4.3",
45
45
  "debug": "~4.4.3",
46
46
  "http-errors": "~2.0.0",
47
47
  "statuses": "~2.0.2"
@@ -49,20 +49,20 @@
49
49
  "devDependencies": {
50
50
  "@commitlint/cli": "~20.1.0",
51
51
  "@commitlint/config-conventional": "~20.0.0",
52
- "@eslint/js": "~9.36.0",
52
+ "@eslint/js": "~9.37.0",
53
53
  "@types/chai-as-promised": "~8.0.2",
54
54
  "c8": "~10.1.3",
55
55
  "chai": "~6.2.0",
56
56
  "chai-as-promised": "~8.0.2",
57
57
  "esbuild": "~0.25.10",
58
- "eslint": "~9.36.0",
58
+ "eslint": "~9.37.0",
59
59
  "eslint-config-prettier": "~10.1.8",
60
60
  "eslint-plugin-chai-expect": "~3.1.0",
61
- "eslint-plugin-jsdoc": "~60.6.0",
62
- "eslint-plugin-mocha": "~11.1.0",
61
+ "eslint-plugin-jsdoc": "~61.1.1",
62
+ "eslint-plugin-mocha": "~11.2.0",
63
63
  "globals": "~16.4.0",
64
64
  "husky": "~9.1.7",
65
- "mocha": "~11.7.3",
65
+ "mocha": "~11.7.4",
66
66
  "prettier": "~3.6.2",
67
67
  "rimraf": "~6.0.1",
68
68
  "typescript": "~5.9.3"
@@ -1,9 +1,12 @@
1
+ import {ServerResponse} from 'http';
2
+ import {IncomingMessage} from 'http';
1
3
  import {HookType} from './hooks/index.js';
2
- import {isPromise, isResponseSent} from './utils/index.js';
4
+ import {isPromise} from './utils/index.js';
3
5
  import {HookInvoker} from './hooks/index.js';
4
6
  import {DataSender} from './senders/index.js';
5
7
  import {HookRegistry} from './hooks/index.js';
6
8
  import {ErrorSender} from './senders/index.js';
9
+ import {isResponseSent} from './utils/index.js';
7
10
  import {RequestParser} from './parsers/index.js';
8
11
  import {RouteRegistry} from './route-registry.js';
9
12
  import {RequestContext} from './request-context.js';
@@ -94,8 +97,12 @@ export class TrieRouter extends DebuggableService {
94
97
  const container = new ServiceContainer(this.container);
95
98
  const context = new RequestContext(container, req, res);
96
99
  // регистрация контекста запроса в сервис-контейнере
97
- // для удобного доступа через container.getRegistered(RequestContext)
100
+ // для доступа через container.getRegistered(RequestContext)
98
101
  container.set(RequestContext, context);
102
+ // регистрация текущего экземпляра IncomingMessage
103
+ // и ServerResponse в сервис-контейнере запроса
104
+ container.set(IncomingMessage, req);
105
+ container.set(ServerResponse, res);
99
106
  // запись параметров пути в контекст запроса,
100
107
  // так как они были определены в момент
101
108
  // поиска подходящего роута
@@ -1,5 +1,7 @@
1
1
  import {Route} from './route.js';
2
2
  import {expect} from './chai.js';
3
+ import {ServerResponse} from 'http';
4
+ import {IncomingMessage} from 'http';
3
5
  import {HttpMethod} from './route.js';
4
6
  import {HookType} from './hooks/index.js';
5
7
  import {TrieRouter} from './trie-router.js';
@@ -473,6 +475,38 @@ describe('TrieRouter', function () {
473
475
  router.requestListener(req, res);
474
476
  });
475
477
 
478
+ it('should register the IncomingMessage in the request-scope ServiceContainer', function (done) {
479
+ const router = new TrieRouter();
480
+ const req = createRequestMock();
481
+ const res = createResponseMock();
482
+ router.defineRoute({
483
+ method: HttpMethod.GET,
484
+ path: '/',
485
+ handler(ctx) {
486
+ const result = ctx.container.getRegistered(IncomingMessage);
487
+ expect(result).to.be.eq(req);
488
+ done();
489
+ },
490
+ });
491
+ router.requestListener(req, res);
492
+ });
493
+
494
+ it('should register the ServerResponse in the request-scope ServiceContainer', function (done) {
495
+ const router = new TrieRouter();
496
+ const req = createRequestMock();
497
+ const res = createResponseMock();
498
+ router.defineRoute({
499
+ method: HttpMethod.GET,
500
+ path: '/',
501
+ handler(ctx) {
502
+ const result = ctx.container.getRegistered(ServerResponse);
503
+ expect(result).to.be.eq(res);
504
+ done();
505
+ },
506
+ });
507
+ router.requestListener(req, res);
508
+ });
509
+
476
510
  it('should send parsing error response instead of throwing error', async function () {
477
511
  const router = new TrieRouter();
478
512
  router.defineRoute({