@@ -4,12 +4,12 @@ import fse from "fs-extra";
4
4
import colors from "picocolors" ;
5
5
6
6
import {
7
- type ResolvedVitePluginConfig ,
8
- type ServerBundleBuildConfig ,
7
+ type RemixPluginContext ,
9
8
type BuildManifest ,
9
+ type ServerBundleBuildConfig ,
10
10
type ServerBundlesBuildManifest ,
11
11
configRouteToBranchRoute ,
12
- getServerBuildRootDirectory ,
12
+ getServerBuildDirectory ,
13
13
} from "./plugin" ;
14
14
import type { ConfigRoute , RouteManifest } from "../config/routes" ;
15
15
import invariant from "../invariant" ;
@@ -38,16 +38,17 @@ async function resolveViteConfig({
38
38
return viteConfig ;
39
39
}
40
40
41
- async function extractRemixConfig ( viteConfig : Vite . ResolvedConfig ) {
42
- let remixConfig = viteConfig [
43
- "__remixPluginResolvedConfig" as keyof typeof viteConfig
44
- ] as ResolvedVitePluginConfig | undefined ;
45
- if ( ! remixConfig ) {
41
+ async function extractRemixPluginContext ( viteConfig : Vite . ResolvedConfig ) {
42
+ let ctx = viteConfig [ "__remixPluginContext" as keyof typeof viteConfig ] as
43
+ | RemixPluginContext
44
+ | undefined ;
45
+
46
+ if ( ! ctx ) {
46
47
console . error ( colors . red ( "Remix Vite plugin not found in Vite config" ) ) ;
47
48
process . exit ( 1 ) ;
48
49
}
49
50
50
- return remixConfig ;
51
+ return ctx ;
51
52
}
52
53
53
54
function getAddressableRoutes ( routes : RouteManifest ) : ConfigRoute [ ] {
@@ -102,19 +103,15 @@ type RemixViteServerBuildArgs = {
102
103
103
104
type RemixViteBuildArgs = RemixViteClientBuildArgs | RemixViteServerBuildArgs ;
104
105
105
- async function getServerBuilds ( remixConfig : ResolvedVitePluginConfig ) : Promise < {
106
+ async function getServerBuilds ( ctx : RemixPluginContext ) : Promise < {
106
107
serverBuilds : RemixViteServerBuildArgs [ ] ;
107
108
buildManifest : BuildManifest ;
108
109
} > {
110
+ let { rootDirectory } = ctx ;
109
111
// eslint-disable-next-line prefer-let/prefer-let -- Improve type narrowing
110
- const {
111
- routes,
112
- serverBuildFile,
113
- serverBundles,
114
- rootDirectory,
115
- appDirectory,
116
- } = remixConfig ;
117
- let serverBuildRootDirectory = getServerBuildRootDirectory ( remixConfig ) ;
112
+ const { routes, serverBuildFile, serverBundles, appDirectory } =
113
+ ctx . remixConfig ;
114
+ let serverBuildDirectory = getServerBuildDirectory ( ctx ) ;
118
115
if ( ! serverBundles ) {
119
116
return {
120
117
serverBuilds : [ { ssr : true } ] ,
@@ -164,7 +161,7 @@ async function getServerBuilds(remixConfig: ResolvedVitePluginConfig): Promise<{
164
161
165
162
let relativeServerBundleDirectory = path . relative (
166
163
rootDirectory ,
167
- path . join ( serverBuildRootDirectory , serverBundleId )
164
+ path . join ( serverBuildDirectory , serverBundleId )
168
165
) ;
169
166
let serverBuildConfig = serverBundleBuildConfigById . get ( serverBundleId ) ;
170
167
if ( ! serverBuildConfig ) {
@@ -202,21 +199,18 @@ async function getServerBuilds(remixConfig: ResolvedVitePluginConfig): Promise<{
202
199
} ;
203
200
}
204
201
205
- async function cleanServerBuildRootDirectory (
202
+ async function cleanServerBuildDirectory (
206
203
viteConfig : Vite . ResolvedConfig ,
207
- remixConfig : ResolvedVitePluginConfig
204
+ ctx : RemixPluginContext
208
205
) {
209
- let serverBuildRootDirectory = getServerBuildRootDirectory ( remixConfig ) ;
206
+ let serverBuildDirectory = getServerBuildDirectory ( ctx ) ;
210
207
let isWithinRoot = ( ) => {
211
- let relativePath = path . relative (
212
- remixConfig . rootDirectory ,
213
- serverBuildRootDirectory
214
- ) ;
208
+ let relativePath = path . relative ( ctx . rootDirectory , serverBuildDirectory ) ;
215
209
return ! relativePath . startsWith ( ".." ) && ! path . isAbsolute ( relativePath ) ;
216
210
} ;
217
211
218
212
if ( viteConfig . build . emptyOutDir ?? isWithinRoot ( ) ) {
219
- await fse . remove ( serverBuildRootDirectory ) ;
213
+ await fse . remove ( serverBuildDirectory ) ;
220
214
}
221
215
}
222
216
@@ -250,7 +244,8 @@ export async function build(
250
244
await preloadViteEsm ( ) ;
251
245
252
246
let viteConfig = await resolveViteConfig ( { configFile, mode, root } ) ;
253
- let remixConfig = await extractRemixConfig ( viteConfig ) ;
247
+ let ctx = await extractRemixPluginContext ( viteConfig ) ;
248
+ let { remixConfig } = ctx ;
254
249
255
250
let vite = await import ( "vite" ) ;
256
251
@@ -276,19 +271,19 @@ export async function build(
276
271
// output directories, we need to clean the root server build directory
277
272
// ourselves rather than relying on Vite to do it, otherwise you can end up
278
273
// with stale server bundle directories in your build output
279
- await cleanServerBuildRootDirectory ( viteConfig , remixConfig ) ;
274
+ await cleanServerBuildDirectory ( viteConfig , ctx ) ;
280
275
281
276
// Run the Vite client build first
282
277
await viteBuild ( { ssr : false } ) ;
283
278
284
279
// Then run Vite SSR builds in parallel
285
- let { serverBuilds, buildManifest } = await getServerBuilds ( remixConfig ) ;
280
+ let { serverBuilds, buildManifest } = await getServerBuilds ( ctx ) ;
286
281
287
282
await Promise . all ( serverBuilds . map ( viteBuild ) ) ;
288
283
289
- if ( remixConfig . manifest ) {
284
+ if ( ctx . remixConfig . manifest ) {
290
285
await fse . writeFile (
291
- path . join ( remixConfig . buildDirectory , "manifest.json" ) ,
286
+ path . join ( ctx . remixConfig . buildDirectory , "manifest.json" ) ,
292
287
JSON . stringify ( buildManifest , null , 2 ) ,
293
288
"utf-8"
294
289
) ;
0 commit comments