| 137 | } |
| 138 | |
| 139 | export function getNameFromPackageManagerField(): string | undefined { |
| 140 | const npmRegex = /^(\^)?npm(@.*)?$/; // matches "npm", "npm@...", "^npm@..." |
| 141 | try { |
| 142 | const packageJson = JSON.parse( |
| 143 | fs.readFileSync( |
| 144 | path.join(process.env.GITHUB_WORKSPACE!, 'package.json'), |
| 145 | 'utf-8' |
| 146 | ) |
| 147 | ); |
| 148 | |
| 149 | // Check devEngines.packageManager first (object or array) |
| 150 | const devPM = packageJson?.devEngines?.packageManager; |
| 151 | const devPMArray = devPM ? (Array.isArray(devPM) ? devPM : [devPM]) : []; |
| 152 | for (const obj of devPMArray) { |
| 153 | if (typeof obj?.name === 'string' && npmRegex.test(obj.name)) { |
| 154 | return 'npm'; |
| 155 | } |
| 156 | } |
| 157 | |
| 158 | // Check top-level packageManager |
| 159 | const topLevelPM = packageJson?.packageManager; |
| 160 | if (typeof topLevelPM === 'string' && npmRegex.test(topLevelPM)) { |
| 161 | return 'npm'; |
| 162 | } |
| 163 | |
| 164 | return undefined; |
| 165 | } catch { |
| 166 | return undefined; |
| 167 | } |
| 168 | } |