diff --git a/packages/wxt/e2e/tests/output-structure.test.ts b/packages/wxt/e2e/tests/output-structure.test.ts index 4fd96d354..2c08556ff 100644 --- a/packages/wxt/e2e/tests/output-structure.test.ts +++ b/packages/wxt/e2e/tests/output-structure.test.ts @@ -220,6 +220,77 @@ describe('Output Directory Structure', () => { expect(await project.fileExists('.output/chrome-mv3/unlisted.js')); }); + it('should support CSS entrypoints', async () => { + const project = new TestProject(); + + project.addFile( + 'entrypoints/plain-one.css', + `body { + font: 100% Helvetica, sans-serif; + color: #333; + }`, + ); + + project.addFile( + 'entrypoints/plain-two.content.css', + `body { + font: 100% Helvetica, sans-serif; + color: #333; + }`, + ); + + project.addFile( + 'entrypoints/sass-one.scss', + `$font-stack: Helvetica, sans-serif; + $primary-color: #333; + + body { + font: 100% $font-stack; + color: $primary-color; + }`, + ); + + project.addFile( + 'entrypoints/sass-two.content.scss', + `$font-stack: Helvetica, sans-serif; + $primary-color: #333; + + body { + font: 100% $font-stack; + color: $primary-color; + }`, + ); + + await project.build(); + + expect(await project.serializeOutput(['.output/chrome-mv3/manifest.json'])) + .toMatchInlineSnapshot(` + ".output/chrome-mv3/assets/plain-one.css + ---------------------------------------- + body{font:100% Helvetica,sans-serif;color:#333} + + ================================================================================ + .output/chrome-mv3/assets/sass-one.css + ---------------------------------------- + body{font:100% Helvetica,sans-serif;color:#333} + + ================================================================================ + .output/chrome-mv3/content-scripts/plain-two.css + ---------------------------------------- + body{font:100% Helvetica,sans-serif;color:#333} + + ================================================================================ + .output/chrome-mv3/content-scripts/sass-two.css + ---------------------------------------- + body{font:100% Helvetica,sans-serif;color:#333} + + ================================================================================ + .output/chrome-mv3/manifest.json + ---------------------------------------- + <contents-ignored>" + `); + }); + it("should output to a custom directory when overriding 'outDir'", async () => { const project = new TestProject(); project.addFile('entrypoints/unlisted.html', '<html></html>'); diff --git a/packages/wxt/src/core/builders/vite/index.ts b/packages/wxt/src/core/builders/vite/index.ts index 8eb2068ab..c798749da 100644 --- a/packages/wxt/src/core/builders/vite/index.ts +++ b/packages/wxt/src/core/builders/vite/index.ts @@ -308,7 +308,10 @@ export async function createViteBuilder( async build(group) { let entryConfig; if (Array.isArray(group)) entryConfig = getMultiPageConfig(group); - else if (group.inputPath.endsWith('.css')) + else if ( + group.type === 'content-script-style' || + group.type === 'unlisted-style' + ) entryConfig = getCssConfig(group); else entryConfig = getLibModeConfig(group);