@fresho/router 0.0.1 → 0.0.4

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.
@@ -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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"}