Skip to content

Commit

Permalink
fix(astro): inject duplicate style (#2593)
Browse files Browse the repository at this point in the history
  • Loading branch information
Dunqing committed May 21, 2023
1 parent 3358c0f commit e6b0d71
Showing 1 changed file with 45 additions and 5 deletions.
50 changes: 45 additions & 5 deletions packages/astro/src/index.ts
Expand Up @@ -4,6 +4,40 @@ import type { AstroIntegration } from 'astro'
import type { VitePluginConfig } from '@unocss/vite'
import VitePlugin from '@unocss/vite'
import type { UserConfigDefaults } from '@unocss/core'
import type { Plugin } from 'vite'

const UNO_INJECT_ID = 'uno-astro'
const UNO_QUERY_KEY = 'uno-with-astro-key'

interface AstroVitePluginOptions {
injects: string[]
}

function AstroVitePlugin(options: AstroVitePluginOptions): Plugin {
const { injects } = options
return {
name: 'unocss:astro',
apply: 'serve',
enforce: 'pre',
resolveId(id, importer) {
if (id === UNO_INJECT_ID)
return id
if (importer?.endsWith(UNO_INJECT_ID))
return `${id}${id.includes('?') ? '&' : '?'}${UNO_QUERY_KEY}`
},
load(id, options) {
if (id.endsWith(UNO_INJECT_ID))
return injects.join('\n')

if (
!options?.ssr
&& id.includes(UNO_QUERY_KEY)
&& id.includes('.css')
)
return ''
},
}
}

export interface AstroIntegrationConfig<Theme extends {} = {}> extends VitePluginConfig<Theme> {
/**
Expand Down Expand Up @@ -39,15 +73,12 @@ export default function UnoCSSAstroIntegration<Theme extends {}>(
return {
name: 'unocss',
hooks: {
'astro:config:setup': async ({ config, injectScript }) => {
'astro:config:setup': async ({ config, updateConfig, injectScript }) => {
// Adding components to UnoCSS's extra content
options.extraContent ||= {}
options.extraContent.filesystem ||= []
options.extraContent.filesystem.push(resolve(fileURLToPath(config.srcDir), 'components/**/*').replace(/\\/g, '/'))

config.vite.plugins ||= []
config.vite.plugins.push(...VitePlugin(options, defaults) as any)

const injects: string[] = []
if (injectReset) {
const resetPath = typeof injectReset === 'string'
Expand All @@ -62,8 +93,17 @@ export default function UnoCSSAstroIntegration<Theme extends {}>(
}
if (injectExtra.length > 0)
injects.push(...injectExtra)

updateConfig({
vite: {
plugins: [AstroVitePlugin({
injects,
}), ...VitePlugin(options, defaults)],
},
})

if (injects?.length)
injectScript('page-ssr', injects.join('\n'))
injectScript('page-ssr', `import ${JSON.stringify(UNO_INJECT_ID)}`)
},
},
}
Expand Down

0 comments on commit e6b0d71

Please sign in to comment.