unbrew/src/index.ts

86 lines
2.0 KiB
TypeScript
Raw Normal View History

2020-05-11 01:12:35 +02:00
#!/usr/bin/env node
2021-04-29 17:35:59 +02:00
import cp from 'child_process'
import chalk from 'chalk'
import inquirer from 'inquirer'
2020-05-11 00:53:00 +02:00
2020-11-07 13:22:31 +01:00
const { version } = require('../package.json')
2020-05-11 00:53:00 +02:00
function checkIfBrewIsInstalled() {
try {
cp.execSync('brew --version')
return true
} catch (e) {
return false
}
}
2021-04-29 17:35:59 +02:00
function getListOfLeaves(): string[] {
2020-05-11 00:53:00 +02:00
const list = cp.execSync('brew leaves', { encoding: 'utf-8' })
return list.trim().split('\n')
}
2021-04-29 17:35:59 +02:00
function getLoosers(keepers: string[], leaves = getListOfLeaves()): string[] {
2020-05-11 18:14:32 +02:00
return leaves.filter((leave) => !keepers.includes(leave))
2020-05-11 00:53:00 +02:00
}
async function main() {
if (!checkIfBrewIsInstalled()) {
console.log(chalk.red.underline('Brew not installed'))
return
}
2021-08-17 11:37:09 +02:00
console.log(`${chalk.bold.blue('UnBrew')} - Brew cleanup utility\nVersion: ${version}\n`)
2020-05-11 00:53:00 +02:00
2021-04-29 17:35:59 +02:00
let leaves: string[]
let loosers: string[]
2020-05-11 18:14:32 +02:00
leaves = getListOfLeaves()
2020-05-11 00:53:00 +02:00
const { keepers } = await inquirer.prompt([
{
type: 'checkbox',
2020-05-11 18:14:32 +02:00
message: 'Select packages to keep (all by default)',
2020-05-11 00:53:00 +02:00
name: 'keepers',
2020-05-11 18:14:32 +02:00
choices: leaves.map((leave) => ({
2020-05-11 00:53:00 +02:00
name: leave,
checked: true,
})),
},
])
2020-05-11 18:14:32 +02:00
loosers = getLoosers(keepers, leaves)
2020-12-29 21:35:49 +01:00
if (loosers.length === 0) {
console.log(chalk.bold('No package/s selected for deletion.'))
return
}
2020-05-11 18:14:32 +02:00
const { confirmed } = await inquirer.prompt([
{
type: 'confirm',
name: 'confirmed',
message: `Delelte: ${chalk.bold.blue(loosers.join(' '))}`,
},
])
2020-05-11 00:53:00 +02:00
2020-05-11 18:14:32 +02:00
if (!confirmed) {
console.log(chalk.bold.red('Aborted'))
return
}
2020-08-27 17:52:38 +02:00
console.log('🗑 Uninstalling')
2021-04-29 17:35:59 +02:00
const allLoosers: string[] = []
2020-05-11 18:14:32 +02:00
while (loosers.length) {
2020-11-07 13:11:11 +01:00
allLoosers.push(...loosers)
2020-05-11 01:12:35 +02:00
const joinedLoosers = loosers.join(' ')
cp.execSync(`brew uninstall ${joinedLoosers}`)
2020-05-11 18:14:32 +02:00
loosers = getLoosers(keepers)
2020-05-11 01:12:35 +02:00
}
2020-11-07 13:11:11 +01:00
console.log('✅ Uninstalled: ' + allLoosers.join(', '))
2020-05-11 18:14:32 +02:00
2020-05-11 00:53:00 +02:00
console.log('🧽 Cleaning up')
cp.execSync(`brew cleanup`)
2020-05-11 18:14:32 +02:00
2020-05-11 00:53:00 +02:00
console.log(chalk.bold.green('🚀 Done'))
}
2020-12-29 21:35:49 +01:00
main().finally(() => {
console.log(chalk.blue('Bye Bye 👋'))
})