Home Reference Source Test Repository

src/command.js

import log from 'npmlog'
import { config, nvmTestVersions, Hooks } from './api'
import { __, buildUsage } from './utils'

// set default log level to 'silly' in development NODE_ENV
if (process.env.NODE_ENV === 'development') log.level = 'silly'

/** @private */
export const command = '[versions]'

/** @private */
export const desc = __('desc')

/** @private */
export const usage = __('usage') + buildUsage({ command, desc }) +
  '\n  ' + buildUsage({ command: '<command> ', desc: __('plugin') })

/** @private */
export const builder = {
  'i': {
    alias: 'install',
    desc: __('options.install'),
    type: 'string',
    default: config.install
  },
  't': {
    alias: 'test',
    desc: __('options.test'),
    type: 'string',
    default: config.test
  },
  'D': {
    alias: 'dry-run',
    desc: __('options.dryRun'),
    type: 'boolean',
    default: false
  },
  'L': {
    alias: 'log-level',
    desc: __('options.logLevel'),
    type: 'string',
    choices: Object.keys(log.levels),
    default: log.level
  }
}

export const handler = (argv) => {
  // get versions from argv._
  const versions = argv._
  // get options
  const { install, test, dryRun, logLevel } = argv

  // set log heading & level
  log.heading = 'nvm-test'
  log.level = logLevel

  log.silly('command', 'argv:', argv)

  // define hooks
  const logVersion = (prefix, fn = log.info) => {
    return (version) => { fn(prefix, 'version', version) }
  }
  const logError = (prefix, fn = log.error) => {
    return (code, version) => {
      fn(prefix, 'error code %s for version', code, version)
    }
  }

  const pre = (versions, { install, test, dryRun }) => {
    // info the versions
    log.info('nvm-test-versions', 'versions', versions.join(', '))
    // verbose the options
    log.verbose('nvm-test-versions', 'options', { install, test, dryRun })
  }
  const error = (code) => {
    log.error('nvm-test-versions', 'error code %s', code)
  }
  const nvmInstallHooks = new Hooks({
    pre: logVersion('nvm-install', log.verbose),
    error: logError('nvm-install')
  })
  const nvmTestHooks = new Hooks({
    pre: logVersion('nvm-test', log.verbose),
    error: logError('nvm-test')
  })
  const nvmTestVersionHooks = new Hooks({
    pre: logVersion('nvm-test-version'),
    error: logError('nvm-test-version'),
    nvmInstallHooks,
    nvmTestHooks
  })
  const hooks = new Hooks({ pre, error, nvmTestVersionHooks })

  // nvm test versions
  return nvmTestVersions(versions, { install, test, dryRun }, hooks)
}