| 
									
										
										
										
											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-24 21:57:09 +03:00
										 |  |  |  *  | 
					
						
							|  |  |  |  * A side purpose is to generate a fake `package.json` file in the `dist` directory | 
					
						
							|  |  |  |  * that contains only the native dependencies. This is used by `electron-forge`. | 
					
						
							| 
									
										
										
										
											2025-05-01 12:45:42 +03:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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-24 21:57:09 +03:00
										 |  |  |         author: packageJson.author, | 
					
						
							|  |  |  |         license: packageJson.license, | 
					
						
							|  |  |  |         description: packageJson.description, | 
					
						
							| 
									
										
										
										
											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(); |