#!/usr/bin/node /* * Vencord, a modification for Discord's desktop app * Copyright (c) 2022 Vendicated and contributors * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ import esbuild from "esbuild"; import { commonOpts, globPlugins, isStandalone, watch } from "./common.mjs"; const defines = { IS_STANDALONE: isStandalone, IS_DEV: JSON.stringify(watch) }; if (defines.IS_STANDALONE === "false") // If this is a local build (not standalone), optimise // for the specific platform we're on defines["process.platform"] = JSON.stringify(process.platform); /** * @type {esbuild.BuildOptions} */ const nodeCommonOpts = { ...commonOpts, format: "cjs", platform: "node", target: ["esnext"], minify: true, bundle: true, external: ["electron", ...commonOpts.external], define: defines, }; const sourceMapFooter = s => watch ? "" : `//# sourceMappingURL=vencord://${s}.js.map`; const sourcemap = watch ? "inline" : "external"; await Promise.all([ // common preload esbuild.build({ ...nodeCommonOpts, entryPoints: ["src/preload.ts"], outfile: "dist/preload.js", footer: { js: "//# sourceURL=VencordPreload\n" + sourceMapFooter("preload") }, sourcemap, }), // Discord Desktop main & renderer esbuild.build({ ...nodeCommonOpts, entryPoints: ["src/main/index.ts"], outfile: "dist/patcher.js", footer: { js: "//# sourceURL=VencordPatcher\n" + sourceMapFooter("patcher") }, sourcemap, define: { ...defines, IS_DISCORD_DESKTOP: true, IS_VENCORD_DESKTOP: false } }), esbuild.build({ ...commonOpts, entryPoints: ["src/Vencord.ts"], outfile: "dist/renderer.js", format: "iife", target: ["esnext"], footer: { js: "//# sourceURL=VencordRenderer\n" + sourceMapFooter("renderer") }, globalName: "Vencord", sourcemap, plugins: [ globPlugins("discordDesktop"), ...commonOpts.plugins ], define: { ...defines, IS_WEB: false, IS_DISCORD_DESKTOP: true, IS_VENCORD_DESKTOP: false } }), // Vencord Desktop main & renderer esbuild.build({ ...nodeCommonOpts, entryPoints: ["src/main/index.ts"], outfile: "dist/vencordDesktopMain.js", footer: { js: "//# sourceURL=VencordDesktopMain\n" + sourceMapFooter("vencordDesktopMain") }, sourcemap, define: { ...defines, IS_DISCORD_DESKTOP: false, IS_VENCORD_DESKTOP: true } }), esbuild.build({ ...commonOpts, entryPoints: ["src/Vencord.ts"], outfile: "dist/vencordDesktopRenderer.js", format: "iife", target: ["esnext"], footer: { js: "//# sourceURL=VencordDesktopRenderer\n" + sourceMapFooter("vencordDesktopRenderer") }, globalName: "Vencord", sourcemap, plugins: [ globPlugins("vencordDesktop"), ...commonOpts.plugins ], define: { ...defines, IS_WEB: false, IS_DISCORD_DESKTOP: false, IS_VENCORD_DESKTOP: true } }), ]).catch(err => { console.error("Build failed"); console.error(err.message); // make ci fail if (!commonOpts.watch) process.exitCode = 1; });