#!/usr/bin/env node
/**
* Bundle src/api.js, src/pack-shared.js and src/background.js into a single
* classic (non-module) background.js for Firefox MV3, which does not support
* background.service_worker or type:"module" (event-page scripts run as
* classic scripts sharing one scope).
*
* Usage: node tools/bundle-background.js <build-dir>
*/
const fs = require("fs");
const path = require("path");
const dir = process.argv[2];
if (!dir) {
console.error("build dir argument required");
process.exit(1);
}
const apiPath = path.join(dir, "src", "api.js");
const packPath = path.join(dir, "src", "pack-shared.js");
const bgPath = path.join(dir, "src", "background.js");
// Strip ES module keywords so the result is valid as a classic script.
const api = fs.readFileSync(apiPath, "utf8").replace(/^export /gm, "");
const pack = fs.readFileSync(packPath, "utf8").replace(/^export /gm, "");
const bg = fs.readFileSync(bgPath, "utf8")
.replace(/^\s*import\s+.*\s+from\s+["']\.\/api\.js["'];\s*\n/m, "")
.replace(/^\s*import\s+["']\.\/pack-shared\.js["'];\s*\n/m, "");
// api.js function declarations are hoisted into the shared classic scope,
// so background.js can reference them without an import.
fs.writeFileSync(bgPath, api.trimEnd() + "\n\n" + pack.trimEnd() + "\n\n" + bg);
fs.rmSync(apiPath);
fs.rmSync(packPath);