import type { PluginOption } from 'vite'
import vuePlugin from '@vitejs/plugin-vue'

import vueJsx from '@vitejs/plugin-vue-jsx'
import DefinePropsRefs from '@vue-macros/define-props-refs/vite'
import DefineProps from '@vue-macros/define-props/vite'

import ReactivityTransform from '@vue-macros/reactivity-transform/vite'

export default (): PluginOption[] => ([
    vuePlugin({
        template: {
            compilerOptions: {
                isCustomElement: (tag: string) => ['def'].includes(tag),
            },
        },
    }),
    vueJsx(),
    /**
     * Reactivity Transform
     * @description 响应性语法糖
     * @see https://vue-macros.sxzz.moe/zh-CN/features/reactivity-transform.html
     */
    ReactivityTransform(),
    /**
     * defineProps
     * @description 使用 $defineProps 可以正确地解构 props 的类型
     * @see https://vue-macros.sxzz.moe/zh-CN/macros/define-props.html
     */
    DefineProps(),
    /**
     * definePropsRefs
     * @description 从 defineProps 中将返回 refs 而不是 reactive 对象，可以在不丢失响应式的情况下解构 props
     * @see https://vue-macros.sxzz.moe/zh-CN/macros/define-props-refs.html
     */
    DefinePropsRefs(),
])
