diff --git a/packages/core/src/extractors/svelte.ts b/packages/core/src/extractors/svelte.ts index 0816aef4c6..900db66f33 100644 --- a/packages/core/src/extractors/svelte.ts +++ b/packages/core/src/extractors/svelte.ts @@ -1,6 +1,8 @@ import type { Extractor } from '../types' import { splitCode } from './split' +const rightTrimRe = /=$/ + export const extractorSvelte: Extractor = { name: 'svelte', order: 0, @@ -8,7 +10,7 @@ export const extractorSvelte: Extractor = { let result = splitCode(code) if (id && id.endsWith('.svelte')) { result = result.map((r) => { - return r.startsWith('class:') ? r.slice(6) : r + return r.startsWith('class:') ? r.slice(6).replace(rightTrimRe, '') : r }) } return new Set(result) diff --git a/test/extractor.test.ts b/test/extractor.test.ts index 3e5e70809c..6f467b6970 100644 --- a/test/extractor.test.ts +++ b/test/extractor.test.ts @@ -1,21 +1,45 @@ -import { extractorSplit } from '@unocss/core' +import { extractorSplit, extractorSvelte } from '@unocss/core' import { expect, it } from 'vitest' it('extractorSplit', async () => { - let code = '' - async function extract() { + async function extract(code: string) { return [...await extractorSplit.extract({ code, original: code }) || []] } - code = 'foo' - expect(await extract()).eql(['foo']) + expect(await extract('foo')).eql(['foo']) + expect(await extract('
foo
')).toContain('text-red') + expect(await extract('
foo
')).toContain(' { + async function extract(code: string) { + return [...await extractorSvelte.extract({ code, original: code }) || []] + } + + expect(await extract('foo')).eql(['foo']) + expect(await extract('
foo
')).toContain('text-red') + expect(await extract('
foo
')).toContain('')).toContain('class:text-orange-400=') + expect(await extract('class:text-gray-800={$page.url.pathname.startsWith(\'/test\')}')).toContain('class:text-gray-800=') + expect(await extract('
foo
')).toContain('data-[a~=b]:text-red') + expect(await extract('
')).toContain('class:text-[32px]=') +}) + +it('extractorSvelte uses svelte-specific split with .svelte files', async () => { + async function extract(code: string) { + return [...await extractorSvelte.extract({ code, original: code, id: 'file.svelte' }) || []] + } - code = '
foo
' - expect(await extract()).toContain('foo
')).toContain('text-red') + expect(await extract('
foo
')).toContain('')).toContain('text-orange-400') + expect(await extract('class:text-gray-800={$page.url.pathname.startsWith(\'/test\')}')).toContain('text-gray-800') + expect(await extract('
foo
')).toContain('data-[a~=b]:text-red') + expect(await extract('
')).toContain('text-[32px]') })