@useavalon/avalon 0.1.10 → 0.1.12

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 (250) hide show
  1. package/README.md +54 -54
  2. package/dist/mod.js +1 -0
  3. package/dist/src/build/integration-bundler-plugin.js +1 -0
  4. package/dist/src/build/integration-config.js +1 -0
  5. package/dist/src/build/integration-detection-plugin.js +1 -0
  6. package/dist/src/build/integration-resolver-plugin.js +1 -0
  7. package/dist/src/build/island-manifest.js +1 -0
  8. package/dist/src/build/island-types-generator.js +5 -0
  9. package/dist/src/build/mdx-island-transform.js +2 -0
  10. package/dist/src/build/mdx-plugin.js +1 -0
  11. package/dist/src/build/page-island-transform.js +3 -0
  12. package/dist/src/build/prop-extractors/index.js +1 -0
  13. package/dist/src/build/prop-extractors/lit.js +1 -0
  14. package/dist/src/build/prop-extractors/qwik.js +1 -0
  15. package/dist/src/build/prop-extractors/solid.js +1 -0
  16. package/dist/src/build/prop-extractors/svelte.js +1 -0
  17. package/dist/src/build/prop-extractors/vue.js +1 -0
  18. package/dist/src/build/sidecar-file-manager.js +1 -0
  19. package/dist/src/build/sidecar-renderer.js +6 -0
  20. package/dist/src/client/adapters/index.js +1 -0
  21. package/dist/src/client/components.js +1 -0
  22. package/dist/src/client/css-hmr-handler.js +1 -0
  23. package/dist/src/client/framework-adapter.js +13 -0
  24. package/dist/src/client/hmr-coordinator.js +1 -0
  25. package/dist/src/client/hmr-error-overlay.js +214 -0
  26. package/dist/src/client/main.js +39 -0
  27. package/{src → dist/src}/client/types/framework-runtime.d.ts +68 -68
  28. package/{src → dist/src}/client/types/vite-hmr.d.ts +46 -46
  29. package/dist/src/client/types/vite-virtual-modules.d.ts +70 -0
  30. package/dist/src/components/Image.js +1 -0
  31. package/dist/src/components/IslandErrorBoundary.js +1 -0
  32. package/dist/src/components/LayoutDataErrorBoundary.js +1 -0
  33. package/dist/src/components/LayoutErrorBoundary.js +1 -0
  34. package/dist/src/components/PersistentIsland.js +1 -0
  35. package/dist/src/components/StreamingErrorBoundary.js +1 -0
  36. package/dist/src/components/StreamingLayout.js +29 -0
  37. package/dist/src/core/components/component-analyzer.js +1 -0
  38. package/dist/src/core/components/component-detection.js +5 -0
  39. package/dist/src/core/components/enhanced-framework-detector.js +1 -0
  40. package/dist/src/core/components/framework-registry.js +1 -0
  41. package/dist/src/core/content/mdx-processor.js +1 -0
  42. package/dist/src/core/integrations/index.js +1 -0
  43. package/dist/src/core/integrations/loader.js +1 -0
  44. package/dist/src/core/integrations/registry.js +1 -0
  45. package/dist/src/core/islands/island-persistence.js +1 -0
  46. package/dist/src/core/islands/island-state-serializer.js +1 -0
  47. package/dist/src/core/islands/persistent-island-context.js +1 -0
  48. package/dist/src/core/islands/use-persistent-state.js +1 -0
  49. package/dist/src/core/layout/enhanced-layout-resolver.js +1 -0
  50. package/dist/src/core/layout/layout-cache-manager.js +1 -0
  51. package/dist/src/core/layout/layout-composer.js +1 -0
  52. package/dist/src/core/layout/layout-data-loader.js +1 -0
  53. package/dist/src/core/layout/layout-discovery.js +1 -0
  54. package/dist/src/core/layout/layout-matcher.js +1 -0
  55. package/dist/src/core/layout/layout-types.js +1 -0
  56. package/dist/src/core/modules/framework-module-resolver.js +1 -0
  57. package/dist/src/islands/component-analysis.js +1 -0
  58. package/dist/src/islands/css-utils.js +17 -0
  59. package/dist/src/islands/discovery/index.js +1 -0
  60. package/dist/src/islands/discovery/registry.js +1 -0
  61. package/dist/src/islands/discovery/resolver.js +2 -0
  62. package/dist/src/islands/discovery/scanner.js +1 -0
  63. package/dist/src/islands/discovery/types.js +1 -0
  64. package/dist/src/islands/discovery/validator.js +18 -0
  65. package/dist/src/islands/discovery/watcher.js +1 -0
  66. package/dist/src/islands/framework-detection.js +1 -0
  67. package/dist/src/islands/integration-loader.js +1 -0
  68. package/dist/src/islands/island.js +1 -0
  69. package/dist/src/islands/render-cache.js +1 -0
  70. package/dist/src/islands/types.js +1 -0
  71. package/dist/src/islands/universal-css-collector.js +5 -0
  72. package/dist/src/islands/universal-head-collector.js +2 -0
  73. package/{src → dist/src}/layout-system.d.ts +592 -592
  74. package/dist/src/layout-system.js +1 -0
  75. package/dist/src/middleware/discovery.js +1 -0
  76. package/dist/src/middleware/executor.js +1 -0
  77. package/dist/src/middleware/index.js +1 -0
  78. package/dist/src/middleware/types.js +1 -0
  79. package/dist/src/nitro/build-config.js +1 -0
  80. package/dist/src/nitro/config.js +1 -0
  81. package/dist/src/nitro/error-handler.js +198 -0
  82. package/dist/src/nitro/index.js +1 -0
  83. package/dist/src/nitro/island-manifest.js +2 -0
  84. package/dist/src/nitro/middleware-adapter.js +1 -0
  85. package/dist/src/nitro/renderer.js +183 -0
  86. package/dist/src/nitro/route-discovery.js +1 -0
  87. package/dist/src/nitro/types.js +1 -0
  88. package/dist/src/render/collect-css.js +3 -0
  89. package/{src/render/error-pages.ts → dist/src/render/error-pages.js} +7 -38
  90. package/dist/src/render/isolated-ssr-renderer.js +1 -0
  91. package/dist/src/render/ssr.js +90 -0
  92. package/dist/src/schemas/api.js +1 -0
  93. package/dist/src/schemas/core.js +1 -0
  94. package/dist/src/schemas/index.js +1 -0
  95. package/dist/src/schemas/layout.js +1 -0
  96. package/dist/src/schemas/routing/index.js +1 -0
  97. package/dist/src/schemas/routing.js +1 -0
  98. package/dist/src/types/as-island.js +1 -0
  99. package/{src → dist/src}/types/image.d.ts +106 -106
  100. package/{src → dist/src}/types/index.d.ts +22 -22
  101. package/{src → dist/src}/types/island-jsx.d.ts +33 -33
  102. package/{src → dist/src}/types/island-prop.d.ts +20 -20
  103. package/dist/src/types/layout.js +1 -0
  104. package/{src → dist/src}/types/mdx.d.ts +6 -6
  105. package/dist/src/types/routing.js +1 -0
  106. package/dist/src/types/types.js +1 -0
  107. package/{src → dist/src}/types/urlpattern.d.ts +49 -49
  108. package/{src → dist/src}/types/vite-env.d.ts +11 -11
  109. package/dist/src/utils/dev-logger.js +12 -0
  110. package/dist/src/utils/fs.js +1 -0
  111. package/dist/src/vite-plugin/auto-discover.js +1 -0
  112. package/dist/src/vite-plugin/config.js +1 -0
  113. package/dist/src/vite-plugin/errors.js +1 -0
  114. package/dist/src/vite-plugin/image-optimization.js +45 -0
  115. package/dist/src/vite-plugin/integration-activator.js +1 -0
  116. package/dist/src/vite-plugin/island-sidecar-plugin.js +1 -0
  117. package/dist/src/vite-plugin/module-discovery.js +1 -0
  118. package/dist/src/vite-plugin/nitro-integration.js +42 -0
  119. package/dist/src/vite-plugin/plugin.js +1 -0
  120. package/dist/src/vite-plugin/types.js +1 -0
  121. package/dist/src/vite-plugin/validation.js +2 -0
  122. package/package.json +57 -26
  123. package/mod.ts +0 -302
  124. package/src/build/integration-bundler-plugin.ts +0 -116
  125. package/src/build/integration-config.ts +0 -168
  126. package/src/build/integration-detection-plugin.ts +0 -117
  127. package/src/build/integration-resolver-plugin.ts +0 -90
  128. package/src/build/island-manifest.ts +0 -269
  129. package/src/build/island-types-generator.ts +0 -476
  130. package/src/build/mdx-island-transform.ts +0 -464
  131. package/src/build/mdx-plugin.ts +0 -98
  132. package/src/build/page-island-transform.ts +0 -598
  133. package/src/build/prop-extractors/index.ts +0 -21
  134. package/src/build/prop-extractors/lit.ts +0 -140
  135. package/src/build/prop-extractors/qwik.ts +0 -16
  136. package/src/build/prop-extractors/solid.ts +0 -125
  137. package/src/build/prop-extractors/svelte.ts +0 -194
  138. package/src/build/prop-extractors/vue.ts +0 -111
  139. package/src/build/sidecar-file-manager.ts +0 -104
  140. package/src/build/sidecar-renderer.ts +0 -30
  141. package/src/client/adapters/index.js +0 -12
  142. package/src/client/adapters/index.ts +0 -13
  143. package/src/client/adapters/lit-adapter.js +0 -467
  144. package/src/client/adapters/lit-adapter.ts +0 -654
  145. package/src/client/adapters/preact-adapter.js +0 -223
  146. package/src/client/adapters/preact-adapter.ts +0 -331
  147. package/src/client/adapters/qwik-adapter.js +0 -259
  148. package/src/client/adapters/qwik-adapter.ts +0 -345
  149. package/src/client/adapters/react-adapter.js +0 -220
  150. package/src/client/adapters/react-adapter.ts +0 -353
  151. package/src/client/adapters/solid-adapter.js +0 -295
  152. package/src/client/adapters/solid-adapter.ts +0 -451
  153. package/src/client/adapters/svelte-adapter.js +0 -368
  154. package/src/client/adapters/svelte-adapter.ts +0 -524
  155. package/src/client/adapters/vue-adapter.js +0 -278
  156. package/src/client/adapters/vue-adapter.ts +0 -467
  157. package/src/client/components.js +0 -23
  158. package/src/client/components.ts +0 -35
  159. package/src/client/css-hmr-handler.js +0 -263
  160. package/src/client/css-hmr-handler.ts +0 -344
  161. package/src/client/framework-adapter.js +0 -283
  162. package/src/client/framework-adapter.ts +0 -462
  163. package/src/client/hmr-coordinator.js +0 -274
  164. package/src/client/hmr-coordinator.ts +0 -396
  165. package/src/client/hmr-error-overlay.js +0 -533
  166. package/src/client/main.js +0 -816
  167. package/src/client/types/vite-virtual-modules.d.ts +0 -60
  168. package/src/components/Image.tsx +0 -123
  169. package/src/components/IslandErrorBoundary.tsx +0 -145
  170. package/src/components/LayoutDataErrorBoundary.tsx +0 -141
  171. package/src/components/LayoutErrorBoundary.tsx +0 -127
  172. package/src/components/PersistentIsland.tsx +0 -52
  173. package/src/components/StreamingErrorBoundary.tsx +0 -233
  174. package/src/components/StreamingLayout.tsx +0 -538
  175. package/src/core/components/component-analyzer.ts +0 -192
  176. package/src/core/components/component-detection.ts +0 -508
  177. package/src/core/components/enhanced-framework-detector.ts +0 -500
  178. package/src/core/components/framework-registry.ts +0 -563
  179. package/src/core/content/mdx-processor.ts +0 -46
  180. package/src/core/integrations/index.ts +0 -19
  181. package/src/core/integrations/loader.ts +0 -125
  182. package/src/core/integrations/registry.ts +0 -175
  183. package/src/core/islands/island-persistence.ts +0 -325
  184. package/src/core/islands/island-state-serializer.ts +0 -258
  185. package/src/core/islands/persistent-island-context.tsx +0 -80
  186. package/src/core/islands/use-persistent-state.ts +0 -68
  187. package/src/core/layout/enhanced-layout-resolver.ts +0 -322
  188. package/src/core/layout/layout-cache-manager.ts +0 -485
  189. package/src/core/layout/layout-composer.ts +0 -357
  190. package/src/core/layout/layout-data-loader.ts +0 -516
  191. package/src/core/layout/layout-discovery.ts +0 -243
  192. package/src/core/layout/layout-matcher.ts +0 -299
  193. package/src/core/layout/layout-types.ts +0 -110
  194. package/src/core/modules/framework-module-resolver.ts +0 -273
  195. package/src/islands/component-analysis.ts +0 -213
  196. package/src/islands/css-utils.ts +0 -565
  197. package/src/islands/discovery/index.ts +0 -80
  198. package/src/islands/discovery/registry.ts +0 -340
  199. package/src/islands/discovery/resolver.ts +0 -477
  200. package/src/islands/discovery/scanner.ts +0 -386
  201. package/src/islands/discovery/types.ts +0 -117
  202. package/src/islands/discovery/validator.ts +0 -544
  203. package/src/islands/discovery/watcher.ts +0 -368
  204. package/src/islands/framework-detection.ts +0 -428
  205. package/src/islands/integration-loader.ts +0 -490
  206. package/src/islands/island.tsx +0 -565
  207. package/src/islands/render-cache.ts +0 -550
  208. package/src/islands/types.ts +0 -80
  209. package/src/islands/universal-css-collector.ts +0 -157
  210. package/src/islands/universal-head-collector.ts +0 -137
  211. package/src/layout-system.ts +0 -218
  212. package/src/middleware/discovery.ts +0 -268
  213. package/src/middleware/executor.ts +0 -315
  214. package/src/middleware/index.ts +0 -76
  215. package/src/middleware/types.ts +0 -99
  216. package/src/nitro/build-config.ts +0 -576
  217. package/src/nitro/config.ts +0 -483
  218. package/src/nitro/error-handler.ts +0 -636
  219. package/src/nitro/index.ts +0 -173
  220. package/src/nitro/island-manifest.ts +0 -584
  221. package/src/nitro/middleware-adapter.ts +0 -260
  222. package/src/nitro/renderer.ts +0 -1471
  223. package/src/nitro/route-discovery.ts +0 -439
  224. package/src/nitro/types.ts +0 -321
  225. package/src/render/collect-css.ts +0 -198
  226. package/src/render/isolated-ssr-renderer.ts +0 -654
  227. package/src/render/ssr.ts +0 -1030
  228. package/src/schemas/api.ts +0 -30
  229. package/src/schemas/core.ts +0 -64
  230. package/src/schemas/index.ts +0 -212
  231. package/src/schemas/layout.ts +0 -279
  232. package/src/schemas/routing/index.ts +0 -38
  233. package/src/schemas/routing.ts +0 -376
  234. package/src/types/as-island.ts +0 -20
  235. package/src/types/layout.ts +0 -285
  236. package/src/types/routing.ts +0 -555
  237. package/src/types/types.ts +0 -5
  238. package/src/utils/dev-logger.ts +0 -299
  239. package/src/utils/fs.ts +0 -151
  240. package/src/vite-plugin/auto-discover.ts +0 -551
  241. package/src/vite-plugin/config.ts +0 -266
  242. package/src/vite-plugin/errors.ts +0 -127
  243. package/src/vite-plugin/image-optimization.ts +0 -156
  244. package/src/vite-plugin/integration-activator.ts +0 -126
  245. package/src/vite-plugin/island-sidecar-plugin.ts +0 -176
  246. package/src/vite-plugin/module-discovery.ts +0 -189
  247. package/src/vite-plugin/nitro-integration.ts +0 -1354
  248. package/src/vite-plugin/plugin.ts +0 -401
  249. package/src/vite-plugin/types.ts +0 -327
  250. package/src/vite-plugin/validation.ts +0 -228
@@ -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;