Files
t3code-flake/packages/patches/build-nix-desktop-package.mjs
T
2026-04-24 19:55:33 +03:00

98 lines
3.1 KiB
JavaScript

#!/usr/bin/env node
import * as FS from "node:fs";
import * as Path from "node:path";
class BuildNixDesktopPackageError extends Error {
constructor(message) {
super(message);
this.name = "BuildNixDesktopPackageError";
}
}
function parseArgs(argv) {
let outputDir;
for (let index = 0; index < argv.length; index += 1) {
const arg = argv[index];
if (arg === "--output-dir") {
outputDir = argv[index + 1];
index += 1;
}
}
if (!outputDir) {
throw new BuildNixDesktopPackageError("Missing required --output-dir argument.");
}
return { outputDir };
}
function assertPathExists(path, description) {
if (!FS.existsSync(path)) {
throw new BuildNixDesktopPackageError(
`Missing ${description} at ${path}. Run 'bun run build:desktop' first.`,
);
}
}
function readJson(path) {
return JSON.parse(FS.readFileSync(path, "utf8"));
}
function main() {
const { outputDir } = parseArgs(process.argv.slice(2));
const repoRoot = process.cwd();
const packagedAppDir = Path.resolve(repoRoot, outputDir);
const rootPackageJson = readJson(Path.join(repoRoot, "package.json"));
const desktopPackageJson = readJson(Path.join(repoRoot, "apps/desktop/package.json"));
const serverPackageJson = readJson(Path.join(repoRoot, "apps/server/package.json"));
const desktopDistDir = Path.join(repoRoot, "apps/desktop/dist-electron");
const desktopResourcesDir = Path.join(repoRoot, "apps/desktop/resources");
const serverDistDir = Path.join(repoRoot, "apps/server/dist");
const bundledClientIndex = Path.join(serverDistDir, "client/index.html");
assertPathExists(desktopDistDir, "desktop bundle");
assertPathExists(Path.join(desktopDistDir, "main.cjs"), "desktop main entry");
assertPathExists(Path.join(desktopDistDir, "preload.cjs"), "desktop preload entry");
assertPathExists(desktopResourcesDir, "desktop resources");
assertPathExists(serverDistDir, "server bundle");
assertPathExists(Path.join(serverDistDir, "bin.mjs"), "server entry");
assertPathExists(bundledClientIndex, "bundled desktop web client");
FS.rmSync(packagedAppDir, { recursive: true, force: true });
FS.mkdirSync(Path.join(packagedAppDir, "apps/desktop"), { recursive: true });
FS.mkdirSync(Path.join(packagedAppDir, "apps/server"), { recursive: true });
FS.cpSync(desktopDistDir, Path.join(packagedAppDir, "apps/desktop/dist-electron"), {
recursive: true,
});
FS.cpSync(desktopResourcesDir, Path.join(packagedAppDir, "apps/desktop/resources"), {
recursive: true,
});
FS.cpSync(serverDistDir, Path.join(packagedAppDir, "apps/server/dist"), {
recursive: true,
});
const packageJson = {
name: "t3code",
version: serverPackageJson.version ?? desktopPackageJson.version,
private: true,
description: "T3 Code desktop build",
author: "T3 Tools",
main: "apps/desktop/dist-electron/main.cjs",
t3codeCommitHash: "unknown",
packageManager: rootPackageJson.packageManager,
};
FS.writeFileSync(
Path.join(packagedAppDir, "package.json"),
`${JSON.stringify(packageJson, null, 2)}\n`,
"utf8",
);
}
main();