const { build } = require("esbuild"); const { spawn } = require("child_process"); const { sassPlugin } = require("esbuild-sass-plugin"); const chokidar = require("chokidar"); const glob = require("tiny-glob"); const watch = process.argv.includes("--watch"); async function build_ts() { const entryPoints = await glob("./src/back/**/*.ts"); await build({ entryPoints, sourcemap: true, outdir: "./dist/back", logLevel: "info", platform: "node", target: "node16", format: "cjs", }); } async function complex_build(watch) { let scss_build; if (watch) { const scss_watcher = chokidar.watch("src", { ignoreInitial: true }); scss_watcher.on("all", async (_, path) => { if (!scss_build) return; if (path.endsWith(".scss") && !path.endsWith("/includes.scss")) { // refresh the list of all scss files in includes.scss spawn("./node_modules/.bin/sealgen", ["generate-scss-includes"]).on( "close", () => { try { debugger; scss_build.rebuild(); console.log(`Built main.scss [on ${path}]`); } catch (e) { console.error(e); setTimeout(() => { scss_build .rebuild() .catch((e) => conslole.error(e.message)); }, 200); } } ); } if (path.endsWith(".ts")) { await build_ts(); console.log(`Finished TS biuld [on ${path}]`); } }); } try { scss_build = await build({ entryPoints: ["./src/main.scss"], sourcemap: true, outfile: "./public/dist/style.css", logLevel: "info", incremental: watch, plugins: [sassPlugin()], }); await build_ts(); } catch (e) { console.error(e); } watch && scss_build.rebuild(); } (async () => { build({ entryPoints: ["./src/front/index.ts"], sourcemap: true, outfile: "./public/dist/bundle.js", logLevel: "info", bundle: true, watch, }); try { await complex_build(watch); } catch (e) { console.error(e.message); } })();