import { cp, mkdir, rm, writeFile } from "node:fs/promises"; import path from "node:path"; import { fileURLToPath } from "node:url"; import { build } from "tsup"; import { createManifest } from "./manifest.mjs"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const projectRoot = path.resolve(__dirname, ".."); const buildTarget = process.env.BUILD_TARGET === "release" ? "release" : "development"; const distDir = path.join( projectRoot, buildTarget === "release" ? "dist-release" : "dist" ); await rm(distDir, { recursive: true, force: true }); await mkdir(path.join(distDir, "content"), { recursive: true }); await mkdir(path.join(distDir, "background"), { recursive: true }); await mkdir(path.join(distDir, "popup"), { recursive: true }); await build({ entry: { index: path.join(projectRoot, "src/content/index.ts"), "market-page-bridge": path.join( projectRoot, "src/content/market/page-bridge.ts" ) }, format: ["iife"], platform: "browser", target: "chrome114", outDir: path.join(distDir, "content"), clean: false, splitting: false, sourcemap: false, minify: false, outExtension() { return { js: ".js" }; } }); await build({ entry: { index: path.join(projectRoot, "src/background/index.ts") }, format: ["iife"], platform: "browser", target: "chrome114", outDir: path.join(distDir, "background"), clean: false, splitting: false, sourcemap: false, minify: false, outExtension() { return { js: ".js" }; } }); await build({ entry: { index: path.join(projectRoot, "src/popup/index.ts") }, format: ["iife"], platform: "browser", target: "chrome114", outDir: path.join(distDir, "popup"), clean: false, splitting: false, sourcemap: false, minify: false, outExtension() { return { js: ".js" }; } }); await writeFile( path.join(distDir, "manifest.json"), `${JSON.stringify(createManifest({ target: buildTarget }), null, 2)}\n` ); await cp( path.join(projectRoot, "src/popup/index.html"), path.join(distDir, "popup/index.html") ); await cp( path.join(projectRoot, "src/assets"), path.join(distDir, "assets"), { recursive: true } );