({
cliType,
lockfileVersion,
packageJsonPackageManager,
env,
packageJsonEngines,
turboSupportsCorepackHome,
projectCreatedAt,
}: {
cliType: CliType;
lockfileVersion: number | undefined;
packageJsonPackageManager?: string | undefined;
env: { [x: string]: string | undefined };
packageJsonEngines?: PackageJson.Engines;
turboSupportsCorepackHome?: boolean | undefined;
projectCreatedAt?: number | undefined;
})
| 995 | * versions. |
| 996 | */ |
| 997 | export function getEnvForPackageManager({ |
| 998 | cliType, |
| 999 | lockfileVersion, |
| 1000 | packageJsonPackageManager, |
| 1001 | env, |
| 1002 | packageJsonEngines, |
| 1003 | turboSupportsCorepackHome, |
| 1004 | projectCreatedAt, |
| 1005 | }: { |
| 1006 | cliType: CliType; |
| 1007 | lockfileVersion: number | undefined; |
| 1008 | packageJsonPackageManager?: string | undefined; |
| 1009 | env: { [x: string]: string | undefined }; |
| 1010 | packageJsonEngines?: PackageJson.Engines; |
| 1011 | turboSupportsCorepackHome?: boolean | undefined; |
| 1012 | projectCreatedAt?: number | undefined; |
| 1013 | }) { |
| 1014 | const corepackEnabled = usingCorepack( |
| 1015 | env, |
| 1016 | packageJsonPackageManager, |
| 1017 | turboSupportsCorepackHome |
| 1018 | ); |
| 1019 | |
| 1020 | const { |
| 1021 | detectedLockfile, |
| 1022 | detectedPackageManager, |
| 1023 | path: newPath, |
| 1024 | } = getPathOverrideForPackageManager({ |
| 1025 | cliType, |
| 1026 | lockfileVersion, |
| 1027 | corepackPackageManager: packageJsonPackageManager, |
| 1028 | corepackEnabled, |
| 1029 | packageJsonEngines, |
| 1030 | projectCreatedAt, |
| 1031 | }); |
| 1032 | |
| 1033 | if (corepackEnabled) { |
| 1034 | debug( |
| 1035 | `Detected corepack use for "${packageJsonPackageManager}". Not overriding package manager version.` |
| 1036 | ); |
| 1037 | } else { |
| 1038 | debug( |
| 1039 | `Detected ${detectedPackageManager}. Added "${newPath}" to path. Based on assumed package manager "${cliType}", lockfile "${detectedLockfile}", and lockfileVersion "${lockfileVersion}"` |
| 1040 | ); |
| 1041 | } |
| 1042 | |
| 1043 | const newEnv: { [x: string]: string | undefined } = { |
| 1044 | ...env, |
| 1045 | }; |
| 1046 | |
| 1047 | const alreadyInPath = (newPath: string) => { |
| 1048 | const oldPath = env.PATH ?? ''; |
| 1049 | return oldPath.split(path.delimiter).includes(newPath); |
| 1050 | }; |
| 1051 | |
| 1052 | if (newPath && !alreadyInPath(newPath)) { |
| 1053 | // Ensure that the binaries of the detected package manager are at the |
| 1054 | // beginning of the `$PATH`. |
no test coverage detected