@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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@useavalon/avalon",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.13",
|
|
4
4
|
"description": "Multi-framework islands architecture for the modern web",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -10,14 +10,24 @@
|
|
|
10
10
|
"directory": "packages/avalon"
|
|
11
11
|
},
|
|
12
12
|
"homepage": "https://useavalon.dev",
|
|
13
|
-
"keywords": [
|
|
13
|
+
"keywords": [
|
|
14
|
+
"avalon",
|
|
15
|
+
"islands",
|
|
16
|
+
"ssr",
|
|
17
|
+
"vite",
|
|
18
|
+
"preact",
|
|
19
|
+
"multi-framework",
|
|
20
|
+
"hydration"
|
|
21
|
+
],
|
|
14
22
|
"scripts": {
|
|
15
23
|
"build:client": "bun run scripts/build-client.ts",
|
|
16
|
-
"
|
|
24
|
+
"build": "bun run scripts/build.ts",
|
|
25
|
+
"prepublishOnly": "bun run build"
|
|
17
26
|
},
|
|
18
27
|
"exports": {
|
|
19
28
|
".": "./mod.ts",
|
|
20
29
|
"./client": "./src/client/components.ts",
|
|
30
|
+
"./client/hmr": "./src/client/framework-adapter.ts",
|
|
21
31
|
"./islands/framework-detection": "./src/islands/framework-detection.ts",
|
|
22
32
|
"./middleware": "./src/middleware/index.ts",
|
|
23
33
|
"./nitro/renderer": "./src/nitro/renderer.ts",
|
|
@@ -28,12 +38,25 @@
|
|
|
28
38
|
},
|
|
29
39
|
"typesVersions": {
|
|
30
40
|
"*": {
|
|
31
|
-
"types": [
|
|
41
|
+
"types": [
|
|
42
|
+
"./src/types/index.d.ts"
|
|
43
|
+
]
|
|
32
44
|
}
|
|
33
45
|
},
|
|
34
|
-
"files": [
|
|
46
|
+
"files": [
|
|
47
|
+
"mod.ts",
|
|
48
|
+
"src/**/*.ts",
|
|
49
|
+
"src/**/*.tsx",
|
|
50
|
+
"src/**/*.js",
|
|
51
|
+
"src/**/*.d.ts",
|
|
52
|
+
"!src/**/*.test.ts",
|
|
53
|
+
"!src/**/tests/**",
|
|
54
|
+
"!src/**/__tests__/**",
|
|
55
|
+
"README.md"
|
|
56
|
+
],
|
|
35
57
|
"devDependencies": {
|
|
36
|
-
"@types/mime-types": "^3.0.1"
|
|
58
|
+
"@types/mime-types": "^3.0.1",
|
|
59
|
+
"oxc-minify": "^0.120.0"
|
|
37
60
|
},
|
|
38
61
|
"peerDependencies": {
|
|
39
62
|
"vite": "^8.0.0",
|
|
@@ -42,25 +65,25 @@
|
|
|
42
65
|
},
|
|
43
66
|
"peerDependenciesMeta": {
|
|
44
67
|
"nitro": {
|
|
45
|
-
|
|
68
|
+
"optional": true
|
|
69
|
+
},
|
|
70
|
+
"vite-imagetools": {
|
|
71
|
+
"optional": true
|
|
72
|
+
}
|
|
46
73
|
},
|
|
47
|
-
"
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
"
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
"remark-mdx-frontmatter": "^5.0.0",
|
|
63
|
-
"unified": "^11.0.0",
|
|
64
|
-
"zod": "4.3.6"
|
|
65
|
-
}
|
|
74
|
+
"dependencies": {
|
|
75
|
+
"@useavalon/core": "^0.1.3",
|
|
76
|
+
"@mdx-js/rollup": "^3.0.0",
|
|
77
|
+
"h3": "^2.0.1-rc.16",
|
|
78
|
+
"marked": "^17.0.4",
|
|
79
|
+
"oxc-transform": "^0.117.0",
|
|
80
|
+
"preact": "10.28.4",
|
|
81
|
+
"preact-render-to-string": "6.6.6",
|
|
82
|
+
"rehype-highlight": "^7.0.0",
|
|
83
|
+
"remark-frontmatter": "^5.0.0",
|
|
84
|
+
"remark-gfm": "^4.0.0",
|
|
85
|
+
"remark-mdx-frontmatter": "^5.0.0",
|
|
86
|
+
"unified": "^11.0.0",
|
|
87
|
+
"zod": "^4.3.6"
|
|
88
|
+
}
|
|
66
89
|
}
|
|
@@ -1,116 +1,116 @@
|
|
|
1
|
-
import type { Plugin } from 'vite';
|
|
2
|
-
import { resolve } from 'node:path';
|
|
3
|
-
import { getOptimizeDepsForIntegrations, getSSRNoExternalForIntegrations } from './integration-config.ts';
|
|
4
|
-
|
|
5
|
-
export interface IntegrationBundlerOptions {
|
|
6
|
-
/** Integrations to include in the build */
|
|
7
|
-
integrations: string[];
|
|
8
|
-
/** Whether to bundle for SSR */
|
|
9
|
-
ssr?: boolean;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Vite plugin to bundle integration packages
|
|
14
|
-
* Ensures integration server and client code is properly bundled
|
|
15
|
-
*/
|
|
16
|
-
export function integrationBundlerPlugin(options: IntegrationBundlerOptions): Plugin {
|
|
17
|
-
const { integrations, ssr = false } = options;
|
|
18
|
-
const cwd = process.cwd();
|
|
19
|
-
|
|
20
|
-
return {
|
|
21
|
-
name: 'avalon:integration-bundler',
|
|
22
|
-
enforce: 'post',
|
|
23
|
-
|
|
24
|
-
config(config) {
|
|
25
|
-
// Add integration entry points to the build
|
|
26
|
-
const entries: Record<string, string> = {};
|
|
27
|
-
|
|
28
|
-
for (const framework of integrations) {
|
|
29
|
-
if (ssr) {
|
|
30
|
-
// SSR build: include server-side integration code
|
|
31
|
-
entries[`integrations/${framework}/server`] = resolve(
|
|
32
|
-
cwd,
|
|
33
|
-
`packages/integrations/${framework}/server/renderer.ts`
|
|
34
|
-
);
|
|
35
|
-
} else {
|
|
36
|
-
// Client build: include client-side integration code
|
|
37
|
-
entries[`integrations/${framework}/client`] = resolve(
|
|
38
|
-
cwd,
|
|
39
|
-
`packages/integrations/${framework}/client/index.ts`
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Merge with existing rolldown input
|
|
45
|
-
const existingInput = config.build?.rolldownOptions?.input || {};
|
|
46
|
-
const mergedInput = typeof existingInput === 'string'
|
|
47
|
-
? { main: existingInput, ...entries }
|
|
48
|
-
: { ...existingInput, ...entries };
|
|
49
|
-
|
|
50
|
-
return {
|
|
51
|
-
build: {
|
|
52
|
-
rolldownOptions: {
|
|
53
|
-
input: mergedInput,
|
|
54
|
-
},
|
|
55
|
-
},
|
|
56
|
-
};
|
|
57
|
-
},
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Get external dependencies for integration bundling
|
|
65
|
-
* These should not be bundled but loaded from node_modules
|
|
66
|
-
*/
|
|
67
|
-
export function getIntegrationExternals(framework: string, ssr: boolean) {
|
|
68
|
-
const externals: string[] = [];
|
|
69
|
-
|
|
70
|
-
// Framework-specific externals
|
|
71
|
-
switch (framework) {
|
|
72
|
-
case 'preact':
|
|
73
|
-
if (!ssr) {
|
|
74
|
-
// Client-side: preact should be bundled for hydration
|
|
75
|
-
return [];
|
|
76
|
-
}
|
|
77
|
-
// SSR: keep preact external if needed
|
|
78
|
-
externals.push('preact', 'preact/hooks', 'preact-render-to-string');
|
|
79
|
-
break;
|
|
80
|
-
|
|
81
|
-
case 'vue':
|
|
82
|
-
if (ssr) {
|
|
83
|
-
// SSR: Vue server renderer should be external
|
|
84
|
-
externals.push('vue', 'vue/server-renderer', '@vue/server-renderer', '@vue/shared');
|
|
85
|
-
}
|
|
86
|
-
break;
|
|
87
|
-
|
|
88
|
-
case 'solid':
|
|
89
|
-
if (ssr) {
|
|
90
|
-
externals.push('solid-js', 'solid-js/web');
|
|
91
|
-
}
|
|
92
|
-
break;
|
|
93
|
-
|
|
94
|
-
case 'svelte':
|
|
95
|
-
if (ssr) {
|
|
96
|
-
externals.push('svelte', 'svelte/server', 'svelte/compiler', 'svelte/internal');
|
|
97
|
-
}
|
|
98
|
-
break;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
return externals;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Configure optimization for integration dependencies
|
|
106
|
-
*/
|
|
107
|
-
export function getIntegrationOptimizeDeps(integrations: string[]) {
|
|
108
|
-
return getOptimizeDepsForIntegrations(integrations);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Get SSR noExternal packages for integrations
|
|
113
|
-
*/
|
|
114
|
-
export function getIntegrationSSRNoExternal(integrations: string[]) {
|
|
115
|
-
return getSSRNoExternalForIntegrations(integrations);
|
|
116
|
-
}
|
|
1
|
+
import type { Plugin } from 'vite';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { getOptimizeDepsForIntegrations, getSSRNoExternalForIntegrations } from './integration-config.ts';
|
|
4
|
+
|
|
5
|
+
export interface IntegrationBundlerOptions {
|
|
6
|
+
/** Integrations to include in the build */
|
|
7
|
+
integrations: string[];
|
|
8
|
+
/** Whether to bundle for SSR */
|
|
9
|
+
ssr?: boolean;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Vite plugin to bundle integration packages
|
|
14
|
+
* Ensures integration server and client code is properly bundled
|
|
15
|
+
*/
|
|
16
|
+
export function integrationBundlerPlugin(options: IntegrationBundlerOptions): Plugin {
|
|
17
|
+
const { integrations, ssr = false } = options;
|
|
18
|
+
const cwd = process.cwd();
|
|
19
|
+
|
|
20
|
+
return {
|
|
21
|
+
name: 'avalon:integration-bundler',
|
|
22
|
+
enforce: 'post',
|
|
23
|
+
|
|
24
|
+
config(config) {
|
|
25
|
+
// Add integration entry points to the build
|
|
26
|
+
const entries: Record<string, string> = {};
|
|
27
|
+
|
|
28
|
+
for (const framework of integrations) {
|
|
29
|
+
if (ssr) {
|
|
30
|
+
// SSR build: include server-side integration code
|
|
31
|
+
entries[`integrations/${framework}/server`] = resolve(
|
|
32
|
+
cwd,
|
|
33
|
+
`packages/integrations/${framework}/server/renderer.ts`
|
|
34
|
+
);
|
|
35
|
+
} else {
|
|
36
|
+
// Client build: include client-side integration code
|
|
37
|
+
entries[`integrations/${framework}/client`] = resolve(
|
|
38
|
+
cwd,
|
|
39
|
+
`packages/integrations/${framework}/client/index.ts`
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Merge with existing rolldown input
|
|
45
|
+
const existingInput = config.build?.rolldownOptions?.input || {};
|
|
46
|
+
const mergedInput = typeof existingInput === 'string'
|
|
47
|
+
? { main: existingInput, ...entries }
|
|
48
|
+
: { ...existingInput, ...entries };
|
|
49
|
+
|
|
50
|
+
return {
|
|
51
|
+
build: {
|
|
52
|
+
rolldownOptions: {
|
|
53
|
+
input: mergedInput,
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Get external dependencies for integration bundling
|
|
65
|
+
* These should not be bundled but loaded from node_modules
|
|
66
|
+
*/
|
|
67
|
+
export function getIntegrationExternals(framework: string, ssr: boolean) {
|
|
68
|
+
const externals: string[] = [];
|
|
69
|
+
|
|
70
|
+
// Framework-specific externals
|
|
71
|
+
switch (framework) {
|
|
72
|
+
case 'preact':
|
|
73
|
+
if (!ssr) {
|
|
74
|
+
// Client-side: preact should be bundled for hydration
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
// SSR: keep preact external if needed
|
|
78
|
+
externals.push('preact', 'preact/hooks', 'preact-render-to-string');
|
|
79
|
+
break;
|
|
80
|
+
|
|
81
|
+
case 'vue':
|
|
82
|
+
if (ssr) {
|
|
83
|
+
// SSR: Vue server renderer should be external
|
|
84
|
+
externals.push('vue', 'vue/server-renderer', '@vue/server-renderer', '@vue/shared');
|
|
85
|
+
}
|
|
86
|
+
break;
|
|
87
|
+
|
|
88
|
+
case 'solid':
|
|
89
|
+
if (ssr) {
|
|
90
|
+
externals.push('solid-js', 'solid-js/web');
|
|
91
|
+
}
|
|
92
|
+
break;
|
|
93
|
+
|
|
94
|
+
case 'svelte':
|
|
95
|
+
if (ssr) {
|
|
96
|
+
externals.push('svelte', 'svelte/server', 'svelte/compiler', 'svelte/internal');
|
|
97
|
+
}
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return externals;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Configure optimization for integration dependencies
|
|
106
|
+
*/
|
|
107
|
+
export function getIntegrationOptimizeDeps(integrations: string[]) {
|
|
108
|
+
return getOptimizeDepsForIntegrations(integrations);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Get SSR noExternal packages for integrations
|
|
113
|
+
*/
|
|
114
|
+
export function getIntegrationSSRNoExternal(integrations: string[]) {
|
|
115
|
+
return getSSRNoExternalForIntegrations(integrations);
|
|
116
|
+
}
|
|
@@ -1,168 +1,168 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Integration configuration for build system
|
|
3
|
-
* Defines how each integration should be bundled and optimized
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
export interface IntegrationBuildConfig {
|
|
7
|
-
/** Framework name */
|
|
8
|
-
name: string;
|
|
9
|
-
/** File extensions this integration handles */
|
|
10
|
-
extensions: string[];
|
|
11
|
-
/** NPM packages that should be optimized for this integration */
|
|
12
|
-
optimizeDeps: string[];
|
|
13
|
-
/** NPM packages that should be external in SSR builds */
|
|
14
|
-
ssrExternal: string[];
|
|
15
|
-
/** NPM packages that should NOT be external in SSR builds */
|
|
16
|
-
ssrNoExternal: string[];
|
|
17
|
-
/** Whether this integration requires a Vite plugin */
|
|
18
|
-
requiresPlugin: boolean;
|
|
19
|
-
/** Plugin package name (if requiresPlugin is true) */
|
|
20
|
-
pluginPackage?: string;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Build configuration for all supported integrations
|
|
25
|
-
*/
|
|
26
|
-
export const INTEGRATION_BUILD_CONFIGS: Record<string, IntegrationBuildConfig> = {
|
|
27
|
-
preact: {
|
|
28
|
-
name: 'preact',
|
|
29
|
-
extensions: ['.tsx', '.jsx'],
|
|
30
|
-
optimizeDeps: [
|
|
31
|
-
'preact',
|
|
32
|
-
'preact/hooks',
|
|
33
|
-
'preact/jsx-runtime',
|
|
34
|
-
'preact/jsx-dev-runtime',
|
|
35
|
-
],
|
|
36
|
-
ssrExternal: [],
|
|
37
|
-
ssrNoExternal: ['preact', 'preact-render-to-string'],
|
|
38
|
-
requiresPlugin: false,
|
|
39
|
-
},
|
|
40
|
-
|
|
41
|
-
vue: {
|
|
42
|
-
name: 'vue',
|
|
43
|
-
extensions: ['.vue'],
|
|
44
|
-
optimizeDeps: ['vue'],
|
|
45
|
-
ssrExternal: [],
|
|
46
|
-
ssrNoExternal: ['vue', '@vue/server-renderer', '@vue/shared'],
|
|
47
|
-
requiresPlugin: true,
|
|
48
|
-
pluginPackage: '@vitejs/plugin-vue',
|
|
49
|
-
},
|
|
50
|
-
|
|
51
|
-
solid: {
|
|
52
|
-
name: 'solid',
|
|
53
|
-
extensions: ['.tsx', '.jsx'],
|
|
54
|
-
optimizeDeps: [
|
|
55
|
-
'solid-js',
|
|
56
|
-
'solid-js/web',
|
|
57
|
-
'solid-js/store',
|
|
58
|
-
],
|
|
59
|
-
ssrExternal: [],
|
|
60
|
-
ssrNoExternal: ['solid-js', 'solid-js/web', 'solid-js/store'],
|
|
61
|
-
requiresPlugin: true,
|
|
62
|
-
pluginPackage: 'vite-plugin-solid',
|
|
63
|
-
},
|
|
64
|
-
|
|
65
|
-
svelte: {
|
|
66
|
-
name: 'svelte',
|
|
67
|
-
extensions: ['.svelte'],
|
|
68
|
-
optimizeDeps: [
|
|
69
|
-
'svelte',
|
|
70
|
-
'svelte/internal',
|
|
71
|
-
'svelte/store',
|
|
72
|
-
'svelte/animate',
|
|
73
|
-
'svelte/easing',
|
|
74
|
-
'svelte/motion',
|
|
75
|
-
'svelte/transition',
|
|
76
|
-
],
|
|
77
|
-
ssrExternal: [],
|
|
78
|
-
ssrNoExternal: ['svelte', 'svelte/server', 'svelte/internal', 'svelte/store'],
|
|
79
|
-
requiresPlugin: true,
|
|
80
|
-
pluginPackage: '@sveltejs/vite-plugin-svelte',
|
|
81
|
-
},
|
|
82
|
-
|
|
83
|
-
react: {
|
|
84
|
-
name: 'react',
|
|
85
|
-
extensions: ['.jsx', '.tsx'],
|
|
86
|
-
optimizeDeps: [
|
|
87
|
-
'react',
|
|
88
|
-
'react/jsx-runtime',
|
|
89
|
-
'react/jsx-dev-runtime',
|
|
90
|
-
'react-dom',
|
|
91
|
-
'react-dom/client',
|
|
92
|
-
],
|
|
93
|
-
ssrExternal: [],
|
|
94
|
-
ssrNoExternal: ['react', 'react-dom', 'react-dom/server'],
|
|
95
|
-
requiresPlugin: true,
|
|
96
|
-
pluginPackage: '@vitejs/plugin-react',
|
|
97
|
-
},
|
|
98
|
-
|
|
99
|
-
lit: {
|
|
100
|
-
name: 'lit',
|
|
101
|
-
extensions: ['.ts', '.js'],
|
|
102
|
-
optimizeDeps: [
|
|
103
|
-
'lit',
|
|
104
|
-
'lit/decorators.js',
|
|
105
|
-
'lit/directives/class-map.js',
|
|
106
|
-
'lit/directives/style-map.js',
|
|
107
|
-
'@lit/reactive-element',
|
|
108
|
-
],
|
|
109
|
-
ssrExternal: [],
|
|
110
|
-
ssrNoExternal: ['lit', '@lit-labs/ssr', '@lit/reactive-element', 'lit-html'],
|
|
111
|
-
requiresPlugin: false,
|
|
112
|
-
},
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Get build configuration for a specific integration
|
|
117
|
-
*/
|
|
118
|
-
export function getIntegrationBuildConfig(framework: string) {
|
|
119
|
-
return INTEGRATION_BUILD_CONFIGS[framework];
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Get all optimize deps for given integrations
|
|
124
|
-
*/
|
|
125
|
-
export function getOptimizeDepsForIntegrations(integrations: string[]) {
|
|
126
|
-
const deps = new Set<string>();
|
|
127
|
-
|
|
128
|
-
for (const integration of integrations) {
|
|
129
|
-
const config = INTEGRATION_BUILD_CONFIGS[integration];
|
|
130
|
-
if (config) {
|
|
131
|
-
config.optimizeDeps.forEach(dep => deps.add(dep));
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
return Array.from(deps);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Get SSR noExternal packages for given integrations
|
|
140
|
-
*/
|
|
141
|
-
export function getSSRNoExternalForIntegrations(integrations: string[]) {
|
|
142
|
-
const packages = new Set<string>();
|
|
143
|
-
|
|
144
|
-
for (const integration of integrations) {
|
|
145
|
-
const config = INTEGRATION_BUILD_CONFIGS[integration];
|
|
146
|
-
if (config) {
|
|
147
|
-
config.ssrNoExternal.forEach(pkg => packages.add(pkg));
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
return Array.from(packages);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* Check if an integration requires a Vite plugin
|
|
156
|
-
*/
|
|
157
|
-
export function integrationRequiresPlugin(framework: string) {
|
|
158
|
-
const config = INTEGRATION_BUILD_CONFIGS[framework];
|
|
159
|
-
return config?.requiresPlugin ?? false;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* Get plugin package name for an integration
|
|
164
|
-
*/
|
|
165
|
-
export function getIntegrationPluginPackage(framework: string) {
|
|
166
|
-
const config = INTEGRATION_BUILD_CONFIGS[framework];
|
|
167
|
-
return config?.pluginPackage;
|
|
168
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Integration configuration for build system
|
|
3
|
+
* Defines how each integration should be bundled and optimized
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export interface IntegrationBuildConfig {
|
|
7
|
+
/** Framework name */
|
|
8
|
+
name: string;
|
|
9
|
+
/** File extensions this integration handles */
|
|
10
|
+
extensions: string[];
|
|
11
|
+
/** NPM packages that should be optimized for this integration */
|
|
12
|
+
optimizeDeps: string[];
|
|
13
|
+
/** NPM packages that should be external in SSR builds */
|
|
14
|
+
ssrExternal: string[];
|
|
15
|
+
/** NPM packages that should NOT be external in SSR builds */
|
|
16
|
+
ssrNoExternal: string[];
|
|
17
|
+
/** Whether this integration requires a Vite plugin */
|
|
18
|
+
requiresPlugin: boolean;
|
|
19
|
+
/** Plugin package name (if requiresPlugin is true) */
|
|
20
|
+
pluginPackage?: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Build configuration for all supported integrations
|
|
25
|
+
*/
|
|
26
|
+
export const INTEGRATION_BUILD_CONFIGS: Record<string, IntegrationBuildConfig> = {
|
|
27
|
+
preact: {
|
|
28
|
+
name: 'preact',
|
|
29
|
+
extensions: ['.tsx', '.jsx'],
|
|
30
|
+
optimizeDeps: [
|
|
31
|
+
'preact',
|
|
32
|
+
'preact/hooks',
|
|
33
|
+
'preact/jsx-runtime',
|
|
34
|
+
'preact/jsx-dev-runtime',
|
|
35
|
+
],
|
|
36
|
+
ssrExternal: [],
|
|
37
|
+
ssrNoExternal: ['preact', 'preact-render-to-string'],
|
|
38
|
+
requiresPlugin: false,
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
vue: {
|
|
42
|
+
name: 'vue',
|
|
43
|
+
extensions: ['.vue'],
|
|
44
|
+
optimizeDeps: ['vue'],
|
|
45
|
+
ssrExternal: [],
|
|
46
|
+
ssrNoExternal: ['vue', '@vue/server-renderer', '@vue/shared'],
|
|
47
|
+
requiresPlugin: true,
|
|
48
|
+
pluginPackage: '@vitejs/plugin-vue',
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
solid: {
|
|
52
|
+
name: 'solid',
|
|
53
|
+
extensions: ['.tsx', '.jsx'],
|
|
54
|
+
optimizeDeps: [
|
|
55
|
+
'solid-js',
|
|
56
|
+
'solid-js/web',
|
|
57
|
+
'solid-js/store',
|
|
58
|
+
],
|
|
59
|
+
ssrExternal: [],
|
|
60
|
+
ssrNoExternal: ['solid-js', 'solid-js/web', 'solid-js/store'],
|
|
61
|
+
requiresPlugin: true,
|
|
62
|
+
pluginPackage: 'vite-plugin-solid',
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
svelte: {
|
|
66
|
+
name: 'svelte',
|
|
67
|
+
extensions: ['.svelte'],
|
|
68
|
+
optimizeDeps: [
|
|
69
|
+
'svelte',
|
|
70
|
+
'svelte/internal',
|
|
71
|
+
'svelte/store',
|
|
72
|
+
'svelte/animate',
|
|
73
|
+
'svelte/easing',
|
|
74
|
+
'svelte/motion',
|
|
75
|
+
'svelte/transition',
|
|
76
|
+
],
|
|
77
|
+
ssrExternal: [],
|
|
78
|
+
ssrNoExternal: ['svelte', 'svelte/server', 'svelte/internal', 'svelte/store'],
|
|
79
|
+
requiresPlugin: true,
|
|
80
|
+
pluginPackage: '@sveltejs/vite-plugin-svelte',
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
react: {
|
|
84
|
+
name: 'react',
|
|
85
|
+
extensions: ['.jsx', '.tsx'],
|
|
86
|
+
optimizeDeps: [
|
|
87
|
+
'react',
|
|
88
|
+
'react/jsx-runtime',
|
|
89
|
+
'react/jsx-dev-runtime',
|
|
90
|
+
'react-dom',
|
|
91
|
+
'react-dom/client',
|
|
92
|
+
],
|
|
93
|
+
ssrExternal: [],
|
|
94
|
+
ssrNoExternal: ['react', 'react-dom', 'react-dom/server'],
|
|
95
|
+
requiresPlugin: true,
|
|
96
|
+
pluginPackage: '@vitejs/plugin-react',
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
lit: {
|
|
100
|
+
name: 'lit',
|
|
101
|
+
extensions: ['.ts', '.js'],
|
|
102
|
+
optimizeDeps: [
|
|
103
|
+
'lit',
|
|
104
|
+
'lit/decorators.js',
|
|
105
|
+
'lit/directives/class-map.js',
|
|
106
|
+
'lit/directives/style-map.js',
|
|
107
|
+
'@lit/reactive-element',
|
|
108
|
+
],
|
|
109
|
+
ssrExternal: [],
|
|
110
|
+
ssrNoExternal: ['lit', '@lit-labs/ssr', '@lit/reactive-element', 'lit-html'],
|
|
111
|
+
requiresPlugin: false,
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Get build configuration for a specific integration
|
|
117
|
+
*/
|
|
118
|
+
export function getIntegrationBuildConfig(framework: string) {
|
|
119
|
+
return INTEGRATION_BUILD_CONFIGS[framework];
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Get all optimize deps for given integrations
|
|
124
|
+
*/
|
|
125
|
+
export function getOptimizeDepsForIntegrations(integrations: string[]) {
|
|
126
|
+
const deps = new Set<string>();
|
|
127
|
+
|
|
128
|
+
for (const integration of integrations) {
|
|
129
|
+
const config = INTEGRATION_BUILD_CONFIGS[integration];
|
|
130
|
+
if (config) {
|
|
131
|
+
config.optimizeDeps.forEach(dep => deps.add(dep));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return Array.from(deps);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Get SSR noExternal packages for given integrations
|
|
140
|
+
*/
|
|
141
|
+
export function getSSRNoExternalForIntegrations(integrations: string[]) {
|
|
142
|
+
const packages = new Set<string>();
|
|
143
|
+
|
|
144
|
+
for (const integration of integrations) {
|
|
145
|
+
const config = INTEGRATION_BUILD_CONFIGS[integration];
|
|
146
|
+
if (config) {
|
|
147
|
+
config.ssrNoExternal.forEach(pkg => packages.add(pkg));
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return Array.from(packages);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Check if an integration requires a Vite plugin
|
|
156
|
+
*/
|
|
157
|
+
export function integrationRequiresPlugin(framework: string) {
|
|
158
|
+
const config = INTEGRATION_BUILD_CONFIGS[framework];
|
|
159
|
+
return config?.requiresPlugin ?? false;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Get plugin package name for an integration
|
|
164
|
+
*/
|
|
165
|
+
export function getIntegrationPluginPackage(framework: string) {
|
|
166
|
+
const config = INTEGRATION_BUILD_CONFIGS[framework];
|
|
167
|
+
return config?.pluginPackage;
|
|
168
|
+
}
|