Files
tauri-search/packages/docs/vite.config.ts

193 lines
4.8 KiB
TypeScript

import path from "path";
import { defineConfig } from "vite";
import Vue from "@vitejs/plugin-vue";
import Pages from "vite-plugin-pages";
import Layouts from "vite-plugin-vue-layouts";
import Icons from "unplugin-icons/vite";
import IconsResolver from "unplugin-icons/resolver";
import Components from "unplugin-vue-components/vite";
import AutoImport from "unplugin-auto-import/vite";
import Markdown from "vite-plugin-md";
import WindiCSS from "vite-plugin-windicss";
import { VitePWA } from "vite-plugin-pwa";
import VueI18n from "@intlify/vite-plugin-vue-i18n";
import Inspect from "vite-plugin-inspect";
import Prism from "markdown-it-prism";
import LinkAttributes from "markdown-it-link-attributes";
import MdExpandable from "markdown-it-expandable";
const markdownWrapperClasses = "prose prose-sm m-auto text-left";
export default defineConfig({
server: {
proxy: {
"/tauri": {
target: "https://tauri.studio",
changeOrigin: true,
secure: true,
rewrite: (path) => path.replace(/^\/tauri/, "/"),
},
"/github": {
target: "https://github.com",
changeOrigin: true,
secure: true,
rewrite: (path) => path.replace(/^\/github/, "/"),
},
"/rust": {
target: "https://docs.rs",
changeOrigin: true,
secure: true,
rewrite: (path) => path.replace(/^\/rust/, "/"),
},
},
},
resolve: {
alias: {
"~/": `${path.resolve(__dirname, "src")}/`,
},
},
plugins: [
Vue({
include: [/\.vue$/, /\.md$/],
}),
// https://github.com/hannoeru/vite-plugin-pages
Pages({
extensions: ["vue", "md"],
}),
// https://github.com/JohnCampionJr/vite-plugin-vue-layouts
Layouts(),
// https://github.com/antfu/unplugin-auto-import
AutoImport({
imports: [
"vue",
"vue-router",
"vue-i18n",
"@vueuse/head",
"@vueuse/core",
"vitest",
],
dts: "src/auto-imports.d.ts",
}),
// https://github.com/antfu/unplugin-vue-components
Components({
// allow auto load markdown components under `./src/components/`
extensions: ["vue", "md"],
// allow auto import and register components used in markdown
include: [/\.vue$/, /\.vue\?vue/, /\.md$/],
// custom resolvers
resolvers: [
// auto import icons
// https://github.com/antfu/unplugin-icons
IconsResolver({
componentPrefix: "",
// enabledCollections: ['carbon']
}),
],
dts: "src/components.d.ts",
}),
// https://github.com/antfu/unplugin-icons
Icons({
autoInstall: true,
}),
// https://github.com/antfu/vite-plugin-windicss
WindiCSS({
safelist: markdownWrapperClasses,
}),
// https://github.com/antfu/vite-plugin-md
// Don't need this? Try vitesse-lite: https://github.com/antfu/vitesse-lite
Markdown({
wrapperClasses: markdownWrapperClasses,
headEnabled: true,
markdownItSetup(md) {
// https://prismjs.com/
md.use(Prism);
md.use(LinkAttributes, {
pattern: /^https?:\/\//,
attrs: {
target: "_blank",
rel: "noopener",
},
});
md.use(MdExpandable);
},
}),
// https://github.com/antfu/vite-plugin-pwa
VitePWA({
registerType: "autoUpdate",
includeAssets: ["favicon.svg", "robots.txt", "safari-pinned-tab.svg"],
manifest: {
name: "Vitesse",
short_name: "Vitesse",
theme_color: "#ffffff",
icons: [
{
src: "/pwa-192x192.png",
sizes: "192x192",
type: "image/png",
},
{
src: "/pwa-512x512.png",
sizes: "512x512",
type: "image/png",
},
{
src: "/pwa-512x512.png",
sizes: "512x512",
type: "image/png",
purpose: "any maskable",
},
],
},
}),
// https://github.com/intlify/bundle-tools/tree/main/packages/vite-plugin-vue-i18n
VueI18n({
runtimeOnly: true,
compositionOnly: true,
include: [path.resolve(__dirname, "locales/**")],
}),
// https://github.com/antfu/vite-plugin-inspect
Inspect({
// change this to enable inspect for debugging
enabled: false,
}),
],
// https://github.com/antfu/vite-ssg
ssgOptions: {
script: "async",
formatting: "minify",
},
optimizeDeps: {
include: ["vue", "vue-router", "@vueuse/core", "@vueuse/head"],
exclude: ["vue-demi"],
},
// https://github.com/vitest-dev/vitest
test: {
include: ["test/**/*.test.ts"],
environment: "jsdom",
api: {
port: 4444,
host: "0.0.0.0",
},
deps: {
inline: ["@vue", "@vueuse", "vue-demi"],
},
},
});