UNPKG

@pnp/cli-microsoft365

Version:

Manage Microsoft 365 and SharePoint Framework projects on any platform

94 lines 5.38 kB
const packageCommands = { npm: { install: 'npm i -SE', installDev: 'npm i -DE', installLockFile: 'npm i', uninstall: 'npm un -S', uninstallDev: 'npm un -D', override: 'npm pkg set', removeOverride: 'npm pkg delete' }, pnpm: { install: 'pnpm i -E', installDev: 'pnpm i -DE', installLockFile: 'pnpm i', uninstall: 'pnpm un', uninstallDev: 'pnpm un', override: 'pnpm pkg set', removeOverride: 'pnpm pkg delete' }, yarn: { install: 'yarn add -E', installDev: 'yarn add -DE', uninstall: 'yarn remove', uninstallDev: 'yarn remove' // Yarn is not supported for project upgrade since their CLI does not support setting overrides. } }; export const packageManager = { getPackageManagerCommand(command, packageManager) { return packageCommands[packageManager][command]; }, mapPackageManagerCommand({ command, packagesDepExact, packagesDevExact, packagesDepUn, packagesDevUn, packagesOverride, packagesOverrideRemove, packageMgr }) { // matches must be in this particular order to avoid false matches, eg. // uninstallDev contains install, removeOverride contains override if (command.startsWith(`${packageManager.getPackageManagerCommand('removeOverride', packageMgr)} `)) { packagesOverrideRemove.push(command.replace(packageManager.getPackageManagerCommand('removeOverride', packageMgr), '').trim()); return; } if (command.startsWith(`${packageManager.getPackageManagerCommand('override', packageMgr)} `)) { packagesOverride.push(command.replace(packageManager.getPackageManagerCommand('override', packageMgr), '').trim()); return; } if (command.startsWith(`${packageManager.getPackageManagerCommand('uninstallDev', packageMgr)} `)) { packagesDevUn.push(command.replace(packageManager.getPackageManagerCommand('uninstallDev', packageMgr), '').trim()); return; } if (command.startsWith(`${packageManager.getPackageManagerCommand('installDev', packageMgr)} `)) { packagesDevExact.push(command.replace(packageManager.getPackageManagerCommand('installDev', packageMgr), '').trim()); return; } if (command.startsWith(`${packageManager.getPackageManagerCommand('uninstall', packageMgr)} `)) { packagesDepUn.push(command.replace(packageManager.getPackageManagerCommand('uninstall', packageMgr), '').trim()); return; } if (command.startsWith(`${packageManager.getPackageManagerCommand('install', packageMgr)} `)) { packagesDepExact.push(command.replace(packageManager.getPackageManagerCommand('install', packageMgr), '').trim()); } }, reducePackageManagerCommand({ packagesDepExact, packagesDevExact, packagesDepUn, packagesDevUn, packagesOverride, packagesOverrideRemove, packageMgr }) { const commandsToExecute = []; // removeOverride comes first to clear stale overrides before any install/uninstall // uninstall commands must come before install commands otherwise there is a // chance that whatever we recommended to install will be immediately uninstalled // override (add) comes last so it is applied after all // install/uninstall operations have completed if (packagesOverrideRemove.length > 0) { commandsToExecute.push(`${packageManager.getPackageManagerCommand('removeOverride', packageMgr)} ${packagesOverrideRemove.join(' ')}`); // removeOverride only updates package.json; run a plain install to update the lock file // only needed when no other install/uninstall commands will already update the lock file if (packagesDepUn.length === 0 && packagesDevUn.length === 0 && packagesDepExact.length === 0 && packagesDevExact.length === 0 && packagesOverride.length === 0) { commandsToExecute.push(packageManager.getPackageManagerCommand('installLockFile', packageMgr)); } } if (packagesDepUn.length > 0) { commandsToExecute.push(`${packageManager.getPackageManagerCommand('uninstall', packageMgr)} ${packagesDepUn.join(' ')}`); } if (packagesDevUn.length > 0) { commandsToExecute.push(`${packageManager.getPackageManagerCommand('uninstallDev', packageMgr)} ${packagesDevUn.join(' ')}`); } if (packagesDepExact.length > 0) { commandsToExecute.push(`${packageManager.getPackageManagerCommand('install', packageMgr)} ${packagesDepExact.join(' ')}`); } if (packagesDevExact.length > 0) { commandsToExecute.push(`${packageManager.getPackageManagerCommand('installDev', packageMgr)} ${packagesDevExact.join(' ')}`); } if (packagesOverride.length > 0) { commandsToExecute.push(`${packageManager.getPackageManagerCommand('override', packageMgr)} ${packagesOverride.join(' ')}`); // override only updates package.json; run a plain install to update the lock file commandsToExecute.push(packageManager.getPackageManagerCommand('installLockFile', packageMgr)); } return commandsToExecute; } }; //# sourceMappingURL=packageManager.js.map