@useavalon/avalon 0.1.13 → 0.1.15

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.
Files changed (230) hide show
  1. package/dist/mod.js +1 -0
  2. package/dist/src/build/integration-bundler-plugin.js +1 -0
  3. package/dist/src/build/integration-config.js +1 -0
  4. package/dist/src/build/integration-detection-plugin.js +1 -0
  5. package/dist/src/build/integration-resolver-plugin.js +1 -0
  6. package/dist/src/build/island-manifest.js +1 -0
  7. package/dist/src/build/island-types-generator.js +5 -0
  8. package/dist/src/build/mdx-island-transform.js +2 -0
  9. package/dist/src/build/mdx-plugin.js +1 -0
  10. package/dist/src/build/page-island-transform.js +3 -0
  11. package/dist/src/build/prop-extractors/index.js +1 -0
  12. package/dist/src/build/prop-extractors/lit.js +1 -0
  13. package/dist/src/build/prop-extractors/qwik.js +1 -0
  14. package/dist/src/build/prop-extractors/solid.js +1 -0
  15. package/dist/src/build/prop-extractors/svelte.js +1 -0
  16. package/dist/src/build/prop-extractors/vue.js +1 -0
  17. package/dist/src/build/sidecar-file-manager.js +1 -0
  18. package/dist/src/build/sidecar-renderer.js +6 -0
  19. package/dist/src/client/adapters/index.js +1 -0
  20. package/dist/src/client/components.js +1 -0
  21. package/dist/src/client/css-hmr-handler.js +1 -0
  22. package/dist/src/client/framework-adapter.js +13 -0
  23. package/dist/src/client/hmr-coordinator.js +1 -0
  24. package/dist/src/client/hmr-error-overlay.js +214 -0
  25. package/dist/src/client/main.js +39 -0
  26. package/dist/src/components/Image.js +1 -0
  27. package/dist/src/components/IslandErrorBoundary.js +1 -0
  28. package/dist/src/components/LayoutDataErrorBoundary.js +1 -0
  29. package/dist/src/components/LayoutErrorBoundary.js +1 -0
  30. package/dist/src/components/PersistentIsland.js +1 -0
  31. package/dist/src/components/StreamingErrorBoundary.js +1 -0
  32. package/dist/src/components/StreamingLayout.js +29 -0
  33. package/dist/src/core/components/component-analyzer.js +1 -0
  34. package/dist/src/core/components/component-detection.js +5 -0
  35. package/dist/src/core/components/enhanced-framework-detector.js +1 -0
  36. package/dist/src/core/components/framework-registry.js +1 -0
  37. package/dist/src/core/content/mdx-processor.js +1 -0
  38. package/dist/src/core/integrations/index.js +1 -0
  39. package/dist/src/core/integrations/loader.js +1 -0
  40. package/dist/src/core/integrations/registry.js +1 -0
  41. package/dist/src/core/islands/island-persistence.js +1 -0
  42. package/dist/src/core/islands/island-state-serializer.js +1 -0
  43. package/dist/src/core/islands/persistent-island-context.js +1 -0
  44. package/dist/src/core/islands/use-persistent-state.js +1 -0
  45. package/dist/src/core/layout/enhanced-layout-resolver.js +1 -0
  46. package/dist/src/core/layout/layout-cache-manager.js +1 -0
  47. package/dist/src/core/layout/layout-composer.js +1 -0
  48. package/dist/src/core/layout/layout-data-loader.js +1 -0
  49. package/dist/src/core/layout/layout-discovery.js +1 -0
  50. package/dist/src/core/layout/layout-matcher.js +1 -0
  51. package/dist/src/core/layout/layout-types.js +1 -0
  52. package/dist/src/core/modules/framework-module-resolver.js +1 -0
  53. package/dist/src/islands/component-analysis.js +1 -0
  54. package/dist/src/islands/css-utils.js +17 -0
  55. package/dist/src/islands/discovery/index.js +1 -0
  56. package/dist/src/islands/discovery/registry.js +1 -0
  57. package/dist/src/islands/discovery/resolver.js +2 -0
  58. package/dist/src/islands/discovery/scanner.js +1 -0
  59. package/dist/src/islands/discovery/types.js +1 -0
  60. package/dist/src/islands/discovery/validator.js +18 -0
  61. package/dist/src/islands/discovery/watcher.js +1 -0
  62. package/dist/src/islands/framework-detection.js +1 -0
  63. package/dist/src/islands/integration-loader.js +1 -0
  64. package/dist/src/islands/island.js +1 -0
  65. package/dist/src/islands/render-cache.js +1 -0
  66. package/dist/src/islands/types.js +1 -0
  67. package/dist/src/islands/universal-css-collector.js +5 -0
  68. package/dist/src/islands/universal-head-collector.js +2 -0
  69. package/dist/src/layout-system.js +1 -0
  70. package/dist/src/middleware/discovery.js +1 -0
  71. package/dist/src/middleware/executor.js +1 -0
  72. package/dist/src/middleware/index.js +1 -0
  73. package/dist/src/middleware/types.js +1 -0
  74. package/dist/src/nitro/build-config.js +1 -0
  75. package/dist/src/nitro/config.js +1 -0
  76. package/dist/src/nitro/error-handler.js +198 -0
  77. package/dist/src/nitro/index.js +1 -0
  78. package/dist/src/nitro/island-manifest.js +2 -0
  79. package/dist/src/nitro/middleware-adapter.js +1 -0
  80. package/dist/src/nitro/renderer.js +183 -0
  81. package/dist/src/nitro/route-discovery.js +1 -0
  82. package/dist/src/nitro/types.js +1 -0
  83. package/dist/src/render/collect-css.js +3 -0
  84. package/dist/src/render/error-pages.js +48 -0
  85. package/dist/src/render/isolated-ssr-renderer.js +1 -0
  86. package/dist/src/render/ssr.js +90 -0
  87. package/dist/src/schemas/api.js +1 -0
  88. package/dist/src/schemas/core.js +1 -0
  89. package/dist/src/schemas/index.js +1 -0
  90. package/dist/src/schemas/layout.js +1 -0
  91. package/dist/src/schemas/routing/index.js +1 -0
  92. package/dist/src/schemas/routing.js +1 -0
  93. package/dist/src/types/as-island.js +1 -0
  94. package/dist/src/types/layout.js +1 -0
  95. package/dist/src/types/routing.js +1 -0
  96. package/dist/src/types/types.js +1 -0
  97. package/dist/src/utils/dev-logger.js +12 -0
  98. package/dist/src/utils/fs.js +1 -0
  99. package/dist/src/vite-plugin/auto-discover.js +1 -0
  100. package/dist/src/vite-plugin/config.js +1 -0
  101. package/dist/src/vite-plugin/errors.js +1 -0
  102. package/dist/src/vite-plugin/image-optimization.js +45 -0
  103. package/dist/src/vite-plugin/integration-activator.js +1 -0
  104. package/dist/src/vite-plugin/island-sidecar-plugin.js +1 -0
  105. package/dist/src/vite-plugin/module-discovery.js +1 -0
  106. package/dist/src/vite-plugin/nitro-integration.js +42 -0
  107. package/dist/src/vite-plugin/plugin.js +1 -0
  108. package/dist/src/vite-plugin/types.js +1 -0
  109. package/dist/src/vite-plugin/validation.js +2 -0
  110. package/package.json +14 -20
  111. package/mod.ts +0 -302
  112. package/src/build/integration-bundler-plugin.ts +0 -116
  113. package/src/build/integration-config.ts +0 -168
  114. package/src/build/integration-detection-plugin.ts +0 -117
  115. package/src/build/integration-resolver-plugin.ts +0 -90
  116. package/src/build/island-manifest.ts +0 -269
  117. package/src/build/island-types-generator.ts +0 -476
  118. package/src/build/mdx-island-transform.ts +0 -464
  119. package/src/build/mdx-plugin.ts +0 -98
  120. package/src/build/page-island-transform.ts +0 -598
  121. package/src/build/prop-extractors/index.ts +0 -21
  122. package/src/build/prop-extractors/lit.ts +0 -140
  123. package/src/build/prop-extractors/qwik.ts +0 -16
  124. package/src/build/prop-extractors/solid.ts +0 -125
  125. package/src/build/prop-extractors/svelte.ts +0 -194
  126. package/src/build/prop-extractors/vue.ts +0 -111
  127. package/src/build/sidecar-file-manager.ts +0 -104
  128. package/src/build/sidecar-renderer.ts +0 -30
  129. package/src/client/adapters/index.ts +0 -21
  130. package/src/client/components.ts +0 -35
  131. package/src/client/css-hmr-handler.ts +0 -344
  132. package/src/client/framework-adapter.ts +0 -462
  133. package/src/client/hmr-coordinator.ts +0 -396
  134. package/src/client/hmr-error-overlay.js +0 -533
  135. package/src/client/main.js +0 -824
  136. package/src/components/Image.tsx +0 -123
  137. package/src/components/IslandErrorBoundary.tsx +0 -145
  138. package/src/components/LayoutDataErrorBoundary.tsx +0 -141
  139. package/src/components/LayoutErrorBoundary.tsx +0 -127
  140. package/src/components/PersistentIsland.tsx +0 -52
  141. package/src/components/StreamingErrorBoundary.tsx +0 -233
  142. package/src/components/StreamingLayout.tsx +0 -538
  143. package/src/core/components/component-analyzer.ts +0 -192
  144. package/src/core/components/component-detection.ts +0 -508
  145. package/src/core/components/enhanced-framework-detector.ts +0 -500
  146. package/src/core/components/framework-registry.ts +0 -563
  147. package/src/core/content/mdx-processor.ts +0 -46
  148. package/src/core/integrations/index.ts +0 -19
  149. package/src/core/integrations/loader.ts +0 -125
  150. package/src/core/integrations/registry.ts +0 -175
  151. package/src/core/islands/island-persistence.ts +0 -325
  152. package/src/core/islands/island-state-serializer.ts +0 -258
  153. package/src/core/islands/persistent-island-context.tsx +0 -80
  154. package/src/core/islands/use-persistent-state.ts +0 -68
  155. package/src/core/layout/enhanced-layout-resolver.ts +0 -322
  156. package/src/core/layout/layout-cache-manager.ts +0 -485
  157. package/src/core/layout/layout-composer.ts +0 -357
  158. package/src/core/layout/layout-data-loader.ts +0 -516
  159. package/src/core/layout/layout-discovery.ts +0 -243
  160. package/src/core/layout/layout-matcher.ts +0 -299
  161. package/src/core/layout/layout-types.ts +0 -110
  162. package/src/core/modules/framework-module-resolver.ts +0 -273
  163. package/src/islands/component-analysis.ts +0 -213
  164. package/src/islands/css-utils.ts +0 -565
  165. package/src/islands/discovery/index.ts +0 -80
  166. package/src/islands/discovery/registry.ts +0 -340
  167. package/src/islands/discovery/resolver.ts +0 -477
  168. package/src/islands/discovery/scanner.ts +0 -386
  169. package/src/islands/discovery/types.ts +0 -117
  170. package/src/islands/discovery/validator.ts +0 -544
  171. package/src/islands/discovery/watcher.ts +0 -368
  172. package/src/islands/framework-detection.ts +0 -428
  173. package/src/islands/integration-loader.ts +0 -490
  174. package/src/islands/island.tsx +0 -565
  175. package/src/islands/render-cache.ts +0 -550
  176. package/src/islands/types.ts +0 -80
  177. package/src/islands/universal-css-collector.ts +0 -157
  178. package/src/islands/universal-head-collector.ts +0 -137
  179. package/src/layout-system.ts +0 -218
  180. package/src/middleware/discovery.ts +0 -268
  181. package/src/middleware/executor.ts +0 -315
  182. package/src/middleware/index.ts +0 -76
  183. package/src/middleware/types.ts +0 -99
  184. package/src/nitro/build-config.ts +0 -576
  185. package/src/nitro/config.ts +0 -483
  186. package/src/nitro/error-handler.ts +0 -636
  187. package/src/nitro/index.ts +0 -173
  188. package/src/nitro/island-manifest.ts +0 -584
  189. package/src/nitro/middleware-adapter.ts +0 -260
  190. package/src/nitro/renderer.ts +0 -1471
  191. package/src/nitro/route-discovery.ts +0 -439
  192. package/src/nitro/types.ts +0 -321
  193. package/src/render/collect-css.ts +0 -198
  194. package/src/render/error-pages.ts +0 -79
  195. package/src/render/isolated-ssr-renderer.ts +0 -654
  196. package/src/render/ssr.ts +0 -1030
  197. package/src/schemas/api.ts +0 -30
  198. package/src/schemas/core.ts +0 -64
  199. package/src/schemas/index.ts +0 -212
  200. package/src/schemas/layout.ts +0 -279
  201. package/src/schemas/routing/index.ts +0 -38
  202. package/src/schemas/routing.ts +0 -376
  203. package/src/types/as-island.ts +0 -20
  204. package/src/types/layout.ts +0 -285
  205. package/src/types/routing.ts +0 -555
  206. package/src/types/types.ts +0 -5
  207. package/src/utils/dev-logger.ts +0 -299
  208. package/src/utils/fs.ts +0 -151
  209. package/src/vite-plugin/auto-discover.ts +0 -551
  210. package/src/vite-plugin/config.ts +0 -266
  211. package/src/vite-plugin/errors.ts +0 -127
  212. package/src/vite-plugin/image-optimization.ts +0 -156
  213. package/src/vite-plugin/integration-activator.ts +0 -126
  214. package/src/vite-plugin/island-sidecar-plugin.ts +0 -176
  215. package/src/vite-plugin/module-discovery.ts +0 -189
  216. package/src/vite-plugin/nitro-integration.ts +0 -1354
  217. package/src/vite-plugin/plugin.ts +0 -403
  218. package/src/vite-plugin/types.ts +0 -327
  219. package/src/vite-plugin/validation.ts +0 -228
  220. /package/{src → dist/src}/client/types/framework-runtime.d.ts +0 -0
  221. /package/{src → dist/src}/client/types/vite-hmr.d.ts +0 -0
  222. /package/{src → dist/src}/client/types/vite-virtual-modules.d.ts +0 -0
  223. /package/{src → dist/src}/layout-system.d.ts +0 -0
  224. /package/{src → dist/src}/types/image.d.ts +0 -0
  225. /package/{src → dist/src}/types/index.d.ts +0 -0
  226. /package/{src → dist/src}/types/island-jsx.d.ts +0 -0
  227. /package/{src → dist/src}/types/island-prop.d.ts +0 -0
  228. /package/{src → dist/src}/types/mdx.d.ts +0 -0
  229. /package/{src → dist/src}/types/urlpattern.d.ts +0 -0
  230. /package/{src → dist/src}/types/vite-env.d.ts +0 -0
@@ -1,483 +0,0 @@
1
- /**
2
- * Nitro Configuration Module for Avalon
3
- *
4
- * This module provides configuration interfaces and utilities for integrating
5
- * Nitro as Avalon's server runtime. It handles preset configuration, route rules,
6
- * and merging Avalon-specific options with Nitro defaults.
7
- *
8
- * ## Static Asset Handling
9
- *
10
- * Nitro automatically serves static assets from the `public/` directory at the root path.
11
- * The configuration supports:
12
- * - `publicAssets`: Configures directories for static file serving
13
- * - `routeRules`: Configures cache headers for different asset types
14
- * - `staticAssets`: Avalon-specific static asset configuration
15
- *
16
- * Default route rules for static assets are generated by `createDefaultStaticAssetRouteRules()`:
17
- * - `/assets/**`, `/islands/**`, `/chunks/**`: Long cache (1 year, immutable)
18
- * - `/*.woff`, `/*.woff2`: Long cache for fonts
19
- * - `/*.html`, `/*.css`: Short cache with revalidation
20
- * - `/favicon.ico`: Medium cache (1 day)
21
- */
22
-
23
- import type { ResolvedAvalonConfig } from "../vite-plugin/types.ts";
24
-
25
- /**
26
- * Cache configuration options for route rules
27
- */
28
- export interface CacheOptions {
29
- /** Maximum age in seconds for cache validity */
30
- maxAge?: number;
31
- /** Maximum age in seconds for stale content */
32
- staleMaxAge?: number;
33
- /** Enable stale-while-revalidate behavior */
34
- swr?: boolean;
35
- }
36
-
37
- /**
38
- * Route rule configuration for caching, redirects, proxying, and headers
39
- */
40
- export interface RouteRule {
41
- /** Cache configuration or boolean to enable/disable */
42
- cache?: CacheOptions | boolean;
43
- /** Redirect destination URL */
44
- redirect?: string;
45
- /** Proxy destination URL */
46
- proxy?: string;
47
- /** Custom headers to set */
48
- headers?: Record<string, string>;
49
- /** Enable CORS for this route */
50
- cors?: boolean;
51
- }
52
-
53
- /**
54
- * Static asset serving configuration
55
- */
56
- export interface StaticAssetsConfig {
57
- /**
58
- * Directory containing public static assets
59
- * @default "public"
60
- */
61
- publicDir?: string;
62
-
63
- /**
64
- * Directory containing compiled build output
65
- * @default "dist"
66
- */
67
- buildDir?: string;
68
-
69
- /**
70
- * Enable serving pre-compressed assets (gzip, brotli)
71
- * @default true
72
- */
73
- compression?: boolean;
74
-
75
- /**
76
- * Default cache control header for immutable static assets
77
- * @default "public, max-age=31536000, immutable"
78
- */
79
- cacheControl?: string;
80
-
81
- /**
82
- * Cache control header for mutable assets (HTML, etc.)
83
- * @default "public, max-age=0, must-revalidate"
84
- */
85
- mutableCacheControl?: string;
86
-
87
- /**
88
- * Custom headers to add to all static asset responses
89
- */
90
- headers?: Record<string, string>;
91
- }
92
-
93
- /**
94
- * Avalon-specific Nitro configuration options
95
- */
96
- export interface AvalonNitroConfig {
97
- /**
98
- * Deployment preset (vercel, cloudflare, deno-deploy, node-server, netlify, etc.)
99
- * @default "node-server"
100
- */
101
- preset?: string;
102
-
103
- /**
104
- * Directory containing server routes
105
- * @default "server"
106
- */
107
- serverDir?: string;
108
-
109
- /**
110
- * Directory containing pages (overrides Avalon config if set)
111
- */
112
- pagesDir?: string;
113
-
114
- /**
115
- * Enable streaming SSR responses
116
- * @default true
117
- */
118
- streaming?: boolean;
119
-
120
- /**
121
- * Route rules for caching, redirects, proxying, and headers
122
- * Keys are route patterns (e.g., "/api/**", "/static/**")
123
- */
124
- routeRules?: Record<string, RouteRule>;
125
-
126
- /**
127
- * Runtime configuration accessible via useRuntimeConfig()
128
- * Can be overridden by NITRO_ prefixed environment variables
129
- */
130
- runtimeConfig?: Record<string, unknown>;
131
-
132
- /**
133
- * Public runtime configuration (exposed to client)
134
- */
135
- publicRuntimeConfig?: Record<string, unknown>;
136
-
137
- /**
138
- * Static asset serving configuration
139
- */
140
- staticAssets?: StaticAssetsConfig;
141
-
142
- /** Nitro v3: Compatibility date for preset features (YYYY-MM-DD) */
143
- compatibilityDate?: string;
144
- /** Nitro v3: Dependencies to trace instead of bundle */
145
- traceDeps?: string[];
146
- /** Nitro v3: Rolldown-specific configuration */
147
- rolldownConfig?: Record<string, unknown>;
148
- /** Nitro v3: Custom server entry point */
149
- serverEntry?: string;
150
- /** Nitro v3: Renderer configuration, or false to disable */
151
- renderer?: { handler: string } | false;
152
- /** Nitro v3: Pre-compress public assets (gzip, brotli, zstd) */
153
- compressPublicAssets?: boolean | { gzip?: boolean; brotli?: boolean; zstd?: boolean };
154
- }
155
-
156
- /**
157
- * Nitro configuration output structure
158
- * This matches the expected NitroConfig interface from nitro/types
159
- */
160
- export interface NitroConfigOutput {
161
- /** Deployment preset */
162
- preset: string;
163
- /** Server directory */
164
- serverDir: string;
165
- /** Route rules */
166
- routeRules: Record<string, RouteRule>;
167
- /** Runtime configuration */
168
- runtimeConfig: {
169
- avalon: AvalonRuntimeConfig;
170
- [key: string]: unknown;
171
- };
172
- /** Public runtime configuration */
173
- publicRuntimeConfig?: Record<string, unknown>;
174
- /** Renderer configuration, or false to disable */
175
- renderer?: {
176
- handler: string;
177
- } | false;
178
- /** Nitro v3: Compatibility date for preset features (YYYY-MM-DD) */
179
- compatibilityDate?: string;
180
- /** Nitro v3: Dependencies to trace instead of bundle */
181
- traceDeps?: string[];
182
- /** Nitro v3: Rolldown-specific configuration */
183
- rolldownConfig?: Record<string, unknown>;
184
- /** Nitro v3: Custom server entry point */
185
- serverEntry?: string;
186
- /** Nitro v3: Pre-compress public assets (gzip, brotli, zstd) */
187
- compressPublicAssets?: boolean | { gzip?: boolean; brotli?: boolean; zstd?: boolean };
188
- /** Public assets directory */
189
- publicAssets?: Array<{
190
- dir: string;
191
- baseURL?: string;
192
- maxAge?: number;
193
- }>;
194
- /** Server assets configuration */
195
- serverAssets?: Array<{
196
- baseName: string;
197
- dir: string;
198
- }>;
199
- /** Static assets configuration */
200
- staticAssets?: StaticAssetsConfig;
201
- }
202
-
203
- /**
204
- * Avalon-specific runtime configuration stored in Nitro's runtimeConfig
205
- */
206
- export interface AvalonRuntimeConfig {
207
- /** Enable streaming SSR */
208
- streaming: boolean;
209
- /** Pages directory path */
210
- pagesDir: string;
211
- /** Layouts directory path */
212
- layoutsDir: string;
213
- }
214
-
215
- /**
216
- * Default static assets configuration
217
- */
218
- export const DEFAULT_STATIC_ASSETS_CONFIG: Required<StaticAssetsConfig> = {
219
- publicDir: "public",
220
- buildDir: "dist",
221
- compression: true,
222
- cacheControl: "public, max-age=31536000, immutable",
223
- mutableCacheControl: "public, max-age=0, must-revalidate",
224
- headers: {},
225
- };
226
-
227
- /**
228
- * All valid Nitro v3 preset names (underscore convention).
229
- */
230
- export const VALID_V3_PRESETS: string[] = [
231
- "node_server",
232
- "node_middleware",
233
- "vercel",
234
- "cloudflare_module",
235
- "cloudflare_pages",
236
- "deno_deploy",
237
- "deno_server",
238
- "netlify_functions",
239
- "netlify_edge",
240
- "aws_lambda",
241
- "azure_swa",
242
- "firebase_functions",
243
- "render_com",
244
- "static",
245
- "browser",
246
- ];
247
-
248
- /**
249
- * Validates a preset name against the v3 preset list.
250
- * Returns the preset name if valid, throws if unrecognized.
251
- *
252
- * @param preset - The preset name to validate (must be a v3 name)
253
- * @returns The validated v3 preset name
254
- * @throws Error if the preset is not recognized
255
- */
256
- export function resolvePresetName(preset: string): string {
257
- if (VALID_V3_PRESETS.includes(preset)) return preset;
258
- throw new Error(
259
- `Unknown Nitro preset: "${preset}". Valid presets: ${VALID_V3_PRESETS.join(", ")}`
260
- );
261
- }
262
-
263
- /**
264
- * Default Nitro configuration values
265
- */
266
- export const DEFAULT_NITRO_CONFIG: Required<
267
- Pick<AvalonNitroConfig, "preset" | "serverDir" | "streaming">
268
- > = {
269
- preset: "node_server",
270
- serverDir: "server",
271
- streaming: true,
272
- };
273
-
274
- /**
275
- * Creates a Nitro configuration from Avalon plugin config and Nitro-specific options
276
- *
277
- * This function merges Avalon's resolved configuration with Nitro-specific options
278
- * to produce a complete Nitro configuration object. Avalon-specific settings are
279
- * stored in `runtimeConfig.avalon` for access by handlers.
280
- *
281
- * @param avalonNitroConfig - Nitro-specific configuration options
282
- * @param resolvedAvalonConfig - Resolved Avalon plugin configuration
283
- * @returns Complete Nitro configuration object
284
- *
285
- * @example
286
- * ```ts
287
- * const nitroConfig = createNitroConfig(
288
- * { preset: 'vercel', streaming: true },
289
- * resolvedAvalonConfig
290
- * );
291
- * ```
292
- */
293
- export function createNitroConfig(
294
- avalonNitroConfig: AvalonNitroConfig,
295
- resolvedAvalonConfig: ResolvedAvalonConfig
296
- ): NitroConfigOutput {
297
- // Determine final directory paths (Nitro config overrides Avalon config)
298
- const pagesDir = avalonNitroConfig.pagesDir ?? resolvedAvalonConfig.pagesDir;
299
- const layoutsDir = resolvedAvalonConfig.layoutsDir;
300
-
301
- // Build Avalon runtime config
302
- const avalonRuntimeConfig: AvalonRuntimeConfig = {
303
- streaming: avalonNitroConfig.streaming ?? DEFAULT_NITRO_CONFIG.streaming,
304
- pagesDir,
305
- layoutsDir,
306
- };
307
-
308
- // Validate that runtimeConfig does not contain a 'nitro' key (reserved in v3)
309
- if (avalonNitroConfig.runtimeConfig && "nitro" in avalonNitroConfig.runtimeConfig) {
310
- throw new Error(
311
- 'The "nitro" key in runtimeConfig is reserved by Nitro v3 and cannot be used.'
312
- );
313
- }
314
-
315
- // Merge user runtime config with Avalon runtime config
316
- const runtimeConfig: NitroConfigOutput["runtimeConfig"] = {
317
- avalon: avalonRuntimeConfig,
318
- ...avalonNitroConfig.runtimeConfig,
319
- };
320
-
321
- // Merge static assets config with defaults
322
- const staticAssetsConfig: StaticAssetsConfig = {
323
- ...DEFAULT_STATIC_ASSETS_CONFIG,
324
- ...avalonNitroConfig.staticAssets,
325
- };
326
-
327
- // Create default route rules for static assets
328
- const defaultStaticRouteRules = createDefaultStaticAssetRouteRules(staticAssetsConfig);
329
-
330
- // Merge user route rules with default static asset rules
331
- const routeRules = mergeRouteRules(
332
- defaultStaticRouteRules,
333
- avalonNitroConfig.routeRules ?? {}
334
- );
335
-
336
- // Configure public assets directories
337
- const publicAssets: NitroConfigOutput["publicAssets"] = [
338
- {
339
- dir: staticAssetsConfig.publicDir ?? DEFAULT_STATIC_ASSETS_CONFIG.publicDir,
340
- baseURL: "/",
341
- maxAge: 0, // Let route rules handle caching
342
- },
343
- ];
344
-
345
- // Resolve renderer: support explicit false to disable, otherwise use default handler
346
- const renderer: NitroConfigOutput["renderer"] =
347
- avalonNitroConfig.renderer === false
348
- ? false
349
- : (avalonNitroConfig.renderer ?? { handler: "./server/renderer.ts" });
350
-
351
- return {
352
- preset: resolvePresetName(avalonNitroConfig.preset ?? DEFAULT_NITRO_CONFIG.preset),
353
- serverDir: avalonNitroConfig.serverDir ?? DEFAULT_NITRO_CONFIG.serverDir,
354
- routeRules,
355
- runtimeConfig,
356
- publicRuntimeConfig: avalonNitroConfig.publicRuntimeConfig,
357
- renderer,
358
- compatibilityDate: avalonNitroConfig.compatibilityDate,
359
- traceDeps: avalonNitroConfig.traceDeps,
360
- rolldownConfig: avalonNitroConfig.rolldownConfig,
361
- serverEntry: avalonNitroConfig.serverEntry,
362
- compressPublicAssets: avalonNitroConfig.compressPublicAssets,
363
- publicAssets,
364
- staticAssets: staticAssetsConfig,
365
- };
366
- }
367
-
368
- /**
369
- * Creates default route rules for static asset caching
370
- *
371
- * @param config - Static assets configuration
372
- * @returns Route rules for static assets
373
- */
374
- export function createDefaultStaticAssetRouteRules(
375
- config: StaticAssetsConfig
376
- ): Record<string, RouteRule> {
377
- const cacheControl = config.cacheControl ?? DEFAULT_STATIC_ASSETS_CONFIG.cacheControl;
378
- const mutableCacheControl = config.mutableCacheControl ?? DEFAULT_STATIC_ASSETS_CONFIG.mutableCacheControl;
379
-
380
- return {
381
- // Immutable assets with hashed filenames (long cache)
382
- "/assets/**": {
383
- headers: {
384
- "Cache-Control": cacheControl,
385
- ...config.headers,
386
- },
387
- },
388
- "/islands/**": {
389
- headers: {
390
- "Cache-Control": cacheControl,
391
- ...config.headers,
392
- },
393
- },
394
- "/chunks/**": {
395
- headers: {
396
- "Cache-Control": cacheControl,
397
- ...config.headers,
398
- },
399
- },
400
- "/_nuxt/**": {
401
- headers: {
402
- "Cache-Control": cacheControl,
403
- ...config.headers,
404
- },
405
- },
406
- // Font files (long cache)
407
- "/**/*.woff": {
408
- headers: {
409
- "Cache-Control": cacheControl,
410
- ...config.headers,
411
- },
412
- },
413
- "/**/*.woff2": {
414
- headers: {
415
- "Cache-Control": cacheControl,
416
- ...config.headers,
417
- },
418
- },
419
- // Mutable assets (short cache with revalidation)
420
- "/**/*.html": {
421
- headers: {
422
- "Cache-Control": mutableCacheControl,
423
- ...config.headers,
424
- },
425
- },
426
- // Favicon (medium cache)
427
- "/favicon.ico": {
428
- headers: {
429
- "Cache-Control": "public, max-age=86400",
430
- ...config.headers,
431
- },
432
- },
433
- // CSS files in public directory (may be mutable)
434
- "/**/*.css": {
435
- headers: {
436
- "Cache-Control": mutableCacheControl,
437
- ...config.headers,
438
- },
439
- },
440
- };
441
- }
442
-
443
- /**
444
- * Validates a Nitro preset name against the v3 preset list
445
- *
446
- * @param preset - The preset name to validate
447
- * @returns True if the preset is a known valid v3 preset
448
- */
449
- export function isValidPreset(preset: string): boolean {
450
- return VALID_V3_PRESETS.includes(preset);
451
- }
452
-
453
- /**
454
- * Merges route rules, with later rules taking precedence
455
- *
456
- * @param baseRules - Base route rules
457
- * @param overrideRules - Override route rules
458
- * @returns Merged route rules
459
- */
460
- export function mergeRouteRules(
461
- baseRules: Record<string, RouteRule>,
462
- overrideRules: Record<string, RouteRule>
463
- ): Record<string, RouteRule> {
464
- const merged: Record<string, RouteRule> = { ...baseRules };
465
-
466
- for (const [pattern, rule] of Object.entries(overrideRules)) {
467
- if (merged[pattern]) {
468
- // Deep merge the rule
469
- merged[pattern] = {
470
- ...merged[pattern],
471
- ...rule,
472
- headers: {
473
- ...merged[pattern].headers,
474
- ...rule.headers,
475
- },
476
- };
477
- } else {
478
- merged[pattern] = rule;
479
- }
480
- }
481
-
482
- return merged;
483
- }