Files
NetMesh/scripts/nodePtyConptyPatch.cjs
zhaolei 3c72efcb7f
Some checks failed
build-packages / resolve bundled mosh-client (push) Has been cancelled
build-packages / resolve bundled et-client (push) Has been cancelled
build-packages / build-macos (push) Has been cancelled
build-packages / build-windows (push) Has been cancelled
build-packages / build-linux-x64 (push) Has been cancelled
build-packages / build-linux-arm64 (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / update Nix release metadata (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
test / lint-and-test (push) Has been cancelled
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
build-et-binaries / build-linux-x64 (push) Has been cancelled
build-et-binaries / build-linux-arm64 (push) Has been cancelled
build-et-binaries / build-macos-universal (push) Has been cancelled
build-et-binaries / build-windows-x64 (push) Has been cancelled
build-et-binaries / release (push) Has been cancelled
[Init] Initial commit - NetMesh terminal manager
2026-09-13 18:24:01 +08:00

93 lines
2.7 KiB
JavaScript

const fs = require("node:fs");
const path = require("node:path");
const { execFileSync } = require("node:child_process");
const ELECTRON_BUILDER_ARCH = {
0: "ia32",
1: "x64",
2: "armv7l",
3: "arm64",
4: "universal",
};
function nodePtyArtifacts(projectDir) {
const releaseDir = path.join(projectDir, "node_modules", "node-pty", "build", "Release");
return [
{ source: path.join(releaseDir, "conpty.node"), relative: "conpty.node" },
{ source: path.join(releaseDir, "conpty", "conpty.dll"), relative: path.join("conpty", "conpty.dll") },
{ source: path.join(releaseDir, "conpty", "OpenConsole.exe"), relative: path.join("conpty", "OpenConsole.exe") },
];
}
function rebuildPatchedNodePty({
projectDir,
platform,
arch,
run = execFileSync,
exists = fs.existsSync,
logger = console,
}) {
if (platform !== "win32") return false;
const targetArch = typeof arch === "number" ? ELECTRON_BUILDER_ARCH[arch] : arch;
if (!targetArch || targetArch === "universal") {
throw new Error(`[nodePtyConptyPatch] Unsupported Windows architecture: ${String(arch)}`);
}
const rebuildCli = path.join(projectDir, "node_modules", "@electron", "rebuild", "lib", "cli.js");
logger.log(`[nodePtyConptyPatch] Rebuilding patched node-pty for Windows ${targetArch}`);
run(process.execPath, [
rebuildCli,
"--force",
"--build-from-source",
"--only",
"node-pty",
"--arch",
targetArch,
], {
cwd: projectDir,
stdio: "inherit",
});
const nodePtyDir = path.join(projectDir, "node_modules", "node-pty");
run(process.execPath, [path.join(nodePtyDir, "scripts", "post-install.js")], {
cwd: projectDir,
stdio: "inherit",
env: { ...process.env, npm_config_arch: targetArch },
});
const missingArtifacts = nodePtyArtifacts(projectDir)
.map(({ source }) => source)
.filter((filePath) => !exists(filePath));
if (missingArtifacts.length > 0) {
throw new Error(
`[nodePtyConptyPatch] Patched node-pty artifacts missing: ${missingArtifacts.join(", ")}`,
);
}
return true;
}
function copyPatchedNodePtyToPackagedApp({ projectDir, resourcesDir, copy = fs.copyFileSync, mkdir = fs.mkdirSync }) {
const packagedReleaseDir = path.join(
resourcesDir,
"app.asar.unpacked",
"node_modules",
"node-pty",
"build",
"Release",
);
const copied = [];
for (const artifact of nodePtyArtifacts(projectDir)) {
const destination = path.join(packagedReleaseDir, artifact.relative);
mkdir(path.dirname(destination), { recursive: true });
copy(artifact.source, destination);
copied.push(destination);
}
return copied;
}
module.exports = {
copyPatchedNodePtyToPackagedApp,
nodePtyArtifacts,
rebuildPatchedNodePty,
};