refactor: dedupe path lowercase helpers

This commit is contained in:
Peter Steinberger
2026-04-07 15:44:27 +01:00
parent bbcc95948e
commit c3074bd513
8 changed files with 48 additions and 21 deletions

View File

@@ -6,6 +6,7 @@ import { promisify } from "node:util";
import { danger, shouldLogVerbose } from "../globals.js";
import { markOpenClawExecEnv } from "../infra/openclaw-exec-env.js";
import { logDebug, logError } from "../logger.js";
import { normalizeLowercaseStringOrEmpty } from "../shared/string-coerce.js";
import { resolveCommandStdio } from "./spawn-utils.js";
import { resolveWindowsCommandShim } from "./windows-command.js";
@@ -17,7 +18,7 @@ function isWindowsBatchCommand(resolvedCommand: string): boolean {
if (process.platform !== "win32") {
return false;
}
const ext = path.extname(resolvedCommand).toLowerCase();
const ext = normalizeLowercaseStringOrEmpty(path.extname(resolvedCommand));
return ext === ".cmd" || ext === ".bat";
}
@@ -49,10 +50,10 @@ function resolveNpmArgvForWindows(argv: string[]): string[] | null {
if (process.platform !== "win32" || argv.length === 0) {
return null;
}
const basename = path
.basename(argv[0])
.toLowerCase()
.replace(/\.(cmd|exe|bat)$/, "");
const basename = normalizeLowercaseStringOrEmpty(path.basename(argv[0])).replace(
/\.(cmd|exe|bat)$/,
"",
);
const cliName = basename === "npx" ? "npx-cli.js" : basename === "npm" ? "npm-cli.js" : null;
if (!cliName) {
return null;
@@ -64,7 +65,7 @@ function resolveNpmArgvForWindows(argv: string[]): string[] | null {
// Fall back to npm.cmd/npx.cmd so we still route through cmd wrapper
// (avoids direct .cmd spawn EINVAL on patched Node).
const command = argv[0] ?? "";
const ext = path.extname(command).toLowerCase();
const ext = normalizeLowercaseStringOrEmpty(path.extname(command));
const shimmedCommand = ext ? command : `${command}.cmd`;
return [shimmedCommand, ...argv.slice(1)];
}

View File

@@ -1,5 +1,6 @@
import path from "node:path";
import process from "node:process";
import { normalizeLowercaseStringOrEmpty } from "../shared/string-coerce.js";
export function resolveWindowsCommandShim(params: {
command: string;
@@ -9,7 +10,7 @@ export function resolveWindowsCommandShim(params: {
if ((params.platform ?? process.platform) !== "win32") {
return params.command;
}
const basename = path.basename(params.command).toLowerCase();
const basename = normalizeLowercaseStringOrEmpty(path.basename(params.command));
if (path.extname(basename)) {
return params.command;
}