tezx 1.0.74 → 1.0.76-beta

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.
Files changed (44) hide show
  1. package/adapter/bun.d.ts +29 -0
  2. package/adapter/deno.d.ts +30 -0
  3. package/adapter/index.d.ts +1 -1
  4. package/adapter/index.js +1 -1
  5. package/adapter/node/index.d.ts +47 -0
  6. package/adapter/{node.js → node/index.js} +2 -2
  7. package/cjs/adapter/index.js +1 -1
  8. package/cjs/adapter/{node.js → node/index.js} +2 -2
  9. package/cjs/core/context.js +13 -97
  10. package/cjs/core/environment.js +0 -8
  11. package/cjs/core/request.js +69 -25
  12. package/cjs/core/router.js +5 -0
  13. package/cjs/core/server.js +6 -5
  14. package/cjs/index.js +1 -1
  15. package/cjs/middleware/cors.js +1 -1
  16. package/cjs/middleware/sanitizeHeader.js +2 -2
  17. package/cjs/utils/formData.js +0 -235
  18. package/cjs/utils/httpStatusMap.js +68 -0
  19. package/cjs/utils/staticFile.js +4 -1
  20. package/cjs/utils/toWebRequest.js +35 -0
  21. package/core/context.d.ts +5 -6
  22. package/core/context.js +14 -98
  23. package/core/environment.d.ts +0 -2
  24. package/core/environment.js +0 -8
  25. package/core/request.d.ts +11 -32
  26. package/core/request.js +70 -26
  27. package/core/router.d.ts +29 -0
  28. package/core/router.js +5 -0
  29. package/core/server.js +5 -4
  30. package/index.js +1 -1
  31. package/middleware/cors.js +1 -1
  32. package/middleware/sanitizeHeader.js +2 -2
  33. package/package.json +1 -1
  34. package/utils/formData.d.ts +0 -5
  35. package/utils/formData.js +0 -231
  36. package/utils/httpStatusMap.d.ts +1 -0
  37. package/utils/httpStatusMap.js +65 -0
  38. package/utils/staticFile.js +4 -1
  39. package/utils/toWebRequest.d.ts +11 -0
  40. package/utils/toWebRequest.js +32 -0
  41. package/adapter/node.d.ts +0 -19
  42. package/cjs/core/header.js +0 -92
  43. package/core/header.d.ts +0 -77
  44. package/core/header.js +0 -88
@@ -0,0 +1,65 @@
1
+ export const httpStatusMap = {
2
+ 100: "Continue",
3
+ 101: "Switching Protocols",
4
+ 102: "Processing",
5
+ 103: "Early Hints",
6
+ 200: "OK",
7
+ 201: "Created",
8
+ 202: "Accepted",
9
+ 203: "Non-Authoritative Information",
10
+ 204: "No Content",
11
+ 205: "Reset Content",
12
+ 206: "Partial Content",
13
+ 207: "Multi-Status",
14
+ 208: "Already Reported",
15
+ 226: "IM Used",
16
+ 300: "Multiple Choices",
17
+ 301: "Moved Permanently",
18
+ 302: "Found",
19
+ 303: "See Other",
20
+ 304: "Not Modified",
21
+ 305: "Use Proxy",
22
+ 306: "Switch Proxy",
23
+ 307: "Temporary Redirect",
24
+ 308: "Permanent Redirect",
25
+ 400: "Bad Request",
26
+ 401: "Unauthorized",
27
+ 402: "Payment Required",
28
+ 403: "Forbidden",
29
+ 404: "Not Found",
30
+ 405: "Method Not Allowed",
31
+ 406: "Not Acceptable",
32
+ 407: "Proxy Authentication Required",
33
+ 408: "Request Timeout",
34
+ 409: "Conflict",
35
+ 410: "Gone",
36
+ 411: "Length Required",
37
+ 412: "Precondition Failed",
38
+ 413: "Payload Too Large",
39
+ 414: "URI Too Long",
40
+ 415: "Unsupported Media Type",
41
+ 416: "Range Not Satisfiable",
42
+ 417: "Expectation Failed",
43
+ 418: "I'm a Teapot",
44
+ 421: "Misdirected Request",
45
+ 422: "Unprocessable Entity",
46
+ 423: "Locked",
47
+ 424: "Failed Dependency",
48
+ 425: "Too Early",
49
+ 426: "Upgrade Required",
50
+ 428: "Precondition Required",
51
+ 429: "Too Many Requests",
52
+ 431: "Request Header Fields Too Large",
53
+ 451: "Unavailable For Legal Reasons",
54
+ 500: "Internal Server Error",
55
+ 501: "Not Implemented",
56
+ 502: "Bad Gateway",
57
+ 503: "Service Unavailable",
58
+ 504: "Gateway Timeout",
59
+ 505: "HTTP Version Not Supported",
60
+ 506: "Variant Also Negotiates",
61
+ 507: "Insufficient Storage",
62
+ 508: "Loop Detected",
63
+ 510: "Not Extended",
64
+ 511: "Network Authentication Required",
65
+ };
@@ -145,7 +145,10 @@ export async function getFiles(dir, basePath = "/", ref, option) {
145
145
  ctx.headers.set("Cache-Control", option.cacheControl);
146
146
  }
147
147
  if (option.headers) {
148
- ctx.headers.add(option.headers);
148
+ for (const key in option.headers) {
149
+ let value = option.headers?.[key];
150
+ ctx.headers.set(key, value);
151
+ }
149
152
  }
150
153
  return ctx.sendFile(r.file);
151
154
  });
@@ -0,0 +1,11 @@
1
+ import { IncomingMessage } from "node:http";
2
+ /**
3
+ * Convert Node.js IncomingMessage to a standard Web Fetch API Request with full support:
4
+ * - Absolute URL resolution
5
+ * - Streaming body (duplex)
6
+ * - AbortSignal linked to client disconnect
7
+ *
8
+ * @param {IncomingMessage} req Node.js HTTP request object
9
+ * @returns {Request} Web Fetch API Request instance
10
+ */
11
+ export declare function toWebRequest(req: IncomingMessage, method?: string): Request;
@@ -0,0 +1,32 @@
1
+ import { Readable } from "node:stream";
2
+ export function toWebRequest(req, method = "GET") {
3
+ const headers = {};
4
+ for (const [key, value] of Object.entries(req.headers)) {
5
+ if (Array.isArray(value)) {
6
+ headers[key] = value.join(", ");
7
+ }
8
+ else if (typeof value === "string") {
9
+ headers[key] = value;
10
+ }
11
+ }
12
+ const isEncrypted = (req.socket && req.socket.encrypted) || false;
13
+ const protocol = isEncrypted ? "https:" : "http:";
14
+ let host = "localhost";
15
+ const hostHeader = req.headers.host;
16
+ if (typeof hostHeader === "string") {
17
+ host = hostHeader;
18
+ }
19
+ const urlStr = req.url ?? "/";
20
+ const fullUrl = new URL(urlStr, `${protocol}//${host}`);
21
+ const hasBody = !["GET", "HEAD"].includes(method.toUpperCase());
22
+ const body = hasBody ? Readable.toWeb(req) : undefined;
23
+ const abortController = new AbortController();
24
+ req?.once("close", () => abortController.abort());
25
+ return new Request(fullUrl.href, {
26
+ method,
27
+ headers,
28
+ body,
29
+ signal: abortController.signal,
30
+ duplex: hasBody ? "half" : undefined,
31
+ });
32
+ }
package/adapter/node.d.ts DELETED
@@ -1,19 +0,0 @@
1
- import type { ServerOptions } from "node:http";
2
- import type { TlsOptions } from "node:tls";
3
- import { TezX } from "../core/server.js";
4
- type UnixSocketOptions = ServerOptions & {
5
- unix?: string;
6
- enableSSL?: false;
7
- };
8
- type SSLOptions = ServerOptions & TlsOptions & {
9
- enableSSL: true;
10
- };
11
- type TezXServerOptions = UnixSocketOptions | SSLOptions;
12
- export declare function nodeAdapter<T extends Record<string, any> = {}>(TezX: TezX<T>, options?: TezXServerOptions): {
13
- listen: {
14
- (callback?: () => void): any;
15
- (port?: number): any;
16
- (port?: number, callback?: () => void): any;
17
- };
18
- };
19
- export {};
@@ -1,92 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HeadersParser = void 0;
4
- class HeadersParser {
5
- headers = new Map();
6
- constructor(init) {
7
- if (init) {
8
- this.add(init);
9
- }
10
- }
11
- add(headers) {
12
- if (Array.isArray(headers)) {
13
- for (const [key, value] of headers) {
14
- this.set(key, value);
15
- }
16
- }
17
- else if (typeof Headers !== "undefined" && headers instanceof Headers) {
18
- for (const [key, value] of headers.entries()) {
19
- this.set(key, value);
20
- }
21
- }
22
- else if (typeof headers === "object") {
23
- for (const key in headers) {
24
- if (Object.prototype.hasOwnProperty.call(headers, key)) {
25
- this.set(key, headers[key]);
26
- }
27
- }
28
- }
29
- return this;
30
- }
31
- set(key, value) {
32
- this.headers.set(key.toLowerCase(), Array.isArray(value) ? value : [value]);
33
- return this;
34
- }
35
- clear() {
36
- this.headers.clear();
37
- return this;
38
- }
39
- get(key) {
40
- const values = this.headers.get(key.toLowerCase());
41
- return values ? values[0] : undefined;
42
- }
43
- getAll(key) {
44
- return this.headers.get(key.toLowerCase()) || [];
45
- }
46
- has(key) {
47
- return this.headers.has(key.toLowerCase());
48
- }
49
- delete(key) {
50
- return this.headers.delete(key.toLowerCase());
51
- }
52
- append(key, value) {
53
- const lowerKey = key.toLowerCase();
54
- if (this.headers.has(lowerKey)) {
55
- this.headers.get(lowerKey).push(value);
56
- }
57
- else {
58
- this.headers.set(lowerKey, [value]);
59
- }
60
- return this;
61
- }
62
- entries() {
63
- return this.headers.entries();
64
- }
65
- keys() {
66
- return this.headers.keys();
67
- }
68
- values() {
69
- return this.headers.values();
70
- }
71
- forEach(callback) {
72
- for (const [key, value] of this.headers) {
73
- callback(value, key);
74
- }
75
- }
76
- toObject() {
77
- const obj = {};
78
- for (const [key, value] of this.headers.entries()) {
79
- obj[key] = value.length > 1 ? value : value[0];
80
- }
81
- return obj;
82
- }
83
- toJSON() {
84
- const obj = {};
85
- for (const [key, value] of this.headers.entries()) {
86
- obj[key] = Array.isArray(value) ? value.join(", ") : value;
87
- }
88
- return obj;
89
- }
90
- }
91
- exports.HeadersParser = HeadersParser;
92
- Object.defineProperty(HeadersParser, "name", { value: "Headers" });
package/core/header.d.ts DELETED
@@ -1,77 +0,0 @@
1
- export declare class HeadersParser {
2
- private headers;
3
- constructor(init?: [string, string | string[]][] | Record<string, string>);
4
- /**
5
- * Adds multiple headers to the parser.
6
- * @param headers - Headers as an array of tuples or a record object.
7
- */
8
- add(headers: [string, string | string[]][] | Record<string, string>): this;
9
- /**
10
- * Sets a header value.
11
- * @param key - Header name.
12
- * @param value - Header value(s).
13
- */
14
- set(key: string, value: string | string[]): this;
15
- clear(): this;
16
- /**
17
- * Retrieves the first value of a header.
18
- * @param key - Header name.
19
- * @returns The first header value or undefined if not found.
20
- */
21
- get(key: string): string | undefined;
22
- /**
23
- * Retrieves all values of a header.
24
- * @param key - Header name.
25
- * @returns An array of header values.
26
- */
27
- getAll(key: string): string[];
28
- /**
29
- * Checks if a header exists.
30
- * @param key - Header name.
31
- * @returns True if the header exists, false otherwise.
32
- */
33
- has(key: string): boolean;
34
- /**
35
- * Deletes a header.
36
- * @param key - Header name.
37
- * @returns True if deleted successfully, false otherwise.
38
- */
39
- delete(key: string): boolean;
40
- /**
41
- * Appends a value to an existing header or creates a new one.
42
- * @param key - Header name.
43
- * @param value - Value to append.
44
- */
45
- append(key: string, value: string): this;
46
- /**
47
- * Returns an iterator over header entries.
48
- * @returns IterableIterator of header key-value pairs.
49
- */
50
- entries(): IterableIterator<[string, string[]]>;
51
- /**
52
- * Returns an iterator over header keys.
53
- * @returns IterableIterator of header names.
54
- */
55
- keys(): IterableIterator<string>;
56
- /**
57
- * Returns an iterator over header values.
58
- * @returns IterableIterator of header values arrays.
59
- */
60
- values(): IterableIterator<string[]>;
61
- /**
62
- * Iterates over headers and executes a callback function.
63
- * @param callback - Function to execute for each header.
64
- */
65
- forEach(callback: (value: string[], key: string) => void): void;
66
- /**
67
- * Converts headers into a plain object.
68
- * @returns A record of headers where single-value headers are returned as a string.
69
- */
70
- toObject(): Record<string, string | string[]>;
71
- /**
72
- * Converts headers to a JSON-safe plain object (only single string values).
73
- * Multi-value headers are joined by commas.
74
- * @returns A record of headers with string values.
75
- */
76
- toJSON(): Record<string, string>;
77
- }
package/core/header.js DELETED
@@ -1,88 +0,0 @@
1
- export class HeadersParser {
2
- headers = new Map();
3
- constructor(init) {
4
- if (init) {
5
- this.add(init);
6
- }
7
- }
8
- add(headers) {
9
- if (Array.isArray(headers)) {
10
- for (const [key, value] of headers) {
11
- this.set(key, value);
12
- }
13
- }
14
- else if (typeof Headers !== "undefined" && headers instanceof Headers) {
15
- for (const [key, value] of headers.entries()) {
16
- this.set(key, value);
17
- }
18
- }
19
- else if (typeof headers === "object") {
20
- for (const key in headers) {
21
- if (Object.prototype.hasOwnProperty.call(headers, key)) {
22
- this.set(key, headers[key]);
23
- }
24
- }
25
- }
26
- return this;
27
- }
28
- set(key, value) {
29
- this.headers.set(key.toLowerCase(), Array.isArray(value) ? value : [value]);
30
- return this;
31
- }
32
- clear() {
33
- this.headers.clear();
34
- return this;
35
- }
36
- get(key) {
37
- const values = this.headers.get(key.toLowerCase());
38
- return values ? values[0] : undefined;
39
- }
40
- getAll(key) {
41
- return this.headers.get(key.toLowerCase()) || [];
42
- }
43
- has(key) {
44
- return this.headers.has(key.toLowerCase());
45
- }
46
- delete(key) {
47
- return this.headers.delete(key.toLowerCase());
48
- }
49
- append(key, value) {
50
- const lowerKey = key.toLowerCase();
51
- if (this.headers.has(lowerKey)) {
52
- this.headers.get(lowerKey).push(value);
53
- }
54
- else {
55
- this.headers.set(lowerKey, [value]);
56
- }
57
- return this;
58
- }
59
- entries() {
60
- return this.headers.entries();
61
- }
62
- keys() {
63
- return this.headers.keys();
64
- }
65
- values() {
66
- return this.headers.values();
67
- }
68
- forEach(callback) {
69
- for (const [key, value] of this.headers) {
70
- callback(value, key);
71
- }
72
- }
73
- toObject() {
74
- const obj = {};
75
- for (const [key, value] of this.headers.entries()) {
76
- obj[key] = value.length > 1 ? value : value[0];
77
- }
78
- return obj;
79
- }
80
- toJSON() {
81
- const obj = {};
82
- for (const [key, value] of this.headers.entries()) {
83
- obj[key] = Array.isArray(value) ? value.join(", ") : value;
84
- }
85
- return obj;
86
- }
87
- }
88
- Object.defineProperty(HeadersParser, "name", { value: "Headers" });