@flightdev/core 0.6.7
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 +541 -0
- package/dist/actions/index.d.ts +743 -0
- package/dist/actions/index.js +3 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/adapters/index.d.ts +502 -0
- package/dist/adapters/index.js +3 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/cache/index.d.ts +191 -0
- package/dist/cache/index.js +3 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/chunk-62HISNA3.js +354 -0
- package/dist/chunk-62HISNA3.js.map +1 -0
- package/dist/chunk-63LWTEDQ.js +341 -0
- package/dist/chunk-63LWTEDQ.js.map +1 -0
- package/dist/chunk-63SCEXD7.js +3 -0
- package/dist/chunk-63SCEXD7.js.map +1 -0
- package/dist/chunk-72MYOTUB.js +667 -0
- package/dist/chunk-72MYOTUB.js.map +1 -0
- package/dist/chunk-7CNW24MQ.js +257 -0
- package/dist/chunk-7CNW24MQ.js.map +1 -0
- package/dist/chunk-7WIEAUJT.js +300 -0
- package/dist/chunk-7WIEAUJT.js.map +1 -0
- package/dist/chunk-7ZZF4ULK.js +259 -0
- package/dist/chunk-7ZZF4ULK.js.map +1 -0
- package/dist/chunk-AE3JTS73.js +222 -0
- package/dist/chunk-AE3JTS73.js.map +1 -0
- package/dist/chunk-AP5NLUSB.js +258 -0
- package/dist/chunk-AP5NLUSB.js.map +1 -0
- package/dist/chunk-C37YQQI7.js +221 -0
- package/dist/chunk-C37YQQI7.js.map +1 -0
- package/dist/chunk-DCLVXFVH.js +225 -0
- package/dist/chunk-DCLVXFVH.js.map +1 -0
- package/dist/chunk-DZMWWDFD.js +223 -0
- package/dist/chunk-DZMWWDFD.js.map +1 -0
- package/dist/chunk-GCQZ4FHI.js +245 -0
- package/dist/chunk-GCQZ4FHI.js.map +1 -0
- package/dist/chunk-IPP44XY6.js +47 -0
- package/dist/chunk-IPP44XY6.js.map +1 -0
- package/dist/chunk-IW7FTQQX.js +267 -0
- package/dist/chunk-IW7FTQQX.js.map +1 -0
- package/dist/chunk-JX4YSCBH.js +428 -0
- package/dist/chunk-JX4YSCBH.js.map +1 -0
- package/dist/chunk-KX6UYWWR.js +229 -0
- package/dist/chunk-KX6UYWWR.js.map +1 -0
- package/dist/chunk-LWVETFJV.js +46 -0
- package/dist/chunk-LWVETFJV.js.map +1 -0
- package/dist/chunk-MCL2MCA2.js +285 -0
- package/dist/chunk-MCL2MCA2.js.map +1 -0
- package/dist/chunk-MZXCF35B.js +205 -0
- package/dist/chunk-MZXCF35B.js.map +1 -0
- package/dist/chunk-NCGPUFWV.js +96 -0
- package/dist/chunk-NCGPUFWV.js.map +1 -0
- package/dist/chunk-OEJMIE2Q.js +351 -0
- package/dist/chunk-OEJMIE2Q.js.map +1 -0
- package/dist/chunk-OYF2OAKS.js +394 -0
- package/dist/chunk-OYF2OAKS.js.map +1 -0
- package/dist/chunk-P6S43FYZ.js +316 -0
- package/dist/chunk-P6S43FYZ.js.map +1 -0
- package/dist/chunk-PL37KFRJ.js +3 -0
- package/dist/chunk-PL37KFRJ.js.map +1 -0
- package/dist/chunk-Q7BS5QC5.js +197 -0
- package/dist/chunk-Q7BS5QC5.js.map +1 -0
- package/dist/chunk-SDYPG3JD.js +288 -0
- package/dist/chunk-SDYPG3JD.js.map +1 -0
- package/dist/chunk-SUG56SZO.js +256 -0
- package/dist/chunk-SUG56SZO.js.map +1 -0
- package/dist/chunk-UVH5XJRP.js +164 -0
- package/dist/chunk-UVH5XJRP.js.map +1 -0
- package/dist/chunk-WZIJKCL3.js +282 -0
- package/dist/chunk-WZIJKCL3.js.map +1 -0
- package/dist/chunk-Y22AMGTM.js +3 -0
- package/dist/chunk-Y22AMGTM.js.map +1 -0
- package/dist/chunk-Z7G23XWU.js +200 -0
- package/dist/chunk-Z7G23XWU.js.map +1 -0
- package/dist/chunk-ZJU5M4IB.js +125 -0
- package/dist/chunk-ZJU5M4IB.js.map +1 -0
- package/dist/chunk-ZVC3ZWLM.js +52 -0
- package/dist/chunk-ZVC3ZWLM.js.map +1 -0
- package/dist/chunk-ZZZML7Y3.js +310 -0
- package/dist/chunk-ZZZML7Y3.js.map +1 -0
- package/dist/client.d.ts +25 -0
- package/dist/client.js +16 -0
- package/dist/client.js.map +1 -0
- package/dist/config/index.d.ts +170 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/errors/index.d.ts +267 -0
- package/dist/errors/index.js +4 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/file-router/index.d.ts +184 -0
- package/dist/file-router/index.js +3 -0
- package/dist/file-router/index.js.map +1 -0
- package/dist/file-router/streaming-hints.d.ts +129 -0
- package/dist/file-router/streaming-hints.js +3 -0
- package/dist/file-router/streaming-hints.js.map +1 -0
- package/dist/handlers/index.d.ts +59 -0
- package/dist/handlers/index.js +3 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/index.d.ts +588 -0
- package/dist/index.js +886 -0
- package/dist/index.js.map +1 -0
- package/dist/islands/index.d.ts +234 -0
- package/dist/islands/index.js +3 -0
- package/dist/islands/index.js.map +1 -0
- package/dist/middleware/index.d.ts +305 -0
- package/dist/middleware/index.js +3 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/react/index.d.ts +73 -0
- package/dist/react/index.js +52 -0
- package/dist/react/index.js.map +1 -0
- package/dist/render/index.d.ts +131 -0
- package/dist/render/index.js +3 -0
- package/dist/render/index.js.map +1 -0
- package/dist/router/index.d.ts +65 -0
- package/dist/router/index.js +3 -0
- package/dist/router/index.js.map +1 -0
- package/dist/rsc/adapters/index.d.ts +8 -0
- package/dist/rsc/adapters/index.js +7 -0
- package/dist/rsc/adapters/index.js.map +1 -0
- package/dist/rsc/adapters/preact.d.ts +97 -0
- package/dist/rsc/adapters/preact.js +3 -0
- package/dist/rsc/adapters/preact.js.map +1 -0
- package/dist/rsc/adapters/react.d.ts +82 -0
- package/dist/rsc/adapters/react.js +3 -0
- package/dist/rsc/adapters/react.js.map +1 -0
- package/dist/rsc/adapters/solid.d.ts +84 -0
- package/dist/rsc/adapters/solid.js +3 -0
- package/dist/rsc/adapters/solid.js.map +1 -0
- package/dist/rsc/adapters/vue.d.ts +80 -0
- package/dist/rsc/adapters/vue.js +3 -0
- package/dist/rsc/adapters/vue.js.map +1 -0
- package/dist/rsc/boundaries.d.ts +182 -0
- package/dist/rsc/boundaries.js +3 -0
- package/dist/rsc/boundaries.js.map +1 -0
- package/dist/rsc/context.d.ts +201 -0
- package/dist/rsc/context.js +3 -0
- package/dist/rsc/context.js.map +1 -0
- package/dist/rsc/index.d.ts +232 -0
- package/dist/rsc/index.js +15 -0
- package/dist/rsc/index.js.map +1 -0
- package/dist/rsc/legacy.d.ts +155 -0
- package/dist/rsc/legacy.js +3 -0
- package/dist/rsc/legacy.js.map +1 -0
- package/dist/rsc/payload.d.ts +262 -0
- package/dist/rsc/payload.js +3 -0
- package/dist/rsc/payload.js.map +1 -0
- package/dist/rsc/plugins/esbuild.d.ts +124 -0
- package/dist/rsc/plugins/esbuild.js +4 -0
- package/dist/rsc/plugins/esbuild.js.map +1 -0
- package/dist/rsc/plugins/index.d.ts +4 -0
- package/dist/rsc/plugins/index.js +6 -0
- package/dist/rsc/plugins/index.js.map +1 -0
- package/dist/rsc/plugins/rollup.d.ts +103 -0
- package/dist/rsc/plugins/rollup.js +4 -0
- package/dist/rsc/plugins/rollup.js.map +1 -0
- package/dist/rsc/renderer.d.ts +162 -0
- package/dist/rsc/renderer.js +5 -0
- package/dist/rsc/renderer.js.map +1 -0
- package/dist/rsc/stream.d.ts +129 -0
- package/dist/rsc/stream.js +3 -0
- package/dist/rsc/stream.js.map +1 -0
- package/dist/rsc/vite-plugin.d.ts +78 -0
- package/dist/rsc/vite-plugin.js +4 -0
- package/dist/rsc/vite-plugin.js.map +1 -0
- package/dist/server/index.d.ts +135 -0
- package/dist/server/index.js +6 -0
- package/dist/server/index.js.map +1 -0
- package/dist/streaming/adapters/index.d.ts +223 -0
- package/dist/streaming/adapters/index.js +3 -0
- package/dist/streaming/adapters/index.js.map +1 -0
- package/dist/streaming/conditional.d.ts +130 -0
- package/dist/streaming/conditional.js +3 -0
- package/dist/streaming/conditional.js.map +1 -0
- package/dist/streaming/index.d.ts +177 -0
- package/dist/streaming/index.js +3 -0
- package/dist/streaming/index.js.map +1 -0
- package/dist/streaming/observability.d.ts +201 -0
- package/dist/streaming/observability.js +4 -0
- package/dist/streaming/observability.js.map +1 -0
- package/dist/streaming/priority.d.ts +103 -0
- package/dist/streaming/priority.js +3 -0
- package/dist/streaming/priority.js.map +1 -0
- package/dist/utils/index.d.ts +42 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +228 -0
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flight Middleware - Composable request/response handlers
|
|
3
|
+
*
|
|
4
|
+
* Framework-agnostic middleware system inspired by Koa/Hono.
|
|
5
|
+
* Provides primitives for building your own middleware solutions.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // Type-safe middleware with custom variables (Hono pattern)
|
|
10
|
+
* interface MyLocals {
|
|
11
|
+
* user: { id: string; role: string };
|
|
12
|
+
* requestId: string;
|
|
13
|
+
* }
|
|
14
|
+
*
|
|
15
|
+
* const authMiddleware: Middleware<MyLocals> = async (ctx, next) => {
|
|
16
|
+
* ctx.locals.user = { id: '123', role: 'admin' };
|
|
17
|
+
* await next();
|
|
18
|
+
* };
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Request context passed through middleware chain.
|
|
23
|
+
*
|
|
24
|
+
* Supports generic type parameter for type-safe locals (like Hono Variables).
|
|
25
|
+
*
|
|
26
|
+
* @typeParam TLocals - Type of the locals object for type-safe middleware data sharing
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* interface AppLocals {
|
|
31
|
+
* user: User;
|
|
32
|
+
* db: DatabaseClient;
|
|
33
|
+
* }
|
|
34
|
+
*
|
|
35
|
+
* const ctx: MiddlewareContext<AppLocals> = createContextFromRequest(request);
|
|
36
|
+
* ctx.locals.user = currentUser; // Type-safe!
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
interface MiddlewareContext<TLocals extends Record<string, unknown> = Record<string, unknown>> {
|
|
40
|
+
/** Request URL */
|
|
41
|
+
url: URL;
|
|
42
|
+
/** Request method */
|
|
43
|
+
method: string;
|
|
44
|
+
/** Request headers */
|
|
45
|
+
headers: Headers;
|
|
46
|
+
/** URL parameters from routing */
|
|
47
|
+
params: Record<string, string | string[]>;
|
|
48
|
+
/** Query parameters */
|
|
49
|
+
query: URLSearchParams;
|
|
50
|
+
/** Parsed request body (if any) */
|
|
51
|
+
body?: unknown;
|
|
52
|
+
/** Local data shared between middleware - type-safe with generics */
|
|
53
|
+
locals: TLocals;
|
|
54
|
+
/** Original request (platform-specific) */
|
|
55
|
+
request?: Request;
|
|
56
|
+
/** Response status code */
|
|
57
|
+
status: number;
|
|
58
|
+
/** Response headers */
|
|
59
|
+
responseHeaders: Headers;
|
|
60
|
+
/** Response body */
|
|
61
|
+
responseBody?: BodyInit | null;
|
|
62
|
+
}
|
|
63
|
+
/** Next function to call the next middleware */
|
|
64
|
+
type MiddlewareNext = () => Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* Middleware function signature with optional typed locals.
|
|
67
|
+
*
|
|
68
|
+
* @typeParam TLocals - Type of the locals object for type-safe data sharing
|
|
69
|
+
*/
|
|
70
|
+
type Middleware<TLocals extends Record<string, unknown> = Record<string, unknown>> = (ctx: MiddlewareContext<TLocals>, next: MiddlewareNext) => Promise<void> | void;
|
|
71
|
+
/** Middleware with optional path matching */
|
|
72
|
+
interface MiddlewareDefinition {
|
|
73
|
+
/** Path pattern to match (undefined = match all) */
|
|
74
|
+
path?: string | RegExp;
|
|
75
|
+
/** HTTP methods to match (undefined = match all) */
|
|
76
|
+
methods?: string[];
|
|
77
|
+
/** The middleware function */
|
|
78
|
+
handler: Middleware;
|
|
79
|
+
}
|
|
80
|
+
interface MiddlewareChain {
|
|
81
|
+
/** Add middleware to the chain */
|
|
82
|
+
use(middleware: Middleware): MiddlewareChain;
|
|
83
|
+
use(path: string, middleware: Middleware): MiddlewareChain;
|
|
84
|
+
use(definition: MiddlewareDefinition): MiddlewareChain;
|
|
85
|
+
/** Execute the middleware chain */
|
|
86
|
+
execute(ctx: MiddlewareContext): Promise<void>;
|
|
87
|
+
/** Get all middleware definitions */
|
|
88
|
+
middlewares(): MiddlewareDefinition[];
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Create a new middleware chain
|
|
92
|
+
*/
|
|
93
|
+
declare function createMiddlewareChain(): MiddlewareChain;
|
|
94
|
+
/**
|
|
95
|
+
* CORS middleware factory
|
|
96
|
+
*/
|
|
97
|
+
/**
|
|
98
|
+
* CORS options for configuring cross-origin requests.
|
|
99
|
+
*/
|
|
100
|
+
interface CorsOptions {
|
|
101
|
+
/**
|
|
102
|
+
* Allowed origins. Can be:
|
|
103
|
+
* - '*' for any origin
|
|
104
|
+
* - A specific origin string
|
|
105
|
+
* - An array of allowed origins
|
|
106
|
+
* - A function that returns true if origin is allowed
|
|
107
|
+
* - An async function for dynamic origin validation
|
|
108
|
+
*/
|
|
109
|
+
origin?: string | string[] | ((origin: string) => boolean | Promise<boolean>);
|
|
110
|
+
/** Allowed HTTP methods */
|
|
111
|
+
methods?: string[];
|
|
112
|
+
/** Allowed headers */
|
|
113
|
+
headers?: string[];
|
|
114
|
+
/** Whether to include credentials */
|
|
115
|
+
credentials?: boolean;
|
|
116
|
+
/** Preflight cache duration in seconds */
|
|
117
|
+
maxAge?: number;
|
|
118
|
+
/** Exposed headers that can be accessed from the response */
|
|
119
|
+
exposeHeaders?: string[];
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* CORS middleware factory.
|
|
123
|
+
*
|
|
124
|
+
* Handles cross-origin resource sharing with best practices:
|
|
125
|
+
* - Adds Vary: Origin for dynamic origins (CDN compatibility)
|
|
126
|
+
* - Supports async origin validation
|
|
127
|
+
* - Proper preflight handling
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```typescript
|
|
131
|
+
* // Allow specific origins
|
|
132
|
+
* chain.use(cors({ origin: ['https://app.example.com'] }));
|
|
133
|
+
*
|
|
134
|
+
* // Dynamic validation
|
|
135
|
+
* chain.use(cors({
|
|
136
|
+
* origin: async (origin) => {
|
|
137
|
+
* return await db.allowedOrigins.exists(origin);
|
|
138
|
+
* }
|
|
139
|
+
* }));
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
declare function cors(options?: CorsOptions): Middleware;
|
|
143
|
+
/** Log levels in order of verbosity */
|
|
144
|
+
type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent';
|
|
145
|
+
/** Log format types */
|
|
146
|
+
type LogFormat = 'pretty' | 'json' | 'combined' | 'common' | 'short' | 'tiny';
|
|
147
|
+
/** Log entry structure for JSON format */
|
|
148
|
+
interface LogEntry {
|
|
149
|
+
timestamp: string;
|
|
150
|
+
level: LogLevel;
|
|
151
|
+
method: string;
|
|
152
|
+
path: string;
|
|
153
|
+
status: number;
|
|
154
|
+
duration: number;
|
|
155
|
+
userAgent?: string;
|
|
156
|
+
ip?: string;
|
|
157
|
+
[key: string]: unknown;
|
|
158
|
+
}
|
|
159
|
+
/** Custom log writer function */
|
|
160
|
+
type LogWriter = (entry: LogEntry, formatted: string) => void;
|
|
161
|
+
/** Logger options */
|
|
162
|
+
interface LoggerOptions {
|
|
163
|
+
/** Minimum log level (default: 'info') */
|
|
164
|
+
level?: LogLevel;
|
|
165
|
+
/** Output format (default: 'pretty') */
|
|
166
|
+
format?: LogFormat;
|
|
167
|
+
/** Skip logging for certain requests */
|
|
168
|
+
skip?: (ctx: MiddlewareContext) => boolean;
|
|
169
|
+
/** Custom log writer (replaces console output) */
|
|
170
|
+
writer?: LogWriter;
|
|
171
|
+
/** Include request headers in logs */
|
|
172
|
+
includeHeaders?: boolean;
|
|
173
|
+
/** Colorize output (only for 'pretty' format, default: true) */
|
|
174
|
+
colorize?: boolean;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Professional logger middleware with configurable levels
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```typescript
|
|
181
|
+
* // Basic usage
|
|
182
|
+
* server.use(logger());
|
|
183
|
+
*
|
|
184
|
+
* // With level control
|
|
185
|
+
* server.use(logger({ level: 'warn' })); // Only warn and error
|
|
186
|
+
*
|
|
187
|
+
* // JSON format for production/observability
|
|
188
|
+
* server.use(logger({ format: 'json', level: 'info' }));
|
|
189
|
+
*
|
|
190
|
+
* // Custom writer (e.g., for external logging service)
|
|
191
|
+
* server.use(logger({
|
|
192
|
+
* writer: (entry) => myLoggingService.log(entry)
|
|
193
|
+
* }));
|
|
194
|
+
*
|
|
195
|
+
* // Silent in production
|
|
196
|
+
* server.use(logger({ level: process.env.NODE_ENV === 'production' ? 'error' : 'debug' }));
|
|
197
|
+
* ```
|
|
198
|
+
*/
|
|
199
|
+
declare function logger(options?: LoggerOptions): Middleware;
|
|
200
|
+
/**
|
|
201
|
+
* Security headers middleware
|
|
202
|
+
*/
|
|
203
|
+
declare function securityHeaders(options?: {
|
|
204
|
+
contentSecurityPolicy?: string | false;
|
|
205
|
+
xFrameOptions?: 'DENY' | 'SAMEORIGIN' | false;
|
|
206
|
+
xContentTypeOptions?: boolean;
|
|
207
|
+
referrerPolicy?: string;
|
|
208
|
+
permissionsPolicy?: string;
|
|
209
|
+
}): Middleware;
|
|
210
|
+
/**
|
|
211
|
+
* Compression middleware (requires implementation in adapter)
|
|
212
|
+
*/
|
|
213
|
+
declare function compress(): Middleware;
|
|
214
|
+
/**
|
|
215
|
+
* Error information passed to error handlers.
|
|
216
|
+
*/
|
|
217
|
+
interface ErrorInfo {
|
|
218
|
+
/** The original error */
|
|
219
|
+
error: Error;
|
|
220
|
+
/** HTTP status code (derived from error or default 500) */
|
|
221
|
+
status: number;
|
|
222
|
+
/** Error code for categorization */
|
|
223
|
+
code?: string;
|
|
224
|
+
/** Request context */
|
|
225
|
+
ctx: MiddlewareContext;
|
|
226
|
+
/** Request timestamp */
|
|
227
|
+
timestamp: string;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Error handler options.
|
|
231
|
+
*/
|
|
232
|
+
interface ErrorHandlerOptions {
|
|
233
|
+
/**
|
|
234
|
+
* Custom error handler function.
|
|
235
|
+
* Called when an error is caught. Can modify ctx to set response.
|
|
236
|
+
* If not provided, a default JSON response is sent.
|
|
237
|
+
*/
|
|
238
|
+
onError?: (info: ErrorInfo) => void | Promise<void>;
|
|
239
|
+
/**
|
|
240
|
+
* Whether to expose error details in response.
|
|
241
|
+
* Set to false in production to hide internal error messages.
|
|
242
|
+
* @default false
|
|
243
|
+
*/
|
|
244
|
+
expose?: boolean;
|
|
245
|
+
/**
|
|
246
|
+
* Default status code for errors without a status property.
|
|
247
|
+
* @default 500
|
|
248
|
+
*/
|
|
249
|
+
defaultStatus?: number;
|
|
250
|
+
/**
|
|
251
|
+
* Emit error events for centralized logging (Koa pattern).
|
|
252
|
+
* Provide a function to receive error events.
|
|
253
|
+
*/
|
|
254
|
+
emit?: (error: Error, ctx: MiddlewareContext) => void;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Error handler middleware factory.
|
|
258
|
+
*
|
|
259
|
+
* Provides centralized error handling following Koa best practices:
|
|
260
|
+
* - Catches all downstream errors
|
|
261
|
+
* - Sets appropriate status codes
|
|
262
|
+
* - Supports custom error handlers
|
|
263
|
+
* - Supports error event emission for logging
|
|
264
|
+
*
|
|
265
|
+
* Place this as one of the FIRST middleware in your chain.
|
|
266
|
+
*
|
|
267
|
+
* @example
|
|
268
|
+
* ```typescript
|
|
269
|
+
* // Basic usage - default JSON error response
|
|
270
|
+
* chain.use(errorHandler());
|
|
271
|
+
*
|
|
272
|
+
* // With custom handler
|
|
273
|
+
* chain.use(errorHandler({
|
|
274
|
+
* onError: ({ error, status, ctx }) => {
|
|
275
|
+
* ctx.status = status;
|
|
276
|
+
* ctx.responseBody = JSON.stringify({
|
|
277
|
+
* error: error.message,
|
|
278
|
+
* code: 'SERVER_ERROR'
|
|
279
|
+
* });
|
|
280
|
+
* },
|
|
281
|
+
* emit: (error, ctx) => {
|
|
282
|
+
* logger.error('Request error:', error);
|
|
283
|
+
* errorTracker.capture(error);
|
|
284
|
+
* }
|
|
285
|
+
* }));
|
|
286
|
+
*
|
|
287
|
+
* // Production-safe (hide error details)
|
|
288
|
+
* chain.use(errorHandler({ expose: false }));
|
|
289
|
+
* ```
|
|
290
|
+
*/
|
|
291
|
+
declare function errorHandler(options?: ErrorHandlerOptions): Middleware;
|
|
292
|
+
/**
|
|
293
|
+
* Create a middleware context from a Web Request
|
|
294
|
+
*/
|
|
295
|
+
declare function createContextFromRequest(request: Request, params?: Record<string, string | string[]>): MiddlewareContext;
|
|
296
|
+
/**
|
|
297
|
+
* Create a Web Response from middleware context
|
|
298
|
+
*/
|
|
299
|
+
declare function createResponseFromContext(ctx: MiddlewareContext): Response;
|
|
300
|
+
/**
|
|
301
|
+
* Compose multiple middleware into one
|
|
302
|
+
*/
|
|
303
|
+
declare function compose(...middlewares: Middleware[]): Middleware;
|
|
304
|
+
|
|
305
|
+
export { type CorsOptions, type ErrorHandlerOptions, type ErrorInfo, type LogEntry, type LogFormat, type LogLevel, type LogWriter, type LoggerOptions, type Middleware, type MiddlewareChain, type MiddlewareContext, type MiddlewareDefinition, type MiddlewareNext, compose, compress, cors, createContextFromRequest, createMiddlewareChain, createResponseFromContext, errorHandler, logger, securityHeaders };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { FlightError } from '../errors/index.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Error context value
|
|
7
|
+
*/
|
|
8
|
+
interface ErrorContextValue {
|
|
9
|
+
/** Current error, if any */
|
|
10
|
+
error: FlightError | null;
|
|
11
|
+
/** Clear the current error */
|
|
12
|
+
clearError: (options?: {
|
|
13
|
+
redirect?: string;
|
|
14
|
+
}) => void;
|
|
15
|
+
/** Whether an error is currently active */
|
|
16
|
+
hasError: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Error provider props
|
|
20
|
+
*/
|
|
21
|
+
interface ErrorProviderProps {
|
|
22
|
+
children: ReactNode;
|
|
23
|
+
/** Called when an error occurs */
|
|
24
|
+
onError?: (error: FlightError) => void;
|
|
25
|
+
/** Called when error is cleared */
|
|
26
|
+
onClear?: () => void;
|
|
27
|
+
}
|
|
28
|
+
declare const ErrorContext: react.Context<ErrorContextValue | null>;
|
|
29
|
+
/**
|
|
30
|
+
* Error context provider for React applications.
|
|
31
|
+
*
|
|
32
|
+
* Wraps your app to provide error state management via useError() hook.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```tsx
|
|
36
|
+
* import { ErrorProvider } from '@flightdev/core/react';
|
|
37
|
+
*
|
|
38
|
+
* function App() {
|
|
39
|
+
* return (
|
|
40
|
+
* <ErrorProvider onError={(e) => console.log('Error:', e)}>
|
|
41
|
+
* <MyApp />
|
|
42
|
+
* </ErrorProvider>
|
|
43
|
+
* );
|
|
44
|
+
* }
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
declare function ErrorProvider({ children, onError, onClear }: ErrorProviderProps): ReactNode;
|
|
48
|
+
/**
|
|
49
|
+
* Access the current error state from anywhere in your React app.
|
|
50
|
+
*
|
|
51
|
+
* Returns null values if used outside of ErrorProvider (non-breaking behavior).
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```tsx
|
|
55
|
+
* function MyComponent() {
|
|
56
|
+
* const { error, clearError, hasError } = useError();
|
|
57
|
+
*
|
|
58
|
+
* if (hasError) {
|
|
59
|
+
* return (
|
|
60
|
+
* <div>
|
|
61
|
+
* <p>Error: {error?.message}</p>
|
|
62
|
+
* <button onClick={() => clearError()}>Dismiss</button>
|
|
63
|
+
* </div>
|
|
64
|
+
* );
|
|
65
|
+
* }
|
|
66
|
+
*
|
|
67
|
+
* return <div>Normal content</div>;
|
|
68
|
+
* }
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
declare function useError(): ErrorContextValue;
|
|
72
|
+
|
|
73
|
+
export { ErrorContext, type ErrorContextValue, ErrorProvider, type ErrorProviderProps, useError };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { getError, clearError } from '../chunk-Q7BS5QC5.js';
|
|
2
|
+
import '../chunk-LWVETFJV.js';
|
|
3
|
+
import { createContext, useState, useEffect, useCallback, useContext } from 'react';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var ErrorContext = createContext(null);
|
|
7
|
+
function ErrorProvider({ children, onError, onClear }) {
|
|
8
|
+
const [error, setError] = useState(() => getError());
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
const handleError = (event) => {
|
|
11
|
+
setError(event.detail);
|
|
12
|
+
onError?.(event.detail);
|
|
13
|
+
};
|
|
14
|
+
const handleClear = () => {
|
|
15
|
+
setError(null);
|
|
16
|
+
onClear?.();
|
|
17
|
+
};
|
|
18
|
+
window.addEventListener("flight:error", handleError);
|
|
19
|
+
window.addEventListener("flight:error-clear", handleClear);
|
|
20
|
+
return () => {
|
|
21
|
+
window.removeEventListener("flight:error", handleError);
|
|
22
|
+
window.removeEventListener("flight:error-clear", handleClear);
|
|
23
|
+
};
|
|
24
|
+
}, [onError, onClear]);
|
|
25
|
+
const clearError2 = useCallback((options) => {
|
|
26
|
+
clearError(options);
|
|
27
|
+
setError(null);
|
|
28
|
+
onClear?.();
|
|
29
|
+
}, [onClear]);
|
|
30
|
+
const value = {
|
|
31
|
+
error,
|
|
32
|
+
clearError: clearError2,
|
|
33
|
+
hasError: error !== null
|
|
34
|
+
};
|
|
35
|
+
return /* @__PURE__ */ jsx(ErrorContext.Provider, { value, children });
|
|
36
|
+
}
|
|
37
|
+
function useError() {
|
|
38
|
+
const context = useContext(ErrorContext);
|
|
39
|
+
if (!context) {
|
|
40
|
+
return {
|
|
41
|
+
error: null,
|
|
42
|
+
clearError: () => {
|
|
43
|
+
},
|
|
44
|
+
hasError: false
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return context;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export { ErrorContext, ErrorProvider, useError };
|
|
51
|
+
//# sourceMappingURL=index.js.map
|
|
52
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/react/hooks/useError.tsx"],"names":["clearError"],"mappings":";;;;;AA0CA,IAAM,YAAA,GAAe,cAAwC,IAAI;AAwB1D,SAAS,aAAA,CAAc,EAAE,QAAA,EAAU,OAAA,EAAS,SAAQ,EAAkC;AACzF,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,IAAI,QAAA,CAA6B,MAAM,UAAU,CAAA;AAGvE,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAoC;AACrD,MAAA,QAAA,CAAS,MAAM,MAAM,CAAA;AACrB,MAAA,OAAA,GAAU,MAAM,MAAM,CAAA;AAAA,IAC1B,CAAA;AAEA,IAAA,MAAM,cAAc,MAAM;AACtB,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,OAAA,IAAU;AAAA,IACd,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,gBAAgB,WAA4B,CAAA;AACpE,IAAA,MAAA,CAAO,gBAAA,CAAiB,sBAAsB,WAAW,CAAA;AAEzD,IAAA,OAAO,MAAM;AACT,MAAA,MAAA,CAAO,mBAAA,CAAoB,gBAAgB,WAA4B,CAAA;AACvE,MAAA,MAAA,CAAO,mBAAA,CAAoB,sBAAsB,WAAW,CAAA;AAAA,IAChE,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,OAAA,EAAS,OAAO,CAAC,CAAA;AAErB,EAAA,MAAMA,WAAAA,GAAa,WAAA,CAAY,CAAC,OAAA,KAAoC;AAChE,IAAA,UAAA,CAAiB,OAAO,CAAA;AACxB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,OAAA,IAAU;AAAA,EACd,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,KAAA,GAA2B;AAAA,IAC7B,KAAA;AAAA,IACA,UAAA,EAAAA,WAAAA;AAAA,IACA,UAAU,KAAA,KAAU;AAAA,GACxB;AAEA,EAAA,uBACI,GAAA,CAAC,YAAA,CAAa,QAAA,EAAb,EAAsB,OAClB,QAAA,EACL,CAAA;AAER;AA6BO,SAAS,QAAA,GAA8B;AAC1C,EAAA,MAAM,OAAA,GAAU,WAAW,YAAY,CAAA;AAIvC,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,OAAO;AAAA,MACH,KAAA,EAAO,IAAA;AAAA,MACP,YAAY,MAAM;AAAA,MAAE,CAAA;AAAA,MACpB,QAAA,EAAU;AAAA,KACd;AAAA,EACJ;AAEA,EAAA,OAAO,OAAA;AACX","file":"index.js","sourcesContent":["/**\r\n * @flightdev/core - React Error Hook\r\n * \r\n * Optional React hook for accessing error state.\r\n * Developers can use this or bring their own solution.\r\n */\r\n\r\nimport { createContext, useContext, useState, useEffect, useCallback } from 'react';\r\nimport type { ReactNode } from 'react';\r\nimport { FlightError, getError, clearError as clearGlobalError } from '../../errors/index.js';\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\n/**\r\n * Error context value\r\n */\r\nexport interface ErrorContextValue {\r\n /** Current error, if any */\r\n error: FlightError | null;\r\n /** Clear the current error */\r\n clearError: (options?: { redirect?: string }) => void;\r\n /** Whether an error is currently active */\r\n hasError: boolean;\r\n}\r\n\r\n/**\r\n * Error provider props\r\n */\r\nexport interface ErrorProviderProps {\r\n children: ReactNode;\r\n /** Called when an error occurs */\r\n onError?: (error: FlightError) => void;\r\n /** Called when error is cleared */\r\n onClear?: () => void;\r\n}\r\n\r\n// ============================================================================\r\n// Context\r\n// ============================================================================\r\n\r\nconst ErrorContext = createContext<ErrorContextValue | null>(null);\r\n\r\n// ============================================================================\r\n// Provider Component\r\n// ============================================================================\r\n\r\n/**\r\n * Error context provider for React applications.\r\n * \r\n * Wraps your app to provide error state management via useError() hook.\r\n * \r\n * @example\r\n * ```tsx\r\n * import { ErrorProvider } from '@flightdev/core/react';\r\n * \r\n * function App() {\r\n * return (\r\n * <ErrorProvider onError={(e) => console.log('Error:', e)}>\r\n * <MyApp />\r\n * </ErrorProvider>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport function ErrorProvider({ children, onError, onClear }: ErrorProviderProps): ReactNode {\r\n const [error, setError] = useState<FlightError | null>(() => getError());\r\n\r\n // Listen for error events from showError()\r\n useEffect(() => {\r\n const handleError = (event: CustomEvent<FlightError>) => {\r\n setError(event.detail);\r\n onError?.(event.detail);\r\n };\r\n\r\n const handleClear = () => {\r\n setError(null);\r\n onClear?.();\r\n };\r\n\r\n window.addEventListener('flight:error', handleError as EventListener);\r\n window.addEventListener('flight:error-clear', handleClear);\r\n\r\n return () => {\r\n window.removeEventListener('flight:error', handleError as EventListener);\r\n window.removeEventListener('flight:error-clear', handleClear);\r\n };\r\n }, [onError, onClear]);\r\n\r\n const clearError = useCallback((options?: { redirect?: string }) => {\r\n clearGlobalError(options);\r\n setError(null);\r\n onClear?.();\r\n }, [onClear]);\r\n\r\n const value: ErrorContextValue = {\r\n error,\r\n clearError,\r\n hasError: error !== null,\r\n };\r\n\r\n return (\r\n <ErrorContext.Provider value={value} >\r\n {children}\r\n </ErrorContext.Provider>\r\n );\r\n}\r\n\r\n// ============================================================================\r\n// Hook\r\n// ============================================================================\r\n\r\n/**\r\n * Access the current error state from anywhere in your React app.\r\n * \r\n * Returns null values if used outside of ErrorProvider (non-breaking behavior).\r\n * \r\n * @example\r\n * ```tsx\r\n * function MyComponent() {\r\n * const { error, clearError, hasError } = useError();\r\n * \r\n * if (hasError) {\r\n * return (\r\n * <div>\r\n * <p>Error: {error?.message}</p>\r\n * <button onClick={() => clearError()}>Dismiss</button>\r\n * </div>\r\n * );\r\n * }\r\n * \r\n * return <div>Normal content</div>;\r\n * }\r\n * ```\r\n */\r\nexport function useError(): ErrorContextValue {\r\n const context = useContext(ErrorContext);\r\n\r\n // Return safe defaults if used outside provider\r\n // This allows the hook to be used without forcing ErrorProvider\r\n if (!context) {\r\n return {\r\n error: null,\r\n clearError: () => { },\r\n hasError: false,\r\n };\r\n }\r\n\r\n return context;\r\n}\r\n\r\n// ============================================================================\r\n// Re-exports for convenience\r\n// ============================================================================\r\n\r\nexport { ErrorContext };\r\n"]}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flight Render Engine - Universal rendering primitives
|
|
3
|
+
*
|
|
4
|
+
* Supports SSR, SSG, CSR, and ISR - the user chooses per route.
|
|
5
|
+
*/
|
|
6
|
+
/** Rendering modes supported by Flight */
|
|
7
|
+
type RenderMode = 'ssr' | 'ssg' | 'csr' | 'isr';
|
|
8
|
+
/** Context passed to render functions */
|
|
9
|
+
interface RenderContext {
|
|
10
|
+
/** The URL being rendered */
|
|
11
|
+
url: URL;
|
|
12
|
+
/** Route parameters */
|
|
13
|
+
params: Record<string, string | string[]>;
|
|
14
|
+
/** Request headers (available in SSR/ISR) */
|
|
15
|
+
headers?: Headers;
|
|
16
|
+
/** Cookies (available in SSR/ISR) */
|
|
17
|
+
cookies?: Record<string, string>;
|
|
18
|
+
/** Request method */
|
|
19
|
+
method?: string;
|
|
20
|
+
/** Request body (for POST/PUT/etc) */
|
|
21
|
+
body?: unknown;
|
|
22
|
+
/** Custom context data */
|
|
23
|
+
locals?: Record<string, unknown>;
|
|
24
|
+
}
|
|
25
|
+
/** Result of a render operation */
|
|
26
|
+
interface RenderResult {
|
|
27
|
+
/** HTML content */
|
|
28
|
+
html: string;
|
|
29
|
+
/** HTTP status code */
|
|
30
|
+
status: number;
|
|
31
|
+
/** Response headers */
|
|
32
|
+
headers: Record<string, string>;
|
|
33
|
+
/** Head elements to inject */
|
|
34
|
+
head?: {
|
|
35
|
+
title?: string;
|
|
36
|
+
meta?: Array<{
|
|
37
|
+
name?: string;
|
|
38
|
+
property?: string;
|
|
39
|
+
content: string;
|
|
40
|
+
}>;
|
|
41
|
+
links?: Array<{
|
|
42
|
+
rel: string;
|
|
43
|
+
href: string;
|
|
44
|
+
[key: string]: string;
|
|
45
|
+
}>;
|
|
46
|
+
scripts?: Array<{
|
|
47
|
+
src?: string;
|
|
48
|
+
content?: string;
|
|
49
|
+
type?: string;
|
|
50
|
+
}>;
|
|
51
|
+
styles?: Array<{
|
|
52
|
+
href?: string;
|
|
53
|
+
content?: string;
|
|
54
|
+
}>;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/** Configuration for SSG/ISR */
|
|
58
|
+
interface StaticRenderConfig {
|
|
59
|
+
/** Paths to pre-render */
|
|
60
|
+
paths: string[] | (() => Promise<string[]>);
|
|
61
|
+
/** Fallback behavior for non-pre-rendered paths */
|
|
62
|
+
fallback?: 'blocking' | 'prerender' | false;
|
|
63
|
+
}
|
|
64
|
+
/** Configuration for ISR */
|
|
65
|
+
interface ISRConfig extends StaticRenderConfig {
|
|
66
|
+
/** Revalidation time in seconds */
|
|
67
|
+
revalidate: number;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check if a render mode requires server runtime
|
|
71
|
+
*/
|
|
72
|
+
declare function requiresServer(mode: RenderMode): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Check if a render mode can be statically generated
|
|
75
|
+
*/
|
|
76
|
+
declare function canBeStatic(mode: RenderMode): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Check if a render mode is purely client-side
|
|
79
|
+
*/
|
|
80
|
+
declare function isClientOnly(mode: RenderMode): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* UI Framework Integration Interface
|
|
83
|
+
*
|
|
84
|
+
* Each UI framework (React, Vue, Svelte, etc.) implements this interface
|
|
85
|
+
* to integrate with Flight's render engine.
|
|
86
|
+
*/
|
|
87
|
+
interface UIFrameworkAdapter<Component = unknown> {
|
|
88
|
+
/** Framework name */
|
|
89
|
+
name: string;
|
|
90
|
+
/**
|
|
91
|
+
* Render a component to HTML string (for SSR/SSG)
|
|
92
|
+
*/
|
|
93
|
+
renderToString(component: Component, context: RenderContext): Promise<RenderResult>;
|
|
94
|
+
/**
|
|
95
|
+
* Render a component to a stream (for streaming SSR)
|
|
96
|
+
*/
|
|
97
|
+
renderToStream?(component: Component, context: RenderContext): Promise<ReadableStream<Uint8Array>>;
|
|
98
|
+
/**
|
|
99
|
+
* Generate client hydration script
|
|
100
|
+
*/
|
|
101
|
+
getHydrationScript?(component: Component): string;
|
|
102
|
+
/**
|
|
103
|
+
* File extensions this adapter handles
|
|
104
|
+
*/
|
|
105
|
+
extensions: string[];
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Create a minimal HTML shell
|
|
109
|
+
*/
|
|
110
|
+
declare function createHTMLShell(options: {
|
|
111
|
+
head?: string;
|
|
112
|
+
body: string;
|
|
113
|
+
scripts?: string[];
|
|
114
|
+
styles?: string[];
|
|
115
|
+
htmlAttributes?: Record<string, string>;
|
|
116
|
+
bodyAttributes?: Record<string, string>;
|
|
117
|
+
}): string;
|
|
118
|
+
/**
|
|
119
|
+
* Escape HTML special characters
|
|
120
|
+
*/
|
|
121
|
+
declare function escapeHtml(str: string): string;
|
|
122
|
+
/**
|
|
123
|
+
* Create a CSR shell (minimal HTML that loads client bundle)
|
|
124
|
+
*/
|
|
125
|
+
declare function createCSRShell(options: {
|
|
126
|
+
title?: string;
|
|
127
|
+
entryScript: string;
|
|
128
|
+
rootId?: string;
|
|
129
|
+
}): RenderResult;
|
|
130
|
+
|
|
131
|
+
export { type ISRConfig, type RenderContext, type RenderMode, type RenderResult, type StaticRenderConfig, type UIFrameworkAdapter, canBeStatic, createCSRShell, createHTMLShell, escapeHtml, isClientOnly, requiresServer };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flight Router - File-based routing with dynamic patterns
|
|
3
|
+
*/
|
|
4
|
+
interface RouteParams {
|
|
5
|
+
[key: string]: string | string[];
|
|
6
|
+
}
|
|
7
|
+
interface Route<T = unknown> {
|
|
8
|
+
/** Route path pattern (e.g., '/blog/[slug]', '/api/[...path]') */
|
|
9
|
+
path: string;
|
|
10
|
+
/** Handler or component for this route */
|
|
11
|
+
handler: T;
|
|
12
|
+
/** Rendering mode for this route */
|
|
13
|
+
mode?: 'ssr' | 'ssg' | 'csr' | 'isr';
|
|
14
|
+
/** Metadata for the route */
|
|
15
|
+
meta?: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
interface RouteMatch<T = unknown> {
|
|
18
|
+
/** The matched route */
|
|
19
|
+
route: Route<T>;
|
|
20
|
+
/** Extracted parameters from the URL */
|
|
21
|
+
params: RouteParams;
|
|
22
|
+
/** The original path that was matched */
|
|
23
|
+
path: string;
|
|
24
|
+
}
|
|
25
|
+
interface Router<T = unknown> {
|
|
26
|
+
/** Add a route to the router */
|
|
27
|
+
add(route: Route<T>): void;
|
|
28
|
+
/** Add multiple routes */
|
|
29
|
+
addAll(routes: Route<T>[]): void;
|
|
30
|
+
/** Match a path against registered routes */
|
|
31
|
+
match(path: string): RouteMatch<T> | null;
|
|
32
|
+
/** Get all registered routes */
|
|
33
|
+
routes(): Route<T>[];
|
|
34
|
+
/** Remove a route by path */
|
|
35
|
+
remove(path: string): boolean;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Create a new Flight router instance
|
|
39
|
+
*/
|
|
40
|
+
declare function createRouter<T = unknown>(): Router<T>;
|
|
41
|
+
interface FileRoute {
|
|
42
|
+
/** File path relative to routes directory */
|
|
43
|
+
filePath: string;
|
|
44
|
+
/** Generated route path */
|
|
45
|
+
routePath: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Convert a file path to a route path
|
|
49
|
+
*
|
|
50
|
+
* Examples:
|
|
51
|
+
* - index.tsx -> /
|
|
52
|
+
* - about.tsx -> /about
|
|
53
|
+
* - blog/index.tsx -> /blog
|
|
54
|
+
* - blog/[slug].tsx -> /blog/[slug]
|
|
55
|
+
* - api/[...path].ts -> /api/[...path]
|
|
56
|
+
* - (group)/settings.tsx -> /settings (groups are ignored)
|
|
57
|
+
*/
|
|
58
|
+
declare function filePathToRoutePath(filePath: string): string;
|
|
59
|
+
/**
|
|
60
|
+
* Sort routes by specificity (most specific first)
|
|
61
|
+
* Static routes come before dynamic routes
|
|
62
|
+
*/
|
|
63
|
+
declare function sortRoutes<T>(routes: Route<T>[]): Route<T>[];
|
|
64
|
+
|
|
65
|
+
export { type FileRoute, type Route, type RouteMatch, type RouteParams, type Router, createRouter, filePathToRoutePath, sortRoutes };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { ReactConsumerOptions, ReactServerComponent, createReactAdapter, createReactConsumer, markAsClientComponent } from './react.js';
|
|
2
|
+
export { VueConsumerOptions, VueDependencies, VueServerComponent, createVueAdapter, createVueConsumer, markAsVueClientComponent } from './vue.js';
|
|
3
|
+
export { SolidConsumerOptions, SolidDependencies, SolidServerComponent, createSolidAdapter, createSolidConsumer, isServer as isSolidServer, markAsSolidClientComponent } from './solid.js';
|
|
4
|
+
export { PreactConsumerOptions, PreactDependencies, PreactServerComponent, createPreactAdapter, createPreactConsumer, markAsPreactClientComponent, lazy as preactLazy } from './preact.js';
|
|
5
|
+
export { ElementTypeInfo, UIAdapter } from '../renderer.js';
|
|
6
|
+
import 'react';
|
|
7
|
+
import '../context.js';
|
|
8
|
+
import '../payload.js';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import '../../chunk-Y22AMGTM.js';
|
|
2
|
+
export { createReactAdapter, createReactConsumer, markAsClientComponent } from '../../chunk-AE3JTS73.js';
|
|
3
|
+
export { createVueAdapter, createVueConsumer, markAsVueClientComponent } from '../../chunk-DCLVXFVH.js';
|
|
4
|
+
export { createSolidAdapter, createSolidConsumer, isServer as isSolidServer, markAsSolidClientComponent } from '../../chunk-7ZZF4ULK.js';
|
|
5
|
+
export { createPreactAdapter, createPreactConsumer, markAsPreactClientComponent, lazy as preactLazy } from '../../chunk-KX6UYWWR.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
7
|
+
//# sourceMappingURL=index.js.map
|