Files
kontextwerk/esbuild.config.js
2025-10-02 17:27:06 +00:00

126 lines
3.4 KiB
JavaScript

const fs = require("fs")
const { copy } = require("esbuild-plugin-copy")
const resolvePlugin = {
name: "resolvePlugin",
setup(build) {
let path = require("path")
build.onResolve({ filter: /.*/, namespace: "fakecss" }, (args) => {
if (args.path.match(/^\./)) return { path: path.dirname(args.importer) + "/" + 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: "external",
hydratable: true,
dev: (process.argv?.length > 2 ? process.argv[2] : "build") !== "build",
},
preprocess: svelteConfig.preprocess,
cache: false,
filterWarnings: (warning) => {
// filter out a11y
if (warning.code.match(/^a11y/)) return false
if (warning.code === "element_invalid_self_closing_tag") 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,
copy({
assets: {
from: "./frontend/serviceworker.js",
to: "service-worker.js",
},
}),
],
mainFields: ["svelte", "browser", "module", "main"],
conditions: ["svelte", "browser"],
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({
pathFilter: "/api",
target: apiBase,
pathRewrite: { "^/api": "" },
changeOrigin: true,
logLevel: "debug",
})
)
}
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,
}),
],
},
ghostMode: false,
open: false,
// logLevel: "debug",
},
}