@hono/node-server 2.0.3 → 2.0.5

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/dist/index.cjs CHANGED
@@ -976,7 +976,7 @@ const upgradeWebSocket = (0, hono_ws.defineWebSocketHelper)(async (c, events, op
976
976
  const handleMessage = (data, isBinary) => {
977
977
  const datas = Array.isArray(data) ? data : [data];
978
978
  for (const data of datas) try {
979
- events?.onMessage?.(new MessageEvent("message", { data: isBinary ? data instanceof ArrayBuffer ? data : data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) : data.toString("utf-8") }), ctx);
979
+ events?.onMessage?.(new MessageEvent("message", { data: isBinary ? data instanceof ArrayBuffer ? data : data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) : typeof data === "string" ? data : Buffer.from(data).toString("utf-8") }), ctx);
980
980
  } catch (e) {
981
981
  (options?.onError ?? console.error)(e);
982
982
  }
package/dist/index.d.cts CHANGED
@@ -1,10 +1,38 @@
1
1
  import { AddressInfo } from "node:net";
2
- import { WebSocket, WebSocketServer } from "ws";
3
2
  import { IncomingMessage, Server, ServerOptions, ServerResponse, createServer } from "node:http";
4
3
  import { Http2SecureServer, Http2Server, Http2ServerRequest, Http2ServerResponse, SecureServerOptions, ServerOptions as ServerOptions$1, createSecureServer, createServer as createServer$1 } from "node:http2";
5
4
  import { ServerOptions as ServerOptions$2, createServer as createServer$2 } from "node:https";
5
+ import { Duplex } from "node:stream";
6
6
  import { UpgradeWebSocket } from "hono/ws";
7
7
 
8
+ //#region src/websocket-types.d.ts
9
+ type WSReadyState = 0 | 1 | 2 | 3;
10
+ type WebSocketData = string | ArrayBuffer | Uint8Array | readonly Uint8Array[];
11
+ type WebSocketSendOptions = {
12
+ compress?: boolean;
13
+ };
14
+ interface WebSocketLike {
15
+ protocol: string;
16
+ readyState: WSReadyState;
17
+ close(code?: number, reason?: string): void;
18
+ send(data: string | ArrayBuffer | ArrayBufferView, options?: WebSocketSendOptions): void;
19
+ on(event: 'message', listener: (data: WebSocketData, isBinary: boolean) => void): this;
20
+ on(event: 'close', listener: (code: number, reason: Uint8Array) => void): this;
21
+ on(event: 'error', listener: (error: unknown) => void): this;
22
+ off(event: 'message', listener: (data: WebSocketData, isBinary: boolean) => void): this;
23
+ }
24
+ interface WebSocketServerLike {
25
+ options: {
26
+ noServer?: boolean;
27
+ };
28
+ on(event: 'connection', listener: (ws: WebSocketLike, request: IncomingMessage) => void): this;
29
+ on(event: 'headers', listener: (headers: string[]) => void): this;
30
+ off(event: 'headers', listener: (headers: string[]) => void): this;
31
+ emit(event: 'connection', ws: WebSocketLike, request: IncomingMessage): boolean;
32
+ handleUpgrade(request: IncomingMessage, socket: Duplex, head: Buffer, callback: (ws: WebSocketLike) => void): void;
33
+ close(): void;
34
+ }
35
+ //#endregion
8
36
  //#region src/types.d.ts
9
37
  type HttpBindings = {
10
38
  incoming: IncomingMessage;
@@ -40,7 +68,7 @@ type Options = {
40
68
  port?: number;
41
69
  hostname?: string;
42
70
  websocket?: {
43
- server: WebSocketServer;
71
+ server: WebSocketServerLike;
44
72
  };
45
73
  } & ServerOptions$3;
46
74
  type CustomErrorHandler = (err: unknown) => void | Response | Promise<void | Response>;
@@ -53,7 +81,7 @@ declare const serve: (options: Options, listeningListener?: (info: AddressInfo)
53
81
  type UpgradeWebSocketOptions = {
54
82
  onError: (err: unknown) => void;
55
83
  };
56
- declare const upgradeWebSocket: UpgradeWebSocket<WebSocket, UpgradeWebSocketOptions>;
84
+ declare const upgradeWebSocket: UpgradeWebSocket<WebSocketLike, UpgradeWebSocketOptions>;
57
85
  //#endregion
58
86
  //#region src/listener.d.ts
59
87
  declare const getRequestListener: (fetchCallback: FetchCallback, options?: {
@@ -70,4 +98,4 @@ declare class RequestError extends Error {
70
98
  });
71
99
  }
72
100
  //#endregion
73
- export { type Http2Bindings, type HttpBindings, RequestError, type ServerType, createAdaptorServer, getRequestListener, serve, upgradeWebSocket };
101
+ export { type Http2Bindings, type HttpBindings, RequestError, type ServerType, type WebSocketData, type WebSocketLike, type WebSocketServerLike, createAdaptorServer, getRequestListener, serve, upgradeWebSocket };
package/dist/index.d.mts CHANGED
@@ -1,10 +1,38 @@
1
1
  import { IncomingMessage, Server, ServerOptions, ServerResponse, createServer } from "node:http";
2
2
  import { Http2SecureServer, Http2Server, Http2ServerRequest, Http2ServerResponse, SecureServerOptions, ServerOptions as ServerOptions$1, createSecureServer, createServer as createServer$1 } from "node:http2";
3
+ import { Duplex } from "node:stream";
3
4
  import { UpgradeWebSocket } from "hono/ws";
4
5
  import { AddressInfo } from "node:net";
5
- import { WebSocket, WebSocketServer } from "ws";
6
6
  import { ServerOptions as ServerOptions$2, createServer as createServer$2 } from "node:https";
7
7
 
8
+ //#region src/websocket-types.d.ts
9
+ type WSReadyState = 0 | 1 | 2 | 3;
10
+ type WebSocketData = string | ArrayBuffer | Uint8Array | readonly Uint8Array[];
11
+ type WebSocketSendOptions = {
12
+ compress?: boolean;
13
+ };
14
+ interface WebSocketLike {
15
+ protocol: string;
16
+ readyState: WSReadyState;
17
+ close(code?: number, reason?: string): void;
18
+ send(data: string | ArrayBuffer | ArrayBufferView, options?: WebSocketSendOptions): void;
19
+ on(event: 'message', listener: (data: WebSocketData, isBinary: boolean) => void): this;
20
+ on(event: 'close', listener: (code: number, reason: Uint8Array) => void): this;
21
+ on(event: 'error', listener: (error: unknown) => void): this;
22
+ off(event: 'message', listener: (data: WebSocketData, isBinary: boolean) => void): this;
23
+ }
24
+ interface WebSocketServerLike {
25
+ options: {
26
+ noServer?: boolean;
27
+ };
28
+ on(event: 'connection', listener: (ws: WebSocketLike, request: IncomingMessage) => void): this;
29
+ on(event: 'headers', listener: (headers: string[]) => void): this;
30
+ off(event: 'headers', listener: (headers: string[]) => void): this;
31
+ emit(event: 'connection', ws: WebSocketLike, request: IncomingMessage): boolean;
32
+ handleUpgrade(request: IncomingMessage, socket: Duplex, head: Buffer, callback: (ws: WebSocketLike) => void): void;
33
+ close(): void;
34
+ }
35
+ //#endregion
8
36
  //#region src/types.d.ts
9
37
  type HttpBindings = {
10
38
  incoming: IncomingMessage;
@@ -40,7 +68,7 @@ type Options = {
40
68
  port?: number;
41
69
  hostname?: string;
42
70
  websocket?: {
43
- server: WebSocketServer;
71
+ server: WebSocketServerLike;
44
72
  };
45
73
  } & ServerOptions$3;
46
74
  type CustomErrorHandler = (err: unknown) => void | Response | Promise<void | Response>;
@@ -53,7 +81,7 @@ declare const serve: (options: Options, listeningListener?: (info: AddressInfo)
53
81
  type UpgradeWebSocketOptions = {
54
82
  onError: (err: unknown) => void;
55
83
  };
56
- declare const upgradeWebSocket: UpgradeWebSocket<WebSocket, UpgradeWebSocketOptions>;
84
+ declare const upgradeWebSocket: UpgradeWebSocket<WebSocketLike, UpgradeWebSocketOptions>;
57
85
  //#endregion
58
86
  //#region src/listener.d.ts
59
87
  declare const getRequestListener: (fetchCallback: FetchCallback, options?: {
@@ -70,4 +98,4 @@ declare class RequestError extends Error {
70
98
  });
71
99
  }
72
100
  //#endregion
73
- export { type Http2Bindings, type HttpBindings, RequestError, type ServerType, createAdaptorServer, getRequestListener, serve, upgradeWebSocket };
101
+ export { type Http2Bindings, type HttpBindings, RequestError, type ServerType, type WebSocketData, type WebSocketLike, type WebSocketServerLike, createAdaptorServer, getRequestListener, serve, upgradeWebSocket };
package/dist/index.mjs CHANGED
@@ -975,7 +975,7 @@ const upgradeWebSocket = defineWebSocketHelper(async (c, events, options) => {
975
975
  const handleMessage = (data, isBinary) => {
976
976
  const datas = Array.isArray(data) ? data : [data];
977
977
  for (const data of datas) try {
978
- events?.onMessage?.(new MessageEvent("message", { data: isBinary ? data instanceof ArrayBuffer ? data : data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) : data.toString("utf-8") }), ctx);
978
+ events?.onMessage?.(new MessageEvent("message", { data: isBinary ? data instanceof ArrayBuffer ? data : data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) : typeof data === "string" ? data : Buffer.from(data).toString("utf-8") }), ctx);
979
979
  } catch (e) {
980
980
  (options?.onError ?? console.error)(e);
981
981
  }
@@ -43,7 +43,7 @@ const serveStatic = (options = { root: "" }) => {
43
43
  if (optionPath) filename = optionPath;
44
44
  else try {
45
45
  filename = tryDecodeURI(c.req.path);
46
- if (/(?:^|[\/\\])\.{1,2}(?:$|[\/\\])|[\/\\]{2,}/.test(filename)) throw new Error();
46
+ if (/(?:^|[\/\\])\.{1,2}(?:$|[\/\\])|[\/\\]{2,}|\\/.test(filename)) throw new Error();
47
47
  } catch {
48
48
  await options.onNotFound?.(c.req.path, c);
49
49
  return next();
@@ -42,7 +42,7 @@ const serveStatic = (options = { root: "" }) => {
42
42
  if (optionPath) filename = optionPath;
43
43
  else try {
44
44
  filename = tryDecodeURI(c.req.path);
45
- if (/(?:^|[\/\\])\.{1,2}(?:$|[\/\\])|[\/\\]{2,}/.test(filename)) throw new Error();
45
+ if (/(?:^|[\/\\])\.{1,2}(?:$|[\/\\])|[\/\\]{2,}|\\/.test(filename)) throw new Error();
46
46
  } catch {
47
47
  await options.onNotFound?.(c.req.path, c);
48
48
  return next();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hono/node-server",
3
- "version": "2.0.3",
3
+ "version": "2.0.5",
4
4
  "description": "Node.js Adapter for Hono",
5
5
  "main": "dist/index.mjs",
6
6
  "type": "module",