@useavalon/avalon 0.1.11 → 0.1.13
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/README.md +54 -54
- package/mod.ts +302 -302
- package/package.json +49 -26
- package/src/build/integration-bundler-plugin.ts +116 -116
- package/src/build/integration-config.ts +168 -168
- package/src/build/integration-detection-plugin.ts +117 -117
- package/src/build/integration-resolver-plugin.ts +90 -90
- package/src/build/island-manifest.ts +269 -269
- package/src/build/island-types-generator.ts +476 -476
- package/src/build/mdx-island-transform.ts +464 -464
- package/src/build/mdx-plugin.ts +98 -98
- package/src/build/page-island-transform.ts +598 -598
- package/src/build/prop-extractors/index.ts +21 -21
- package/src/build/prop-extractors/lit.ts +140 -140
- package/src/build/prop-extractors/qwik.ts +16 -16
- package/src/build/prop-extractors/solid.ts +125 -125
- package/src/build/prop-extractors/svelte.ts +194 -194
- package/src/build/prop-extractors/vue.ts +111 -111
- package/src/build/sidecar-file-manager.ts +104 -104
- package/src/build/sidecar-renderer.ts +30 -30
- package/src/client/adapters/index.ts +21 -13
- package/src/client/components.ts +35 -35
- package/src/client/css-hmr-handler.ts +344 -344
- package/src/client/framework-adapter.ts +462 -462
- package/src/client/hmr-coordinator.ts +396 -396
- package/src/client/hmr-error-overlay.js +533 -533
- package/src/client/main.js +824 -816
- package/src/client/types/framework-runtime.d.ts +68 -68
- package/src/client/types/vite-hmr.d.ts +46 -46
- package/src/client/types/vite-virtual-modules.d.ts +70 -60
- package/src/components/Image.tsx +123 -123
- package/src/components/IslandErrorBoundary.tsx +145 -145
- package/src/components/LayoutDataErrorBoundary.tsx +141 -141
- package/src/components/LayoutErrorBoundary.tsx +127 -127
- package/src/components/PersistentIsland.tsx +52 -52
- package/src/components/StreamingErrorBoundary.tsx +233 -233
- package/src/components/StreamingLayout.tsx +538 -538
- package/src/core/components/component-analyzer.ts +192 -192
- package/src/core/components/component-detection.ts +508 -508
- package/src/core/components/enhanced-framework-detector.ts +500 -500
- package/src/core/components/framework-registry.ts +563 -563
- package/src/core/content/mdx-processor.ts +46 -46
- package/src/core/integrations/index.ts +19 -19
- package/src/core/integrations/loader.ts +125 -125
- package/src/core/integrations/registry.ts +175 -175
- package/src/core/islands/island-persistence.ts +325 -325
- package/src/core/islands/island-state-serializer.ts +258 -258
- package/src/core/islands/persistent-island-context.tsx +80 -80
- package/src/core/islands/use-persistent-state.ts +68 -68
- package/src/core/layout/enhanced-layout-resolver.ts +322 -322
- package/src/core/layout/layout-cache-manager.ts +485 -485
- package/src/core/layout/layout-composer.ts +357 -357
- package/src/core/layout/layout-data-loader.ts +516 -516
- package/src/core/layout/layout-discovery.ts +243 -243
- package/src/core/layout/layout-matcher.ts +299 -299
- package/src/core/layout/layout-types.ts +110 -110
- package/src/core/modules/framework-module-resolver.ts +273 -273
- package/src/islands/component-analysis.ts +213 -213
- package/src/islands/css-utils.ts +565 -565
- package/src/islands/discovery/index.ts +80 -80
- package/src/islands/discovery/registry.ts +340 -340
- package/src/islands/discovery/resolver.ts +477 -477
- package/src/islands/discovery/scanner.ts +386 -386
- package/src/islands/discovery/types.ts +117 -117
- package/src/islands/discovery/validator.ts +544 -544
- package/src/islands/discovery/watcher.ts +368 -368
- package/src/islands/framework-detection.ts +428 -428
- package/src/islands/integration-loader.ts +490 -490
- package/src/islands/island.tsx +565 -565
- package/src/islands/render-cache.ts +550 -550
- package/src/islands/types.ts +80 -80
- package/src/islands/universal-css-collector.ts +157 -157
- package/src/islands/universal-head-collector.ts +137 -137
- package/src/layout-system.d.ts +592 -592
- package/src/layout-system.ts +218 -218
- package/src/middleware/discovery.ts +268 -268
- package/src/middleware/executor.ts +315 -315
- package/src/middleware/index.ts +76 -76
- package/src/middleware/types.ts +99 -99
- package/src/nitro/build-config.ts +575 -575
- package/src/nitro/config.ts +483 -483
- package/src/nitro/error-handler.ts +636 -636
- package/src/nitro/index.ts +173 -173
- package/src/nitro/island-manifest.ts +584 -584
- package/src/nitro/middleware-adapter.ts +260 -260
- package/src/nitro/renderer.ts +1471 -1471
- package/src/nitro/route-discovery.ts +439 -439
- package/src/nitro/types.ts +321 -321
- package/src/render/collect-css.ts +198 -198
- package/src/render/error-pages.ts +79 -79
- package/src/render/isolated-ssr-renderer.ts +654 -654
- package/src/render/ssr.ts +1030 -1030
- package/src/schemas/api.ts +30 -30
- package/src/schemas/core.ts +64 -64
- package/src/schemas/index.ts +212 -212
- package/src/schemas/layout.ts +279 -279
- package/src/schemas/routing/index.ts +38 -38
- package/src/schemas/routing.ts +376 -376
- package/src/types/as-island.ts +20 -20
- package/src/types/image.d.ts +106 -106
- package/src/types/index.d.ts +22 -22
- package/src/types/island-jsx.d.ts +33 -33
- package/src/types/island-prop.d.ts +20 -20
- package/src/types/layout.ts +285 -285
- package/src/types/mdx.d.ts +6 -6
- package/src/types/routing.ts +555 -555
- package/src/types/types.ts +5 -5
- package/src/types/urlpattern.d.ts +49 -49
- package/src/types/vite-env.d.ts +11 -11
- package/src/utils/dev-logger.ts +299 -299
- package/src/utils/fs.ts +151 -151
- package/src/vite-plugin/auto-discover.ts +551 -551
- package/src/vite-plugin/config.ts +266 -266
- package/src/vite-plugin/errors.ts +127 -127
- package/src/vite-plugin/image-optimization.ts +156 -156
- package/src/vite-plugin/integration-activator.ts +126 -126
- package/src/vite-plugin/island-sidecar-plugin.ts +176 -176
- package/src/vite-plugin/module-discovery.ts +189 -189
- package/src/vite-plugin/nitro-integration.ts +1354 -1354
- package/src/vite-plugin/plugin.ts +403 -409
- package/src/vite-plugin/types.ts +327 -327
- package/src/vite-plugin/validation.ts +228 -228
- package/src/client/adapters/index.js +0 -12
- package/src/client/adapters/lit-adapter.js +0 -467
- package/src/client/adapters/lit-adapter.ts +0 -654
- package/src/client/adapters/preact-adapter.js +0 -223
- package/src/client/adapters/preact-adapter.ts +0 -331
- package/src/client/adapters/qwik-adapter.js +0 -259
- package/src/client/adapters/qwik-adapter.ts +0 -345
- package/src/client/adapters/react-adapter.js +0 -220
- package/src/client/adapters/react-adapter.ts +0 -353
- package/src/client/adapters/solid-adapter.js +0 -295
- package/src/client/adapters/solid-adapter.ts +0 -451
- package/src/client/adapters/svelte-adapter.js +0 -368
- package/src/client/adapters/svelte-adapter.ts +0 -524
- package/src/client/adapters/vue-adapter.js +0 -278
- package/src/client/adapters/vue-adapter.ts +0 -467
- package/src/client/components.js +0 -23
- package/src/client/css-hmr-handler.js +0 -263
- package/src/client/framework-adapter.js +0 -283
- package/src/client/hmr-coordinator.js +0 -274
package/src/nitro/types.ts
CHANGED
|
@@ -1,321 +1,321 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Nitro Types and Interfaces for Avalon
|
|
3
|
-
*
|
|
4
|
-
* This module defines the core types used throughout the Nitro integration,
|
|
5
|
-
* including render context, runtime configuration, and route definitions.
|
|
6
|
-
*
|
|
7
|
-
* In Nitro v3, canonical types should be imported from `nitro/types`.
|
|
8
|
-
* Avalon-specific types that extend or complement Nitro's types are defined here.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import type { MiddlewareContext } from "../nitro/middleware-adapter.ts";
|
|
12
|
-
import type { ApiMethod } from "../schemas/api.ts";
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* ServerRequest type reference from Nitro v3 (`nitro/types`).
|
|
16
|
-
* Re-exported here for convenience within Avalon's Nitro integration.
|
|
17
|
-
*
|
|
18
|
-
* Represents the server-side request object in Nitro v3's type system.
|
|
19
|
-
* When the full `nitro/types` package is available, prefer importing directly.
|
|
20
|
-
*/
|
|
21
|
-
export interface ServerRequest {
|
|
22
|
-
/** HTTP method */
|
|
23
|
-
method: string;
|
|
24
|
-
/** Request URL */
|
|
25
|
-
url: string;
|
|
26
|
-
/** Request headers */
|
|
27
|
-
headers: Record<string, string | string[] | undefined>;
|
|
28
|
-
/** Request body (if applicable) */
|
|
29
|
-
body?: unknown;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* H3 Event type placeholder
|
|
34
|
-
* This represents the H3 event object from Nitro's h3 library
|
|
35
|
-
*/
|
|
36
|
-
export interface H3Event {
|
|
37
|
-
/** HTTP method */
|
|
38
|
-
method: string;
|
|
39
|
-
/** Node.js request object */
|
|
40
|
-
node?: {
|
|
41
|
-
req: unknown;
|
|
42
|
-
res?: unknown;
|
|
43
|
-
};
|
|
44
|
-
/** Event context for storing data */
|
|
45
|
-
context: Record<string, unknown>;
|
|
46
|
-
/** Request path */
|
|
47
|
-
path: string;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Avalon-specific runtime configuration stored in Nitro's runtimeConfig
|
|
52
|
-
* This is accessed via useRuntimeConfig().avalon in handlers
|
|
53
|
-
*/
|
|
54
|
-
export interface AvalonRuntimeConfig {
|
|
55
|
-
/** Enable streaming SSR responses */
|
|
56
|
-
streaming: boolean;
|
|
57
|
-
/** Pages directory path relative to project root */
|
|
58
|
-
pagesDir: string;
|
|
59
|
-
/** Layouts directory path relative to project root */
|
|
60
|
-
layoutsDir: string;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Render context provided to the SSR renderer
|
|
65
|
-
* Contains all information needed to render a page
|
|
66
|
-
*/
|
|
67
|
-
export interface NitroRenderContext {
|
|
68
|
-
/** Request URL */
|
|
69
|
-
url: URL;
|
|
70
|
-
/** Route parameters extracted from dynamic segments */
|
|
71
|
-
params: Record<string, string>;
|
|
72
|
-
/** Query parameters from URL search string */
|
|
73
|
-
query: Record<string, string | string[]>;
|
|
74
|
-
/** Original HTTP request */
|
|
75
|
-
request: Request;
|
|
76
|
-
/** H3 event for advanced use cases */
|
|
77
|
-
event: H3Event;
|
|
78
|
-
/** Middleware context if middleware was executed */
|
|
79
|
-
middlewareContext?: MiddlewareContext;
|
|
80
|
-
/** Layout context for rendering */
|
|
81
|
-
layoutContext?: LayoutContext;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Layout context for page rendering
|
|
86
|
-
*/
|
|
87
|
-
export interface LayoutContext {
|
|
88
|
-
/** Layout component paths in nesting order (outermost first) */
|
|
89
|
-
layouts: string[];
|
|
90
|
-
/** Layout data loaded from layout modules */
|
|
91
|
-
layoutData?: Record<string, unknown>;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Discovered route information
|
|
96
|
-
*/
|
|
97
|
-
export interface DiscoveredRoute {
|
|
98
|
-
/** Route type: page or API */
|
|
99
|
-
type: "page" | "api";
|
|
100
|
-
/** Absolute file path to the route handler */
|
|
101
|
-
filePath: string;
|
|
102
|
-
/** Route pattern for matching (e.g., /users/:id) */
|
|
103
|
-
pattern: string;
|
|
104
|
-
/** Extracted parameter names from dynamic segments */
|
|
105
|
-
params: string[];
|
|
106
|
-
/** HTTP method for API routes with method suffix */
|
|
107
|
-
method?: ApiMethod;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Nitro route configuration
|
|
112
|
-
*/
|
|
113
|
-
export interface NitroRouteConfig {
|
|
114
|
-
/** Route pattern (e.g., /users/:id) */
|
|
115
|
-
pattern: string;
|
|
116
|
-
/** Route handler type */
|
|
117
|
-
type: "page" | "api" | "middleware";
|
|
118
|
-
/** File path to the handler */
|
|
119
|
-
filePath: string;
|
|
120
|
-
/** Extracted parameter names */
|
|
121
|
-
params: string[];
|
|
122
|
-
/** HTTP method (for API routes) */
|
|
123
|
-
method?: ApiMethod;
|
|
124
|
-
/** Layout chain for pages */
|
|
125
|
-
layouts?: string[];
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* SSR render options
|
|
130
|
-
*/
|
|
131
|
-
export interface SSRRenderOptions {
|
|
132
|
-
/** Enable streaming SSR */
|
|
133
|
-
streaming?: boolean;
|
|
134
|
-
/** Callback when shell is ready (for streaming) */
|
|
135
|
-
onShellReady?: () => void;
|
|
136
|
-
/** Callback when all content is ready */
|
|
137
|
-
onAllReady?: () => void;
|
|
138
|
-
/** Callback on render error */
|
|
139
|
-
onError?: (error: Error) => void;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* SSR render result
|
|
144
|
-
*/
|
|
145
|
-
export interface SSRRenderResult {
|
|
146
|
-
/** Rendered HTML string or stream */
|
|
147
|
-
html: string | ReadableStream<Uint8Array>;
|
|
148
|
-
/** HTTP status code */
|
|
149
|
-
statusCode: number;
|
|
150
|
-
/** Response headers */
|
|
151
|
-
headers: Record<string, string>;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* Island manifest entry for a single island
|
|
156
|
-
*/
|
|
157
|
-
export interface IslandEntry {
|
|
158
|
-
/** Compiled JavaScript path */
|
|
159
|
-
src: string;
|
|
160
|
-
/** Framework identifier (react, vue, svelte, etc.) */
|
|
161
|
-
framework: string;
|
|
162
|
-
/** CSS dependencies */
|
|
163
|
-
css?: string[];
|
|
164
|
-
/** Preload dependencies */
|
|
165
|
-
preload?: string[];
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Island manifest for production builds
|
|
170
|
-
*/
|
|
171
|
-
export interface IslandManifest {
|
|
172
|
-
/** Map of island ID to compiled asset information */
|
|
173
|
-
islands: Record<string, IslandEntry>;
|
|
174
|
-
/** Client entry script path */
|
|
175
|
-
clientEntry: string;
|
|
176
|
-
/** CSS assets to inject */
|
|
177
|
-
css: string[];
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Page module export interface
|
|
182
|
-
*/
|
|
183
|
-
export interface PageModule {
|
|
184
|
-
/** Default export - the page component */
|
|
185
|
-
default: unknown;
|
|
186
|
-
/** Optional page metadata */
|
|
187
|
-
metadata?: PageMetadata;
|
|
188
|
-
/** Optional getStaticProps for static generation */
|
|
189
|
-
getStaticProps?: () => Promise<Record<string, unknown>>;
|
|
190
|
-
/** Optional getServerSideProps for SSR */
|
|
191
|
-
getServerSideProps?: (
|
|
192
|
-
context: NitroRenderContext
|
|
193
|
-
) => Promise<Record<string, unknown>>;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* Page metadata for SEO and configuration
|
|
198
|
-
*/
|
|
199
|
-
export interface PageMetadata {
|
|
200
|
-
/** Page title */
|
|
201
|
-
title?: string;
|
|
202
|
-
/** Page description */
|
|
203
|
-
description?: string;
|
|
204
|
-
/** Open Graph metadata */
|
|
205
|
-
openGraph?: {
|
|
206
|
-
title?: string;
|
|
207
|
-
description?: string;
|
|
208
|
-
image?: string;
|
|
209
|
-
};
|
|
210
|
-
/** Additional head elements */
|
|
211
|
-
head?: Array<{
|
|
212
|
-
tag: string;
|
|
213
|
-
attrs?: Record<string, string>;
|
|
214
|
-
content?: string;
|
|
215
|
-
}>;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
/**
|
|
219
|
-
* Error response structure
|
|
220
|
-
*/
|
|
221
|
-
export interface ErrorResponse {
|
|
222
|
-
/** HTTP status code */
|
|
223
|
-
statusCode: number;
|
|
224
|
-
/** Error message */
|
|
225
|
-
message: string;
|
|
226
|
-
/** Stack trace (development only) */
|
|
227
|
-
stack?: string;
|
|
228
|
-
/** Additional error data */
|
|
229
|
-
data?: Record<string, unknown>;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
/**
|
|
233
|
-
* HTTP error class for typed error handling
|
|
234
|
-
*/
|
|
235
|
-
export class HttpError extends Error {
|
|
236
|
-
/** HTTP status code */
|
|
237
|
-
statusCode: number;
|
|
238
|
-
/** Additional error data */
|
|
239
|
-
data?: Record<string, unknown>;
|
|
240
|
-
|
|
241
|
-
constructor(
|
|
242
|
-
statusCode: number,
|
|
243
|
-
message: string,
|
|
244
|
-
data?: Record<string, unknown>
|
|
245
|
-
) {
|
|
246
|
-
super(message);
|
|
247
|
-
this.name = "HttpError";
|
|
248
|
-
this.statusCode = statusCode;
|
|
249
|
-
this.data = data;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
/**
|
|
254
|
-
* Create a 404 Not Found error
|
|
255
|
-
*/
|
|
256
|
-
export function createNotFoundError(message = "Not Found"): HttpError {
|
|
257
|
-
return new HttpError(404, message);
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
/**
|
|
261
|
-
* Create a 405 Method Not Allowed error
|
|
262
|
-
*/
|
|
263
|
-
export function createMethodNotAllowedError(
|
|
264
|
-
allowedMethods: string[]
|
|
265
|
-
): HttpError {
|
|
266
|
-
return new HttpError(405, "Method Not Allowed", { allowed: allowedMethods });
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
/**
|
|
270
|
-
* Create a 500 Internal Server Error
|
|
271
|
-
*/
|
|
272
|
-
export function createInternalError(message = "Internal Server Error"): HttpError {
|
|
273
|
-
return new HttpError(500, message);
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
/**
|
|
277
|
-
* Type guard to check if an error is an HttpError
|
|
278
|
-
*/
|
|
279
|
-
export function isHttpError(error: unknown): error is HttpError {
|
|
280
|
-
return error instanceof HttpError;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
/**
|
|
284
|
-
* Avalon context stored in H3 event.context
|
|
285
|
-
*/
|
|
286
|
-
export interface AvalonEventContext {
|
|
287
|
-
/** Middleware context after middleware execution */
|
|
288
|
-
middlewareContext?: MiddlewareContext;
|
|
289
|
-
/** Resolved route information */
|
|
290
|
-
route?: NitroRouteConfig;
|
|
291
|
-
/** Page props from getServerSideProps */
|
|
292
|
-
pageProps?: Record<string, unknown>;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
/**
|
|
296
|
-
* Development server options
|
|
297
|
-
*/
|
|
298
|
-
export interface DevServerOptions {
|
|
299
|
-
/** Port to listen on */
|
|
300
|
-
port?: number;
|
|
301
|
-
/** Host to bind to */
|
|
302
|
-
host?: string;
|
|
303
|
-
/** Enable HTTPS */
|
|
304
|
-
https?: boolean;
|
|
305
|
-
/** Open browser on start */
|
|
306
|
-
open?: boolean;
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
/**
|
|
310
|
-
* Build options for production
|
|
311
|
-
*/
|
|
312
|
-
export interface BuildOptions {
|
|
313
|
-
/** Output directory */
|
|
314
|
-
outDir?: string;
|
|
315
|
-
/** Enable source maps */
|
|
316
|
-
sourcemap?: boolean;
|
|
317
|
-
/** Minify output */
|
|
318
|
-
minify?: boolean;
|
|
319
|
-
/** Target preset */
|
|
320
|
-
preset?: string;
|
|
321
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Nitro Types and Interfaces for Avalon
|
|
3
|
+
*
|
|
4
|
+
* This module defines the core types used throughout the Nitro integration,
|
|
5
|
+
* including render context, runtime configuration, and route definitions.
|
|
6
|
+
*
|
|
7
|
+
* In Nitro v3, canonical types should be imported from `nitro/types`.
|
|
8
|
+
* Avalon-specific types that extend or complement Nitro's types are defined here.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { MiddlewareContext } from "../nitro/middleware-adapter.ts";
|
|
12
|
+
import type { ApiMethod } from "../schemas/api.ts";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* ServerRequest type reference from Nitro v3 (`nitro/types`).
|
|
16
|
+
* Re-exported here for convenience within Avalon's Nitro integration.
|
|
17
|
+
*
|
|
18
|
+
* Represents the server-side request object in Nitro v3's type system.
|
|
19
|
+
* When the full `nitro/types` package is available, prefer importing directly.
|
|
20
|
+
*/
|
|
21
|
+
export interface ServerRequest {
|
|
22
|
+
/** HTTP method */
|
|
23
|
+
method: string;
|
|
24
|
+
/** Request URL */
|
|
25
|
+
url: string;
|
|
26
|
+
/** Request headers */
|
|
27
|
+
headers: Record<string, string | string[] | undefined>;
|
|
28
|
+
/** Request body (if applicable) */
|
|
29
|
+
body?: unknown;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* H3 Event type placeholder
|
|
34
|
+
* This represents the H3 event object from Nitro's h3 library
|
|
35
|
+
*/
|
|
36
|
+
export interface H3Event {
|
|
37
|
+
/** HTTP method */
|
|
38
|
+
method: string;
|
|
39
|
+
/** Node.js request object */
|
|
40
|
+
node?: {
|
|
41
|
+
req: unknown;
|
|
42
|
+
res?: unknown;
|
|
43
|
+
};
|
|
44
|
+
/** Event context for storing data */
|
|
45
|
+
context: Record<string, unknown>;
|
|
46
|
+
/** Request path */
|
|
47
|
+
path: string;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Avalon-specific runtime configuration stored in Nitro's runtimeConfig
|
|
52
|
+
* This is accessed via useRuntimeConfig().avalon in handlers
|
|
53
|
+
*/
|
|
54
|
+
export interface AvalonRuntimeConfig {
|
|
55
|
+
/** Enable streaming SSR responses */
|
|
56
|
+
streaming: boolean;
|
|
57
|
+
/** Pages directory path relative to project root */
|
|
58
|
+
pagesDir: string;
|
|
59
|
+
/** Layouts directory path relative to project root */
|
|
60
|
+
layoutsDir: string;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Render context provided to the SSR renderer
|
|
65
|
+
* Contains all information needed to render a page
|
|
66
|
+
*/
|
|
67
|
+
export interface NitroRenderContext {
|
|
68
|
+
/** Request URL */
|
|
69
|
+
url: URL;
|
|
70
|
+
/** Route parameters extracted from dynamic segments */
|
|
71
|
+
params: Record<string, string>;
|
|
72
|
+
/** Query parameters from URL search string */
|
|
73
|
+
query: Record<string, string | string[]>;
|
|
74
|
+
/** Original HTTP request */
|
|
75
|
+
request: Request;
|
|
76
|
+
/** H3 event for advanced use cases */
|
|
77
|
+
event: H3Event;
|
|
78
|
+
/** Middleware context if middleware was executed */
|
|
79
|
+
middlewareContext?: MiddlewareContext;
|
|
80
|
+
/** Layout context for rendering */
|
|
81
|
+
layoutContext?: LayoutContext;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Layout context for page rendering
|
|
86
|
+
*/
|
|
87
|
+
export interface LayoutContext {
|
|
88
|
+
/** Layout component paths in nesting order (outermost first) */
|
|
89
|
+
layouts: string[];
|
|
90
|
+
/** Layout data loaded from layout modules */
|
|
91
|
+
layoutData?: Record<string, unknown>;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Discovered route information
|
|
96
|
+
*/
|
|
97
|
+
export interface DiscoveredRoute {
|
|
98
|
+
/** Route type: page or API */
|
|
99
|
+
type: "page" | "api";
|
|
100
|
+
/** Absolute file path to the route handler */
|
|
101
|
+
filePath: string;
|
|
102
|
+
/** Route pattern for matching (e.g., /users/:id) */
|
|
103
|
+
pattern: string;
|
|
104
|
+
/** Extracted parameter names from dynamic segments */
|
|
105
|
+
params: string[];
|
|
106
|
+
/** HTTP method for API routes with method suffix */
|
|
107
|
+
method?: ApiMethod;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Nitro route configuration
|
|
112
|
+
*/
|
|
113
|
+
export interface NitroRouteConfig {
|
|
114
|
+
/** Route pattern (e.g., /users/:id) */
|
|
115
|
+
pattern: string;
|
|
116
|
+
/** Route handler type */
|
|
117
|
+
type: "page" | "api" | "middleware";
|
|
118
|
+
/** File path to the handler */
|
|
119
|
+
filePath: string;
|
|
120
|
+
/** Extracted parameter names */
|
|
121
|
+
params: string[];
|
|
122
|
+
/** HTTP method (for API routes) */
|
|
123
|
+
method?: ApiMethod;
|
|
124
|
+
/** Layout chain for pages */
|
|
125
|
+
layouts?: string[];
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* SSR render options
|
|
130
|
+
*/
|
|
131
|
+
export interface SSRRenderOptions {
|
|
132
|
+
/** Enable streaming SSR */
|
|
133
|
+
streaming?: boolean;
|
|
134
|
+
/** Callback when shell is ready (for streaming) */
|
|
135
|
+
onShellReady?: () => void;
|
|
136
|
+
/** Callback when all content is ready */
|
|
137
|
+
onAllReady?: () => void;
|
|
138
|
+
/** Callback on render error */
|
|
139
|
+
onError?: (error: Error) => void;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* SSR render result
|
|
144
|
+
*/
|
|
145
|
+
export interface SSRRenderResult {
|
|
146
|
+
/** Rendered HTML string or stream */
|
|
147
|
+
html: string | ReadableStream<Uint8Array>;
|
|
148
|
+
/** HTTP status code */
|
|
149
|
+
statusCode: number;
|
|
150
|
+
/** Response headers */
|
|
151
|
+
headers: Record<string, string>;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Island manifest entry for a single island
|
|
156
|
+
*/
|
|
157
|
+
export interface IslandEntry {
|
|
158
|
+
/** Compiled JavaScript path */
|
|
159
|
+
src: string;
|
|
160
|
+
/** Framework identifier (react, vue, svelte, etc.) */
|
|
161
|
+
framework: string;
|
|
162
|
+
/** CSS dependencies */
|
|
163
|
+
css?: string[];
|
|
164
|
+
/** Preload dependencies */
|
|
165
|
+
preload?: string[];
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Island manifest for production builds
|
|
170
|
+
*/
|
|
171
|
+
export interface IslandManifest {
|
|
172
|
+
/** Map of island ID to compiled asset information */
|
|
173
|
+
islands: Record<string, IslandEntry>;
|
|
174
|
+
/** Client entry script path */
|
|
175
|
+
clientEntry: string;
|
|
176
|
+
/** CSS assets to inject */
|
|
177
|
+
css: string[];
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Page module export interface
|
|
182
|
+
*/
|
|
183
|
+
export interface PageModule {
|
|
184
|
+
/** Default export - the page component */
|
|
185
|
+
default: unknown;
|
|
186
|
+
/** Optional page metadata */
|
|
187
|
+
metadata?: PageMetadata;
|
|
188
|
+
/** Optional getStaticProps for static generation */
|
|
189
|
+
getStaticProps?: () => Promise<Record<string, unknown>>;
|
|
190
|
+
/** Optional getServerSideProps for SSR */
|
|
191
|
+
getServerSideProps?: (
|
|
192
|
+
context: NitroRenderContext
|
|
193
|
+
) => Promise<Record<string, unknown>>;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Page metadata for SEO and configuration
|
|
198
|
+
*/
|
|
199
|
+
export interface PageMetadata {
|
|
200
|
+
/** Page title */
|
|
201
|
+
title?: string;
|
|
202
|
+
/** Page description */
|
|
203
|
+
description?: string;
|
|
204
|
+
/** Open Graph metadata */
|
|
205
|
+
openGraph?: {
|
|
206
|
+
title?: string;
|
|
207
|
+
description?: string;
|
|
208
|
+
image?: string;
|
|
209
|
+
};
|
|
210
|
+
/** Additional head elements */
|
|
211
|
+
head?: Array<{
|
|
212
|
+
tag: string;
|
|
213
|
+
attrs?: Record<string, string>;
|
|
214
|
+
content?: string;
|
|
215
|
+
}>;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Error response structure
|
|
220
|
+
*/
|
|
221
|
+
export interface ErrorResponse {
|
|
222
|
+
/** HTTP status code */
|
|
223
|
+
statusCode: number;
|
|
224
|
+
/** Error message */
|
|
225
|
+
message: string;
|
|
226
|
+
/** Stack trace (development only) */
|
|
227
|
+
stack?: string;
|
|
228
|
+
/** Additional error data */
|
|
229
|
+
data?: Record<string, unknown>;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* HTTP error class for typed error handling
|
|
234
|
+
*/
|
|
235
|
+
export class HttpError extends Error {
|
|
236
|
+
/** HTTP status code */
|
|
237
|
+
statusCode: number;
|
|
238
|
+
/** Additional error data */
|
|
239
|
+
data?: Record<string, unknown>;
|
|
240
|
+
|
|
241
|
+
constructor(
|
|
242
|
+
statusCode: number,
|
|
243
|
+
message: string,
|
|
244
|
+
data?: Record<string, unknown>
|
|
245
|
+
) {
|
|
246
|
+
super(message);
|
|
247
|
+
this.name = "HttpError";
|
|
248
|
+
this.statusCode = statusCode;
|
|
249
|
+
this.data = data;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Create a 404 Not Found error
|
|
255
|
+
*/
|
|
256
|
+
export function createNotFoundError(message = "Not Found"): HttpError {
|
|
257
|
+
return new HttpError(404, message);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Create a 405 Method Not Allowed error
|
|
262
|
+
*/
|
|
263
|
+
export function createMethodNotAllowedError(
|
|
264
|
+
allowedMethods: string[]
|
|
265
|
+
): HttpError {
|
|
266
|
+
return new HttpError(405, "Method Not Allowed", { allowed: allowedMethods });
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Create a 500 Internal Server Error
|
|
271
|
+
*/
|
|
272
|
+
export function createInternalError(message = "Internal Server Error"): HttpError {
|
|
273
|
+
return new HttpError(500, message);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Type guard to check if an error is an HttpError
|
|
278
|
+
*/
|
|
279
|
+
export function isHttpError(error: unknown): error is HttpError {
|
|
280
|
+
return error instanceof HttpError;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Avalon context stored in H3 event.context
|
|
285
|
+
*/
|
|
286
|
+
export interface AvalonEventContext {
|
|
287
|
+
/** Middleware context after middleware execution */
|
|
288
|
+
middlewareContext?: MiddlewareContext;
|
|
289
|
+
/** Resolved route information */
|
|
290
|
+
route?: NitroRouteConfig;
|
|
291
|
+
/** Page props from getServerSideProps */
|
|
292
|
+
pageProps?: Record<string, unknown>;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Development server options
|
|
297
|
+
*/
|
|
298
|
+
export interface DevServerOptions {
|
|
299
|
+
/** Port to listen on */
|
|
300
|
+
port?: number;
|
|
301
|
+
/** Host to bind to */
|
|
302
|
+
host?: string;
|
|
303
|
+
/** Enable HTTPS */
|
|
304
|
+
https?: boolean;
|
|
305
|
+
/** Open browser on start */
|
|
306
|
+
open?: boolean;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Build options for production
|
|
311
|
+
*/
|
|
312
|
+
export interface BuildOptions {
|
|
313
|
+
/** Output directory */
|
|
314
|
+
outDir?: string;
|
|
315
|
+
/** Enable source maps */
|
|
316
|
+
sourcemap?: boolean;
|
|
317
|
+
/** Minify output */
|
|
318
|
+
minify?: boolean;
|
|
319
|
+
/** Target preset */
|
|
320
|
+
preset?: string;
|
|
321
|
+
}
|