@kevisual/router 0.0.65 → 0.0.66

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.
@@ -477,6 +477,12 @@ type RouterReq<T = {}> = {
477
477
  };
478
478
  body?: string;
479
479
  cookies?: Record<string, string>;
480
+ bun?: {
481
+ request: Bun.BunRequest;
482
+ server: Bun.Server<{}>;
483
+ resolve: (response: Response) => void;
484
+ };
485
+ on: (event: 'close', listener: Function) => void;
480
486
  } & T;
481
487
  type RouterRes<T = {}> = {
482
488
  statusCode: number;
@@ -488,7 +494,7 @@ type RouterRes<T = {}> = {
488
494
  setHeader: (name: string, value: string | string[]) => void;
489
495
  cookie: (name: string, value: string, options?: any) => void;
490
496
  write: (chunk: any) => void;
491
- pipe: (stream: any) => void;
497
+ pipe: (stream: ReadableStream) => void;
492
498
  end: (data?: any) => void;
493
499
  } & T;
494
500
 
package/dist/router.d.ts CHANGED
@@ -645,6 +645,12 @@ type RouterReq<T = {}> = {
645
645
  };
646
646
  body?: string;
647
647
  cookies?: Record<string, string>;
648
+ bun?: {
649
+ request: Bun.BunRequest;
650
+ server: Bun.Server<{}>;
651
+ resolve: (response: Response) => void;
652
+ };
653
+ on: (event: 'close', listener: Function) => void;
648
654
  } & T;
649
655
  type RouterRes<T = {}> = {
650
656
  statusCode: number;
@@ -656,7 +662,7 @@ type RouterRes<T = {}> = {
656
662
  setHeader: (name: string, value: string | string[]) => void;
657
663
  cookie: (name: string, value: string, options?: any) => void;
658
664
  write: (chunk: any) => void;
659
- pipe: (stream: any) => void;
665
+ pipe: (stream: ReadableStream) => void;
660
666
  end: (data?: any) => void;
661
667
  } & T;
662
668
 
package/dist/router.js CHANGED
@@ -21476,6 +21476,7 @@ class BunServer extends ServerBase {
21476
21476
  }
21477
21477
  // 将 Bun 的 Request 转换为 Node.js 风格的 req/res
21478
21478
  return new Promise(async (resolve) => {
21479
+ const reqListener = [];
21479
21480
  const req = {
21480
21481
  url: url.pathname + url.search,
21481
21482
  method: request.method,
@@ -21485,12 +21486,29 @@ class BunServer extends ServerBase {
21485
21486
  remoteAddress: request?.remoteAddress || request?.ip || clientInfo?.address || '',
21486
21487
  remotePort: clientInfo?.port || 0,
21487
21488
  },
21488
- // @ts-ignore
21489
+ on: (event, listener) => {
21490
+ reqListener.push({ event, listener });
21491
+ },
21489
21492
  bun: {
21490
21493
  request, // 原始请求对象
21491
21494
  server, // 原始服务器对象
21495
+ resolve
21492
21496
  }
21493
21497
  };
21498
+ const onClose = () => {
21499
+ reqListener.forEach(item => {
21500
+ if (item.event === 'close') {
21501
+ item.listener();
21502
+ }
21503
+ });
21504
+ reqListener.length = 0;
21505
+ };
21506
+ // 监听请求的取消事件
21507
+ if (request.signal) {
21508
+ request.signal.addEventListener('abort', () => {
21509
+ onClose();
21510
+ });
21511
+ }
21494
21512
  const res = {
21495
21513
  statusCode: 200,
21496
21514
  headersSent: false,
@@ -21564,6 +21582,7 @@ class BunServer extends ServerBase {
21564
21582
  controller.enqueue(chunk);
21565
21583
  });
21566
21584
  stream.on('end', () => {
21585
+ onClose();
21567
21586
  controller.close();
21568
21587
  });
21569
21588
  stream.on('error', (err) => {
@@ -21571,9 +21590,9 @@ class BunServer extends ServerBase {
21571
21590
  });
21572
21591
  },
21573
21592
  cancel() {
21574
- if (stream.destroy) {
21575
- stream.destroy();
21576
- }
21593
+ // 只有NODE流才有destroy方法
21594
+ // @ts-ignore
21595
+ stream?.destroy?.();
21577
21596
  }
21578
21597
  });
21579
21598
  resolve(new Response(readableStream, {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package",
3
3
  "name": "@kevisual/router",
4
- "version": "0.0.65",
4
+ "version": "0.0.66",
5
5
  "description": "",
6
6
  "type": "module",
7
7
  "main": "./dist/router.js",
@@ -50,7 +50,7 @@ export class BunServer extends ServerBase implements ServerType {
50
50
  port,
51
51
  hostname,
52
52
  idleTimeout: 0, // 4 minutes idle timeout (max 255 seconds)
53
- fetch: async (request: Bun.BunRequest, server: any) => {
53
+ fetch: async (request: Bun.BunRequest, server: Bun.Server<{}>) => {
54
54
  const host = request.headers.get('host') || 'localhost';
55
55
  const clientInfo = server.requestIP(request); // 返回 { address: string, port: number } 或 null
56
56
  const url = new URL(request.url, `http://${host}`);
@@ -72,6 +72,7 @@ export class BunServer extends ServerBase implements ServerType {
72
72
 
73
73
  // 将 Bun 的 Request 转换为 Node.js 风格的 req/res
74
74
  return new Promise(async (resolve) => {
75
+ const reqListener: { event: string; listener: Function }[] = [];
75
76
  const req: RouterReq = {
76
77
  url: url.pathname + url.search,
77
78
  method: request.method,
@@ -81,12 +82,29 @@ export class BunServer extends ServerBase implements ServerType {
81
82
  remoteAddress: request?.remoteAddress || request?.ip || clientInfo?.address || '',
82
83
  remotePort: clientInfo?.port || 0,
83
84
  },
84
- // @ts-ignore
85
+ on: (event: string, listener: Function) => {
86
+ reqListener.push({ event, listener });
87
+ },
85
88
  bun: {
86
89
  request, // 原始请求对象
87
90
  server, // 原始服务器对象
91
+ resolve
88
92
  }
89
93
  };
94
+ const onClose = () => {
95
+ reqListener.forEach(item => {
96
+ if (item.event === 'close') {
97
+ item.listener();
98
+ }
99
+ });
100
+ reqListener.length = 0;
101
+ }
102
+ // 监听请求的取消事件
103
+ if (request.signal) {
104
+ request.signal.addEventListener('abort', () => {
105
+ onClose();
106
+ });
107
+ }
90
108
 
91
109
  const res: RouterRes = {
92
110
  statusCode: 200,
@@ -143,7 +161,7 @@ export class BunServer extends ServerBase implements ServerType {
143
161
  if (callback) callback();
144
162
  return true;
145
163
  },
146
- pipe(stream: any) {
164
+ pipe(stream: ReadableStream | NodeJS.ReadableStream) {
147
165
  this.writableEnded = true;
148
166
 
149
167
  // 如果是 ReadableStream,直接使用
@@ -164,6 +182,7 @@ export class BunServer extends ServerBase implements ServerType {
164
182
  controller.enqueue(chunk);
165
183
  });
166
184
  stream.on('end', () => {
185
+ onClose();
167
186
  controller.close();
168
187
  });
169
188
  stream.on('error', (err: any) => {
@@ -171,9 +190,9 @@ export class BunServer extends ServerBase implements ServerType {
171
190
  });
172
191
  },
173
192
  cancel() {
174
- if (stream.destroy) {
175
- stream.destroy();
176
- }
193
+ // 只有NODE流才有destroy方法
194
+ // @ts-ignore
195
+ stream?.destroy?.();
177
196
  }
178
197
  });
179
198
 
@@ -104,6 +104,12 @@ export type RouterReq<T = {}> = {
104
104
  };
105
105
  body?: string;
106
106
  cookies?: Record<string, string>;
107
+ bun?: {
108
+ request: Bun.BunRequest;
109
+ server: Bun.Server<{}>;
110
+ resolve: (response: Response) => void;
111
+ }
112
+ on: (event: 'close', listener: Function) => void;
107
113
  } & T;
108
114
 
109
115
  export type RouterRes<T = {}> = {
@@ -116,6 +122,6 @@ export type RouterRes<T = {}> = {
116
122
  setHeader: (name: string, value: string | string[]) => void;
117
123
  cookie: (name: string, value: string, options?: any) => void;
118
124
  write: (chunk: any) => void;
119
- pipe: (stream: any) => void;
125
+ pipe: (stream: ReadableStream) => void;
120
126
  end: (data?: any) => void;
121
127
  } & T;