elit 3.6.5 → 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/README.md +6 -0
- package/dist/build.cjs +421 -331
- package/dist/build.d.ts +1 -16
- 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 +21608 -20241
- package/dist/cli.d.ts +19 -37
- package/dist/cli.mjs +21262 -19910
- package/dist/config.cjs +357 -350
- package/dist/config.d.ts +19 -240
- 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 -59
- 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 -1522
- package/dist/desktop-auto-render.d.ts +4 -9
- package/dist/desktop-auto-render.js +1695 -1517
- package/dist/desktop-auto-render.mjs +1696 -1518
- 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 -590
- package/dist/dom.d.ts +2 -15
- package/dist/dom.js +714 -587
- package/dist/dom.mjs +716 -589
- package/dist/el.cjs +62 -52
- package/dist/el.d.ts +5 -10
- 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 -7690
- package/dist/index.d.ts +8 -3
- package/dist/index.js +7486 -7676
- package/dist/index.mjs +7497 -7686
- 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 -8869
- package/dist/native.d.ts +7 -8
- package/dist/native.js +8682 -8935
- package/dist/native.mjs +8615 -8868
- 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 -31
- package/dist/render-context.js +11 -2
- package/dist/render-context.mjs +11 -2
- package/dist/router.cjs +787 -645
- package/dist/router.d.ts +8 -12
- package/dist/router.js +786 -644
- package/dist/router.mjs +786 -644
- package/dist/runtime.cjs +1 -1
- package/dist/runtime.js +1 -1
- package/dist/runtime.mjs +1 -1
- package/dist/server.cjs +3315 -2603
- package/dist/server.d.ts +49 -4
- package/dist/server.js +7611 -2834
- package/dist/server.mjs +3317 -2607
- package/dist/smtp-server.cjs +128 -0
- package/dist/smtp-server.d.ts +27 -0
- package/dist/smtp-server.js +4199 -0
- package/dist/smtp-server.mjs +100 -0
- package/dist/state-DvEkDehk.d.ts +195 -0
- package/dist/state.cjs +768 -658
- package/dist/state.d.ts +11 -69
- package/dist/state.js +760 -650
- package/dist/state.mjs +767 -657
- 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 +71 -226
- package/dist/universal.cjs +1 -1
- package/dist/universal.d.ts +1 -5
- 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 +16 -1
- package/vendor/epaint-0.31.1/src/image.rs +418 -0
- package/dist/server-CcBFc2F5.d.ts +0 -449
package/dist/ws.cjs
CHANGED
|
@@ -17,7 +17,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
|
|
20
|
-
// src/ws.ts
|
|
20
|
+
// src/server/ws/index.ts
|
|
21
21
|
var ws_exports = {};
|
|
22
22
|
__export(ws_exports, {
|
|
23
23
|
CLOSE_CODES: () => CLOSE_CODES,
|
|
@@ -29,16 +29,8 @@ __export(ws_exports, {
|
|
|
29
29
|
getRuntime: () => getRuntime
|
|
30
30
|
});
|
|
31
31
|
module.exports = __toCommonJS(ws_exports);
|
|
32
|
-
var import_events = require("events");
|
|
33
|
-
|
|
34
|
-
// src/runtime.ts
|
|
35
|
-
var runtime = (() => {
|
|
36
|
-
if (typeof Deno !== "undefined") return "deno";
|
|
37
|
-
if (typeof Bun !== "undefined") return "bun";
|
|
38
|
-
return "node";
|
|
39
|
-
})();
|
|
40
32
|
|
|
41
|
-
// src/ws.ts
|
|
33
|
+
// src/server/ws/constants.ts
|
|
42
34
|
var ReadyState = /* @__PURE__ */ ((ReadyState2) => {
|
|
43
35
|
ReadyState2[ReadyState2["CONNECTING"] = 0] = "CONNECTING";
|
|
44
36
|
ReadyState2[ReadyState2["OPEN"] = 1] = "OPEN";
|
|
@@ -63,6 +55,18 @@ var CLOSE_CODES = {
|
|
|
63
55
|
BAD_GATEWAY: 1014,
|
|
64
56
|
TLS_HANDSHAKE_FAIL: 1015
|
|
65
57
|
};
|
|
58
|
+
|
|
59
|
+
// src/server/ws/server.ts
|
|
60
|
+
var import_events2 = require("events");
|
|
61
|
+
|
|
62
|
+
// src/shares/runtime.ts
|
|
63
|
+
var runtime = (() => {
|
|
64
|
+
if (typeof Deno !== "undefined") return "deno";
|
|
65
|
+
if (typeof Bun !== "undefined") return "bun";
|
|
66
|
+
return "node";
|
|
67
|
+
})();
|
|
68
|
+
|
|
69
|
+
// src/server/ws/utils.ts
|
|
66
70
|
function queueCallback(callback, error) {
|
|
67
71
|
if (callback) {
|
|
68
72
|
queueMicrotask(() => callback(error));
|
|
@@ -78,6 +82,73 @@ function getRequestPath(url) {
|
|
|
78
82
|
const [pathname = "/"] = (url || "/").split("?");
|
|
79
83
|
return pathname || "/";
|
|
80
84
|
}
|
|
85
|
+
function isIgnorableConnectionError(error) {
|
|
86
|
+
const errorCode = error?.code;
|
|
87
|
+
return errorCode === "ECONNABORTED" || errorCode === "ECONNRESET" || errorCode === "EPIPE";
|
|
88
|
+
}
|
|
89
|
+
function coerceBunMessage(message) {
|
|
90
|
+
const isBinary = typeof message !== "string";
|
|
91
|
+
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));
|
|
92
|
+
return { payload, isBinary };
|
|
93
|
+
}
|
|
94
|
+
function parseFrame(data) {
|
|
95
|
+
if (data.length < 2) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
const firstByte = data[0];
|
|
99
|
+
const secondByte = data[1];
|
|
100
|
+
const opcode = firstByte & 15;
|
|
101
|
+
const isMasked = (secondByte & 128) === 128;
|
|
102
|
+
let payloadLength = secondByte & 127;
|
|
103
|
+
let offset = 2;
|
|
104
|
+
if (payloadLength === 126) {
|
|
105
|
+
payloadLength = data.readUInt16BE(2);
|
|
106
|
+
offset = 4;
|
|
107
|
+
} else if (payloadLength === 127) {
|
|
108
|
+
payloadLength = Number(data.readBigUInt64BE(2));
|
|
109
|
+
offset = 10;
|
|
110
|
+
}
|
|
111
|
+
let payload = data.subarray(offset);
|
|
112
|
+
if (isMasked) {
|
|
113
|
+
const maskKey = data.subarray(offset, offset + 4);
|
|
114
|
+
payload = data.subarray(offset + 4, offset + 4 + payloadLength);
|
|
115
|
+
for (let index = 0; index < payload.length; index += 1) {
|
|
116
|
+
payload[index] ^= maskKey[index % 4];
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (opcode === 1) {
|
|
120
|
+
return payload.toString("utf8");
|
|
121
|
+
}
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
function createFrame(data) {
|
|
125
|
+
const payload = typeof data === "string" ? Buffer.from(data) : data;
|
|
126
|
+
const payloadLength = Buffer.isBuffer(payload) ? payload.length : 0;
|
|
127
|
+
let frame;
|
|
128
|
+
let offset = 2;
|
|
129
|
+
if (payloadLength < 126) {
|
|
130
|
+
frame = Buffer.allocUnsafe(2 + payloadLength);
|
|
131
|
+
frame[1] = payloadLength;
|
|
132
|
+
} else if (payloadLength < 65536) {
|
|
133
|
+
frame = Buffer.allocUnsafe(4 + payloadLength);
|
|
134
|
+
frame[1] = 126;
|
|
135
|
+
frame.writeUInt16BE(payloadLength, 2);
|
|
136
|
+
offset = 4;
|
|
137
|
+
} else {
|
|
138
|
+
frame = Buffer.allocUnsafe(10 + payloadLength);
|
|
139
|
+
frame[1] = 127;
|
|
140
|
+
frame.writeBigUInt64BE(BigInt(payloadLength), 2);
|
|
141
|
+
offset = 10;
|
|
142
|
+
}
|
|
143
|
+
frame[0] = 129;
|
|
144
|
+
if (Buffer.isBuffer(payload)) {
|
|
145
|
+
payload.copy(frame, offset);
|
|
146
|
+
}
|
|
147
|
+
return frame;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// src/server/ws/websocket.ts
|
|
151
|
+
var import_events = require("events");
|
|
81
152
|
var WebSocket = class extends import_events.EventEmitter {
|
|
82
153
|
constructor(address, protocols, _options) {
|
|
83
154
|
super();
|
|
@@ -108,12 +179,13 @@ var WebSocket = class extends import_events.EventEmitter {
|
|
|
108
179
|
};
|
|
109
180
|
}
|
|
110
181
|
/**
|
|
111
|
-
* Send data through WebSocket
|
|
182
|
+
* Send data through WebSocket.
|
|
112
183
|
*/
|
|
113
184
|
send(data, options, callback) {
|
|
114
185
|
const cb = typeof options === "function" ? options : callback;
|
|
115
186
|
if (this.readyState !== 1 /* OPEN */) {
|
|
116
|
-
|
|
187
|
+
queueCallback(cb, new Error("WebSocket is not open"));
|
|
188
|
+
return;
|
|
117
189
|
}
|
|
118
190
|
try {
|
|
119
191
|
this._socket.send(data);
|
|
@@ -123,7 +195,7 @@ var WebSocket = class extends import_events.EventEmitter {
|
|
|
123
195
|
}
|
|
124
196
|
}
|
|
125
197
|
/**
|
|
126
|
-
* Close the WebSocket connection
|
|
198
|
+
* Close the WebSocket connection.
|
|
127
199
|
*/
|
|
128
200
|
close(code, reason) {
|
|
129
201
|
if (this.readyState === 3 /* CLOSED */ || this.readyState === 2 /* CLOSING */) {
|
|
@@ -133,42 +205,44 @@ var WebSocket = class extends import_events.EventEmitter {
|
|
|
133
205
|
this._socket.close(code, typeof reason === "string" ? reason : reason?.toString());
|
|
134
206
|
}
|
|
135
207
|
/**
|
|
136
|
-
* Pause the socket (no-op for native WebSocket)
|
|
208
|
+
* Pause the socket (no-op for native WebSocket).
|
|
137
209
|
*/
|
|
138
210
|
pause() {
|
|
139
211
|
}
|
|
140
212
|
/**
|
|
141
|
-
* Resume the socket (no-op for native WebSocket)
|
|
213
|
+
* Resume the socket (no-op for native WebSocket).
|
|
142
214
|
*/
|
|
143
215
|
resume() {
|
|
144
216
|
}
|
|
145
217
|
/**
|
|
146
|
-
* Send a ping frame (no-op for native WebSocket)
|
|
218
|
+
* Send a ping frame (no-op for native WebSocket).
|
|
147
219
|
*/
|
|
148
220
|
ping(_data, _mask, callback) {
|
|
149
221
|
queueCallback(callback);
|
|
150
222
|
}
|
|
151
223
|
/**
|
|
152
|
-
* Send a pong frame (no-op for native WebSocket)
|
|
224
|
+
* Send a pong frame (no-op for native WebSocket).
|
|
153
225
|
*/
|
|
154
226
|
pong(_data, _mask, callback) {
|
|
155
227
|
queueCallback(callback);
|
|
156
228
|
}
|
|
157
229
|
/**
|
|
158
|
-
* Terminate the connection
|
|
230
|
+
* Terminate the connection.
|
|
159
231
|
*/
|
|
160
232
|
terminate() {
|
|
161
233
|
this._socket.close();
|
|
162
234
|
this.readyState = 3 /* CLOSED */;
|
|
163
235
|
}
|
|
164
236
|
/**
|
|
165
|
-
* Get buffered amount
|
|
237
|
+
* Get buffered amount.
|
|
166
238
|
*/
|
|
167
239
|
get bufferedAmount() {
|
|
168
240
|
return this._socket.bufferedAmount || 0;
|
|
169
241
|
}
|
|
170
242
|
};
|
|
171
|
-
|
|
243
|
+
|
|
244
|
+
// src/server/ws/server.ts
|
|
245
|
+
var WebSocketServer = class extends import_events2.EventEmitter {
|
|
172
246
|
constructor(options, callback) {
|
|
173
247
|
super();
|
|
174
248
|
this.clients = /* @__PURE__ */ new Set();
|
|
@@ -179,8 +253,7 @@ var WebSocketServer = class extends import_events.EventEmitter {
|
|
|
179
253
|
if (options?.server) {
|
|
180
254
|
this._httpServer = options.server;
|
|
181
255
|
this._setupUpgradeHandler();
|
|
182
|
-
} else if (options?.noServer) {
|
|
183
|
-
} else {
|
|
256
|
+
} else if (!options?.noServer) {
|
|
184
257
|
const http = require("http");
|
|
185
258
|
this._httpServer = http.createServer();
|
|
186
259
|
this._ownsHttpServer = true;
|
|
@@ -214,7 +287,7 @@ var WebSocketServer = class extends import_events.EventEmitter {
|
|
|
214
287
|
});
|
|
215
288
|
}
|
|
216
289
|
/**
|
|
217
|
-
* Handle HTTP upgrade for WebSocket
|
|
290
|
+
* Handle HTTP upgrade for WebSocket.
|
|
218
291
|
*/
|
|
219
292
|
handleUpgrade(request, socket, _head, callback) {
|
|
220
293
|
const key = request.headers["sec-websocket-key"];
|
|
@@ -244,7 +317,7 @@ var WebSocketServer = class extends import_events.EventEmitter {
|
|
|
244
317
|
}
|
|
245
318
|
_createClientFromSocket(socket) {
|
|
246
319
|
const client = Object.create(WebSocket.prototype);
|
|
247
|
-
|
|
320
|
+
import_events2.EventEmitter.call(client);
|
|
248
321
|
client.readyState = 1 /* OPEN */;
|
|
249
322
|
client.url = "ws://localhost";
|
|
250
323
|
client.protocol = "";
|
|
@@ -253,7 +326,7 @@ var WebSocketServer = class extends import_events.EventEmitter {
|
|
|
253
326
|
client._socket = socket;
|
|
254
327
|
socket.on("data", (data) => {
|
|
255
328
|
try {
|
|
256
|
-
const message =
|
|
329
|
+
const message = parseFrame(data);
|
|
257
330
|
if (message) {
|
|
258
331
|
client.emit("message", message, false);
|
|
259
332
|
}
|
|
@@ -266,33 +339,31 @@ var WebSocketServer = class extends import_events.EventEmitter {
|
|
|
266
339
|
client.emit("close", CLOSE_CODES.NORMAL, "");
|
|
267
340
|
});
|
|
268
341
|
socket.on("error", (error) => {
|
|
269
|
-
|
|
270
|
-
if (errorCode === "ECONNABORTED" || errorCode === "ECONNRESET" || errorCode === "EPIPE") {
|
|
342
|
+
if (isIgnorableConnectionError(error)) {
|
|
271
343
|
return;
|
|
272
344
|
}
|
|
273
345
|
client.emit("error", error);
|
|
274
346
|
});
|
|
275
347
|
client.send = (data, _options, callback) => {
|
|
276
348
|
if (!socket.writable || client.readyState !== 1 /* OPEN */) {
|
|
277
|
-
const
|
|
278
|
-
|
|
279
|
-
queueCallback(callback,
|
|
349
|
+
const error = new Error("WebSocket is not open");
|
|
350
|
+
error.code = "WS_NOT_OPEN";
|
|
351
|
+
queueCallback(callback, error);
|
|
280
352
|
return;
|
|
281
353
|
}
|
|
282
354
|
try {
|
|
283
|
-
const frame =
|
|
284
|
-
socket.write(frame, (
|
|
285
|
-
if (
|
|
286
|
-
const errorCode = err.code;
|
|
287
|
-
if (errorCode !== "ECONNABORTED" && errorCode !== "ECONNRESET" && errorCode !== "EPIPE") {
|
|
288
|
-
queueCallback(callback, err);
|
|
289
|
-
} else {
|
|
290
|
-
client.readyState = 3 /* CLOSED */;
|
|
291
|
-
queueCallback(callback);
|
|
292
|
-
}
|
|
293
|
-
} else {
|
|
355
|
+
const frame = createFrame(data);
|
|
356
|
+
socket.write(frame, (error) => {
|
|
357
|
+
if (!error) {
|
|
294
358
|
queueCallback(callback);
|
|
359
|
+
return;
|
|
295
360
|
}
|
|
361
|
+
if (isIgnorableConnectionError(error)) {
|
|
362
|
+
client.readyState = 3 /* CLOSED */;
|
|
363
|
+
queueCallback(callback);
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
queueCallback(callback, error);
|
|
296
367
|
});
|
|
297
368
|
} catch (error) {
|
|
298
369
|
queueCallback(callback, error);
|
|
@@ -306,7 +377,7 @@ var WebSocketServer = class extends import_events.EventEmitter {
|
|
|
306
377
|
}
|
|
307
378
|
_createClientFromBunSocket(socket) {
|
|
308
379
|
const client = Object.create(WebSocket.prototype);
|
|
309
|
-
|
|
380
|
+
import_events2.EventEmitter.call(client);
|
|
310
381
|
client.readyState = 1 /* OPEN */;
|
|
311
382
|
client.url = "ws://localhost";
|
|
312
383
|
client.protocol = "";
|
|
@@ -330,7 +401,7 @@ var WebSocketServer = class extends import_events.EventEmitter {
|
|
|
330
401
|
return;
|
|
331
402
|
}
|
|
332
403
|
client.readyState = 2 /* CLOSING */;
|
|
333
|
-
socket.close(code ?? CLOSE_CODES.NORMAL, reason);
|
|
404
|
+
socket.close(code ?? CLOSE_CODES.NORMAL, typeof reason === "string" ? reason : reason?.toString());
|
|
334
405
|
};
|
|
335
406
|
client.terminate = () => {
|
|
336
407
|
socket.close();
|
|
@@ -361,8 +432,7 @@ var WebSocketServer = class extends import_events.EventEmitter {
|
|
|
361
432
|
if (!client) {
|
|
362
433
|
return;
|
|
363
434
|
}
|
|
364
|
-
const isBinary =
|
|
365
|
-
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));
|
|
435
|
+
const { payload, isBinary } = coerceBunMessage(message);
|
|
366
436
|
client.emit("message", payload, isBinary);
|
|
367
437
|
}
|
|
368
438
|
_handleBunClose(socket, code, reason) {
|
|
@@ -374,77 +444,24 @@ var WebSocketServer = class extends import_events.EventEmitter {
|
|
|
374
444
|
client.emit("close", code, typeof reason === "string" ? reason : reason?.toString() || "");
|
|
375
445
|
this.clients.delete(client);
|
|
376
446
|
}
|
|
377
|
-
_parseFrame(data) {
|
|
378
|
-
if (data.length < 2) return null;
|
|
379
|
-
const firstByte = data[0];
|
|
380
|
-
const secondByte = data[1];
|
|
381
|
-
const opcode = firstByte & 15;
|
|
382
|
-
const isMasked = (secondByte & 128) === 128;
|
|
383
|
-
let payloadLength = secondByte & 127;
|
|
384
|
-
let offset = 2;
|
|
385
|
-
if (payloadLength === 126) {
|
|
386
|
-
payloadLength = data.readUInt16BE(2);
|
|
387
|
-
offset = 4;
|
|
388
|
-
} else if (payloadLength === 127) {
|
|
389
|
-
payloadLength = Number(data.readBigUInt64BE(2));
|
|
390
|
-
offset = 10;
|
|
391
|
-
}
|
|
392
|
-
let payload = data.subarray(offset);
|
|
393
|
-
if (isMasked) {
|
|
394
|
-
const maskKey = data.subarray(offset, offset + 4);
|
|
395
|
-
payload = data.subarray(offset + 4, offset + 4 + payloadLength);
|
|
396
|
-
for (let i = 0; i < payload.length; i++) {
|
|
397
|
-
payload[i] ^= maskKey[i % 4];
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
if (opcode === 1) {
|
|
401
|
-
return payload.toString("utf8");
|
|
402
|
-
}
|
|
403
|
-
return null;
|
|
404
|
-
}
|
|
405
|
-
_createFrame(data) {
|
|
406
|
-
const payload = typeof data === "string" ? Buffer.from(data) : data;
|
|
407
|
-
const payloadLength = Buffer.isBuffer(payload) ? payload.length : 0;
|
|
408
|
-
let frame;
|
|
409
|
-
let offset = 2;
|
|
410
|
-
if (payloadLength < 126) {
|
|
411
|
-
frame = Buffer.allocUnsafe(2 + payloadLength);
|
|
412
|
-
frame[1] = payloadLength;
|
|
413
|
-
} else if (payloadLength < 65536) {
|
|
414
|
-
frame = Buffer.allocUnsafe(4 + payloadLength);
|
|
415
|
-
frame[1] = 126;
|
|
416
|
-
frame.writeUInt16BE(payloadLength, 2);
|
|
417
|
-
offset = 4;
|
|
418
|
-
} else {
|
|
419
|
-
frame = Buffer.allocUnsafe(10 + payloadLength);
|
|
420
|
-
frame[1] = 127;
|
|
421
|
-
frame.writeBigUInt64BE(BigInt(payloadLength), 2);
|
|
422
|
-
offset = 10;
|
|
423
|
-
}
|
|
424
|
-
frame[0] = 129;
|
|
425
|
-
if (Buffer.isBuffer(payload)) {
|
|
426
|
-
payload.copy(frame, offset);
|
|
427
|
-
}
|
|
428
|
-
return frame;
|
|
429
|
-
}
|
|
430
447
|
/**
|
|
431
|
-
* Close the server
|
|
448
|
+
* Close the server.
|
|
432
449
|
*/
|
|
433
450
|
close(callback) {
|
|
434
451
|
this.clients.forEach((client) => client.close());
|
|
435
452
|
this.clients.clear();
|
|
436
453
|
if (this._httpServer && this._ownsHttpServer) {
|
|
437
454
|
this._httpServer.close(callback);
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
this.emit("close");
|
|
443
|
-
queueCallback(callback);
|
|
455
|
+
return;
|
|
456
|
+
}
|
|
457
|
+
if (runtime === "bun" && this._httpServer?.unregisterWebSocketServer) {
|
|
458
|
+
this._httpServer.unregisterWebSocketServer(this);
|
|
444
459
|
}
|
|
460
|
+
this.emit("close");
|
|
461
|
+
queueCallback(callback);
|
|
445
462
|
}
|
|
446
463
|
/**
|
|
447
|
-
* Check if server should handle request
|
|
464
|
+
* Check if server should handle request.
|
|
448
465
|
*/
|
|
449
466
|
shouldHandle(request) {
|
|
450
467
|
if (this.path && getRequestPath(request.url) !== this.path) {
|
|
@@ -453,10 +470,10 @@ var WebSocketServer = class extends import_events.EventEmitter {
|
|
|
453
470
|
return true;
|
|
454
471
|
}
|
|
455
472
|
/**
|
|
456
|
-
* Get server address
|
|
473
|
+
* Get server address.
|
|
457
474
|
*/
|
|
458
475
|
address() {
|
|
459
|
-
if (this._httpServer
|
|
476
|
+
if (this._httpServer?.address) {
|
|
460
477
|
return this._httpServer.address();
|
|
461
478
|
}
|
|
462
479
|
return null;
|
|
@@ -465,9 +482,13 @@ var WebSocketServer = class extends import_events.EventEmitter {
|
|
|
465
482
|
function createWebSocketServer(options, callback) {
|
|
466
483
|
return new WebSocketServer(options, callback);
|
|
467
484
|
}
|
|
485
|
+
|
|
486
|
+
// src/server/ws/runtime.ts
|
|
468
487
|
function getRuntime() {
|
|
469
488
|
return runtime;
|
|
470
489
|
}
|
|
490
|
+
|
|
491
|
+
// src/server/ws/ws.ts
|
|
471
492
|
var ws_default = {
|
|
472
493
|
WebSocket,
|
|
473
494
|
WebSocketServer,
|
package/dist/ws.d.ts
CHANGED
|
@@ -1,129 +1,11 @@
|
|
|
1
|
+
import { W as WebSocket, S as ServerOptions, R as ReadyState } from './websocket-XfyK23zD.js';
|
|
2
|
+
export { C as CLOSE_CODES, D as Data, a as SendOptions, V as VerifyClientCallback } from './websocket-XfyK23zD.js';
|
|
1
3
|
import { EventEmitter } from 'events';
|
|
2
|
-
import { IncomingMessage } from './
|
|
4
|
+
import { I as IncomingMessage } from './types-DAisuVr5.js';
|
|
3
5
|
import 'node:events';
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
|
-
* WebSocket
|
|
7
|
-
* Pure implementation without external dependencies
|
|
8
|
-
* - Node.js: uses native 'ws' module (built-in WebSocket implementation)
|
|
9
|
-
* - Bun: uses native WebSocket
|
|
10
|
-
* - Deno: uses native WebSocket
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* WebSocket ready state
|
|
15
|
-
*/
|
|
16
|
-
declare enum ReadyState {
|
|
17
|
-
CONNECTING = 0,
|
|
18
|
-
OPEN = 1,
|
|
19
|
-
CLOSING = 2,
|
|
20
|
-
CLOSED = 3
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* WebSocket close codes
|
|
24
|
-
*/
|
|
25
|
-
declare const CLOSE_CODES: {
|
|
26
|
-
readonly NORMAL: 1000;
|
|
27
|
-
readonly GOING_AWAY: 1001;
|
|
28
|
-
readonly PROTOCOL_ERROR: 1002;
|
|
29
|
-
readonly UNSUPPORTED_DATA: 1003;
|
|
30
|
-
readonly NO_STATUS: 1005;
|
|
31
|
-
readonly ABNORMAL: 1006;
|
|
32
|
-
readonly INVALID_DATA: 1007;
|
|
33
|
-
readonly POLICY_VIOLATION: 1008;
|
|
34
|
-
readonly MESSAGE_TOO_BIG: 1009;
|
|
35
|
-
readonly EXTENSION_REQUIRED: 1010;
|
|
36
|
-
readonly INTERNAL_ERROR: 1011;
|
|
37
|
-
readonly SERVICE_RESTART: 1012;
|
|
38
|
-
readonly TRY_AGAIN_LATER: 1013;
|
|
39
|
-
readonly BAD_GATEWAY: 1014;
|
|
40
|
-
readonly TLS_HANDSHAKE_FAIL: 1015;
|
|
41
|
-
};
|
|
42
|
-
/**
|
|
43
|
-
* WebSocket data types
|
|
44
|
-
*/
|
|
45
|
-
type Data = string | Buffer | ArrayBuffer | Buffer[];
|
|
46
|
-
/**
|
|
47
|
-
* WebSocket send options
|
|
48
|
-
*/
|
|
49
|
-
interface SendOptions {
|
|
50
|
-
binary?: boolean;
|
|
51
|
-
compress?: boolean;
|
|
52
|
-
fin?: boolean;
|
|
53
|
-
mask?: boolean;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* WebSocket server options
|
|
57
|
-
*/
|
|
58
|
-
interface ServerOptions {
|
|
59
|
-
host?: string;
|
|
60
|
-
port?: number;
|
|
61
|
-
backlog?: number;
|
|
62
|
-
server?: any;
|
|
63
|
-
verifyClient?: VerifyClientCallback;
|
|
64
|
-
handleProtocols?: (protocols: Set<string>, request: IncomingMessage) => string | false;
|
|
65
|
-
path?: string;
|
|
66
|
-
noServer?: boolean;
|
|
67
|
-
clientTracking?: boolean;
|
|
68
|
-
perMessageDeflate?: boolean | object;
|
|
69
|
-
maxPayload?: number;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Verify client callback
|
|
73
|
-
*/
|
|
74
|
-
type VerifyClientCallback = (info: {
|
|
75
|
-
origin: string;
|
|
76
|
-
secure: boolean;
|
|
77
|
-
req: IncomingMessage;
|
|
78
|
-
}, callback?: (result: boolean, code?: number, message?: string) => void) => boolean | void;
|
|
79
|
-
/**
|
|
80
|
-
* WebSocket class - Pure implementation
|
|
81
|
-
*/
|
|
82
|
-
declare class WebSocket extends EventEmitter {
|
|
83
|
-
readyState: ReadyState;
|
|
84
|
-
url: string;
|
|
85
|
-
protocol: string;
|
|
86
|
-
extensions: string;
|
|
87
|
-
binaryType: 'nodebuffer' | 'arraybuffer' | 'fragments';
|
|
88
|
-
/** @internal */
|
|
89
|
-
_socket: any;
|
|
90
|
-
constructor(address: string | URL, protocols?: string | string[], _options?: any);
|
|
91
|
-
private _setupNativeSocket;
|
|
92
|
-
/**
|
|
93
|
-
* Send data through WebSocket
|
|
94
|
-
*/
|
|
95
|
-
send(data: Data, options?: SendOptions | ((err?: Error) => void), callback?: (err?: Error) => void): void;
|
|
96
|
-
/**
|
|
97
|
-
* Close the WebSocket connection
|
|
98
|
-
*/
|
|
99
|
-
close(code?: number, reason?: string | Buffer): void;
|
|
100
|
-
/**
|
|
101
|
-
* Pause the socket (no-op for native WebSocket)
|
|
102
|
-
*/
|
|
103
|
-
pause(): void;
|
|
104
|
-
/**
|
|
105
|
-
* Resume the socket (no-op for native WebSocket)
|
|
106
|
-
*/
|
|
107
|
-
resume(): void;
|
|
108
|
-
/**
|
|
109
|
-
* Send a ping frame (no-op for native WebSocket)
|
|
110
|
-
*/
|
|
111
|
-
ping(_data?: Data, _mask?: boolean, callback?: (err?: Error) => void): void;
|
|
112
|
-
/**
|
|
113
|
-
* Send a pong frame (no-op for native WebSocket)
|
|
114
|
-
*/
|
|
115
|
-
pong(_data?: Data, _mask?: boolean, callback?: (err?: Error) => void): void;
|
|
116
|
-
/**
|
|
117
|
-
* Terminate the connection
|
|
118
|
-
*/
|
|
119
|
-
terminate(): void;
|
|
120
|
-
/**
|
|
121
|
-
* Get buffered amount
|
|
122
|
-
*/
|
|
123
|
-
get bufferedAmount(): number;
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* WebSocket Server - Server-side WebSocket implementation
|
|
8
|
+
* WebSocket server implementation.
|
|
127
9
|
*/
|
|
128
10
|
declare class WebSocketServer extends EventEmitter {
|
|
129
11
|
clients: Set<WebSocket>;
|
|
@@ -134,7 +16,7 @@ declare class WebSocketServer extends EventEmitter {
|
|
|
134
16
|
constructor(options?: ServerOptions, callback?: () => void);
|
|
135
17
|
private _setupUpgradeHandler;
|
|
136
18
|
/**
|
|
137
|
-
* Handle HTTP upgrade for WebSocket
|
|
19
|
+
* Handle HTTP upgrade for WebSocket.
|
|
138
20
|
*/
|
|
139
21
|
handleUpgrade(request: IncomingMessage, socket: any, _head: Buffer, callback: (client: WebSocket) => void): void;
|
|
140
22
|
private _createClientFromSocket;
|
|
@@ -142,18 +24,16 @@ declare class WebSocketServer extends EventEmitter {
|
|
|
142
24
|
_handleBunOpen(socket: any, request?: Partial<IncomingMessage>): void;
|
|
143
25
|
_handleBunMessage(socket: any, message: any): void;
|
|
144
26
|
_handleBunClose(socket: any, code: number, reason: any): void;
|
|
145
|
-
private _parseFrame;
|
|
146
|
-
private _createFrame;
|
|
147
27
|
/**
|
|
148
|
-
* Close the server
|
|
28
|
+
* Close the server.
|
|
149
29
|
*/
|
|
150
30
|
close(callback?: (err?: Error) => void): void;
|
|
151
31
|
/**
|
|
152
|
-
* Check if server should handle request
|
|
32
|
+
* Check if server should handle request.
|
|
153
33
|
*/
|
|
154
34
|
shouldHandle(request: IncomingMessage): boolean;
|
|
155
35
|
/**
|
|
156
|
-
* Get server address
|
|
36
|
+
* Get server address.
|
|
157
37
|
*/
|
|
158
38
|
address(): {
|
|
159
39
|
port: number;
|
|
@@ -162,13 +42,23 @@ declare class WebSocketServer extends EventEmitter {
|
|
|
162
42
|
} | null;
|
|
163
43
|
}
|
|
164
44
|
/**
|
|
165
|
-
* Create WebSocket server
|
|
45
|
+
* Create WebSocket server.
|
|
166
46
|
*/
|
|
167
47
|
declare function createWebSocketServer(options?: ServerOptions, callback?: () => void): WebSocketServer;
|
|
48
|
+
|
|
168
49
|
/**
|
|
169
|
-
* Get current runtime
|
|
50
|
+
* Get current runtime.
|
|
170
51
|
*/
|
|
171
52
|
declare function getRuntime(): 'node' | 'bun' | 'deno';
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* WebSocket module with unified API across runtimes
|
|
56
|
+
* Pure implementation without external dependencies
|
|
57
|
+
* - Node.js: uses native 'ws' module (built-in WebSocket implementation)
|
|
58
|
+
* - Bun: uses native WebSocket
|
|
59
|
+
* - Deno: uses native WebSocket
|
|
60
|
+
*/
|
|
61
|
+
|
|
172
62
|
/**
|
|
173
63
|
* Default export
|
|
174
64
|
*/
|
|
@@ -197,4 +87,4 @@ declare const _default: {
|
|
|
197
87
|
getRuntime: typeof getRuntime;
|
|
198
88
|
};
|
|
199
89
|
|
|
200
|
-
export {
|
|
90
|
+
export { ReadyState, ServerOptions, WebSocket, WebSocketServer, createWebSocketServer, _default as default, getRuntime };
|