diff --git a/build.js b/build.js new file mode 100755 index 0000000..0487f99 --- /dev/null +++ b/build.js @@ -0,0 +1,42 @@ +#!/usr/bin/env node + +import { argv, env } from "node:process"; +import { cp, mkdir, rm } from "fs/promises"; +import { dirname, join } from "path"; +import { fileURLToPath } from "url"; +import { chromeifyManifestFile } from "./chromeifyManifest.impl.js"; +import webExt from "web-ext"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); +const __main = argv[1] === __filename; +const distDir = join(__dirname, "dist"); +const distManifest = join(distDir, "manifest.json"); +const srcDir = join(__dirname, "src"); +const chrome = argv.includes("--chrome") || /yes|true|1/i.test(env.CHROME || ""); + +async function main() { + await rm(distDir, {recursive: true, force: true}); + await mkdir(distDir); + await cp(srcDir, distDir, {recursive: true}); + + let filename; + + if (chrome) { + await chromeifyManifestFile(distManifest); + filename = "{name}-{version}-chrome.zip"; + } else { + filename = "{name}-{version}.zip"; + } + + await webExt.cmd.build({ + artifactsDir: "web-ext-artifacts", + sourceDir: distDir, + overwriteDest: true, + filename: filename, + }); +} + +if (__main) { + main().catch(console.error); +} diff --git a/build.sh b/build.sh deleted file mode 100755 index 79d1019..0000000 --- a/build.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh - -set -e -set -v - -rm -fr dist/ -mkdir dist -cp -a src/. dist/ - -if [ x$CHROME = xyes ]; then - ./chromeifyManifest.js src/manifest.json > dist/manifest.json - rm dist/background.html - - FILENAME="{name}-{version}-chrome.zip" -else - FILENAME="{name}-{version}.zip" -fi - -npx web-ext build --overwrite-dest --filename "$FILENAME" diff --git a/chromeifyManifest.impl.js b/chromeifyManifest.impl.js index 89672eb..499fa5b 100644 --- a/chromeifyManifest.impl.js +++ b/chromeifyManifest.impl.js @@ -1,3 +1,5 @@ +import { readFile, writeFile } from "fs/promises"; + export function chromeifyManifest(manifest) { manifest["manifest_version"] = 3; manifest["minimum_chrome_version"] = "97"; @@ -16,26 +18,9 @@ export function chromeifyManifest(manifest) { return manifest; } -export function parseArgs(args) { - switch (args.length) { - case 0: - return ["-", "-"]; - case 1: - return [args[0], "-"]; - default: - return [args[0], args[1]]; - } -} - -export function transformStream(instream, outstream) { - const chunks = []; - - instream.on("data", (data) => chunks.push(data)); - instream.on("end", function() { - const manifest = chromeifyManifest(JSON.parse(chunks.join(""))); +export async function chromeifyManifestFile(path) { + const options = {"encoding": "utf-8"}; + const manifest = chromeifyManifest(JSON.parse(await readFile(path, options))); - outstream.write(JSON.stringify(manifest, null, 4)); - outstream.end("\n"); - }); - instream.resume(); + await writeFile(path, JSON.stringify(manifest, null, 4), options); } diff --git a/chromeifyManifest.js b/chromeifyManifest.js deleted file mode 100755 index eb8c1b1..0000000 --- a/chromeifyManifest.js +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env node -/* eslint-env node */ - -import fs from "fs"; - -import { parseArgs, transformStream } from "./chromeifyManifest.impl.js"; - -const [infile, outfile] = parseArgs(process.argv.slice(2)); -const instream = (infile === "-") ? process.stdin : fs.createReadStream(infile); -const outstream = (outfile === "-") ? process.stdout : fs.createWriteStream(outfile); - -transformStream(instream, outstream); diff --git a/package.json b/package.json index 686d442..588212b 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,8 @@ "scripts": { "test": "mocha", "coverage": "c8 mocha", - "build": "./build.sh", - "buildChrome": "CHROME=yes ./build.sh" + "build": "./build.js", + "buildChrome": "./build.js --chrome" }, "exports": { "./*": "./src/*"