@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,117 +1,117 @@
|
|
|
1
|
-
import type { Plugin } from 'vite';
|
|
2
|
-
import { resolve } from 'node:path';
|
|
3
|
-
import { readdir, readFile } from 'node:fs/promises';
|
|
4
|
-
|
|
5
|
-
export interface IntegrationDetectionResult {
|
|
6
|
-
preact: boolean;
|
|
7
|
-
vue: boolean;
|
|
8
|
-
solid: boolean;
|
|
9
|
-
svelte: boolean;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Vite plugin to detect which framework integrations are used in the project
|
|
14
|
-
* This enables tree-shaking of unused integrations
|
|
15
|
-
*/
|
|
16
|
-
export function integrationDetectionPlugin(): Plugin {
|
|
17
|
-
let detectedIntegrations: IntegrationDetectionResult | null = null;
|
|
18
|
-
|
|
19
|
-
return {
|
|
20
|
-
name: 'avalon:integration-detection',
|
|
21
|
-
enforce: 'pre',
|
|
22
|
-
|
|
23
|
-
async buildStart() {
|
|
24
|
-
// Detect integrations during build start
|
|
25
|
-
detectedIntegrations = await detectUsedIntegrations();
|
|
26
|
-
},
|
|
27
|
-
|
|
28
|
-
resolveId(id: string) {
|
|
29
|
-
// Handle integration imports
|
|
30
|
-
if (id.startsWith('@useavalon/integration-')) {
|
|
31
|
-
const framework = id.replace('@useavalon/integration-', '').split('/')[0];
|
|
32
|
-
|
|
33
|
-
// Check if this integration is used
|
|
34
|
-
if (detectedIntegrations && !detectedIntegrations[framework as keyof IntegrationDetectionResult]) {
|
|
35
|
-
console.warn(`⚠️ Integration ${framework} is imported but not detected in project files`);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// Resolve to the actual integration path
|
|
39
|
-
const integrationPath = resolve(process.cwd(), `packages/integrations/${framework}/mod.ts`);
|
|
40
|
-
return integrationPath;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return null;
|
|
44
|
-
},
|
|
45
|
-
|
|
46
|
-
transform(_code: string, id: string) {
|
|
47
|
-
// Track integration usage in island files
|
|
48
|
-
if (id.includes('/islands/') || id.includes('/components/')) {
|
|
49
|
-
// This helps with dynamic detection during development
|
|
50
|
-
return null;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return null;
|
|
54
|
-
},
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Detect which framework integrations are actually used in the project
|
|
60
|
-
*/
|
|
61
|
-
export async function detectUsedIntegrations() {
|
|
62
|
-
const result: IntegrationDetectionResult = {
|
|
63
|
-
preact: false,
|
|
64
|
-
vue: false,
|
|
65
|
-
solid: false,
|
|
66
|
-
svelte: false,
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
const searchDirs = ['islands', 'components', 'src/islands', 'src/components'];
|
|
70
|
-
const cwd = process.cwd();
|
|
71
|
-
|
|
72
|
-
for (const dir of searchDirs) {
|
|
73
|
-
try {
|
|
74
|
-
const dirPath = resolve(cwd, dir);
|
|
75
|
-
const entries = await readdir(dirPath, { withFileTypes: true });
|
|
76
|
-
for (const entry of entries) {
|
|
77
|
-
if (!entry.isFile()) continue;
|
|
78
|
-
|
|
79
|
-
// Check file extensions
|
|
80
|
-
if (entry.name.endsWith('.vue')) {
|
|
81
|
-
result.vue = true;
|
|
82
|
-
} else if (entry.name.endsWith('.svelte')) {
|
|
83
|
-
result.svelte = true;
|
|
84
|
-
} else if (entry.name.endsWith('.tsx') || entry.name.endsWith('.jsx')) {
|
|
85
|
-
// Read file content to detect framework
|
|
86
|
-
const filePath = resolve(dirPath, entry.name);
|
|
87
|
-
const content = await readFile(filePath, 'utf-8');
|
|
88
|
-
|
|
89
|
-
if (content.includes('solid-js')) {
|
|
90
|
-
result.solid = true;
|
|
91
|
-
} else {
|
|
92
|
-
// Default to Preact for JSX/TSX files
|
|
93
|
-
result.preact = true;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
} catch {
|
|
98
|
-
// Directory doesn't exist, continue
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
return result;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Get list of integration packages that should be included in the build
|
|
107
|
-
*/
|
|
108
|
-
export function getRequiredIntegrations(detected: IntegrationDetectionResult) {
|
|
109
|
-
const integrations: string[] = [];
|
|
110
|
-
|
|
111
|
-
if (detected.preact) integrations.push('preact');
|
|
112
|
-
if (detected.vue) integrations.push('vue');
|
|
113
|
-
if (detected.solid) integrations.push('solid');
|
|
114
|
-
if (detected.svelte) integrations.push('svelte');
|
|
115
|
-
|
|
116
|
-
return integrations;
|
|
117
|
-
}
|
|
1
|
+
import type { Plugin } from 'vite';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { readdir, readFile } from 'node:fs/promises';
|
|
4
|
+
|
|
5
|
+
export interface IntegrationDetectionResult {
|
|
6
|
+
preact: boolean;
|
|
7
|
+
vue: boolean;
|
|
8
|
+
solid: boolean;
|
|
9
|
+
svelte: boolean;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Vite plugin to detect which framework integrations are used in the project
|
|
14
|
+
* This enables tree-shaking of unused integrations
|
|
15
|
+
*/
|
|
16
|
+
export function integrationDetectionPlugin(): Plugin {
|
|
17
|
+
let detectedIntegrations: IntegrationDetectionResult | null = null;
|
|
18
|
+
|
|
19
|
+
return {
|
|
20
|
+
name: 'avalon:integration-detection',
|
|
21
|
+
enforce: 'pre',
|
|
22
|
+
|
|
23
|
+
async buildStart() {
|
|
24
|
+
// Detect integrations during build start
|
|
25
|
+
detectedIntegrations = await detectUsedIntegrations();
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
resolveId(id: string) {
|
|
29
|
+
// Handle integration imports
|
|
30
|
+
if (id.startsWith('@useavalon/integration-')) {
|
|
31
|
+
const framework = id.replace('@useavalon/integration-', '').split('/')[0];
|
|
32
|
+
|
|
33
|
+
// Check if this integration is used
|
|
34
|
+
if (detectedIntegrations && !detectedIntegrations[framework as keyof IntegrationDetectionResult]) {
|
|
35
|
+
console.warn(`⚠️ Integration ${framework} is imported but not detected in project files`);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Resolve to the actual integration path
|
|
39
|
+
const integrationPath = resolve(process.cwd(), `packages/integrations/${framework}/mod.ts`);
|
|
40
|
+
return integrationPath;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return null;
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
transform(_code: string, id: string) {
|
|
47
|
+
// Track integration usage in island files
|
|
48
|
+
if (id.includes('/islands/') || id.includes('/components/')) {
|
|
49
|
+
// This helps with dynamic detection during development
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return null;
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Detect which framework integrations are actually used in the project
|
|
60
|
+
*/
|
|
61
|
+
export async function detectUsedIntegrations() {
|
|
62
|
+
const result: IntegrationDetectionResult = {
|
|
63
|
+
preact: false,
|
|
64
|
+
vue: false,
|
|
65
|
+
solid: false,
|
|
66
|
+
svelte: false,
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const searchDirs = ['islands', 'components', 'src/islands', 'src/components'];
|
|
70
|
+
const cwd = process.cwd();
|
|
71
|
+
|
|
72
|
+
for (const dir of searchDirs) {
|
|
73
|
+
try {
|
|
74
|
+
const dirPath = resolve(cwd, dir);
|
|
75
|
+
const entries = await readdir(dirPath, { withFileTypes: true });
|
|
76
|
+
for (const entry of entries) {
|
|
77
|
+
if (!entry.isFile()) continue;
|
|
78
|
+
|
|
79
|
+
// Check file extensions
|
|
80
|
+
if (entry.name.endsWith('.vue')) {
|
|
81
|
+
result.vue = true;
|
|
82
|
+
} else if (entry.name.endsWith('.svelte')) {
|
|
83
|
+
result.svelte = true;
|
|
84
|
+
} else if (entry.name.endsWith('.tsx') || entry.name.endsWith('.jsx')) {
|
|
85
|
+
// Read file content to detect framework
|
|
86
|
+
const filePath = resolve(dirPath, entry.name);
|
|
87
|
+
const content = await readFile(filePath, 'utf-8');
|
|
88
|
+
|
|
89
|
+
if (content.includes('solid-js')) {
|
|
90
|
+
result.solid = true;
|
|
91
|
+
} else {
|
|
92
|
+
// Default to Preact for JSX/TSX files
|
|
93
|
+
result.preact = true;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
} catch {
|
|
98
|
+
// Directory doesn't exist, continue
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Get list of integration packages that should be included in the build
|
|
107
|
+
*/
|
|
108
|
+
export function getRequiredIntegrations(detected: IntegrationDetectionResult) {
|
|
109
|
+
const integrations: string[] = [];
|
|
110
|
+
|
|
111
|
+
if (detected.preact) integrations.push('preact');
|
|
112
|
+
if (detected.vue) integrations.push('vue');
|
|
113
|
+
if (detected.solid) integrations.push('solid');
|
|
114
|
+
if (detected.svelte) integrations.push('svelte');
|
|
115
|
+
|
|
116
|
+
return integrations;
|
|
117
|
+
}
|
|
@@ -1,90 +1,90 @@
|
|
|
1
|
-
import type { Plugin } from 'vite';
|
|
2
|
-
import { resolve } from 'node:path';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Vite plugin to resolve integration package imports
|
|
6
|
-
* Handles both @useavalon/integration-* imports and relative imports within integrations
|
|
7
|
-
*/
|
|
8
|
-
export function integrationResolverPlugin(): Plugin {
|
|
9
|
-
const cwd = process.cwd();
|
|
10
|
-
|
|
11
|
-
return {
|
|
12
|
-
name: 'avalon:integration-resolver',
|
|
13
|
-
enforce: 'pre',
|
|
14
|
-
|
|
15
|
-
resolveId(id: string, importer?: string) {
|
|
16
|
-
// Handle @useavalon/integration-* imports
|
|
17
|
-
if (id.startsWith('@useavalon/integration-')) {
|
|
18
|
-
const parts = id.split('/');
|
|
19
|
-
const framework = parts[1].replace('integration-', '');
|
|
20
|
-
const subpath = parts.slice(2).join('/');
|
|
21
|
-
|
|
22
|
-
// Map to actual file paths
|
|
23
|
-
if (!subpath || subpath === '') {
|
|
24
|
-
// Main export: @useavalon/integration-preact -> packages/integrations/preact/mod.ts
|
|
25
|
-
return resolve(cwd, `packages/integrations/${framework}/mod.ts`);
|
|
26
|
-
} else if (subpath === 'server') {
|
|
27
|
-
// Server export: @useavalon/integration-preact/server -> packages/integrations/preact/server/renderer.ts
|
|
28
|
-
return resolve(cwd, `packages/integrations/${framework}/server/renderer.ts`);
|
|
29
|
-
} else if (subpath === 'client') {
|
|
30
|
-
// Client export: @useavalon/integration-preact/client -> packages/integrations/preact/client/index.ts
|
|
31
|
-
return resolve(cwd, `packages/integrations/${framework}/client/index.ts`);
|
|
32
|
-
} else if (subpath === 'types') {
|
|
33
|
-
// Types export: @useavalon/integration-preact/types -> packages/integrations/preact/types.ts
|
|
34
|
-
return resolve(cwd, `packages/integrations/${framework}/types.ts`);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// Handle @useavalon/shared imports (used by integrations)
|
|
39
|
-
if (id === '@useavalon/shared' || id === '@useavalon/shared/types') {
|
|
40
|
-
return resolve(cwd, 'packages/integrations/shared/types.ts');
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// Handle relative imports within integrations
|
|
44
|
-
if (importer && importer.includes('/integrations/')) {
|
|
45
|
-
if (id.startsWith('../shared/')) {
|
|
46
|
-
const sharedPath = id.replace('../shared/', '');
|
|
47
|
-
return resolve(cwd, `packages/integrations/shared/${sharedPath}`);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
return null;
|
|
52
|
-
},
|
|
53
|
-
|
|
54
|
-
load(id: string) {
|
|
55
|
-
// Handle virtual modules if needed
|
|
56
|
-
return null;
|
|
57
|
-
},
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Create alias configuration for integration imports
|
|
63
|
-
*/
|
|
64
|
-
export function createIntegrationAliases(): Record<string, string> {
|
|
65
|
-
const cwd = process.cwd();
|
|
66
|
-
|
|
67
|
-
return {
|
|
68
|
-
'@useavalon/integration-preact': resolve(cwd, 'packages/integrations/preact/mod.ts'),
|
|
69
|
-
'@useavalon/integration-preact/server': resolve(cwd, 'packages/integrations/preact/server/renderer.ts'),
|
|
70
|
-
'@useavalon/integration-preact/client': resolve(cwd, 'packages/integrations/preact/client/index.ts'),
|
|
71
|
-
'@useavalon/integration-vue': resolve(cwd, 'packages/integrations/vue/mod.ts'),
|
|
72
|
-
'@useavalon/integration-vue/server': resolve(cwd, 'packages/integrations/vue/server/renderer.ts'),
|
|
73
|
-
'@useavalon/integration-vue/client': resolve(cwd, 'packages/integrations/vue/client/index.ts'),
|
|
74
|
-
'@useavalon/integration-solid': resolve(cwd, 'packages/integrations/solid/mod.ts'),
|
|
75
|
-
'@useavalon/integration-solid/server': resolve(cwd, 'packages/integrations/solid/server/renderer.ts'),
|
|
76
|
-
'@useavalon/integration-solid/client': resolve(cwd, 'packages/integrations/solid/client/index.ts'),
|
|
77
|
-
'@useavalon/integration-svelte': resolve(cwd, 'packages/integrations/svelte/mod.ts'),
|
|
78
|
-
'@useavalon/integration-svelte/server': resolve(cwd, 'packages/integrations/svelte/server/renderer.ts'),
|
|
79
|
-
'@useavalon/integration-svelte/client': resolve(cwd, 'packages/integrations/svelte/client/index.ts'),
|
|
80
|
-
'@useavalon/integration-react': resolve(cwd, 'packages/integrations/react/mod.ts'),
|
|
81
|
-
'@useavalon/integration-react/server': resolve(cwd, 'packages/integrations/react/server/renderer.ts'),
|
|
82
|
-
'@useavalon/integration-react/client': resolve(cwd, 'packages/integrations/react/client/index.ts'),
|
|
83
|
-
'@useavalon/integration-react/types': resolve(cwd, 'packages/integrations/react/types.ts'),
|
|
84
|
-
'@useavalon/integration-lit': resolve(cwd, 'packages/integrations/lit/mod.ts'),
|
|
85
|
-
'@useavalon/integration-lit/server': resolve(cwd, 'packages/integrations/lit/server/renderer.ts'),
|
|
86
|
-
'@useavalon/integration-lit/client': resolve(cwd, 'packages/integrations/lit/client/index.ts'),
|
|
87
|
-
'@useavalon/integration-lit/types': resolve(cwd, 'packages/integrations/lit/types.ts'),
|
|
88
|
-
'@useavalon/shared': resolve(cwd, 'packages/integrations/shared/types.ts'),
|
|
89
|
-
};
|
|
90
|
-
}
|
|
1
|
+
import type { Plugin } from 'vite';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Vite plugin to resolve integration package imports
|
|
6
|
+
* Handles both @useavalon/integration-* imports and relative imports within integrations
|
|
7
|
+
*/
|
|
8
|
+
export function integrationResolverPlugin(): Plugin {
|
|
9
|
+
const cwd = process.cwd();
|
|
10
|
+
|
|
11
|
+
return {
|
|
12
|
+
name: 'avalon:integration-resolver',
|
|
13
|
+
enforce: 'pre',
|
|
14
|
+
|
|
15
|
+
resolveId(id: string, importer?: string) {
|
|
16
|
+
// Handle @useavalon/integration-* imports
|
|
17
|
+
if (id.startsWith('@useavalon/integration-')) {
|
|
18
|
+
const parts = id.split('/');
|
|
19
|
+
const framework = parts[1].replace('integration-', '');
|
|
20
|
+
const subpath = parts.slice(2).join('/');
|
|
21
|
+
|
|
22
|
+
// Map to actual file paths
|
|
23
|
+
if (!subpath || subpath === '') {
|
|
24
|
+
// Main export: @useavalon/integration-preact -> packages/integrations/preact/mod.ts
|
|
25
|
+
return resolve(cwd, `packages/integrations/${framework}/mod.ts`);
|
|
26
|
+
} else if (subpath === 'server') {
|
|
27
|
+
// Server export: @useavalon/integration-preact/server -> packages/integrations/preact/server/renderer.ts
|
|
28
|
+
return resolve(cwd, `packages/integrations/${framework}/server/renderer.ts`);
|
|
29
|
+
} else if (subpath === 'client') {
|
|
30
|
+
// Client export: @useavalon/integration-preact/client -> packages/integrations/preact/client/index.ts
|
|
31
|
+
return resolve(cwd, `packages/integrations/${framework}/client/index.ts`);
|
|
32
|
+
} else if (subpath === 'types') {
|
|
33
|
+
// Types export: @useavalon/integration-preact/types -> packages/integrations/preact/types.ts
|
|
34
|
+
return resolve(cwd, `packages/integrations/${framework}/types.ts`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Handle @useavalon/shared imports (used by integrations)
|
|
39
|
+
if (id === '@useavalon/shared' || id === '@useavalon/shared/types') {
|
|
40
|
+
return resolve(cwd, 'packages/integrations/shared/types.ts');
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Handle relative imports within integrations
|
|
44
|
+
if (importer && importer.includes('/integrations/')) {
|
|
45
|
+
if (id.startsWith('../shared/')) {
|
|
46
|
+
const sharedPath = id.replace('../shared/', '');
|
|
47
|
+
return resolve(cwd, `packages/integrations/shared/${sharedPath}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return null;
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
load(id: string) {
|
|
55
|
+
// Handle virtual modules if needed
|
|
56
|
+
return null;
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Create alias configuration for integration imports
|
|
63
|
+
*/
|
|
64
|
+
export function createIntegrationAliases(): Record<string, string> {
|
|
65
|
+
const cwd = process.cwd();
|
|
66
|
+
|
|
67
|
+
return {
|
|
68
|
+
'@useavalon/integration-preact': resolve(cwd, 'packages/integrations/preact/mod.ts'),
|
|
69
|
+
'@useavalon/integration-preact/server': resolve(cwd, 'packages/integrations/preact/server/renderer.ts'),
|
|
70
|
+
'@useavalon/integration-preact/client': resolve(cwd, 'packages/integrations/preact/client/index.ts'),
|
|
71
|
+
'@useavalon/integration-vue': resolve(cwd, 'packages/integrations/vue/mod.ts'),
|
|
72
|
+
'@useavalon/integration-vue/server': resolve(cwd, 'packages/integrations/vue/server/renderer.ts'),
|
|
73
|
+
'@useavalon/integration-vue/client': resolve(cwd, 'packages/integrations/vue/client/index.ts'),
|
|
74
|
+
'@useavalon/integration-solid': resolve(cwd, 'packages/integrations/solid/mod.ts'),
|
|
75
|
+
'@useavalon/integration-solid/server': resolve(cwd, 'packages/integrations/solid/server/renderer.ts'),
|
|
76
|
+
'@useavalon/integration-solid/client': resolve(cwd, 'packages/integrations/solid/client/index.ts'),
|
|
77
|
+
'@useavalon/integration-svelte': resolve(cwd, 'packages/integrations/svelte/mod.ts'),
|
|
78
|
+
'@useavalon/integration-svelte/server': resolve(cwd, 'packages/integrations/svelte/server/renderer.ts'),
|
|
79
|
+
'@useavalon/integration-svelte/client': resolve(cwd, 'packages/integrations/svelte/client/index.ts'),
|
|
80
|
+
'@useavalon/integration-react': resolve(cwd, 'packages/integrations/react/mod.ts'),
|
|
81
|
+
'@useavalon/integration-react/server': resolve(cwd, 'packages/integrations/react/server/renderer.ts'),
|
|
82
|
+
'@useavalon/integration-react/client': resolve(cwd, 'packages/integrations/react/client/index.ts'),
|
|
83
|
+
'@useavalon/integration-react/types': resolve(cwd, 'packages/integrations/react/types.ts'),
|
|
84
|
+
'@useavalon/integration-lit': resolve(cwd, 'packages/integrations/lit/mod.ts'),
|
|
85
|
+
'@useavalon/integration-lit/server': resolve(cwd, 'packages/integrations/lit/server/renderer.ts'),
|
|
86
|
+
'@useavalon/integration-lit/client': resolve(cwd, 'packages/integrations/lit/client/index.ts'),
|
|
87
|
+
'@useavalon/integration-lit/types': resolve(cwd, 'packages/integrations/lit/types.ts'),
|
|
88
|
+
'@useavalon/shared': resolve(cwd, 'packages/integrations/shared/types.ts'),
|
|
89
|
+
};
|
|
90
|
+
}
|