sfdx
Version:
Performs Salesforce DX operations with ease! Life is good.
96 lines (81 loc) • 2.73 kB
JavaScript
const config = require('../config/config')
const yargsBuilder = require('../lib/yargsBuilder')
const deleteOrgs = require('./delete').handler
const fs = require('fs')
const inquirer = require('inquirer')
const joinPath = require('path').join
const shell = require('shelljs')
module.exports = {
desc: 'Deletes all non-default scratch orgs without given aliases.',
command: ['clearorgs [force|f]'],
aliases: ['cl'],
builder: yargs => {
yargs = yargsBuilder.builder(yargs)
yargs
.option('force', {
alias: ['f'],
describe: 'Do not confirm deletion of orgs',
type: 'boolean'
})
.example('$0 clearorgs', '- Delete all non-default scratch orgs without aliases')
.example('$0 cl -f', '- Forcibly deletes all non-default scratch orgs without aliases')
},
handler: argv => {
argv = yargsBuilder.handler(argv)
if (!argv.quiet) console.log('Checking the list of scratch orgs...')
const today = new Date()
const outputfile = joinPath(
config.projectPath,
'orglist-' + today.getHours() + today.getMinutes() + today.getSeconds() + '.json'
)
shell.exec('sfdx force:org:list --clean --noprompt --json > ' + outputfile)
const output = fs.readFileSync(outputfile)
const parsed = JSON.parse(output)
const scratchOrgs = parsed.result.scratchOrgs
// Remove output file at this point since it is no longer needed
shell.exec('rm -rf ' + outputfile)
let areOrgsToDelete = false
let numOrgsToDelete = 0
function checkOrgs (org) {
const deletable = !org.alias && !org.isDefaultUsername
if (deletable) {
if (!areOrgsToDelete) {
if (!argv.quiet) {
console.log()
console.log('\tScratch orgs to be deleted:')
}
areOrgsToDelete = true
}
if (!argv.quiet) console.log('\t' + (numOrgsToDelete + 1) + ':\t' + org.username)
numOrgsToDelete += 1
}
return deletable
}
let orgsToDelete = scratchOrgs.filter(checkOrgs).map(org => {
return org.username
})
if (!areOrgsToDelete) {
if (!argv.quiet) console.log('No un-named non-default scratch orgs.')
return
}
const deleteConfirmed = 'deleteAll'
argv.alias = orgsToDelete
if (!argv.force) {
inquirer
.prompt({
default: false,
message: 'Are you sure you want to delete all un-named non-default scratch orgs?',
name: deleteConfirmed,
type: 'confirm'
})
.then(answers => {
if (answers[deleteConfirmed]) {
argv.force = true
deleteOrgs(argv)
}
})
} else {
deleteOrgs(argv)
}
}
}