UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

40 lines (39 loc) • 1.68 kB
import path from "node:path"; import os from "node:os"; //#region packages/normalization-core/src/home-dir.ts function normalizeHomeDirValue(value) { const trimmed = value?.trim(); return trimmed && trimmed !== "undefined" && trimmed !== "null" ? trimmed : void 0; } function normalizeSafe(homedir) { try { return normalizeHomeDirValue(homedir()); } catch { return; } } function resolveTermuxHome(env) { const prefix = normalizeHomeDirValue(env.PREFIX); if (!prefix || !normalizeHomeDirValue(env.ANDROID_DATA)) return; if (!/(?:^|\/)com\.termux\/files\/usr\/?$/u.test(prefix.replace(/\\/gu, "/"))) return; return path.resolve(prefix, "..", "home"); } function resolveRawOsHomeDir(env, homedir) { return normalizeHomeDirValue(env.HOME) ?? normalizeHomeDirValue(env.USERPROFILE) ?? resolveTermuxHome(env) ?? normalizeSafe(homedir); } function resolveOsHomeDir(env = process.env, homedir = os.homedir) { const raw = resolveRawOsHomeDir(env, homedir); return raw ? path.resolve(raw) : void 0; } function resolveEffectiveHomeDir(env = process.env, homedir = os.homedir, options) { const explicitHome = normalizeHomeDirValue(env.OPENCLAW_HOME); if (!explicitHome) return resolveOsHomeDir(env, homedir); if (explicitHome === "~" || explicitHome.startsWith("~/") || explicitHome.startsWith("~\\")) { const osHome = resolveRawOsHomeDir(env, homedir); if (!osHome) return options?.preserveUnresolvedTilde ? path.resolve(explicitHome) : void 0; return path.resolve(explicitHome.replace(/^~(?=$|[\\/])/, () => osHome)); } return path.resolve(explicitHome); } //#endregion export { resolveEffectiveHomeDir as n, resolveOsHomeDir as r, normalizeHomeDirValue as t };