///
///
import Vue from '@vitejs/plugin-vue'
import VueJsx from '@vitejs/plugin-vue-jsx'
import { globbySync } from 'globby'
import { defineConfig } from 'vite'
import dts from 'vite-plugin-dts'
import pkg from './package.json'
export default defineConfig({
esbuild: {
// jsxFactory: 'h',
// jsxFragment: 'Fragment',
jsxInject: `import { h, Fragment } from 'vue'`,
},
plugins: [
dts({
// TODO We should not skip diagnostics
// skipDiagnostics: true,
entryRoot: 'src',
staticImport: true,
}),
Vue(),
VueJsx(),
],
test: {
// setupFiles: 'src/setup-test.ts',
// coverage: {
// provider: 'v8',
// all: true,
// reporter: ['lcov', 'text'],
// include: ['src/**'],
// exclude: ['**/*.stories.tsx'],
// },
globals: true,
environment: 'happy-dom',
transformMode: {
web: [/.[tj]sx$/],
},
},
build: {
target: 'esnext',
minify: false,
lib: {
entry: globbySync('src/**/index.ts'),
formats: ['es', 'cjs'],
fileName: (format) => (format === 'es' ? 'index.mjs' : 'index.cjs'),
},
rollupOptions: {
external: [
...Object.keys(pkg.dependencies ?? {}),
...Object.keys(pkg.peerDependencies ?? {}),
'vue',
],
output: [
{
format: 'cjs',
preserveModules: true,
preserveModulesRoot: 'src',
exports: 'named',
entryFileNames: '[name].cjs',
},
{
format: 'es',
preserveModules: true,
preserveModulesRoot: 'src',
exports: 'named',
entryFileNames: '[name].mjs',
},
],
},
},
})