text: const fs = require('fs')
  const path = require('path')
  
  module.exports = [
    {
      name: 'awsProfile',
      type: 'list',
      message: 'How do you want to authenticate with AWS?',
      default: '0',
      choices: (_) => {
        let profileNames = ['Environment variables: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, etc.']
        let credentialsPath = path.join(require('os').homedir(), '.aws', 'credentials')
  
        if (fs.existsSync(credentialsPath)) {
          let credentials = fs.readFileSync(credentialsPath, 'utf8')
  
          let profileNameRegexp = new RegExp(/^\[([0-9a-zA-Z-]*)]?/gm)
  
          let match = profileNameRegexp.exec(credentials)
          while (match != null) {
            profileNames.push('Profile: ' + match[1])
            match = profileNameRegexp.exec(credentials)
          }
        }
  
        return profileNames
      },
      filter: answer => {
        if (answer.startsWith('Environment variables:')) {
          return 'default'
        } else {
          return answer.replace('Profile: ', '')
        }
      }
    },
    {
      name: 'region',
      type: 'input',
      message: 'Which AWS region hosts the bucket?',
      default: 'us-east-1'
    },
    {
      name: 'bucket',
      type: 'input',
      message: 'Name of the S3 bucket:',
      validate: input => input !== '' ? true : 'A bucket name is required.'
    },
    {
      name: 'createBucket',
      type: 'confirm',
      message: 'Create bucket if it does not exist?',
      default: true
    },
    {
      name: 'staticHosting',
      type: 'confirm',
      message: 'Enable Static Site Hosting on bucket?',
      default: true
    },
    {
      name: 'staticIndexPage',
      type: 'input',
      message: 'Filename of static index page:',
      default: 'index.html',
      when: answers => answers.staticHosting === true,
      validate: input => input !== '' ? true : 'A filename is required.'
    },
    {
      name: 'staticErrorPage',
      type: 'input',
      message: 'Filename of static error page:',
      default: 'index.html',
      when: answers => answers.staticHosting === true,
      validate: input => input !== '' ? true : 'A filename is required.'
    },
    {
      name: 'assetPath',
      type: 'input',
      message: 'Where are your built files?',
      default: 'dist'
    },
    {
      name: 'assetMatch',
      type: 'input',
      message: 'Which files should be deployed?',
      default: '**'
    },
    {
      name: 'deployPath',
      type: 'input',
      message: 'Where in the bucket should the files be deployed?',
      default: '/'
    },
    {
      name: 'acl',
      type: 'list',
      choices: ['private', 'public-read', 'public-read-write', 'aws-exec-read', 'authenticated-read', 'bucket-owner-read', 'bucket-owner-full-control'],
      message: 'Which Access Control List (ACL) setting should be applied to deployed files?',
      default: 'public-read'
    },
    {
      name: 'pwa',
      type: 'confirm',
      message: 'Enable PWA deploy (disables caching of certain files) options?',
      default: false
    },
    {
      name: 'pwaFiles',
      type: 'input',
      message: 'Disable caching on which files (comma-separated)?',
      default: 'service-worker.js',
      validate: input => input !== '' ? true : 'At least one file path is requires.',
      when: answers => answers.pwa === true
    },
    {
      name: 'enableCloudfront',
      type: 'confirm',
      message: 'Enable invalidation of a CloudFront distribution on deploy?',
      default: false
    },
    {
      name: 'cloudfrontId',
      type: 'input',
      message: 'What is the ID of the distribution to invalidate?',
      default: '',
      when: answers => answers.enableCloudfront === true,
      validate: input => input !== '' ? true : 'A distribution ID is required.'
    },
    {
      name: 'cloudfrontMatchers',
      type: 'input',
      message: 'Enter a comma-separated list of paths to invalidate:',
      default: '/*',
      when: answers => answers.enableCloudfront === true,
      validate: input => input !== '' ? true : 'At least one invalidation path is required. To invalidate all files, enter /* '
    },
    {
      name: 'cacheControl',
      type: 'input',
      message: 'Set cache-control metadata for all uploads.',
      default: 'max-age=86400'
    },
    {
      name: 'gzip',
      type: 'confirm',
      message: 'Enable GZIP compression?',
      default: false
    },
    {
      name: 'gzipFilePattern',
      type: 'input',
      message: 'Files matching this pattern will be gzipped. Note: image files such as .png, .jpg and .gif should not be gzipped.',
      default: '**/*.{js,css,json,ico,map,xml,txt,svg,eot,ttf,woff,woff2}',
      when: answers => answers.gzip === true
    }
  ]
  