@useavalon/avalon 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -0
- package/mod.ts +301 -0
- package/package.json +85 -0
- package/src/build/README.md +310 -0
- package/src/build/integration-bundler-plugin.ts +116 -0
- package/src/build/integration-config.ts +168 -0
- package/src/build/integration-detection-plugin.ts +117 -0
- package/src/build/integration-resolver-plugin.ts +90 -0
- package/src/build/island-manifest.ts +269 -0
- package/src/build/island-types-generator.ts +476 -0
- package/src/build/mdx-island-transform.ts +464 -0
- package/src/build/mdx-plugin.ts +98 -0
- package/src/build/page-island-transform.ts +598 -0
- package/src/build/prop-extractors/index.ts +21 -0
- package/src/build/prop-extractors/lit.ts +140 -0
- package/src/build/prop-extractors/qwik.ts +16 -0
- package/src/build/prop-extractors/solid.ts +125 -0
- package/src/build/prop-extractors/svelte.ts +194 -0
- package/src/build/prop-extractors/vue.ts +111 -0
- package/src/build/sidecar-file-manager.ts +104 -0
- package/src/build/sidecar-renderer.ts +30 -0
- package/src/client/adapters/index.ts +13 -0
- package/src/client/adapters/lit-adapter.ts +654 -0
- package/src/client/adapters/preact-adapter.ts +331 -0
- package/src/client/adapters/qwik-adapter.ts +345 -0
- package/src/client/adapters/react-adapter.ts +353 -0
- package/src/client/adapters/solid-adapter.ts +451 -0
- package/src/client/adapters/svelte-adapter.ts +524 -0
- package/src/client/adapters/vue-adapter.ts +467 -0
- package/src/client/components.ts +35 -0
- package/src/client/css-hmr-handler.ts +344 -0
- package/src/client/framework-adapter.ts +462 -0
- package/src/client/hmr-coordinator.ts +396 -0
- package/src/client/hmr-error-overlay.js +533 -0
- package/src/client/main.js +816 -0
- package/src/client/tests/css-hmr-handler.test.ts +360 -0
- package/src/client/tests/framework-adapter.test.ts +519 -0
- package/src/client/tests/hmr-coordinator.test.ts +176 -0
- package/src/client/tests/hydration-option-parsing.test.ts +107 -0
- package/src/client/tests/lit-adapter.test.ts +427 -0
- package/src/client/tests/preact-adapter.test.ts +353 -0
- package/src/client/tests/qwik-adapter.test.ts +343 -0
- package/src/client/tests/react-adapter.test.ts +317 -0
- package/src/client/tests/solid-adapter.test.ts +396 -0
- package/src/client/tests/svelte-adapter.test.ts +387 -0
- package/src/client/tests/vue-adapter.test.ts +407 -0
- package/src/client/types/framework-runtime.d.ts +68 -0
- package/src/client/types/vite-hmr.d.ts +46 -0
- package/src/client/types/vite-virtual-modules.d.ts +60 -0
- package/src/components/Image.tsx +123 -0
- package/src/components/IslandErrorBoundary.tsx +145 -0
- package/src/components/LayoutDataErrorBoundary.tsx +141 -0
- package/src/components/LayoutErrorBoundary.tsx +127 -0
- package/src/components/PersistentIsland.tsx +52 -0
- package/src/components/StreamingErrorBoundary.tsx +233 -0
- package/src/components/StreamingLayout.tsx +538 -0
- package/src/components/tests/component-analyzer.test.ts +96 -0
- package/src/components/tests/component-detection.test.ts +347 -0
- package/src/components/tests/persistent-islands.test.ts +398 -0
- package/src/core/components/component-analyzer.ts +192 -0
- package/src/core/components/component-detection.ts +508 -0
- package/src/core/components/enhanced-framework-detector.ts +500 -0
- package/src/core/components/framework-registry.ts +563 -0
- package/src/core/components/tests/enhanced-framework-detector.test.ts +577 -0
- package/src/core/components/tests/framework-registry.test.ts +465 -0
- package/src/core/content/mdx-processor.ts +46 -0
- package/src/core/integrations/README.md +282 -0
- package/src/core/integrations/index.ts +19 -0
- package/src/core/integrations/loader.ts +125 -0
- package/src/core/integrations/registry.ts +195 -0
- package/src/core/islands/island-persistence.ts +325 -0
- package/src/core/islands/island-state-serializer.ts +258 -0
- package/src/core/islands/persistent-island-context.tsx +80 -0
- package/src/core/islands/use-persistent-state.ts +68 -0
- package/src/core/layout/enhanced-layout-resolver.ts +322 -0
- package/src/core/layout/layout-cache-manager.ts +485 -0
- package/src/core/layout/layout-composer.ts +357 -0
- package/src/core/layout/layout-data-loader.ts +516 -0
- package/src/core/layout/layout-discovery.ts +243 -0
- package/src/core/layout/layout-matcher.ts +299 -0
- package/src/core/layout/layout-types.ts +110 -0
- package/src/core/layout/tests/enhanced-layout-resolver.test.ts +477 -0
- package/src/core/layout/tests/layout-cache-optimization.test.ts +149 -0
- package/src/core/layout/tests/layout-composer.test.ts +486 -0
- package/src/core/layout/tests/layout-data-loader.test.ts +443 -0
- package/src/core/layout/tests/layout-discovery.test.ts +253 -0
- package/src/core/layout/tests/layout-matcher.test.ts +480 -0
- package/src/core/modules/framework-module-resolver.ts +273 -0
- package/src/core/modules/tests/framework-module-resolver.test.ts +263 -0
- package/src/core/modules/tests/module-resolution-integration.test.ts +117 -0
- package/src/islands/component-analysis.ts +213 -0
- package/src/islands/css-utils.ts +565 -0
- package/src/islands/discovery/index.ts +80 -0
- package/src/islands/discovery/registry.ts +340 -0
- package/src/islands/discovery/resolver.ts +477 -0
- package/src/islands/discovery/scanner.ts +386 -0
- package/src/islands/discovery/tests/island-discovery.test.ts +881 -0
- package/src/islands/discovery/types.ts +117 -0
- package/src/islands/discovery/validator.ts +544 -0
- package/src/islands/discovery/watcher.ts +368 -0
- package/src/islands/framework-detection.ts +428 -0
- package/src/islands/integration-loader.ts +490 -0
- package/src/islands/island.tsx +565 -0
- package/src/islands/render-cache.ts +550 -0
- package/src/islands/types.ts +80 -0
- package/src/islands/universal-css-collector.ts +157 -0
- package/src/islands/universal-head-collector.ts +137 -0
- package/src/layout-system.d.ts +592 -0
- package/src/layout-system.ts +218 -0
- package/src/middleware/__tests__/discovery.test.ts +107 -0
- package/src/middleware/discovery.ts +268 -0
- package/src/middleware/executor.ts +315 -0
- package/src/middleware/index.ts +76 -0
- package/src/middleware/types.ts +99 -0
- package/src/nitro/build-config.ts +576 -0
- package/src/nitro/config.ts +483 -0
- package/src/nitro/error-handler.ts +636 -0
- package/src/nitro/index.ts +173 -0
- package/src/nitro/island-manifest.ts +584 -0
- package/src/nitro/middleware-adapter.ts +260 -0
- package/src/nitro/renderer.ts +1458 -0
- package/src/nitro/route-discovery.ts +439 -0
- package/src/nitro/types.ts +321 -0
- package/src/render/collect-css.ts +198 -0
- package/src/render/error-pages.ts +79 -0
- package/src/render/isolated-ssr-renderer.ts +654 -0
- package/src/render/ssr.ts +1030 -0
- package/src/schemas/api.ts +30 -0
- package/src/schemas/core.ts +64 -0
- package/src/schemas/index.ts +212 -0
- package/src/schemas/layout.ts +279 -0
- package/src/schemas/routing/index.ts +38 -0
- package/src/schemas/routing.ts +376 -0
- package/src/types/as-island.ts +20 -0
- package/src/types/image.d.ts +106 -0
- package/src/types/index.d.ts +22 -0
- package/src/types/island-jsx.d.ts +33 -0
- package/src/types/island-prop.d.ts +20 -0
- package/src/types/layout.ts +285 -0
- package/src/types/mdx.d.ts +6 -0
- package/src/types/routing.ts +555 -0
- package/src/types/tests/layout-types.test.ts +197 -0
- package/src/types/types.ts +5 -0
- package/src/types/urlpattern.d.ts +49 -0
- package/src/types/vite-env.d.ts +11 -0
- package/src/utils/dev-logger.ts +299 -0
- package/src/utils/fs.ts +151 -0
- package/src/vite-plugin/auto-discover.ts +551 -0
- package/src/vite-plugin/config.ts +266 -0
- package/src/vite-plugin/errors.ts +127 -0
- package/src/vite-plugin/image-optimization.ts +151 -0
- package/src/vite-plugin/integration-activator.ts +126 -0
- package/src/vite-plugin/island-sidecar-plugin.ts +176 -0
- package/src/vite-plugin/module-discovery.ts +189 -0
- package/src/vite-plugin/nitro-integration.ts +1334 -0
- package/src/vite-plugin/plugin.ts +329 -0
- package/src/vite-plugin/tests/image-optimization.test.ts +54 -0
- package/src/vite-plugin/types.ts +327 -0
- package/src/vite-plugin/validation.ts +228 -0
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
LayoutContext,
|
|
3
|
+
LayoutRoute,
|
|
4
|
+
LayoutHandler,
|
|
5
|
+
LayoutProps,
|
|
6
|
+
LayoutDiscoveryOptions,
|
|
7
|
+
RouteInfo,
|
|
8
|
+
LayoutRule,
|
|
9
|
+
LayoutConfig,
|
|
10
|
+
IslandState,
|
|
11
|
+
PersistentIslandProps,
|
|
12
|
+
LayoutErrorInfo,
|
|
13
|
+
LayoutErrorBoundaryProps,
|
|
14
|
+
ErrorRecoveryStrategy,
|
|
15
|
+
StreamingLayoutProps,
|
|
16
|
+
StreamingComponent,
|
|
17
|
+
ResolvedLayout,
|
|
18
|
+
LayoutLoader,
|
|
19
|
+
} from '../schemas/layout.ts';
|
|
20
|
+
import type { ComponentType, ComponentChildren } from 'preact';
|
|
21
|
+
|
|
22
|
+
export type {
|
|
23
|
+
LayoutContext,
|
|
24
|
+
LayoutData,
|
|
25
|
+
LayoutRoute,
|
|
26
|
+
LayoutHandler,
|
|
27
|
+
LayoutProps,
|
|
28
|
+
LayoutDiscoveryOptions,
|
|
29
|
+
RouteInfo,
|
|
30
|
+
LayoutRule,
|
|
31
|
+
LayoutConfig,
|
|
32
|
+
IslandState,
|
|
33
|
+
PersistentIslandProps,
|
|
34
|
+
PersistentIslandContext,
|
|
35
|
+
LayoutErrorInfo,
|
|
36
|
+
LayoutErrorBoundaryProps,
|
|
37
|
+
ErrorRecoveryStrategy,
|
|
38
|
+
StreamingLayoutProps,
|
|
39
|
+
StreamingComponent,
|
|
40
|
+
ResolvedLayout,
|
|
41
|
+
LayoutCache,
|
|
42
|
+
EnhancedLayoutContext,
|
|
43
|
+
LayoutLoader,
|
|
44
|
+
LayoutMatcherFunction,
|
|
45
|
+
LayoutErrorHandler,
|
|
46
|
+
LayoutRetryFunction,
|
|
47
|
+
LayoutFallbackRenderer,
|
|
48
|
+
IslandStateSaver,
|
|
49
|
+
IslandStateLoader,
|
|
50
|
+
IslandStateClearer,
|
|
51
|
+
StreamingReadyCheck,
|
|
52
|
+
} from '../schemas/layout.ts';
|
|
53
|
+
export type { ComponentType, ComponentChildren } from 'preact';
|
|
54
|
+
|
|
55
|
+
// Import concrete implementations
|
|
56
|
+
export { LayoutDiscovery } from '../core/layout/layout-discovery.ts';
|
|
57
|
+
export { LayoutDataLoader } from '../core/layout/layout-data-loader.ts';
|
|
58
|
+
export { LayoutMatcher as LayoutMatcherClass } from '../core/layout/layout-matcher.ts';
|
|
59
|
+
export { LayoutComposer } from '../core/layout/layout-composer.ts';
|
|
60
|
+
|
|
61
|
+
// Export persistent islands functionality
|
|
62
|
+
export { IslandPersistence, defaultIslandPersistence } from '../core/islands/island-persistence.ts';
|
|
63
|
+
export { IslandStateSerializer } from '../core/islands/island-state-serializer.ts';
|
|
64
|
+
export {
|
|
65
|
+
createPersistentIslandContext,
|
|
66
|
+
usePersistentIslandContext,
|
|
67
|
+
PersistentIslandProvider,
|
|
68
|
+
} from '../core/islands/persistent-island-context.tsx';
|
|
69
|
+
export { PersistentIsland } from '../components/PersistentIsland.tsx';
|
|
70
|
+
|
|
71
|
+
// Export error boundary functionality
|
|
72
|
+
export { LayoutErrorBoundary } from '../components/LayoutErrorBoundary.tsx';
|
|
73
|
+
export { LayoutDataErrorBoundary } from '../components/LayoutDataErrorBoundary.tsx';
|
|
74
|
+
export { IslandErrorBoundary, withIslandErrorBoundary } from '../components/IslandErrorBoundary.tsx';
|
|
75
|
+
|
|
76
|
+
// Export streaming functionality
|
|
77
|
+
export {
|
|
78
|
+
StreamingLayout,
|
|
79
|
+
StreamingSuspense,
|
|
80
|
+
withStreaming,
|
|
81
|
+
useStreamingState,
|
|
82
|
+
} from '../components/StreamingLayout.tsx';
|
|
83
|
+
|
|
84
|
+
// Export enhanced layout resolver
|
|
85
|
+
export {
|
|
86
|
+
EnhancedLayoutResolver,
|
|
87
|
+
createEnhancedLayoutResolver,
|
|
88
|
+
EnhancedLayoutResolverUtils,
|
|
89
|
+
type EnhancedLayoutResolverOptions,
|
|
90
|
+
} from '../core/layout/enhanced-layout-resolver.ts';
|
|
91
|
+
|
|
92
|
+
// Export only essential layout cache types (no debug/performance tooling)
|
|
93
|
+
export {
|
|
94
|
+
LayoutCacheManager,
|
|
95
|
+
type CacheEntry,
|
|
96
|
+
type CacheStats,
|
|
97
|
+
type CacheConfig,
|
|
98
|
+
} from '../core/layout/layout-cache-manager.ts';
|
|
99
|
+
|
|
100
|
+
// === Enhanced Interface Definitions ===
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Layout Discovery Interface
|
|
104
|
+
*/
|
|
105
|
+
export interface ILayoutDiscovery {
|
|
106
|
+
discoverLayouts(routePath: string): Promise<LayoutRoute[]>;
|
|
107
|
+
buildLayoutChain(url: URL): Promise<LayoutHandler[]>;
|
|
108
|
+
setWatching(enabled: boolean): void;
|
|
109
|
+
getOptions(): LayoutDiscoveryOptions;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Layout Matcher Interface
|
|
114
|
+
*/
|
|
115
|
+
export interface ILayoutMatcher {
|
|
116
|
+
addRule(rule: LayoutRule): void;
|
|
117
|
+
removeRule(rule: LayoutRule): void;
|
|
118
|
+
shouldApplyLayout(layoutPath: string, route: RouteInfo): boolean;
|
|
119
|
+
getRules(): LayoutRule[];
|
|
120
|
+
clearRules(): void;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Layout Composer Interface
|
|
125
|
+
*/
|
|
126
|
+
export interface ILayoutComposer {
|
|
127
|
+
resolveLayouts(routePath: string, pageModule: PageModule): Promise<LayoutHandler[]>;
|
|
128
|
+
applyConfiguration(layouts: LayoutHandler[], config: LayoutConfig): Promise<LayoutHandler[]>;
|
|
129
|
+
validateLayoutConfig(config: LayoutConfig): { valid: boolean; errors: string[] };
|
|
130
|
+
clearCache(): void;
|
|
131
|
+
getCompositionStats(): {
|
|
132
|
+
customLayoutCacheSize: number;
|
|
133
|
+
discoveryStats: { layoutCount: number; routeCacheCount: number };
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Island Persistence Interface
|
|
139
|
+
*/
|
|
140
|
+
export interface IIslandPersistence {
|
|
141
|
+
saveState(id: string, state: IslandState): void;
|
|
142
|
+
loadState(id: string): IslandState | null;
|
|
143
|
+
clearState(id: string): void;
|
|
144
|
+
hasState(id: string): boolean;
|
|
145
|
+
getStoredIds(): string[];
|
|
146
|
+
clearAllStates(): void;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Layout Error Recovery Interface
|
|
151
|
+
*/
|
|
152
|
+
export interface ILayoutErrorRecovery {
|
|
153
|
+
handleLayoutError(error: Error, context: LayoutContext): Promise<Response>;
|
|
154
|
+
registerStrategy(errorType: string, strategy: ErrorRecoveryStrategy): void;
|
|
155
|
+
getStrategy(error: Error): ErrorRecoveryStrategy | null;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Layout Streaming Interface
|
|
160
|
+
*/
|
|
161
|
+
export interface ILayoutStreaming {
|
|
162
|
+
renderWithStreaming(layout: LayoutHandler, props: LayoutProps): Promise<ReadableStream>;
|
|
163
|
+
isStreamingSupported(): boolean;
|
|
164
|
+
createStreamingResponse(components: StreamingComponent[]): ReadableStream;
|
|
165
|
+
generateSkeleton(component: StreamingComponent): string;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Enhanced Layout Resolver Interface
|
|
170
|
+
*/
|
|
171
|
+
export interface IEnhancedLayoutResolver {
|
|
172
|
+
resolveAndRender(routePath: string, pageModule: PageModule, context: LayoutContext): Promise<ResolvedLayout>;
|
|
173
|
+
getCachedResolution(routePath: string): ResolvedLayout | null;
|
|
174
|
+
clearCache(): void;
|
|
175
|
+
setCaching(enabled: boolean): void;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// === Component Interface Definitions ===
|
|
179
|
+
|
|
180
|
+
export interface ILayoutComponent {
|
|
181
|
+
props: LayoutProps;
|
|
182
|
+
layoutLoader?: LayoutLoader;
|
|
183
|
+
layoutConfig?: LayoutConfig;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export interface IPersistentIslandComponent {
|
|
187
|
+
props: PersistentIslandProps;
|
|
188
|
+
saveState(): void;
|
|
189
|
+
loadState(): void;
|
|
190
|
+
clearState(): void;
|
|
191
|
+
hasState(): boolean;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
export interface ILayoutErrorBoundaryComponent {
|
|
195
|
+
props: LayoutErrorBoundaryProps;
|
|
196
|
+
handleRetry(): void;
|
|
197
|
+
getErrorState(): { hasError: boolean; error?: Error };
|
|
198
|
+
resetErrorState(): void;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export interface IStreamingLayoutComponent {
|
|
202
|
+
props: StreamingLayoutProps;
|
|
203
|
+
isReady(): Promise<boolean>;
|
|
204
|
+
renderFallback(): ComponentChildren;
|
|
205
|
+
getPriority(): number;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// === Utility Type Definitions ===
|
|
209
|
+
|
|
210
|
+
export interface LayoutModule {
|
|
211
|
+
default: ComponentType<LayoutProps>;
|
|
212
|
+
layoutLoader?: LayoutLoader;
|
|
213
|
+
layoutConfig?: LayoutConfig;
|
|
214
|
+
ErrorBoundary?: ComponentType<LayoutErrorBoundaryProps>;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
export interface PageModule {
|
|
218
|
+
default: ComponentType<Record<string, unknown>>;
|
|
219
|
+
layoutConfig?: LayoutConfig;
|
|
220
|
+
frontmatter?: Record<string, unknown>;
|
|
221
|
+
loader?: (ctx: LayoutContext) => Promise<Record<string, unknown>>;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
export interface LayoutResolutionContext {
|
|
225
|
+
route: RouteInfo;
|
|
226
|
+
pageModule: PageModule;
|
|
227
|
+
layoutContext: LayoutContext;
|
|
228
|
+
cachingEnabled: boolean;
|
|
229
|
+
streamingEnabled: boolean;
|
|
230
|
+
developmentMode: boolean;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
export interface LayoutPerformanceMetrics {
|
|
234
|
+
discoveryTime: number;
|
|
235
|
+
dataLoadingTime: number;
|
|
236
|
+
renderingTime: number;
|
|
237
|
+
totalTime: number;
|
|
238
|
+
layoutCount: number;
|
|
239
|
+
cacheHit: boolean;
|
|
240
|
+
memoryUsage?: number;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
export interface LayoutDebugInfo {
|
|
244
|
+
resolutionChain: string[];
|
|
245
|
+
appliedRules: LayoutRule[];
|
|
246
|
+
skippedLayouts: string[];
|
|
247
|
+
errors: LayoutErrorInfo[];
|
|
248
|
+
metrics: LayoutPerformanceMetrics;
|
|
249
|
+
cacheInfo: {
|
|
250
|
+
hit: boolean;
|
|
251
|
+
key: string;
|
|
252
|
+
size: number;
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// === Event Type Definitions ===
|
|
257
|
+
|
|
258
|
+
export type LayoutEventType =
|
|
259
|
+
| 'layout-discovered'
|
|
260
|
+
| 'layout-loaded'
|
|
261
|
+
| 'layout-rendered'
|
|
262
|
+
| 'layout-error'
|
|
263
|
+
| 'layout-cached'
|
|
264
|
+
| 'island-state-saved'
|
|
265
|
+
| 'island-state-loaded'
|
|
266
|
+
| 'streaming-started'
|
|
267
|
+
| 'streaming-completed';
|
|
268
|
+
|
|
269
|
+
export interface LayoutEventData {
|
|
270
|
+
type: LayoutEventType;
|
|
271
|
+
timestamp: number;
|
|
272
|
+
layoutPath?: string;
|
|
273
|
+
error?: Error;
|
|
274
|
+
metrics?: LayoutPerformanceMetrics;
|
|
275
|
+
data?: Record<string, unknown>;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
export type LayoutEventHandler = (event: LayoutEventData) => void;
|
|
279
|
+
|
|
280
|
+
export interface ILayoutEventEmitter {
|
|
281
|
+
on(event: LayoutEventType, handler: LayoutEventHandler): void;
|
|
282
|
+
off(event: LayoutEventType, handler: LayoutEventHandler): void;
|
|
283
|
+
emit(event: LayoutEventType, data?: Record<string, unknown>): void;
|
|
284
|
+
removeAllListeners(): void;
|
|
285
|
+
}
|