104 lines
3.1 KiB
JavaScript
104 lines
3.1 KiB
JavaScript
/* eslint-disable */
|
|
const esbuild = require("esbuild");
|
|
const chokidar = require("chokidar");
|
|
const { debounce } = require("lodash");
|
|
const copyDir = require("copy-dir");
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
|
|
const package = require("./package.json");
|
|
|
|
function ensureFolder(path) {
|
|
if (!fs.existsSync(path)) {
|
|
fs.mkdirSync(path);
|
|
}
|
|
}
|
|
|
|
function deleteFolder(path) {
|
|
if (fs.existsSync(path)) {
|
|
fs.rmSync(path, {recursive: true});
|
|
}
|
|
}
|
|
|
|
function readJson(path) {
|
|
return JSON.parse(fs.readFileSync(path, "utf-8"));
|
|
}
|
|
|
|
async function main(dev) {
|
|
const buildDir = path.join(process.cwd(), "builds");
|
|
const distDir = path.join(process.cwd(), "dist");
|
|
const buildVersionDir = path.join(buildDir, `${package.name}-v${package.version}`.replace(/ /g, "-"));
|
|
const fromAssetsDir = path.join(process.cwd(), "assets");
|
|
const toAssetsDir = path.join(buildVersionDir, "assets");
|
|
const manifestTemplateLocation = path.join(process.cwd(), "manifest.template.json");
|
|
const userScriptTemplateLocation = path.join(process.cwd(), "user-script.template.js");
|
|
const userScriptOutput = path.join(distDir, "user-script.js");
|
|
const manifestLocation = path.join(buildVersionDir, "manifest.json");
|
|
|
|
const scriptInput = path.join(process.cwd(), "src", "index.ts");
|
|
const scriptOutput = path.join(buildVersionDir, "assets", "scripts", "content.js");
|
|
|
|
deleteFolder(distDir);
|
|
ensureFolder(buildDir);
|
|
ensureFolder(distDir);
|
|
deleteFolder(buildVersionDir);
|
|
ensureFolder(buildVersionDir);
|
|
copyDir.sync(fromAssetsDir, toAssetsDir);
|
|
|
|
const common = {
|
|
entryPoints: [scriptInput],
|
|
bundle: true,
|
|
minify: !dev,
|
|
platform: "browser",
|
|
}
|
|
|
|
await esbuild.build({
|
|
...common,
|
|
sourcemap: !dev,
|
|
define: {
|
|
DEV: JSON.stringify(dev),
|
|
ENVIRONMENT: JSON.stringify("browser-extension")
|
|
},
|
|
outfile: scriptOutput,
|
|
});
|
|
|
|
const manifest = readJson(manifestTemplateLocation);
|
|
manifest.version = package.version;
|
|
fs.writeFileSync(manifestLocation, JSON.stringify(manifest))
|
|
|
|
await esbuild.build({
|
|
...common,
|
|
define: {
|
|
DEV: JSON.stringify(dev),
|
|
ENVIRONMENT: JSON.stringify("user-script")
|
|
},
|
|
outfile: userScriptOutput,
|
|
});
|
|
|
|
const code = fs.readFileSync(userScriptOutput, "utf-8");
|
|
let template = fs.readFileSync(userScriptTemplateLocation, "utf-8");
|
|
const date = new Date();
|
|
const version = `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, "0")}-${(date.getDate() + 1).toString().padStart(2, "0")}`;
|
|
template = template.replace("$VERSION$", version);
|
|
template += code;
|
|
fs.writeFileSync(userScriptOutput, template);
|
|
}
|
|
|
|
const dev = process.argv.includes("--dev");
|
|
main(dev);
|
|
|
|
if (dev) {
|
|
const fn = debounce(() => {
|
|
main();
|
|
console.log("Built");
|
|
}, 1000);
|
|
|
|
chokidar.watch("./src").on("unlink", (event, path) => {
|
|
fn();
|
|
}).on("unlinkDir", (event, path) => {
|
|
fn();
|
|
}).on("change", (event, path) => {
|
|
fn();
|
|
})
|
|
console.log("Watching ./src");
|
|
} |