@@ -16,13 +16,12 @@ import {
16
16
} from '@nuxt/kit'
17
17
import type { SatoriOptions } from 'satori'
18
18
import { installNuxtSiteConfig } from 'nuxt-site-config-kit'
19
- import { isCI , isDevelopment } from 'std-env'
19
+ import { isDevelopment } from 'std-env'
20
20
import { hash } from 'ohash'
21
21
import { relative } from 'pathe'
22
22
import type { ResvgRenderOptions } from '@resvg/resvg-js'
23
23
import type { SharpOptions } from 'sharp'
24
24
import { defu } from 'defu'
25
- import { Launcher } from 'chrome-launcher'
26
25
import { readPackageJSON } from 'pkg-types'
27
26
import type {
28
27
CompatibilityFlagEnvOverrides ,
@@ -31,6 +30,7 @@ import type {
31
30
OgImageComponent ,
32
31
OgImageOptions ,
33
32
OgImageRuntimeConfig ,
33
+ RuntimeCompatibilitySchema ,
34
34
} from './runtime/types'
35
35
import {
36
36
ensureDependencies ,
@@ -43,9 +43,8 @@ import { setupDevHandler } from './build/dev'
43
43
import { setupGenerateHandler } from './build/generate'
44
44
import { setupPrerenderHandler } from './build/prerender'
45
45
import { setupBuildHandler } from './build/build'
46
- import { ensureChromium } from './build/ensureChromium '
46
+ import { checkLocalChrome , checkPlaywrightDependency , isUndefinedOrTruthy } from './util '
47
47
import { normaliseFontInput } from './runtime/utils.pure'
48
- import { isUndefinedOrTruthy } from './util'
49
48
50
49
export interface ModuleOptions {
51
50
/**
@@ -201,38 +200,35 @@ export default defineNuxtModule<ModuleOptions>({
201
200
} )
202
201
}
203
202
204
- // we can check if we have chrome and disable chromium if not
205
- let hasChromeLocally = false
206
- try {
207
- hasChromeLocally = ! ! Launcher . getFirstInstallation ( )
203
+ // in dev and prerender we rely on local chrome or playwright dependency
204
+ // for runtime we need playwright dependency
205
+ const hasChromeLocally = checkLocalChrome ( )
206
+ const hasPlaywrightDependency = await checkPlaywrightDependency ( )
207
+ const chromeCompatibilityFlags = {
208
+ prerender : config . compatibility ?. prerender ?. chromium ,
209
+ dev : config . compatibility ?. dev ?. chromium ,
210
+ runtime : config . compatibility ?. runtime ?. chromium ,
208
211
}
209
- catch { }
210
- const isUndefinedOrTruthy = ( v ?: any ) => typeof v === 'undefined' || v !== false
211
- if ( isUndefinedOrTruthy ( config . compatibility ?. prerender ?. chromium ) && isUndefinedOrTruthy ( config . compatibility ?. runtime ?. chromium ) ) {
212
- if ( isCI )
213
- await ensureChromium ( logger )
214
-
215
- const hasPlaywrightDependency = ! ! ( await tryResolveModule ( 'playwright' ) )
216
- if ( hasChromeLocally ) {
217
- // we have chrome locally so we can enable chromium in dev
218
- config . compatibility = defu ( config . compatibility , < CompatibilityFlagEnvOverrides > {
219
- runtime : { chromium : false } ,
220
- dev : { chromium : 'node' } ,
221
- prerender : { chromium : 'node' } ,
222
- } )
223
- }
224
- else if ( hasPlaywrightDependency && targetCompatibility . chromium ) {
225
- // need to disable chromium in all environments
226
- config . compatibility = defu ( config . compatibility , < CompatibilityFlagEnvOverrides > {
227
- runtime : { chromium : 'node' } ,
228
- dev : { chromium : 'node' } ,
229
- prerender : { chromium : 'node' } ,
230
- } )
231
- }
212
+ const chromiumBinding : Record < string , RuntimeCompatibilitySchema [ 'chromium' ] | null > = {
213
+ dev : null ,
214
+ prerender : null ,
215
+ runtime : null ,
232
216
}
233
- else if ( ! hasChromeLocally && nuxt . options . dev && config . compatibility ?. dev ?. chromium === 'node' ) {
234
- await ensureChromium ( logger )
217
+ if ( nuxt . options . dev ) {
218
+ if ( isUndefinedOrTruthy ( chromeCompatibilityFlags . dev ) )
219
+ chromiumBinding . dev = hasChromeLocally ? 'chrome-launcher' : hasPlaywrightDependency ? 'playwright' : 'on-demand'
235
220
}
221
+ else {
222
+ if ( isUndefinedOrTruthy ( chromeCompatibilityFlags . prerender ) )
223
+ chromiumBinding . prerender = hasChromeLocally ? 'chrome-launcher' : hasPlaywrightDependency ? 'playwright' : 'on-demand'
224
+ if ( isUndefinedOrTruthy ( chromeCompatibilityFlags . runtime ) )
225
+ chromiumBinding . runtime = hasPlaywrightDependency ? 'playwright' : null
226
+ }
227
+ config . compatibility = defu ( config . compatibility , < CompatibilityFlagEnvOverrides > {
228
+ runtime : { chromium : chromiumBinding . runtime } ,
229
+ dev : { chromium : chromiumBinding . dev } ,
230
+ prerender : { chromium : chromiumBinding . prerender } ,
231
+ } )
236
232
237
233
// let's check we can access resvg
238
234
await import ( '@resvg/resvg-js' )
0 commit comments