text: const path = require('path')
  const fs = require('fs')
  
  const {
    sortDependencies,
    installDependencies,
    runLintFix,
    printMessage,
  } = require('./utils')
  const pkg = require('./package.json')
  
  const templateVersion = pkg.version
  
  const { addTestAnswers } = require('./scenarios')
  
  module.exports = {
    metalsmith: {
      // When running tests for the template, this adds answers for the selected scenario
      before: addTestAnswers
    },
    helpers: {
      if_or(v1, v2, options) {
  
        if (v1 || v2) {
          return options.fn(this)
        }
  
        return options.inverse(this)
      },
      template_version() {
        return templateVersion
      },
    },
    
    prompts: {
      name: {
        when: 'isNotTest',
        type: 'string',
        required: true,
        message: '项目名称',
      },
      description: {
        when: 'isNotTest',
        type: 'string',
        required: false,
        message: '项目描述',
        default: '基本Vue的前端项目',
      },
      author: {
        when: 'isNotTest',
        type: 'string',
        message: '作者',
      },
      build: {
        when: 'isNotTest',
        type: 'list',
        message: 'Vue 构建',
        choices: [
          {
            name: '运行时 + 编译器: 推荐给大多数用户',
            value: 'standalone',
            short: 'standalone',
          },
          {
            name:'仅运行时: 约6KB min + gzip, 但只允许在模板 (或任何Vue特定的 HTML)中. Vue文件需要在其他地方渲染',
            value: 'runtime',
            short: 'runtime',
          },
        ],
      },
      router: {
        when: 'isNotTest',
        type: 'confirm',
        message: '是否安装路由(vue-router)?',
      },
      lint: {
        when: 'isNotTest',
        type: 'confirm',
        message: '是否使用ESLint检查代码?',
      },
      lintConfig: {
        when: 'isNotTest && lint',
        type: 'list',
        message: '选择ESLint规范',
        choices: [
          {
            name: 'Standard',
            value: 'standard',
            short: 'Standard',
          },
          {
            name: 'Airbnb',
            value: 'airbnb',
            short: 'Airbnb',
          },
          {
            name: 'none (configure it yourself)',
            value: 'none',
            short: 'none',
          },
        ],
      },
      unit: {
        when: 'isNotTest',
        type: 'confirm',
        message: '设置单元测试',
      },
      runner: {
        when: 'isNotTest && unit',
        type: 'list',
        message: '选择测试工具',
        choices: [
          {
            name: 'Jest',
            value: 'jest',
            short: 'jest',
          },
          {
            name: 'Karma and Mocha',
            value: 'karma',
            short: 'karma',
          },
          {
            name: 'none (configure it yourself)',
            value: 'noTest',
            short: 'noTest',
          },
        ],
      },
      e2e: {
        when: 'isNotTest',
        type: 'confirm',
        message: '是否使用Nightwatch进行e2e测试?',
      }
    },
    filters: {
      '.eslintrc.js': 'lint',
      '.eslintignore': 'lint',
      'config/test.env.js': 'unit || e2e',
      'build/webpack.test.conf.js': "unit && runner === 'karma'",
      'test/unit/**/*': 'unit',
      'test/unit/index.js': "unit && runner === 'karma'",
      'test/unit/jest.conf.js': "unit && runner === 'jest'",
      'test/unit/karma.conf.js': "unit && runner === 'karma'",
      'test/unit/specs/index.js': "unit && runner === 'karma'",
      'test/unit/setup.js': "unit && runner === 'jest'",
      'test/e2e/**/*': 'e2e',
      'src/router/**/*': 'router',
    },
    complete: function(data, { chalk }) {
      const green = chalk.green
  
      sortDependencies(data, green)
  
      const cwd = path.join(process.cwd(), data.inPlace ? '' : data.destDirName)
  
      if (data.autoInstall) {
        installDependencies(cwd, data.autoInstall, green)
          .then(() => {
            return runLintFix(cwd, data, green)
          })
          .then(() => {
            printMessage(data, green)
          })
          .catch(e => {
            console.log(chalk.red('Error:'), e)
          })
      } else {
        printMessage(data, chalk)
      }
    },
  }
  