diff --git a/packages/astro/src/vite-plugin-config-alias/index.ts b/packages/astro/src/vite-plugin-config-alias/index.ts index bd7a8e367102..f60da1e7ade0 100644 --- a/packages/astro/src/vite-plugin-config-alias/index.ts +++ b/packages/astro/src/vite-plugin-config-alias/index.ts @@ -142,6 +142,8 @@ export default function configAliasVitePlugin({ const replaceAliases = (match: string, importId: string) => { if (!importId) return match; + // Skip data URIs — they are inline content, not file paths. + if (importId.startsWith('data:')) return match; const resolved = resolveWithAlias(importId, configAlias); if (resolved) { diff --git a/packages/astro/test/alias-css-url-data-uri.test.ts b/packages/astro/test/alias-css-url-data-uri.test.ts new file mode 100644 index 000000000000..4d2c07f78abb --- /dev/null +++ b/packages/astro/test/alias-css-url-data-uri.test.ts @@ -0,0 +1,28 @@ +import assert from 'node:assert/strict'; +import { before, describe, it } from 'node:test'; +import * as cheerio from 'cheerio'; +import { type Fixture, loadFixture } from './test-utils.ts'; + +// Regression test for https://github.com/withastro/astro/issues/17293 +// CSS url() with data URIs should not crash when tsconfig baseUrl is set. +describe('CSS url() with data URIs and tsconfig baseUrl', () => { + let fixture: Fixture; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/alias-css-url-data-uri/', + }); + await fixture.build(); + }); + + it('preserves data URIs in url() without ENAMETOOLONG crash', async () => { + const html = await fixture.readFile('/index.html'); + const $ = cheerio.load(html); + + const styleTag = $('style').html() || ''; + assert.ok( + styleTag.includes('data:image/svg+xml;base64,'), + 'CSS should preserve the data URI', + ); + }); +}); diff --git a/packages/astro/test/fixtures/alias-css-url-data-uri/astro.config.mjs b/packages/astro/test/fixtures/alias-css-url-data-uri/astro.config.mjs new file mode 100644 index 000000000000..d7ac4b718a29 --- /dev/null +++ b/packages/astro/test/fixtures/alias-css-url-data-uri/astro.config.mjs @@ -0,0 +1,2 @@ +import { defineConfig } from 'astro/config'; +export default defineConfig({}); diff --git a/packages/astro/test/fixtures/alias-css-url-data-uri/package.json b/packages/astro/test/fixtures/alias-css-url-data-uri/package.json new file mode 100644 index 000000000000..d3325f2cb1be --- /dev/null +++ b/packages/astro/test/fixtures/alias-css-url-data-uri/package.json @@ -0,0 +1,3 @@ +{ + "name": "@test/alias-css-url-data-uri" +} diff --git a/packages/astro/test/fixtures/alias-css-url-data-uri/src/pages/index.astro b/packages/astro/test/fixtures/alias-css-url-data-uri/src/pages/index.astro new file mode 100644 index 000000000000..101354a69734 --- /dev/null +++ b/packages/astro/test/fixtures/alias-css-url-data-uri/src/pages/index.astro @@ -0,0 +1,11 @@ +--- + +--- + +