| 
									
										
										
										
											2025-08-31 22:30:07 +03:00
										 |  |  | import * as esbuild from "esbuild"; | 
					
						
							|  |  |  | import { join } from "path"; | 
					
						
							|  |  |  | import * as fs from "fs-extra"; | 
					
						
							| 
									
										
										
										
											2025-08-31 23:03:21 +03:00
										 |  |  | import * as child_process from "child_process"; | 
					
						
							| 
									
										
										
										
											2025-08-31 22:30:07 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | const projectDir = __dirname + "/.."; | 
					
						
							|  |  |  | const outDir = join(projectDir, "dist"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | async function build() { | 
					
						
							|  |  |  |     esbuild.build({ | 
					
						
							| 
									
										
										
										
											2025-08-31 22:43:21 +03:00
										 |  |  |         entryPoints: [ | 
					
						
							|  |  |  |             join(projectDir, "src/main.ts"), | 
					
						
							|  |  |  |             join(projectDir, "src/docker_healthcheck.ts") | 
					
						
							|  |  |  |         ], | 
					
						
							| 
									
										
										
										
											2025-08-31 22:30:07 +03:00
										 |  |  |         tsconfig: join(projectDir, "tsconfig.app.json"), | 
					
						
							|  |  |  |         platform: "node", | 
					
						
							|  |  |  |         bundle: true, | 
					
						
							|  |  |  |         outdir: outDir, | 
					
						
							| 
									
										
										
										
											2025-08-31 22:43:21 +03:00
										 |  |  |         outExtension: { | 
					
						
							|  |  |  |             ".js": ".cjs" | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2025-08-31 22:30:07 +03:00
										 |  |  |         format: "cjs", | 
					
						
							|  |  |  |         external: [ | 
					
						
							|  |  |  |             "electron", | 
					
						
							|  |  |  |             "@electron/remote", | 
					
						
							|  |  |  |             "better-sqlite3", | 
					
						
							|  |  |  |             "./xhr-sync-worker.js", | 
					
						
							|  |  |  |             "@preact/preset-vite", | 
					
						
							|  |  |  |             "vite" | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |         splitting: false, | 
					
						
							|  |  |  |         loader: { | 
					
						
							|  |  |  |             ".css": "text", | 
					
						
							|  |  |  |             ".ejs": "text" | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function copyAssets() { | 
					
						
							|  |  |  |     // Copy server assets
 | 
					
						
							| 
									
										
										
										
											2025-08-31 22:48:50 +03:00
										 |  |  |     copy("src/assets", "assets/"); | 
					
						
							| 
									
										
										
										
											2025-08-31 22:30:07 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // Copy node modules
 | 
					
						
							|  |  |  |     for (const module of [ "better-sqlite3", "bindings", "file-uri-to-path" ]) { | 
					
						
							| 
									
										
										
										
											2025-08-31 22:48:50 +03:00
										 |  |  |         copy(`node_modules/${module}`, `node_modules/${module}/`); | 
					
						
							| 
									
										
										
										
											2025-08-31 22:30:07 +03:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Copy sync worker.
 | 
					
						
							| 
									
										
										
										
											2025-08-31 22:48:50 +03:00
										 |  |  |     copy("node_modules/jsdom/lib/jsdom/living/xhr/xhr-sync-worker.js", "xhr-sync-worker.js"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Copy share templates.
 | 
					
						
							|  |  |  |     copy("../../packages/share-theme/src/templates", "share-theme/templates/"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-31 23:03:21 +03:00
										 |  |  | function buildAndCopyClient() { | 
					
						
							|  |  |  |     // Trigger the build.
 | 
					
						
							| 
									
										
										
										
											2025-08-31 23:04:18 +03:00
										 |  |  |     child_process.execSync("pnpm build", { cwd: join(projectDir, "../client"), stdio: "inherit" }); | 
					
						
							| 
									
										
										
										
											2025-08-31 23:03:21 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // Copy the artifacts.
 | 
					
						
							|  |  |  |     copy("../client/dist", "public/"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Remove unnecessary files.
 | 
					
						
							|  |  |  |     deleteFromOutput("public/webpack-stats.json"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-31 22:48:50 +03:00
										 |  |  | function copy(projectDirPath: string, outDirPath: string) { | 
					
						
							|  |  |  |     if (outDirPath.endsWith("/")) { | 
					
						
							|  |  |  |         fs.mkdirpSync(join(outDirPath)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     fs.copySync(join(projectDir, projectDirPath), join(outDir, outDirPath), { dereference: true }); | 
					
						
							| 
									
										
										
										
											2025-08-31 22:30:07 +03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-31 23:03:21 +03:00
										 |  |  | function deleteFromOutput(path: string) { | 
					
						
							|  |  |  |     fs.rmSync(join(outDir, path), { recursive: true }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-31 22:30:07 +03:00
										 |  |  | async function main() { | 
					
						
							| 
									
										
										
										
											2025-08-31 22:43:21 +03:00
										 |  |  |     fs.emptyDirSync(outDir); | 
					
						
							| 
									
										
										
										
											2025-08-31 22:30:07 +03:00
										 |  |  |     await build(); | 
					
						
							|  |  |  |     copyAssets(); | 
					
						
							| 
									
										
										
										
											2025-08-31 23:03:21 +03:00
										 |  |  |     buildAndCopyClient(); | 
					
						
							| 
									
										
										
										
											2025-08-31 22:30:07 +03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | main(); |