@bepalo/router 1.0.3

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 (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +557 -0
  3. package/dist/cjs/helpers.d.ts +290 -0
  4. package/dist/cjs/helpers.d.ts.map +1 -0
  5. package/dist/cjs/helpers.js +691 -0
  6. package/dist/cjs/helpers.js.map +1 -0
  7. package/dist/cjs/index.d.ts +5 -0
  8. package/dist/cjs/index.d.ts.map +1 -0
  9. package/dist/cjs/index.js +21 -0
  10. package/dist/cjs/index.js.map +1 -0
  11. package/dist/cjs/list.d.ts +166 -0
  12. package/dist/cjs/list.d.ts.map +1 -0
  13. package/dist/cjs/list.js +483 -0
  14. package/dist/cjs/list.js.map +1 -0
  15. package/dist/cjs/middlewares.d.ts +251 -0
  16. package/dist/cjs/middlewares.d.ts.map +1 -0
  17. package/dist/cjs/middlewares.js +359 -0
  18. package/dist/cjs/middlewares.js.map +1 -0
  19. package/dist/cjs/router.d.ts +333 -0
  20. package/dist/cjs/router.d.ts.map +1 -0
  21. package/dist/cjs/router.js +659 -0
  22. package/dist/cjs/router.js.map +1 -0
  23. package/dist/cjs/tree.d.ts +18 -0
  24. package/dist/cjs/tree.d.ts.map +1 -0
  25. package/dist/cjs/tree.js +162 -0
  26. package/dist/cjs/tree.js.map +1 -0
  27. package/dist/cjs/types.d.ts +127 -0
  28. package/dist/cjs/types.d.ts.map +1 -0
  29. package/dist/cjs/types.js +3 -0
  30. package/dist/cjs/types.js.map +1 -0
  31. package/dist/cjs/upload-stream.d.ts +105 -0
  32. package/dist/cjs/upload-stream.d.ts.map +1 -0
  33. package/dist/cjs/upload-stream.js +417 -0
  34. package/dist/cjs/upload-stream.js.map +1 -0
  35. package/dist/helpers.d.ts +290 -0
  36. package/dist/helpers.d.ts.map +1 -0
  37. package/dist/helpers.js +691 -0
  38. package/dist/helpers.js.map +1 -0
  39. package/dist/index.d.ts +5 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +21 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/list.d.ts +166 -0
  44. package/dist/list.d.ts.map +1 -0
  45. package/dist/list.js +483 -0
  46. package/dist/list.js.map +1 -0
  47. package/dist/middlewares.d.ts +251 -0
  48. package/dist/middlewares.d.ts.map +1 -0
  49. package/dist/middlewares.js +359 -0
  50. package/dist/middlewares.js.map +1 -0
  51. package/dist/router.d.ts +333 -0
  52. package/dist/router.d.ts.map +1 -0
  53. package/dist/router.js +659 -0
  54. package/dist/router.js.map +1 -0
  55. package/dist/tree.d.ts +18 -0
  56. package/dist/tree.d.ts.map +1 -0
  57. package/dist/tree.js +162 -0
  58. package/dist/tree.js.map +1 -0
  59. package/dist/types.d.ts +127 -0
  60. package/dist/types.d.ts.map +1 -0
  61. package/dist/types.js +3 -0
  62. package/dist/types.js.map +1 -0
  63. package/dist/upload-stream.d.ts +105 -0
  64. package/dist/upload-stream.d.ts.map +1 -0
  65. package/dist/upload-stream.js +417 -0
  66. package/dist/upload-stream.js.map +1 -0
  67. package/package.json +51 -0
@@ -0,0 +1,290 @@
1
+ export * from "./upload-stream.js";
2
+ type SURecord = Record<string, unknown>;
3
+ type SSRecord = Record<string, string>;
4
+ export interface SocketAddress {
5
+ address: string;
6
+ family: string;
7
+ port: number;
8
+ }
9
+ export type CTXAddress = {
10
+ address: SocketAddress;
11
+ };
12
+ export declare function getHttpStatusText(code: number): "Continue" | "Switching Protocols" | "Processing" | "Early Hints" | "OK" | "Created" | "Accepted" | "Non-Authoritative Information" | "No Content" | "Reset Content" | "Partial Content" | "Multi-Status" | "Already Reported" | "IM Used" | "Multiple Choices" | "Moved Permanently" | "Found" | "See Other" | "Not Modified" | "Use Proxy" | "Temporary Redirect" | "Permanent Redirect" | "Bad Request" | "Unauthorized" | "Payment Required" | "Forbidden" | "Not Found" | "Method Not Allowed" | "Not Acceptable" | "Proxy Authentication Required" | "Request Timeout" | "Conflict" | "Gone" | "Length Required" | "Precondition Failed" | "Payload Too Large" | "URI Too Long" | "Unsupported Media Type" | "Range Not Satisfiable" | "Expectation Failed" | "I'm a teapot" | "Misdirected Request" | "Unprocessable Entity" | "Locked" | "Failed Dependency" | "Too Early" | "Upgrade Required" | "Precondition Required" | "Too Many Requests" | "Request Header Fields Too Large" | "Unavailable For Legal Reasons" | "Internal Server Error" | "Not Implemented" | "Bad Gateway" | "Service Unavailable" | "Gateway Timeout" | "HTTP Version Not Supported" | "Variant Also Negotiates" | "Insufficient Storage" | "Loop Detected" | "Not Extended" | "Network Authentication Required" | "Page Expired" | "Enhance Your Calm" | "Blocked by Windows Parental Controls" | "Invalid Token" | "Token Required" | "Bandwidth Limit Exceeded" | "Invalid SSL Certificate" | "Site is overloaded" | "Site is frozen" | "Network Read Timeout Error" | "Network Connect Timeout Error" | "Informational Response" | "Successful Response" | "Redirection Message" | "Client Error Response" | "Server Error Response" | "Unknown Status Code";
13
+ /**
14
+ * Creates a Response with the specified status code.
15
+ * Defaults to text/plain content-type if not provided in init.headers.
16
+ * @param {number} status - The HTTP status code
17
+ * @param {string|null} [content] - The response body content
18
+ * @param {ResponseInit} [init] - Additional response initialization options
19
+ * @returns {Response} A Response object
20
+ * @example
21
+ * status(200, "Success");
22
+ * status(404, "Not Found");
23
+ * status(204, null); // No content response
24
+ */
25
+ export declare const status: (status: number, content?: string | null, init?: ResponseInit) => Response;
26
+ /**
27
+ * Creates a text/plain Response.
28
+ * Defaults to status 200 and text/plain content-type if not specified.
29
+ * @param {string} content - The text content to return
30
+ * @param {ResponseInit} [init] - Additional response initialization options
31
+ * @returns {Response} A Response object with text/plain content-type
32
+ * @example
33
+ * text("Hello, world!");
34
+ * text("Error occurred", { status: 500 });
35
+ */
36
+ export declare const text: (content: string, init?: ResponseInit) => Response;
37
+ /**
38
+ * Creates an HTML Response.
39
+ * Defaults to status 200 and text/html content-type if not specified.
40
+ * @param {string} content - The HTML content to return
41
+ * @param {ResponseInit} [init] - Additional response initialization options
42
+ * @returns {Response} A Response object with text/html content-type
43
+ * @example
44
+ * html("<h1>Hello</h1>");
45
+ * html("<p>Not Found</p>", { status: 404 });
46
+ */
47
+ export declare const html: (content: string, init?: ResponseInit) => Response;
48
+ /**
49
+ * Creates a JSON Response.
50
+ * Defaults to status 200 and application/json content-type if not specified.
51
+ * Uses Response.json() internally which automatically serializes the body.
52
+ * @param {any} body - The data to serialize as JSON
53
+ * @param {ResponseInit} [init] - Additional response initialization options
54
+ * @returns {Response} A Response object with application/json content-type
55
+ * @example
56
+ * json({ message: "Success" });
57
+ * json({ error: "Not found" }, { status: 404 });
58
+ */
59
+ export declare const json: (body: any, init?: ResponseInit) => Response;
60
+ /**
61
+ * Creates a Response from a Blob.
62
+ * Automatically sets content-type from blob.type or defaults to application/octet-stream.
63
+ * Also sets content-length header.
64
+ * @param {Blob} blob - The blob data to return
65
+ * @param {ResponseInit} [init] - Additional response initialization options
66
+ * @returns {Response} A Response object with appropriate content-type
67
+ * @example
68
+ * const blob = new Blob(["file content"], { type: "text/plain" });
69
+ * blob(blob);
70
+ */
71
+ export declare const blob: (blob: Blob, init?: ResponseInit) => Response;
72
+ /**
73
+ * Creates a Response from a Blob or ArrayBuffer with application/octet-stream content-type.
74
+ * Forces octet-stream content-type.
75
+ * Also sets content-length header.
76
+ * @param {Blob|ArrayBuffer} octetStream - The blob data to return
77
+ * @param {ResponseInit} [init] - Additional response initialization options
78
+ * @returns {Response} A Response object with application/octet-stream content-type
79
+ * @example
80
+ * const blob = new Blob([binaryData]);
81
+ * octetStream(blob);
82
+ */
83
+ export declare const octetStream: (octet: Blob | ArrayBuffer | ReadableStream, init?: ResponseInit) => Response;
84
+ /**
85
+ * Creates a Response from FormData.
86
+ * @param {FormData} [formData] - The form data to return
87
+ * @param {ResponseInit} [init] - Additional response initialization options
88
+ * @returns {Response} A Response object
89
+ * @example
90
+ * const form = new FormData();
91
+ * form.append("key", "value");
92
+ * formData(form);
93
+ */
94
+ export declare const formData: (formData?: FormData, init?: ResponseInit) => Response;
95
+ /**
96
+ * Creates a Response from URLSearchParams with application/x-www-form-urlencoded content-type.
97
+ * @param {URLSearchParams} [usp] - The URL search parameters to return
98
+ * @param {ResponseInit} [init] - Additional response initialization options
99
+ * @returns {Response} A Response object with application/x-www-form-urlencoded content-type
100
+ * @example
101
+ * const params = new URLSearchParams({ q: "search term" });
102
+ * usp(params);
103
+ */
104
+ export declare const usp: (usp?: URLSearchParams, init?: ResponseInit) => Response;
105
+ /**
106
+ * Creates a Response from various body types with automatic content-type detection.
107
+ * Supports strings, objects (JSON), Blobs, ArrayBuffers, FormData, URLSearchParams, and ReadableStreams.
108
+ * @param {BodyInit} [body] - The body content to return
109
+ * @param {ResponseInit} [init] - Additional response initialization options
110
+ * @returns {Response} A Response object with appropriate content-type
111
+ * @example
112
+ * send("text"); // text/plain
113
+ * send({ message: "success" }); // application/json
114
+ * send(new Blob([])); // blob.type || application/octet-stream
115
+ * send(new FormData()); // multipart/form-data
116
+ * send(new URLSearchParams()); // application/x-www-form-urlencoded
117
+ */
118
+ export declare const send: (body?: BodyInit, init?: ResponseInit) => Response;
119
+ /**
120
+ * Options for setting cookies.
121
+ * @typedef {Object} CookieOptions
122
+ * @property {string} [path] - The path for which the cookie is valid
123
+ * @property {string} [domain] - The domain for which the cookie is valid
124
+ * @property {Date|number|string} [expires] - Expiration date of the cookie
125
+ * @property {number} [maxAge] - Maximum age of the cookie in seconds
126
+ * @property {boolean} [httpOnly] - If true, the cookie is not accessible via JavaScript
127
+ * @property {boolean} [secure] - If true, the cookie is only sent over HTTPS
128
+ * @property {"Strict"|"Lax"|"None"} [sameSite] - SameSite attribute for the cookie
129
+ */
130
+ export interface CookieOptions {
131
+ path?: string;
132
+ domain?: string;
133
+ expires?: Date | number | string;
134
+ maxAge?: number;
135
+ httpOnly?: boolean;
136
+ secure?: boolean;
137
+ sameSite?: "Strict" | "Lax" | "None";
138
+ }
139
+ /**
140
+ * Tuple representing a cookie header (key-value pair for Set-Cookie header).
141
+ * @typedef {[string, string]} CookieTuple
142
+ */
143
+ type CookieTuple = [string, string];
144
+ /**
145
+ * Creates a Set-Cookie header tuple with the given name, value, and options.
146
+ * @param {string} name - The name of the cookie
147
+ * @param {string} value - The value of the cookie
148
+ * @param {CookieOptions} [options] - Cookie configuration options
149
+ * @returns {CookieTuple} A tuple containing the header name "Set-Cookie" and the cookie string
150
+ * @example
151
+ * const cookie = setCookie("session", "abc123", { httpOnly: true, secure: true });
152
+ * // Returns: ["Set-Cookie", "session=abc123; HttpOnly; Secure"]
153
+ */
154
+ export declare const setCookie: (name: string, value: string, options?: CookieOptions) => CookieTuple;
155
+ /**
156
+ * Creates a Set-Cookie header tuple to clear/remove a cookie.
157
+ * Sets the cookie with an empty value and an expired date.
158
+ * @param {string} name - The name of the cookie to clear
159
+ * @param {CookieOptions} [options] - Cookie configuration options (path/domain must match original cookie)
160
+ * @returns {CookieTuple} A tuple containing the header name "Set-Cookie" and the cookie clearing string
161
+ * @example
162
+ * const cookie = clearCookie("session", { path: "/" });
163
+ * // Returns: ["Set-Cookie", "session=; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Path=/"]
164
+ */
165
+ export declare const clearCookie: (name: string, options?: CookieOptions) => CookieTuple;
166
+ /**
167
+ * Parses cookies from a Request object's Cookie header.
168
+ * @template {Record<string, string>} Expected
169
+ * @param {Request} req - The request object containing cookies
170
+ * @returns {Expected|undefined} An object with cookie name-value pairs, or undefined if no cookies
171
+ * @example
172
+ * const cookies = parseCookieFromRequest(req);
173
+ * // Returns: { session: "abc123", theme: "dark" }
174
+ */
175
+ export declare const parseCookieFromRequest: <Expected extends Record<string, string>>(req: Request) => Expected | undefined;
176
+ /**
177
+ * Context object containing parsed cookies.
178
+ * @typedef {Object} CTXCookie
179
+ * @property {SSRecord} cookie - Parsed cookies from the request
180
+ */
181
+ export type CTXCookie = {
182
+ cookie: SSRecord;
183
+ };
184
+ /**
185
+ * Creates middleware that parses cookies from the request and adds them to the context.
186
+ * @returns {Function} A middleware function that adds parsed cookies to context.cookie
187
+ * @example
188
+ * const cookieParser = parseCookie();
189
+ * // Use in respondWith: respondWith({}, cookieParser(), ...otherHandlers)
190
+ */
191
+ export declare const parseCookie: () => <Context extends CTXCookie>(req: Request, ctx: Context) => void;
192
+ /**
193
+ * Context object containing parsed request body.
194
+ * @typedef {Object} CTXBody
195
+ * @property {SURecord} body - Parsed request body data
196
+ */
197
+ export type CTXBody = {
198
+ body: SURecord;
199
+ };
200
+ /**
201
+ * Supported media types for request body parsing.
202
+ * @typedef {"application/x-www-form-urlencoded"|"application/json"|"text/plain"} SupportedBodyMediaTypes
203
+ */
204
+ export type SupportedBodyMediaTypes = "application/x-www-form-urlencoded" | "application/json" | "text/plain";
205
+ /**
206
+ * Creates middleware that parses the request body based on Content-Type.
207
+ * Supports url-encoded forms, JSON, and plain text.
208
+ * @param {Object} [options] - Configuration options for body parsing
209
+ * @param {SupportedBodyMediaTypes|SupportedBodyMediaTypes[]} [options.accept] - Media types to accept (defaults to all supported)
210
+ * @param {number} [options.maxSize] - Maximum body size in bytes (defaults to 1MB)
211
+ * @returns {Function} A middleware function that adds parsed body to context.body
212
+ * @throws {Response} Returns a 415 response if content-type is not accepted
213
+ * @throws {Response} Returns a 413 response if body exceeds maxSize
214
+ * @throws {Response} Returns a 400 response if body is malformed
215
+ * @example
216
+ * const bodyParser = parseBody({ maxSize: 5000 });
217
+ * // Use in respondWith: respondWith({}, bodyParser(), ...otherHandlers)
218
+ */
219
+ export declare const parseBody: (options?: {
220
+ accept?: SupportedBodyMediaTypes | SupportedBodyMediaTypes[];
221
+ maxSize?: number;
222
+ }) => <Context extends CTXBody>(req: Request, ctx: Context) => Promise<Response | undefined>;
223
+ /**
224
+ * Request handler function type.
225
+ * @callback RequestHandler
226
+ * @template Context
227
+ * @param {Request} req - The incoming request
228
+ * @param {Context} ctx - The request context
229
+ * @returns {Response|void|Promise<Response|void>} A Response, or void to continue to next handler
230
+ */
231
+ export interface RequestHandler<Context = any> {
232
+ (req: Request, ctx: Context): Response | void | Promise<Response | void>;
233
+ }
234
+ /**
235
+ * Request handler with error, function type.
236
+ * @callback RequestErrorHandler
237
+ * @template Context
238
+ * @param {Request} req - The incoming request
239
+ * @param {Error} error - The caught error
240
+ * @param {Context} ctx - The request context
241
+ * @returns {Response|void|Promise<Response|void>} A Response, or void to continue
242
+ */
243
+ export interface RequestErrorHandler<Context = any> {
244
+ (req: Request, error: Error, ctx: Context): Response | void | Promise<Response | void>;
245
+ }
246
+ /**
247
+ * Creates a request handler that processes requests through a series of middleware/handlers.
248
+ * Handlers are executed in order. If a handler returns a Response, that response is returned immediately.
249
+ * If no handler returns a Response, returns a 204 No Content response.
250
+ * @template Context
251
+ * @template {Array<RequestHandler<Context>>} Handlers
252
+ * @param {Context} ctxInit - Initial context object
253
+ * @param {...RequestHandler<Context>} handlers - Handler functions to process the request
254
+ * @returns {Function} A function that takes a Request and returns a Promise<Response>
255
+ * @example
256
+ * const handler = respondWith(
257
+ * {},
258
+ * parseCookie(),
259
+ * parseBody(),
260
+ * (req, ctx) => {
261
+ * return json({ cookie: ctx.cookie, body: ctx.body });
262
+ * }
263
+ * );
264
+ */
265
+ export declare const respondWith: <Context = any, Handlers extends Array<RequestHandler<Context>> = Array<RequestHandler<Context>>>(ctxInit: Context, ...handlers: [...Handlers]) => (req: Request) => Promise<Response>;
266
+ /**
267
+ * Creates a request handler with error catching.
268
+ * Similar to respondWith but includes an error handler to catch exceptions.
269
+ * @template Context
270
+ * @template {RequestErrorHandler<Context>} Handler
271
+ * @template {Array<RequestHandler<Context>>} Handlers
272
+ * @param {Context} ctxInit - Initial context object
273
+ * @param {Handler} catcher - Error handler function
274
+ * @param {...RequestHandler<Context>} handlers - Handler functions to process the request
275
+ * @returns {Function} A function that takes a Request and returns a Promise<Response>
276
+ * @example
277
+ * const handler = respondWithCatcher(
278
+ * {},
279
+ * (req, error, ctx) => {
280
+ * return json({ error: error.message }, { status: 500 });
281
+ * },
282
+ * parseBody(),
283
+ * (req, ctx) => {
284
+ * // This might throw an error
285
+ * return json({ data: ctx.body });
286
+ * }
287
+ * );
288
+ */
289
+ export declare const respondWithCatcher: <Context = any, Handler extends RequestErrorHandler<Context> = RequestErrorHandler<Context>, Handlers extends Array<RequestHandler<Context>> = Array<RequestHandler<Context>>>(ctxInit: Context, catcher: Handler, ...handlers: [...Handlers]) => (req: Request) => Promise<Response>;
290
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}