@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,30 +0,0 @@
1
- import { z } from 'zod';
2
-
3
- /**
4
- * Supported HTTP methods for API routes
5
- */
6
- export const ApiMethodSchema = z.enum([
7
- 'GET',
8
- 'POST',
9
- 'PUT',
10
- 'DELETE',
11
- 'PATCH',
12
- 'HEAD',
13
- 'OPTIONS',
14
- ]);
15
-
16
- export type ApiMethod = z.infer<typeof ApiMethodSchema>;
17
-
18
- /**
19
- * Discovered API route with metadata
20
- */
21
- export interface ApiRoute {
22
- /** URL pattern for matching requests */
23
- pattern: URLPattern;
24
- /** Route configuration with handlers */
25
- config: unknown;
26
- /** Original file path relative to src/api */
27
- filePath: string;
28
- /** Extracted dynamic parameter names */
29
- paramNames: string[];
30
- }
@@ -1,64 +0,0 @@
1
- import { z } from 'zod';
2
-
3
- /**
4
- * Schema for meta tags
5
- */
6
- export const MetaTagSchema = z.object({
7
- name: z.string().min(1),
8
- content: z.string(),
9
- });
10
-
11
- /**
12
- * Script configuration schema - supports both simple URLs and complex script objects
13
- */
14
- export const ScriptConfigSchema = z.union([
15
- // Simple string URL (backward compatible)
16
- z.string().min(1),
17
- // Complex script object with attributes
18
- z
19
- .object({
20
- src: z.string().min(1).optional(),
21
- content: z.string().optional(), // For inline scripts
22
- data: z.union([z.record(z.string(), z.unknown()), z.array(z.unknown()), z.string()]).optional(), // For structured data (JSON-LD)
23
- type: z.string().optional(),
24
- async: z.boolean().optional(),
25
- defer: z.boolean().optional(),
26
- crossorigin: z.enum(['anonymous', 'use-credentials']).optional(),
27
- integrity: z.string().optional(),
28
- nomodule: z.boolean().optional(),
29
- referrerpolicy: z
30
- .enum([
31
- 'no-referrer',
32
- 'no-referrer-when-downgrade',
33
- 'origin',
34
- 'origin-when-cross-origin',
35
- 'same-origin',
36
- 'strict-origin',
37
- 'strict-origin-when-cross-origin',
38
- 'unsafe-url',
39
- ])
40
- .optional(),
41
- // Allow custom attributes
42
- attributes: z.record(z.string(), z.string()).optional(),
43
- })
44
- .refine(data => data.src || data.content || data.data, {
45
- message: "Script must have either 'src', 'content', or 'data'",
46
- }),
47
- ]);
48
-
49
- /**
50
- * Simplified render options for Vite-powered architecture
51
- */
52
- export const RenderOptionsSchema = z.object({
53
- title: z.string().optional(),
54
- scripts: z.array(ScriptConfigSchema).optional(),
55
- styles: z.array(z.string().min(1)).optional(),
56
- meta: z.array(MetaTagSchema).optional(),
57
- });
58
-
59
-
60
- // === Simplified TypeScript types ===
61
-
62
- export type MetaTag = z.infer<typeof MetaTagSchema>;
63
- export type ScriptConfig = z.infer<typeof ScriptConfigSchema>;
64
- export type RenderOptions = z.infer<typeof RenderOptionsSchema>;
@@ -1,212 +0,0 @@
1
- import { z } from 'zod';
2
- import { RenderOptionsSchema } from './core.ts';
3
- import {
4
- LayoutContextSchema,
5
- LayoutDataSchema,
6
- LayoutHandlerSchema,
7
- LayoutDiscoveryOptionsSchema as LayoutDiscoverySchema,
8
- LayoutConfigSchema,
9
- ResolvedLayoutSchema,
10
- } from './layout.ts';
11
- import {
12
- FileSystemRouteSchema,
13
- RoutePageModuleSchema,
14
- RouteDiscoveryOptionsSchema,
15
- FileSystemRouterConfigSchema,
16
- MetadataSchema,
17
- ResolvedMetadataSchema,
18
- } from './routing.ts';
19
- import type { RenderOptions } from './core.ts';
20
- import type {
21
- LayoutContext,
22
- LayoutData,
23
- LayoutHandler,
24
- LayoutDiscoveryOptions,
25
- LayoutConfig,
26
- ResolvedLayout,
27
- } from './layout.ts';
28
- import type {
29
- FileSystemRoute,
30
- RoutePageModule,
31
- RouteDiscoveryOptions,
32
- FileSystemRouterConfig,
33
- Metadata,
34
- ResolvedMetadata,
35
- } from './routing.ts';
36
-
37
- export * from './core.ts';
38
- export * from './api.ts';
39
- export * from './layout.ts';
40
- export * from './routing.ts';
41
-
42
- export interface ValidationSuccess<T> {
43
- success: true;
44
- data: T;
45
- }
46
-
47
- export interface ValidationFailure {
48
- success: false;
49
- error: ValidationError;
50
- }
51
-
52
- export type ValidationResult<T> = ValidationSuccess<T> | ValidationFailure;
53
-
54
- export class ValidationError extends Error {
55
- constructor(message: string, public readonly zodError: z.ZodError) {
56
- super(message);
57
- this.name = 'ValidationError';
58
- }
59
-
60
- getFormattedErrors(): string[] {
61
- return this.zodError.issues.map((issue): string => {
62
- const path = issue.path.length > 0 ? `${issue.path.join('.')}: ` : '';
63
- return `${path}${issue.message}`;
64
- });
65
- }
66
-
67
- getErrorMessage(): string {
68
- return this.getFormattedErrors().join('; ');
69
- }
70
- }
71
-
72
- export function createValidationError(message: string, zodError: z.ZodError): ValidationError {
73
- return new ValidationError(message, zodError);
74
- }
75
-
76
- export function safeValidate<TOutput>(
77
- schema: z.ZodType<TOutput>,
78
- data: unknown,
79
- errorMessage = 'Validation failed'
80
- ): ValidationResult<TOutput> {
81
- const result = schema.safeParse(data);
82
- if (result.success) {
83
- return { success: true, data: result.data };
84
- }
85
- return { success: false, error: createValidationError(errorMessage, result.error) };
86
- }
87
-
88
- export function validate<TOutput>(
89
- schema: z.ZodType<TOutput>,
90
- data: unknown,
91
- errorMessage = 'Validation failed'
92
- ): TOutput {
93
- const result = schema.safeParse(data);
94
- if (result.success) {
95
- return result.data;
96
- }
97
- throw createValidationError(errorMessage, result.error);
98
- }
99
-
100
- export const validators = {
101
- renderOptions: (data: unknown): RenderOptions => validate(RenderOptionsSchema, data, 'Invalid render options'),
102
- layoutContext: (data: unknown): LayoutContext => validate(LayoutContextSchema, data, 'Invalid layout context'),
103
- layoutData: (data: unknown): LayoutData => validate(LayoutDataSchema, data, 'Invalid layout data'),
104
- layoutHandler: (data: unknown): LayoutHandler => validate(LayoutHandlerSchema, data, 'Invalid layout handler'),
105
- layoutDiscoveryOptions: (data: unknown): LayoutDiscoveryOptions => validate(LayoutDiscoverySchema, data, 'Invalid layout discovery options'),
106
- layoutConfig: (data: unknown): LayoutConfig => validate(LayoutConfigSchema, data, 'Invalid layout config'),
107
- resolvedLayout: (data: unknown): ResolvedLayout => validate(ResolvedLayoutSchema, data, 'Invalid resolved layout'),
108
- fileSystemRoute: (data: unknown): FileSystemRoute => validate(FileSystemRouteSchema, data, 'Invalid file system route'),
109
- routePageModule: (data: unknown): RoutePageModule => validate(RoutePageModuleSchema, data, 'Invalid route page module'),
110
- routeDiscoveryOptions: (data: unknown): RouteDiscoveryOptions => validate(RouteDiscoveryOptionsSchema, data, 'Invalid route discovery options'),
111
- fileSystemRouterConfig: (data: unknown): FileSystemRouterConfig => validate(FileSystemRouterConfigSchema, data, 'Invalid file system router config'),
112
- metadata: (data: unknown): Metadata => validate(MetadataSchema, data, 'Invalid metadata'),
113
- resolvedMetadata: (data: unknown): ResolvedMetadata => validate(ResolvedMetadataSchema, data, 'Invalid resolved metadata'),
114
- } as const;
115
-
116
- export const safeValidators = {
117
- renderOptions: (data: unknown): ValidationResult<RenderOptions> => safeValidate(RenderOptionsSchema, data, 'Invalid render options'),
118
- layoutContext: (data: unknown): ValidationResult<LayoutContext> => safeValidate(LayoutContextSchema, data, 'Invalid layout context'),
119
- layoutData: (data: unknown): ValidationResult<LayoutData> => safeValidate(LayoutDataSchema, data, 'Invalid layout data'),
120
- layoutHandler: (data: unknown): ValidationResult<LayoutHandler> => safeValidate(LayoutHandlerSchema, data, 'Invalid layout handler'),
121
- layoutDiscoveryOptions: (data: unknown): ValidationResult<LayoutDiscoveryOptions> => safeValidate(LayoutDiscoverySchema, data, 'Invalid layout discovery options'),
122
- layoutConfig: (data: unknown): ValidationResult<LayoutConfig> => safeValidate(LayoutConfigSchema, data, 'Invalid layout config'),
123
- resolvedLayout: (data: unknown): ValidationResult<ResolvedLayout> => safeValidate(ResolvedLayoutSchema, data, 'Invalid resolved layout'),
124
- fileSystemRoute: (data: unknown): ValidationResult<FileSystemRoute> => safeValidate(FileSystemRouteSchema, data, 'Invalid file system route'),
125
- routePageModule: (data: unknown): ValidationResult<RoutePageModule> => safeValidate(RoutePageModuleSchema, data, 'Invalid route page module'),
126
- routeDiscoveryOptions: (data: unknown): ValidationResult<RouteDiscoveryOptions> => safeValidate(RouteDiscoveryOptionsSchema, data, 'Invalid route discovery options'),
127
- fileSystemRouterConfig: (data: unknown): ValidationResult<FileSystemRouterConfig> => safeValidate(FileSystemRouterConfigSchema, data, 'Invalid file system router config'),
128
- metadata: (data: unknown): ValidationResult<Metadata> => safeValidate(MetadataSchema, data, 'Invalid metadata'),
129
- resolvedMetadata: (data: unknown): ValidationResult<ResolvedMetadata> => safeValidate(ResolvedMetadataSchema, data, 'Invalid resolved metadata'),
130
- } as const;
131
-
132
- export const devValidators = {
133
- renderOptionsSoft: (data: unknown, context = 'unknown'): boolean => {
134
- const result = safeValidators.renderOptions(data);
135
- if (!result.success) {
136
- console.warn(`Render options validation warning in ${context}:`, result.error.getErrorMessage());
137
- return false;
138
- }
139
- return true;
140
- },
141
- } as const;
142
-
143
- export function isValidRenderOptions(data: unknown): data is RenderOptions {
144
- return safeValidators.renderOptions(data).success;
145
- }
146
- export function isValidFileSystemRoute(data: unknown): data is FileSystemRoute {
147
- return safeValidators.fileSystemRoute(data).success;
148
- }
149
- export function isValidRoutePageModule(data: unknown): data is RoutePageModule {
150
- return safeValidators.routePageModule(data).success;
151
- }
152
- export function isValidRouteDiscoveryOptions(data: unknown): data is RouteDiscoveryOptions {
153
- return safeValidators.routeDiscoveryOptions(data).success;
154
- }
155
- export function isValidFileSystemRouterConfig(data: unknown): data is FileSystemRouterConfig {
156
- return safeValidators.fileSystemRouterConfig(data).success;
157
- }
158
- export function isValidMetadata(data: unknown): data is Metadata {
159
- return safeValidators.metadata(data).success;
160
- }
161
- export function isValidResolvedMetadata(data: unknown): data is ResolvedMetadata {
162
- return safeValidators.resolvedMetadata(data).success;
163
- }
164
-
165
- export function validateBatch<T extends Record<string, unknown>>(
166
- schemas: { [K in keyof T]: z.ZodType<T[K]> },
167
- data: { [K in keyof T]: unknown }
168
- ): T {
169
- const result: Partial<T> = {};
170
- const errors: string[] = [];
171
-
172
- for (const [key, schema] of Object.entries(schemas) as Array<[keyof T, z.ZodType<T[keyof T]>]>) {
173
- try {
174
- result[key] = validate(schema, data[key], `Invalid ${String(key)}`);
175
- } catch (error) {
176
- if (error instanceof ValidationError) {
177
- errors.push(`${String(key)}: ${error.getErrorMessage()}`);
178
- } else {
179
- errors.push(`${String(key)}: Unknown validation error`);
180
- }
181
- }
182
- }
183
-
184
- if (errors.length > 0) {
185
- throw new Error(`Batch validation failed: ${errors.join('; ')}`);
186
- }
187
-
188
- return result as T;
189
- }
190
-
191
- export function safeValidateBatch<T extends Record<string, unknown>>(
192
- schemas: { [K in keyof T]: z.ZodType<T[K]> },
193
- data: { [K in keyof T]: unknown }
194
- ): ValidationResult<T> {
195
- try {
196
- const result = validateBatch(schemas, data);
197
- return { success: true, data: result };
198
- } catch (error) {
199
- const validationError =
200
- error instanceof ValidationError
201
- ? error
202
- : createValidationError(
203
- 'Batch validation failed',
204
- new z.ZodError([{ code: 'custom', message: String(error), path: [] }])
205
- );
206
- return { success: false, error: validationError };
207
- }
208
- }
209
-
210
- export type ExtractValidationData<T> = T extends ValidationResult<infer U> ? U : never;
211
- export type ExtractSchemaInput<T> = T extends z.ZodType<infer U> ? U : never;
212
- export type ExtractSchemaOutput<T> = T extends z.ZodType<infer U> ? U : never;
@@ -1,279 +0,0 @@
1
- import { z } from 'zod';
2
- import type { ComponentChildren } from 'preact';
3
-
4
- /**
5
- * Layout Context Schema - Contains request information and state for layout processing
6
- */
7
- export const LayoutContextSchema = z.object({
8
- request: z.instanceof(Request),
9
- params: z.record(z.string(), z.string()),
10
- query: z.instanceof(URLSearchParams),
11
- state: z.instanceof(Map<string, unknown>),
12
- middlewareContext: z.any().optional(), // MiddlewareContext type from middleware system
13
- });
14
-
15
- /**
16
- * Layout Data Schema - Flexible data structure for layout loaders
17
- */
18
- export const LayoutDataSchema = z.record(z.string(), z.unknown());
19
-
20
- /**
21
- * Layout Route Schema - Represents a discovered layout file with routing information
22
- */
23
- export const LayoutRouteSchema = z.object({
24
- pattern: z.instanceof(URLPattern),
25
- layoutPath: z.string().min(1),
26
- priority: z.number().int().min(0),
27
- type: z.enum(['root', 'nested']),
28
- depth: z.number().int().min(0),
29
- });
30
-
31
- /**
32
- * Layout Handler Schema - Complete layout information including component and loader
33
- */
34
- export const LayoutHandlerSchema = z.object({
35
- component: z.any(), // ComponentType<LayoutProps> - can't validate function types with Zod
36
- loader: z.any().optional(), // LayoutLoader function - can't validate function signature with Zod
37
- path: z.string().min(1),
38
- priority: z.number().int().min(0),
39
- });
40
-
41
- /**
42
- * Layout Props Schema - Props passed to layout components
43
- */
44
- export const LayoutPropsSchema = z.object({
45
- children: z.any(), // ComponentChildren - can't validate JSX with Zod
46
- data: LayoutDataSchema,
47
- frontmatter: z.record(z.string(), z.any()).optional(), // Frontmatter from MDX files
48
- route: z.object({
49
- path: z.string(),
50
- params: z.record(z.string(), z.string()),
51
- query: z.instanceof(URLSearchParams),
52
- }),
53
- });
54
-
55
- /**
56
- * Layout Discovery Options Schema
57
- */
58
- export const LayoutDiscoveryOptionsSchema = z.object({
59
- baseDirectory: z.string().min(1),
60
- filePattern: z.string().min(1).optional().default('_layout.tsx'),
61
- excludeDirectories: z.array(z.string()).optional().default([]),
62
- enableWatching: z.boolean().optional().default(false),
63
- developmentMode: z.boolean().optional().default(false),
64
- });
65
-
66
- /**
67
- * Route Info Schema - Information about the current route for conditional rendering
68
- */
69
- export const RouteInfoSchema = z.object({
70
- path: z.string(),
71
- params: z.record(z.string(), z.string()),
72
- method: z.string(),
73
- headers: z.instanceof(Headers),
74
- });
75
-
76
- /**
77
- * Layout Rule Schema - Rules for conditional layout rendering
78
- */
79
- export const LayoutRuleSchema = z.object({
80
- matches: z.any(), // (layoutPath: string, route: RouteInfo) => boolean - can't validate function signature with Zod
81
- apply: z.boolean(),
82
- priority: z.number().int(),
83
- });
84
-
85
- /**
86
- * Layout Config Schema - Page-level layout composition control
87
- */
88
- export const LayoutConfigSchema = z.object({
89
- skipLayouts: z.array(z.string()).optional(),
90
- replaceLayout: z.boolean().optional(),
91
- onlyLayouts: z.array(z.string()).optional(),
92
- customLayout: z.string().optional(),
93
- });
94
-
95
- /**
96
- * Island State Schema - State data for persistent islands
97
- */
98
- export const IslandStateSchema = z.record(z.string(), z.unknown());
99
-
100
- /**
101
- * Persistent Island Props Schema
102
- */
103
- export const PersistentIslandPropsSchema = z.object({
104
- persistentId: z.string().min(1),
105
- children: z.any(), // ComponentChildren
106
- });
107
-
108
- /**
109
- * Persistent Island Context Schema
110
- */
111
- export const PersistentIslandContextSchema = z.object({
112
- saveState: z.any(), // (state: IslandState) => void - can't validate function signature with Zod
113
- loadState: z.any(), // () => IslandState | null - can't validate function signature with Zod
114
- clearState: z.any(), // () => void - can't validate function signature with Zod
115
- });
116
-
117
- /**
118
- * Layout Error Info Schema
119
- */
120
- export const LayoutErrorInfoSchema = z.object({
121
- layoutPath: z.string(),
122
- errorType: z.enum(['component', 'loader', 'rendering', 'island']),
123
- timestamp: z.number().int().positive(),
124
- componentStack: z.string().optional(),
125
- errorBoundary: z.string().optional(),
126
- });
127
-
128
- /**
129
- * Layout Error Boundary Props Schema
130
- */
131
- export const LayoutErrorBoundaryPropsSchema = z.object({
132
- children: z.any(), // ComponentChildren
133
- fallback: z.any(), // (error: Error, retry: () => void) => ComponentChildren - can't validate function signature with Zod
134
- onError: z.any().optional(), // (error: Error, errorInfo: unknown) => void - can't validate function signature with Zod
135
- });
136
-
137
- /**
138
- * Error Recovery Strategy Schema
139
- */
140
- export const ErrorRecoveryStrategySchema = z.object({
141
- type: z.enum(['retry', 'fallback', 'skip', 'redirect']),
142
- maxRetries: z.number().int().positive().optional(),
143
- fallbackComponent: z.any().optional(), // ComponentType
144
- redirectUrl: z.url().optional(),
145
- });
146
-
147
- /**
148
- * Streaming Layout Props Schema
149
- */
150
- export const StreamingLayoutPropsSchema = z.object({
151
- children: z.any(), // ComponentChildren
152
- fallback: z.any().optional(), // ComponentChildren
153
- priority: z.enum(['high', 'medium', 'low']).default('medium'),
154
- });
155
-
156
- /**
157
- * Streaming Component Schema
158
- */
159
- export const StreamingComponentSchema = z.object({
160
- component: z.any(), // ComponentType
161
- fallback: z.any(), // ComponentType
162
- priority: z.number().int().min(0),
163
- isReady: z.any(), // () => Promise<boolean> - can't validate function signature with Zod
164
- });
165
-
166
- /**
167
- * Resolved Layout Schema - Complete layout resolution result
168
- */
169
- export const ResolvedLayoutSchema = z.object({
170
- handlers: z.array(LayoutHandlerSchema),
171
- dataLoaders: z.array(z.any()), // LayoutLoader[] - can't validate function signature with Zod
172
- errorBoundaries: z.array(z.any()), // LayoutErrorBoundary[]
173
- streamingComponents: z.array(StreamingComponentSchema),
174
- metadata: z.object({
175
- totalLayouts: z.number().int().min(0),
176
- resolutionTime: z.number().positive(),
177
- cacheHit: z.boolean(),
178
- }),
179
- });
180
-
181
- /**
182
- * Layout Cache Schema
183
- */
184
- export const LayoutCacheSchema = z.object({
185
- resolved: z.instanceof(Map), // Map<string, ResolvedLayout>
186
- handlers: z.instanceof(Map), // Map<string, LayoutHandler>
187
- data: z.instanceof(Map), // Map<string, LayoutData>
188
- ttl: z.instanceof(Map), // Map<string, number>
189
- });
190
-
191
- /**
192
- * Enhanced Layout Context Schema - Extended context with layout-specific information
193
- */
194
- export const EnhancedLayoutContextSchema = LayoutContextSchema.extend({
195
- layouts: z.array(LayoutHandlerSchema),
196
- parentData: z.array(LayoutDataSchema),
197
- islandStates: z.instanceof(Map), // Map<string, IslandState>
198
- streamingEnabled: z.boolean(),
199
- errorBoundaries: z.array(z.any()), // LayoutErrorBoundary[]
200
- });
201
-
202
- // === TypeScript Type Definitions ===
203
-
204
- export type LayoutContext = z.infer<typeof LayoutContextSchema>;
205
- export type LayoutData = z.infer<typeof LayoutDataSchema>;
206
- export type LayoutRoute = z.infer<typeof LayoutRouteSchema>;
207
- export type LayoutHandler = z.infer<typeof LayoutHandlerSchema>;
208
- export type LayoutProps = z.infer<typeof LayoutPropsSchema>;
209
- export type LayoutDiscoveryOptions = z.infer<typeof LayoutDiscoveryOptionsSchema>;
210
- export type RouteInfo = z.infer<typeof RouteInfoSchema>;
211
- export type LayoutRule = z.infer<typeof LayoutRuleSchema>;
212
- export type LayoutConfig = z.infer<typeof LayoutConfigSchema>;
213
- export type IslandState = z.infer<typeof IslandStateSchema>;
214
- export type PersistentIslandProps = z.infer<typeof PersistentIslandPropsSchema>;
215
- export type PersistentIslandContext = z.infer<typeof PersistentIslandContextSchema>;
216
- export type LayoutErrorInfo = z.infer<typeof LayoutErrorInfoSchema>;
217
- export type LayoutErrorBoundaryProps = z.infer<typeof LayoutErrorBoundaryPropsSchema>;
218
- export type ErrorRecoveryStrategy = z.infer<typeof ErrorRecoveryStrategySchema>;
219
- export type StreamingLayoutProps = z.infer<typeof StreamingLayoutPropsSchema>;
220
- export type StreamingComponent = z.infer<typeof StreamingComponentSchema>;
221
- export type ResolvedLayout = z.infer<typeof ResolvedLayoutSchema>;
222
- export type LayoutCache = z.infer<typeof LayoutCacheSchema>;
223
- export type EnhancedLayoutContext = z.infer<typeof EnhancedLayoutContextSchema>;
224
-
225
- // === Function Type Definitions ===
226
-
227
- /**
228
- * Layout Loader Function Type
229
- * Loads data for a specific layout component
230
- */
231
- export type LayoutLoader = (ctx: LayoutContext) => Promise<LayoutData>;
232
-
233
- /**
234
- * Layout Matcher Function Type
235
- * Determines if a layout should be applied based on route information and optional layout path
236
- */
237
- export type LayoutMatcherFunction = (route: RouteInfo, layoutPath?: string) => boolean;
238
-
239
- /**
240
- * Layout Error Handler Function Type
241
- * Handles errors that occur during layout processing
242
- */
243
- export type LayoutErrorHandler = (error: Error, errorInfo: LayoutErrorInfo) => void;
244
-
245
- /**
246
- * Layout Retry Function Type
247
- * Function to retry failed layout operations
248
- */
249
- export type LayoutRetryFunction = () => void;
250
-
251
- /**
252
- * Layout Fallback Renderer Function Type
253
- * Renders fallback UI when layout errors occur
254
- */
255
- export type LayoutFallbackRenderer = (error: Error, retry: LayoutRetryFunction) => ComponentChildren;
256
-
257
- /**
258
- * Island State Saver Function Type
259
- * Saves island state to persistence layer
260
- */
261
- export type IslandStateSaver = (state: IslandState) => void;
262
-
263
- /**
264
- * Island State Loader Function Type
265
- * Loads island state from persistence layer
266
- */
267
- export type IslandStateLoader = () => IslandState | null;
268
-
269
- /**
270
- * Island State Clearer Function Type
271
- * Clears island state from persistence layer
272
- */
273
- export type IslandStateClearer = () => void;
274
-
275
- /**
276
- * Streaming Component Ready Check Function Type
277
- * Checks if a streaming component is ready to render
278
- */
279
- export type StreamingReadyCheck = () => Promise<boolean>;
@@ -1,38 +0,0 @@
1
- // Re-export all routing schemas and types
2
- export * from '../routing.ts';
3
-
4
- // Export specific validators for routing
5
- import {
6
- FileSystemRouteSchema,
7
- RoutePageModuleSchema,
8
- RouteDiscoveryOptionsSchema,
9
- FileSystemRouterConfigSchema,
10
- MetadataSchema,
11
- ResolvedMetadataSchema,
12
- } from '../routing.ts';
13
-
14
- import { validate, safeValidate } from '../index.ts';
15
-
16
- // Routing-specific validators
17
- export const routingValidators = {
18
- fileSystemRoute: (data: unknown) => validate(FileSystemRouteSchema, data, 'Invalid file system route'),
19
- routePageModule: (data: unknown) => validate(RoutePageModuleSchema, data, 'Invalid route page module'),
20
- routeDiscoveryOptions: (data: unknown) =>
21
- validate(RouteDiscoveryOptionsSchema, data, 'Invalid route discovery options'),
22
- fileSystemRouterConfig: (data: unknown) =>
23
- validate(FileSystemRouterConfigSchema, data, 'Invalid file system router config'),
24
- metadata: (data: unknown) => validate(MetadataSchema, data, 'Invalid metadata'),
25
- resolvedMetadata: (data: unknown) => validate(ResolvedMetadataSchema, data, 'Invalid resolved metadata'),
26
- } as const;
27
-
28
- // Safe routing validators
29
- export const safeRoutingValidators = {
30
- fileSystemRoute: (data: unknown) => safeValidate(FileSystemRouteSchema, data, 'Invalid file system route'),
31
- routePageModule: (data: unknown) => safeValidate(RoutePageModuleSchema, data, 'Invalid route page module'),
32
- routeDiscoveryOptions: (data: unknown) =>
33
- safeValidate(RouteDiscoveryOptionsSchema, data, 'Invalid route discovery options'),
34
- fileSystemRouterConfig: (data: unknown) =>
35
- safeValidate(FileSystemRouterConfigSchema, data, 'Invalid file system router config'),
36
- metadata: (data: unknown) => safeValidate(MetadataSchema, data, 'Invalid metadata'),
37
- resolvedMetadata: (data: unknown) => safeValidate(ResolvedMetadataSchema, data, 'Invalid resolved metadata'),
38
- } as const;