@useavalon/avalon 0.1.11 → 0.1.13
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 -54
- package/mod.ts +302 -302
- package/package.json +49 -26
- package/src/build/integration-bundler-plugin.ts +116 -116
- package/src/build/integration-config.ts +168 -168
- package/src/build/integration-detection-plugin.ts +117 -117
- package/src/build/integration-resolver-plugin.ts +90 -90
- package/src/build/island-manifest.ts +269 -269
- package/src/build/island-types-generator.ts +476 -476
- package/src/build/mdx-island-transform.ts +464 -464
- package/src/build/mdx-plugin.ts +98 -98
- package/src/build/page-island-transform.ts +598 -598
- package/src/build/prop-extractors/index.ts +21 -21
- package/src/build/prop-extractors/lit.ts +140 -140
- package/src/build/prop-extractors/qwik.ts +16 -16
- package/src/build/prop-extractors/solid.ts +125 -125
- package/src/build/prop-extractors/svelte.ts +194 -194
- package/src/build/prop-extractors/vue.ts +111 -111
- package/src/build/sidecar-file-manager.ts +104 -104
- package/src/build/sidecar-renderer.ts +30 -30
- package/src/client/adapters/index.ts +21 -13
- package/src/client/components.ts +35 -35
- package/src/client/css-hmr-handler.ts +344 -344
- package/src/client/framework-adapter.ts +462 -462
- package/src/client/hmr-coordinator.ts +396 -396
- package/src/client/hmr-error-overlay.js +533 -533
- package/src/client/main.js +824 -816
- package/src/client/types/framework-runtime.d.ts +68 -68
- package/src/client/types/vite-hmr.d.ts +46 -46
- package/src/client/types/vite-virtual-modules.d.ts +70 -60
- package/src/components/Image.tsx +123 -123
- package/src/components/IslandErrorBoundary.tsx +145 -145
- package/src/components/LayoutDataErrorBoundary.tsx +141 -141
- package/src/components/LayoutErrorBoundary.tsx +127 -127
- package/src/components/PersistentIsland.tsx +52 -52
- package/src/components/StreamingErrorBoundary.tsx +233 -233
- package/src/components/StreamingLayout.tsx +538 -538
- package/src/core/components/component-analyzer.ts +192 -192
- package/src/core/components/component-detection.ts +508 -508
- package/src/core/components/enhanced-framework-detector.ts +500 -500
- package/src/core/components/framework-registry.ts +563 -563
- package/src/core/content/mdx-processor.ts +46 -46
- package/src/core/integrations/index.ts +19 -19
- package/src/core/integrations/loader.ts +125 -125
- package/src/core/integrations/registry.ts +175 -175
- package/src/core/islands/island-persistence.ts +325 -325
- package/src/core/islands/island-state-serializer.ts +258 -258
- package/src/core/islands/persistent-island-context.tsx +80 -80
- package/src/core/islands/use-persistent-state.ts +68 -68
- package/src/core/layout/enhanced-layout-resolver.ts +322 -322
- package/src/core/layout/layout-cache-manager.ts +485 -485
- package/src/core/layout/layout-composer.ts +357 -357
- package/src/core/layout/layout-data-loader.ts +516 -516
- package/src/core/layout/layout-discovery.ts +243 -243
- package/src/core/layout/layout-matcher.ts +299 -299
- package/src/core/layout/layout-types.ts +110 -110
- package/src/core/modules/framework-module-resolver.ts +273 -273
- package/src/islands/component-analysis.ts +213 -213
- package/src/islands/css-utils.ts +565 -565
- package/src/islands/discovery/index.ts +80 -80
- package/src/islands/discovery/registry.ts +340 -340
- package/src/islands/discovery/resolver.ts +477 -477
- package/src/islands/discovery/scanner.ts +386 -386
- package/src/islands/discovery/types.ts +117 -117
- package/src/islands/discovery/validator.ts +544 -544
- package/src/islands/discovery/watcher.ts +368 -368
- package/src/islands/framework-detection.ts +428 -428
- package/src/islands/integration-loader.ts +490 -490
- package/src/islands/island.tsx +565 -565
- package/src/islands/render-cache.ts +550 -550
- package/src/islands/types.ts +80 -80
- package/src/islands/universal-css-collector.ts +157 -157
- package/src/islands/universal-head-collector.ts +137 -137
- package/src/layout-system.d.ts +592 -592
- package/src/layout-system.ts +218 -218
- package/src/middleware/discovery.ts +268 -268
- package/src/middleware/executor.ts +315 -315
- package/src/middleware/index.ts +76 -76
- package/src/middleware/types.ts +99 -99
- package/src/nitro/build-config.ts +575 -575
- package/src/nitro/config.ts +483 -483
- package/src/nitro/error-handler.ts +636 -636
- package/src/nitro/index.ts +173 -173
- package/src/nitro/island-manifest.ts +584 -584
- package/src/nitro/middleware-adapter.ts +260 -260
- package/src/nitro/renderer.ts +1471 -1471
- package/src/nitro/route-discovery.ts +439 -439
- package/src/nitro/types.ts +321 -321
- package/src/render/collect-css.ts +198 -198
- package/src/render/error-pages.ts +79 -79
- package/src/render/isolated-ssr-renderer.ts +654 -654
- package/src/render/ssr.ts +1030 -1030
- package/src/schemas/api.ts +30 -30
- package/src/schemas/core.ts +64 -64
- package/src/schemas/index.ts +212 -212
- package/src/schemas/layout.ts +279 -279
- package/src/schemas/routing/index.ts +38 -38
- package/src/schemas/routing.ts +376 -376
- package/src/types/as-island.ts +20 -20
- package/src/types/image.d.ts +106 -106
- package/src/types/index.d.ts +22 -22
- package/src/types/island-jsx.d.ts +33 -33
- package/src/types/island-prop.d.ts +20 -20
- package/src/types/layout.ts +285 -285
- package/src/types/mdx.d.ts +6 -6
- package/src/types/routing.ts +555 -555
- package/src/types/types.ts +5 -5
- package/src/types/urlpattern.d.ts +49 -49
- package/src/types/vite-env.d.ts +11 -11
- package/src/utils/dev-logger.ts +299 -299
- package/src/utils/fs.ts +151 -151
- package/src/vite-plugin/auto-discover.ts +551 -551
- package/src/vite-plugin/config.ts +266 -266
- package/src/vite-plugin/errors.ts +127 -127
- package/src/vite-plugin/image-optimization.ts +156 -156
- package/src/vite-plugin/integration-activator.ts +126 -126
- package/src/vite-plugin/island-sidecar-plugin.ts +176 -176
- package/src/vite-plugin/module-discovery.ts +189 -189
- package/src/vite-plugin/nitro-integration.ts +1354 -1354
- package/src/vite-plugin/plugin.ts +403 -409
- package/src/vite-plugin/types.ts +327 -327
- package/src/vite-plugin/validation.ts +228 -228
- package/src/client/adapters/index.js +0 -12
- package/src/client/adapters/lit-adapter.js +0 -467
- package/src/client/adapters/lit-adapter.ts +0 -654
- package/src/client/adapters/preact-adapter.js +0 -223
- package/src/client/adapters/preact-adapter.ts +0 -331
- package/src/client/adapters/qwik-adapter.js +0 -259
- package/src/client/adapters/qwik-adapter.ts +0 -345
- package/src/client/adapters/react-adapter.js +0 -220
- package/src/client/adapters/react-adapter.ts +0 -353
- package/src/client/adapters/solid-adapter.js +0 -295
- package/src/client/adapters/solid-adapter.ts +0 -451
- package/src/client/adapters/svelte-adapter.js +0 -368
- package/src/client/adapters/svelte-adapter.ts +0 -524
- package/src/client/adapters/vue-adapter.js +0 -278
- package/src/client/adapters/vue-adapter.ts +0 -467
- package/src/client/components.js +0 -23
- package/src/client/css-hmr-handler.js +0 -263
- package/src/client/framework-adapter.js +0 -283
- package/src/client/hmr-coordinator.js +0 -274
|
@@ -1,104 +1,104 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
import { readFile, writeFile, unlink, stat } from "node:fs/promises";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Supported compound extensions for island files, ordered longest-first
|
|
6
|
-
* so that `.solid.tsx` matches before `.tsx`.
|
|
7
|
-
*
|
|
8
|
-
* Sidecar naming strategy per extension type:
|
|
9
|
-
* - `.vue`, `.svelte` → `Name.d.vue.ts`, `Name.d.svelte.ts`
|
|
10
|
-
* (foreign extensions — allowArbitraryExtensions picks these up)
|
|
11
|
-
* - `.lit.ts` → `Name.lit.d.ts`
|
|
12
|
-
* (TypeScript declaration file lookup: for `Name.lit.ts` TS looks for `Name.lit.d.ts`)
|
|
13
|
-
* - `.solid.tsx` → `Name.solid.d.ts`
|
|
14
|
-
* (TypeScript declaration file lookup: for `Name.solid.tsx` TS looks for `Name.solid.d.ts`)
|
|
15
|
-
* - `.qwik.tsx` → `Name.qwik.d.ts`
|
|
16
|
-
* (same as solid.tsx)
|
|
17
|
-
*/
|
|
18
|
-
const COMPOUND_EXTENSIONS = [".solid.tsx", ".qwik.tsx", ".lit.ts", ".svelte", ".vue"];
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Extensions where TypeScript's native `.d.ts` declaration lookup applies.
|
|
22
|
-
* For `Name.lit.ts`, TS looks for `Name.lit.d.ts`.
|
|
23
|
-
* For `Name.solid.tsx` / `Name.qwik.tsx`, TS looks for `Name.solid.d.ts` / `Name.qwik.d.ts`.
|
|
24
|
-
*/
|
|
25
|
-
const NATIVE_DECL_EXTENSIONS = new Set([".lit.ts", ".solid.tsx", ".qwik.tsx"]);
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Compute the sidecar declaration file path for a given island file path.
|
|
29
|
-
*
|
|
30
|
-
* For simple extensions like `.vue`, the sidecar is `Name.d.vue.ts`.
|
|
31
|
-
* For compound extensions like `.lit.ts`, the sidecar is `Name.d.lit.ts`.
|
|
32
|
-
* For `.solid.tsx`, the sidecar is `Name.d.solid.tsx.ts`.
|
|
33
|
-
*/
|
|
34
|
-
export function getSidecarPath(islandFilePath: string): string {
|
|
35
|
-
const dir = path.dirname(islandFilePath);
|
|
36
|
-
const basename = path.basename(islandFilePath);
|
|
37
|
-
|
|
38
|
-
for (const ext of COMPOUND_EXTENSIONS) {
|
|
39
|
-
if (basename.endsWith(ext)) {
|
|
40
|
-
const name = basename.slice(0, -ext.length);
|
|
41
|
-
if (NATIVE_DECL_EXTENSIONS.has(ext)) {
|
|
42
|
-
// For .lit.ts → Name.lit.d.ts (TS declaration file lookup)
|
|
43
|
-
// For .solid.tsx / .qwik.tsx → Name.solid.d.ts / Name.qwik.d.ts
|
|
44
|
-
const innerExt = ext.endsWith(".ts") ? ext.slice(0, -3) : ext.slice(0, -4); // strip .ts or .tsx
|
|
45
|
-
return path.join(dir, `${name}${innerExt}.d.ts`);
|
|
46
|
-
}
|
|
47
|
-
// For .vue/.svelte → Name.d.vue.ts / Name.d.svelte.ts (allowArbitraryExtensions)
|
|
48
|
-
return path.join(dir, `${name}.d${ext}.ts`);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// Fallback
|
|
53
|
-
const ext = path.extname(islandFilePath);
|
|
54
|
-
const name = basename.slice(0, -ext.length);
|
|
55
|
-
return path.join(dir, `${name}.d${ext}.ts`);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Check if a sidecar file is up-to-date by comparing mtimes.
|
|
60
|
-
* Returns `true` if the sidecar exists and is newer than the source file.
|
|
61
|
-
*/
|
|
62
|
-
export async function isSidecarFresh(sourcePath: string, sidecarPath: string): Promise<boolean> {
|
|
63
|
-
try {
|
|
64
|
-
const [sourceStat, sidecarStat] = await Promise.all([
|
|
65
|
-
stat(sourcePath),
|
|
66
|
-
stat(sidecarPath),
|
|
67
|
-
]);
|
|
68
|
-
return sidecarStat.mtimeMs >= sourceStat.mtimeMs;
|
|
69
|
-
} catch {
|
|
70
|
-
return false;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Write sidecar content only if it differs from the existing file.
|
|
76
|
-
* Returns `true` if a write was performed, `false` if content was already up-to-date.
|
|
77
|
-
*/
|
|
78
|
-
export async function writeSidecarIfChanged(sidecarPath: string, content: string): Promise<boolean> {
|
|
79
|
-
try {
|
|
80
|
-
const existing = await readFile(sidecarPath, "utf-8");
|
|
81
|
-
if (existing === content) {
|
|
82
|
-
return false;
|
|
83
|
-
}
|
|
84
|
-
} catch {
|
|
85
|
-
// File doesn't exist yet — that's fine, we'll write it
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
await writeFile(sidecarPath, content, "utf-8");
|
|
89
|
-
return true;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Delete a sidecar file if it exists.
|
|
94
|
-
* Returns `true` if a file was deleted, `false` if it didn't exist.
|
|
95
|
-
*/
|
|
96
|
-
export async function deleteSidecar(sidecarPath: string): Promise<boolean> {
|
|
97
|
-
try {
|
|
98
|
-
await unlink(sidecarPath);
|
|
99
|
-
return true;
|
|
100
|
-
} catch {
|
|
101
|
-
return false;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { readFile, writeFile, unlink, stat } from "node:fs/promises";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Supported compound extensions for island files, ordered longest-first
|
|
6
|
+
* so that `.solid.tsx` matches before `.tsx`.
|
|
7
|
+
*
|
|
8
|
+
* Sidecar naming strategy per extension type:
|
|
9
|
+
* - `.vue`, `.svelte` → `Name.d.vue.ts`, `Name.d.svelte.ts`
|
|
10
|
+
* (foreign extensions — allowArbitraryExtensions picks these up)
|
|
11
|
+
* - `.lit.ts` → `Name.lit.d.ts`
|
|
12
|
+
* (TypeScript declaration file lookup: for `Name.lit.ts` TS looks for `Name.lit.d.ts`)
|
|
13
|
+
* - `.solid.tsx` → `Name.solid.d.ts`
|
|
14
|
+
* (TypeScript declaration file lookup: for `Name.solid.tsx` TS looks for `Name.solid.d.ts`)
|
|
15
|
+
* - `.qwik.tsx` → `Name.qwik.d.ts`
|
|
16
|
+
* (same as solid.tsx)
|
|
17
|
+
*/
|
|
18
|
+
const COMPOUND_EXTENSIONS = [".solid.tsx", ".qwik.tsx", ".lit.ts", ".svelte", ".vue"];
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Extensions where TypeScript's native `.d.ts` declaration lookup applies.
|
|
22
|
+
* For `Name.lit.ts`, TS looks for `Name.lit.d.ts`.
|
|
23
|
+
* For `Name.solid.tsx` / `Name.qwik.tsx`, TS looks for `Name.solid.d.ts` / `Name.qwik.d.ts`.
|
|
24
|
+
*/
|
|
25
|
+
const NATIVE_DECL_EXTENSIONS = new Set([".lit.ts", ".solid.tsx", ".qwik.tsx"]);
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Compute the sidecar declaration file path for a given island file path.
|
|
29
|
+
*
|
|
30
|
+
* For simple extensions like `.vue`, the sidecar is `Name.d.vue.ts`.
|
|
31
|
+
* For compound extensions like `.lit.ts`, the sidecar is `Name.d.lit.ts`.
|
|
32
|
+
* For `.solid.tsx`, the sidecar is `Name.d.solid.tsx.ts`.
|
|
33
|
+
*/
|
|
34
|
+
export function getSidecarPath(islandFilePath: string): string {
|
|
35
|
+
const dir = path.dirname(islandFilePath);
|
|
36
|
+
const basename = path.basename(islandFilePath);
|
|
37
|
+
|
|
38
|
+
for (const ext of COMPOUND_EXTENSIONS) {
|
|
39
|
+
if (basename.endsWith(ext)) {
|
|
40
|
+
const name = basename.slice(0, -ext.length);
|
|
41
|
+
if (NATIVE_DECL_EXTENSIONS.has(ext)) {
|
|
42
|
+
// For .lit.ts → Name.lit.d.ts (TS declaration file lookup)
|
|
43
|
+
// For .solid.tsx / .qwik.tsx → Name.solid.d.ts / Name.qwik.d.ts
|
|
44
|
+
const innerExt = ext.endsWith(".ts") ? ext.slice(0, -3) : ext.slice(0, -4); // strip .ts or .tsx
|
|
45
|
+
return path.join(dir, `${name}${innerExt}.d.ts`);
|
|
46
|
+
}
|
|
47
|
+
// For .vue/.svelte → Name.d.vue.ts / Name.d.svelte.ts (allowArbitraryExtensions)
|
|
48
|
+
return path.join(dir, `${name}.d${ext}.ts`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Fallback
|
|
53
|
+
const ext = path.extname(islandFilePath);
|
|
54
|
+
const name = basename.slice(0, -ext.length);
|
|
55
|
+
return path.join(dir, `${name}.d${ext}.ts`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Check if a sidecar file is up-to-date by comparing mtimes.
|
|
60
|
+
* Returns `true` if the sidecar exists and is newer than the source file.
|
|
61
|
+
*/
|
|
62
|
+
export async function isSidecarFresh(sourcePath: string, sidecarPath: string): Promise<boolean> {
|
|
63
|
+
try {
|
|
64
|
+
const [sourceStat, sidecarStat] = await Promise.all([
|
|
65
|
+
stat(sourcePath),
|
|
66
|
+
stat(sidecarPath),
|
|
67
|
+
]);
|
|
68
|
+
return sidecarStat.mtimeMs >= sourceStat.mtimeMs;
|
|
69
|
+
} catch {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Write sidecar content only if it differs from the existing file.
|
|
76
|
+
* Returns `true` if a write was performed, `false` if content was already up-to-date.
|
|
77
|
+
*/
|
|
78
|
+
export async function writeSidecarIfChanged(sidecarPath: string, content: string): Promise<boolean> {
|
|
79
|
+
try {
|
|
80
|
+
const existing = await readFile(sidecarPath, "utf-8");
|
|
81
|
+
if (existing === content) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
} catch {
|
|
85
|
+
// File doesn't exist yet — that's fine, we'll write it
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
await writeFile(sidecarPath, content, "utf-8");
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Delete a sidecar file if it exists.
|
|
94
|
+
* Returns `true` if a file was deleted, `false` if it didn't exist.
|
|
95
|
+
*/
|
|
96
|
+
export async function deleteSidecar(sidecarPath: string): Promise<boolean> {
|
|
97
|
+
try {
|
|
98
|
+
await unlink(sidecarPath);
|
|
99
|
+
return true;
|
|
100
|
+
} catch {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
/** Header comment placed at the top of every generated sidecar file. */
|
|
2
|
-
export const SIDECAR_HEADER = "// Auto-generated by avalon — do not edit";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Render the full content of a sidecar declaration file.
|
|
6
|
-
*
|
|
7
|
-
* Pure function: takes a props type string (e.g. `"{ count: number }"` or
|
|
8
|
-
* `"Record<string, unknown>"`) and returns the complete file content.
|
|
9
|
-
*
|
|
10
|
-
* The `island` prop is always included so the component can be used with
|
|
11
|
-
* `<Component island={{ condition: 'on:interaction' }} />` in page files.
|
|
12
|
-
* The Vite page-island-transform strips it at build time.
|
|
13
|
-
*
|
|
14
|
-
* The output follows this exact template:
|
|
15
|
-
* ```
|
|
16
|
-
* // Auto-generated by avalon — do not edit
|
|
17
|
-
* import type { ComponentType } from 'preact';
|
|
18
|
-
* import type { IslandDirective } from '@useavalon/avalon';
|
|
19
|
-
* declare const component: ComponentType<PROPS & { island?: IslandDirective }>;
|
|
20
|
-
* export default component;
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
export function renderSidecarContent(propsType: string): string {
|
|
24
|
-
return `${SIDECAR_HEADER}
|
|
25
|
-
import type { ComponentType } from 'preact';
|
|
26
|
-
import type { IslandDirective } from '@useavalon/avalon';
|
|
27
|
-
declare const component: ComponentType<${propsType} & { island?: IslandDirective }>;
|
|
28
|
-
export default component;
|
|
29
|
-
`;
|
|
30
|
-
}
|
|
1
|
+
/** Header comment placed at the top of every generated sidecar file. */
|
|
2
|
+
export const SIDECAR_HEADER = "// Auto-generated by avalon — do not edit";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Render the full content of a sidecar declaration file.
|
|
6
|
+
*
|
|
7
|
+
* Pure function: takes a props type string (e.g. `"{ count: number }"` or
|
|
8
|
+
* `"Record<string, unknown>"`) and returns the complete file content.
|
|
9
|
+
*
|
|
10
|
+
* The `island` prop is always included so the component can be used with
|
|
11
|
+
* `<Component island={{ condition: 'on:interaction' }} />` in page files.
|
|
12
|
+
* The Vite page-island-transform strips it at build time.
|
|
13
|
+
*
|
|
14
|
+
* The output follows this exact template:
|
|
15
|
+
* ```
|
|
16
|
+
* // Auto-generated by avalon — do not edit
|
|
17
|
+
* import type { ComponentType } from 'preact';
|
|
18
|
+
* import type { IslandDirective } from '@useavalon/avalon';
|
|
19
|
+
* declare const component: ComponentType<PROPS & { island?: IslandDirective }>;
|
|
20
|
+
* export default component;
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export function renderSidecarContent(propsType: string): string {
|
|
24
|
+
return `${SIDECAR_HEADER}
|
|
25
|
+
import type { ComponentType } from 'preact';
|
|
26
|
+
import type { IslandDirective } from '@useavalon/avalon';
|
|
27
|
+
declare const component: ComponentType<${propsType} & { island?: IslandDirective }>;
|
|
28
|
+
export default component;
|
|
29
|
+
`;
|
|
30
|
+
}
|
|
@@ -1,13 +1,21 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Framework HMR Adapters
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Framework HMR Adapters
|
|
3
|
+
*
|
|
4
|
+
* HMR adapters have been moved to their respective integration packages:
|
|
5
|
+
* - @useavalon/react/client/hmr
|
|
6
|
+
* - @useavalon/preact/client/hmr
|
|
7
|
+
* - @useavalon/vue/client/hmr
|
|
8
|
+
* - @useavalon/svelte/client/hmr
|
|
9
|
+
* - @useavalon/solid/client/hmr
|
|
10
|
+
* - @useavalon/lit/client/hmr
|
|
11
|
+
* - @useavalon/qwik/client/hmr
|
|
12
|
+
*
|
|
13
|
+
* This barrel re-exports from the base framework adapter for backward compatibility.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
export {
|
|
17
|
+
BaseFrameworkAdapter,
|
|
18
|
+
AdapterRegistry,
|
|
19
|
+
type FrameworkHMRAdapter,
|
|
20
|
+
type StateSnapshot,
|
|
21
|
+
} from '../framework-adapter.ts';
|
package/src/client/components.ts
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Client-safe component exports for use in island components.
|
|
3
|
-
*
|
|
4
|
-
* Import from '@useavalon/avalon/client' instead of '@useavalon/avalon' when
|
|
5
|
-
* you need framework components inside islands. The main entry point
|
|
6
|
-
* re-exports server-only code (nitro, h3, vite plugins) that can't
|
|
7
|
-
* be bundled for the browser.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
// Persistent islands
|
|
11
|
-
export { PersistentIsland } from '../components/PersistentIsland.tsx';
|
|
12
|
-
export {
|
|
13
|
-
usePersistentIslandContext,
|
|
14
|
-
PersistentIslandProvider,
|
|
15
|
-
createPersistentIslandContext,
|
|
16
|
-
} from '../core/islands/persistent-island-context.tsx';
|
|
17
|
-
export { usePersistentState } from '../core/islands/use-persistent-state.ts';
|
|
18
|
-
export { IslandPersistence, defaultIslandPersistence } from '../core/islands/island-persistence.ts';
|
|
19
|
-
export { IslandStateSerializer } from '../core/islands/island-state-serializer.ts';
|
|
20
|
-
|
|
21
|
-
// Error boundaries
|
|
22
|
-
export { IslandErrorBoundary, withIslandErrorBoundary } from '../components/IslandErrorBoundary.tsx';
|
|
23
|
-
export { LayoutErrorBoundary } from '../components/LayoutErrorBoundary.tsx';
|
|
24
|
-
export { LayoutDataErrorBoundary } from '../components/LayoutDataErrorBoundary.tsx';
|
|
25
|
-
export { StreamingErrorBoundary, withStreamingErrorBoundary } from '../components/StreamingErrorBoundary.tsx';
|
|
26
|
-
|
|
27
|
-
// Streaming
|
|
28
|
-
export { StreamingLayout, StreamingSuspense, withStreaming, useStreamingState } from '../components/StreamingLayout.tsx';
|
|
29
|
-
|
|
30
|
-
// Image optimization
|
|
31
|
-
export { Image } from '../components/Image.tsx';
|
|
32
|
-
export type { ImageProps } from '../components/Image.tsx';
|
|
33
|
-
|
|
34
|
-
// Types
|
|
35
|
-
export type { IslandState } from '../schemas/layout.ts';
|
|
1
|
+
/**
|
|
2
|
+
* Client-safe component exports for use in island components.
|
|
3
|
+
*
|
|
4
|
+
* Import from '@useavalon/avalon/client' instead of '@useavalon/avalon' when
|
|
5
|
+
* you need framework components inside islands. The main entry point
|
|
6
|
+
* re-exports server-only code (nitro, h3, vite plugins) that can't
|
|
7
|
+
* be bundled for the browser.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
// Persistent islands
|
|
11
|
+
export { PersistentIsland } from '../components/PersistentIsland.tsx';
|
|
12
|
+
export {
|
|
13
|
+
usePersistentIslandContext,
|
|
14
|
+
PersistentIslandProvider,
|
|
15
|
+
createPersistentIslandContext,
|
|
16
|
+
} from '../core/islands/persistent-island-context.tsx';
|
|
17
|
+
export { usePersistentState } from '../core/islands/use-persistent-state.ts';
|
|
18
|
+
export { IslandPersistence, defaultIslandPersistence } from '../core/islands/island-persistence.ts';
|
|
19
|
+
export { IslandStateSerializer } from '../core/islands/island-state-serializer.ts';
|
|
20
|
+
|
|
21
|
+
// Error boundaries
|
|
22
|
+
export { IslandErrorBoundary, withIslandErrorBoundary } from '../components/IslandErrorBoundary.tsx';
|
|
23
|
+
export { LayoutErrorBoundary } from '../components/LayoutErrorBoundary.tsx';
|
|
24
|
+
export { LayoutDataErrorBoundary } from '../components/LayoutDataErrorBoundary.tsx';
|
|
25
|
+
export { StreamingErrorBoundary, withStreamingErrorBoundary } from '../components/StreamingErrorBoundary.tsx';
|
|
26
|
+
|
|
27
|
+
// Streaming
|
|
28
|
+
export { StreamingLayout, StreamingSuspense, withStreaming, useStreamingState } from '../components/StreamingLayout.tsx';
|
|
29
|
+
|
|
30
|
+
// Image optimization
|
|
31
|
+
export { Image } from '../components/Image.tsx';
|
|
32
|
+
export type { ImageProps } from '../components/Image.tsx';
|
|
33
|
+
|
|
34
|
+
// Types
|
|
35
|
+
export type { IslandState } from '../schemas/layout.ts';
|