@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.
- package/LICENSE +21 -0
- package/README.md +557 -0
- package/dist/cjs/helpers.d.ts +290 -0
- package/dist/cjs/helpers.d.ts.map +1 -0
- package/dist/cjs/helpers.js +691 -0
- package/dist/cjs/helpers.js.map +1 -0
- package/dist/cjs/index.d.ts +5 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +21 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/list.d.ts +166 -0
- package/dist/cjs/list.d.ts.map +1 -0
- package/dist/cjs/list.js +483 -0
- package/dist/cjs/list.js.map +1 -0
- package/dist/cjs/middlewares.d.ts +251 -0
- package/dist/cjs/middlewares.d.ts.map +1 -0
- package/dist/cjs/middlewares.js +359 -0
- package/dist/cjs/middlewares.js.map +1 -0
- package/dist/cjs/router.d.ts +333 -0
- package/dist/cjs/router.d.ts.map +1 -0
- package/dist/cjs/router.js +659 -0
- package/dist/cjs/router.js.map +1 -0
- package/dist/cjs/tree.d.ts +18 -0
- package/dist/cjs/tree.d.ts.map +1 -0
- package/dist/cjs/tree.js +162 -0
- package/dist/cjs/tree.js.map +1 -0
- package/dist/cjs/types.d.ts +127 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/upload-stream.d.ts +105 -0
- package/dist/cjs/upload-stream.d.ts.map +1 -0
- package/dist/cjs/upload-stream.js +417 -0
- package/dist/cjs/upload-stream.js.map +1 -0
- package/dist/helpers.d.ts +290 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +691 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/list.d.ts +166 -0
- package/dist/list.d.ts.map +1 -0
- package/dist/list.js +483 -0
- package/dist/list.js.map +1 -0
- package/dist/middlewares.d.ts +251 -0
- package/dist/middlewares.d.ts.map +1 -0
- package/dist/middlewares.js +359 -0
- package/dist/middlewares.js.map +1 -0
- package/dist/router.d.ts +333 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +659 -0
- package/dist/router.js.map +1 -0
- package/dist/tree.d.ts +18 -0
- package/dist/tree.d.ts.map +1 -0
- package/dist/tree.js +162 -0
- package/dist/tree.js.map +1 -0
- package/dist/types.d.ts +127 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/upload-stream.d.ts +105 -0
- package/dist/upload-stream.d.ts.map +1 -0
- package/dist/upload-stream.js +417 -0
- package/dist/upload-stream.js.map +1 -0
- 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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"}
|