@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.
- package/dist/opencode.d.ts +7 -1
- package/dist/router.d.ts +7 -1
- package/dist/router.js +23 -4
- package/package.json +1 -1
- package/src/server/server-bun.ts +25 -6
- package/src/server/server-type.ts +7 -1
package/dist/opencode.d.ts
CHANGED
|
@@ -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:
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
21575
|
-
|
|
21576
|
-
|
|
21593
|
+
// 只有NODE流才有destroy方法
|
|
21594
|
+
// @ts-ignore
|
|
21595
|
+
stream?.destroy?.();
|
|
21577
21596
|
}
|
|
21578
21597
|
});
|
|
21579
21598
|
resolve(new Response(readableStream, {
|
package/package.json
CHANGED
package/src/server/server-bun.ts
CHANGED
|
@@ -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:
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
175
|
-
|
|
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:
|
|
125
|
+
pipe: (stream: ReadableStream) => void;
|
|
120
126
|
end: (data?: any) => void;
|
|
121
127
|
} & T;
|