180 lines
5.4 KiB
JavaScript
180 lines
5.4 KiB
JavaScript
// @ts-check
|
|
import { defineConfig } from "vite";
|
|
import react from "@vitejs/plugin-react";
|
|
import legacy from "@vitejs/plugin-legacy";
|
|
import ViteYaml from "@modyfi/vite-plugin-yaml";
|
|
import { viteStaticCopy } from "vite-plugin-static-copy";
|
|
import { createHtmlPlugin } from "vite-plugin-html";
|
|
import { patchCssModules } from 'vite-css-modules'
|
|
import {
|
|
siteName,
|
|
favicon,
|
|
analyticsEnabled,
|
|
analyticsCode,
|
|
kemonoSite,
|
|
sentryDSN,
|
|
iconsPrepend,
|
|
bannersPrepend,
|
|
thumbnailsPrepend,
|
|
artistsOrCreators,
|
|
disableDMs,
|
|
disableFAQ,
|
|
disableFilehaus,
|
|
sidebarItems,
|
|
footerItems,
|
|
bannerGlobal,
|
|
bannerWelcome,
|
|
homeBackgroundImage,
|
|
homeMascotPath,
|
|
homeLogoPath,
|
|
homeWelcomeCredits,
|
|
homeAnnouncements,
|
|
paysiteList,
|
|
headerAd,
|
|
middleAd,
|
|
footerAd,
|
|
sliderAd,
|
|
videoAd,
|
|
isArchiveServerEnabled,
|
|
apiServerBaseURL,
|
|
apiServerPort,
|
|
gitCommitHash,
|
|
isFileServingEnabled,
|
|
buildDate,
|
|
AnnouncementBannerGlobal,
|
|
} from "./configs/vars.mjs";
|
|
|
|
export const baseConfig = defineConfig(async ({ command, mode }) => {
|
|
/**
|
|
* @type {import("vite").UserConfig}
|
|
*/
|
|
const config = {
|
|
plugins: [
|
|
legacy({
|
|
targets: ["defaults", "not IE 11"],
|
|
}),
|
|
patchCssModules({ exportMode: "named" }),
|
|
ViteYaml(),
|
|
// TODO: remove it after settling the static files situation
|
|
// by using the vite option of copying public folder instead
|
|
viteStaticCopy({
|
|
structured: true,
|
|
targets: [
|
|
{
|
|
src: "static",
|
|
dest: "./",
|
|
},
|
|
],
|
|
}),
|
|
createHtmlPlugin({
|
|
entry: "./src/index.tsx",
|
|
inject: {
|
|
data: {
|
|
title: siteName,
|
|
analytics: !analyticsEnabled
|
|
? undefined
|
|
: !analyticsCode
|
|
? undefined
|
|
: atob(analyticsCode),
|
|
},
|
|
tags: [
|
|
{
|
|
tag: "link",
|
|
attrs: {
|
|
rel: "icon",
|
|
href: favicon,
|
|
},
|
|
injectTo: "head",
|
|
},
|
|
{
|
|
tag: "meta",
|
|
attrs: {
|
|
name: "og:type",
|
|
content: "website",
|
|
},
|
|
injectTo: "head",
|
|
},
|
|
{
|
|
tag: "meta",
|
|
attrs: {
|
|
name: "og:site_name",
|
|
content: siteName,
|
|
},
|
|
injectTo: "head",
|
|
},
|
|
{
|
|
tag: "meta",
|
|
attrs: {
|
|
name: "og:title",
|
|
content: siteName,
|
|
},
|
|
injectTo: "head",
|
|
},
|
|
{
|
|
tag: "meta",
|
|
attrs: {
|
|
name: "og:image",
|
|
content: `${kemonoSite}/static/kemono-logo.svg`,
|
|
},
|
|
injectTo: "head",
|
|
},
|
|
{
|
|
tag: "meta",
|
|
attrs: {
|
|
name: "og:image:width",
|
|
content: "150",
|
|
},
|
|
injectTo: "head",
|
|
},
|
|
{
|
|
tag: "meta",
|
|
attrs: {
|
|
name: "og:image:height",
|
|
content: "150",
|
|
},
|
|
injectTo: "head",
|
|
},
|
|
],
|
|
},
|
|
}),
|
|
react(),
|
|
],
|
|
define: {
|
|
BUNDLER_ENV_KEMONO_SITE: JSON.stringify(kemonoSite),
|
|
BUNDLER_ENV_SENTRY_DSN: JSON.stringify(sentryDSN),
|
|
BUNDLER_ENV_SITE_NAME: JSON.stringify(siteName),
|
|
BUNDLER_ENV_ICONS_PREPEND: JSON.stringify(iconsPrepend),
|
|
BUNDLER_ENV_BANNERS_PREPEND: JSON.stringify(bannersPrepend),
|
|
BUNDLER_ENV_THUMBNAILS_PREPEND: JSON.stringify(thumbnailsPrepend),
|
|
BUNDLER_ENV_ARTISTS_OR_CREATORS: JSON.stringify(artistsOrCreators),
|
|
BUNDLER_ENV_DISABLE_DMS: JSON.stringify(disableDMs),
|
|
BUNDLER_ENV_DISABLE_FAQ: JSON.stringify(disableFAQ),
|
|
BUNDLER_ENV_DISABLE_FILEHAUS: JSON.stringify(disableFilehaus),
|
|
BUNDLER_ENV_SIDEBAR_ITEMS: JSON.stringify(sidebarItems),
|
|
BUNDLER_ENV_FOOTER_ITEMS: JSON.stringify(footerItems),
|
|
BUNDLER_ENV_BANNER_GLOBAL: JSON.stringify(bannerGlobal),
|
|
BUNDLER_ENV_ANNOUNCEMENT_BANNER_GLOBAL: JSON.stringify(AnnouncementBannerGlobal),
|
|
BUNDLER_ENV_BANNER_WELCOME: JSON.stringify(bannerWelcome),
|
|
BUNDLER_ENV_HOME_BACKGROUND_IMAGE: JSON.stringify(homeBackgroundImage),
|
|
BUNDLER_ENV_HOME_MASCOT_PATH: JSON.stringify(homeMascotPath),
|
|
BUNDLER_ENV_HOME_LOGO_PATH: JSON.stringify(homeLogoPath),
|
|
BUNDLER_ENV_HOME_WELCOME_CREDITS: JSON.stringify(homeWelcomeCredits),
|
|
BUNDLER_ENV_HOME_ANNOUNCEMENTS: JSON.stringify(homeAnnouncements),
|
|
BUNDLER_ENV_PAYSITE_LIST: JSON.stringify(paysiteList),
|
|
BUNDLER_ENV_HEADER_AD: JSON.stringify(headerAd),
|
|
BUNDLER_ENV_MIDDLE_AD: JSON.stringify(middleAd),
|
|
BUNDLER_ENV_FOOTER_AD: JSON.stringify(footerAd),
|
|
BUNDLER_ENV_SLIDER_AD: JSON.stringify(sliderAd),
|
|
BUNDLER_ENV_VIDEO_AD: JSON.stringify(videoAd),
|
|
BUNDLER_ENV_IS_ARCHIVER_ENABLED: JSON.stringify(isArchiveServerEnabled),
|
|
BUNDLER_ENV_API_SERVER_BASE_URL: JSON.stringify(apiServerBaseURL),
|
|
BUNDLER_ENV_API_SERVER_PORT: JSON.stringify(apiServerPort),
|
|
BUNDLER_ENV_GIT_COMMIT_HASH: JSON.stringify(gitCommitHash),
|
|
BUNDLER_ENV_BUILD_DATE: JSON.stringify(buildDate),
|
|
BUNDLER_ENV_IS_FILE_SERVING_ENABLED: JSON.stringify(isFileServingEnabled),
|
|
},
|
|
};
|
|
|
|
return config;
|
|
});
|