2025-05-01 12:45:42 +03:00
|
|
|
/**
|
|
|
|
* @module
|
|
|
|
*
|
|
|
|
* This script is used internally by the `rebuild-deps` target of the `desktop`. Normally we could use
|
|
|
|
* `electron-rebuild` CLI directly, but it would rebuild the monorepo-level dependencies and breaks
|
|
|
|
* the server build (and it doesn't expose a CLI option to override this).
|
|
|
|
*/
|
|
|
|
|
2025-05-07 08:44:07 +03:00
|
|
|
import { join, resolve } from "path";
|
2025-05-02 23:24:32 +03:00
|
|
|
import { rebuild } from "@electron/rebuild"
|
2025-05-23 17:50:09 +03:00
|
|
|
import { readFileSync, rmSync, writeFileSync } from "fs";
|
2025-05-01 12:45:42 +03:00
|
|
|
|
2025-05-23 17:50:09 +03:00
|
|
|
const nativeDependencies = [
|
|
|
|
"better-sqlite3"
|
|
|
|
];
|
2025-05-05 09:52:26 +03:00
|
|
|
|
2025-05-23 17:50:09 +03:00
|
|
|
function parsePackageJson(distDir: string) {
|
|
|
|
const packageJsonPath = join(distDir, "../package.json");
|
2025-05-01 12:45:42 +03:00
|
|
|
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
2025-05-23 17:50:09 +03:00
|
|
|
let electronVersion: string;
|
|
|
|
|
|
|
|
if (process.argv[3]) {
|
|
|
|
electronVersion = process.argv[3];
|
|
|
|
} else {
|
|
|
|
electronVersion = packageJson?.devDependencies?.electron ?? packageJson?.dependencies?.electron;
|
|
|
|
if (!electronVersion) {
|
|
|
|
console.error(`Unable to retrieve Electron version in '${resolve(packageJsonPath)}'.`);
|
|
|
|
process.exit(3);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return {
|
|
|
|
electronVersion,
|
2025-05-24 14:29:24 +03:00
|
|
|
packageJson
|
2025-05-23 17:50:09 +03:00
|
|
|
};
|
|
|
|
}
|
2025-05-07 09:03:54 +08:00
|
|
|
|
2025-05-24 14:29:24 +03:00
|
|
|
function createFakePackageJson(distPath: string, packageJson: any) {
|
2025-05-23 17:50:09 +03:00
|
|
|
const finalDependencies = {};
|
|
|
|
for (const dep of nativeDependencies) {
|
2025-05-24 14:29:24 +03:00
|
|
|
finalDependencies[dep] = packageJson.dependencies[dep];
|
2025-05-07 08:44:07 +03:00
|
|
|
}
|
2025-05-07 09:03:54 +08:00
|
|
|
|
2025-05-24 14:29:24 +03:00
|
|
|
const fakePackageJson: any = {
|
2025-05-23 17:50:09 +03:00
|
|
|
name: "trilium",
|
2025-05-24 14:29:24 +03:00
|
|
|
version: packageJson.version,
|
|
|
|
main: packageJson.main,
|
2025-05-23 17:50:09 +03:00
|
|
|
dependencies: finalDependencies,
|
2025-05-24 21:50:18 +03:00
|
|
|
devDependencies: {
|
|
|
|
"electron": packageJson.devDependencies?.electron || packageJson.dependencies?.electron,
|
|
|
|
}
|
2025-05-23 17:50:09 +03:00
|
|
|
};
|
2025-05-24 14:29:24 +03:00
|
|
|
if (packageJson?.config?.forge) {
|
|
|
|
fakePackageJson.config = {
|
|
|
|
forge: join("..", packageJson.config.forge)
|
|
|
|
};
|
|
|
|
}
|
2025-05-23 17:50:09 +03:00
|
|
|
writeFileSync(distPath, JSON.stringify(fakePackageJson, null, 2), "utf-8");
|
2025-05-01 12:45:42 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function main() {
|
2025-05-07 08:44:07 +03:00
|
|
|
const distDir = resolve(process.argv[2]);
|
2025-05-06 09:09:56 +03:00
|
|
|
if (!distDir) {
|
|
|
|
console.error("Missing root dir as argument.");
|
|
|
|
process.exit(1);
|
|
|
|
}
|
2025-05-05 09:52:26 +03:00
|
|
|
|
2025-05-24 14:29:24 +03:00
|
|
|
const { electronVersion, packageJson } = parsePackageJson(distDir);
|
2025-05-23 17:50:09 +03:00
|
|
|
const packageJsonPath = join(distDir, "package.json");
|
2025-05-24 14:29:24 +03:00
|
|
|
createFakePackageJson(packageJsonPath, packageJson);
|
2025-05-23 17:50:09 +03:00
|
|
|
|
2025-05-06 09:09:56 +03:00
|
|
|
console.log(`Rebuilding ${distDir} with version ${electronVersion}...`);
|
2025-05-01 12:45:42 +03:00
|
|
|
|
2025-05-24 14:29:24 +03:00
|
|
|
rebuild({
|
|
|
|
// We force the project root path to avoid electron-rebuild from rebuilding the monorepo-level dependency and breaking the server.
|
|
|
|
projectRootPath: distDir,
|
|
|
|
buildPath: distDir,
|
|
|
|
force: true,
|
|
|
|
electronVersion,
|
|
|
|
});
|
2025-05-01 12:45:42 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
main();
|