@hono/node-server 1.2.1 → 1.2.2
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.js +56 -11
- package/dist/index.mjs +56 -11
- package/dist/listener.js +56 -11
- package/dist/listener.mjs +56 -11
- package/dist/server.js +56 -11
- package/dist/server.mjs +56 -11
- package/dist/utils.d.mts +5 -0
- package/dist/utils.d.ts +5 -0
- package/dist/utils.js +68 -0
- package/dist/utils.mjs +43 -0
- package/dist/vercel.js +56 -11
- package/dist/vercel.mjs +56 -11
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -41,7 +41,6 @@ var import_node_http = require("http");
|
|
|
41
41
|
|
|
42
42
|
// src/listener.ts
|
|
43
43
|
var import_node_stream = require("stream");
|
|
44
|
-
var import_promises = require("stream/promises");
|
|
45
44
|
|
|
46
45
|
// src/globals.ts
|
|
47
46
|
var import_node_crypto = __toESM(require("crypto"));
|
|
@@ -59,6 +58,47 @@ global.fetch = (info, init) => {
|
|
|
59
58
|
return webFetch(info, init);
|
|
60
59
|
};
|
|
61
60
|
|
|
61
|
+
// src/utils.ts
|
|
62
|
+
function writeFromReadableStream(stream, writable) {
|
|
63
|
+
if (stream.locked) {
|
|
64
|
+
throw new TypeError("ReadableStream is locked.");
|
|
65
|
+
}
|
|
66
|
+
const reader = stream.getReader();
|
|
67
|
+
if (writable.destroyed) {
|
|
68
|
+
reader.cancel();
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
writable.on("drain", onDrain);
|
|
72
|
+
writable.on("close", cancel);
|
|
73
|
+
writable.on("error", cancel);
|
|
74
|
+
reader.read().then(flow, cancel);
|
|
75
|
+
return reader.closed.finally(() => {
|
|
76
|
+
writable.off("close", cancel);
|
|
77
|
+
writable.off("error", cancel);
|
|
78
|
+
writable.off("drain", onDrain);
|
|
79
|
+
});
|
|
80
|
+
function cancel(error) {
|
|
81
|
+
reader.cancel(error).catch(() => {
|
|
82
|
+
});
|
|
83
|
+
if (error)
|
|
84
|
+
writable.destroy(error);
|
|
85
|
+
}
|
|
86
|
+
function onDrain() {
|
|
87
|
+
reader.read().then(flow, cancel);
|
|
88
|
+
}
|
|
89
|
+
function flow({ done, value }) {
|
|
90
|
+
try {
|
|
91
|
+
if (done) {
|
|
92
|
+
writable.end();
|
|
93
|
+
} else if (writable.write(value)) {
|
|
94
|
+
return reader.read().then(flow, cancel);
|
|
95
|
+
}
|
|
96
|
+
} catch (e) {
|
|
97
|
+
cancel(e);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
62
102
|
// src/listener.ts
|
|
63
103
|
var regBuffer = /^no$/i;
|
|
64
104
|
var regContentType = /^(application\/json\b|text\/(?!event-stream\b))/i;
|
|
@@ -81,7 +121,7 @@ var getRequestListener = (fetchCallback) => {
|
|
|
81
121
|
}
|
|
82
122
|
let res;
|
|
83
123
|
try {
|
|
84
|
-
res = await fetchCallback(new Request(url
|
|
124
|
+
res = await fetchCallback(new Request(url, init));
|
|
85
125
|
} catch (e) {
|
|
86
126
|
res = new Response(null, { status: 500 });
|
|
87
127
|
if (e instanceof Error) {
|
|
@@ -91,24 +131,28 @@ var getRequestListener = (fetchCallback) => {
|
|
|
91
131
|
}
|
|
92
132
|
}
|
|
93
133
|
const resHeaderRecord = {};
|
|
134
|
+
const cookies = [];
|
|
94
135
|
for (const [k, v] of res.headers) {
|
|
95
|
-
resHeaderRecord[k] = v;
|
|
96
136
|
if (k === "set-cookie") {
|
|
97
|
-
|
|
137
|
+
cookies.push(v);
|
|
98
138
|
} else {
|
|
99
|
-
|
|
139
|
+
resHeaderRecord[k] = v;
|
|
100
140
|
}
|
|
101
141
|
}
|
|
102
|
-
|
|
142
|
+
if (cookies.length > 0) {
|
|
143
|
+
resHeaderRecord["set-cookie"] = cookies;
|
|
144
|
+
}
|
|
103
145
|
if (res.body) {
|
|
104
146
|
try {
|
|
105
147
|
if (resHeaderRecord["transfer-encoding"] || resHeaderRecord["content-encoding"] || resHeaderRecord["content-length"] || // nginx buffering variant
|
|
106
|
-
regBuffer.test(resHeaderRecord["x-accel-buffering"]) || !regContentType.test(resHeaderRecord["content-type"])) {
|
|
107
|
-
|
|
148
|
+
resHeaderRecord["x-accel-buffering"] && regBuffer.test(resHeaderRecord["x-accel-buffering"]) || !regContentType.test(resHeaderRecord["content-type"])) {
|
|
149
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
150
|
+
await writeFromReadableStream(res.body, outgoing);
|
|
108
151
|
} else {
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
outgoing.
|
|
152
|
+
const buffer = await res.arrayBuffer();
|
|
153
|
+
resHeaderRecord["content-length"] = buffer.byteLength;
|
|
154
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
155
|
+
outgoing.end(new Uint8Array(buffer));
|
|
112
156
|
}
|
|
113
157
|
} catch (e) {
|
|
114
158
|
const err = e instanceof Error ? e : new Error("unknown error", { cause: e });
|
|
@@ -120,6 +164,7 @@ var getRequestListener = (fetchCallback) => {
|
|
|
120
164
|
}
|
|
121
165
|
}
|
|
122
166
|
} else {
|
|
167
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
123
168
|
outgoing.end();
|
|
124
169
|
}
|
|
125
170
|
};
|
package/dist/index.mjs
CHANGED
|
@@ -3,7 +3,6 @@ import { createServer as createServerHTTP } from "http";
|
|
|
3
3
|
|
|
4
4
|
// src/listener.ts
|
|
5
5
|
import { Readable } from "stream";
|
|
6
|
-
import { pipeline } from "stream/promises";
|
|
7
6
|
|
|
8
7
|
// src/globals.ts
|
|
9
8
|
import crypto from "crypto";
|
|
@@ -21,6 +20,47 @@ global.fetch = (info, init) => {
|
|
|
21
20
|
return webFetch(info, init);
|
|
22
21
|
};
|
|
23
22
|
|
|
23
|
+
// src/utils.ts
|
|
24
|
+
function writeFromReadableStream(stream, writable) {
|
|
25
|
+
if (stream.locked) {
|
|
26
|
+
throw new TypeError("ReadableStream is locked.");
|
|
27
|
+
}
|
|
28
|
+
const reader = stream.getReader();
|
|
29
|
+
if (writable.destroyed) {
|
|
30
|
+
reader.cancel();
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
writable.on("drain", onDrain);
|
|
34
|
+
writable.on("close", cancel);
|
|
35
|
+
writable.on("error", cancel);
|
|
36
|
+
reader.read().then(flow, cancel);
|
|
37
|
+
return reader.closed.finally(() => {
|
|
38
|
+
writable.off("close", cancel);
|
|
39
|
+
writable.off("error", cancel);
|
|
40
|
+
writable.off("drain", onDrain);
|
|
41
|
+
});
|
|
42
|
+
function cancel(error) {
|
|
43
|
+
reader.cancel(error).catch(() => {
|
|
44
|
+
});
|
|
45
|
+
if (error)
|
|
46
|
+
writable.destroy(error);
|
|
47
|
+
}
|
|
48
|
+
function onDrain() {
|
|
49
|
+
reader.read().then(flow, cancel);
|
|
50
|
+
}
|
|
51
|
+
function flow({ done, value }) {
|
|
52
|
+
try {
|
|
53
|
+
if (done) {
|
|
54
|
+
writable.end();
|
|
55
|
+
} else if (writable.write(value)) {
|
|
56
|
+
return reader.read().then(flow, cancel);
|
|
57
|
+
}
|
|
58
|
+
} catch (e) {
|
|
59
|
+
cancel(e);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
24
64
|
// src/listener.ts
|
|
25
65
|
var regBuffer = /^no$/i;
|
|
26
66
|
var regContentType = /^(application\/json\b|text\/(?!event-stream\b))/i;
|
|
@@ -43,7 +83,7 @@ var getRequestListener = (fetchCallback) => {
|
|
|
43
83
|
}
|
|
44
84
|
let res;
|
|
45
85
|
try {
|
|
46
|
-
res = await fetchCallback(new Request(url
|
|
86
|
+
res = await fetchCallback(new Request(url, init));
|
|
47
87
|
} catch (e) {
|
|
48
88
|
res = new Response(null, { status: 500 });
|
|
49
89
|
if (e instanceof Error) {
|
|
@@ -53,24 +93,28 @@ var getRequestListener = (fetchCallback) => {
|
|
|
53
93
|
}
|
|
54
94
|
}
|
|
55
95
|
const resHeaderRecord = {};
|
|
96
|
+
const cookies = [];
|
|
56
97
|
for (const [k, v] of res.headers) {
|
|
57
|
-
resHeaderRecord[k] = v;
|
|
58
98
|
if (k === "set-cookie") {
|
|
59
|
-
|
|
99
|
+
cookies.push(v);
|
|
60
100
|
} else {
|
|
61
|
-
|
|
101
|
+
resHeaderRecord[k] = v;
|
|
62
102
|
}
|
|
63
103
|
}
|
|
64
|
-
|
|
104
|
+
if (cookies.length > 0) {
|
|
105
|
+
resHeaderRecord["set-cookie"] = cookies;
|
|
106
|
+
}
|
|
65
107
|
if (res.body) {
|
|
66
108
|
try {
|
|
67
109
|
if (resHeaderRecord["transfer-encoding"] || resHeaderRecord["content-encoding"] || resHeaderRecord["content-length"] || // nginx buffering variant
|
|
68
|
-
regBuffer.test(resHeaderRecord["x-accel-buffering"]) || !regContentType.test(resHeaderRecord["content-type"])) {
|
|
69
|
-
|
|
110
|
+
resHeaderRecord["x-accel-buffering"] && regBuffer.test(resHeaderRecord["x-accel-buffering"]) || !regContentType.test(resHeaderRecord["content-type"])) {
|
|
111
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
112
|
+
await writeFromReadableStream(res.body, outgoing);
|
|
70
113
|
} else {
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
outgoing.
|
|
114
|
+
const buffer = await res.arrayBuffer();
|
|
115
|
+
resHeaderRecord["content-length"] = buffer.byteLength;
|
|
116
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
117
|
+
outgoing.end(new Uint8Array(buffer));
|
|
74
118
|
}
|
|
75
119
|
} catch (e) {
|
|
76
120
|
const err = e instanceof Error ? e : new Error("unknown error", { cause: e });
|
|
@@ -82,6 +126,7 @@ var getRequestListener = (fetchCallback) => {
|
|
|
82
126
|
}
|
|
83
127
|
}
|
|
84
128
|
} else {
|
|
129
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
85
130
|
outgoing.end();
|
|
86
131
|
}
|
|
87
132
|
};
|
package/dist/listener.js
CHANGED
|
@@ -34,7 +34,6 @@ __export(listener_exports, {
|
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(listener_exports);
|
|
36
36
|
var import_node_stream = require("stream");
|
|
37
|
-
var import_promises = require("stream/promises");
|
|
38
37
|
|
|
39
38
|
// src/globals.ts
|
|
40
39
|
var import_node_crypto = __toESM(require("crypto"));
|
|
@@ -52,6 +51,47 @@ global.fetch = (info, init) => {
|
|
|
52
51
|
return webFetch(info, init);
|
|
53
52
|
};
|
|
54
53
|
|
|
54
|
+
// src/utils.ts
|
|
55
|
+
function writeFromReadableStream(stream, writable) {
|
|
56
|
+
if (stream.locked) {
|
|
57
|
+
throw new TypeError("ReadableStream is locked.");
|
|
58
|
+
}
|
|
59
|
+
const reader = stream.getReader();
|
|
60
|
+
if (writable.destroyed) {
|
|
61
|
+
reader.cancel();
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
writable.on("drain", onDrain);
|
|
65
|
+
writable.on("close", cancel);
|
|
66
|
+
writable.on("error", cancel);
|
|
67
|
+
reader.read().then(flow, cancel);
|
|
68
|
+
return reader.closed.finally(() => {
|
|
69
|
+
writable.off("close", cancel);
|
|
70
|
+
writable.off("error", cancel);
|
|
71
|
+
writable.off("drain", onDrain);
|
|
72
|
+
});
|
|
73
|
+
function cancel(error) {
|
|
74
|
+
reader.cancel(error).catch(() => {
|
|
75
|
+
});
|
|
76
|
+
if (error)
|
|
77
|
+
writable.destroy(error);
|
|
78
|
+
}
|
|
79
|
+
function onDrain() {
|
|
80
|
+
reader.read().then(flow, cancel);
|
|
81
|
+
}
|
|
82
|
+
function flow({ done, value }) {
|
|
83
|
+
try {
|
|
84
|
+
if (done) {
|
|
85
|
+
writable.end();
|
|
86
|
+
} else if (writable.write(value)) {
|
|
87
|
+
return reader.read().then(flow, cancel);
|
|
88
|
+
}
|
|
89
|
+
} catch (e) {
|
|
90
|
+
cancel(e);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
55
95
|
// src/listener.ts
|
|
56
96
|
var regBuffer = /^no$/i;
|
|
57
97
|
var regContentType = /^(application\/json\b|text\/(?!event-stream\b))/i;
|
|
@@ -74,7 +114,7 @@ var getRequestListener = (fetchCallback) => {
|
|
|
74
114
|
}
|
|
75
115
|
let res;
|
|
76
116
|
try {
|
|
77
|
-
res = await fetchCallback(new Request(url
|
|
117
|
+
res = await fetchCallback(new Request(url, init));
|
|
78
118
|
} catch (e) {
|
|
79
119
|
res = new Response(null, { status: 500 });
|
|
80
120
|
if (e instanceof Error) {
|
|
@@ -84,24 +124,28 @@ var getRequestListener = (fetchCallback) => {
|
|
|
84
124
|
}
|
|
85
125
|
}
|
|
86
126
|
const resHeaderRecord = {};
|
|
127
|
+
const cookies = [];
|
|
87
128
|
for (const [k, v] of res.headers) {
|
|
88
|
-
resHeaderRecord[k] = v;
|
|
89
129
|
if (k === "set-cookie") {
|
|
90
|
-
|
|
130
|
+
cookies.push(v);
|
|
91
131
|
} else {
|
|
92
|
-
|
|
132
|
+
resHeaderRecord[k] = v;
|
|
93
133
|
}
|
|
94
134
|
}
|
|
95
|
-
|
|
135
|
+
if (cookies.length > 0) {
|
|
136
|
+
resHeaderRecord["set-cookie"] = cookies;
|
|
137
|
+
}
|
|
96
138
|
if (res.body) {
|
|
97
139
|
try {
|
|
98
140
|
if (resHeaderRecord["transfer-encoding"] || resHeaderRecord["content-encoding"] || resHeaderRecord["content-length"] || // nginx buffering variant
|
|
99
|
-
regBuffer.test(resHeaderRecord["x-accel-buffering"]) || !regContentType.test(resHeaderRecord["content-type"])) {
|
|
100
|
-
|
|
141
|
+
resHeaderRecord["x-accel-buffering"] && regBuffer.test(resHeaderRecord["x-accel-buffering"]) || !regContentType.test(resHeaderRecord["content-type"])) {
|
|
142
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
143
|
+
await writeFromReadableStream(res.body, outgoing);
|
|
101
144
|
} else {
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
outgoing.
|
|
145
|
+
const buffer = await res.arrayBuffer();
|
|
146
|
+
resHeaderRecord["content-length"] = buffer.byteLength;
|
|
147
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
148
|
+
outgoing.end(new Uint8Array(buffer));
|
|
105
149
|
}
|
|
106
150
|
} catch (e) {
|
|
107
151
|
const err = e instanceof Error ? e : new Error("unknown error", { cause: e });
|
|
@@ -113,6 +157,7 @@ var getRequestListener = (fetchCallback) => {
|
|
|
113
157
|
}
|
|
114
158
|
}
|
|
115
159
|
} else {
|
|
160
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
116
161
|
outgoing.end();
|
|
117
162
|
}
|
|
118
163
|
};
|
package/dist/listener.mjs
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
// src/listener.ts
|
|
2
2
|
import { Readable } from "stream";
|
|
3
|
-
import { pipeline } from "stream/promises";
|
|
4
3
|
|
|
5
4
|
// src/globals.ts
|
|
6
5
|
import crypto from "crypto";
|
|
@@ -18,6 +17,47 @@ global.fetch = (info, init) => {
|
|
|
18
17
|
return webFetch(info, init);
|
|
19
18
|
};
|
|
20
19
|
|
|
20
|
+
// src/utils.ts
|
|
21
|
+
function writeFromReadableStream(stream, writable) {
|
|
22
|
+
if (stream.locked) {
|
|
23
|
+
throw new TypeError("ReadableStream is locked.");
|
|
24
|
+
}
|
|
25
|
+
const reader = stream.getReader();
|
|
26
|
+
if (writable.destroyed) {
|
|
27
|
+
reader.cancel();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
writable.on("drain", onDrain);
|
|
31
|
+
writable.on("close", cancel);
|
|
32
|
+
writable.on("error", cancel);
|
|
33
|
+
reader.read().then(flow, cancel);
|
|
34
|
+
return reader.closed.finally(() => {
|
|
35
|
+
writable.off("close", cancel);
|
|
36
|
+
writable.off("error", cancel);
|
|
37
|
+
writable.off("drain", onDrain);
|
|
38
|
+
});
|
|
39
|
+
function cancel(error) {
|
|
40
|
+
reader.cancel(error).catch(() => {
|
|
41
|
+
});
|
|
42
|
+
if (error)
|
|
43
|
+
writable.destroy(error);
|
|
44
|
+
}
|
|
45
|
+
function onDrain() {
|
|
46
|
+
reader.read().then(flow, cancel);
|
|
47
|
+
}
|
|
48
|
+
function flow({ done, value }) {
|
|
49
|
+
try {
|
|
50
|
+
if (done) {
|
|
51
|
+
writable.end();
|
|
52
|
+
} else if (writable.write(value)) {
|
|
53
|
+
return reader.read().then(flow, cancel);
|
|
54
|
+
}
|
|
55
|
+
} catch (e) {
|
|
56
|
+
cancel(e);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
21
61
|
// src/listener.ts
|
|
22
62
|
var regBuffer = /^no$/i;
|
|
23
63
|
var regContentType = /^(application\/json\b|text\/(?!event-stream\b))/i;
|
|
@@ -40,7 +80,7 @@ var getRequestListener = (fetchCallback) => {
|
|
|
40
80
|
}
|
|
41
81
|
let res;
|
|
42
82
|
try {
|
|
43
|
-
res = await fetchCallback(new Request(url
|
|
83
|
+
res = await fetchCallback(new Request(url, init));
|
|
44
84
|
} catch (e) {
|
|
45
85
|
res = new Response(null, { status: 500 });
|
|
46
86
|
if (e instanceof Error) {
|
|
@@ -50,24 +90,28 @@ var getRequestListener = (fetchCallback) => {
|
|
|
50
90
|
}
|
|
51
91
|
}
|
|
52
92
|
const resHeaderRecord = {};
|
|
93
|
+
const cookies = [];
|
|
53
94
|
for (const [k, v] of res.headers) {
|
|
54
|
-
resHeaderRecord[k] = v;
|
|
55
95
|
if (k === "set-cookie") {
|
|
56
|
-
|
|
96
|
+
cookies.push(v);
|
|
57
97
|
} else {
|
|
58
|
-
|
|
98
|
+
resHeaderRecord[k] = v;
|
|
59
99
|
}
|
|
60
100
|
}
|
|
61
|
-
|
|
101
|
+
if (cookies.length > 0) {
|
|
102
|
+
resHeaderRecord["set-cookie"] = cookies;
|
|
103
|
+
}
|
|
62
104
|
if (res.body) {
|
|
63
105
|
try {
|
|
64
106
|
if (resHeaderRecord["transfer-encoding"] || resHeaderRecord["content-encoding"] || resHeaderRecord["content-length"] || // nginx buffering variant
|
|
65
|
-
regBuffer.test(resHeaderRecord["x-accel-buffering"]) || !regContentType.test(resHeaderRecord["content-type"])) {
|
|
66
|
-
|
|
107
|
+
resHeaderRecord["x-accel-buffering"] && regBuffer.test(resHeaderRecord["x-accel-buffering"]) || !regContentType.test(resHeaderRecord["content-type"])) {
|
|
108
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
109
|
+
await writeFromReadableStream(res.body, outgoing);
|
|
67
110
|
} else {
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
outgoing.
|
|
111
|
+
const buffer = await res.arrayBuffer();
|
|
112
|
+
resHeaderRecord["content-length"] = buffer.byteLength;
|
|
113
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
114
|
+
outgoing.end(new Uint8Array(buffer));
|
|
71
115
|
}
|
|
72
116
|
} catch (e) {
|
|
73
117
|
const err = e instanceof Error ? e : new Error("unknown error", { cause: e });
|
|
@@ -79,6 +123,7 @@ var getRequestListener = (fetchCallback) => {
|
|
|
79
123
|
}
|
|
80
124
|
}
|
|
81
125
|
} else {
|
|
126
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
82
127
|
outgoing.end();
|
|
83
128
|
}
|
|
84
129
|
};
|
package/dist/server.js
CHANGED
|
@@ -38,7 +38,6 @@ var import_node_http = require("http");
|
|
|
38
38
|
|
|
39
39
|
// src/listener.ts
|
|
40
40
|
var import_node_stream = require("stream");
|
|
41
|
-
var import_promises = require("stream/promises");
|
|
42
41
|
|
|
43
42
|
// src/globals.ts
|
|
44
43
|
var import_node_crypto = __toESM(require("crypto"));
|
|
@@ -56,6 +55,47 @@ global.fetch = (info, init) => {
|
|
|
56
55
|
return webFetch(info, init);
|
|
57
56
|
};
|
|
58
57
|
|
|
58
|
+
// src/utils.ts
|
|
59
|
+
function writeFromReadableStream(stream, writable) {
|
|
60
|
+
if (stream.locked) {
|
|
61
|
+
throw new TypeError("ReadableStream is locked.");
|
|
62
|
+
}
|
|
63
|
+
const reader = stream.getReader();
|
|
64
|
+
if (writable.destroyed) {
|
|
65
|
+
reader.cancel();
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
writable.on("drain", onDrain);
|
|
69
|
+
writable.on("close", cancel);
|
|
70
|
+
writable.on("error", cancel);
|
|
71
|
+
reader.read().then(flow, cancel);
|
|
72
|
+
return reader.closed.finally(() => {
|
|
73
|
+
writable.off("close", cancel);
|
|
74
|
+
writable.off("error", cancel);
|
|
75
|
+
writable.off("drain", onDrain);
|
|
76
|
+
});
|
|
77
|
+
function cancel(error) {
|
|
78
|
+
reader.cancel(error).catch(() => {
|
|
79
|
+
});
|
|
80
|
+
if (error)
|
|
81
|
+
writable.destroy(error);
|
|
82
|
+
}
|
|
83
|
+
function onDrain() {
|
|
84
|
+
reader.read().then(flow, cancel);
|
|
85
|
+
}
|
|
86
|
+
function flow({ done, value }) {
|
|
87
|
+
try {
|
|
88
|
+
if (done) {
|
|
89
|
+
writable.end();
|
|
90
|
+
} else if (writable.write(value)) {
|
|
91
|
+
return reader.read().then(flow, cancel);
|
|
92
|
+
}
|
|
93
|
+
} catch (e) {
|
|
94
|
+
cancel(e);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
59
99
|
// src/listener.ts
|
|
60
100
|
var regBuffer = /^no$/i;
|
|
61
101
|
var regContentType = /^(application\/json\b|text\/(?!event-stream\b))/i;
|
|
@@ -78,7 +118,7 @@ var getRequestListener = (fetchCallback) => {
|
|
|
78
118
|
}
|
|
79
119
|
let res;
|
|
80
120
|
try {
|
|
81
|
-
res = await fetchCallback(new Request(url
|
|
121
|
+
res = await fetchCallback(new Request(url, init));
|
|
82
122
|
} catch (e) {
|
|
83
123
|
res = new Response(null, { status: 500 });
|
|
84
124
|
if (e instanceof Error) {
|
|
@@ -88,24 +128,28 @@ var getRequestListener = (fetchCallback) => {
|
|
|
88
128
|
}
|
|
89
129
|
}
|
|
90
130
|
const resHeaderRecord = {};
|
|
131
|
+
const cookies = [];
|
|
91
132
|
for (const [k, v] of res.headers) {
|
|
92
|
-
resHeaderRecord[k] = v;
|
|
93
133
|
if (k === "set-cookie") {
|
|
94
|
-
|
|
134
|
+
cookies.push(v);
|
|
95
135
|
} else {
|
|
96
|
-
|
|
136
|
+
resHeaderRecord[k] = v;
|
|
97
137
|
}
|
|
98
138
|
}
|
|
99
|
-
|
|
139
|
+
if (cookies.length > 0) {
|
|
140
|
+
resHeaderRecord["set-cookie"] = cookies;
|
|
141
|
+
}
|
|
100
142
|
if (res.body) {
|
|
101
143
|
try {
|
|
102
144
|
if (resHeaderRecord["transfer-encoding"] || resHeaderRecord["content-encoding"] || resHeaderRecord["content-length"] || // nginx buffering variant
|
|
103
|
-
regBuffer.test(resHeaderRecord["x-accel-buffering"]) || !regContentType.test(resHeaderRecord["content-type"])) {
|
|
104
|
-
|
|
145
|
+
resHeaderRecord["x-accel-buffering"] && regBuffer.test(resHeaderRecord["x-accel-buffering"]) || !regContentType.test(resHeaderRecord["content-type"])) {
|
|
146
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
147
|
+
await writeFromReadableStream(res.body, outgoing);
|
|
105
148
|
} else {
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
outgoing.
|
|
149
|
+
const buffer = await res.arrayBuffer();
|
|
150
|
+
resHeaderRecord["content-length"] = buffer.byteLength;
|
|
151
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
152
|
+
outgoing.end(new Uint8Array(buffer));
|
|
109
153
|
}
|
|
110
154
|
} catch (e) {
|
|
111
155
|
const err = e instanceof Error ? e : new Error("unknown error", { cause: e });
|
|
@@ -117,6 +161,7 @@ var getRequestListener = (fetchCallback) => {
|
|
|
117
161
|
}
|
|
118
162
|
}
|
|
119
163
|
} else {
|
|
164
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
120
165
|
outgoing.end();
|
|
121
166
|
}
|
|
122
167
|
};
|
package/dist/server.mjs
CHANGED
|
@@ -3,7 +3,6 @@ import { createServer as createServerHTTP } from "http";
|
|
|
3
3
|
|
|
4
4
|
// src/listener.ts
|
|
5
5
|
import { Readable } from "stream";
|
|
6
|
-
import { pipeline } from "stream/promises";
|
|
7
6
|
|
|
8
7
|
// src/globals.ts
|
|
9
8
|
import crypto from "crypto";
|
|
@@ -21,6 +20,47 @@ global.fetch = (info, init) => {
|
|
|
21
20
|
return webFetch(info, init);
|
|
22
21
|
};
|
|
23
22
|
|
|
23
|
+
// src/utils.ts
|
|
24
|
+
function writeFromReadableStream(stream, writable) {
|
|
25
|
+
if (stream.locked) {
|
|
26
|
+
throw new TypeError("ReadableStream is locked.");
|
|
27
|
+
}
|
|
28
|
+
const reader = stream.getReader();
|
|
29
|
+
if (writable.destroyed) {
|
|
30
|
+
reader.cancel();
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
writable.on("drain", onDrain);
|
|
34
|
+
writable.on("close", cancel);
|
|
35
|
+
writable.on("error", cancel);
|
|
36
|
+
reader.read().then(flow, cancel);
|
|
37
|
+
return reader.closed.finally(() => {
|
|
38
|
+
writable.off("close", cancel);
|
|
39
|
+
writable.off("error", cancel);
|
|
40
|
+
writable.off("drain", onDrain);
|
|
41
|
+
});
|
|
42
|
+
function cancel(error) {
|
|
43
|
+
reader.cancel(error).catch(() => {
|
|
44
|
+
});
|
|
45
|
+
if (error)
|
|
46
|
+
writable.destroy(error);
|
|
47
|
+
}
|
|
48
|
+
function onDrain() {
|
|
49
|
+
reader.read().then(flow, cancel);
|
|
50
|
+
}
|
|
51
|
+
function flow({ done, value }) {
|
|
52
|
+
try {
|
|
53
|
+
if (done) {
|
|
54
|
+
writable.end();
|
|
55
|
+
} else if (writable.write(value)) {
|
|
56
|
+
return reader.read().then(flow, cancel);
|
|
57
|
+
}
|
|
58
|
+
} catch (e) {
|
|
59
|
+
cancel(e);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
24
64
|
// src/listener.ts
|
|
25
65
|
var regBuffer = /^no$/i;
|
|
26
66
|
var regContentType = /^(application\/json\b|text\/(?!event-stream\b))/i;
|
|
@@ -43,7 +83,7 @@ var getRequestListener = (fetchCallback) => {
|
|
|
43
83
|
}
|
|
44
84
|
let res;
|
|
45
85
|
try {
|
|
46
|
-
res = await fetchCallback(new Request(url
|
|
86
|
+
res = await fetchCallback(new Request(url, init));
|
|
47
87
|
} catch (e) {
|
|
48
88
|
res = new Response(null, { status: 500 });
|
|
49
89
|
if (e instanceof Error) {
|
|
@@ -53,24 +93,28 @@ var getRequestListener = (fetchCallback) => {
|
|
|
53
93
|
}
|
|
54
94
|
}
|
|
55
95
|
const resHeaderRecord = {};
|
|
96
|
+
const cookies = [];
|
|
56
97
|
for (const [k, v] of res.headers) {
|
|
57
|
-
resHeaderRecord[k] = v;
|
|
58
98
|
if (k === "set-cookie") {
|
|
59
|
-
|
|
99
|
+
cookies.push(v);
|
|
60
100
|
} else {
|
|
61
|
-
|
|
101
|
+
resHeaderRecord[k] = v;
|
|
62
102
|
}
|
|
63
103
|
}
|
|
64
|
-
|
|
104
|
+
if (cookies.length > 0) {
|
|
105
|
+
resHeaderRecord["set-cookie"] = cookies;
|
|
106
|
+
}
|
|
65
107
|
if (res.body) {
|
|
66
108
|
try {
|
|
67
109
|
if (resHeaderRecord["transfer-encoding"] || resHeaderRecord["content-encoding"] || resHeaderRecord["content-length"] || // nginx buffering variant
|
|
68
|
-
regBuffer.test(resHeaderRecord["x-accel-buffering"]) || !regContentType.test(resHeaderRecord["content-type"])) {
|
|
69
|
-
|
|
110
|
+
resHeaderRecord["x-accel-buffering"] && regBuffer.test(resHeaderRecord["x-accel-buffering"]) || !regContentType.test(resHeaderRecord["content-type"])) {
|
|
111
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
112
|
+
await writeFromReadableStream(res.body, outgoing);
|
|
70
113
|
} else {
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
outgoing.
|
|
114
|
+
const buffer = await res.arrayBuffer();
|
|
115
|
+
resHeaderRecord["content-length"] = buffer.byteLength;
|
|
116
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
117
|
+
outgoing.end(new Uint8Array(buffer));
|
|
74
118
|
}
|
|
75
119
|
} catch (e) {
|
|
76
120
|
const err = e instanceof Error ? e : new Error("unknown error", { cause: e });
|
|
@@ -82,6 +126,7 @@ var getRequestListener = (fetchCallback) => {
|
|
|
82
126
|
}
|
|
83
127
|
}
|
|
84
128
|
} else {
|
|
129
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
85
130
|
outgoing.end();
|
|
86
131
|
}
|
|
87
132
|
};
|
package/dist/utils.d.mts
ADDED
package/dist/utils.d.ts
ADDED
package/dist/utils.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/utils.ts
|
|
21
|
+
var utils_exports = {};
|
|
22
|
+
__export(utils_exports, {
|
|
23
|
+
writeFromReadableStream: () => writeFromReadableStream
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(utils_exports);
|
|
26
|
+
function writeFromReadableStream(stream, writable) {
|
|
27
|
+
if (stream.locked) {
|
|
28
|
+
throw new TypeError("ReadableStream is locked.");
|
|
29
|
+
}
|
|
30
|
+
const reader = stream.getReader();
|
|
31
|
+
if (writable.destroyed) {
|
|
32
|
+
reader.cancel();
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
writable.on("drain", onDrain);
|
|
36
|
+
writable.on("close", cancel);
|
|
37
|
+
writable.on("error", cancel);
|
|
38
|
+
reader.read().then(flow, cancel);
|
|
39
|
+
return reader.closed.finally(() => {
|
|
40
|
+
writable.off("close", cancel);
|
|
41
|
+
writable.off("error", cancel);
|
|
42
|
+
writable.off("drain", onDrain);
|
|
43
|
+
});
|
|
44
|
+
function cancel(error) {
|
|
45
|
+
reader.cancel(error).catch(() => {
|
|
46
|
+
});
|
|
47
|
+
if (error)
|
|
48
|
+
writable.destroy(error);
|
|
49
|
+
}
|
|
50
|
+
function onDrain() {
|
|
51
|
+
reader.read().then(flow, cancel);
|
|
52
|
+
}
|
|
53
|
+
function flow({ done, value }) {
|
|
54
|
+
try {
|
|
55
|
+
if (done) {
|
|
56
|
+
writable.end();
|
|
57
|
+
} else if (writable.write(value)) {
|
|
58
|
+
return reader.read().then(flow, cancel);
|
|
59
|
+
}
|
|
60
|
+
} catch (e) {
|
|
61
|
+
cancel(e);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
66
|
+
0 && (module.exports = {
|
|
67
|
+
writeFromReadableStream
|
|
68
|
+
});
|
package/dist/utils.mjs
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// src/utils.ts
|
|
2
|
+
function writeFromReadableStream(stream, writable) {
|
|
3
|
+
if (stream.locked) {
|
|
4
|
+
throw new TypeError("ReadableStream is locked.");
|
|
5
|
+
}
|
|
6
|
+
const reader = stream.getReader();
|
|
7
|
+
if (writable.destroyed) {
|
|
8
|
+
reader.cancel();
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
writable.on("drain", onDrain);
|
|
12
|
+
writable.on("close", cancel);
|
|
13
|
+
writable.on("error", cancel);
|
|
14
|
+
reader.read().then(flow, cancel);
|
|
15
|
+
return reader.closed.finally(() => {
|
|
16
|
+
writable.off("close", cancel);
|
|
17
|
+
writable.off("error", cancel);
|
|
18
|
+
writable.off("drain", onDrain);
|
|
19
|
+
});
|
|
20
|
+
function cancel(error) {
|
|
21
|
+
reader.cancel(error).catch(() => {
|
|
22
|
+
});
|
|
23
|
+
if (error)
|
|
24
|
+
writable.destroy(error);
|
|
25
|
+
}
|
|
26
|
+
function onDrain() {
|
|
27
|
+
reader.read().then(flow, cancel);
|
|
28
|
+
}
|
|
29
|
+
function flow({ done, value }) {
|
|
30
|
+
try {
|
|
31
|
+
if (done) {
|
|
32
|
+
writable.end();
|
|
33
|
+
} else if (writable.write(value)) {
|
|
34
|
+
return reader.read().then(flow, cancel);
|
|
35
|
+
}
|
|
36
|
+
} catch (e) {
|
|
37
|
+
cancel(e);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export {
|
|
42
|
+
writeFromReadableStream
|
|
43
|
+
};
|
package/dist/vercel.js
CHANGED
|
@@ -36,7 +36,6 @@ module.exports = __toCommonJS(vercel_exports);
|
|
|
36
36
|
|
|
37
37
|
// src/listener.ts
|
|
38
38
|
var import_node_stream = require("stream");
|
|
39
|
-
var import_promises = require("stream/promises");
|
|
40
39
|
|
|
41
40
|
// src/globals.ts
|
|
42
41
|
var import_node_crypto = __toESM(require("crypto"));
|
|
@@ -54,6 +53,47 @@ global.fetch = (info, init) => {
|
|
|
54
53
|
return webFetch(info, init);
|
|
55
54
|
};
|
|
56
55
|
|
|
56
|
+
// src/utils.ts
|
|
57
|
+
function writeFromReadableStream(stream, writable) {
|
|
58
|
+
if (stream.locked) {
|
|
59
|
+
throw new TypeError("ReadableStream is locked.");
|
|
60
|
+
}
|
|
61
|
+
const reader = stream.getReader();
|
|
62
|
+
if (writable.destroyed) {
|
|
63
|
+
reader.cancel();
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
writable.on("drain", onDrain);
|
|
67
|
+
writable.on("close", cancel);
|
|
68
|
+
writable.on("error", cancel);
|
|
69
|
+
reader.read().then(flow, cancel);
|
|
70
|
+
return reader.closed.finally(() => {
|
|
71
|
+
writable.off("close", cancel);
|
|
72
|
+
writable.off("error", cancel);
|
|
73
|
+
writable.off("drain", onDrain);
|
|
74
|
+
});
|
|
75
|
+
function cancel(error) {
|
|
76
|
+
reader.cancel(error).catch(() => {
|
|
77
|
+
});
|
|
78
|
+
if (error)
|
|
79
|
+
writable.destroy(error);
|
|
80
|
+
}
|
|
81
|
+
function onDrain() {
|
|
82
|
+
reader.read().then(flow, cancel);
|
|
83
|
+
}
|
|
84
|
+
function flow({ done, value }) {
|
|
85
|
+
try {
|
|
86
|
+
if (done) {
|
|
87
|
+
writable.end();
|
|
88
|
+
} else if (writable.write(value)) {
|
|
89
|
+
return reader.read().then(flow, cancel);
|
|
90
|
+
}
|
|
91
|
+
} catch (e) {
|
|
92
|
+
cancel(e);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
57
97
|
// src/listener.ts
|
|
58
98
|
var regBuffer = /^no$/i;
|
|
59
99
|
var regContentType = /^(application\/json\b|text\/(?!event-stream\b))/i;
|
|
@@ -76,7 +116,7 @@ var getRequestListener = (fetchCallback) => {
|
|
|
76
116
|
}
|
|
77
117
|
let res;
|
|
78
118
|
try {
|
|
79
|
-
res = await fetchCallback(new Request(url
|
|
119
|
+
res = await fetchCallback(new Request(url, init));
|
|
80
120
|
} catch (e) {
|
|
81
121
|
res = new Response(null, { status: 500 });
|
|
82
122
|
if (e instanceof Error) {
|
|
@@ -86,24 +126,28 @@ var getRequestListener = (fetchCallback) => {
|
|
|
86
126
|
}
|
|
87
127
|
}
|
|
88
128
|
const resHeaderRecord = {};
|
|
129
|
+
const cookies = [];
|
|
89
130
|
for (const [k, v] of res.headers) {
|
|
90
|
-
resHeaderRecord[k] = v;
|
|
91
131
|
if (k === "set-cookie") {
|
|
92
|
-
|
|
132
|
+
cookies.push(v);
|
|
93
133
|
} else {
|
|
94
|
-
|
|
134
|
+
resHeaderRecord[k] = v;
|
|
95
135
|
}
|
|
96
136
|
}
|
|
97
|
-
|
|
137
|
+
if (cookies.length > 0) {
|
|
138
|
+
resHeaderRecord["set-cookie"] = cookies;
|
|
139
|
+
}
|
|
98
140
|
if (res.body) {
|
|
99
141
|
try {
|
|
100
142
|
if (resHeaderRecord["transfer-encoding"] || resHeaderRecord["content-encoding"] || resHeaderRecord["content-length"] || // nginx buffering variant
|
|
101
|
-
regBuffer.test(resHeaderRecord["x-accel-buffering"]) || !regContentType.test(resHeaderRecord["content-type"])) {
|
|
102
|
-
|
|
143
|
+
resHeaderRecord["x-accel-buffering"] && regBuffer.test(resHeaderRecord["x-accel-buffering"]) || !regContentType.test(resHeaderRecord["content-type"])) {
|
|
144
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
145
|
+
await writeFromReadableStream(res.body, outgoing);
|
|
103
146
|
} else {
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
outgoing.
|
|
147
|
+
const buffer = await res.arrayBuffer();
|
|
148
|
+
resHeaderRecord["content-length"] = buffer.byteLength;
|
|
149
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
150
|
+
outgoing.end(new Uint8Array(buffer));
|
|
107
151
|
}
|
|
108
152
|
} catch (e) {
|
|
109
153
|
const err = e instanceof Error ? e : new Error("unknown error", { cause: e });
|
|
@@ -115,6 +159,7 @@ var getRequestListener = (fetchCallback) => {
|
|
|
115
159
|
}
|
|
116
160
|
}
|
|
117
161
|
} else {
|
|
162
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
118
163
|
outgoing.end();
|
|
119
164
|
}
|
|
120
165
|
};
|
package/dist/vercel.mjs
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
// src/listener.ts
|
|
2
2
|
import { Readable } from "stream";
|
|
3
|
-
import { pipeline } from "stream/promises";
|
|
4
3
|
|
|
5
4
|
// src/globals.ts
|
|
6
5
|
import crypto from "crypto";
|
|
@@ -18,6 +17,47 @@ global.fetch = (info, init) => {
|
|
|
18
17
|
return webFetch(info, init);
|
|
19
18
|
};
|
|
20
19
|
|
|
20
|
+
// src/utils.ts
|
|
21
|
+
function writeFromReadableStream(stream, writable) {
|
|
22
|
+
if (stream.locked) {
|
|
23
|
+
throw new TypeError("ReadableStream is locked.");
|
|
24
|
+
}
|
|
25
|
+
const reader = stream.getReader();
|
|
26
|
+
if (writable.destroyed) {
|
|
27
|
+
reader.cancel();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
writable.on("drain", onDrain);
|
|
31
|
+
writable.on("close", cancel);
|
|
32
|
+
writable.on("error", cancel);
|
|
33
|
+
reader.read().then(flow, cancel);
|
|
34
|
+
return reader.closed.finally(() => {
|
|
35
|
+
writable.off("close", cancel);
|
|
36
|
+
writable.off("error", cancel);
|
|
37
|
+
writable.off("drain", onDrain);
|
|
38
|
+
});
|
|
39
|
+
function cancel(error) {
|
|
40
|
+
reader.cancel(error).catch(() => {
|
|
41
|
+
});
|
|
42
|
+
if (error)
|
|
43
|
+
writable.destroy(error);
|
|
44
|
+
}
|
|
45
|
+
function onDrain() {
|
|
46
|
+
reader.read().then(flow, cancel);
|
|
47
|
+
}
|
|
48
|
+
function flow({ done, value }) {
|
|
49
|
+
try {
|
|
50
|
+
if (done) {
|
|
51
|
+
writable.end();
|
|
52
|
+
} else if (writable.write(value)) {
|
|
53
|
+
return reader.read().then(flow, cancel);
|
|
54
|
+
}
|
|
55
|
+
} catch (e) {
|
|
56
|
+
cancel(e);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
21
61
|
// src/listener.ts
|
|
22
62
|
var regBuffer = /^no$/i;
|
|
23
63
|
var regContentType = /^(application\/json\b|text\/(?!event-stream\b))/i;
|
|
@@ -40,7 +80,7 @@ var getRequestListener = (fetchCallback) => {
|
|
|
40
80
|
}
|
|
41
81
|
let res;
|
|
42
82
|
try {
|
|
43
|
-
res = await fetchCallback(new Request(url
|
|
83
|
+
res = await fetchCallback(new Request(url, init));
|
|
44
84
|
} catch (e) {
|
|
45
85
|
res = new Response(null, { status: 500 });
|
|
46
86
|
if (e instanceof Error) {
|
|
@@ -50,24 +90,28 @@ var getRequestListener = (fetchCallback) => {
|
|
|
50
90
|
}
|
|
51
91
|
}
|
|
52
92
|
const resHeaderRecord = {};
|
|
93
|
+
const cookies = [];
|
|
53
94
|
for (const [k, v] of res.headers) {
|
|
54
|
-
resHeaderRecord[k] = v;
|
|
55
95
|
if (k === "set-cookie") {
|
|
56
|
-
|
|
96
|
+
cookies.push(v);
|
|
57
97
|
} else {
|
|
58
|
-
|
|
98
|
+
resHeaderRecord[k] = v;
|
|
59
99
|
}
|
|
60
100
|
}
|
|
61
|
-
|
|
101
|
+
if (cookies.length > 0) {
|
|
102
|
+
resHeaderRecord["set-cookie"] = cookies;
|
|
103
|
+
}
|
|
62
104
|
if (res.body) {
|
|
63
105
|
try {
|
|
64
106
|
if (resHeaderRecord["transfer-encoding"] || resHeaderRecord["content-encoding"] || resHeaderRecord["content-length"] || // nginx buffering variant
|
|
65
|
-
regBuffer.test(resHeaderRecord["x-accel-buffering"]) || !regContentType.test(resHeaderRecord["content-type"])) {
|
|
66
|
-
|
|
107
|
+
resHeaderRecord["x-accel-buffering"] && regBuffer.test(resHeaderRecord["x-accel-buffering"]) || !regContentType.test(resHeaderRecord["content-type"])) {
|
|
108
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
109
|
+
await writeFromReadableStream(res.body, outgoing);
|
|
67
110
|
} else {
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
outgoing.
|
|
111
|
+
const buffer = await res.arrayBuffer();
|
|
112
|
+
resHeaderRecord["content-length"] = buffer.byteLength;
|
|
113
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
114
|
+
outgoing.end(new Uint8Array(buffer));
|
|
71
115
|
}
|
|
72
116
|
} catch (e) {
|
|
73
117
|
const err = e instanceof Error ? e : new Error("unknown error", { cause: e });
|
|
@@ -79,6 +123,7 @@ var getRequestListener = (fetchCallback) => {
|
|
|
79
123
|
}
|
|
80
124
|
}
|
|
81
125
|
} else {
|
|
126
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
82
127
|
outgoing.end();
|
|
83
128
|
}
|
|
84
129
|
};
|