elit 2.0.1 → 3.0.1
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/README.md +275 -128
- package/dist/build.d.mts +10 -1
- package/dist/build.d.ts +10 -1
- package/dist/build.js +670 -1
- package/dist/build.mjs +641 -1
- package/dist/chokidar.d.mts +134 -0
- package/dist/chokidar.d.ts +134 -0
- package/dist/chokidar.js +240 -0
- package/dist/chokidar.mjs +221 -0
- package/dist/cli.js +2792 -495
- package/dist/dom.d.mts +10 -3
- package/dist/dom.d.ts +10 -3
- package/dist/dom.js +676 -1
- package/dist/dom.mjs +647 -1
- package/dist/el.d.mts +16 -36
- package/dist/el.d.ts +16 -36
- package/dist/el.js +789 -1
- package/dist/el.mjs +583 -1
- package/dist/fs.d.mts +255 -0
- package/dist/fs.d.ts +255 -0
- package/dist/fs.js +513 -0
- package/dist/fs.mjs +469 -0
- package/dist/hmr.js +112 -1
- package/dist/hmr.mjs +91 -1
- package/dist/http.d.mts +163 -0
- package/dist/http.d.ts +163 -0
- package/dist/http.js +632 -0
- package/dist/http.mjs +605 -0
- package/dist/https.d.mts +108 -0
- package/dist/https.d.ts +108 -0
- package/dist/https.js +907 -0
- package/dist/https.mjs +901 -0
- package/dist/index.d.mts +613 -33
- package/dist/index.d.ts +613 -33
- package/dist/index.js +2589 -1
- package/dist/index.mjs +2312 -1
- package/dist/mime-types.d.mts +48 -0
- package/dist/mime-types.d.ts +48 -0
- package/dist/mime-types.js +197 -0
- package/dist/mime-types.mjs +166 -0
- package/dist/path.d.mts +163 -0
- package/dist/path.d.ts +163 -0
- package/dist/path.js +350 -0
- package/dist/path.mjs +310 -0
- package/dist/router.d.mts +3 -1
- package/dist/router.d.ts +3 -1
- package/dist/router.js +830 -1
- package/dist/router.mjs +801 -1
- package/dist/runtime.d.mts +97 -0
- package/dist/runtime.d.ts +97 -0
- package/dist/runtime.js +43 -0
- package/dist/runtime.mjs +15 -0
- package/dist/server.d.mts +5 -1
- package/dist/server.d.ts +5 -1
- package/dist/server.js +3267 -1
- package/dist/server.mjs +3241 -1
- package/dist/state.d.mts +3 -1
- package/dist/state.d.ts +3 -1
- package/dist/state.js +1036 -1
- package/dist/state.mjs +992 -1
- package/dist/style.d.mts +47 -1
- package/dist/style.d.ts +47 -1
- package/dist/style.js +551 -1
- package/dist/style.mjs +483 -1
- package/dist/{types-DOAdFFJB.d.ts → types-C0nGi6MX.d.mts} +29 -13
- package/dist/{types-DOAdFFJB.d.mts → types-Du6kfwTm.d.ts} +29 -13
- package/dist/types.d.mts +452 -3
- package/dist/types.d.ts +452 -3
- package/dist/types.js +18 -1
- package/dist/ws.d.mts +195 -0
- package/dist/ws.d.ts +195 -0
- package/dist/ws.js +380 -0
- package/dist/ws.mjs +358 -0
- package/dist/wss.d.mts +108 -0
- package/dist/wss.d.ts +108 -0
- package/dist/wss.js +1306 -0
- package/dist/wss.mjs +1300 -0
- package/package.json +53 -6
- package/dist/client.d.mts +0 -9
- package/dist/client.d.ts +0 -9
- package/dist/client.js +0 -1
- package/dist/client.mjs +0 -1
package/dist/http.mjs
ADDED
|
@@ -0,0 +1,605 @@
|
|
|
1
|
+
import {createRequire as __createRequire} from 'module';const require = __createRequire(import.meta.url);
|
|
2
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
3
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
4
|
+
}) : x)(function(x) {
|
|
5
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
6
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
// src/http.ts
|
|
10
|
+
import { EventEmitter } from "events";
|
|
11
|
+
|
|
12
|
+
// src/runtime.ts
|
|
13
|
+
var runtime = (() => {
|
|
14
|
+
if (typeof Deno !== "undefined") return "deno";
|
|
15
|
+
if (typeof Bun !== "undefined") return "bun";
|
|
16
|
+
return "node";
|
|
17
|
+
})();
|
|
18
|
+
var isNode = runtime === "node";
|
|
19
|
+
var isBun = runtime === "bun";
|
|
20
|
+
var isDeno = runtime === "deno";
|
|
21
|
+
|
|
22
|
+
// src/http.ts
|
|
23
|
+
function queueCallback(callback) {
|
|
24
|
+
if (callback) queueMicrotask(callback);
|
|
25
|
+
}
|
|
26
|
+
function headersToInit(headers) {
|
|
27
|
+
const result = {};
|
|
28
|
+
for (const key in headers) {
|
|
29
|
+
const value = headers[key];
|
|
30
|
+
result[key] = Array.isArray(value) ? value.join(", ") : String(value);
|
|
31
|
+
}
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
function createAddress(port, address, family = "IPv4") {
|
|
35
|
+
return { port, family, address };
|
|
36
|
+
}
|
|
37
|
+
function createErrorResponse() {
|
|
38
|
+
return new Response("Internal Server Error", { status: 500 });
|
|
39
|
+
}
|
|
40
|
+
function emitListeningWithCallback(server, callback) {
|
|
41
|
+
server._listening = true;
|
|
42
|
+
server.emit("listening");
|
|
43
|
+
queueCallback(callback);
|
|
44
|
+
}
|
|
45
|
+
function closeAndEmit(server, callback) {
|
|
46
|
+
server._listening = false;
|
|
47
|
+
server.emit("close");
|
|
48
|
+
if (callback) queueMicrotask(() => callback());
|
|
49
|
+
}
|
|
50
|
+
var http;
|
|
51
|
+
var https;
|
|
52
|
+
if (isNode && typeof process !== "undefined") {
|
|
53
|
+
try {
|
|
54
|
+
http = __require("http");
|
|
55
|
+
https = __require("https");
|
|
56
|
+
} catch (e) {
|
|
57
|
+
http = __require("http");
|
|
58
|
+
https = __require("https");
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
var METHODS = [
|
|
62
|
+
"GET",
|
|
63
|
+
"POST",
|
|
64
|
+
"PUT",
|
|
65
|
+
"DELETE",
|
|
66
|
+
"PATCH",
|
|
67
|
+
"HEAD",
|
|
68
|
+
"OPTIONS",
|
|
69
|
+
"CONNECT",
|
|
70
|
+
"TRACE"
|
|
71
|
+
];
|
|
72
|
+
var STATUS_CODES = {
|
|
73
|
+
100: "Continue",
|
|
74
|
+
101: "Switching Protocols",
|
|
75
|
+
102: "Processing",
|
|
76
|
+
200: "OK",
|
|
77
|
+
201: "Created",
|
|
78
|
+
202: "Accepted",
|
|
79
|
+
203: "Non-Authoritative Information",
|
|
80
|
+
204: "No Content",
|
|
81
|
+
205: "Reset Content",
|
|
82
|
+
206: "Partial Content",
|
|
83
|
+
300: "Multiple Choices",
|
|
84
|
+
301: "Moved Permanently",
|
|
85
|
+
302: "Found",
|
|
86
|
+
303: "See Other",
|
|
87
|
+
304: "Not Modified",
|
|
88
|
+
307: "Temporary Redirect",
|
|
89
|
+
308: "Permanent Redirect",
|
|
90
|
+
400: "Bad Request",
|
|
91
|
+
401: "Unauthorized",
|
|
92
|
+
402: "Payment Required",
|
|
93
|
+
403: "Forbidden",
|
|
94
|
+
404: "Not Found",
|
|
95
|
+
405: "Method Not Allowed",
|
|
96
|
+
406: "Not Acceptable",
|
|
97
|
+
407: "Proxy Authentication Required",
|
|
98
|
+
408: "Request Timeout",
|
|
99
|
+
409: "Conflict",
|
|
100
|
+
410: "Gone",
|
|
101
|
+
411: "Length Required",
|
|
102
|
+
412: "Precondition Failed",
|
|
103
|
+
413: "Payload Too Large",
|
|
104
|
+
414: "URI Too Long",
|
|
105
|
+
415: "Unsupported Media Type",
|
|
106
|
+
416: "Range Not Satisfiable",
|
|
107
|
+
417: "Expectation Failed",
|
|
108
|
+
418: "I'm a teapot",
|
|
109
|
+
422: "Unprocessable Entity",
|
|
110
|
+
425: "Too Early",
|
|
111
|
+
426: "Upgrade Required",
|
|
112
|
+
428: "Precondition Required",
|
|
113
|
+
429: "Too Many Requests",
|
|
114
|
+
431: "Request Header Fields Too Large",
|
|
115
|
+
451: "Unavailable For Legal Reasons",
|
|
116
|
+
500: "Internal Server Error",
|
|
117
|
+
501: "Not Implemented",
|
|
118
|
+
502: "Bad Gateway",
|
|
119
|
+
503: "Service Unavailable",
|
|
120
|
+
504: "Gateway Timeout",
|
|
121
|
+
505: "HTTP Version Not Supported",
|
|
122
|
+
506: "Variant Also Negotiates",
|
|
123
|
+
507: "Insufficient Storage",
|
|
124
|
+
508: "Loop Detected",
|
|
125
|
+
510: "Not Extended",
|
|
126
|
+
511: "Network Authentication Required"
|
|
127
|
+
};
|
|
128
|
+
var IncomingMessage = class extends EventEmitter {
|
|
129
|
+
constructor(req) {
|
|
130
|
+
super();
|
|
131
|
+
this.httpVersion = "1.1";
|
|
132
|
+
this.rawHeaders = [];
|
|
133
|
+
this._req = req;
|
|
134
|
+
if (isNode) {
|
|
135
|
+
this.method = req.method;
|
|
136
|
+
this.url = req.url;
|
|
137
|
+
this.headers = req.headers;
|
|
138
|
+
this.statusCode = req.statusCode;
|
|
139
|
+
this.statusMessage = req.statusMessage;
|
|
140
|
+
this.httpVersion = req.httpVersion;
|
|
141
|
+
this.rawHeaders = req.rawHeaders;
|
|
142
|
+
this.socket = req.socket;
|
|
143
|
+
} else {
|
|
144
|
+
this.method = req.method;
|
|
145
|
+
const urlObj = new URL(req.url);
|
|
146
|
+
this.url = urlObj.pathname + urlObj.search;
|
|
147
|
+
this.headers = req.headers;
|
|
148
|
+
this.rawHeaders = [];
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async text() {
|
|
152
|
+
if (isNode) {
|
|
153
|
+
return new Promise((resolve, reject) => {
|
|
154
|
+
const chunks = [];
|
|
155
|
+
this._req.on("data", (chunk) => chunks.push(chunk));
|
|
156
|
+
this._req.on("end", () => resolve(Buffer.concat(chunks).toString("utf8")));
|
|
157
|
+
this._req.on("error", reject);
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
return this._req.text();
|
|
161
|
+
}
|
|
162
|
+
async json() {
|
|
163
|
+
if (isNode) {
|
|
164
|
+
const text = await this.text();
|
|
165
|
+
return JSON.parse(text);
|
|
166
|
+
}
|
|
167
|
+
return this._req.json();
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
var ServerResponse = class extends EventEmitter {
|
|
171
|
+
constructor(_req, nodeRes) {
|
|
172
|
+
super();
|
|
173
|
+
this.statusCode = 200;
|
|
174
|
+
this.statusMessage = "OK";
|
|
175
|
+
this.headersSent = false;
|
|
176
|
+
this._body = "";
|
|
177
|
+
this._finished = false;
|
|
178
|
+
this._nodeRes = nodeRes;
|
|
179
|
+
this._headers = /* @__PURE__ */ Object.create(null);
|
|
180
|
+
}
|
|
181
|
+
setHeader(name, value) {
|
|
182
|
+
if (this.headersSent) {
|
|
183
|
+
throw new Error("Cannot set headers after they are sent");
|
|
184
|
+
}
|
|
185
|
+
if (isNode && this._nodeRes) {
|
|
186
|
+
this._nodeRes.setHeader(name, value);
|
|
187
|
+
}
|
|
188
|
+
this._headers[name.toLowerCase()] = value;
|
|
189
|
+
return this;
|
|
190
|
+
}
|
|
191
|
+
getHeader(name) {
|
|
192
|
+
if (isNode && this._nodeRes) {
|
|
193
|
+
return this._nodeRes.getHeader(name);
|
|
194
|
+
}
|
|
195
|
+
return this._headers[name.toLowerCase()];
|
|
196
|
+
}
|
|
197
|
+
getHeaders() {
|
|
198
|
+
if (isNode && this._nodeRes) {
|
|
199
|
+
return this._nodeRes.getHeaders();
|
|
200
|
+
}
|
|
201
|
+
return { ...this._headers };
|
|
202
|
+
}
|
|
203
|
+
getHeaderNames() {
|
|
204
|
+
if (isNode && this._nodeRes) {
|
|
205
|
+
return this._nodeRes.getHeaderNames();
|
|
206
|
+
}
|
|
207
|
+
return Object.keys(this._headers);
|
|
208
|
+
}
|
|
209
|
+
hasHeader(name) {
|
|
210
|
+
if (isNode && this._nodeRes) {
|
|
211
|
+
return this._nodeRes.hasHeader(name);
|
|
212
|
+
}
|
|
213
|
+
return name.toLowerCase() in this._headers;
|
|
214
|
+
}
|
|
215
|
+
removeHeader(name) {
|
|
216
|
+
if (this.headersSent) {
|
|
217
|
+
throw new Error("Cannot remove headers after they are sent");
|
|
218
|
+
}
|
|
219
|
+
if (isNode && this._nodeRes) {
|
|
220
|
+
this._nodeRes.removeHeader(name);
|
|
221
|
+
}
|
|
222
|
+
delete this._headers[name.toLowerCase()];
|
|
223
|
+
}
|
|
224
|
+
writeHead(statusCode, statusMessage, headers) {
|
|
225
|
+
if (this.headersSent) {
|
|
226
|
+
throw new Error("Cannot write headers after they are sent");
|
|
227
|
+
}
|
|
228
|
+
this.statusCode = statusCode;
|
|
229
|
+
if (typeof statusMessage === "string") {
|
|
230
|
+
this.statusMessage = statusMessage;
|
|
231
|
+
if (headers) {
|
|
232
|
+
for (const key in headers) {
|
|
233
|
+
this.setHeader(key, headers[key]);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
} else if (statusMessage) {
|
|
237
|
+
for (const key in statusMessage) {
|
|
238
|
+
this.setHeader(key, statusMessage[key]);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
if (isNode && this._nodeRes) {
|
|
242
|
+
if (typeof statusMessage === "string") {
|
|
243
|
+
this._nodeRes.writeHead(statusCode, statusMessage, headers);
|
|
244
|
+
} else {
|
|
245
|
+
this._nodeRes.writeHead(statusCode, statusMessage);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
this.headersSent = true;
|
|
249
|
+
return this;
|
|
250
|
+
}
|
|
251
|
+
write(chunk, encoding, callback) {
|
|
252
|
+
if (typeof encoding === "function") {
|
|
253
|
+
callback = encoding;
|
|
254
|
+
encoding = "utf8";
|
|
255
|
+
}
|
|
256
|
+
if (!this.headersSent) {
|
|
257
|
+
this.writeHead(this.statusCode);
|
|
258
|
+
}
|
|
259
|
+
if (isNode && this._nodeRes) {
|
|
260
|
+
return this._nodeRes.write(chunk, encoding, callback);
|
|
261
|
+
}
|
|
262
|
+
this._body += chunk;
|
|
263
|
+
queueCallback(callback);
|
|
264
|
+
return true;
|
|
265
|
+
}
|
|
266
|
+
end(chunk, encoding, callback) {
|
|
267
|
+
if (this._finished) {
|
|
268
|
+
return this;
|
|
269
|
+
}
|
|
270
|
+
if (typeof chunk === "function") {
|
|
271
|
+
callback = chunk;
|
|
272
|
+
chunk = void 0;
|
|
273
|
+
} else if (typeof encoding === "function") {
|
|
274
|
+
callback = encoding;
|
|
275
|
+
encoding = "utf8";
|
|
276
|
+
}
|
|
277
|
+
if (chunk !== void 0) {
|
|
278
|
+
this.write(chunk, encoding);
|
|
279
|
+
}
|
|
280
|
+
if (!this.headersSent) {
|
|
281
|
+
this.writeHead(this.statusCode);
|
|
282
|
+
}
|
|
283
|
+
this._finished = true;
|
|
284
|
+
if (isNode && this._nodeRes) {
|
|
285
|
+
this._nodeRes.end(callback);
|
|
286
|
+
this.emit("finish");
|
|
287
|
+
} else {
|
|
288
|
+
const response = new Response(this._body, {
|
|
289
|
+
status: this.statusCode,
|
|
290
|
+
statusText: this.statusMessage,
|
|
291
|
+
headers: headersToInit(this._headers)
|
|
292
|
+
});
|
|
293
|
+
if (this._resolve) {
|
|
294
|
+
this._resolve(response);
|
|
295
|
+
}
|
|
296
|
+
queueCallback(callback);
|
|
297
|
+
}
|
|
298
|
+
return this;
|
|
299
|
+
}
|
|
300
|
+
_setResolver(resolve) {
|
|
301
|
+
this._resolve = resolve;
|
|
302
|
+
}
|
|
303
|
+
};
|
|
304
|
+
var Server = class extends EventEmitter {
|
|
305
|
+
constructor(requestListener) {
|
|
306
|
+
super();
|
|
307
|
+
this._listening = false;
|
|
308
|
+
this.requestListener = requestListener;
|
|
309
|
+
}
|
|
310
|
+
listen(...args) {
|
|
311
|
+
let port = 3e3;
|
|
312
|
+
let hostname = "0.0.0.0";
|
|
313
|
+
let callback;
|
|
314
|
+
const firstArg = args[0];
|
|
315
|
+
if (typeof firstArg === "number") {
|
|
316
|
+
port = firstArg;
|
|
317
|
+
const secondArg = args[1];
|
|
318
|
+
if (typeof secondArg === "string") {
|
|
319
|
+
hostname = secondArg;
|
|
320
|
+
callback = args[2] || args[3];
|
|
321
|
+
} else if (typeof secondArg === "function") {
|
|
322
|
+
callback = secondArg;
|
|
323
|
+
}
|
|
324
|
+
} else if (firstArg && typeof firstArg === "object") {
|
|
325
|
+
port = firstArg.port || 3e3;
|
|
326
|
+
hostname = firstArg.hostname || "0.0.0.0";
|
|
327
|
+
callback = args[1];
|
|
328
|
+
}
|
|
329
|
+
const self = this;
|
|
330
|
+
if (isNode) {
|
|
331
|
+
this.nativeServer = http.createServer((req, res) => {
|
|
332
|
+
const incomingMessage = new IncomingMessage(req);
|
|
333
|
+
const serverResponse = new ServerResponse(incomingMessage, res);
|
|
334
|
+
if (self.requestListener) {
|
|
335
|
+
self.requestListener(incomingMessage, serverResponse);
|
|
336
|
+
} else {
|
|
337
|
+
self.emit("request", incomingMessage, serverResponse);
|
|
338
|
+
}
|
|
339
|
+
});
|
|
340
|
+
this.nativeServer.on("upgrade", (req, socket, head) => {
|
|
341
|
+
self.emit("upgrade", req, socket, head);
|
|
342
|
+
});
|
|
343
|
+
this.nativeServer.listen(port, hostname, () => {
|
|
344
|
+
this._listening = true;
|
|
345
|
+
this.emit("listening");
|
|
346
|
+
if (callback) callback();
|
|
347
|
+
});
|
|
348
|
+
this.nativeServer.on("error", (err) => this.emit("error", err));
|
|
349
|
+
this.nativeServer.on("close", () => {
|
|
350
|
+
this._listening = false;
|
|
351
|
+
this.emit("close");
|
|
352
|
+
});
|
|
353
|
+
} else if (isBun) {
|
|
354
|
+
this.nativeServer = Bun.serve({
|
|
355
|
+
port,
|
|
356
|
+
hostname,
|
|
357
|
+
fetch: (req) => {
|
|
358
|
+
const urlObj = new URL(req.url);
|
|
359
|
+
const pathname = urlObj.pathname + urlObj.search;
|
|
360
|
+
let statusCode = 200;
|
|
361
|
+
let statusMessage = "OK";
|
|
362
|
+
let body = "";
|
|
363
|
+
const headers = /* @__PURE__ */ Object.create(null);
|
|
364
|
+
let responseReady = false;
|
|
365
|
+
const incomingMessage = {
|
|
366
|
+
method: req.method,
|
|
367
|
+
url: pathname,
|
|
368
|
+
headers: req.headers,
|
|
369
|
+
httpVersion: "1.1",
|
|
370
|
+
rawHeaders: [],
|
|
371
|
+
_req: req,
|
|
372
|
+
text: () => req.text(),
|
|
373
|
+
json: () => req.json()
|
|
374
|
+
};
|
|
375
|
+
const serverResponse = {
|
|
376
|
+
statusCode: 200,
|
|
377
|
+
statusMessage: "OK",
|
|
378
|
+
headersSent: false,
|
|
379
|
+
_headers: headers,
|
|
380
|
+
setHeader(name, value) {
|
|
381
|
+
headers[name.toLowerCase()] = Array.isArray(value) ? value.join(", ") : String(value);
|
|
382
|
+
return this;
|
|
383
|
+
},
|
|
384
|
+
getHeader(name) {
|
|
385
|
+
return headers[name.toLowerCase()];
|
|
386
|
+
},
|
|
387
|
+
getHeaders() {
|
|
388
|
+
return { ...headers };
|
|
389
|
+
},
|
|
390
|
+
writeHead(status, arg2, arg3) {
|
|
391
|
+
statusCode = status;
|
|
392
|
+
this.statusCode = status;
|
|
393
|
+
this.headersSent = true;
|
|
394
|
+
if (typeof arg2 === "string") {
|
|
395
|
+
statusMessage = arg2;
|
|
396
|
+
this.statusMessage = arg2;
|
|
397
|
+
if (arg3) {
|
|
398
|
+
for (const key in arg3) {
|
|
399
|
+
headers[key.toLowerCase()] = arg3[key];
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
} else if (arg2) {
|
|
403
|
+
for (const key in arg2) {
|
|
404
|
+
headers[key.toLowerCase()] = arg2[key];
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
return this;
|
|
408
|
+
},
|
|
409
|
+
write(chunk) {
|
|
410
|
+
if (!this.headersSent) {
|
|
411
|
+
this.writeHead(statusCode);
|
|
412
|
+
}
|
|
413
|
+
body += chunk;
|
|
414
|
+
return true;
|
|
415
|
+
},
|
|
416
|
+
end(chunk) {
|
|
417
|
+
if (chunk !== void 0) {
|
|
418
|
+
this.write(chunk);
|
|
419
|
+
}
|
|
420
|
+
if (!this.headersSent) {
|
|
421
|
+
this.writeHead(statusCode);
|
|
422
|
+
}
|
|
423
|
+
responseReady = true;
|
|
424
|
+
return this;
|
|
425
|
+
}
|
|
426
|
+
};
|
|
427
|
+
if (self.requestListener) {
|
|
428
|
+
self.requestListener(incomingMessage, serverResponse);
|
|
429
|
+
}
|
|
430
|
+
if (responseReady) {
|
|
431
|
+
return new Response(body, {
|
|
432
|
+
status: statusCode,
|
|
433
|
+
statusText: statusMessage,
|
|
434
|
+
headers
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
return new Promise((resolve) => {
|
|
438
|
+
serverResponse.end = (chunk) => {
|
|
439
|
+
if (chunk !== void 0) {
|
|
440
|
+
body += chunk;
|
|
441
|
+
}
|
|
442
|
+
resolve(new Response(body, {
|
|
443
|
+
status: statusCode,
|
|
444
|
+
statusText: statusMessage,
|
|
445
|
+
headers
|
|
446
|
+
}));
|
|
447
|
+
};
|
|
448
|
+
});
|
|
449
|
+
},
|
|
450
|
+
error: createErrorResponse
|
|
451
|
+
});
|
|
452
|
+
emitListeningWithCallback(this, callback);
|
|
453
|
+
} else if (isDeno) {
|
|
454
|
+
this.nativeServer = Deno.serve({
|
|
455
|
+
port,
|
|
456
|
+
hostname,
|
|
457
|
+
handler: (req) => {
|
|
458
|
+
return new Promise((resolve) => {
|
|
459
|
+
const incomingMessage = new IncomingMessage(req);
|
|
460
|
+
const serverResponse = new ServerResponse();
|
|
461
|
+
serverResponse._setResolver(resolve);
|
|
462
|
+
if (self.requestListener) {
|
|
463
|
+
self.requestListener(incomingMessage, serverResponse);
|
|
464
|
+
} else {
|
|
465
|
+
self.emit("request", incomingMessage, serverResponse);
|
|
466
|
+
}
|
|
467
|
+
});
|
|
468
|
+
},
|
|
469
|
+
onError: (error) => {
|
|
470
|
+
this.emit("error", error);
|
|
471
|
+
return createErrorResponse();
|
|
472
|
+
}
|
|
473
|
+
});
|
|
474
|
+
emitListeningWithCallback(this, callback);
|
|
475
|
+
}
|
|
476
|
+
return this;
|
|
477
|
+
}
|
|
478
|
+
close(callback) {
|
|
479
|
+
if (!this.nativeServer) {
|
|
480
|
+
if (callback) queueMicrotask(() => callback());
|
|
481
|
+
return this;
|
|
482
|
+
}
|
|
483
|
+
if (isNode) {
|
|
484
|
+
this.nativeServer.close(callback);
|
|
485
|
+
} else if (isBun) {
|
|
486
|
+
this.nativeServer.stop();
|
|
487
|
+
closeAndEmit(this, callback);
|
|
488
|
+
} else if (isDeno) {
|
|
489
|
+
this.nativeServer.shutdown();
|
|
490
|
+
closeAndEmit(this, callback);
|
|
491
|
+
}
|
|
492
|
+
return this;
|
|
493
|
+
}
|
|
494
|
+
address() {
|
|
495
|
+
if (!this.nativeServer) return null;
|
|
496
|
+
if (isNode) {
|
|
497
|
+
const addr = this.nativeServer.address();
|
|
498
|
+
if (!addr) return null;
|
|
499
|
+
if (typeof addr === "string") {
|
|
500
|
+
return createAddress(0, addr, "unix");
|
|
501
|
+
}
|
|
502
|
+
return addr;
|
|
503
|
+
} else if (isBun) {
|
|
504
|
+
return createAddress(this.nativeServer.port, this.nativeServer.hostname);
|
|
505
|
+
} else if (isDeno) {
|
|
506
|
+
const addr = this.nativeServer.addr;
|
|
507
|
+
return createAddress(addr.port, addr.hostname);
|
|
508
|
+
}
|
|
509
|
+
return null;
|
|
510
|
+
}
|
|
511
|
+
get listening() {
|
|
512
|
+
return this._listening;
|
|
513
|
+
}
|
|
514
|
+
};
|
|
515
|
+
var ClientRequest = class extends EventEmitter {
|
|
516
|
+
constructor(_url, _options = {}) {
|
|
517
|
+
super();
|
|
518
|
+
}
|
|
519
|
+
write(_chunk) {
|
|
520
|
+
return true;
|
|
521
|
+
}
|
|
522
|
+
end(callback) {
|
|
523
|
+
queueCallback(callback);
|
|
524
|
+
}
|
|
525
|
+
};
|
|
526
|
+
var Agent = class {
|
|
527
|
+
constructor(options) {
|
|
528
|
+
this.options = options;
|
|
529
|
+
}
|
|
530
|
+
};
|
|
531
|
+
function createServer(optionsOrListener, requestListener) {
|
|
532
|
+
return new Server(typeof optionsOrListener === "function" ? optionsOrListener : requestListener);
|
|
533
|
+
}
|
|
534
|
+
function request(url, options, callback) {
|
|
535
|
+
const urlString = typeof url === "string" ? url : url.toString();
|
|
536
|
+
const req = new ClientRequest(urlString, options);
|
|
537
|
+
if (isNode) {
|
|
538
|
+
const urlObj = new URL(urlString);
|
|
539
|
+
const client = urlObj.protocol === "https:" ? https : http;
|
|
540
|
+
const nodeReq = client.request(urlString, {
|
|
541
|
+
method: options?.method || "GET",
|
|
542
|
+
headers: options?.headers,
|
|
543
|
+
timeout: options?.timeout,
|
|
544
|
+
signal: options?.signal
|
|
545
|
+
}, (res) => {
|
|
546
|
+
const incomingMessage = new IncomingMessage(res);
|
|
547
|
+
if (callback) callback(incomingMessage);
|
|
548
|
+
req.emit("response", incomingMessage);
|
|
549
|
+
});
|
|
550
|
+
nodeReq.on("error", (error) => req.emit("error", error));
|
|
551
|
+
nodeReq.end();
|
|
552
|
+
} else {
|
|
553
|
+
queueMicrotask(async () => {
|
|
554
|
+
try {
|
|
555
|
+
const response = await fetch(urlString, {
|
|
556
|
+
method: options?.method || "GET",
|
|
557
|
+
headers: options?.headers,
|
|
558
|
+
signal: options?.signal
|
|
559
|
+
});
|
|
560
|
+
const fetchRequest = new Request(urlString);
|
|
561
|
+
const incomingMessage = new IncomingMessage(fetchRequest);
|
|
562
|
+
incomingMessage.statusCode = response.status;
|
|
563
|
+
incomingMessage.statusMessage = response.statusText;
|
|
564
|
+
if (callback) callback(incomingMessage);
|
|
565
|
+
req.emit("response", incomingMessage);
|
|
566
|
+
} catch (error) {
|
|
567
|
+
req.emit("error", error);
|
|
568
|
+
}
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
return req;
|
|
572
|
+
}
|
|
573
|
+
function get(url, options, callback) {
|
|
574
|
+
return request(url, { ...options, method: "GET" }, callback);
|
|
575
|
+
}
|
|
576
|
+
function getRuntime() {
|
|
577
|
+
return runtime;
|
|
578
|
+
}
|
|
579
|
+
var http_default = {
|
|
580
|
+
createServer,
|
|
581
|
+
request,
|
|
582
|
+
get,
|
|
583
|
+
Server,
|
|
584
|
+
IncomingMessage,
|
|
585
|
+
ServerResponse,
|
|
586
|
+
Agent,
|
|
587
|
+
ClientRequest,
|
|
588
|
+
METHODS,
|
|
589
|
+
STATUS_CODES,
|
|
590
|
+
getRuntime
|
|
591
|
+
};
|
|
592
|
+
export {
|
|
593
|
+
Agent,
|
|
594
|
+
ClientRequest,
|
|
595
|
+
IncomingMessage,
|
|
596
|
+
METHODS,
|
|
597
|
+
STATUS_CODES,
|
|
598
|
+
Server,
|
|
599
|
+
ServerResponse,
|
|
600
|
+
createServer,
|
|
601
|
+
http_default as default,
|
|
602
|
+
get,
|
|
603
|
+
getRuntime,
|
|
604
|
+
request
|
|
605
|
+
};
|
package/dist/https.d.mts
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import { IncomingMessage, ServerResponse, RequestListener, RequestOptions } from './http.mjs';
|
|
3
|
+
import 'node:events';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* HTTPS module with unified API across runtimes
|
|
7
|
+
* Optimized for maximum performance across Node.js, Bun, and Deno
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* HTTPS Server options
|
|
12
|
+
*/
|
|
13
|
+
interface ServerOptions {
|
|
14
|
+
IncomingMessage?: typeof IncomingMessage;
|
|
15
|
+
ServerResponse?: typeof ServerResponse;
|
|
16
|
+
key?: string | Buffer | Array<string | Buffer>;
|
|
17
|
+
cert?: string | Buffer | Array<string | Buffer>;
|
|
18
|
+
ca?: string | Buffer | Array<string | Buffer>;
|
|
19
|
+
passphrase?: string;
|
|
20
|
+
pfx?: string | Buffer | Array<string | Buffer>;
|
|
21
|
+
dhparam?: string | Buffer;
|
|
22
|
+
ecdhCurve?: string;
|
|
23
|
+
honorCipherOrder?: boolean;
|
|
24
|
+
requestCert?: boolean;
|
|
25
|
+
rejectUnauthorized?: boolean;
|
|
26
|
+
NPNProtocols?: string[] | Buffer[] | Uint8Array[] | Buffer | Uint8Array;
|
|
27
|
+
ALPNProtocols?: string[] | Buffer[] | Uint8Array[] | Buffer | Uint8Array;
|
|
28
|
+
SNICallback?: (servername: string, cb: (err: Error | null, ctx?: any) => void) => void;
|
|
29
|
+
sessionTimeout?: number;
|
|
30
|
+
ticketKeys?: Buffer;
|
|
31
|
+
tls?: {
|
|
32
|
+
key?: string | Buffer;
|
|
33
|
+
cert?: string | Buffer;
|
|
34
|
+
ca?: string | Buffer;
|
|
35
|
+
passphrase?: string;
|
|
36
|
+
dhParamsFile?: string;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* HTTPS Server - Optimized for each runtime
|
|
41
|
+
*/
|
|
42
|
+
declare class Server extends EventEmitter {
|
|
43
|
+
private nativeServer?;
|
|
44
|
+
private requestListener?;
|
|
45
|
+
_listening: boolean;
|
|
46
|
+
private options;
|
|
47
|
+
constructor(options: ServerOptions, requestListener?: RequestListener);
|
|
48
|
+
listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this;
|
|
49
|
+
listen(port?: number, hostname?: string, listeningListener?: () => void): this;
|
|
50
|
+
listen(port?: number, listeningListener?: () => void): this;
|
|
51
|
+
listen(options?: {
|
|
52
|
+
port?: number;
|
|
53
|
+
hostname?: string;
|
|
54
|
+
backlog?: number;
|
|
55
|
+
}, listeningListener?: () => void): this;
|
|
56
|
+
close(callback?: (err?: Error) => void): this;
|
|
57
|
+
address(): {
|
|
58
|
+
port: number;
|
|
59
|
+
family: string;
|
|
60
|
+
address: string;
|
|
61
|
+
} | null;
|
|
62
|
+
get listening(): boolean;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Client request
|
|
66
|
+
*/
|
|
67
|
+
declare class ClientRequest extends EventEmitter {
|
|
68
|
+
constructor(_url: string | URL, _options?: RequestOptions);
|
|
69
|
+
write(_chunk: any): boolean;
|
|
70
|
+
end(callback?: () => void): void;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* HTTPS Agent
|
|
74
|
+
*/
|
|
75
|
+
declare class Agent {
|
|
76
|
+
options?: any | undefined;
|
|
77
|
+
constructor(options?: any | undefined);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Create HTTPS server
|
|
81
|
+
*/
|
|
82
|
+
declare function createServer(options: ServerOptions, requestListener?: RequestListener): Server;
|
|
83
|
+
/**
|
|
84
|
+
* Make HTTPS request - optimized per runtime
|
|
85
|
+
*/
|
|
86
|
+
declare function request(url: string | URL, options?: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest;
|
|
87
|
+
/**
|
|
88
|
+
* Make HTTPS GET request
|
|
89
|
+
*/
|
|
90
|
+
declare function get(url: string | URL, options?: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest;
|
|
91
|
+
/**
|
|
92
|
+
* Get current runtime
|
|
93
|
+
*/
|
|
94
|
+
declare function getRuntime(): 'node' | 'bun' | 'deno';
|
|
95
|
+
/**
|
|
96
|
+
* Default export
|
|
97
|
+
*/
|
|
98
|
+
declare const _default: {
|
|
99
|
+
createServer: typeof createServer;
|
|
100
|
+
request: typeof request;
|
|
101
|
+
get: typeof get;
|
|
102
|
+
Server: typeof Server;
|
|
103
|
+
Agent: typeof Agent;
|
|
104
|
+
ClientRequest: typeof ClientRequest;
|
|
105
|
+
getRuntime: typeof getRuntime;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
export { Agent, ClientRequest, Server, type ServerOptions, createServer, _default as default, get, getRuntime, request };
|