mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-02 19:36:12 +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);
 | 
						|
}
 |