mirror of
https://github.com/searxng/searxng.git
synced 2025-07-11 23:39:18 +02:00
This is one of various PR to refactor the simple theme internally. Replace eslint tool with Biome. I have been using this for quite some time, and it will help us to have more consistent and valid code without extending on other third party plugins. Removes unused dependencies.
178 lines
4.4 KiB
JavaScript
178 lines
4.4 KiB
JavaScript
/**
|
|
* CONFIG: https://vite.dev/config/
|
|
*/
|
|
|
|
import { resolve } from "node:path";
|
|
import { defineConfig } from "vite";
|
|
import { viteStaticCopy } from "vite-plugin-static-copy";
|
|
import { plg_svg2png } from "./tools/plg.js";
|
|
import { plg_svg2svg } from "./tools/plg.js";
|
|
|
|
|
|
const ROOT = "../.."; // root of the git reposetory
|
|
|
|
const PATH = {
|
|
|
|
dist: resolve(ROOT, "searx/static/themes/simple"),
|
|
// dist: resolve(ROOT, "client/simple/dist"),
|
|
|
|
src: "src",
|
|
modules: "node_modules",
|
|
brand: "src/brand",
|
|
static: resolve(ROOT, "client/simple/static"),
|
|
leaflet: resolve(ROOT, "client/simple/node_modules/leaflet/dist"),
|
|
templates: resolve(ROOT, "searx/templates/simple"),
|
|
};
|
|
|
|
const svg2svg_opts = {
|
|
plugins: [
|
|
{ name: "preset-default" },
|
|
"sortAttrs",
|
|
"convertStyleToAttrs",
|
|
]
|
|
};
|
|
|
|
const svg2svg_favicon_opts = {
|
|
plugins: [
|
|
{ name: "preset-default" },
|
|
"sortAttrs",
|
|
]
|
|
};
|
|
|
|
|
|
export default defineConfig({
|
|
|
|
root: PATH.src,
|
|
mode: "production",
|
|
// mode: "development",
|
|
|
|
// FIXME: missing CCS sourcemaps!!
|
|
// see: https://github.com/vitejs/vite/discussions/13845#discussioncomment-11992084
|
|
//
|
|
// what I have tried so far (see config below):
|
|
//
|
|
// - build.sourcemap
|
|
// - esbuild.sourcemap
|
|
// - css.preprocessorOptions.less.sourceMap
|
|
|
|
css: {
|
|
devSourcemap: true,
|
|
preprocessorOptions: {
|
|
less: {
|
|
// FIXME: missing CCS sourcemaps!!
|
|
sourceMap: {
|
|
outputSourceFiles: true,
|
|
sourceMapURL: (name) => { const s = name.split('/'); return s[s.length - 1] + '.map'; },
|
|
},
|
|
// env: 'development',
|
|
// relativeUrls: true,
|
|
// javascriptEnabled: true,
|
|
},
|
|
},
|
|
}, // end: css
|
|
|
|
esbuild : {
|
|
// FIXME: missing CCS sourcemaps!!
|
|
sourcemap: true
|
|
},
|
|
|
|
build: {
|
|
manifest: "manifest.json",
|
|
emptyOutDir: true,
|
|
assetsDir: "",
|
|
outDir: PATH.dist,
|
|
|
|
// FIXME: missing CCS sourcemaps!!
|
|
sourcemap: true,
|
|
|
|
// https://vite.dev/config/build-options.html#build-cssminify
|
|
cssMinify: true,
|
|
// cssMinify: "esbuild",
|
|
minify: "esbuild",
|
|
|
|
rollupOptions: {
|
|
input: {
|
|
|
|
// build CSS files
|
|
"css/searxng.min.css": PATH.src + "/less/style-ltr.less",
|
|
"css/searxng-rtl.min.css": PATH.src + "/less/style-rtl.less",
|
|
"css/rss.min.css": PATH.src + "/less/rss.less",
|
|
|
|
// build JS files
|
|
"js/searxng.head.min": PATH.src + "/js/searxng.head.js",
|
|
"js/searxng.min": PATH.src + "/js/searxng.js",
|
|
|
|
},
|
|
|
|
// file naming conventions / pathnames are relative to outDir (PATH.dist)
|
|
output: {
|
|
entryFileNames: "[name].js",
|
|
chunkFileNames: "[name].js",
|
|
assetFileNames: "[name].[ext]",
|
|
// Vite does not support "rollupOptions.output.sourcemap".
|
|
// Please use "build.sourcemap" instead.
|
|
// sourcemap: true,
|
|
},
|
|
|
|
},
|
|
}, // end: build
|
|
|
|
plugins: [
|
|
|
|
// Leaflet
|
|
|
|
viteStaticCopy({
|
|
targets: [
|
|
{ src: PATH.leaflet + "/leaflet.{js,js.map}", dest: PATH.dist + "/js" },
|
|
{ src: PATH.leaflet + "/images/*.png", dest: PATH.dist + "/css/images/" },
|
|
{ src: PATH.leaflet + "/*.{css,css.map}", dest: PATH.dist + "/css" },
|
|
{ src: PATH.static + "/**/*", dest: PATH.dist },
|
|
]
|
|
}),
|
|
|
|
// -- svg images
|
|
|
|
plg_svg2svg(
|
|
[
|
|
{ src: PATH.src + "/svg/empty_favicon.svg", dest: PATH.dist + "/img/empty_favicon.svg" },
|
|
{ src: PATH.src + "/svg/select-dark.svg", dest: PATH.dist + "/img/select-dark.svg" },
|
|
{ src: PATH.src + "/svg/select-light.svg", dest: PATH.dist + "/img/select-light.svg" },
|
|
],
|
|
svg2svg_opts,
|
|
),
|
|
|
|
// SearXNG brand (static)
|
|
|
|
plg_svg2png(
|
|
[
|
|
{ src: PATH.brand + "/searxng-wordmark.svg", dest: PATH.dist + "/img/favicon.png" },
|
|
{ src: PATH.brand + "/searxng.svg", dest: PATH.dist + "/img/searxng.png" },
|
|
],
|
|
),
|
|
|
|
// -- svg
|
|
plg_svg2svg(
|
|
[
|
|
{ src: PATH.brand + "/searxng.svg", dest: PATH.dist + "/img/searxng.svg" },
|
|
{ src: PATH.brand + "/img_load_error.svg", dest: PATH.dist + "/img/img_load_error.svg" },
|
|
],
|
|
svg2svg_opts,
|
|
),
|
|
|
|
// -- favicon
|
|
plg_svg2svg(
|
|
[ { src: PATH.brand + "/searxng-wordmark.svg", dest: PATH.dist + "/img/favicon.svg" } ],
|
|
svg2svg_favicon_opts,
|
|
),
|
|
|
|
// -- simple templates
|
|
plg_svg2svg(
|
|
[
|
|
{ src: PATH.brand + "/searxng-wordmark.svg", dest: PATH.templates + "/searxng-wordmark.min.svg" },
|
|
],
|
|
svg2svg_opts
|
|
),
|
|
|
|
] // end: plugins
|
|
|
|
});
|