import { ScriptLine, define } from "./types.js" type EnvConfig = { useOnCd: boolean logLevel: string corepackEnabled: boolean } export type HasEnv = { env(cfg: Partial): ScriptLine } function stringify(envConfig: Partial = {}) { const { useOnCd, logLevel, corepackEnabled } = envConfig return [ `fnm env`, useOnCd && "--use-on-cd", logLevel && `--log-level=${logLevel}`, corepackEnabled && "--corepack-enabled", ] .filter(Boolean) .join(" ") } export const cmdEnv = { bash: define({ env: (envConfig) => `eval "$(${stringify(envConfig)})"`, }), fish: define({ env: (envConfig) => `${stringify(envConfig)} | source`, }), powershell: define({ env: (envConfig) => `${stringify(envConfig)} | Out-String | Invoke-Expression`, }), wincmd: define({ env: (envConfig) => `FOR /f "tokens=*" %i IN ('${stringify(envConfig)}') DO CALL %i`, }), }