naiv-qr/scripts/build.mjs
Ole-Morten Duesund e953a55571 Document the extension and add MIT LICENSE
User-verified that v0.1.0 works in Firefox. Closing out the work with
the documentation the AMO reviewer (and future-me) will want:

- LICENSE: MIT, 2026. Matches the vendored qrcode-generator's license.
- package.json: add license + author fields.
- README: add "What you see" UX section, supported-versions rationale,
  ASCII build-flow diagram, AMO publishing notes, permissions table.
- popup/popup.js: top-of-file block documenting the popup lifecycle and
  the dataflow from active-tab URL to rendered QR.
- scripts/build.mjs: top-of-file block explaining why dist/ is the
  single source of truth for what ships.

Closes dogcat epic firefox-share-as-qr-35mw and all 5 child tasks
(see .dogcats/issues.jsonl).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 16:12:34 +02:00

40 lines
1.3 KiB
JavaScript

// Build entry point. Run via `bun run build` (or transitively via
// `bun run lint` / `package` / `start`).
//
// Output: a self-contained `dist/` directory that web-ext consumes as its
// sourceDir. The bundler inlines `vendor/qrcode.js` into the popup script
// (via the ESM import in popup.js), so the published extension is one JS
// file plus the static HTML/CSS/icon/license assets.
//
// Anything outside `dist/` never ships, so this script is the single source
// of truth for "what is the extension."
import { rm, cp } from "node:fs/promises";
const DIST = "dist";
await rm(DIST, { recursive: true, force: true });
const result = await Bun.build({
entrypoints: ["popup/popup.js"],
outdir: `${DIST}/popup`,
target: "browser",
format: "esm",
minify: true,
});
if (!result.success) {
for (const log of result.logs) console.error(log);
process.exit(1);
}
await Promise.all([
cp("manifest.json", `${DIST}/manifest.json`),
cp("popup/popup.html", `${DIST}/popup/popup.html`),
cp("popup/popup.css", `${DIST}/popup/popup.css`),
cp("icons", `${DIST}/icons`, { recursive: true }),
cp("vendor/LICENSE.qrcode-generator", `${DIST}/LICENSE.qrcode-generator`),
]);
const size = (await Bun.file(`${DIST}/popup/popup.js`).arrayBuffer()).byteLength;
console.log(`Built ${DIST}/ (popup.js: ${(size / 1024).toFixed(1)} KB)`);