186 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			186 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**
 | 
						|
 * CONFIG: https://vite.dev/config/
 | 
						|
 */
 | 
						|
 | 
						|
import { resolve } from "node:path";
 | 
						|
import { defineConfig } from "vite";
 | 
						|
import stylelint from "vite-plugin-stylelint";
 | 
						|
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: [
 | 
						|
 | 
						|
    stylelint({
 | 
						|
      build: true,
 | 
						|
      emitWarningAsError: true,
 | 
						|
      fix: true,
 | 
						|
    }),
 | 
						|
 | 
						|
    // 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
 | 
						|
 | 
						|
});
 |