import { createUnplugin } from 'unplugin'
import { createFilter } from '@rollup/pluginutils'
import type { UserOptions } from './types'
import { transformVirtualTemplate, transformConditionalTemplate, transformVirtualTemplateForBuild } from './core'
export default createUnplugin<UserOptions>((options = {}) => {
const filter = createFilter(options.include || ['**/*'], options.exclude || [])
return {
name: '@opentiny/unplugin-virtual-template',
enforce: 'pre',
resolveId(id: string) {
if (id.startsWith('virtual-template')) {
return id
}
return null
},
transformInclude(id) {
return filter(id)
},
transform(code, id) {
if (process.env.NODE_ENV === 'production') {
return transformVirtualTemplateForBuild(code)
}
code = transformVirtualTemplate(code)
return transformConditionalTemplate(code, id, options.env)
}
}
})