cli_command_project_app-to-plugin.js

import isValidApp from '../../lib/is-valid-app.js'
import epilog from '../../lib/epilog.js'
import resolvePath from 'aneka/src/resolve-path.js'
import interactive from './app-to-plugin/interactive.js'
import readJson from '../../lib/read-json.js'
import ora from 'ora'
import delay from 'delay'
import dirNameCheck from './lib/dir-name-check.js'
import { pick } from 'lodash-es'
import { __ } from '../../lib/translate.js'
import { checkNpmName, posName, registry } from '../../lib/option.js'

/**
 * Command definition object for converting a Bajo app to a plugin.
 *
 * @memberof module:CLI/Command/Project
 * @type {TCommand}
 */
const appToPlugin = {
  command: __('%s <%s>', 'app-to-plugin', 'name'),
  aliases: ['ap'],
  describe: __('Convert app to plugin'),
  builder (yargs) {
    posName(yargs, 'New plugin name')
    checkNpmName(yargs)
    registry(yargs, 'Custom registry, will enable check-npm if set')
    yargs.epilog(epilog)
  },
  async handler (argv) {
    argv.fromDir = resolvePath(process.cwd())
    const spinner = ora(__('Check if current directory is a valid bajo app')).start()
    await delay(1000)
    if (!isValidApp(argv.fromDir)) {
      spinner.text = __('Current directory is NOT a valid bajo app')
      spinner.fail()
      process.kill(process.pid, 'SIGINT')
      return
    }
    spinner.stop()
    argv.name = argv.newName
    const cwd = await dirNameCheck(argv, `${argv.fromDir}/..`)
    const type = 'plugin'
    const pkg = readJson(`${argv.fromDir}/package.json`)
    const session = {
      pkg: pick(pkg, ['author', 'license'])
    }
    await interactive({ argv, cwd, type, session })
  }
}

export default appToPlugin