Skip to content

Commit 393ec8a

Browse files
authored
fix(ipx): always use ipx provider if external baseURL is provided (#1800)
1 parent 1cc1291 commit 393ec8a

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

src/ipx.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { useNuxt, createResolver, useNitro } from '@nuxt/kit'
44
import type { NitroEventHandler } from 'nitropack'
55
import type { HTTPStorageOptions, NodeFSSOptions, IPXOptions } from 'ipx'
66
import { defu } from 'defu'
7+
import { hasProtocol } from 'ufo'
78
import type { ProviderSetup } from './types'
89

910
export type IPXRuntimeConfig = Omit<IPXOptions, 'storage' | 'httpStorage'> & { http: HTTPStorageOptions, fs: NodeFSSOptions } & {
@@ -20,9 +21,10 @@ export const ipxSetup: IPXSetupT = setupOptions => (providerOptions, moduleOptio
2021
const ipxBaseURL = providerOptions.options?.baseURL || '/_ipx'
2122

2223
// Avoid overriding user custom handler
23-
const hasUserProvidedIPX
24-
= nuxt.options.serverHandlers.find(handler => handler.route?.startsWith(ipxBaseURL))
25-
|| nuxt.options.devServerHandlers.find(handler => handler.route?.startsWith(ipxBaseURL))
24+
const hasUserProvidedIPX = nuxt.options.serverHandlers.find(handler => handler.route?.startsWith(ipxBaseURL))
25+
|| nuxt.options.devServerHandlers.find(handler => handler.route?.startsWith(ipxBaseURL))
26+
|| hasProtocol(ipxBaseURL, { acceptRelative: true })
27+
2628
if (hasUserProvidedIPX) {
2729
return
2830
}

src/module.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import process from 'node:process'
22

3-
import { parseURL, withLeadingSlash } from 'ufo'
3+
import { hasProtocol, parseURL, withLeadingSlash } from 'ufo'
44
import { defineNuxtModule, addTemplate, addImports, addServerImports, createResolver, addComponent, addPlugin, addServerTemplate } from '@nuxt/kit'
55
import { resolve } from 'pathe'
66
import { resolveProviders, detectProvider, resolveProvider } from './provider'
@@ -141,9 +141,12 @@ export default defineNuxtModule<ModuleOptions>({
141141

142142
nuxt.hook('nitro:init', async (nitro) => {
143143
if (!options.provider || options.provider === 'ipx' || options.provider === 'ipxStatic' || options.ipx) {
144-
const resolvedProvider = nitro.options.static || options.provider === 'ipxStatic'
145-
? 'ipxStatic'
146-
: nitro.options.node ? 'ipx' : 'none'
144+
const hasExternalIPX = (options.ipx?.baseURL && hasProtocol(options.ipx.baseURL, { acceptRelative: true }))
145+
const resolvedProvider = hasExternalIPX
146+
? 'ipx'
147+
: nitro.options.static || options.provider === 'ipxStatic'
148+
? 'ipxStatic'
149+
: nitro.options.node ? 'ipx' : 'none'
147150

148151
if (!options.provider || options.provider === 'ipx' || options.provider === 'ipxStatic') {
149152
imageOptions.provider = options.provider = resolvedProvider

0 commit comments

Comments
 (0)