From d8e40ef7e1c20ee86b294e7cf78e2de60d12830e Mon Sep 17 00:00:00 2001 From: edison Date: Wed, 23 Jul 2025 08:41:17 +0800 Subject: [PATCH] fix(compiler-sfc): transform empty srcset w/ includeAbsolute: true (#13639) close vitejs/vite-plugin-vue#631 --- .../__snapshots__/templateTransformSrcset.spec.ts.snap | 10 ++++++++++ .../__tests__/templateTransformSrcset.spec.ts | 8 ++++++++ packages/compiler-sfc/src/template/transformSrcset.ts | 1 + 3 files changed, 19 insertions(+) diff --git a/packages/compiler-sfc/__tests__/__snapshots__/templateTransformSrcset.spec.ts.snap b/packages/compiler-sfc/__tests__/__snapshots__/templateTransformSrcset.spec.ts.snap index 0469ffaba..28e0af71f 100644 --- a/packages/compiler-sfc/__tests__/__snapshots__/templateTransformSrcset.spec.ts.snap +++ b/packages/compiler-sfc/__tests__/__snapshots__/templateTransformSrcset.spec.ts.snap @@ -16,6 +16,16 @@ export function render(_ctx, _cache) { }" `; +exports[`compiler sfc: transform srcset > transform empty srcset w/ includeAbsolute: true 1`] = ` +"import { openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue" + +const _hoisted_1 = { srcset: " " } + +export function render(_ctx, _cache) { + return (_openBlock(), _createElementBlock("img", _hoisted_1)) +}" +`; + exports[`compiler sfc: transform srcset > transform srcset 1`] = ` "import { createElementVNode as _createElementVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue" import _imports_0 from './logo.png' diff --git a/packages/compiler-sfc/__tests__/templateTransformSrcset.spec.ts b/packages/compiler-sfc/__tests__/templateTransformSrcset.spec.ts index 491731f94..68239bbd1 100644 --- a/packages/compiler-sfc/__tests__/templateTransformSrcset.spec.ts +++ b/packages/compiler-sfc/__tests__/templateTransformSrcset.spec.ts @@ -72,6 +72,14 @@ describe('compiler sfc: transform srcset', () => { ).toMatchSnapshot() }) + test('transform empty srcset w/ includeAbsolute: true', () => { + expect( + compileWithSrcset(``, { + includeAbsolute: true, + }).code, + ).toMatchSnapshot() + }) + test('transform srcset w/ stringify', () => { const code = compileWithSrcset( `
${src}
`, diff --git a/packages/compiler-sfc/src/template/transformSrcset.ts b/packages/compiler-sfc/src/template/transformSrcset.ts index 8f00f86e3..40fba4882 100644 --- a/packages/compiler-sfc/src/template/transformSrcset.ts +++ b/packages/compiler-sfc/src/template/transformSrcset.ts @@ -71,6 +71,7 @@ export const transformSrcset: NodeTransform = ( const shouldProcessUrl = (url: string) => { return ( + url && !isExternalUrl(url) && !isDataUrl(url) && (options.includeAbsolute || isRelativeUrl(url))