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.
39 lines
1.0 KiB
39 lines
1.0 KiB
import { ScriptLine, define } from "./types.js" |
|
|
|
type EnvConfig = { |
|
useOnCd: boolean |
|
logLevel: string |
|
corepackEnabled: boolean |
|
resolveEngines: boolean |
|
} |
|
export type HasEnv = { env(cfg: Partial<EnvConfig>): ScriptLine } |
|
|
|
function stringify(envConfig: Partial<EnvConfig> = {}) { |
|
const { useOnCd, logLevel, corepackEnabled, resolveEngines } = envConfig |
|
return [ |
|
`fnm env`, |
|
useOnCd && "--use-on-cd", |
|
logLevel && `--log-level=${logLevel}`, |
|
corepackEnabled && "--corepack-enabled", |
|
resolveEngines && `--resolve-engines`, |
|
] |
|
.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`, |
|
}), |
|
}
|
|
|