mirror of
https://github.com/larksuite/cli.git
synced 2026-07-03 22:24:31 +08:00
73 lines
2.0 KiB
JavaScript
Executable File
73 lines
2.0 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
// Copyright (c) 2026 Lark Technologies Pte. Ltd.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
const { execFileSync } = require("child_process");
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
|
|
const ext = process.platform === "win32" ? ".exe" : "";
|
|
const bin = path.join(__dirname, "..", "bin", "lark-cli" + ext);
|
|
|
|
// On Windows, a crashed self-update may have left the binary renamed to .old.
|
|
// Recover it before proceeding so the CLI remains functional.
|
|
const oldBin = bin + ".old";
|
|
function restoreOldBinary() {
|
|
try {
|
|
if (fs.existsSync(bin)) {
|
|
fs.rmSync(bin, { force: true });
|
|
}
|
|
fs.renameSync(oldBin, bin);
|
|
return true;
|
|
} catch (_) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if (process.platform === "win32" && fs.existsSync(oldBin)) {
|
|
if (!fs.existsSync(bin)) {
|
|
restoreOldBinary();
|
|
} else {
|
|
try {
|
|
execFileSync(bin, ["--version"], { stdio: "ignore", timeout: 10000 });
|
|
try {
|
|
fs.rmSync(oldBin, { force: true });
|
|
} catch (_) {
|
|
// Best-effort cleanup; keep running the healthy binary.
|
|
}
|
|
} catch (_) {
|
|
restoreOldBinary();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Intercept "install" subcommand — run the setup wizard directly,
|
|
// bypassing the native binary (which may not exist yet under npx).
|
|
const args = process.argv.slice(2);
|
|
if (args[0] === "install") {
|
|
require("./install-wizard.js");
|
|
} else {
|
|
// Auto-download binary if missing (e.g. npx skipped postinstall).
|
|
if (!fs.existsSync(bin)) {
|
|
try {
|
|
execFileSync(process.execPath, [path.join(__dirname, "install.js")], {
|
|
stdio: "inherit",
|
|
env: { ...process.env, LARK_CLI_RUN: "true" },
|
|
});
|
|
} catch (_) {
|
|
console.error(
|
|
`\nFailed to auto-install lark-cli binary.\n` +
|
|
`To fix, run the install script manually:\n` +
|
|
` node "${path.join(__dirname, "install.js")}"\n`
|
|
);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
try {
|
|
execFileSync(bin, args, { stdio: "inherit" });
|
|
} catch (e) {
|
|
process.exit(e.status || 1);
|
|
}
|
|
}
|