UNPKG

web-ext-deploy

Version:

A tool for deploying WebExtensions to multiple stores.

75 lines (74 loc) 2.64 kB
import chalk from "chalk"; import zipper from "zip-local"; import fs from "fs"; import path from "path"; export function getFullPath(file) { return path.resolve(process.cwd(), file); } export function getIsFileExists(file) { return fs.existsSync(getFullPath(file)); } export function isObjectEmpty(object) { return Object.keys(object).length === 0; } export function getCorrectZip(zipName) { if (!getIsFileExists("package.json")) { return zipName; } const { version = "" } = JSON.parse(fs.readFileSync("package.json", "utf8")); return zipName.replace("{version}", version); } export function getExtJson(zip) { const unzippedFs = zipper.sync.unzip(zip).memory(); const manifest = unzippedFs.read("manifest.json", "text"); return JSON.parse(manifest); } export function logSuccessfullyPublished({ extId, store, zip }) { const storeNames = { chrome: "Chrome Web Store", edge: "Edge Add-ons", firefox: "Firefox Add-ons", opera: "Opera Add-ons" }; const { name, version } = getExtJson(zip); const storeName = storeNames[store] || store; console.log(chalk.green(`Successfully updated "${extId}" (${name}) to version ${version} on ${storeName}! ✔`)); } const stepCounter = {}; export function getErrorMessage({ store, zip, error = "", actionName }) { return getVerboseMessage({ store, prefix: "Error", message: `Failed to ${actionName} ${getExtJson(zip).name}: ${error}` }); } export function getVerboseMessage({ message, prefix = "Info", store }) { stepCounter[store] = 1 + (stepCounter?.[store] ?? 0); const messageFull = `${prefix} ${store}: Step ${stepCounter[store]}) ${message}`; if (prefix === "Error") { return chalk.red(messageFull.trimStart()); } return messageFull.trim(); } export function createGitIgnoreIfNeeded(stores) { const filename = ".gitignore"; if (!fs.existsSync(filename)) { fs.writeFileSync(filename, "*.env"); return; } const gitIgnoreCurrent = fs.readFileSync(filename, "utf8"); if (gitIgnoreCurrent.includes(".env")) { if (gitIgnoreCurrent.includes("*.env")) { return; } const storesToAppend = stores.filter(store => !gitIgnoreCurrent.includes(`${store}.env`)); fs.appendFileSync(filename, storesToAppend.map(store => `${store}.env`).join("\n")); return; } fs.appendFileSync(filename, "*.env"); } export function headersToEnv(headersTotal) { return Object.entries(headersTotal) .map(([header, value]) => `${header}="${value}"`) .join("\n"); }