@hono/node-server 1.6.0 → 1.7.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 CHANGED
@@ -178,6 +178,40 @@ app.use(
178
178
  )
179
179
  ```
180
180
 
181
+ ## Accessing Node.js API
182
+
183
+ You can access the Node.js API from `c.env` in Node.js. For example, if you want to specify a type, you can write the following.
184
+
185
+ ```ts
186
+ import { serve } from '@hono/node-server'
187
+ import type { HttpBindings } from '@hono/node-server'
188
+ import { Hono } from 'hono'
189
+
190
+ const app = new Hono<{ Bindings: HttpBindings }>()
191
+
192
+ app.get('/', (c) => {
193
+ return c.json({
194
+ remoteAddress: c.env.incoming.socket.remoteAddress,
195
+ })
196
+ })
197
+
198
+ serve(app)
199
+ ```
200
+
201
+ The APIs that you can get from `c.env` are as follows.
202
+
203
+ ```ts
204
+ type HttpBindings = {
205
+ incoming: IncomingMessage
206
+ outgoing: ServerResponse
207
+ }
208
+
209
+ type Http2Bindings = {
210
+ incoming: Http2ServerRequest
211
+ outgoing: Http2ServerResponse
212
+ }
213
+ ```
214
+
181
215
  ## Related projects
182
216
 
183
217
  - Hono - <https://hono.dev>
package/dist/index.js CHANGED
@@ -304,8 +304,22 @@ var responseViaCache = (res, outgoing) => {
304
304
  );
305
305
  }
306
306
  };
307
- var responseViaResponseObject = async (res, outgoing) => {
308
- res = res instanceof Promise ? await res.catch(handleFetchError) : res;
307
+ var responseViaResponseObject = async (res, outgoing, options = {}) => {
308
+ if (res instanceof Promise) {
309
+ if (options.errorHandler) {
310
+ try {
311
+ res = await res;
312
+ } catch (err) {
313
+ const errRes = await options.errorHandler(err);
314
+ if (!errRes) {
315
+ return;
316
+ }
317
+ res = errRes;
318
+ }
319
+ } else {
320
+ res = await res.catch(handleFetchError);
321
+ }
322
+ }
309
323
  try {
310
324
  const isCached = cacheKey in res;
311
325
  if (isCached) {
@@ -342,8 +356,8 @@ var responseViaResponseObject = async (res, outgoing) => {
342
356
  outgoing.end();
343
357
  }
344
358
  };
345
- var getRequestListener = (fetchCallback) => {
346
- return (incoming, outgoing) => {
359
+ var getRequestListener = (fetchCallback, options = {}) => {
360
+ return async (incoming, outgoing) => {
347
361
  let res;
348
362
  const req = newRequest(incoming);
349
363
  try {
@@ -353,12 +367,19 @@ var getRequestListener = (fetchCallback) => {
353
367
  }
354
368
  } catch (e) {
355
369
  if (!res) {
356
- res = handleFetchError(e);
370
+ if (options.errorHandler) {
371
+ res = await options.errorHandler(e);
372
+ if (!res) {
373
+ return;
374
+ }
375
+ } else {
376
+ res = handleFetchError(e);
377
+ }
357
378
  } else {
358
379
  return handleResponseError(e, outgoing);
359
380
  }
360
381
  }
361
- return responseViaResponseObject(res, outgoing);
382
+ return responseViaResponseObject(res, outgoing, options);
362
383
  };
363
384
  };
364
385
 
package/dist/index.mjs CHANGED
@@ -266,8 +266,22 @@ var responseViaCache = (res, outgoing) => {
266
266
  );
267
267
  }
268
268
  };
269
- var responseViaResponseObject = async (res, outgoing) => {
270
- res = res instanceof Promise ? await res.catch(handleFetchError) : res;
269
+ var responseViaResponseObject = async (res, outgoing, options = {}) => {
270
+ if (res instanceof Promise) {
271
+ if (options.errorHandler) {
272
+ try {
273
+ res = await res;
274
+ } catch (err) {
275
+ const errRes = await options.errorHandler(err);
276
+ if (!errRes) {
277
+ return;
278
+ }
279
+ res = errRes;
280
+ }
281
+ } else {
282
+ res = await res.catch(handleFetchError);
283
+ }
284
+ }
271
285
  try {
272
286
  const isCached = cacheKey in res;
273
287
  if (isCached) {
@@ -304,8 +318,8 @@ var responseViaResponseObject = async (res, outgoing) => {
304
318
  outgoing.end();
305
319
  }
306
320
  };
307
- var getRequestListener = (fetchCallback) => {
308
- return (incoming, outgoing) => {
321
+ var getRequestListener = (fetchCallback, options = {}) => {
322
+ return async (incoming, outgoing) => {
309
323
  let res;
310
324
  const req = newRequest(incoming);
311
325
  try {
@@ -315,12 +329,19 @@ var getRequestListener = (fetchCallback) => {
315
329
  }
316
330
  } catch (e) {
317
331
  if (!res) {
318
- res = handleFetchError(e);
332
+ if (options.errorHandler) {
333
+ res = await options.errorHandler(e);
334
+ if (!res) {
335
+ return;
336
+ }
337
+ } else {
338
+ res = handleFetchError(e);
339
+ }
319
340
  } else {
320
341
  return handleResponseError(e, outgoing);
321
342
  }
322
343
  }
323
- return responseViaResponseObject(res, outgoing);
344
+ return responseViaResponseObject(res, outgoing, options);
324
345
  };
325
346
  };
326
347
 
@@ -1,8 +1,10 @@
1
1
  import { IncomingMessage, ServerResponse } from 'node:http';
2
2
  import { Http2ServerRequest, Http2ServerResponse } from 'node:http2';
3
- import { FetchCallback } from './types.mjs';
3
+ import { FetchCallback, CustomErrorHandler } from './types.mjs';
4
4
  import 'node:https';
5
5
 
6
- declare const getRequestListener: (fetchCallback: FetchCallback) => (incoming: IncomingMessage | Http2ServerRequest, outgoing: ServerResponse | Http2ServerResponse) => void | Promise<void>;
6
+ declare const getRequestListener: (fetchCallback: FetchCallback, options?: {
7
+ errorHandler?: CustomErrorHandler;
8
+ }) => (incoming: IncomingMessage | Http2ServerRequest, outgoing: ServerResponse | Http2ServerResponse) => Promise<void>;
7
9
 
8
10
  export { getRequestListener };
@@ -1,8 +1,10 @@
1
1
  import { IncomingMessage, ServerResponse } from 'node:http';
2
2
  import { Http2ServerRequest, Http2ServerResponse } from 'node:http2';
3
- import { FetchCallback } from './types.js';
3
+ import { FetchCallback, CustomErrorHandler } from './types.js';
4
4
  import 'node:https';
5
5
 
6
- declare const getRequestListener: (fetchCallback: FetchCallback) => (incoming: IncomingMessage | Http2ServerRequest, outgoing: ServerResponse | Http2ServerResponse) => void | Promise<void>;
6
+ declare const getRequestListener: (fetchCallback: FetchCallback, options?: {
7
+ errorHandler?: CustomErrorHandler;
8
+ }) => (incoming: IncomingMessage | Http2ServerRequest, outgoing: ServerResponse | Http2ServerResponse) => Promise<void>;
7
9
 
8
10
  export { getRequestListener };
package/dist/listener.js CHANGED
@@ -299,8 +299,22 @@ var responseViaCache = (res, outgoing) => {
299
299
  );
300
300
  }
301
301
  };
302
- var responseViaResponseObject = async (res, outgoing) => {
303
- res = res instanceof Promise ? await res.catch(handleFetchError) : res;
302
+ var responseViaResponseObject = async (res, outgoing, options = {}) => {
303
+ if (res instanceof Promise) {
304
+ if (options.errorHandler) {
305
+ try {
306
+ res = await res;
307
+ } catch (err) {
308
+ const errRes = await options.errorHandler(err);
309
+ if (!errRes) {
310
+ return;
311
+ }
312
+ res = errRes;
313
+ }
314
+ } else {
315
+ res = await res.catch(handleFetchError);
316
+ }
317
+ }
304
318
  try {
305
319
  const isCached = cacheKey in res;
306
320
  if (isCached) {
@@ -337,8 +351,8 @@ var responseViaResponseObject = async (res, outgoing) => {
337
351
  outgoing.end();
338
352
  }
339
353
  };
340
- var getRequestListener = (fetchCallback) => {
341
- return (incoming, outgoing) => {
354
+ var getRequestListener = (fetchCallback, options = {}) => {
355
+ return async (incoming, outgoing) => {
342
356
  let res;
343
357
  const req = newRequest(incoming);
344
358
  try {
@@ -348,12 +362,19 @@ var getRequestListener = (fetchCallback) => {
348
362
  }
349
363
  } catch (e) {
350
364
  if (!res) {
351
- res = handleFetchError(e);
365
+ if (options.errorHandler) {
366
+ res = await options.errorHandler(e);
367
+ if (!res) {
368
+ return;
369
+ }
370
+ } else {
371
+ res = handleFetchError(e);
372
+ }
352
373
  } else {
353
374
  return handleResponseError(e, outgoing);
354
375
  }
355
376
  }
356
- return responseViaResponseObject(res, outgoing);
377
+ return responseViaResponseObject(res, outgoing, options);
357
378
  };
358
379
  };
359
380
  // Annotate the CommonJS export names for ESM import in node:
package/dist/listener.mjs CHANGED
@@ -263,8 +263,22 @@ var responseViaCache = (res, outgoing) => {
263
263
  );
264
264
  }
265
265
  };
266
- var responseViaResponseObject = async (res, outgoing) => {
267
- res = res instanceof Promise ? await res.catch(handleFetchError) : res;
266
+ var responseViaResponseObject = async (res, outgoing, options = {}) => {
267
+ if (res instanceof Promise) {
268
+ if (options.errorHandler) {
269
+ try {
270
+ res = await res;
271
+ } catch (err) {
272
+ const errRes = await options.errorHandler(err);
273
+ if (!errRes) {
274
+ return;
275
+ }
276
+ res = errRes;
277
+ }
278
+ } else {
279
+ res = await res.catch(handleFetchError);
280
+ }
281
+ }
268
282
  try {
269
283
  const isCached = cacheKey in res;
270
284
  if (isCached) {
@@ -301,8 +315,8 @@ var responseViaResponseObject = async (res, outgoing) => {
301
315
  outgoing.end();
302
316
  }
303
317
  };
304
- var getRequestListener = (fetchCallback) => {
305
- return (incoming, outgoing) => {
318
+ var getRequestListener = (fetchCallback, options = {}) => {
319
+ return async (incoming, outgoing) => {
306
320
  let res;
307
321
  const req = newRequest(incoming);
308
322
  try {
@@ -312,12 +326,19 @@ var getRequestListener = (fetchCallback) => {
312
326
  }
313
327
  } catch (e) {
314
328
  if (!res) {
315
- res = handleFetchError(e);
329
+ if (options.errorHandler) {
330
+ res = await options.errorHandler(e);
331
+ if (!res) {
332
+ return;
333
+ }
334
+ } else {
335
+ res = handleFetchError(e);
336
+ }
316
337
  } else {
317
338
  return handleResponseError(e, outgoing);
318
339
  }
319
340
  }
320
- return responseViaResponseObject(res, outgoing);
341
+ return responseViaResponseObject(res, outgoing, options);
321
342
  };
322
343
  };
323
344
  export {
package/dist/server.js CHANGED
@@ -301,8 +301,22 @@ var responseViaCache = (res, outgoing) => {
301
301
  );
302
302
  }
303
303
  };
304
- var responseViaResponseObject = async (res, outgoing) => {
305
- res = res instanceof Promise ? await res.catch(handleFetchError) : res;
304
+ var responseViaResponseObject = async (res, outgoing, options = {}) => {
305
+ if (res instanceof Promise) {
306
+ if (options.errorHandler) {
307
+ try {
308
+ res = await res;
309
+ } catch (err) {
310
+ const errRes = await options.errorHandler(err);
311
+ if (!errRes) {
312
+ return;
313
+ }
314
+ res = errRes;
315
+ }
316
+ } else {
317
+ res = await res.catch(handleFetchError);
318
+ }
319
+ }
306
320
  try {
307
321
  const isCached = cacheKey in res;
308
322
  if (isCached) {
@@ -339,8 +353,8 @@ var responseViaResponseObject = async (res, outgoing) => {
339
353
  outgoing.end();
340
354
  }
341
355
  };
342
- var getRequestListener = (fetchCallback) => {
343
- return (incoming, outgoing) => {
356
+ var getRequestListener = (fetchCallback, options = {}) => {
357
+ return async (incoming, outgoing) => {
344
358
  let res;
345
359
  const req = newRequest(incoming);
346
360
  try {
@@ -350,12 +364,19 @@ var getRequestListener = (fetchCallback) => {
350
364
  }
351
365
  } catch (e) {
352
366
  if (!res) {
353
- res = handleFetchError(e);
367
+ if (options.errorHandler) {
368
+ res = await options.errorHandler(e);
369
+ if (!res) {
370
+ return;
371
+ }
372
+ } else {
373
+ res = handleFetchError(e);
374
+ }
354
375
  } else {
355
376
  return handleResponseError(e, outgoing);
356
377
  }
357
378
  }
358
- return responseViaResponseObject(res, outgoing);
379
+ return responseViaResponseObject(res, outgoing, options);
359
380
  };
360
381
  };
361
382
 
package/dist/server.mjs CHANGED
@@ -266,8 +266,22 @@ var responseViaCache = (res, outgoing) => {
266
266
  );
267
267
  }
268
268
  };
269
- var responseViaResponseObject = async (res, outgoing) => {
270
- res = res instanceof Promise ? await res.catch(handleFetchError) : res;
269
+ var responseViaResponseObject = async (res, outgoing, options = {}) => {
270
+ if (res instanceof Promise) {
271
+ if (options.errorHandler) {
272
+ try {
273
+ res = await res;
274
+ } catch (err) {
275
+ const errRes = await options.errorHandler(err);
276
+ if (!errRes) {
277
+ return;
278
+ }
279
+ res = errRes;
280
+ }
281
+ } else {
282
+ res = await res.catch(handleFetchError);
283
+ }
284
+ }
271
285
  try {
272
286
  const isCached = cacheKey in res;
273
287
  if (isCached) {
@@ -304,8 +318,8 @@ var responseViaResponseObject = async (res, outgoing) => {
304
318
  outgoing.end();
305
319
  }
306
320
  };
307
- var getRequestListener = (fetchCallback) => {
308
- return (incoming, outgoing) => {
321
+ var getRequestListener = (fetchCallback, options = {}) => {
322
+ return async (incoming, outgoing) => {
309
323
  let res;
310
324
  const req = newRequest(incoming);
311
325
  try {
@@ -315,12 +329,19 @@ var getRequestListener = (fetchCallback) => {
315
329
  }
316
330
  } catch (e) {
317
331
  if (!res) {
318
- res = handleFetchError(e);
332
+ if (options.errorHandler) {
333
+ res = await options.errorHandler(e);
334
+ if (!res) {
335
+ return;
336
+ }
337
+ } else {
338
+ res = handleFetchError(e);
339
+ }
319
340
  } else {
320
341
  return handleResponseError(e, outgoing);
321
342
  }
322
343
  }
323
- return responseViaResponseObject(res, outgoing);
344
+ return responseViaResponseObject(res, outgoing, options);
324
345
  };
325
346
  };
326
347
 
package/dist/types.d.mts CHANGED
@@ -37,5 +37,6 @@ type Options = {
37
37
  port?: number;
38
38
  hostname?: string;
39
39
  } & ServerOptions;
40
+ type CustomErrorHandler = (err: unknown) => void | Response | Promise<void | Response>;
40
41
 
41
- export { FetchCallback, Http2Bindings, HttpBindings, NextHandlerOption, Options, ServerType };
42
+ export { CustomErrorHandler, FetchCallback, Http2Bindings, HttpBindings, NextHandlerOption, Options, ServerType };
package/dist/types.d.ts CHANGED
@@ -37,5 +37,6 @@ type Options = {
37
37
  port?: number;
38
38
  hostname?: string;
39
39
  } & ServerOptions;
40
+ type CustomErrorHandler = (err: unknown) => void | Response | Promise<void | Response>;
40
41
 
41
- export { FetchCallback, Http2Bindings, HttpBindings, NextHandlerOption, Options, ServerType };
42
+ export { CustomErrorHandler, FetchCallback, Http2Bindings, HttpBindings, NextHandlerOption, Options, ServerType };
package/dist/vercel.d.mts CHANGED
@@ -2,6 +2,6 @@ import * as http2 from 'http2';
2
2
  import * as http from 'http';
3
3
  import { Hono } from 'hono';
4
4
 
5
- declare const handle: (app: Hono<any, any, any>) => (incoming: http.IncomingMessage | http2.Http2ServerRequest, outgoing: http.ServerResponse<http.IncomingMessage> | http2.Http2ServerResponse) => void | Promise<void>;
5
+ declare const handle: (app: Hono<any, any, any>) => (incoming: http.IncomingMessage | http2.Http2ServerRequest, outgoing: http.ServerResponse<http.IncomingMessage> | http2.Http2ServerResponse) => Promise<void>;
6
6
 
7
7
  export { handle };
package/dist/vercel.d.ts CHANGED
@@ -2,6 +2,6 @@ import * as http2 from 'http2';
2
2
  import * as http from 'http';
3
3
  import { Hono } from 'hono';
4
4
 
5
- declare const handle: (app: Hono<any, any, any>) => (incoming: http.IncomingMessage | http2.Http2ServerRequest, outgoing: http.ServerResponse<http.IncomingMessage> | http2.Http2ServerResponse) => void | Promise<void>;
5
+ declare const handle: (app: Hono<any, any, any>) => (incoming: http.IncomingMessage | http2.Http2ServerRequest, outgoing: http.ServerResponse<http.IncomingMessage> | http2.Http2ServerResponse) => Promise<void>;
6
6
 
7
7
  export { handle };
package/dist/vercel.js CHANGED
@@ -299,8 +299,22 @@ var responseViaCache = (res, outgoing) => {
299
299
  );
300
300
  }
301
301
  };
302
- var responseViaResponseObject = async (res, outgoing) => {
303
- res = res instanceof Promise ? await res.catch(handleFetchError) : res;
302
+ var responseViaResponseObject = async (res, outgoing, options = {}) => {
303
+ if (res instanceof Promise) {
304
+ if (options.errorHandler) {
305
+ try {
306
+ res = await res;
307
+ } catch (err) {
308
+ const errRes = await options.errorHandler(err);
309
+ if (!errRes) {
310
+ return;
311
+ }
312
+ res = errRes;
313
+ }
314
+ } else {
315
+ res = await res.catch(handleFetchError);
316
+ }
317
+ }
304
318
  try {
305
319
  const isCached = cacheKey in res;
306
320
  if (isCached) {
@@ -337,8 +351,8 @@ var responseViaResponseObject = async (res, outgoing) => {
337
351
  outgoing.end();
338
352
  }
339
353
  };
340
- var getRequestListener = (fetchCallback) => {
341
- return (incoming, outgoing) => {
354
+ var getRequestListener = (fetchCallback, options = {}) => {
355
+ return async (incoming, outgoing) => {
342
356
  let res;
343
357
  const req = newRequest(incoming);
344
358
  try {
@@ -348,12 +362,19 @@ var getRequestListener = (fetchCallback) => {
348
362
  }
349
363
  } catch (e) {
350
364
  if (!res) {
351
- res = handleFetchError(e);
365
+ if (options.errorHandler) {
366
+ res = await options.errorHandler(e);
367
+ if (!res) {
368
+ return;
369
+ }
370
+ } else {
371
+ res = handleFetchError(e);
372
+ }
352
373
  } else {
353
374
  return handleResponseError(e, outgoing);
354
375
  }
355
376
  }
356
- return responseViaResponseObject(res, outgoing);
377
+ return responseViaResponseObject(res, outgoing, options);
357
378
  };
358
379
  };
359
380
 
package/dist/vercel.mjs CHANGED
@@ -263,8 +263,22 @@ var responseViaCache = (res, outgoing) => {
263
263
  );
264
264
  }
265
265
  };
266
- var responseViaResponseObject = async (res, outgoing) => {
267
- res = res instanceof Promise ? await res.catch(handleFetchError) : res;
266
+ var responseViaResponseObject = async (res, outgoing, options = {}) => {
267
+ if (res instanceof Promise) {
268
+ if (options.errorHandler) {
269
+ try {
270
+ res = await res;
271
+ } catch (err) {
272
+ const errRes = await options.errorHandler(err);
273
+ if (!errRes) {
274
+ return;
275
+ }
276
+ res = errRes;
277
+ }
278
+ } else {
279
+ res = await res.catch(handleFetchError);
280
+ }
281
+ }
268
282
  try {
269
283
  const isCached = cacheKey in res;
270
284
  if (isCached) {
@@ -301,8 +315,8 @@ var responseViaResponseObject = async (res, outgoing) => {
301
315
  outgoing.end();
302
316
  }
303
317
  };
304
- var getRequestListener = (fetchCallback) => {
305
- return (incoming, outgoing) => {
318
+ var getRequestListener = (fetchCallback, options = {}) => {
319
+ return async (incoming, outgoing) => {
306
320
  let res;
307
321
  const req = newRequest(incoming);
308
322
  try {
@@ -312,12 +326,19 @@ var getRequestListener = (fetchCallback) => {
312
326
  }
313
327
  } catch (e) {
314
328
  if (!res) {
315
- res = handleFetchError(e);
329
+ if (options.errorHandler) {
330
+ res = await options.errorHandler(e);
331
+ if (!res) {
332
+ return;
333
+ }
334
+ } else {
335
+ res = handleFetchError(e);
336
+ }
316
337
  } else {
317
338
  return handleResponseError(e, outgoing);
318
339
  }
319
340
  }
320
- return responseViaResponseObject(res, outgoing);
341
+ return responseViaResponseObject(res, outgoing, options);
321
342
  };
322
343
  };
323
344
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hono/node-server",
3
- "version": "1.6.0",
3
+ "version": "1.7.0",
4
4
  "description": "Node.js Adapter for Hono",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",