1
1
import react , { type Options as ViteReactPluginOptions } from '@vitejs/plugin-react' ;
2
- import type { AstroIntegration , ContainerRenderer } from 'astro' ;
3
- import { version as ReactVersion } from 'react-dom' ;
2
+ import type { AstroIntegration , ContainerRenderer } from 'astro' ;
4
3
import type * as vite from 'vite' ;
4
+ import {
5
+ getReactMajorVersion ,
6
+ isUnsupportedVersion ,
7
+ versionsConfig ,
8
+ type ReactVersionConfig ,
9
+ type SupportedReactVersion ,
10
+ } from './version.js' ;
5
11
6
12
export type ReactIntegrationOptions = Pick <
7
13
ViteReactPluginOptions ,
@@ -12,39 +18,6 @@ export type ReactIntegrationOptions = Pick<
12
18
13
19
const FAST_REFRESH_PREAMBLE = react . preambleCode ;
14
20
15
- const versionsConfig = {
16
- 17 : {
17
- server : '@astrojs/react/server-v17.js' ,
18
- client : '@astrojs/react/client-v17.js' ,
19
- externals : [ 'react-dom/server.js' , 'react-dom/client.js' ] ,
20
- } ,
21
- 18 : {
22
- server : '@astrojs/react/server.js' ,
23
- client : '@astrojs/react/client.js' ,
24
- externals : [ 'react-dom/server' , 'react-dom/client' ] ,
25
- } ,
26
- 19 : {
27
- server : '@astrojs/react/server.js' ,
28
- client : '@astrojs/react/client.js' ,
29
- externals : [ 'react-dom/server' , 'react-dom/client' ] ,
30
- } ,
31
- } ;
32
-
33
- type SupportedReactVersion = keyof typeof versionsConfig ;
34
- type ReactVersionConfig = ( typeof versionsConfig ) [ SupportedReactVersion ] ;
35
-
36
- function getReactMajorVersion ( ) : number {
37
- const matches = / \d + \. / . exec ( ReactVersion ) ;
38
- if ( ! matches ) {
39
- return NaN ;
40
- }
41
- return Number ( matches [ 0 ] ) ;
42
- }
43
-
44
- function isUnsupportedVersion ( majorVersion : number ) {
45
- return majorVersion < 17 || majorVersion > 19 || Number . isNaN ( majorVersion ) ;
46
- }
47
-
48
21
function getRenderer ( reactConfig : ReactVersionConfig ) {
49
22
return {
50
23
name : '@astrojs/react' ,
@@ -53,19 +26,6 @@ function getRenderer(reactConfig: ReactVersionConfig) {
53
26
} ;
54
27
}
55
28
56
- export function getContainerRenderer ( ) : ContainerRenderer {
57
- const majorVersion = getReactMajorVersion ( ) ;
58
- if ( isUnsupportedVersion ( majorVersion ) ) {
59
- throw new Error ( `Unsupported React version: ${ majorVersion } .` ) ;
60
- }
61
- const versionConfig = versionsConfig [ majorVersion as SupportedReactVersion ] ;
62
-
63
- return {
64
- name : '@astrojs/react' ,
65
- serverEntrypoint : versionConfig . server ,
66
- } ;
67
- }
68
-
69
29
function optionsPlugin ( experimentalReactChildren : boolean ) : vite . Plugin {
70
30
const virtualModule = 'astro:react:opts' ;
71
31
const virtualModuleId = '\0' + virtualModule ;
@@ -152,3 +112,16 @@ export default function ({
152
112
} ,
153
113
} ;
154
114
}
115
+
116
+ export function getContainerRenderer ( ) : ContainerRenderer {
117
+ const majorVersion = getReactMajorVersion ( ) ;
118
+ if ( isUnsupportedVersion ( majorVersion ) ) {
119
+ throw new Error ( `Unsupported React version: ${ majorVersion } .` ) ;
120
+ }
121
+ const versionConfig = versionsConfig [ majorVersion as SupportedReactVersion ] ;
122
+
123
+ return {
124
+ name : '@astrojs/react' ,
125
+ serverEntrypoint : versionConfig . server ,
126
+ } ;
127
+ }
0 commit comments