From 5ba25267dd2315b2b54af7e76561e97745651d3e Mon Sep 17 00:00:00 2001 From: Domenik Reitzner Date: Thu, 6 Nov 2025 09:14:53 +0100 Subject: [PATCH 1/2] =?UTF-8?q?fix-2015:=20correct=20type=20generation=20f?= =?UTF-8?q?or=20custom=20providers=20with=20same=20name=20as=20built=20in?= =?UTF-8?q?=20providers=20=F0=9F=A6=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/module.ts | 2 +- src/provider.ts | 4 +++- src/types/module.ts | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/module.ts b/src/module.ts index b895d5d62..df3002170 100644 --- a/src/module.ts +++ b/src/module.ts @@ -122,7 +122,7 @@ export default defineNuxtModule({ provider: ${JSON.stringify(options.provider)} } interface ConfiguredImageProviders { -${providers.map(p => ` ${JSON.stringify(p.name)}: ${BuiltInProviders.includes(p.name as 'ipx') ? `ImageProviders[${JSON.stringify(p.name)}]` : `ReturnType extends ImageProvider ? Options : unknown `}`).join('\n')} +${providers.map(p => ` ${JSON.stringify(p.name)}: ${p.isBuiltInProvider ? `ImageProviders[${JSON.stringify(p.name)}]` : `ReturnType extends ImageProvider ? Options : unknown `}`).join('\n')} } interface ImageProviders { ${BuiltInProviders.map(p => ` ${JSON.stringify(p)}: ReturnType extends ImageProvider ? Options : unknown `).join('\n')} diff --git a/src/provider.ts b/src/provider.ts index f47eeaa6a..0bd2f9a33 100644 --- a/src/provider.ts +++ b/src/provider.ts @@ -142,7 +142,8 @@ export async function resolveProvider(_nuxt: any, key: string, input: InputProvi } const resolver = createResolver(import.meta.url) - input.provider = BuiltInProviders.includes(input.provider as ImageProviderName) + const isBuiltInProvider = BuiltInProviders.includes(input.provider as ImageProviderName) + input.provider = isBuiltInProvider ? resolver.resolve('./runtime/providers/' + input.provider) : await resolvePath(input.provider) @@ -150,6 +151,7 @@ export async function resolveProvider(_nuxt: any, key: string, input: InputProvi return { ...input, + isBuiltInProvider, setup, runtime: normalize(input.provider!), importName: `${key}Runtime$${genSafeVariableName(hash(input.provider))}`, diff --git a/src/types/module.ts b/src/types/module.ts index c7d9480ff..9c56d92bb 100644 --- a/src/types/module.ts +++ b/src/types/module.ts @@ -25,6 +25,7 @@ export interface ImageModuleProvider { importName: string options: any provider: string + isBuiltInProvider: boolean runtime: string runtimeOptions: any setup: ProviderSetup From cad2396bbf110c2766c9cf40d26db4a1ec616880 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Sun, 16 Nov 2025 16:52:37 +0000 Subject: [PATCH 2/2] refactor: detect built-ins by provider path --- src/module.ts | 4 ++-- src/provider.ts | 14 +++++++++----- src/types/module.ts | 1 - 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/module.ts b/src/module.ts index df3002170..718cf43fe 100644 --- a/src/module.ts +++ b/src/module.ts @@ -3,7 +3,7 @@ import process from 'node:process' import { hasProtocol, parseURL, withLeadingSlash } from 'ufo' import { defineNuxtModule, addTemplate, addImports, addServerImports, createResolver, addComponent, addPlugin, addServerTemplate, addTypeTemplate } from '@nuxt/kit' import { join, relative, resolve } from 'pathe' -import { resolveProviders, detectProvider, resolveProvider, BuiltInProviders } from './provider' +import { resolveProviders, detectProvider, resolveProvider, BuiltInProviders, isBuiltInProvider } from './provider' import type { ImageOptions, InputProvider, CreateImageOptions, ImageModuleProvider, ImageProviders } from './types' import { existsSync } from 'node:fs' @@ -122,7 +122,7 @@ export default defineNuxtModule({ provider: ${JSON.stringify(options.provider)} } interface ConfiguredImageProviders { -${providers.map(p => ` ${JSON.stringify(p.name)}: ${p.isBuiltInProvider ? `ImageProviders[${JSON.stringify(p.name)}]` : `ReturnType extends ImageProvider ? Options : unknown `}`).join('\n')} +${providers.map(p => ` ${JSON.stringify(p.name)}: ${isBuiltInProvider(p) ? `ImageProviders[${JSON.stringify(p.name)}]` : `ReturnType extends ImageProvider ? Options : unknown `}`).join('\n')} } interface ImageProviders { ${BuiltInProviders.map(p => ` ${JSON.stringify(p)}: ReturnType extends ImageProvider ? Options : unknown `).join('\n')} diff --git a/src/provider.ts b/src/provider.ts index 195d91938..520106f7c 100644 --- a/src/provider.ts +++ b/src/provider.ts @@ -54,6 +54,13 @@ export const BuiltInProviders = [ 'sirv', ] as const +const resolver = createResolver(import.meta.url) +const providerRuntime = resolver.resolve('./runtime/providers/') + +export function isBuiltInProvider(provider: ImageModuleProvider) { + return provider.provider?.startsWith(providerRuntime) ?? BuiltInProviders.includes(provider.name as 'ipx') +} + type ImageProviderName = typeof BuiltInProviders[number] const providerSetup: Partial> = { @@ -127,7 +134,7 @@ export async function resolveProviders(nuxt: any, options: ModuleOptions): Promi export async function resolveProvider(_nuxt: any, key: string, input: InputProvider): Promise { if (typeof input === 'string') { - input = { name: input } + input = { name: key, provider: input } } if (!input.name) { @@ -142,9 +149,7 @@ export async function resolveProvider(_nuxt: any, key: string, input: InputProvi input.provider = normalizableProviders[input.provider]!() } - const resolver = createResolver(import.meta.url) - const isBuiltInProvider = BuiltInProviders.includes(input.provider as ImageProviderName) - input.provider = isBuiltInProvider + input.provider = BuiltInProviders.includes(input.provider as ImageProviderName) ? resolver.resolve('./runtime/providers/' + input.provider) : await resolvePath(input.provider) @@ -152,7 +157,6 @@ export async function resolveProvider(_nuxt: any, key: string, input: InputProvi return { ...input, - isBuiltInProvider, setup, runtime: normalize(input.provider!), importName: `${key}Runtime$${genSafeVariableName(hash(input.provider))}`, diff --git a/src/types/module.ts b/src/types/module.ts index 9c56d92bb..c7d9480ff 100644 --- a/src/types/module.ts +++ b/src/types/module.ts @@ -25,7 +25,6 @@ export interface ImageModuleProvider { importName: string options: any provider: string - isBuiltInProvider: boolean runtime: string runtimeOptions: any setup: ProviderSetup