@fresho/router 0.0.1 → 0.1.0
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 +401 -28
- package/dist/index.d.mts +377 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +1046 -0
- package/dist/index.mjs.map +1 -0
- package/dist/middleware/index.d.mts +396 -0
- package/dist/middleware/index.d.mts.map +1 -0
- package/dist/middleware/index.mjs +675 -0
- package/dist/middleware/index.mjs.map +1 -0
- package/dist/middleware-BpFh0XrR.mjs +50 -0
- package/dist/middleware-BpFh0XrR.mjs.map +1 -0
- package/dist/middleware-CqtYOc6D.d.mts +382 -0
- package/dist/middleware-CqtYOc6D.d.mts.map +1 -0
- package/docs/authentication.md +385 -0
- package/docs/middleware.md +441 -0
- package/package.json +63 -5
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
import { C as SchemaDefinition, D as compileSchema, E as ValidationResult, S as InferSchema, T as SchemaTypeMap, _ as TypedResponse, a as runMiddleware, b as isRouter, c as ExecutionContext, d as MethodEntry, f as RouteDefinition, g as TypedHandler, h as RouterRoutes, l as FetchHandler, m as RouterBrand, n as MiddlewareContext, o as CollectPathParams, p as Router, r as MiddlewareNext, s as Context, t as Middleware, u as Method, v as isFunction, w as SchemaType, x as CompiledSchema, y as isRoute } from "./middleware-CqtYOc6D.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/core.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Creates a route with query/body validation schemas.
|
|
7
|
+
*
|
|
8
|
+
* Use `route()` when you need request validation. For simple handlers
|
|
9
|
+
* without validation, you can use bare functions directly in the router.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* // Route with query validation
|
|
14
|
+
* get: route({
|
|
15
|
+
* query: { limit: 'number?', offset: 'number?' },
|
|
16
|
+
* handler: async (c) => {
|
|
17
|
+
* const items = await db.list(c.query.limit, c.query.offset);
|
|
18
|
+
* return { items };
|
|
19
|
+
* },
|
|
20
|
+
* })
|
|
21
|
+
*
|
|
22
|
+
* // Route with body validation
|
|
23
|
+
* post: route({
|
|
24
|
+
* body: { name: 'string', email: 'string' },
|
|
25
|
+
* handler: async (c) => {
|
|
26
|
+
* const user = await db.create(c.body);
|
|
27
|
+
* return user;
|
|
28
|
+
* },
|
|
29
|
+
* })
|
|
30
|
+
*
|
|
31
|
+
* // Simple handler without validation (bare function)
|
|
32
|
+
* get: async () => ({ status: 'ok' })
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
declare function route<const Q$1 extends SchemaDefinition, const B$1 extends SchemaDefinition, R$1 = unknown>(definition: RouteDefinition<Q$1, B$1, R$1, {}, {}>): RouteDefinition<Q$1, B$1, R$1, {}, {}>;
|
|
36
|
+
declare namespace route {
|
|
37
|
+
var ctx: <Ctx>() => CtxBuilder<Ctx>;
|
|
38
|
+
}
|
|
39
|
+
/** Return type of route.ctx<T>() - callable and chainable. */
|
|
40
|
+
interface CtxBuilder<Ctx> {
|
|
41
|
+
<const Q$1 extends SchemaDefinition, const B$1 extends SchemaDefinition, R$1 = unknown>(definition: RouteDefinition<Q$1, B$1, R$1, {}, Ctx>): RouteDefinition<Q$1, B$1, R$1, {}, Ctx>;
|
|
42
|
+
ctx<AdditionalCtx>(): CtxBuilder<Ctx & AdditionalCtx>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Creates a router that groups paths and applies middleware.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* const api = router({
|
|
50
|
+
* health: router({
|
|
51
|
+
* get: async () => ({ status: 'ok' }),
|
|
52
|
+
* }),
|
|
53
|
+
*
|
|
54
|
+
* users: router({
|
|
55
|
+
* // GET /users - list users
|
|
56
|
+
* get: route({
|
|
57
|
+
* query: { limit: 'number?' },
|
|
58
|
+
* handler: async (c) => db.users.list(c.query.limit),
|
|
59
|
+
* }),
|
|
60
|
+
*
|
|
61
|
+
* // POST /users - create user
|
|
62
|
+
* post: route({
|
|
63
|
+
* body: { name: 'string', email: 'string' },
|
|
64
|
+
* handler: async (c) => db.users.create(c.body),
|
|
65
|
+
* }),
|
|
66
|
+
*
|
|
67
|
+
* // /users/:id
|
|
68
|
+
* $id: router({
|
|
69
|
+
* get: async (c) => db.users.get(c.path.id),
|
|
70
|
+
* delete: async (c) => db.users.delete(c.path.id),
|
|
71
|
+
* }),
|
|
72
|
+
* }),
|
|
73
|
+
* });
|
|
74
|
+
*
|
|
75
|
+
* export default { fetch: api.handler() };
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
declare function router<T extends RouterRoutes, M$1 extends Middleware<any>[]>(routes: T, ...middleware: M$1): Router<T>;
|
|
79
|
+
//#endregion
|
|
80
|
+
//#region src/docs.d.ts
|
|
81
|
+
/** Generates OpenAPI documentation from a router. */
|
|
82
|
+
declare function generateDocs(config: {
|
|
83
|
+
title: string;
|
|
84
|
+
version: string;
|
|
85
|
+
description?: string;
|
|
86
|
+
router: Router<RouterRoutes>;
|
|
87
|
+
}): object;
|
|
88
|
+
//#endregion
|
|
89
|
+
//#region src/http-client.d.ts
|
|
90
|
+
/** Header value that can be static or dynamic. */
|
|
91
|
+
type HeaderValue = string | (() => string | null | undefined | Promise<string | null | undefined>);
|
|
92
|
+
/** HTTP client configuration. */
|
|
93
|
+
interface HttpClientConfig {
|
|
94
|
+
baseUrl?: string;
|
|
95
|
+
headers?: Record<string, HeaderValue>;
|
|
96
|
+
credentials?: RequestCredentials;
|
|
97
|
+
}
|
|
98
|
+
/** Options for an HTTP request. */
|
|
99
|
+
interface HttpRequestOptions {
|
|
100
|
+
path?: Record<string, string>;
|
|
101
|
+
query?: Record<string, unknown>;
|
|
102
|
+
body?: unknown;
|
|
103
|
+
headers?: HeadersInit;
|
|
104
|
+
}
|
|
105
|
+
/** HTTP method names as defined in routes (lowercase). */
|
|
106
|
+
type LowercaseMethods = 'get' | 'post' | 'put' | 'patch' | 'delete';
|
|
107
|
+
/** Map lowercase method to $-prefixed version. */
|
|
108
|
+
type PrefixedMethod<T extends LowercaseMethods> = T extends 'get' ? '$get' : T extends 'post' ? '$post' : T extends 'put' ? '$put' : T extends 'patch' ? '$patch' : T extends 'delete' ? '$delete' : never;
|
|
109
|
+
/** Extract return type from a handler. */
|
|
110
|
+
type ExtractReturn$1<T> = T extends ((...args: unknown[]) => infer R) ? R extends Promise<infer U> ? U : R : unknown;
|
|
111
|
+
/** Detects if a type is `any`. */
|
|
112
|
+
type IsAny$1<T> = 0 extends 1 & T ? true : false;
|
|
113
|
+
/** Checks if a schema type should require a property. */
|
|
114
|
+
type RequiresProperty$1<T> = IsAny$1<T> extends true ? false : keyof T extends never ? false : true;
|
|
115
|
+
/** Build options type based on whether path params are needed. */
|
|
116
|
+
type BuildOptions$1<HasPathParams extends boolean, Q$1, B$1> = HasPathParams extends true ? {
|
|
117
|
+
path: Record<string, string>;
|
|
118
|
+
} & (RequiresProperty$1<Q$1> extends true ? {
|
|
119
|
+
query?: Q$1;
|
|
120
|
+
} : {}) & (RequiresProperty$1<B$1> extends true ? {
|
|
121
|
+
body: B$1;
|
|
122
|
+
} : {}) & {
|
|
123
|
+
headers?: HeadersInit;
|
|
124
|
+
} : (RequiresProperty$1<Q$1> extends true ? {
|
|
125
|
+
query?: Q$1;
|
|
126
|
+
} : {}) & (RequiresProperty$1<B$1> extends true ? {
|
|
127
|
+
body: B$1;
|
|
128
|
+
} : {}) & {
|
|
129
|
+
headers?: HeadersInit;
|
|
130
|
+
};
|
|
131
|
+
/** Safely infer schema, returning {} for any or non-schema types. */
|
|
132
|
+
type SafeInferSchema$1<T> = IsAny$1<T> extends true ? {} : T extends SchemaDefinition ? InferSchema<T> : {};
|
|
133
|
+
/** Client type for a method entry (route or bare function). */
|
|
134
|
+
type MethodClient$1<T, HasPathParams extends boolean = false> = T extends RouteDefinition<infer Q, infer B, infer R, any, any> ? (options?: BuildOptions$1<HasPathParams, SafeInferSchema$1<Q>, SafeInferSchema$1<B>>) => Promise<R> : T extends ((...args: unknown[]) => unknown) ? (options?: BuildOptions$1<HasPathParams, {}, {}>) => Promise<ExtractReturn$1<T>> : never;
|
|
135
|
+
/** Check if router tree contains any $param properties. */
|
|
136
|
+
type HasParams$1<Path extends string[]> = Path extends [infer Head, ...infer Rest extends string[]] ? Head extends `$${string}` ? true : HasParams$1<Rest> : false;
|
|
137
|
+
/** Extract the MethodEntry part from a union type. */
|
|
138
|
+
type ExtractMethod$1<T> = Extract<T, RouteDefinition<any, any, any, any, any> | ((...args: unknown[]) => unknown)>;
|
|
139
|
+
/** Client type for a router. */
|
|
140
|
+
type RouterClient$1<T extends RouterRoutes, Path extends string[] = []> = { [K in keyof T as K extends LowercaseMethods ? PrefixedMethod<K> : never]: ExtractMethod$1<T[K]> extends infer M ? M extends RouteDefinition<any, any, any, any, any> | ((...args: unknown[]) => unknown) ? MethodClient$1<M, HasParams$1<Path>> : never : never } & { [K in keyof T]: Extract<T[K], {
|
|
141
|
+
routes: RouterRoutes;
|
|
142
|
+
}> extends {
|
|
143
|
+
routes: infer Routes extends RouterRoutes;
|
|
144
|
+
} ? RouterClient$1<Routes, [...Path, K & string]> & ImplicitGetCall$1<Routes, [...Path, K & string]> : never } & ImplicitGetCall$1<T, Path>;
|
|
145
|
+
/** Helper to extract return type for implicit GET calls. */
|
|
146
|
+
type ImplicitGetCall$1<T extends RouterRoutes, Path extends string[] = []> = 'get' extends keyof T ? ExtractMethod$1<T['get']> extends RouteDefinition<infer _Q, infer _B, infer R, any, any> ? HasParams$1<Path> extends true ? (options: {
|
|
147
|
+
path: Record<string, string>;
|
|
148
|
+
} & {
|
|
149
|
+
query?: Record<string, unknown>;
|
|
150
|
+
} & {
|
|
151
|
+
headers?: HeadersInit;
|
|
152
|
+
}) => Promise<R> : (options?: HttpRequestOptions) => Promise<R> : ExtractMethod$1<T['get']> extends ((...args: unknown[]) => unknown) ? HasParams$1<Path> extends true ? (options: {
|
|
153
|
+
path: Record<string, string>;
|
|
154
|
+
} & {
|
|
155
|
+
query?: Record<string, unknown>;
|
|
156
|
+
} & {
|
|
157
|
+
headers?: HeadersInit;
|
|
158
|
+
}) => Promise<ExtractReturn$1<ExtractMethod$1<T['get']>>> : (options?: HttpRequestOptions) => Promise<ExtractReturn$1<ExtractMethod$1<T['get']>>> : (options?: HttpRequestOptions) => Promise<unknown> : (options?: HttpRequestOptions) => Promise<unknown>;
|
|
159
|
+
/** Top-level HTTP client type. */
|
|
160
|
+
type HttpClient<T extends Router<RouterRoutes>> = {
|
|
161
|
+
configure(config: HttpClientConfig): void;
|
|
162
|
+
} & RouterClient$1<T['routes']>;
|
|
163
|
+
/**
|
|
164
|
+
* Creates a typed HTTP client.
|
|
165
|
+
*
|
|
166
|
+
* HTTP methods are prefixed with `$` to distinguish them from path segments:
|
|
167
|
+
* - `.$get()`, `.$post()`, `.$put()`, `.$patch()`, `.$delete()` - execute HTTP methods
|
|
168
|
+
* - `.propertyName` - navigate to path segment (works for any name including `get`, `post`, etc.)
|
|
169
|
+
* - Direct call `()` - implicit GET request
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* ```typescript
|
|
173
|
+
* import type { api } from './server';
|
|
174
|
+
* import { createHttpClient } from '@fresho/router';
|
|
175
|
+
*
|
|
176
|
+
* const client = createHttpClient<typeof api>({
|
|
177
|
+
* baseUrl: 'https://api.example.com',
|
|
178
|
+
* headers: { Authorization: () => `Bearer ${getToken()}` },
|
|
179
|
+
* });
|
|
180
|
+
*
|
|
181
|
+
* // GET /health (implicit)
|
|
182
|
+
* await client.health();
|
|
183
|
+
*
|
|
184
|
+
* // GET /users (explicit)
|
|
185
|
+
* await client.users.$get();
|
|
186
|
+
*
|
|
187
|
+
* // POST /users
|
|
188
|
+
* await client.users.$post({ body: { name: 'Alice' } });
|
|
189
|
+
*
|
|
190
|
+
* // GET /users/123
|
|
191
|
+
* await client.users.$id({ path: { id: '123' } });
|
|
192
|
+
*
|
|
193
|
+
* // Navigate through path segments named after HTTP methods:
|
|
194
|
+
* // GET /api/get
|
|
195
|
+
* await client.api.get.$get();
|
|
196
|
+
* ```
|
|
197
|
+
*/
|
|
198
|
+
declare function createHttpClient<T extends Router<RouterRoutes>>(config?: HttpClientConfig): HttpClient<T>;
|
|
199
|
+
//#endregion
|
|
200
|
+
//#region src/local-client.d.ts
|
|
201
|
+
/** Local client configuration. */
|
|
202
|
+
interface LocalClientConfig {
|
|
203
|
+
env?: unknown;
|
|
204
|
+
ctx?: ExecutionContext;
|
|
205
|
+
}
|
|
206
|
+
/** Options for a local client request. */
|
|
207
|
+
interface LocalRequestOptions {
|
|
208
|
+
path?: Record<string, string>;
|
|
209
|
+
query?: Record<string, unknown>;
|
|
210
|
+
body?: unknown;
|
|
211
|
+
env?: unknown;
|
|
212
|
+
ctx?: ExecutionContext;
|
|
213
|
+
}
|
|
214
|
+
type HttpMethods = 'get' | 'post' | 'put' | 'patch' | 'delete';
|
|
215
|
+
type ExtractReturn<T> = T extends ((...args: unknown[]) => infer R) ? R extends Promise<infer U> ? U : R : unknown;
|
|
216
|
+
/** Detects if a type is `any`. */
|
|
217
|
+
type IsAny<T> = 0 extends 1 & T ? true : false;
|
|
218
|
+
/** Checks if a schema type should require a property. */
|
|
219
|
+
type RequiresProperty<T> = IsAny<T> extends true ? false : keyof T extends never ? false : true;
|
|
220
|
+
type BuildOptions<HasPathParams extends boolean, Q$1, B$1> = HasPathParams extends true ? {
|
|
221
|
+
path: Record<string, string>;
|
|
222
|
+
} & (RequiresProperty<Q$1> extends true ? {
|
|
223
|
+
query?: Q$1;
|
|
224
|
+
} : {}) & (RequiresProperty<B$1> extends true ? {
|
|
225
|
+
body: B$1;
|
|
226
|
+
} : {}) & LocalClientConfig : (RequiresProperty<Q$1> extends true ? {
|
|
227
|
+
query?: Q$1;
|
|
228
|
+
} : {}) & (RequiresProperty<B$1> extends true ? {
|
|
229
|
+
body: B$1;
|
|
230
|
+
} : {}) & LocalClientConfig;
|
|
231
|
+
/** Safely infer schema, returning {} for any or non-schema types. */
|
|
232
|
+
type SafeInferSchema<T> = IsAny<T> extends true ? {} : T extends SchemaDefinition ? InferSchema<T> : {};
|
|
233
|
+
type MethodClient<T, HasPathParams extends boolean = false> = T extends RouteDefinition<infer Q, infer B, infer R, any, any> ? (options?: BuildOptions<HasPathParams, SafeInferSchema<Q>, SafeInferSchema<B>>) => Promise<R> : T extends ((...args: unknown[]) => unknown) ? (options?: BuildOptions<HasPathParams, {}, {}>) => Promise<ExtractReturn<T>> : never;
|
|
234
|
+
type HasParams<Path extends string[]> = Path extends [infer Head, ...infer Rest extends string[]] ? Head extends `$${string}` ? true : HasParams<Rest> : false;
|
|
235
|
+
/** Extract the MethodEntry part from a union type. */
|
|
236
|
+
type ExtractMethod<T> = Extract<T, RouteDefinition<any, any, any, any, any> | ((...args: unknown[]) => unknown)>;
|
|
237
|
+
/** Helper to extract return type for implicit GET calls. */
|
|
238
|
+
type ImplicitGetCall<T extends RouterRoutes, Path extends string[] = []> = 'get' extends keyof T ? ExtractMethod<T['get']> extends RouteDefinition<infer _Q, infer _B, infer R, any, any> ? HasParams<Path> extends true ? (options: {
|
|
239
|
+
path: Record<string, string>;
|
|
240
|
+
} & {
|
|
241
|
+
query?: Record<string, unknown>;
|
|
242
|
+
} & LocalClientConfig) => Promise<R> : (options?: LocalRequestOptions) => Promise<R> : ExtractMethod<T['get']> extends ((...args: unknown[]) => unknown) ? HasParams<Path> extends true ? (options: {
|
|
243
|
+
path: Record<string, string>;
|
|
244
|
+
} & {
|
|
245
|
+
query?: Record<string, unknown>;
|
|
246
|
+
} & LocalClientConfig) => Promise<ExtractReturn<ExtractMethod<T['get']>>> : (options?: LocalRequestOptions) => Promise<ExtractReturn<ExtractMethod<T['get']>>> : (options?: LocalRequestOptions) => Promise<unknown> : (options?: LocalRequestOptions) => Promise<unknown>;
|
|
247
|
+
/** Client type for a router. */
|
|
248
|
+
type RouterClient<T extends RouterRoutes, Path extends string[] = []> = { [K in keyof T as K extends HttpMethods ? K : never]: ExtractMethod<T[K]> extends infer M ? M extends RouteDefinition<any, any, any, any, any> | ((...args: unknown[]) => unknown) ? MethodClient<M, HasParams<Path>> : never : never } & { [K in keyof T as K extends HttpMethods ? never : K]: Extract<T[K], {
|
|
249
|
+
routes: RouterRoutes;
|
|
250
|
+
}> extends {
|
|
251
|
+
routes: infer Routes extends RouterRoutes;
|
|
252
|
+
} ? RouterClient<Routes, [...Path, K & string]> & ImplicitGetCall<Routes, [...Path, K & string]> : never } & ImplicitGetCall<T, Path>;
|
|
253
|
+
type LocalClient<T extends Router<RouterRoutes>> = {
|
|
254
|
+
configure(config: LocalClientConfig): void;
|
|
255
|
+
} & RouterClient<T['routes']>;
|
|
256
|
+
/**
|
|
257
|
+
* Creates a typed local client from a router definition.
|
|
258
|
+
*
|
|
259
|
+
* @example
|
|
260
|
+
* ```typescript
|
|
261
|
+
* import { createLocalClient } from '@fresho/router';
|
|
262
|
+
* import { api } from './api.js';
|
|
263
|
+
*
|
|
264
|
+
* const client = createLocalClient(api);
|
|
265
|
+
* client.configure({ env: { DB: mockDatabase } });
|
|
266
|
+
*
|
|
267
|
+
* await client.health();
|
|
268
|
+
* await client.users();
|
|
269
|
+
* await client.users.post({ body: { name: 'Alice' } });
|
|
270
|
+
* await client.users.$id({ path: { id: '123' } });
|
|
271
|
+
* ```
|
|
272
|
+
*/
|
|
273
|
+
declare function createLocalClient<T extends Router<RouterRoutes>>(routerDef: T): LocalClient<T>;
|
|
274
|
+
//#endregion
|
|
275
|
+
//#region src/streaming.d.ts
|
|
276
|
+
/**
|
|
277
|
+
* @fileoverview Streaming response utilities for @fresho/router.
|
|
278
|
+
*
|
|
279
|
+
* Provides helpers for Server-Sent Events (SSE) and newline-delimited JSON (NDJSON)
|
|
280
|
+
* streaming responses. These are useful for real-time updates, progress indicators,
|
|
281
|
+
* and streaming large datasets.
|
|
282
|
+
*
|
|
283
|
+
* Available utilities:
|
|
284
|
+
* - {@link sseResponse} - Server-Sent Events for real-time browser updates
|
|
285
|
+
* - {@link streamJsonLines} - NDJSON for streaming JSON objects line by line
|
|
286
|
+
*
|
|
287
|
+
* @example
|
|
288
|
+
* ```typescript
|
|
289
|
+
* import { router, sseResponse, streamJsonLines } from '@fresho/router';
|
|
290
|
+
*
|
|
291
|
+
* const api = router({
|
|
292
|
+
* // SSE for real-time updates
|
|
293
|
+
* events: router({
|
|
294
|
+
* get: async () => sseResponse(async (send, close) => {
|
|
295
|
+
* for (let i = 0; i < 10; i++) {
|
|
296
|
+
* send({ event: 'tick', data: { count: i } });
|
|
297
|
+
* await sleep(1000);
|
|
298
|
+
* }
|
|
299
|
+
* close();
|
|
300
|
+
* }),
|
|
301
|
+
* }),
|
|
302
|
+
*
|
|
303
|
+
* // NDJSON for streaming data
|
|
304
|
+
* export: router({
|
|
305
|
+
* get: async () => streamJsonLines(async (send, close) => {
|
|
306
|
+
* for await (const row of database.stream()) {
|
|
307
|
+
* send(row);
|
|
308
|
+
* }
|
|
309
|
+
* close();
|
|
310
|
+
* }),
|
|
311
|
+
* }),
|
|
312
|
+
* });
|
|
313
|
+
* ```
|
|
314
|
+
*/
|
|
315
|
+
/**
|
|
316
|
+
* Options for SSE response.
|
|
317
|
+
*/
|
|
318
|
+
interface SSEOptions {
|
|
319
|
+
/** Custom headers to include in the response. */
|
|
320
|
+
headers?: HeadersInit;
|
|
321
|
+
/** Interval in milliseconds to send keep-alive comments (default: 30000). */
|
|
322
|
+
keepAliveInterval?: number;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Server-Sent Event message structure.
|
|
326
|
+
*/
|
|
327
|
+
interface SSEMessage {
|
|
328
|
+
/** Event type (optional). */
|
|
329
|
+
event?: string;
|
|
330
|
+
/** Event data. */
|
|
331
|
+
data: string | object;
|
|
332
|
+
/** Event ID (optional). */
|
|
333
|
+
id?: string;
|
|
334
|
+
/** Retry interval hint for client (optional). */
|
|
335
|
+
retry?: number;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Creates a Server-Sent Events (SSE) response.
|
|
339
|
+
*
|
|
340
|
+
* @example
|
|
341
|
+
* ```typescript
|
|
342
|
+
* const handler = async (c) => {
|
|
343
|
+
* return sseResponse(async (send, close) => {
|
|
344
|
+
* for (let i = 0; i < 5; i++) {
|
|
345
|
+
* await send({ data: { count: i } });
|
|
346
|
+
* await new Promise(r => setTimeout(r, 1000));
|
|
347
|
+
* }
|
|
348
|
+
* close();
|
|
349
|
+
* });
|
|
350
|
+
* };
|
|
351
|
+
* ```
|
|
352
|
+
*/
|
|
353
|
+
declare function sseResponse(handler: (send: (message: SSEMessage) => void, close: () => void) => void | Promise<void>, options?: SSEOptions): Response;
|
|
354
|
+
/**
|
|
355
|
+
* Creates a streaming JSON response where each line is a JSON object.
|
|
356
|
+
*
|
|
357
|
+
* Useful for streaming large datasets or real-time data where each item
|
|
358
|
+
* can be processed as it arrives (NDJSON format).
|
|
359
|
+
*
|
|
360
|
+
* @example
|
|
361
|
+
* ```typescript
|
|
362
|
+
* const handler = async (c) => {
|
|
363
|
+
* return streamJsonLines(async (send, close) => {
|
|
364
|
+
* for (const item of largeDataset) {
|
|
365
|
+
* await send(item);
|
|
366
|
+
* }
|
|
367
|
+
* close();
|
|
368
|
+
* });
|
|
369
|
+
* };
|
|
370
|
+
* ```
|
|
371
|
+
*/
|
|
372
|
+
declare function streamJsonLines(handler: (send: (data: object) => void, close: () => void) => void | Promise<void>, options?: {
|
|
373
|
+
headers?: HeadersInit;
|
|
374
|
+
}): Response;
|
|
375
|
+
//#endregion
|
|
376
|
+
export { type CollectPathParams, type CompiledSchema, type Context, type ExecutionContext, type FetchHandler, type HttpClient, type HttpClientConfig, type HttpRequestOptions, type InferSchema, type LocalClient, type LocalClientConfig, type LocalRequestOptions, type Method, type MethodEntry, type Middleware, type MiddlewareContext, type MiddlewareNext, type RouteDefinition, type Router, type RouterBrand, type RouterRoutes, type SSEMessage, type SSEOptions, type SchemaDefinition, type SchemaType, type SchemaTypeMap, type TypedHandler, type TypedResponse, type ValidationResult, compileSchema, createHttpClient, createLocalClient, generateDocs, isFunction, isRoute, isRouter, route, router, runMiddleware, sseResponse, streamJsonLines };
|
|
377
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/core.ts","../src/docs.ts","../src/http-client.ts","../src/local-client.ts","../src/streaming.ts"],"sourcesContent":[],"mappings":"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"}
|