import { defineConfig } from "vite";
import { name } from "./package.json";
import babel from "@rollup/plugin-babel";
import vue from "@vitejs/plugin-vue";
import path from "path";

const camelize = (name: string) =>
  name.replace(/(^|-)(\w)/g, (a, b, c) => c.toUpperCase());

export default defineConfig({
  resolve: {
    alias: {
      "/@src": path.resolve(__dirname, "src"),
    },
  },
  plugins: [vue()],
  build: {
    target: "es2015",
    outDir: path.resolve(__dirname, "lib"),
    lib: {
      entry: path.resolve(__dirname, "src/index.ts"),
      name: camelize(name),
    },
    rollupOptions: {
      output: {
        exports: "named",
        globals: (id: string) => {
          const name = id.replace(/^@/, "").split("/")[0];
          return camelize(name);
        },
        assetFileNames: "index.css",
      },
      plugins: [
        // @ts-ignore
        babel({
          exclude: "node_modules/**",
          extensions: [".js", ".jsx", ".ts", ".tsx", ".vue"],
          presets: ["@babel/preset-env", "@babel/preset-typescript"],
        }),
      ],
      external: ["vue"],
    },
  },
});