mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-30 02:59:03 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			100 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { execSync } from "child_process";
 | |
| import { build as esbuild } from "esbuild";
 | |
| import { cpSync, existsSync, rmSync } from "fs";
 | |
| import { copySync, emptyDirSync, mkdirpSync } from "fs-extra";
 | |
| import { join } from "path";
 | |
| 
 | |
| export default class BuildHelper {
 | |
| 
 | |
|     private rootDir: string;
 | |
|     projectDir: string;
 | |
|     outDir: string;
 | |
| 
 | |
|     constructor(projectPath: string) {
 | |
|         this.rootDir = join(__dirname, "..");
 | |
|         this.projectDir = join(this.rootDir, projectPath);
 | |
|         this.outDir = join(this.projectDir, "dist");
 | |
| 
 | |
|         emptyDirSync(this.outDir);
 | |
|     }
 | |
| 
 | |
|     copy(projectDirPath: string, outDirPath: string) {
 | |
|         let sourcePath: string;
 | |
|         if (projectDirPath.startsWith("/")) {
 | |
|             sourcePath = join(this.rootDir, projectDirPath.substring(1));
 | |
|         } else {
 | |
|             sourcePath = join(this.projectDir, projectDirPath);
 | |
|         }
 | |
| 
 | |
|         if (outDirPath.endsWith("/")) {
 | |
|             mkdirpSync(join(outDirPath));
 | |
|         }
 | |
|         copySync(sourcePath, join(this.outDir, outDirPath), { dereference: true });
 | |
|     }
 | |
| 
 | |
|     deleteFromOutput(path: string) {
 | |
|         rmSync(join(this.outDir, path), { recursive: true });
 | |
|     }
 | |
| 
 | |
|     async buildBackend(entryPoints: string[]) {
 | |
|         await esbuild({
 | |
|             entryPoints: entryPoints.map(e => join(this.projectDir, e)),
 | |
|             tsconfig: join(this.projectDir, "tsconfig.app.json"),
 | |
|             platform: "node",
 | |
|             bundle: true,
 | |
|             outdir: this.outDir,
 | |
|             outExtension: {
 | |
|                 ".js": ".cjs"
 | |
|             },
 | |
|             format: "cjs",
 | |
|             external: [
 | |
|                 "electron",
 | |
|                 "@electron/remote",
 | |
|                 "better-sqlite3",
 | |
|                 "./xhr-sync-worker.js",
 | |
|                 "vite"
 | |
|             ],
 | |
|             splitting: false,
 | |
|             loader: {
 | |
|                 ".css": "text",
 | |
|                 ".ejs": "text"
 | |
|             },
 | |
|             define: {
 | |
|                 "process.env.NODE_ENV": JSON.stringify("production"),
 | |
|             },
 | |
|             minify: true
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     triggerBuildAndCopyTo(projectToBuild: string, destPath: string) {
 | |
|         const projectDir = join(this.rootDir, projectToBuild);
 | |
|         execSync("pnpm build", { cwd: projectDir, stdio: "inherit" });
 | |
|         copySync(join(projectDir, "dist"), join(this.projectDir, "dist", destPath));
 | |
|     }
 | |
| 
 | |
|     copyNodeModules(nodeModules: string[]) {
 | |
|         for (const moduleName of nodeModules) {
 | |
|             const sourceDir = tryPath([
 | |
|                 join(this.projectDir, "node_modules", moduleName),
 | |
|                 join(this.rootDir, "node_modules", moduleName)
 | |
|             ]);
 | |
| 
 | |
|             const destDir = join(this.outDir, "node_modules", moduleName);
 | |
|             mkdirpSync(destDir);
 | |
|             cpSync(sourceDir, destDir, { recursive: true, dereference: true });
 | |
|         }
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| function tryPath(paths: string[]) {
 | |
|     for (const path of paths) {
 | |
|         if (existsSync(path)) {
 | |
|             return path;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     console.error("Unable to find any of the paths:", paths);
 | |
|     process.exit(1);
 | |
| }
 | 
