// @ts-check const { DefinePlugin } = require("webpack"); const CopyWebpackPlugin = require("copy-webpack-plugin"); const HTMLWebpackPlugin = require("html-webpack-plugin"); const { kemonoSite, sentryDSN, siteName, iconsPrepend, bannersPrepend, thumbnailsPrepend, creatorsLocation, artistsOrCreators, disableDMs, disableFAQ, disableFilehaus, sidebarItems, footerItems, bannerGlobal, bannerWelcome, homeBackgroundImage, homeMascotPath, homeLogoPath, paysiteList, homeWelcomeCredits, homeAnnouncements, headerAd, middleAd, footerAd, sliderAd, videoAd, isArchiveServerEnabled, apiServerBaseURL, apiServerPort, analyticsEnabled, analyticsCode, } = require("./configs/vars"); /** * TODO: make separate entries for `admin` and `moderator` * @type import("webpack").Configuration */ const webpackConfig = { entry: { index: "./src/index.tsx", // global: path.join(projectPath, "js", "global.js"), // admin: path.join(projectPath, "js", "admin.js"), // moderator: path.join(projectPath, "js", "moderator.js"), }, plugins: [ // ...pagePlugins, new HTMLWebpackPlugin({ title: siteName, filename: "index.html", favicon: "./static/favicon.ico", meta: { "og:type": "website", "og:site_name": siteName, "og:title": siteName, "og:image": `${kemonoSite}/static/kemono-logo.svg`, "og:image:width": "150", "og:image:height": "150", }, templateParameters: { analytics: !analyticsEnabled ? undefined : !analyticsCode ? undefined : atob(analyticsCode), }, template: "./src/index.html", }), // https://webpack.js.org/plugins/define-plugin/ new DefinePlugin({ 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_CREATORS_LOCATION: JSON.stringify(creatorsLocation), 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_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), }), new CopyWebpackPlugin({ patterns: [ { from: "static", to: "static", }, ], }), ], resolve: { extensions: [".tsx", ".ts", ".js"], fallback: { stream: false, }, }, }; module.exports = webpackConfig;