netlify-cli
Version: 
Netlify command line tool
89 lines (74 loc) • 2.57 kB
JavaScript
const { flags: flagsLib } = require('@oclif/command')
const chalk = require('chalk')
const { cli } = require('cli-ux')
const Command = require('../../utils/command')
class SitesListCommand extends Command {
  async run() {
    const { flags } = this.parse(SitesListCommand)
    const { api } = this.netlify
    if (!flags.json) {
      cli.action.start('Loading your sites')
    }
    await this.authenticate()
    await this.config.runHook('analytics', {
      eventName: 'command',
      payload: {
        command: 'sites:list',
      },
    })
    const sites = await api.listSites({ filter: 'all' })
    if (!flags.json) {
      cli.action.stop()
    }
    if (sites && sites.length !== 0) {
      const logSites = sites.map((site) => {
        const siteInfo = {
          id: site.id,
          name: site.name,
          ssl_url: site.ssl_url,
          account_name: site.account_name,
        }
        if (site.build_settings && site.build_settings.repo_url) {
          siteInfo.repo_url = site.build_settings.repo_url
        }
        return siteInfo
      })
      // Json response for piping commands
      if (flags.json) {
        const redactedSites = sites.map((site) => {
          if (site && site.build_settings) {
            delete site.build_settings.env
          }
          return site
        })
        this.logJson(redactedSites)
        return false
      }
      this.log(`
────────────────────────────┐
   Current Netlify Sites    │
────────────────────────────┘
Count: ${logSites.length}
`)
      logSites.forEach((logSite) => {
        this.log(`${chalk.greenBright(logSite.name)} - ${logSite.id}`)
        this.log(`  ${chalk.whiteBright.bold('url:')}  ${chalk.yellowBright(logSite.ssl_url)}`)
        if (logSite.repo_url) {
          this.log(`  ${chalk.whiteBright.bold('repo:')} ${chalk.white(logSite.repo_url)}`)
        }
        if (logSite.account_name) {
          this.log(`  ${chalk.whiteBright.bold('account:')} ${chalk.white(logSite.account_name)}`)
        }
        this.log(`─────────────────────────────────────────────────`)
      })
    }
  }
}
SitesListCommand.description = `List all sites you have access to`
SitesListCommand.flags = {
  json: flagsLib.boolean({
    description: 'Output site data as JSON',
  }),
  ...SitesListCommand.flags,
}
module.exports = SitesListCommand