149 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable file
		
	
	
	
	
| #!/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 <https://www.gnu.org/licenses/>.
 | |
| */
 | |
| 
 | |
| import esbuild from "esbuild";
 | |
| 
 | |
| import { BUILD_TIMESTAMP, commonOpts, globPlugins, isStandalone, updaterDisabled, VERSION, watch } from "./common.mjs";
 | |
| 
 | |
| const defines = {
 | |
|     IS_STANDALONE: isStandalone,
 | |
|     IS_DEV: JSON.stringify(watch),
 | |
|     IS_UPDATER_DISABLED: updaterDisabled,
 | |
|     IS_WEB: false,
 | |
|     IS_EXTENSION: false,
 | |
|     VERSION: JSON.stringify(VERSION),
 | |
|     BUILD_TIMESTAMP,
 | |
| };
 | |
| 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"],
 | |
|     external: ["electron", "original-fs", ...commonOpts.external],
 | |
|     define: defines,
 | |
| };
 | |
| 
 | |
| const sourceMapFooter = s => watch ? "" : `//# sourceMappingURL=vencord://${s}.js.map`;
 | |
| const sourcemap = watch ? "inline" : "external";
 | |
| 
 | |
| await Promise.all([
 | |
|     // Discord Desktop main & renderer & preload
 | |
|     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_VESKTOP: 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_DISCORD_DESKTOP: true,
 | |
|             IS_VESKTOP: false
 | |
|         }
 | |
|     }),
 | |
|     esbuild.build({
 | |
|         ...nodeCommonOpts,
 | |
|         entryPoints: ["src/preload.ts"],
 | |
|         outfile: "dist/preload.js",
 | |
|         footer: { js: "//# sourceURL=VencordPreload\n" + sourceMapFooter("preload") },
 | |
|         sourcemap,
 | |
|         define: {
 | |
|             ...defines,
 | |
|             IS_DISCORD_DESKTOP: true,
 | |
|             IS_VESKTOP: false
 | |
|         }
 | |
|     }),
 | |
| 
 | |
|     // Vencord Desktop main & renderer & preload
 | |
|     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_VESKTOP: 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_DISCORD_DESKTOP: false,
 | |
|             IS_VESKTOP: true
 | |
|         }
 | |
|     }),
 | |
|     esbuild.build({
 | |
|         ...nodeCommonOpts,
 | |
|         entryPoints: ["src/preload.ts"],
 | |
|         outfile: "dist/vencordDesktopPreload.js",
 | |
|         footer: { js: "//# sourceURL=VencordPreload\n" + sourceMapFooter("vencordDesktopPreload") },
 | |
|         sourcemap,
 | |
|         define: {
 | |
|             ...defines,
 | |
|             IS_DISCORD_DESKTOP: false,
 | |
|             IS_VESKTOP: true
 | |
|         }
 | |
|     }),
 | |
| ]).catch(err => {
 | |
|     console.error("Build failed");
 | |
|     console.error(err.message);
 | |
|     // make ci fail
 | |
|     if (!commonOpts.watch)
 | |
|         process.exitCode = 1;
 | |
| });
 |