mirror of
https://github.com/chatmail/core.git
synced 2026-05-04 13:56:30 +03:00
fix(@deltachat/stdio-rpc-server): fix version check when deltachat-rpc-server is found in path (#5579)
This commit is contained in:
@@ -22,10 +22,6 @@ import {
|
|||||||
import package_json from "./package.json" with { type: "json" };
|
import package_json from "./package.json" with { type: "json" };
|
||||||
import { createRequire } from "node:module";
|
import { createRequire } from "node:module";
|
||||||
|
|
||||||
// exports
|
|
||||||
// - [ ] a raw starter that has a stdin/out handle thingie like desktop uses
|
|
||||||
// - [X] a function that already wraps the stdio handle from above into the deltachat jsonrpc bindings
|
|
||||||
|
|
||||||
function findRPCServerInNodeModules() {
|
function findRPCServerInNodeModules() {
|
||||||
const arch = os.arch();
|
const arch = os.arch();
|
||||||
const operating_system = process.platform;
|
const operating_system = process.platform;
|
||||||
@@ -43,6 +39,32 @@ function findRPCServerInNodeModules() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns {Promise<string>}
|
||||||
|
*/
|
||||||
|
async function getLocationInPath() {
|
||||||
|
const exec = promisify(execFile);
|
||||||
|
|
||||||
|
if (os.platform() === "win32") {
|
||||||
|
const { stdout: executable } = await exec("where", [PATH_EXECUTABLE_NAME], {
|
||||||
|
shell: true,
|
||||||
|
});
|
||||||
|
return executable;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const { stdout: executable } = await exec(
|
||||||
|
"command",
|
||||||
|
["-v", PATH_EXECUTABLE_NAME],
|
||||||
|
{ shell: true }
|
||||||
|
);
|
||||||
|
return executable;
|
||||||
|
} catch (error) {
|
||||||
|
if (error.code > 0) return "";
|
||||||
|
else throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** @type {import("./index").FnTypes.getRPCServerPath} */
|
/** @type {import("./index").FnTypes.getRPCServerPath} */
|
||||||
export async function getRPCServerPath(
|
export async function getRPCServerPath(
|
||||||
options = { skipSearchInPath: false, disableEnvPath: false }
|
options = { skipSearchInPath: false, disableEnvPath: false }
|
||||||
@@ -65,19 +87,18 @@ export async function getRPCServerPath(
|
|||||||
|
|
||||||
// 2. check if it can be found in PATH
|
// 2. check if it can be found in PATH
|
||||||
if (!process.env[SKIP_SEARCH_IN_PATH] && !skipSearchInPath) {
|
if (!process.env[SKIP_SEARCH_IN_PATH] && !skipSearchInPath) {
|
||||||
const exec = promisify(execFile);
|
const executable = await getLocationInPath();
|
||||||
|
|
||||||
const { stdout: executable } =
|
|
||||||
os.platform() !== "win32"
|
|
||||||
? await exec("command", ["-v", PATH_EXECUTABLE_NAME])
|
|
||||||
: await exec("where", [PATH_EXECUTABLE_NAME]);
|
|
||||||
|
|
||||||
// by just trying to execute it and then use "command -v deltachat-rpc-server" (unix) or "where deltachat-rpc-server" (windows) to get the path to the executable
|
// by just trying to execute it and then use "command -v deltachat-rpc-server" (unix) or "where deltachat-rpc-server" (windows) to get the path to the executable
|
||||||
if (executable.length > 1) {
|
if (executable.length > 1) {
|
||||||
// test if it is the right version
|
// test if it is the right version
|
||||||
try {
|
try {
|
||||||
// for some unknown reason it is in stderr and not in stdout
|
// for some unknown reason it is in stderr and not in stdout
|
||||||
const { stderr } = await promisify(execFile)(executable, ["--version"]);
|
const { stderr } = await promisify(execFile)(
|
||||||
|
executable,
|
||||||
|
["--version"],
|
||||||
|
{ shell: true }
|
||||||
|
);
|
||||||
const version = stderr.slice(0, stderr.indexOf("\n"));
|
const version = stderr.slice(0, stderr.indexOf("\n"));
|
||||||
if (package_json.version !== version) {
|
if (package_json.version !== version) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
|
|||||||
Reference in New Issue
Block a user