elit 3.6.6 → 3.6.7
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/Cargo.lock +1 -1
- package/Cargo.toml +1 -1
- package/dist/build.cjs +421 -331
- package/dist/build.d.ts +1 -19
- package/dist/build.js +420 -330
- package/dist/build.mjs +420 -330
- package/dist/chokidar.cjs +219 -182
- package/dist/chokidar.d.ts +25 -10
- package/dist/chokidar.js +217 -182
- package/dist/chokidar.mjs +218 -183
- package/dist/cli.cjs +22439 -21563
- package/dist/cli.d.ts +19 -37
- package/dist/cli.mjs +24113 -23252
- package/dist/config.cjs +357 -350
- package/dist/config.d.ts +17 -245
- package/dist/config.js +520 -515
- package/dist/config.mjs +346 -341
- package/dist/contracts-BeW9k0yZ.d.ts +54 -0
- package/dist/contracts-D7KIS-TK.d.ts +36 -0
- package/dist/coverage.cjs +448 -485
- package/dist/coverage.d.ts +13 -62
- package/dist/coverage.js +447 -484
- package/dist/coverage.mjs +447 -484
- package/dist/database.cjs +819 -828
- package/dist/database.d.ts +8 -24
- package/dist/database.js +818 -829
- package/dist/database.mjs +818 -829
- package/dist/desktop-auto-render.cjs +1700 -1523
- package/dist/desktop-auto-render.d.ts +4 -12
- package/dist/desktop-auto-render.js +1695 -1518
- package/dist/desktop-auto-render.mjs +1696 -1519
- package/dist/desktop.cjs +3 -1
- package/dist/desktop.d.ts +4 -1
- package/dist/desktop.js +1 -1
- package/dist/desktop.mjs +1 -1
- package/dist/dev-build.cjs +830 -0
- package/dist/dev-build.d.ts +53 -0
- package/dist/dev-build.js +3318 -0
- package/dist/dev-build.mjs +797 -0
- package/dist/dom.cjs +717 -591
- package/dist/dom.d.ts +2 -17
- package/dist/dom.js +714 -588
- package/dist/dom.mjs +716 -590
- package/dist/el.cjs +62 -52
- package/dist/el.d.ts +5 -12
- package/dist/el.js +60 -52
- package/dist/el.mjs +60 -52
- package/dist/fs.cjs +72 -63
- package/dist/fs.d.ts +22 -19
- package/dist/fs.js +71 -62
- package/dist/fs.mjs +71 -62
- package/dist/hmr.cjs +40 -14
- package/dist/hmr.d.ts +11 -23
- package/dist/hmr.js +38 -14
- package/dist/hmr.mjs +38 -14
- package/dist/http.cjs +251 -99
- package/dist/http.d.ts +38 -104
- package/dist/http.js +249 -99
- package/dist/http.mjs +249 -99
- package/dist/https.cjs +524 -228
- package/dist/https.d.ts +44 -36
- package/dist/https.js +520 -226
- package/dist/https.mjs +522 -228
- package/dist/index.cjs +7502 -7691
- package/dist/index.d.ts +6 -3
- package/dist/index.js +7486 -7677
- package/dist/index.mjs +7497 -7687
- package/dist/mime-types.cjs +10 -4
- package/dist/mime-types.d.ts +8 -11
- package/dist/mime-types.js +9 -3
- package/dist/mime-types.mjs +9 -3
- package/dist/native.cjs +8616 -8870
- package/dist/native.d.ts +7 -10
- package/dist/native.js +8682 -8936
- package/dist/native.mjs +8615 -8869
- package/dist/path.cjs +83 -77
- package/dist/path.d.ts +29 -29
- package/dist/path.js +82 -76
- package/dist/path.mjs +82 -76
- package/dist/pm.cjs +3300 -0
- package/dist/pm.d.ts +256 -0
- package/dist/pm.js +5638 -0
- package/dist/pm.mjs +3196 -0
- package/dist/preview-build.cjs +712 -0
- package/dist/preview-build.d.ts +59 -0
- package/dist/preview-build.js +3194 -0
- package/dist/preview-build.mjs +676 -0
- package/dist/render-context.cjs +13 -2
- package/dist/render-context.d.ts +9 -34
- package/dist/render-context.js +11 -2
- package/dist/render-context.mjs +11 -2
- package/dist/router.cjs +787 -646
- package/dist/router.d.ts +8 -14
- package/dist/router.js +786 -645
- package/dist/router.mjs +786 -645
- package/dist/runtime.cjs +1 -1
- package/dist/runtime.js +1 -1
- package/dist/runtime.mjs +1 -1
- package/dist/server.cjs +3254 -2684
- package/dist/server.d.ts +47 -5
- package/dist/server.js +3427 -2859
- package/dist/server.mjs +3397 -2829
- package/dist/smtp-server.cjs +16 -3
- package/dist/smtp-server.d.ts +12 -26
- package/dist/smtp-server.js +18 -5
- package/dist/smtp-server.mjs +16 -3
- package/dist/state-DvEkDehk.d.ts +195 -0
- package/dist/state.cjs +768 -659
- package/dist/state.d.ts +11 -71
- package/dist/state.js +760 -651
- package/dist/state.mjs +767 -658
- package/dist/style.cjs +1011 -968
- package/dist/style.d.ts +13 -127
- package/dist/style.js +1009 -970
- package/dist/style.mjs +1011 -971
- package/dist/test-reporter.cjs +332 -316
- package/dist/test-reporter.d.ts +28 -33
- package/dist/test-reporter.js +328 -312
- package/dist/test-reporter.mjs +328 -312
- package/dist/test-runtime.cjs +927 -968
- package/dist/test-runtime.d.ts +24 -99
- package/dist/test-runtime.js +922 -965
- package/dist/test-runtime.mjs +922 -965
- package/dist/test.cjs +4428 -4273
- package/dist/test.d.ts +2 -8
- package/dist/test.js +4307 -4154
- package/dist/test.mjs +4419 -4267
- package/dist/types-BONVzPtp.d.ts +59 -0
- package/dist/types-BR4wMiVx.d.ts +32 -0
- package/dist/types-C4gKykuG.d.ts +23 -0
- package/dist/types-CIhpN1-K.d.ts +64 -0
- package/dist/types-Ckj8md_j.d.ts +84 -0
- package/dist/types-CpjQTAkX.d.ts +24 -0
- package/dist/types-D0LjrYjS.d.ts +14 -0
- package/dist/types-DAisuVr5.d.ts +75 -0
- package/dist/types-tJn88E1N.d.ts +242 -0
- package/dist/types.d.ts +50 -237
- package/dist/universal.cjs +1 -1
- package/dist/universal.d.ts +1 -7
- package/dist/universal.js +1 -1
- package/dist/universal.mjs +1 -1
- package/dist/websocket-XfyK23zD.d.ts +119 -0
- package/dist/ws.cjs +129 -108
- package/dist/ws.d.ts +21 -131
- package/dist/ws.js +128 -109
- package/dist/ws.mjs +128 -109
- package/dist/wss.cjs +757 -479
- package/dist/wss.d.ts +31 -28
- package/dist/wss.js +755 -479
- package/dist/wss.mjs +758 -482
- package/package.json +8 -1
- package/vendor/epaint-0.31.1/src/image.rs +418 -0
- package/dist/server-uMQvZAll.d.ts +0 -458
package/dist/wss.js
CHANGED
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
};
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
29
|
|
|
30
|
-
// src/runtime.ts
|
|
30
|
+
// src/shares/runtime.ts
|
|
31
31
|
var runtime, isNode, isBun, isDeno;
|
|
32
32
|
var init_runtime = __esm({
|
|
33
|
-
"src/runtime.ts"() {
|
|
33
|
+
"src/shares/runtime.ts"() {
|
|
34
34
|
"use strict";
|
|
35
35
|
runtime = (() => {
|
|
36
36
|
if (typeof Deno !== "undefined") return "deno";
|
|
@@ -43,25 +43,78 @@
|
|
|
43
43
|
}
|
|
44
44
|
});
|
|
45
45
|
|
|
46
|
-
// src/http.ts
|
|
47
|
-
|
|
48
|
-
__export(http_exports, {
|
|
49
|
-
Agent: () => Agent,
|
|
50
|
-
ClientRequest: () => ClientRequest,
|
|
51
|
-
IncomingMessage: () => IncomingMessage,
|
|
52
|
-
METHODS: () => METHODS,
|
|
53
|
-
STATUS_CODES: () => STATUS_CODES,
|
|
54
|
-
Server: () => Server,
|
|
55
|
-
ServerResponse: () => ServerResponse,
|
|
56
|
-
createServer: () => createServer,
|
|
57
|
-
default: () => http_default,
|
|
58
|
-
get: () => get,
|
|
59
|
-
getRuntime: () => getRuntime,
|
|
60
|
-
request: () => request
|
|
61
|
-
});
|
|
62
|
-
function queueCallback(callback) {
|
|
46
|
+
// src/server/http/utils.ts
|
|
47
|
+
function queueCallback2(callback) {
|
|
63
48
|
if (callback) queueMicrotask(callback);
|
|
64
49
|
}
|
|
50
|
+
function getRequestPath2(url) {
|
|
51
|
+
if (!url) return "";
|
|
52
|
+
try {
|
|
53
|
+
const urlObj = new URL(url);
|
|
54
|
+
return urlObj.pathname + urlObj.search;
|
|
55
|
+
} catch {
|
|
56
|
+
return url;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function headersToRecord(headers) {
|
|
60
|
+
const result = /* @__PURE__ */ Object.create(null);
|
|
61
|
+
headers.forEach((value, key) => {
|
|
62
|
+
result[key] = value;
|
|
63
|
+
});
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
function headersToRawHeaders(headers) {
|
|
67
|
+
const rawHeaders = [];
|
|
68
|
+
headers.forEach((value, key) => {
|
|
69
|
+
rawHeaders.push(key, value);
|
|
70
|
+
});
|
|
71
|
+
return rawHeaders;
|
|
72
|
+
}
|
|
73
|
+
function normalizeRequestBodyChunk(chunk, encoding = "utf8") {
|
|
74
|
+
if (typeof chunk === "string") {
|
|
75
|
+
if (encoding !== "utf8" && typeof Buffer !== "undefined") {
|
|
76
|
+
return Buffer.from(chunk, encoding);
|
|
77
|
+
}
|
|
78
|
+
return chunk;
|
|
79
|
+
}
|
|
80
|
+
if (chunk instanceof Uint8Array) {
|
|
81
|
+
return chunk;
|
|
82
|
+
}
|
|
83
|
+
if (chunk instanceof ArrayBuffer) {
|
|
84
|
+
return new Uint8Array(chunk);
|
|
85
|
+
}
|
|
86
|
+
if (ArrayBuffer.isView(chunk)) {
|
|
87
|
+
return new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength);
|
|
88
|
+
}
|
|
89
|
+
return new TextEncoder().encode(String(chunk));
|
|
90
|
+
}
|
|
91
|
+
function buildRequestBody(chunks) {
|
|
92
|
+
if (chunks.length === 0) {
|
|
93
|
+
return void 0;
|
|
94
|
+
}
|
|
95
|
+
if (chunks.length === 1) {
|
|
96
|
+
return chunks[0];
|
|
97
|
+
}
|
|
98
|
+
if (chunks.every((chunk) => typeof chunk === "string")) {
|
|
99
|
+
return chunks.join("");
|
|
100
|
+
}
|
|
101
|
+
const encoder = new TextEncoder();
|
|
102
|
+
const bodyParts = chunks.map((chunk) => typeof chunk === "string" ? encoder.encode(chunk) : chunk);
|
|
103
|
+
const totalLength = bodyParts.reduce((sum, part) => sum + part.byteLength, 0);
|
|
104
|
+
const body = new Uint8Array(totalLength);
|
|
105
|
+
let offset = 0;
|
|
106
|
+
for (const part of bodyParts) {
|
|
107
|
+
body.set(part, offset);
|
|
108
|
+
offset += part.byteLength;
|
|
109
|
+
}
|
|
110
|
+
return body;
|
|
111
|
+
}
|
|
112
|
+
function isFetchResponse(value) {
|
|
113
|
+
return typeof value?.status === "number" && typeof value?.statusText === "string" && typeof value?.headers?.forEach === "function";
|
|
114
|
+
}
|
|
115
|
+
function isNodeIncomingMessage(value) {
|
|
116
|
+
return typeof value?.on === "function" && typeof value?.headers === "object" && (typeof value?.httpVersion === "string" || value?.socket !== void 0);
|
|
117
|
+
}
|
|
65
118
|
function headersToInit(headers) {
|
|
66
119
|
const result = {};
|
|
67
120
|
for (const key in headers) {
|
|
@@ -79,76 +132,110 @@
|
|
|
79
132
|
function emitListeningWithCallback(server, callback) {
|
|
80
133
|
server._listening = true;
|
|
81
134
|
server.emit("listening");
|
|
82
|
-
|
|
135
|
+
queueCallback2(callback);
|
|
83
136
|
}
|
|
84
137
|
function closeAndEmit(server, callback) {
|
|
85
138
|
server._listening = false;
|
|
86
139
|
server.emit("close");
|
|
87
140
|
if (callback) queueMicrotask(() => callback());
|
|
88
141
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}, (res) => {
|
|
104
|
-
const incomingMessage = new IncomingMessage(res);
|
|
105
|
-
if (callback) callback(incomingMessage);
|
|
106
|
-
req.emit("response", incomingMessage);
|
|
107
|
-
});
|
|
108
|
-
nodeReq.on("error", (error) => req.emit("error", error));
|
|
109
|
-
nodeReq.end();
|
|
110
|
-
} else {
|
|
111
|
-
queueMicrotask(async () => {
|
|
112
|
-
try {
|
|
113
|
-
const response = await fetch(urlString, {
|
|
114
|
-
method: options?.method || "GET",
|
|
115
|
-
headers: options?.headers,
|
|
116
|
-
signal: options?.signal
|
|
117
|
-
});
|
|
118
|
-
const fetchRequest = new Request(urlString);
|
|
119
|
-
const incomingMessage = new IncomingMessage(fetchRequest);
|
|
120
|
-
incomingMessage.statusCode = response.status;
|
|
121
|
-
incomingMessage.statusMessage = response.statusText;
|
|
122
|
-
if (callback) callback(incomingMessage);
|
|
123
|
-
req.emit("response", incomingMessage);
|
|
124
|
-
} catch (error) {
|
|
125
|
-
req.emit("error", error);
|
|
142
|
+
var init_utils = __esm({
|
|
143
|
+
"src/server/http/utils.ts"() {
|
|
144
|
+
"use strict";
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
// src/server/http/agent.ts
|
|
149
|
+
var Agent;
|
|
150
|
+
var init_agent = __esm({
|
|
151
|
+
"src/server/http/agent.ts"() {
|
|
152
|
+
"use strict";
|
|
153
|
+
Agent = class {
|
|
154
|
+
constructor(options) {
|
|
155
|
+
this.options = options;
|
|
126
156
|
}
|
|
127
|
-
}
|
|
157
|
+
};
|
|
128
158
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
return runtime;
|
|
136
|
-
}
|
|
137
|
-
var import_node_events, http, https, METHODS, STATUS_CODES, IncomingMessage, ServerResponse, Server, ClientRequest, Agent, http_default;
|
|
138
|
-
var init_http = __esm({
|
|
139
|
-
"src/http.ts"() {
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
// src/server/http/client-request.ts
|
|
162
|
+
var import_node_events2, ClientRequest;
|
|
163
|
+
var init_client_request = __esm({
|
|
164
|
+
"src/server/http/client-request.ts"() {
|
|
140
165
|
"use strict";
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
http = __require("http");
|
|
149
|
-
https = __require("https");
|
|
166
|
+
import_node_events2 = __require("events");
|
|
167
|
+
init_utils();
|
|
168
|
+
ClientRequest = class extends import_node_events2.EventEmitter {
|
|
169
|
+
constructor(_url, _options = {}) {
|
|
170
|
+
super();
|
|
171
|
+
this._bodyChunks = [];
|
|
172
|
+
this._ended = false;
|
|
150
173
|
}
|
|
151
|
-
|
|
174
|
+
_setNativeRequest(nativeRequest) {
|
|
175
|
+
this._nativeRequest = nativeRequest;
|
|
176
|
+
}
|
|
177
|
+
_setExecutor(executor) {
|
|
178
|
+
this._executor = executor;
|
|
179
|
+
}
|
|
180
|
+
write(chunk, encoding, callback) {
|
|
181
|
+
if (this._ended) {
|
|
182
|
+
throw new Error("Cannot write after end");
|
|
183
|
+
}
|
|
184
|
+
if (typeof encoding === "function") {
|
|
185
|
+
callback = encoding;
|
|
186
|
+
encoding = void 0;
|
|
187
|
+
}
|
|
188
|
+
if (this._nativeRequest) {
|
|
189
|
+
const actualEncoding2 = typeof encoding === "string" ? encoding : void 0;
|
|
190
|
+
return this._nativeRequest.write(chunk, actualEncoding2, callback);
|
|
191
|
+
}
|
|
192
|
+
const actualEncoding = typeof encoding === "string" ? encoding : "utf8";
|
|
193
|
+
this._bodyChunks.push(normalizeRequestBodyChunk(chunk, actualEncoding));
|
|
194
|
+
queueCallback2(callback);
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
end(chunk, encoding, callback) {
|
|
198
|
+
if (typeof chunk === "function") {
|
|
199
|
+
callback = chunk;
|
|
200
|
+
chunk = void 0;
|
|
201
|
+
encoding = void 0;
|
|
202
|
+
} else if (typeof encoding === "function") {
|
|
203
|
+
callback = encoding;
|
|
204
|
+
encoding = void 0;
|
|
205
|
+
}
|
|
206
|
+
if (this._ended) {
|
|
207
|
+
queueCallback2(callback);
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
this._ended = true;
|
|
211
|
+
if (this._nativeRequest) {
|
|
212
|
+
const actualEncoding = typeof encoding === "string" ? encoding : void 0;
|
|
213
|
+
if (chunk !== void 0) {
|
|
214
|
+
this._nativeRequest.end(chunk, actualEncoding, callback);
|
|
215
|
+
} else {
|
|
216
|
+
this._nativeRequest.end(callback);
|
|
217
|
+
}
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
if (chunk !== void 0) {
|
|
221
|
+
this._bodyChunks.push(normalizeRequestBodyChunk(chunk, typeof encoding === "string" ? encoding : "utf8"));
|
|
222
|
+
}
|
|
223
|
+
const executor = this._executor;
|
|
224
|
+
const body = buildRequestBody(this._bodyChunks);
|
|
225
|
+
if (executor) {
|
|
226
|
+
Promise.resolve().then(() => executor(body)).catch((error) => this.emit("error", error));
|
|
227
|
+
}
|
|
228
|
+
queueCallback2(callback);
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
// src/server/http/constants.ts
|
|
235
|
+
var METHODS, STATUS_CODES;
|
|
236
|
+
var init_constants = __esm({
|
|
237
|
+
"src/server/http/constants.ts"() {
|
|
238
|
+
"use strict";
|
|
152
239
|
METHODS = [
|
|
153
240
|
"GET",
|
|
154
241
|
"POST",
|
|
@@ -216,13 +303,30 @@
|
|
|
216
303
|
510: "Not Extended",
|
|
217
304
|
511: "Network Authentication Required"
|
|
218
305
|
};
|
|
219
|
-
|
|
220
|
-
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
// src/server/http/incoming-message.ts
|
|
310
|
+
var import_node_events3, IncomingMessage;
|
|
311
|
+
var init_incoming_message = __esm({
|
|
312
|
+
"src/server/http/incoming-message.ts"() {
|
|
313
|
+
"use strict";
|
|
314
|
+
import_node_events3 = __require("events");
|
|
315
|
+
init_utils();
|
|
316
|
+
IncomingMessage = class extends import_node_events3.EventEmitter {
|
|
317
|
+
constructor(req, requestMethod) {
|
|
221
318
|
super();
|
|
222
319
|
this.httpVersion = "1.1";
|
|
223
320
|
this.rawHeaders = [];
|
|
224
321
|
this._req = req;
|
|
225
|
-
if (
|
|
322
|
+
if (isFetchResponse(req)) {
|
|
323
|
+
this.method = requestMethod || "GET";
|
|
324
|
+
this.url = getRequestPath2(req.url);
|
|
325
|
+
this.headers = headersToRecord(req.headers);
|
|
326
|
+
this.statusCode = req.status;
|
|
327
|
+
this.statusMessage = req.statusText;
|
|
328
|
+
this.rawHeaders = headersToRawHeaders(req.headers);
|
|
329
|
+
} else if (isNodeIncomingMessage(req)) {
|
|
226
330
|
this.method = req.method;
|
|
227
331
|
this.url = req.url;
|
|
228
332
|
this.headers = req.headers;
|
|
@@ -233,14 +337,13 @@
|
|
|
233
337
|
this.socket = req.socket;
|
|
234
338
|
} else {
|
|
235
339
|
this.method = req.method;
|
|
236
|
-
|
|
237
|
-
this.
|
|
238
|
-
this.
|
|
239
|
-
this.rawHeaders = [];
|
|
340
|
+
this.url = getRequestPath2(req.url);
|
|
341
|
+
this.headers = headersToRecord(req.headers);
|
|
342
|
+
this.rawHeaders = headersToRawHeaders(req.headers);
|
|
240
343
|
}
|
|
241
344
|
}
|
|
242
345
|
async text() {
|
|
243
|
-
if (
|
|
346
|
+
if (isNodeIncomingMessage(this._req)) {
|
|
244
347
|
return new Promise((resolve, reject) => {
|
|
245
348
|
const chunks = [];
|
|
246
349
|
this._req.on("data", (chunk) => chunks.push(chunk));
|
|
@@ -251,14 +354,92 @@
|
|
|
251
354
|
return this._req.text();
|
|
252
355
|
}
|
|
253
356
|
async json() {
|
|
254
|
-
if (
|
|
357
|
+
if (isNodeIncomingMessage(this._req)) {
|
|
255
358
|
const text = await this.text();
|
|
256
359
|
return JSON.parse(text);
|
|
257
360
|
}
|
|
258
361
|
return this._req.json();
|
|
259
362
|
}
|
|
260
363
|
};
|
|
261
|
-
|
|
364
|
+
}
|
|
365
|
+
});
|
|
366
|
+
|
|
367
|
+
// src/server/http/node-modules.ts
|
|
368
|
+
var http, https;
|
|
369
|
+
var init_node_modules = __esm({
|
|
370
|
+
"src/server/http/node-modules.ts"() {
|
|
371
|
+
"use strict";
|
|
372
|
+
init_runtime();
|
|
373
|
+
if (isNode && typeof process !== "undefined") {
|
|
374
|
+
try {
|
|
375
|
+
http = __require("http");
|
|
376
|
+
https = __require("https");
|
|
377
|
+
} catch {
|
|
378
|
+
http = __require("http");
|
|
379
|
+
https = __require("https");
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
});
|
|
384
|
+
|
|
385
|
+
// src/server/http/request-api.ts
|
|
386
|
+
function request(url, options, callback) {
|
|
387
|
+
const urlString = typeof url === "string" ? url : url.toString();
|
|
388
|
+
const req = new ClientRequest(urlString, options);
|
|
389
|
+
if (isNode) {
|
|
390
|
+
const urlObj = new URL(urlString);
|
|
391
|
+
const client = urlObj.protocol === "https:" ? https : http;
|
|
392
|
+
const nodeReq = client.request(urlString, {
|
|
393
|
+
method: options?.method || "GET",
|
|
394
|
+
headers: options?.headers,
|
|
395
|
+
timeout: options?.timeout,
|
|
396
|
+
signal: options?.signal
|
|
397
|
+
}, (res) => {
|
|
398
|
+
const incomingMessage = new IncomingMessage(res);
|
|
399
|
+
if (callback) callback(incomingMessage);
|
|
400
|
+
req.emit("response", incomingMessage);
|
|
401
|
+
});
|
|
402
|
+
req._setNativeRequest(nodeReq);
|
|
403
|
+
nodeReq.on("error", (error) => req.emit("error", error));
|
|
404
|
+
} else {
|
|
405
|
+
req._setExecutor(async (body) => {
|
|
406
|
+
const response = await fetch(urlString, {
|
|
407
|
+
method: options?.method || "GET",
|
|
408
|
+
headers: options?.headers,
|
|
409
|
+
body,
|
|
410
|
+
signal: options?.signal
|
|
411
|
+
});
|
|
412
|
+
const incomingMessage = new IncomingMessage(response, options?.method || "GET");
|
|
413
|
+
if (callback) callback(incomingMessage);
|
|
414
|
+
req.emit("response", incomingMessage);
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
return req;
|
|
418
|
+
}
|
|
419
|
+
function get(url, options, callback) {
|
|
420
|
+
const req = request(url, { ...options, method: "GET" }, callback);
|
|
421
|
+
req.end();
|
|
422
|
+
return req;
|
|
423
|
+
}
|
|
424
|
+
var init_request_api = __esm({
|
|
425
|
+
"src/server/http/request-api.ts"() {
|
|
426
|
+
"use strict";
|
|
427
|
+
init_runtime();
|
|
428
|
+
init_client_request();
|
|
429
|
+
init_incoming_message();
|
|
430
|
+
init_node_modules();
|
|
431
|
+
}
|
|
432
|
+
});
|
|
433
|
+
|
|
434
|
+
// src/server/http/response.ts
|
|
435
|
+
var import_node_events4, ServerResponse;
|
|
436
|
+
var init_response = __esm({
|
|
437
|
+
"src/server/http/response.ts"() {
|
|
438
|
+
"use strict";
|
|
439
|
+
import_node_events4 = __require("events");
|
|
440
|
+
init_runtime();
|
|
441
|
+
init_utils();
|
|
442
|
+
ServerResponse = class extends import_node_events4.EventEmitter {
|
|
262
443
|
constructor(_req, nodeRes) {
|
|
263
444
|
super();
|
|
264
445
|
this.statusCode = 200;
|
|
@@ -351,7 +532,7 @@
|
|
|
351
532
|
return this._nodeRes.write(chunk, encoding, callback);
|
|
352
533
|
}
|
|
353
534
|
this._body += chunk;
|
|
354
|
-
|
|
535
|
+
queueCallback2(callback);
|
|
355
536
|
return true;
|
|
356
537
|
}
|
|
357
538
|
end(chunk, encoding, callback) {
|
|
@@ -384,14 +565,13 @@
|
|
|
384
565
|
if (this._resolve) {
|
|
385
566
|
this._resolve(response);
|
|
386
567
|
}
|
|
387
|
-
|
|
568
|
+
queueCallback2(callback);
|
|
388
569
|
}
|
|
389
570
|
return this;
|
|
390
571
|
}
|
|
391
572
|
_setResolver(resolve) {
|
|
392
573
|
this._resolve = resolve;
|
|
393
574
|
}
|
|
394
|
-
// Express.js-like methods
|
|
395
575
|
json(data, statusCode = 200) {
|
|
396
576
|
if (!this.headersSent) {
|
|
397
577
|
this.setHeader("Content-Type", "application/json");
|
|
@@ -415,7 +595,35 @@
|
|
|
415
595
|
return this;
|
|
416
596
|
}
|
|
417
597
|
};
|
|
418
|
-
|
|
598
|
+
}
|
|
599
|
+
});
|
|
600
|
+
|
|
601
|
+
// src/server/http/runtime.ts
|
|
602
|
+
function getRuntime3() {
|
|
603
|
+
return runtime;
|
|
604
|
+
}
|
|
605
|
+
var init_runtime2 = __esm({
|
|
606
|
+
"src/server/http/runtime.ts"() {
|
|
607
|
+
"use strict";
|
|
608
|
+
init_runtime();
|
|
609
|
+
}
|
|
610
|
+
});
|
|
611
|
+
|
|
612
|
+
// src/server/http/server-runtime.ts
|
|
613
|
+
function createServer(optionsOrListener, requestListener) {
|
|
614
|
+
return new Server(typeof optionsOrListener === "function" ? optionsOrListener : requestListener);
|
|
615
|
+
}
|
|
616
|
+
var import_node_events5, Server;
|
|
617
|
+
var init_server_runtime = __esm({
|
|
618
|
+
"src/server/http/server-runtime.ts"() {
|
|
619
|
+
"use strict";
|
|
620
|
+
import_node_events5 = __require("events");
|
|
621
|
+
init_runtime();
|
|
622
|
+
init_node_modules();
|
|
623
|
+
init_incoming_message();
|
|
624
|
+
init_response();
|
|
625
|
+
init_utils();
|
|
626
|
+
Server = class extends import_node_events5.EventEmitter {
|
|
419
627
|
constructor(requestListener) {
|
|
420
628
|
super();
|
|
421
629
|
this._bunWebSocketServers = /* @__PURE__ */ new Set();
|
|
@@ -490,6 +698,8 @@
|
|
|
490
698
|
const urlObj = new URL(req.url);
|
|
491
699
|
const pathname = urlObj.pathname;
|
|
492
700
|
const requestUrl = urlObj.pathname + urlObj.search;
|
|
701
|
+
const incomingHeaders = headersToRecord(req.headers);
|
|
702
|
+
const rawHeaders = headersToRawHeaders(req.headers);
|
|
493
703
|
const upgradeHeader = req.headers.get("upgrade");
|
|
494
704
|
if (upgradeHeader && upgradeHeader.toLowerCase() === "websocket") {
|
|
495
705
|
const matchingWebSocketServer = Array.from(this._bunWebSocketServers).find((wsServer) => {
|
|
@@ -526,9 +736,9 @@
|
|
|
526
736
|
const incomingMessage = {
|
|
527
737
|
method: req.method,
|
|
528
738
|
url: requestUrl,
|
|
529
|
-
headers:
|
|
739
|
+
headers: incomingHeaders,
|
|
530
740
|
httpVersion: "1.1",
|
|
531
|
-
rawHeaders
|
|
741
|
+
rawHeaders,
|
|
532
742
|
_req: req,
|
|
533
743
|
text: () => req.text(),
|
|
534
744
|
json: () => req.json()
|
|
@@ -587,6 +797,8 @@
|
|
|
587
797
|
};
|
|
588
798
|
if (self.requestListener) {
|
|
589
799
|
self.requestListener(incomingMessage, serverResponse);
|
|
800
|
+
} else {
|
|
801
|
+
self.emit("request", incomingMessage, serverResponse);
|
|
590
802
|
}
|
|
591
803
|
if (responseReady) {
|
|
592
804
|
return new Response(body, {
|
|
@@ -661,9 +873,11 @@
|
|
|
661
873
|
return createAddress(0, addr, "unix");
|
|
662
874
|
}
|
|
663
875
|
return addr;
|
|
664
|
-
}
|
|
876
|
+
}
|
|
877
|
+
if (isBun) {
|
|
665
878
|
return createAddress(this.nativeServer.port, this.nativeServer.hostname);
|
|
666
|
-
}
|
|
879
|
+
}
|
|
880
|
+
if (isDeno) {
|
|
667
881
|
const addr = this.nativeServer.addr;
|
|
668
882
|
return createAddress(addr.port, addr.hostname);
|
|
669
883
|
}
|
|
@@ -673,22 +887,45 @@
|
|
|
673
887
|
return this._listening;
|
|
674
888
|
}
|
|
675
889
|
};
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
890
|
+
}
|
|
891
|
+
});
|
|
892
|
+
|
|
893
|
+
// src/server/http/index.ts
|
|
894
|
+
var http_exports = {};
|
|
895
|
+
__export(http_exports, {
|
|
896
|
+
Agent: () => Agent,
|
|
897
|
+
ClientRequest: () => ClientRequest,
|
|
898
|
+
IncomingMessage: () => IncomingMessage,
|
|
899
|
+
METHODS: () => METHODS,
|
|
900
|
+
STATUS_CODES: () => STATUS_CODES,
|
|
901
|
+
Server: () => Server,
|
|
902
|
+
ServerResponse: () => ServerResponse,
|
|
903
|
+
createServer: () => createServer,
|
|
904
|
+
default: () => http_default,
|
|
905
|
+
get: () => get,
|
|
906
|
+
getRuntime: () => getRuntime3,
|
|
907
|
+
request: () => request
|
|
908
|
+
});
|
|
909
|
+
var http_default;
|
|
910
|
+
var init_http = __esm({
|
|
911
|
+
"src/server/http/index.ts"() {
|
|
912
|
+
"use strict";
|
|
913
|
+
init_agent();
|
|
914
|
+
init_client_request();
|
|
915
|
+
init_constants();
|
|
916
|
+
init_incoming_message();
|
|
917
|
+
init_request_api();
|
|
918
|
+
init_response();
|
|
919
|
+
init_runtime2();
|
|
920
|
+
init_server_runtime();
|
|
921
|
+
init_agent();
|
|
922
|
+
init_client_request();
|
|
923
|
+
init_constants();
|
|
924
|
+
init_incoming_message();
|
|
925
|
+
init_request_api();
|
|
926
|
+
init_response();
|
|
927
|
+
init_runtime2();
|
|
928
|
+
init_server_runtime();
|
|
692
929
|
http_default = {
|
|
693
930
|
createServer,
|
|
694
931
|
request,
|
|
@@ -700,227 +937,44 @@
|
|
|
700
937
|
ClientRequest,
|
|
701
938
|
METHODS,
|
|
702
939
|
STATUS_CODES,
|
|
703
|
-
getRuntime
|
|
940
|
+
getRuntime: getRuntime3
|
|
704
941
|
};
|
|
705
942
|
}
|
|
706
943
|
});
|
|
707
944
|
|
|
708
|
-
// src/
|
|
709
|
-
var
|
|
945
|
+
// src/server/ws/constants.ts
|
|
946
|
+
var ReadyState = /* @__PURE__ */ ((ReadyState2) => {
|
|
947
|
+
ReadyState2[ReadyState2["CONNECTING"] = 0] = "CONNECTING";
|
|
948
|
+
ReadyState2[ReadyState2["OPEN"] = 1] = "OPEN";
|
|
949
|
+
ReadyState2[ReadyState2["CLOSING"] = 2] = "CLOSING";
|
|
950
|
+
ReadyState2[ReadyState2["CLOSED"] = 3] = "CLOSED";
|
|
951
|
+
return ReadyState2;
|
|
952
|
+
})(ReadyState || {});
|
|
953
|
+
var CLOSE_CODES = {
|
|
954
|
+
NORMAL: 1e3,
|
|
955
|
+
GOING_AWAY: 1001,
|
|
956
|
+
PROTOCOL_ERROR: 1002,
|
|
957
|
+
UNSUPPORTED_DATA: 1003,
|
|
958
|
+
NO_STATUS: 1005,
|
|
959
|
+
ABNORMAL: 1006,
|
|
960
|
+
INVALID_DATA: 1007,
|
|
961
|
+
POLICY_VIOLATION: 1008,
|
|
962
|
+
MESSAGE_TOO_BIG: 1009,
|
|
963
|
+
EXTENSION_REQUIRED: 1010,
|
|
964
|
+
INTERNAL_ERROR: 1011,
|
|
965
|
+
SERVICE_RESTART: 1012,
|
|
966
|
+
TRY_AGAIN_LATER: 1013,
|
|
967
|
+
BAD_GATEWAY: 1014,
|
|
968
|
+
TLS_HANDSHAKE_FAIL: 1015
|
|
969
|
+
};
|
|
710
970
|
|
|
711
|
-
// src/
|
|
712
|
-
var
|
|
971
|
+
// src/server/ws/server.ts
|
|
972
|
+
var import_events2 = __require("events");
|
|
713
973
|
init_runtime();
|
|
714
|
-
function queueCallback2(callback) {
|
|
715
|
-
if (callback) queueMicrotask(callback);
|
|
716
|
-
}
|
|
717
|
-
function createErrorResponse2() {
|
|
718
|
-
return new Response("Internal Server Error", { status: 500 });
|
|
719
|
-
}
|
|
720
|
-
function createAddress2(port, address, family = "IPv4") {
|
|
721
|
-
return { port, family, address };
|
|
722
|
-
}
|
|
723
|
-
function emitListeningWithCallback2(server, callback) {
|
|
724
|
-
server._listening = true;
|
|
725
|
-
server.emit("listening");
|
|
726
|
-
queueCallback2(callback);
|
|
727
|
-
}
|
|
728
|
-
function closeAndEmit2(server, callback) {
|
|
729
|
-
server._listening = false;
|
|
730
|
-
server.emit("close");
|
|
731
|
-
if (callback) queueMicrotask(() => callback());
|
|
732
|
-
}
|
|
733
|
-
function loadHttpClasses() {
|
|
734
|
-
const httpModule = (init_http(), __toCommonJS(http_exports));
|
|
735
|
-
return {
|
|
736
|
-
IncomingMessage: httpModule.IncomingMessage,
|
|
737
|
-
ServerResponse: httpModule.ServerResponse
|
|
738
|
-
};
|
|
739
|
-
}
|
|
740
|
-
var https2;
|
|
741
|
-
var Server2 = class extends import_events.EventEmitter {
|
|
742
|
-
constructor(options, requestListener) {
|
|
743
|
-
super();
|
|
744
|
-
this._listening = false;
|
|
745
|
-
this.options = options;
|
|
746
|
-
this.requestListener = requestListener;
|
|
747
|
-
}
|
|
748
|
-
listen(...args) {
|
|
749
|
-
let port = 3e3;
|
|
750
|
-
let hostname = "0.0.0.0";
|
|
751
|
-
let callback;
|
|
752
|
-
const firstArg = args[0];
|
|
753
|
-
if (typeof firstArg === "number") {
|
|
754
|
-
port = firstArg;
|
|
755
|
-
const secondArg = args[1];
|
|
756
|
-
if (typeof secondArg === "string") {
|
|
757
|
-
hostname = secondArg;
|
|
758
|
-
callback = args[2] || args[3];
|
|
759
|
-
} else if (typeof secondArg === "function") {
|
|
760
|
-
callback = secondArg;
|
|
761
|
-
}
|
|
762
|
-
} else if (firstArg && typeof firstArg === "object") {
|
|
763
|
-
port = firstArg.port || 3e3;
|
|
764
|
-
hostname = firstArg.hostname || "0.0.0.0";
|
|
765
|
-
callback = args[1];
|
|
766
|
-
}
|
|
767
|
-
const self = this;
|
|
768
|
-
if (isNode) {
|
|
769
|
-
const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
|
|
770
|
-
if (!https2) https2 = __require("https");
|
|
771
|
-
this.nativeServer = https2.createServer(this.options, (req, res) => {
|
|
772
|
-
const incomingMessage = new IncomingMessage2(req);
|
|
773
|
-
const serverResponse = new ServerResponse2(incomingMessage, res);
|
|
774
|
-
if (self.requestListener) {
|
|
775
|
-
self.requestListener(incomingMessage, serverResponse);
|
|
776
|
-
} else {
|
|
777
|
-
self.emit("request", incomingMessage, serverResponse);
|
|
778
|
-
}
|
|
779
|
-
});
|
|
780
|
-
this.nativeServer.listen(port, hostname, () => {
|
|
781
|
-
this._listening = true;
|
|
782
|
-
this.emit("listening");
|
|
783
|
-
if (callback) callback();
|
|
784
|
-
});
|
|
785
|
-
this.nativeServer.on("error", (err) => this.emit("error", err));
|
|
786
|
-
this.nativeServer.on("close", () => {
|
|
787
|
-
this._listening = false;
|
|
788
|
-
this.emit("close");
|
|
789
|
-
});
|
|
790
|
-
} else if (isBun) {
|
|
791
|
-
const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
|
|
792
|
-
const tlsOptions = {
|
|
793
|
-
port,
|
|
794
|
-
hostname,
|
|
795
|
-
fetch: (req) => {
|
|
796
|
-
return new Promise((resolve) => {
|
|
797
|
-
const incomingMessage = new IncomingMessage2(req);
|
|
798
|
-
const serverResponse = new ServerResponse2();
|
|
799
|
-
serverResponse._setResolver(resolve);
|
|
800
|
-
if (self.requestListener) {
|
|
801
|
-
self.requestListener(incomingMessage, serverResponse);
|
|
802
|
-
} else {
|
|
803
|
-
self.emit("request", incomingMessage, serverResponse);
|
|
804
|
-
}
|
|
805
|
-
});
|
|
806
|
-
},
|
|
807
|
-
error: (error) => {
|
|
808
|
-
this.emit("error", error);
|
|
809
|
-
return createErrorResponse2();
|
|
810
|
-
}
|
|
811
|
-
};
|
|
812
|
-
if (this.options.key || this.options.cert) {
|
|
813
|
-
tlsOptions.tls = {
|
|
814
|
-
key: this.options.key,
|
|
815
|
-
cert: this.options.cert,
|
|
816
|
-
ca: this.options.ca,
|
|
817
|
-
passphrase: this.options.passphrase
|
|
818
|
-
};
|
|
819
|
-
} else if (this.options.tls) {
|
|
820
|
-
tlsOptions.tls = this.options.tls;
|
|
821
|
-
}
|
|
822
|
-
this.nativeServer = Bun.serve(tlsOptions);
|
|
823
|
-
emitListeningWithCallback2(this, callback);
|
|
824
|
-
} else if (isDeno) {
|
|
825
|
-
const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
|
|
826
|
-
const serveOptions = {
|
|
827
|
-
port,
|
|
828
|
-
hostname,
|
|
829
|
-
handler: (req) => {
|
|
830
|
-
return new Promise((resolve) => {
|
|
831
|
-
const incomingMessage = new IncomingMessage2(req);
|
|
832
|
-
const serverResponse = new ServerResponse2();
|
|
833
|
-
serverResponse._setResolver(resolve);
|
|
834
|
-
if (self.requestListener) {
|
|
835
|
-
self.requestListener(incomingMessage, serverResponse);
|
|
836
|
-
} else {
|
|
837
|
-
self.emit("request", incomingMessage, serverResponse);
|
|
838
|
-
}
|
|
839
|
-
});
|
|
840
|
-
},
|
|
841
|
-
onError: (error) => {
|
|
842
|
-
this.emit("error", error);
|
|
843
|
-
return createErrorResponse2();
|
|
844
|
-
}
|
|
845
|
-
};
|
|
846
|
-
if (this.options.key && this.options.cert) {
|
|
847
|
-
serveOptions.cert = this.options.cert;
|
|
848
|
-
serveOptions.key = this.options.key;
|
|
849
|
-
}
|
|
850
|
-
this.nativeServer = Deno.serve(serveOptions);
|
|
851
|
-
emitListeningWithCallback2(this, callback);
|
|
852
|
-
}
|
|
853
|
-
return this;
|
|
854
|
-
}
|
|
855
|
-
close(callback) {
|
|
856
|
-
if (!this.nativeServer) {
|
|
857
|
-
if (callback) queueMicrotask(() => callback());
|
|
858
|
-
return this;
|
|
859
|
-
}
|
|
860
|
-
if (isNode) {
|
|
861
|
-
this.nativeServer.close(callback);
|
|
862
|
-
} else if (isBun) {
|
|
863
|
-
this.nativeServer.stop();
|
|
864
|
-
closeAndEmit2(this, callback);
|
|
865
|
-
} else if (isDeno) {
|
|
866
|
-
this.nativeServer.shutdown();
|
|
867
|
-
closeAndEmit2(this, callback);
|
|
868
|
-
}
|
|
869
|
-
return this;
|
|
870
|
-
}
|
|
871
|
-
address() {
|
|
872
|
-
if (!this.nativeServer) return null;
|
|
873
|
-
if (isNode) {
|
|
874
|
-
const addr = this.nativeServer.address();
|
|
875
|
-
if (!addr) return null;
|
|
876
|
-
if (typeof addr === "string") {
|
|
877
|
-
return createAddress2(0, addr, "unix");
|
|
878
|
-
}
|
|
879
|
-
return addr;
|
|
880
|
-
} else if (isBun) {
|
|
881
|
-
return createAddress2(this.nativeServer.port, this.nativeServer.hostname);
|
|
882
|
-
} else if (isDeno) {
|
|
883
|
-
const addr = this.nativeServer.addr;
|
|
884
|
-
return createAddress2(addr.port, addr.hostname);
|
|
885
|
-
}
|
|
886
|
-
return null;
|
|
887
|
-
}
|
|
888
|
-
get listening() {
|
|
889
|
-
return this._listening;
|
|
890
|
-
}
|
|
891
|
-
};
|
|
892
|
-
function createServer2(options, requestListener) {
|
|
893
|
-
return new Server2(options, requestListener);
|
|
894
|
-
}
|
|
895
974
|
|
|
896
|
-
// src/ws.ts
|
|
897
|
-
var import_events2 = __require("events");
|
|
975
|
+
// src/server/ws/utils.ts
|
|
898
976
|
init_runtime();
|
|
899
|
-
|
|
900
|
-
ReadyState2[ReadyState2["CONNECTING"] = 0] = "CONNECTING";
|
|
901
|
-
ReadyState2[ReadyState2["OPEN"] = 1] = "OPEN";
|
|
902
|
-
ReadyState2[ReadyState2["CLOSING"] = 2] = "CLOSING";
|
|
903
|
-
ReadyState2[ReadyState2["CLOSED"] = 3] = "CLOSED";
|
|
904
|
-
return ReadyState2;
|
|
905
|
-
})(ReadyState || {});
|
|
906
|
-
var CLOSE_CODES = {
|
|
907
|
-
NORMAL: 1e3,
|
|
908
|
-
GOING_AWAY: 1001,
|
|
909
|
-
PROTOCOL_ERROR: 1002,
|
|
910
|
-
UNSUPPORTED_DATA: 1003,
|
|
911
|
-
NO_STATUS: 1005,
|
|
912
|
-
ABNORMAL: 1006,
|
|
913
|
-
INVALID_DATA: 1007,
|
|
914
|
-
POLICY_VIOLATION: 1008,
|
|
915
|
-
MESSAGE_TOO_BIG: 1009,
|
|
916
|
-
EXTENSION_REQUIRED: 1010,
|
|
917
|
-
INTERNAL_ERROR: 1011,
|
|
918
|
-
SERVICE_RESTART: 1012,
|
|
919
|
-
TRY_AGAIN_LATER: 1013,
|
|
920
|
-
BAD_GATEWAY: 1014,
|
|
921
|
-
TLS_HANDSHAKE_FAIL: 1015
|
|
922
|
-
};
|
|
923
|
-
function queueCallback3(callback, error) {
|
|
977
|
+
function queueCallback(callback, error) {
|
|
924
978
|
if (callback) {
|
|
925
979
|
queueMicrotask(() => callback(error));
|
|
926
980
|
}
|
|
@@ -935,7 +989,74 @@
|
|
|
935
989
|
const [pathname = "/"] = (url || "/").split("?");
|
|
936
990
|
return pathname || "/";
|
|
937
991
|
}
|
|
938
|
-
|
|
992
|
+
function isIgnorableConnectionError(error) {
|
|
993
|
+
const errorCode = error?.code;
|
|
994
|
+
return errorCode === "ECONNABORTED" || errorCode === "ECONNRESET" || errorCode === "EPIPE";
|
|
995
|
+
}
|
|
996
|
+
function coerceBunMessage(message) {
|
|
997
|
+
const isBinary = typeof message !== "string";
|
|
998
|
+
const payload = typeof message === "string" ? message : message instanceof ArrayBuffer ? Buffer.from(message) : ArrayBuffer.isView(message) ? Buffer.from(message.buffer, message.byteOffset, message.byteLength) : Buffer.from(String(message));
|
|
999
|
+
return { payload, isBinary };
|
|
1000
|
+
}
|
|
1001
|
+
function parseFrame(data) {
|
|
1002
|
+
if (data.length < 2) {
|
|
1003
|
+
return null;
|
|
1004
|
+
}
|
|
1005
|
+
const firstByte = data[0];
|
|
1006
|
+
const secondByte = data[1];
|
|
1007
|
+
const opcode = firstByte & 15;
|
|
1008
|
+
const isMasked = (secondByte & 128) === 128;
|
|
1009
|
+
let payloadLength = secondByte & 127;
|
|
1010
|
+
let offset = 2;
|
|
1011
|
+
if (payloadLength === 126) {
|
|
1012
|
+
payloadLength = data.readUInt16BE(2);
|
|
1013
|
+
offset = 4;
|
|
1014
|
+
} else if (payloadLength === 127) {
|
|
1015
|
+
payloadLength = Number(data.readBigUInt64BE(2));
|
|
1016
|
+
offset = 10;
|
|
1017
|
+
}
|
|
1018
|
+
let payload = data.subarray(offset);
|
|
1019
|
+
if (isMasked) {
|
|
1020
|
+
const maskKey = data.subarray(offset, offset + 4);
|
|
1021
|
+
payload = data.subarray(offset + 4, offset + 4 + payloadLength);
|
|
1022
|
+
for (let index = 0; index < payload.length; index += 1) {
|
|
1023
|
+
payload[index] ^= maskKey[index % 4];
|
|
1024
|
+
}
|
|
1025
|
+
}
|
|
1026
|
+
if (opcode === 1) {
|
|
1027
|
+
return payload.toString("utf8");
|
|
1028
|
+
}
|
|
1029
|
+
return null;
|
|
1030
|
+
}
|
|
1031
|
+
function createFrame(data) {
|
|
1032
|
+
const payload = typeof data === "string" ? Buffer.from(data) : data;
|
|
1033
|
+
const payloadLength = Buffer.isBuffer(payload) ? payload.length : 0;
|
|
1034
|
+
let frame;
|
|
1035
|
+
let offset = 2;
|
|
1036
|
+
if (payloadLength < 126) {
|
|
1037
|
+
frame = Buffer.allocUnsafe(2 + payloadLength);
|
|
1038
|
+
frame[1] = payloadLength;
|
|
1039
|
+
} else if (payloadLength < 65536) {
|
|
1040
|
+
frame = Buffer.allocUnsafe(4 + payloadLength);
|
|
1041
|
+
frame[1] = 126;
|
|
1042
|
+
frame.writeUInt16BE(payloadLength, 2);
|
|
1043
|
+
offset = 4;
|
|
1044
|
+
} else {
|
|
1045
|
+
frame = Buffer.allocUnsafe(10 + payloadLength);
|
|
1046
|
+
frame[1] = 127;
|
|
1047
|
+
frame.writeBigUInt64BE(BigInt(payloadLength), 2);
|
|
1048
|
+
offset = 10;
|
|
1049
|
+
}
|
|
1050
|
+
frame[0] = 129;
|
|
1051
|
+
if (Buffer.isBuffer(payload)) {
|
|
1052
|
+
payload.copy(frame, offset);
|
|
1053
|
+
}
|
|
1054
|
+
return frame;
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
// src/server/ws/websocket.ts
|
|
1058
|
+
var import_events = __require("events");
|
|
1059
|
+
var WebSocket = class extends import_events.EventEmitter {
|
|
939
1060
|
constructor(address, protocols, _options) {
|
|
940
1061
|
super();
|
|
941
1062
|
this.readyState = 0 /* CONNECTING */;
|
|
@@ -965,22 +1086,23 @@
|
|
|
965
1086
|
};
|
|
966
1087
|
}
|
|
967
1088
|
/**
|
|
968
|
-
* Send data through WebSocket
|
|
1089
|
+
* Send data through WebSocket.
|
|
969
1090
|
*/
|
|
970
1091
|
send(data, options, callback) {
|
|
971
1092
|
const cb = typeof options === "function" ? options : callback;
|
|
972
1093
|
if (this.readyState !== 1 /* OPEN */) {
|
|
973
|
-
|
|
1094
|
+
queueCallback(cb, new Error("WebSocket is not open"));
|
|
1095
|
+
return;
|
|
974
1096
|
}
|
|
975
1097
|
try {
|
|
976
1098
|
this._socket.send(data);
|
|
977
|
-
|
|
1099
|
+
queueCallback(cb);
|
|
978
1100
|
} catch (error) {
|
|
979
|
-
|
|
1101
|
+
queueCallback(cb, error);
|
|
980
1102
|
}
|
|
981
1103
|
}
|
|
982
1104
|
/**
|
|
983
|
-
* Close the WebSocket connection
|
|
1105
|
+
* Close the WebSocket connection.
|
|
984
1106
|
*/
|
|
985
1107
|
close(code, reason) {
|
|
986
1108
|
if (this.readyState === 3 /* CLOSED */ || this.readyState === 2 /* CLOSING */) {
|
|
@@ -990,41 +1112,43 @@
|
|
|
990
1112
|
this._socket.close(code, typeof reason === "string" ? reason : reason?.toString());
|
|
991
1113
|
}
|
|
992
1114
|
/**
|
|
993
|
-
* Pause the socket (no-op for native WebSocket)
|
|
1115
|
+
* Pause the socket (no-op for native WebSocket).
|
|
994
1116
|
*/
|
|
995
1117
|
pause() {
|
|
996
1118
|
}
|
|
997
1119
|
/**
|
|
998
|
-
* Resume the socket (no-op for native WebSocket)
|
|
1120
|
+
* Resume the socket (no-op for native WebSocket).
|
|
999
1121
|
*/
|
|
1000
1122
|
resume() {
|
|
1001
1123
|
}
|
|
1002
1124
|
/**
|
|
1003
|
-
* Send a ping frame (no-op for native WebSocket)
|
|
1125
|
+
* Send a ping frame (no-op for native WebSocket).
|
|
1004
1126
|
*/
|
|
1005
1127
|
ping(_data, _mask, callback) {
|
|
1006
|
-
|
|
1128
|
+
queueCallback(callback);
|
|
1007
1129
|
}
|
|
1008
1130
|
/**
|
|
1009
|
-
* Send a pong frame (no-op for native WebSocket)
|
|
1131
|
+
* Send a pong frame (no-op for native WebSocket).
|
|
1010
1132
|
*/
|
|
1011
1133
|
pong(_data, _mask, callback) {
|
|
1012
|
-
|
|
1134
|
+
queueCallback(callback);
|
|
1013
1135
|
}
|
|
1014
1136
|
/**
|
|
1015
|
-
* Terminate the connection
|
|
1137
|
+
* Terminate the connection.
|
|
1016
1138
|
*/
|
|
1017
1139
|
terminate() {
|
|
1018
1140
|
this._socket.close();
|
|
1019
1141
|
this.readyState = 3 /* CLOSED */;
|
|
1020
1142
|
}
|
|
1021
1143
|
/**
|
|
1022
|
-
* Get buffered amount
|
|
1144
|
+
* Get buffered amount.
|
|
1023
1145
|
*/
|
|
1024
1146
|
get bufferedAmount() {
|
|
1025
1147
|
return this._socket.bufferedAmount || 0;
|
|
1026
1148
|
}
|
|
1027
1149
|
};
|
|
1150
|
+
|
|
1151
|
+
// src/server/ws/server.ts
|
|
1028
1152
|
var WebSocketServer = class extends import_events2.EventEmitter {
|
|
1029
1153
|
constructor(options, callback) {
|
|
1030
1154
|
super();
|
|
@@ -1036,8 +1160,7 @@
|
|
|
1036
1160
|
if (options?.server) {
|
|
1037
1161
|
this._httpServer = options.server;
|
|
1038
1162
|
this._setupUpgradeHandler();
|
|
1039
|
-
} else if (options?.noServer) {
|
|
1040
|
-
} else {
|
|
1163
|
+
} else if (!options?.noServer) {
|
|
1041
1164
|
const http2 = __require("http");
|
|
1042
1165
|
this._httpServer = http2.createServer();
|
|
1043
1166
|
this._ownsHttpServer = true;
|
|
@@ -1051,30 +1174,30 @@
|
|
|
1051
1174
|
this._httpServer = options.server;
|
|
1052
1175
|
options.server.registerWebSocketServer(this);
|
|
1053
1176
|
}
|
|
1054
|
-
|
|
1177
|
+
queueCallback(callback);
|
|
1055
1178
|
} else {
|
|
1056
|
-
|
|
1179
|
+
queueCallback(callback);
|
|
1057
1180
|
}
|
|
1058
1181
|
}
|
|
1059
1182
|
_setupUpgradeHandler() {
|
|
1060
|
-
this._httpServer.on("upgrade", (
|
|
1061
|
-
const requestPath = getRequestPath(
|
|
1183
|
+
this._httpServer.on("upgrade", (request3, socket, head) => {
|
|
1184
|
+
const requestPath = getRequestPath(request3.url);
|
|
1062
1185
|
console.log("[WebSocket] Upgrade request:", requestPath, "Expected:", this.path || "(any)");
|
|
1063
1186
|
if (this.path && requestPath !== this.path) {
|
|
1064
1187
|
console.log("[WebSocket] Path mismatch, ignoring");
|
|
1065
1188
|
return;
|
|
1066
1189
|
}
|
|
1067
|
-
this.handleUpgrade(
|
|
1190
|
+
this.handleUpgrade(request3, socket, head, (client) => {
|
|
1068
1191
|
console.log("[WebSocket] Client connected");
|
|
1069
|
-
this.emit("connection", client,
|
|
1192
|
+
this.emit("connection", client, request3);
|
|
1070
1193
|
});
|
|
1071
1194
|
});
|
|
1072
1195
|
}
|
|
1073
1196
|
/**
|
|
1074
|
-
* Handle HTTP upgrade for WebSocket
|
|
1197
|
+
* Handle HTTP upgrade for WebSocket.
|
|
1075
1198
|
*/
|
|
1076
|
-
handleUpgrade(
|
|
1077
|
-
const key =
|
|
1199
|
+
handleUpgrade(request3, socket, _head, callback) {
|
|
1200
|
+
const key = request3.headers["sec-websocket-key"];
|
|
1078
1201
|
if (!key) {
|
|
1079
1202
|
socket.end("HTTP/1.1 400 Bad Request\r\n\r\n");
|
|
1080
1203
|
return;
|
|
@@ -1110,7 +1233,7 @@
|
|
|
1110
1233
|
client._socket = socket;
|
|
1111
1234
|
socket.on("data", (data) => {
|
|
1112
1235
|
try {
|
|
1113
|
-
const message =
|
|
1236
|
+
const message = parseFrame(data);
|
|
1114
1237
|
if (message) {
|
|
1115
1238
|
client.emit("message", message, false);
|
|
1116
1239
|
}
|
|
@@ -1123,36 +1246,34 @@
|
|
|
1123
1246
|
client.emit("close", CLOSE_CODES.NORMAL, "");
|
|
1124
1247
|
});
|
|
1125
1248
|
socket.on("error", (error) => {
|
|
1126
|
-
|
|
1127
|
-
if (errorCode === "ECONNABORTED" || errorCode === "ECONNRESET" || errorCode === "EPIPE") {
|
|
1249
|
+
if (isIgnorableConnectionError(error)) {
|
|
1128
1250
|
return;
|
|
1129
1251
|
}
|
|
1130
1252
|
client.emit("error", error);
|
|
1131
1253
|
});
|
|
1132
1254
|
client.send = (data, _options, callback) => {
|
|
1133
1255
|
if (!socket.writable || client.readyState !== 1 /* OPEN */) {
|
|
1134
|
-
const
|
|
1135
|
-
|
|
1136
|
-
|
|
1256
|
+
const error = new Error("WebSocket is not open");
|
|
1257
|
+
error.code = "WS_NOT_OPEN";
|
|
1258
|
+
queueCallback(callback, error);
|
|
1137
1259
|
return;
|
|
1138
1260
|
}
|
|
1139
1261
|
try {
|
|
1140
|
-
const frame =
|
|
1141
|
-
socket.write(frame, (
|
|
1142
|
-
if (
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
} else {
|
|
1151
|
-
queueCallback3(callback);
|
|
1262
|
+
const frame = createFrame(data);
|
|
1263
|
+
socket.write(frame, (error) => {
|
|
1264
|
+
if (!error) {
|
|
1265
|
+
queueCallback(callback);
|
|
1266
|
+
return;
|
|
1267
|
+
}
|
|
1268
|
+
if (isIgnorableConnectionError(error)) {
|
|
1269
|
+
client.readyState = 3 /* CLOSED */;
|
|
1270
|
+
queueCallback(callback);
|
|
1271
|
+
return;
|
|
1152
1272
|
}
|
|
1273
|
+
queueCallback(callback, error);
|
|
1153
1274
|
});
|
|
1154
1275
|
} catch (error) {
|
|
1155
|
-
|
|
1276
|
+
queueCallback(callback, error);
|
|
1156
1277
|
}
|
|
1157
1278
|
};
|
|
1158
1279
|
client.close = (_code, _reason) => {
|
|
@@ -1172,14 +1293,14 @@
|
|
|
1172
1293
|
client._socket = socket;
|
|
1173
1294
|
client.send = (data, _options, callback) => {
|
|
1174
1295
|
if (client.readyState !== 1 /* OPEN */) {
|
|
1175
|
-
|
|
1296
|
+
queueCallback(callback, new Error("WebSocket is not open"));
|
|
1176
1297
|
return;
|
|
1177
1298
|
}
|
|
1178
1299
|
try {
|
|
1179
1300
|
socket.send(data);
|
|
1180
|
-
|
|
1301
|
+
queueCallback(callback);
|
|
1181
1302
|
} catch (error) {
|
|
1182
|
-
|
|
1303
|
+
queueCallback(callback, error);
|
|
1183
1304
|
}
|
|
1184
1305
|
};
|
|
1185
1306
|
client.close = (code, reason) => {
|
|
@@ -1187,7 +1308,7 @@
|
|
|
1187
1308
|
return;
|
|
1188
1309
|
}
|
|
1189
1310
|
client.readyState = 2 /* CLOSING */;
|
|
1190
|
-
socket.close(code ?? CLOSE_CODES.NORMAL, reason);
|
|
1311
|
+
socket.close(code ?? CLOSE_CODES.NORMAL, typeof reason === "string" ? reason : reason?.toString());
|
|
1191
1312
|
};
|
|
1192
1313
|
client.terminate = () => {
|
|
1193
1314
|
socket.close();
|
|
@@ -1195,7 +1316,7 @@
|
|
|
1195
1316
|
};
|
|
1196
1317
|
return client;
|
|
1197
1318
|
}
|
|
1198
|
-
_handleBunOpen(socket,
|
|
1319
|
+
_handleBunOpen(socket, request3 = {}) {
|
|
1199
1320
|
const client = this._createClientFromBunSocket(socket);
|
|
1200
1321
|
if (socket.data) {
|
|
1201
1322
|
socket.data.client = client;
|
|
@@ -1207,9 +1328,9 @@
|
|
|
1207
1328
|
});
|
|
1208
1329
|
}
|
|
1209
1330
|
const incomingRequest = {
|
|
1210
|
-
url:
|
|
1211
|
-
headers:
|
|
1212
|
-
socket:
|
|
1331
|
+
url: request3.url || this.path,
|
|
1332
|
+
headers: request3.headers || {},
|
|
1333
|
+
socket: request3.socket || { remoteAddress: void 0 }
|
|
1213
1334
|
};
|
|
1214
1335
|
this.emit("connection", client, incomingRequest);
|
|
1215
1336
|
}
|
|
@@ -1218,8 +1339,7 @@
|
|
|
1218
1339
|
if (!client) {
|
|
1219
1340
|
return;
|
|
1220
1341
|
}
|
|
1221
|
-
const isBinary =
|
|
1222
|
-
const payload = typeof message === "string" ? message : message instanceof ArrayBuffer ? Buffer.from(message) : ArrayBuffer.isView(message) ? Buffer.from(message.buffer, message.byteOffset, message.byteLength) : Buffer.from(String(message));
|
|
1342
|
+
const { payload, isBinary } = coerceBunMessage(message);
|
|
1223
1343
|
client.emit("message", payload, isBinary);
|
|
1224
1344
|
}
|
|
1225
1345
|
_handleBunClose(socket, code, reason) {
|
|
@@ -1231,98 +1351,261 @@
|
|
|
1231
1351
|
client.emit("close", code, typeof reason === "string" ? reason : reason?.toString() || "");
|
|
1232
1352
|
this.clients.delete(client);
|
|
1233
1353
|
}
|
|
1234
|
-
_parseFrame(data) {
|
|
1235
|
-
if (data.length < 2) return null;
|
|
1236
|
-
const firstByte = data[0];
|
|
1237
|
-
const secondByte = data[1];
|
|
1238
|
-
const opcode = firstByte & 15;
|
|
1239
|
-
const isMasked = (secondByte & 128) === 128;
|
|
1240
|
-
let payloadLength = secondByte & 127;
|
|
1241
|
-
let offset = 2;
|
|
1242
|
-
if (payloadLength === 126) {
|
|
1243
|
-
payloadLength = data.readUInt16BE(2);
|
|
1244
|
-
offset = 4;
|
|
1245
|
-
} else if (payloadLength === 127) {
|
|
1246
|
-
payloadLength = Number(data.readBigUInt64BE(2));
|
|
1247
|
-
offset = 10;
|
|
1248
|
-
}
|
|
1249
|
-
let payload = data.subarray(offset);
|
|
1250
|
-
if (isMasked) {
|
|
1251
|
-
const maskKey = data.subarray(offset, offset + 4);
|
|
1252
|
-
payload = data.subarray(offset + 4, offset + 4 + payloadLength);
|
|
1253
|
-
for (let i = 0; i < payload.length; i++) {
|
|
1254
|
-
payload[i] ^= maskKey[i % 4];
|
|
1255
|
-
}
|
|
1256
|
-
}
|
|
1257
|
-
if (opcode === 1) {
|
|
1258
|
-
return payload.toString("utf8");
|
|
1259
|
-
}
|
|
1260
|
-
return null;
|
|
1261
|
-
}
|
|
1262
|
-
_createFrame(data) {
|
|
1263
|
-
const payload = typeof data === "string" ? Buffer.from(data) : data;
|
|
1264
|
-
const payloadLength = Buffer.isBuffer(payload) ? payload.length : 0;
|
|
1265
|
-
let frame;
|
|
1266
|
-
let offset = 2;
|
|
1267
|
-
if (payloadLength < 126) {
|
|
1268
|
-
frame = Buffer.allocUnsafe(2 + payloadLength);
|
|
1269
|
-
frame[1] = payloadLength;
|
|
1270
|
-
} else if (payloadLength < 65536) {
|
|
1271
|
-
frame = Buffer.allocUnsafe(4 + payloadLength);
|
|
1272
|
-
frame[1] = 126;
|
|
1273
|
-
frame.writeUInt16BE(payloadLength, 2);
|
|
1274
|
-
offset = 4;
|
|
1275
|
-
} else {
|
|
1276
|
-
frame = Buffer.allocUnsafe(10 + payloadLength);
|
|
1277
|
-
frame[1] = 127;
|
|
1278
|
-
frame.writeBigUInt64BE(BigInt(payloadLength), 2);
|
|
1279
|
-
offset = 10;
|
|
1280
|
-
}
|
|
1281
|
-
frame[0] = 129;
|
|
1282
|
-
if (Buffer.isBuffer(payload)) {
|
|
1283
|
-
payload.copy(frame, offset);
|
|
1284
|
-
}
|
|
1285
|
-
return frame;
|
|
1286
|
-
}
|
|
1287
1354
|
/**
|
|
1288
|
-
* Close the server
|
|
1355
|
+
* Close the server.
|
|
1289
1356
|
*/
|
|
1290
1357
|
close(callback) {
|
|
1291
1358
|
this.clients.forEach((client) => client.close());
|
|
1292
1359
|
this.clients.clear();
|
|
1293
1360
|
if (this._httpServer && this._ownsHttpServer) {
|
|
1294
1361
|
this._httpServer.close(callback);
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
this.emit("close");
|
|
1300
|
-
queueCallback3(callback);
|
|
1362
|
+
return;
|
|
1363
|
+
}
|
|
1364
|
+
if (runtime === "bun" && this._httpServer?.unregisterWebSocketServer) {
|
|
1365
|
+
this._httpServer.unregisterWebSocketServer(this);
|
|
1301
1366
|
}
|
|
1367
|
+
this.emit("close");
|
|
1368
|
+
queueCallback(callback);
|
|
1302
1369
|
}
|
|
1303
1370
|
/**
|
|
1304
|
-
* Check if server should handle request
|
|
1371
|
+
* Check if server should handle request.
|
|
1305
1372
|
*/
|
|
1306
|
-
shouldHandle(
|
|
1307
|
-
if (this.path && getRequestPath(
|
|
1373
|
+
shouldHandle(request3) {
|
|
1374
|
+
if (this.path && getRequestPath(request3.url) !== this.path) {
|
|
1308
1375
|
return false;
|
|
1309
1376
|
}
|
|
1310
1377
|
return true;
|
|
1311
1378
|
}
|
|
1312
1379
|
/**
|
|
1313
|
-
* Get server address
|
|
1380
|
+
* Get server address.
|
|
1314
1381
|
*/
|
|
1315
1382
|
address() {
|
|
1316
|
-
if (this._httpServer
|
|
1383
|
+
if (this._httpServer?.address) {
|
|
1317
1384
|
return this._httpServer.address();
|
|
1318
1385
|
}
|
|
1319
1386
|
return null;
|
|
1320
1387
|
}
|
|
1321
1388
|
};
|
|
1322
1389
|
|
|
1323
|
-
// src/
|
|
1390
|
+
// src/server/ws/runtime.ts
|
|
1391
|
+
init_runtime();
|
|
1392
|
+
|
|
1393
|
+
// src/server/wss/client.ts
|
|
1394
|
+
var WSSClient = class extends WebSocket {
|
|
1395
|
+
constructor(address, protocols, options) {
|
|
1396
|
+
const urlString = typeof address === "string" ? address : address.toString();
|
|
1397
|
+
const secureUrl = urlString.replace(/^ws:\/\//i, "wss://");
|
|
1398
|
+
super(secureUrl, protocols, options);
|
|
1399
|
+
}
|
|
1400
|
+
};
|
|
1401
|
+
function createWSSClient(address, protocols, options) {
|
|
1402
|
+
return new WSSClient(address, protocols, options);
|
|
1403
|
+
}
|
|
1404
|
+
|
|
1405
|
+
// src/server/wss/runtime.ts
|
|
1406
|
+
init_runtime();
|
|
1407
|
+
function getRuntime2() {
|
|
1408
|
+
return runtime;
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1411
|
+
// src/server/wss/server.ts
|
|
1412
|
+
var import_events3 = __require("events");
|
|
1413
|
+
|
|
1414
|
+
// src/server/https/client-request.ts
|
|
1415
|
+
var import_node_events = __require("events");
|
|
1416
|
+
init_utils();
|
|
1417
|
+
|
|
1418
|
+
// src/server/https/request-api.ts
|
|
1419
|
+
init_runtime();
|
|
1420
|
+
|
|
1421
|
+
// src/server/https/http-classes.ts
|
|
1422
|
+
function loadHttpClasses() {
|
|
1423
|
+
const httpModule = (init_http(), __toCommonJS(http_exports));
|
|
1424
|
+
return {
|
|
1425
|
+
IncomingMessage: httpModule.IncomingMessage,
|
|
1426
|
+
ServerResponse: httpModule.ServerResponse
|
|
1427
|
+
};
|
|
1428
|
+
}
|
|
1429
|
+
|
|
1430
|
+
// src/server/https/node-modules.ts
|
|
1431
|
+
init_runtime();
|
|
1432
|
+
var https2;
|
|
1433
|
+
if (isNode && typeof process !== "undefined") {
|
|
1434
|
+
try {
|
|
1435
|
+
https2 = __require("https");
|
|
1436
|
+
} catch {
|
|
1437
|
+
https2 = __require("https");
|
|
1438
|
+
}
|
|
1439
|
+
}
|
|
1440
|
+
|
|
1441
|
+
// src/server/https/runtime.ts
|
|
1442
|
+
init_runtime();
|
|
1443
|
+
|
|
1444
|
+
// src/server/https/server-runtime.ts
|
|
1445
|
+
var import_node_events6 = __require("events");
|
|
1446
|
+
init_runtime();
|
|
1447
|
+
init_utils();
|
|
1448
|
+
var Server2 = class extends import_node_events6.EventEmitter {
|
|
1449
|
+
constructor(options = {}, requestListener) {
|
|
1450
|
+
super();
|
|
1451
|
+
this._listening = false;
|
|
1452
|
+
this.options = options;
|
|
1453
|
+
this.requestListener = requestListener;
|
|
1454
|
+
}
|
|
1455
|
+
listen(...args) {
|
|
1456
|
+
let port = 3e3;
|
|
1457
|
+
let hostname = "0.0.0.0";
|
|
1458
|
+
let callback;
|
|
1459
|
+
const firstArg = args[0];
|
|
1460
|
+
if (typeof firstArg === "number") {
|
|
1461
|
+
port = firstArg;
|
|
1462
|
+
const secondArg = args[1];
|
|
1463
|
+
if (typeof secondArg === "string") {
|
|
1464
|
+
hostname = secondArg;
|
|
1465
|
+
callback = args[2] || args[3];
|
|
1466
|
+
} else if (typeof secondArg === "function") {
|
|
1467
|
+
callback = secondArg;
|
|
1468
|
+
}
|
|
1469
|
+
} else if (firstArg && typeof firstArg === "object") {
|
|
1470
|
+
port = firstArg.port || 3e3;
|
|
1471
|
+
hostname = firstArg.hostname || "0.0.0.0";
|
|
1472
|
+
callback = args[1];
|
|
1473
|
+
}
|
|
1474
|
+
const self = this;
|
|
1475
|
+
if (isNode) {
|
|
1476
|
+
const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
|
|
1477
|
+
this.nativeServer = https2.createServer(this.options, (req, res) => {
|
|
1478
|
+
const incomingMessage = new IncomingMessage2(req);
|
|
1479
|
+
const serverResponse = new ServerResponse2(incomingMessage, res);
|
|
1480
|
+
if (self.requestListener) {
|
|
1481
|
+
self.requestListener(incomingMessage, serverResponse);
|
|
1482
|
+
} else {
|
|
1483
|
+
self.emit("request", incomingMessage, serverResponse);
|
|
1484
|
+
}
|
|
1485
|
+
});
|
|
1486
|
+
this.nativeServer.listen(port, hostname, () => {
|
|
1487
|
+
this._listening = true;
|
|
1488
|
+
this.emit("listening");
|
|
1489
|
+
if (callback) callback();
|
|
1490
|
+
});
|
|
1491
|
+
this.nativeServer.on("error", (err) => this.emit("error", err));
|
|
1492
|
+
this.nativeServer.on("close", () => {
|
|
1493
|
+
this._listening = false;
|
|
1494
|
+
this.emit("close");
|
|
1495
|
+
});
|
|
1496
|
+
} else if (isBun) {
|
|
1497
|
+
const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
|
|
1498
|
+
const tlsOptions = {
|
|
1499
|
+
port,
|
|
1500
|
+
hostname,
|
|
1501
|
+
fetch: (req) => {
|
|
1502
|
+
return new Promise((resolve) => {
|
|
1503
|
+
const incomingMessage = new IncomingMessage2(req);
|
|
1504
|
+
const serverResponse = new ServerResponse2();
|
|
1505
|
+
serverResponse._setResolver(resolve);
|
|
1506
|
+
if (self.requestListener) {
|
|
1507
|
+
self.requestListener(incomingMessage, serverResponse);
|
|
1508
|
+
} else {
|
|
1509
|
+
self.emit("request", incomingMessage, serverResponse);
|
|
1510
|
+
}
|
|
1511
|
+
});
|
|
1512
|
+
},
|
|
1513
|
+
error: (error) => {
|
|
1514
|
+
this.emit("error", error);
|
|
1515
|
+
return createErrorResponse();
|
|
1516
|
+
}
|
|
1517
|
+
};
|
|
1518
|
+
if (this.options.key || this.options.cert) {
|
|
1519
|
+
tlsOptions.tls = {
|
|
1520
|
+
key: this.options.key,
|
|
1521
|
+
cert: this.options.cert,
|
|
1522
|
+
ca: this.options.ca,
|
|
1523
|
+
passphrase: this.options.passphrase
|
|
1524
|
+
};
|
|
1525
|
+
} else if (this.options.tls) {
|
|
1526
|
+
tlsOptions.tls = this.options.tls;
|
|
1527
|
+
}
|
|
1528
|
+
this.nativeServer = Bun.serve(tlsOptions);
|
|
1529
|
+
emitListeningWithCallback(this, callback);
|
|
1530
|
+
} else if (isDeno) {
|
|
1531
|
+
const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
|
|
1532
|
+
const serveOptions = {
|
|
1533
|
+
port,
|
|
1534
|
+
hostname,
|
|
1535
|
+
handler: (req) => {
|
|
1536
|
+
return new Promise((resolve) => {
|
|
1537
|
+
const incomingMessage = new IncomingMessage2(req);
|
|
1538
|
+
const serverResponse = new ServerResponse2();
|
|
1539
|
+
serverResponse._setResolver(resolve);
|
|
1540
|
+
if (self.requestListener) {
|
|
1541
|
+
self.requestListener(incomingMessage, serverResponse);
|
|
1542
|
+
} else {
|
|
1543
|
+
self.emit("request", incomingMessage, serverResponse);
|
|
1544
|
+
}
|
|
1545
|
+
});
|
|
1546
|
+
},
|
|
1547
|
+
onError: (error) => {
|
|
1548
|
+
this.emit("error", error);
|
|
1549
|
+
return createErrorResponse();
|
|
1550
|
+
}
|
|
1551
|
+
};
|
|
1552
|
+
if (this.options.key && this.options.cert) {
|
|
1553
|
+
serveOptions.cert = this.options.cert;
|
|
1554
|
+
serveOptions.key = this.options.key;
|
|
1555
|
+
}
|
|
1556
|
+
this.nativeServer = Deno.serve(serveOptions);
|
|
1557
|
+
emitListeningWithCallback(this, callback);
|
|
1558
|
+
}
|
|
1559
|
+
return this;
|
|
1560
|
+
}
|
|
1561
|
+
close(callback) {
|
|
1562
|
+
if (!this.nativeServer) {
|
|
1563
|
+
if (callback) queueCallback2(() => callback());
|
|
1564
|
+
return this;
|
|
1565
|
+
}
|
|
1566
|
+
if (isNode) {
|
|
1567
|
+
this.nativeServer.close(callback);
|
|
1568
|
+
} else if (isBun) {
|
|
1569
|
+
this.nativeServer.stop();
|
|
1570
|
+
closeAndEmit(this, callback);
|
|
1571
|
+
} else if (isDeno) {
|
|
1572
|
+
this.nativeServer.shutdown();
|
|
1573
|
+
closeAndEmit(this, callback);
|
|
1574
|
+
}
|
|
1575
|
+
return this;
|
|
1576
|
+
}
|
|
1577
|
+
address() {
|
|
1578
|
+
if (!this.nativeServer) return null;
|
|
1579
|
+
if (isNode) {
|
|
1580
|
+
const addr = this.nativeServer.address();
|
|
1581
|
+
if (!addr) return null;
|
|
1582
|
+
if (typeof addr === "string") {
|
|
1583
|
+
return createAddress(0, addr, "unix");
|
|
1584
|
+
}
|
|
1585
|
+
return addr;
|
|
1586
|
+
}
|
|
1587
|
+
if (isBun) {
|
|
1588
|
+
return createAddress(this.nativeServer.port, this.nativeServer.hostname);
|
|
1589
|
+
}
|
|
1590
|
+
if (isDeno) {
|
|
1591
|
+
const addr = this.nativeServer.addr;
|
|
1592
|
+
return createAddress(addr.port, addr.hostname);
|
|
1593
|
+
}
|
|
1594
|
+
return null;
|
|
1595
|
+
}
|
|
1596
|
+
get listening() {
|
|
1597
|
+
return this._listening;
|
|
1598
|
+
}
|
|
1599
|
+
};
|
|
1600
|
+
function createServer2(options = {}, requestListener) {
|
|
1601
|
+
return new Server2(options, requestListener);
|
|
1602
|
+
}
|
|
1603
|
+
|
|
1604
|
+
// src/server/wss/server.ts
|
|
1324
1605
|
init_runtime();
|
|
1325
|
-
|
|
1606
|
+
|
|
1607
|
+
// src/server/wss/utils.ts
|
|
1608
|
+
function queueCallback3(callback) {
|
|
1326
1609
|
if (callback) {
|
|
1327
1610
|
queueMicrotask(callback);
|
|
1328
1611
|
}
|
|
@@ -1339,15 +1622,10 @@
|
|
|
1339
1622
|
}
|
|
1340
1623
|
function emitCloseWithCallback(emitter, callback) {
|
|
1341
1624
|
emitter.emit("close");
|
|
1342
|
-
|
|
1625
|
+
queueCallback3(callback);
|
|
1343
1626
|
}
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
const urlString = typeof address === "string" ? address : address.toString();
|
|
1347
|
-
const secureUrl = urlString.replace(/^ws:\/\//i, "wss://");
|
|
1348
|
-
super(secureUrl, protocols, options);
|
|
1349
|
-
}
|
|
1350
|
-
};
|
|
1627
|
+
|
|
1628
|
+
// src/server/wss/server.ts
|
|
1351
1629
|
var WSSServer = class extends import_events3.EventEmitter {
|
|
1352
1630
|
constructor(options, callback) {
|
|
1353
1631
|
super();
|
|
@@ -1360,7 +1638,7 @@
|
|
|
1360
1638
|
this._setupServer(callback);
|
|
1361
1639
|
} else if (options?.noServer) {
|
|
1362
1640
|
this._wsServer = new WebSocketServer({ noServer: true });
|
|
1363
|
-
|
|
1641
|
+
queueCallback3(callback);
|
|
1364
1642
|
} else {
|
|
1365
1643
|
this._httpsServer = createServer2(buildHttpsOptions(options));
|
|
1366
1644
|
this._setupServer(callback);
|
|
@@ -1370,7 +1648,7 @@
|
|
|
1370
1648
|
}
|
|
1371
1649
|
} else {
|
|
1372
1650
|
this._wsServer = new WebSocketServer(options);
|
|
1373
|
-
|
|
1651
|
+
queueCallback3(callback);
|
|
1374
1652
|
}
|
|
1375
1653
|
}
|
|
1376
1654
|
_setupServer(callback) {
|
|
@@ -1379,44 +1657,44 @@
|
|
|
1379
1657
|
server: this._httpsServer,
|
|
1380
1658
|
noServer: false
|
|
1381
1659
|
});
|
|
1382
|
-
this._wsServer.on("connection", (client,
|
|
1660
|
+
this._wsServer.on("connection", (client, request3) => {
|
|
1383
1661
|
if (this.options.clientTracking !== false) {
|
|
1384
1662
|
this.clients.add(client);
|
|
1385
1663
|
client.on("close", () => {
|
|
1386
1664
|
this.clients.delete(client);
|
|
1387
1665
|
});
|
|
1388
1666
|
}
|
|
1389
|
-
this.emit("connection", client,
|
|
1667
|
+
this.emit("connection", client, request3);
|
|
1390
1668
|
});
|
|
1391
1669
|
this._wsServer.on("error", (error) => {
|
|
1392
1670
|
this.emit("error", error);
|
|
1393
1671
|
});
|
|
1394
1672
|
if (!this.options?.port) {
|
|
1395
|
-
|
|
1673
|
+
queueCallback3(callback);
|
|
1396
1674
|
}
|
|
1397
1675
|
}
|
|
1398
1676
|
/**
|
|
1399
|
-
* Handle HTTP upgrade for WebSocket
|
|
1677
|
+
* Handle HTTP upgrade for WebSocket.
|
|
1400
1678
|
*/
|
|
1401
|
-
handleUpgrade(
|
|
1679
|
+
handleUpgrade(request3, socket, head, callback) {
|
|
1402
1680
|
if (this._wsServer) {
|
|
1403
|
-
this._wsServer.handleUpgrade(
|
|
1681
|
+
this._wsServer.handleUpgrade(request3, socket, head, callback);
|
|
1404
1682
|
}
|
|
1405
1683
|
}
|
|
1406
1684
|
/**
|
|
1407
|
-
* Check if server should handle request
|
|
1685
|
+
* Check if server should handle request.
|
|
1408
1686
|
*/
|
|
1409
|
-
shouldHandle(
|
|
1687
|
+
shouldHandle(request3) {
|
|
1410
1688
|
if (this._wsServer) {
|
|
1411
|
-
return this._wsServer.shouldHandle(
|
|
1689
|
+
return this._wsServer.shouldHandle(request3);
|
|
1412
1690
|
}
|
|
1413
|
-
if (this.path &&
|
|
1691
|
+
if (this.path && request3.url !== this.path) {
|
|
1414
1692
|
return false;
|
|
1415
1693
|
}
|
|
1416
1694
|
return true;
|
|
1417
1695
|
}
|
|
1418
1696
|
/**
|
|
1419
|
-
* Close the server
|
|
1697
|
+
* Close the server.
|
|
1420
1698
|
*/
|
|
1421
1699
|
close(callback) {
|
|
1422
1700
|
this.clients.forEach((client) => client.close());
|
|
@@ -1429,17 +1707,19 @@
|
|
|
1429
1707
|
emitCloseWithCallback(this, callback);
|
|
1430
1708
|
}
|
|
1431
1709
|
});
|
|
1432
|
-
|
|
1710
|
+
return;
|
|
1711
|
+
}
|
|
1712
|
+
if (this._httpsServer) {
|
|
1433
1713
|
this._httpsServer.close(callback);
|
|
1434
|
-
|
|
1435
|
-
emitCloseWithCallback(this, callback);
|
|
1714
|
+
return;
|
|
1436
1715
|
}
|
|
1716
|
+
emitCloseWithCallback(this, callback);
|
|
1437
1717
|
}
|
|
1438
1718
|
/**
|
|
1439
|
-
* Get server address
|
|
1719
|
+
* Get server address.
|
|
1440
1720
|
*/
|
|
1441
1721
|
address() {
|
|
1442
|
-
if (this._httpsServer
|
|
1722
|
+
if (this._httpsServer?.address) {
|
|
1443
1723
|
return this._httpsServer.address();
|
|
1444
1724
|
}
|
|
1445
1725
|
if (this._wsServer) {
|
|
@@ -1448,15 +1728,11 @@
|
|
|
1448
1728
|
return null;
|
|
1449
1729
|
}
|
|
1450
1730
|
};
|
|
1451
|
-
function createWSSClient(address, protocols, options) {
|
|
1452
|
-
return new WSSClient(address, protocols, options);
|
|
1453
|
-
}
|
|
1454
1731
|
function createWSSServer(options, callback) {
|
|
1455
1732
|
return new WSSServer(options, callback);
|
|
1456
1733
|
}
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
}
|
|
1734
|
+
|
|
1735
|
+
// src/server/wss/index.ts
|
|
1460
1736
|
var wss_default = {
|
|
1461
1737
|
WSSClient,
|
|
1462
1738
|
WSSServer,
|