@e22m4u/js-trie-router 0.0.3 → 0.0.4

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 (3) hide show
  1. package/README-ru.md +240 -0
  2. package/README.md +96 -93
  3. package/package.json +20 -21
package/README-ru.md ADDED
@@ -0,0 +1,240 @@
1
+ ## @e22m4u/js-trie-router
2
+
3
+ *[English](./README.md) | Русский*
4
+
5
+ HTTP роутер для Node.js на основе
6
+ [префиксного дерева](https://ru.wikipedia.org/wiki/Trie) (trie).
7
+
8
+ - Поддержка [path-to-regexp](https://github.com/pillarjs/path-to-regexp) синтаксиса.
9
+ - Автоматический парсинг JSON-тела запроса.
10
+ - Парсинг строки запроса и заголовка `cookie`.
11
+ - Поддержка `preHandler` и `postHandler` хуков.
12
+ - Позволяет использовать асинхронные обработчики.
13
+
14
+ ## Установка
15
+
16
+ ```bash
17
+ npm install @e22m4u/js-trie-router
18
+ ```
19
+
20
+ Для загрузки ES-модуля требуется установить `"type": "module"` в файле
21
+ `package.json`, или использовать `.mjs` расширение.
22
+
23
+ ## Обзор
24
+
25
+ Базовый пример создания экземпляра роутера, объявления маршрута
26
+ и передачи слушателя запросов `http` серверу.
27
+
28
+ ```js
29
+ import http from 'http';
30
+ import {TrieRouter} from '@e22m4u/js-trie-router';
31
+
32
+ const server = new http.Server(); // создание экземпляра HTTP сервера
33
+ const router = new TrieRouter(); // создание экземпляра роутера
34
+
35
+ router.defineRoute({
36
+ method: 'GET', // метод запроса "GET", "POST" и т.д.
37
+ path: '/', // шаблон пути, пример "/user/:id"
38
+ handler(ctx) { // обработчик маршрута
39
+ return 'Hello world!';
40
+ },
41
+ });
42
+
43
+ server.on('request', router.requestListener); // подключение роутера
44
+ server.listen(3000, 'localhost'); // прослушивание запросов
45
+
46
+ // Open in browser http://localhost:3000
47
+ ```
48
+
49
+ ### Контекст запроса
50
+
51
+ Первый параметр обработчика маршрута принимает экземпляр класса
52
+ `RequestContext` с набором свойств, содержащих разобранные
53
+ данные входящего запроса.
54
+
55
+ - `container: ServiceContainer` экземпляр [сервис-контейнера](https://npmjs.com/package/@e22m4u/js-service)
56
+ - `req: IncomingMessage` нативный поток входящего запроса
57
+ - `res: ServerResponse` нативный поток ответа сервера
58
+ - `params: ParsedParams` объект ключ-значение с параметрами пути
59
+ - `query: ParsedQuery` объект ключ-значение с параметрами строки запроса
60
+ - `headers: ParsedHeaders` объект ключ-значение с заголовками запроса
61
+ - `cookie: ParsedCookie` объект ключ-значение разобранного заголовка `cookie`
62
+ - `method: string` метод запроса в верхнем регистре, например `GET`, `POST` и т.д.
63
+ - `path: string` путь включающий строку запроса, например `/myPath?foo=bar`
64
+ - `pathname: string` путь запроса, например `/myMath`
65
+
66
+ Пример доступа к контексту из обработчика маршрута.
67
+
68
+ ```js
69
+ router.defineRoute({
70
+ method: 'GET',
71
+ path: '/users/:id',
72
+ handler(ctx) {
73
+ // GET /users/10?include=city
74
+ // Cookie: foo=bar; baz=qux;
75
+ console.log(ctx.req); // IncomingMessage
76
+ console.log(ctx.res); // ServerResponse
77
+ console.log(ctx.params); // {id: 10}
78
+ console.log(ctx.query); // {include: 'city'}
79
+ console.log(ctx.headers); // {cookie: 'foo=bar; baz=qux;'}
80
+ console.log(ctx.cookie); // {foo: 'bar', baz: 'qux'}
81
+ console.log(ctx.method); // "GET"
82
+ console.log(ctx.path); // "/users/10?include=city"
83
+ console.log(ctx.pathname); // "/users/10"
84
+ // ...
85
+ },
86
+ });
87
+ ```
88
+
89
+ ### Отправка ответа
90
+
91
+ Возвращаемое значение обработчика маршрута используется в качестве ответа
92
+ сервера. Тип значения влияет на представление возвращаемых данных. Например,
93
+ если результатом будет являться тип `object`, то такое значение автоматически
94
+ сериализуется в JSON.
95
+
96
+ | value | content-type |
97
+ |-----------|--------------------------|
98
+ | `string` | text/plain |
99
+ | `number` | application/json |
100
+ | `boolean` | application/json |
101
+ | `object` | application/json |
102
+ | `Buffer` | application/octet-stream |
103
+ | `Stream` | application/octet-stream |
104
+
105
+ Пример возвращаемого значения обработчиком маршрута.
106
+
107
+ ```js
108
+ router.defineRoute({ // регистрация маршрута
109
+ // ...
110
+ handler(ctx) { // обработчик входящего запроса
111
+ return {foo: 'bar'}; // ответ будет представлен в виде JSON
112
+ },
113
+ });
114
+ ```
115
+
116
+ Контекст запроса `ctx` содержит нативный экземпляр класса `ServerResponse`
117
+ модуля `http`, который может быть использован для ручного управления ответом.
118
+
119
+ ```js
120
+ router.defineRoute({
121
+ // ...
122
+ handler(ctx) {
123
+ res.statusCode = 404;
124
+ res.setHeader('content-type', 'text/plain; charset=utf-8');
125
+ res.end('404 Not Found', 'utf-8');
126
+ },
127
+ });
128
+ ```
129
+
130
+ ### Хуки маршрута
131
+
132
+ Определение маршрута методом `defineRoute` позволяет задать хуки
133
+ для отслеживания и перехвата входящего запроса и ответа
134
+ конкретного маршрута.
135
+
136
+ - `preHandler` выполняется перед вызовом обработчика
137
+ - `postHandler` выполняется после вызова обработчика
138
+
139
+ #### preHandler
140
+
141
+ Перед вызовом обработчика маршрута может потребоваться выполнение
142
+ таких операции как авторизация и проверка параметров запроса. Для
143
+ этого можно использовать хук `preHandler`.
144
+
145
+ ```js
146
+ router.defineRoute({ // регистрация маршрута
147
+ // ...
148
+ preHandler(ctx) {
149
+ // перед обработчиком маршрута
150
+ console.log(`Incoming request ${ctx.method} ${ctx.path}`);
151
+ // > incoming request GET /myPath
152
+ },
153
+ handler(ctx) {
154
+ return 'Hello world!';
155
+ },
156
+ });
157
+ ```
158
+
159
+ Если хук `preHandler` возвращает значение отличное от `undefined` и `null`,
160
+ то такое значение будет использовано в качестве ответа сервера, а вызов
161
+ обработчика маршрута будет пропущен.
162
+
163
+ ```js
164
+ router.defineRoute({ // регистрация маршрута
165
+ // ...
166
+ preHandler(ctx) {
167
+ // возвращение ответа сервера
168
+ return 'Are you authorized?';
169
+ },
170
+ handler(ctx) {
171
+ // данный обработчик не будет вызван, так как
172
+ // хук "preHandler" уже отправил ответ
173
+ },
174
+ });
175
+ ```
176
+
177
+ #### postHandler
178
+
179
+ Возвращаемое значение обработчика маршрута передается вторым аргументом
180
+ хука `postHandler`. По аналогии с `preHandler`, если возвращаемое
181
+ значение отличается от `undefined` и `null`, то такое значение будет
182
+ использовано в качестве ответа сервера. Это может быть полезно для
183
+ модификации возвращаемого ответа.
184
+
185
+ ```js
186
+ router.defineRoute({
187
+ // ...
188
+ handler(ctx) {
189
+ return 'Hello world!';
190
+ },
191
+ postHandler(ctx, data) {
192
+ // после обработчика маршрута
193
+ return data.toUpperCase(); // HELLO WORLD!
194
+ },
195
+ });
196
+ ```
197
+
198
+ ### Глобальные хуки
199
+
200
+ Экземпляр роутера `TrieRouter` позволяет задать глобальные хуки, которые
201
+ имеют более высокий приоритет перед хуками маршрута, и вызываются
202
+ в первую очередь.
203
+
204
+ - `preHandler` выполняется перед вызовом обработчика каждого маршрута
205
+ - `postHandler` выполняется после вызова обработчика каждого маршрута
206
+
207
+ Добавить глобальные хуки можно методом `addHook` экземпляра роутера,
208
+ где первым параметром передается название хука, а вторым его функция.
209
+
210
+ ```js
211
+ router.addHook('preHandler', (ctx) => {
212
+ // перед обработчиком маршрута
213
+ });
214
+
215
+ router.addHook('postHandler', (ctx, data) => {
216
+ // после обработчика маршрута
217
+ });
218
+ ```
219
+
220
+ Аналогично хукам маршрута, если глобальный хук возвращает значение
221
+ отличное от `undefined` и `null`, то такое значение будет использовано
222
+ как ответ сервера.
223
+
224
+ ## Отладка
225
+
226
+ Установка переменной `DEBUG` перед командой запуска включает вывод логов.
227
+
228
+ ```bash
229
+ DEBUG=jsTrieRouter* npm run test
230
+ ```
231
+
232
+ ## Тестирование
233
+
234
+ ```bash
235
+ npm run test
236
+ ```
237
+
238
+ ## Лицензия
239
+
240
+ MIT
package/README.md CHANGED
@@ -1,68 +1,69 @@
1
1
  ## @e22m4u/js-trie-router
2
2
 
3
- ES-модуль HTTP роутера для Node.js, использующий
4
- [Trie](https://en.wikipedia.org/wiki/Trie)
5
- для разрешения маршрутов.
3
+ *English | [Русский](./README-ru.md)*
6
4
 
7
- - Поддержка [path-to-regexp](https://github.com/pillarjs/path-to-regexp) синтаксиса.
8
- - Автоматический парсинг JSON-тела запроса.
9
- - Парсинг строки запроса и заголовка `cookie`.
10
- - Поддержка `preHandler` и `postHandler` хуков.
11
- - Позволяет использовать асинхронные обработчики.
5
+ HTTP router for Node.js based on
6
+ a [prefix tree](https://en.wikipedia.org/wiki/Trie) (trie).
12
7
 
13
- ## Установка
8
+ - Supports [path-to-regexp](https://github.com/pillarjs/path-to-regexp) syntax.
9
+ - Parses JSON request body automatically.
10
+ - Parses query string and `cookie` header.
11
+ - Supports `preHandler` and `postHandler` hooks.
12
+ - Supports asynchronous handlers.
13
+
14
+ ## Installation
14
15
 
15
16
  ```bash
16
17
  npm install @e22m4u/js-trie-router
17
18
  ```
18
19
 
19
- Для загрузки ES-модуля требуется установить `"type": "module"` в файле
20
- `package.json`, или использовать `.mjs` расширение.
20
+ To load the ES-module, you need to set `"type": "module"`
21
+ in the `package.json` file, or use the `.mjs` extension.
21
22
 
22
- ## Обзор
23
+ ## Overview
23
24
 
24
- Базовый пример создания экземпляра роутера, объявления маршрута
25
- и передачи слушателя запросов `http` серверу.
25
+ A basic example of creating a router instance, defining
26
+ a route and startup Node.js HTTP server.
26
27
 
27
28
  ```js
28
29
  import http from 'http';
29
- import {TrieRouter} from '@e22m4u/js-path-trie';
30
+ import {TrieRouter} from '@e22m4u/js-trie-router';
30
31
 
31
- const server = new http.Server(); // создание экземпляра HTTP сервера
32
- const router = new TrieRouter(); // создание экземпляра роутера
32
+ const server = new http.Server(); // Node.js HTTP server
33
+ const router = new TrieRouter(); // TrieRouter instance
33
34
 
34
- router.defineRoute({
35
- method: 'GET', // метод запроса "GET", "POST" и т.д.
36
- path: '/', // шаблон пути, пример "/user/:id"
37
- handler(ctx) { // обработчик маршрута
35
+ router.defineRoute({ // route definition
36
+ method: 'GET', // request method "GET", "POST", etc.
37
+ path: '/', // path template, example "/user/:id"
38
+ handler(ctx) { // route handler
38
39
  return 'Hello world!';
39
40
  },
40
41
  });
41
42
 
42
- server.on('request', router.requestListener); // подключение роутера
43
- server.listen(3000, 'localhost'); // прослушивание запросов
43
+ server.on('request', router.requestListener); // inject request listener
44
+ server.listen(3000, 'localhost'); // listen for requests
44
45
 
45
46
  // Open in browser http://localhost:3000
46
47
  ```
47
48
 
48
- ### Контекст запроса
49
+ ### Request context
49
50
 
50
- Первый параметр обработчика маршрута принимает экземпляр класса
51
- `RequestContext` с набором свойств, содержащих разобранные
52
- данные входящего запроса.
51
+ The first parameter of a route handler is an instance
52
+ of the `RequestContext` class which has a properties
53
+ set with contents of a parsed incoming request.
53
54
 
54
- - `container: ServiceContainer` экземпляр [сервис-контейнера](https://npmjs.com/package/@e22m4u/js-service)
55
- - `req: IncomingMessage` нативный поток запроса модуля `http`
56
- - `res: ServerResponse` нативный поток ответа модуля `http`
57
- - `params: ParsedParams` объект ключ-значение с параметрами пути
58
- - `query: ParsedQuery` объект ключ-значение с параметрами строки запроса
59
- - `headers: ParsedHeaders` объект ключ-значение с заголовками запроса
60
- - `cookie: ParsedCookie` объект ключ-значение разобранного заголовка `cookie`
61
- - `method: string` метод запроса в верхнем регистре, например `GET`, `POST` и т.д.
62
- - `path: string` путь включающий строку запроса, например `/myPath?foo=bar`
63
- - `pathname: string` путь запроса, например `/myMath`
55
+ - `container: ServiceContainer` instance of [service container](https://npmjs.com/package/@e22m4u/js-service)
56
+ - `req: IncomingMessage` native incoming request stream
57
+ - `res: ServerResponse` native server response stream
58
+ - `params: ParsedParams` key-value object with path parameters
59
+ - `query: ParsedQuery` key-value object with query string parameters
60
+ - `headers: ParsedHeaders` key-value object with request headers
61
+ - `cookie: ParsedCookie` key-value object of parsed `cookie` header
62
+ - `method: string` request method in uppercase, e.g. `GET`, `POST`, etc.
63
+ - `path: string` path including query string, e.g. `/myPath?foo=bar`
64
+ - `pathname: string` request path, e.g. `/myMath`
64
65
 
65
- Пример доступа к контексту из обработчика маршрута.
66
+ Example of accessing the context from a route handler.
66
67
 
67
68
  ```js
68
69
  router.defineRoute({
@@ -85,12 +86,12 @@ router.defineRoute({
85
86
  });
86
87
  ```
87
88
 
88
- ### Отправка ответа
89
+ ### Response sending
89
90
 
90
- Возвращаемое значение обработчика маршрута используется в качестве ответа
91
- сервера. Тип значения влияет на представление возвращаемых данных. Например,
92
- если результатом будет являться тип `object`, то такое значение автоматически
93
- сериализуется в JSON.
91
+ Return value of a route handler is used as response data.
92
+ Value type affects representation of a response data. For example,
93
+ if a response data is of type `object`, it will be automatically
94
+ serialized to JSON.
94
95
 
95
96
  | value | content-type |
96
97
  |-----------|--------------------------|
@@ -101,19 +102,20 @@ router.defineRoute({
101
102
  | `Buffer` | application/octet-stream |
102
103
  | `Stream` | application/octet-stream |
103
104
 
104
- Пример возвращаемого значения обработчиком маршрута.
105
+ Example of sending data as JSON.
105
106
 
106
107
  ```js
107
- router.defineRoute({ // регистрация маршрута
108
+ router.defineRoute({ // register a route
108
109
  // ...
109
- handler(ctx) { // обработчик входящего запроса
110
- return {foo: 'bar'}; // ответ будет представлен в виде JSON
110
+ handler(ctx) { // incoming request handler
111
+ return {foo: 'bar'}; // response will be encoded to JSON
111
112
  },
112
113
  });
113
114
  ```
114
115
 
115
- Контекст запроса `ctx` содержит нативный экземпляр класса `ServerResponse`,
116
- который может быть использован для ручного управления ответом.
116
+ The request context `ctx` contains a native instance
117
+ of the `ServerResponse` class from the `http` module,
118
+ which can be used for manual response management.
117
119
 
118
120
  ```js
119
121
  router.defineRoute({
@@ -126,28 +128,28 @@ router.defineRoute({
126
128
  });
127
129
  ```
128
130
 
129
- ### Хуки маршрута
131
+ ### Route hooks
130
132
 
131
- Определение маршрута методом `defineRoute` позволяет задать хуки
132
- для отслеживания и перехвата входящего запроса и ответа
133
- конкретного маршрута.
133
+ Defining a route with the `defineRoute` method allows
134
+ to set up hooks to monitor and intercept requests and
135
+ responses for a specific route.
134
136
 
135
- - `preHandler` выполняется перед вызовом обработчика
136
- - `postHandler` выполняется после вызова обработчика
137
+ - `preHandler` executes before a route handler
138
+ - `postHandler` executes after a route handler
137
139
 
138
140
  #### preHandler
139
141
 
140
- Перед вызовом обработчика маршрута может потребоваться выполнение
141
- таких операции как авторизация и проверка параметров запроса. Для
142
- этого можно использовать хук `preHandler`.
142
+ Before calling a route handler, operations such as authorization
143
+ and request validation may be performed in the `preHandler`
144
+ hook.
143
145
 
144
146
  ```js
145
- router.defineRoute({ // регистрация маршрута
147
+ router.defineRoute({ // register a route
146
148
  // ...
147
149
  preHandler(ctx) {
148
- // вызывается перед обработчиком
149
- console.log(`Incoming request ${ctx.method} ${ctx.path}`);
150
- // Incoming request GET /myPath
150
+ // before the route handler
151
+ console.log(`incoming request ${ctx.method} ${ctx.path}`);
152
+ // > incoming request GET /myPath
151
153
  },
152
154
  handler(ctx) {
153
155
  return 'Hello world!';
@@ -155,85 +157,86 @@ router.defineRoute({ // регистрация маршрута
155
157
  });
156
158
  ```
157
159
 
158
- Если хук `preHandler` возвращает значение отличное от `undefined` и `null`,
159
- то такое значение будет использовано в качестве ответа сервера, а вызов
160
- обработчика маршрута будет пропущен.
160
+ A route handler will not be called if `preHandler` hook
161
+ returns a value other than `undefined` and `null`, because
162
+ that value will be sent as response data.
161
163
 
162
164
  ```js
163
- router.defineRoute({ // регистрация маршрута
165
+ router.defineRoute({ // register a route
164
166
  // ...
165
167
  preHandler(ctx) {
166
- // возвращение ответа сервера
168
+ // return the response data
167
169
  return 'Are you authorized?';
168
170
  },
169
171
  handler(ctx) {
170
- // данный обработчик не вызывается, так как
171
- // хук "preHandler" уже отправил ответ
172
+ // this handler will not be called
173
+ // because the "preHandler" hook
174
+ // has already sent the data
172
175
  },
173
176
  });
174
177
  ```
175
178
 
176
179
  #### postHandler
177
180
 
178
- Возвращаемое значение обработчика маршрута передается вторым аргументом
179
- хука `postHandler`. По аналогии с `preHandler`, если возвращаемое
180
- значение отличается от `undefined` и `null`, то такое значение будет
181
- использовано в качестве ответа сервера. Это может быть полезно для
182
- модификации возвращаемого ответа.
181
+ Return value of a route handler is passed to the second
182
+ parameter of `postHandler` hook. It may be useful to modify
183
+ the value before being sent.
183
184
 
184
185
  ```js
185
186
  router.defineRoute({
186
187
  // ...
187
188
  handler(ctx) {
189
+ // return the response data
188
190
  return 'Hello world!';
189
191
  },
190
192
  postHandler(ctx, data) {
191
- // выполняется после обработчика маршрута
193
+ // modify the response data before send
192
194
  return data.toUpperCase(); // HELLO WORLD!
193
195
  },
194
196
  });
195
197
  ```
196
198
 
197
- ### Глобальные хуки
199
+ ### Global hooks
198
200
 
199
- Экземпляр роутера `TrieRouter` позволяет задать глобальные хуки, которые
200
- имеют более высокий приоритет перед хуками маршрута, и вызываются
201
- в первую очередь.
201
+ A `TrieRouter` instance allows to set up global hooks
202
+ that have higher priority over route hooks and are
203
+ called first.
202
204
 
203
- - `preHandler` выполняется перед вызовом обработчика
204
- - `postHandler` выполняется после вызова обработчика
205
+ - `preHandler` executes before each route handler
206
+ - `postHandler` executes after each route handler
205
207
 
206
- Добавить глобальные хуки можно методом `addHook` экземпляра роутера,
207
- где первым параметром передается название хука, а вторым его функция.
208
+ Global hooks can be added using the `addHook` method
209
+ of a router instance, where the first parameter
210
+ is the hook name and the second is a function.
208
211
 
209
212
  ```js
210
213
  router.addHook('preHandler', (ctx) => {
211
- // вызов перед обработчиком маршрута
214
+ // before a route handler
212
215
  });
213
216
 
214
217
  router.addHook('postHandler', (ctx, data) => {
215
- // вызов после обработчика маршрута
218
+ // after a route handler
216
219
  });
217
220
  ```
218
221
 
219
- Аналогично хукам маршрута, если глобальный хук возвращает значение
220
- отличное от `undefined` и `null`, то такое значение будет использовано
221
- как ответ сервера.
222
+ Similar to route hooks, if a global hook returns
223
+ a value other than `undefined` and `null`, that
224
+ value will be sent as response data.
222
225
 
223
- ## Отладка
226
+ ## Debugging
224
227
 
225
- Установка переменной `DEBUG` перед командой запуска включает вывод логов.
228
+ Set the `DEBUG` variable to enable log output.
226
229
 
227
230
  ```bash
228
- DEBUG=jsPathTrie* npm run test
231
+ DEBUG=jsTrieRouter* npm run test
229
232
  ```
230
233
 
231
- ## Тестирование
234
+ ## Testing
232
235
 
233
236
  ```bash
234
237
  npm run test
235
238
  ```
236
239
 
237
- ## Лицензия
240
+ ## License
238
241
 
239
242
  MIT
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@e22m4u/js-trie-router",
3
- "version": "0.0.3",
4
- "description": "Trie-роутер для Node.js",
3
+ "version": "0.0.4",
4
+ "description": "HTTP router for Node.js based on a prefix tree",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
7
7
  "scripts": {
@@ -26,32 +26,31 @@
26
26
  "author": "e22m4u <e22m4u@yandex.ru>",
27
27
  "license": "MIT",
28
28
  "homepage": "https://github.com/e22m4u/js-trie-router",
29
+ "dependencies": {
30
+ "@e22m4u/js-format": "~0.1.0",
31
+ "@e22m4u/js-path-trie": "~0.0.2",
32
+ "@e22m4u/js-service": "~0.1.0",
33
+ "debug": "~4.3.7",
34
+ "http-errors": "~2.0.0",
35
+ "statuses": "~2.0.1"
36
+ },
29
37
  "devDependencies": {
30
- "@commitlint/cli": "~19.4.0",
31
- "@commitlint/config-conventional": "~19.2.2",
32
- "@eslint/js": "~9.9.0",
33
- "@types/chai-as-promised": "^8.0.0",
38
+ "@commitlint/cli": "~19.5.0",
39
+ "@commitlint/config-conventional": "~19.5.0",
40
+ "@eslint/js": "~9.12.0",
41
+ "@types/chai-as-promised": "~8.0.1",
34
42
  "c8": "~10.1.2",
35
43
  "chai": "~5.1.1",
36
- "chai-as-promised": "^8.0.0",
37
- "eslint": "~9.9.0",
44
+ "chai-as-promised": "~8.0.0",
45
+ "eslint": "~9.12.0",
38
46
  "eslint-config-prettier": "~9.1.0",
39
47
  "eslint-plugin-chai-expect": "~3.1.0",
40
- "eslint-plugin-jsdoc": "^50.2.2",
48
+ "eslint-plugin-jsdoc": "~50.3.1",
41
49
  "eslint-plugin-mocha": "~10.5.0",
42
- "globals": "~15.9.0",
43
- "husky": "~9.1.4",
50
+ "globals": "~15.10.0",
51
+ "husky": "~9.1.6",
44
52
  "mocha": "~10.7.3",
45
53
  "prettier": "~3.3.3",
46
- "typescript": "~5.5.4"
47
- },
48
- "dependencies": {
49
- "@e22m4u/js-format": "^0.1.0",
50
- "@e22m4u/js-path-trie": "^0.0.1",
51
- "@e22m4u/js-service": "^0.0.12",
52
- "debug": "^4.3.6",
53
- "http-errors": "^2.0.0",
54
- "path-to-regexp": "^7.1.0",
55
- "statuses": "^2.0.1"
54
+ "typescript": "~5.6.2"
56
55
  }
57
56
  }