You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
875 B

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