@useavalon/avalon 0.1.13 → 0.1.14

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,322 +0,0 @@
1
- import { render as preactRenderToString } from 'preact-render-to-string';
2
-
3
- import { LayoutDiscovery } from './layout-discovery.ts';
4
- import { LayoutMatcher } from './layout-matcher.ts';
5
- import { LayoutComposer } from './layout-composer.ts';
6
- import { LayoutDataLoader } from './layout-data-loader.ts';
7
- import { LayoutCacheManager, defaultCacheConfig } from './layout-cache-manager.ts';
8
- import type {
9
- ComponentType,
10
- LayoutContext,
11
- LayoutData,
12
- LayoutHandler,
13
- LayoutProps,
14
- LayoutDiscoveryOptions,
15
- ResolvedLayout,
16
- LayoutCache,
17
- LayoutErrorInfo,
18
- PageModule,
19
- } from './layout-types.ts';
20
-
21
- /**
22
- * Call a ComponentType as a plain function regardless of whether
23
- * it's a class constructor or a function component.
24
- */
25
- function callComponent<P>(component: ComponentType<P>, props: P): unknown {
26
- return (component as (props: P) => unknown)(props);
27
- }
28
-
29
- interface IEnhancedLayoutResolver {
30
- resolveAndRender(routePath: string, pageModule: PageModule, context: LayoutContext): Promise<ResolvedLayout>;
31
- getCachedResolution(routePath: string): ResolvedLayout | null;
32
- clearCache(): void;
33
- setCaching(enabled: boolean): void;
34
- }
35
-
36
- /**
37
- * Enhanced Layout Resolver Options
38
- */
39
- export interface EnhancedLayoutResolverOptions extends LayoutDiscoveryOptions {
40
- enableCaching?: boolean;
41
- cacheTTL?: number;
42
- maxCacheSize?: number;
43
- enableMetrics?: boolean;
44
- enableDebugInfo?: boolean;
45
- }
46
-
47
- /**
48
- * Simplified Enhanced Layout Resolver
49
- * Handles: discovery → conditional filtering → composition → data loading → rendering
50
- */
51
- export class EnhancedLayoutResolver implements IEnhancedLayoutResolver {
52
- private readonly layoutDiscovery: LayoutDiscovery;
53
- private readonly layoutMatcher: LayoutMatcher;
54
- private readonly layoutComposer: LayoutComposer;
55
- private readonly layoutDataLoader: LayoutDataLoader;
56
- private readonly cache: LayoutCache;
57
- private readonly cacheManager: LayoutCacheManager;
58
- private readonly options: Required<EnhancedLayoutResolverOptions>;
59
-
60
- constructor(options: EnhancedLayoutResolverOptions) {
61
- this.options = {
62
- baseDirectory: options.baseDirectory,
63
- filePattern: options.filePattern || '_layout.tsx',
64
- excludeDirectories: options.excludeDirectories || ['node_modules', '.git', 'dist'],
65
- enableWatching: options.enableWatching || false,
66
- developmentMode: options.developmentMode || false,
67
- enableCaching: options.enableCaching ?? true,
68
- cacheTTL: options.cacheTTL || 5 * 60 * 1000,
69
- maxCacheSize: options.maxCacheSize || 1000,
70
- enableMetrics: options.enableMetrics ?? true,
71
- enableDebugInfo: options.enableDebugInfo || false,
72
- };
73
-
74
- this.layoutDiscovery = new LayoutDiscovery(this.options);
75
- this.layoutMatcher = new LayoutMatcher({ developmentMode: this.options.developmentMode });
76
- this.layoutComposer = new LayoutComposer(this.options);
77
- this.layoutDataLoader = new LayoutDataLoader({
78
- developmentMode: this.options.developmentMode,
79
- enableParallelLoading: true,
80
- continueOnError: true,
81
- });
82
-
83
- this.cache = {
84
- resolved: new Map<string, ResolvedLayout>(),
85
- handlers: new Map<string, LayoutHandler>(),
86
- data: new Map<string, LayoutData>(),
87
- ttl: new Map<string, number>(),
88
- };
89
-
90
- this.cacheManager = new LayoutCacheManager({
91
- ...defaultCacheConfig,
92
- defaultTtl: this.options.cacheTTL,
93
- maxEntries: this.options.maxCacheSize,
94
- enableStats: this.options.enableMetrics,
95
- });
96
- }
97
-
98
- /**
99
- * Resolve layout chain for a route
100
- */
101
- async resolveLayouts(routePath: string, pageModule: PageModule, context: LayoutContext): Promise<ResolvedLayout> {
102
- const startTime = performance.now();
103
- const cacheKey = this.generateCacheKey(routePath, pageModule, context);
104
-
105
- // Check cache first
106
- if (this.options.enableCaching) {
107
- const cached = this.cacheManager.getResolvedLayout(cacheKey);
108
- if (cached) {
109
- if (this.options.developmentMode) {
110
- console.log(`[EnhancedLayoutResolver] Cache hit for route: ${routePath}`);
111
- }
112
- return { ...cached, metadata: { ...cached.metadata, cacheHit: true } };
113
- }
114
- }
115
-
116
- const errors: LayoutErrorInfo[] = [];
117
- let handlers: LayoutHandler[] = [];
118
-
119
- try {
120
- // Stage 1–3: Composition Control (subsumes discovery + filtering)
121
- handlers = await this.layoutComposer.resolveLayouts(routePath, pageModule);
122
-
123
- // Stage 4: Data Loading
124
- const loadingResults = await this.layoutDataLoader.loadLayoutData(handlers, context);
125
- const { errors: loadErrors } = this.layoutDataLoader.processLoadingResults(loadingResults, handlers);
126
- errors.push(...loadErrors);
127
-
128
- } catch (error) {
129
- errors.push({ layoutPath: routePath, errorType: 'rendering', timestamp: Date.now() });
130
- if (this.options.developmentMode) {
131
- console.warn(`[EnhancedLayoutResolver] Error resolving layouts:`, error);
132
- }
133
- }
134
-
135
- const totalTime = performance.now() - startTime;
136
- const resolvedLayout: ResolvedLayout = {
137
- handlers,
138
- dataLoaders: handlers.map(h => h.loader).filter((l): l is (ctx: LayoutContext) => Promise<LayoutData> => l !== undefined),
139
- errorBoundaries: [],
140
- streamingComponents: [],
141
- metadata: { totalLayouts: handlers.length, resolutionTime: totalTime, cacheHit: false },
142
- };
143
-
144
- // Cache the result
145
- if (this.options.enableCaching) {
146
- this.cacheManager.setResolvedLayout(cacheKey, resolvedLayout);
147
- for (const handler of handlers) {
148
- this.cacheManager.addDependency(cacheKey, handler.path);
149
- }
150
- }
151
-
152
- if (this.options.developmentMode) {
153
- if (errors.length > 0) {
154
- console.warn(`[EnhancedLayoutResolver] ${errors.length} error(s) during layout resolution for ${routePath}`);
155
- }
156
- console.log(`[EnhancedLayoutResolver] Resolved ${handlers.length} layouts for ${routePath} in ${totalTime.toFixed(2)}ms`);
157
- }
158
-
159
- return resolvedLayout;
160
- }
161
-
162
- /**
163
- * Resolve and render complete layout chain
164
- */
165
- async resolveAndRender(routePath: string, pageModule: PageModule, context: LayoutContext): Promise<ResolvedLayout> {
166
- const resolvedLayout = await this.resolveLayouts(routePath, pageModule, context);
167
-
168
- if (this.options.developmentMode) {
169
- console.log(`[EnhancedLayoutResolver] Rendering ${resolvedLayout.handlers.length} layouts for ${routePath}`);
170
- }
171
-
172
- const loadingResults = await this.layoutDataLoader.loadLayoutData(resolvedLayout.handlers, context);
173
- const { data } = this.layoutDataLoader.processLoadingResults(loadingResults, resolvedLayout.handlers);
174
-
175
- if (this.options.developmentMode) {
176
- this.renderLayoutsToString(resolvedLayout, pageModule, context, data);
177
- }
178
-
179
- return resolvedLayout;
180
- }
181
-
182
- private renderLayoutsToString(
183
- resolvedLayout: ResolvedLayout,
184
- pageModule: PageModule,
185
- context: LayoutContext,
186
- layoutData: LayoutData[] = []
187
- ): string {
188
- try {
189
- const PageComponent = (pageModule.default ?? (() => null)) as unknown as ComponentType<LayoutProps>;
190
- let currentComponent: ComponentType<LayoutProps> = PageComponent;
191
-
192
- for (let i = resolvedLayout.handlers.length - 1; i >= 0; i--) {
193
- const handler = resolvedLayout.handlers[i];
194
- const LayoutComponent = handler.component;
195
- const previousComponent = currentComponent;
196
- const layoutDataForThis: LayoutData = layoutData[i] || {};
197
-
198
- currentComponent = (props: LayoutProps) => callComponent(LayoutComponent, {
199
- ...props,
200
- data: layoutDataForThis,
201
- frontmatter: pageModule.frontmatter,
202
- children: callComponent(previousComponent, props),
203
- });
204
- }
205
-
206
- return preactRenderToString(
207
- callComponent(currentComponent, {
208
- children: null,
209
- data: {},
210
- route: {
211
- path: new URL(context.request.url).pathname,
212
- params: context.params,
213
- query: context.query,
214
- },
215
- }) as Parameters<typeof preactRenderToString>[0]
216
- );
217
- } catch (error) {
218
- if (this.options.developmentMode) {
219
- console.warn('[EnhancedLayoutResolver] Rendering failed:', error);
220
- }
221
- return '';
222
- }
223
- }
224
-
225
- getCachedResolution(cacheKey: string): ResolvedLayout | null {
226
- return this.cacheManager.getResolvedLayout(cacheKey);
227
- }
228
-
229
- invalidateCacheByFilePath(filePath: string): number {
230
- return this.cacheManager.invalidateByFilePath(filePath);
231
- }
232
-
233
- clearCache(): void {
234
- this.cacheManager.clear();
235
- (this.cache.resolved).clear();
236
- (this.cache.handlers).clear();
237
- (this.cache.data).clear();
238
- (this.cache.ttl).clear();
239
- this.layoutDiscovery.clearCache();
240
- this.layoutComposer.clearCache();
241
- }
242
-
243
- setCaching(enabled: boolean): void {
244
- this.options.enableCaching = enabled;
245
- if (!enabled) this.clearCache();
246
- }
247
-
248
- private generateCacheKey(routePath: string, pageModule: PageModule, context: LayoutContext): string {
249
- const pageConfigHash = pageModule.layoutConfig ? JSON.stringify(pageModule.layoutConfig) : '';
250
- return `${routePath}:${pageConfigHash}:${context.request.method}:${context.request.url}`;
251
- }
252
-
253
-
254
- getResolverStats(): {
255
- cacheSize: number;
256
- cacheHitRate: number;
257
- totalResolutions: number;
258
- averageResolutionTime: number;
259
- errorCount: number;
260
- cacheStats: ReturnType<LayoutCacheManager['getStats']>;
261
- discoveryStats: ReturnType<LayoutDiscovery['getCacheStats']>;
262
- } {
263
- const cacheStats = this.cacheManager.getStats();
264
- const discoveryStats = this.layoutDiscovery.getCacheStats();
265
- return {
266
- cacheSize: cacheStats.totalEntries,
267
- cacheHitRate: this.cacheManager.getHitRate(),
268
- totalResolutions: cacheStats.hits + cacheStats.misses,
269
- averageResolutionTime: 0,
270
- errorCount: 0,
271
- cacheStats,
272
- discoveryStats,
273
- };
274
- }
275
-
276
- updateOptions(options: Partial<EnhancedLayoutResolverOptions>): void {
277
- Object.assign(this.options, options);
278
- if (options.developmentMode !== undefined) {
279
- this.layoutDataLoader.updateOptions({ developmentMode: options.developmentMode });
280
- }
281
- }
282
-
283
- getOptions(): Required<EnhancedLayoutResolverOptions> {
284
- return { ...this.options };
285
- }
286
-
287
- getLayoutDiscovery(): LayoutDiscovery { return this.layoutDiscovery; }
288
- getLayoutMatcher(): LayoutMatcher { return this.layoutMatcher; }
289
- getLayoutComposer(): LayoutComposer { return this.layoutComposer; }
290
- getLayoutDataLoader(): LayoutDataLoader { return this.layoutDataLoader; }
291
- getCacheManager(): LayoutCacheManager { return this.cacheManager; }
292
-
293
- destroy(): void {
294
- this.cacheManager.destroy();
295
- }
296
- }
297
-
298
- export function createEnhancedLayoutResolver(options: EnhancedLayoutResolverOptions): EnhancedLayoutResolver {
299
- return new EnhancedLayoutResolver(options);
300
- }
301
-
302
- export const EnhancedLayoutResolverUtils = {
303
- createBasicConfig(baseDirectory: string, developmentMode = false): EnhancedLayoutResolverOptions {
304
- return {
305
- baseDirectory,
306
- developmentMode,
307
- enableCaching: true,
308
- enableMetrics: developmentMode,
309
- enableDebugInfo: developmentMode,
310
- };
311
- },
312
-
313
- createProductionConfig(baseDirectory: string): EnhancedLayoutResolverOptions {
314
- return {
315
- baseDirectory,
316
- developmentMode: false,
317
- enableCaching: true,
318
- enableMetrics: false,
319
- enableDebugInfo: false,
320
- };
321
- },
322
- };