Files
2023-04-20 01:24:08 +02:00

71 lines
2.0 KiB
JavaScript

import { context } from "esbuild";
import { cpSync, existsSync, readdirSync, rmSync } from "fs";
import vencordDep from "./vencordDep.mjs";
import Config from "../config.json" assert { type: "json" };
import { join } from "path";
const plugins = readdirSync("./plugins");
const isDev = process.argv.includes("--dev");
const watch = process.argv.includes("--watch");
const contexts = await Promise.all(
plugins.map(p =>
context({
entryPoints: [`./plugins/${p}`],
outfile: `dist/${p}.js`,
format: "iife",
globalName: "VencordPlugin",
jsxFactory: "Vencord.Webpack.Common.React.createElement",
jsxFragment: "Vencord.Webpack.Common.React.Fragment",
external: ["@vencord/types/*"],
plugins: [vencordDep],
footer: { js: `return VencordPlugin;\n//# sourceURL=${encodeURI(p)}` },
minify: !isDev,
bundle: true,
sourcemap: "linked",
logLevel: "info",
tsconfig: "./build/tsconfig.json"
})
)
);
function deploy() {
const { autoDeploy, vencordDataDir } = Config;
if (!autoDeploy) return;
if (!existsSync(vencordDataDir)) {
console.warn("Vencord data directory does not exist:", vencordDataDir);
console.warn("Thus, deployment is skipped");
console.warn("You can fix this by editing config.json");
return;
}
if (autoDeploy && existsSync(vencordDataDir)) {
const pluginDir = join(vencordDataDir, "plugins");
rmSync(pluginDir, {
recursive: true,
force: true
});
cpSync("dist", pluginDir, {
recursive: true
});
console.log("Deployed Plugins to", pluginDir);
}
}
if (watch) {
await Promise.all(contexts.map(ctx => ctx.watch()));
} else {
await Promise.all(
contexts.map(async ctx => {
await ctx.rebuild();
await ctx.dispose();
})
);
deploy();
}