const fs = require("fs") const resolvePlugin = { name: "resolvePlugin", setup(build) { let path = require("path") // url in css does not resolve via esbuild-svelte correctly build.onResolve({ filter: /.*/, namespace: "fakecss" }, (args) => { // console.log(args) if (args.path.match(/^\./)) return { path: path.dirname(args.importer) + "/" + args.path } // return { path: path.join(args.resolveDir, "public", args.path) } }) }, } ////////////////////////// esbuild-svelte const sveltePlugin = require("esbuild-svelte") const frontendDir = "./frontend" const distDir = frontendDir + "/dist" // console.log("copy public dir...") // const copydir = require("copy-dir") // copydir.sync(__dirname + "/public", __dirname + "/" + distDir) /*copydir.sync( __dirname + "/public/index.html", __dirname + "/" + distDir + "/template.html" )*/ const svelteConfig = require("./svelte.config") const esbuildSvelte = sveltePlugin({ compilerOptions: { css: false, hydratable: true, dev: (process.argv?.length > 2 ? process.argv[2] : "build") !== "build", }, preprocess: svelteConfig.preprocess, cache: true, filterWarnings: (warning) => { // filter out a11y if (warning.code.match(/^a11y/)) return false return true }, }) const options = { logLevel: "info", color: true, entryPoints: ["./frontend/src/index.ts"], outfile: distDir + "/index.mjs", metafile: true, format: "esm", minify: process.argv[2] == "build", bundle: true, splitting: false, plugins: [esbuildSvelte, resolvePlugin], loader: { ".woff2": "file", ".woff": "file", ".eot": "file", ".svg": "file", ".ttf": "file", }, sourcemap: true, target: ["es2020", "chrome61", "firefox60", "safari11", "edge18"], } const bsMiddleware = [] if (process.argv[2] == "start") { const { createProxyMiddleware } = require("http-proxy-middleware") const dotEnv = fs.readFileSync(__dirname + "/.env", "utf8") const TIBI_NAMESPACE = dotEnv.match(/TIBI_NAMESPACE=(.*)/)[1] const apiBase = process.env.API_BASE || "http://localhost:8080/api/v1/_/" + TIBI_NAMESPACE bsMiddleware.push( createProxyMiddleware("/api", { target: apiBase, pathRewrite: { "^/api": "" }, changeOrigin: true, logLevel: "debug", }) ) // if SSR env variable is set console.log(process.env, "=========================ENV") if (process.env.SSR) { // read api/config.yml.env and read SSR_TOKEN variable from it const configEnv = fs.readFileSync(__dirname + "/api/config.yml.env", "utf8") const SSR_TOKEN = configEnv.match(/SSR_TOKEN=(.*)/)[1] // redirect all other requests to /api/ssr?token=owshwerNwoa&url=... bsMiddleware.push( createProxyMiddleware( function (path, req) { return !path.match(/\./) }, { target: apiBase, changeOrigin: true, logLevel: "debug", pathRewrite: function (path, req) { console.log(path) return "/ssr?token=" + SSR_TOKEN + "&url=" + encodeURIComponent(path) }, } ) ) } } module.exports = { sveltePlugin: sveltePlugin, resolvePlugin: resolvePlugin, options: options, distDir, watch: { path: [__dirname + "/" + frontendDir + "/src/**/*"], }, serve: { onRequest(args) { console.log(args) }, }, browserSync: { server: { baseDir: frontendDir, middleware: [ require("morgan")("dev"), ...bsMiddleware, require("connect-history-api-fallback")({ index: "/spa.html", // verbose: true, }), ], }, open: false, // logLevel: "debug", }, }