UNPKG

@appium/docutils

Version:

Documentation generation utilities for Appium and related projects

156 lines (149 loc) 4.04 kB
/** * Yargs command module for the `init` command. * @module */ import type {CommandModule, InferredOptionTypes, Options} from 'yargs'; import {init} from '../../init'; import {getLogger} from '../../logger'; import {stopwatch} from '../../util'; import {checkMissingPaths} from '../check'; const log = getLogger('init'); enum InitCommandGroup { MkDocs = 'MkDocs Config:', Paths = 'Custom Paths:', Behavior = 'Initialization Behavior:', } /** * Note the groups here; _some_ opts are paths and would usually be checked via * {@linkcode checkMissingPaths}, but in this case we do not care if the path exists or not, because * we may create it. */ const opts = { copyright: { description: 'Copyright notice', group: InitCommandGroup.MkDocs, nargs: 1, requiresArg: true, type: 'string', implies: 'mkdocs', }, dir: { default: '.', defaultDescription: '(current directory)', description: 'Directory of package', group: InitCommandGroup.Paths, normalize: true, type: 'string', }, 'dry-run': { describe: 'Do not write any files; show what would be done', group: InitCommandGroup.Behavior, type: 'boolean', }, force: { alias: 'f', describe: 'Overwrite existing configurations', group: InitCommandGroup.Behavior, type: 'boolean', }, mkdocs: { default: true, description: 'Create mkdocs.yml if needed', group: InitCommandGroup.Behavior, type: 'boolean', }, 'mkdocs-yml': { defaultDescription: './mkdocs.yml', description: 'Path to new or existing mkdocs.yml', group: InitCommandGroup.MkDocs, nargs: 1, normalize: true, requiresArg: true, type: 'string', implies: 'mkdocs', }, 'package-json': { defaultDescription: './package.json', describe: 'Path to existing package.json', group: InitCommandGroup.Paths, nargs: 1, normalize: true, requiresArg: true, type: 'string', }, python: { default: true, description: 'Install Python dependencies if needed', group: InitCommandGroup.Behavior, type: 'boolean', }, 'python-path': { defaultDescription: '(derived from shell)', description: 'Path to python 3 executable', group: InitCommandGroup.Paths, nargs: 1, normalize: true, requiresArg: true, type: 'string', implies: 'python', }, 'repo-name': { defaultDescription: '(derived from --repo-url)', description: 'Name of extension repository', group: InitCommandGroup.MkDocs, nargs: 1, requiresArg: true, type: 'string', implies: 'mkdocs', }, 'repo-url': { defaultDescription: '(from package.json)', description: 'URL of extension repository', group: InitCommandGroup.MkDocs, nargs: 1, requiresArg: true, type: 'string', implies: 'mkdocs', }, 'site-description': { defaultDescription: '(from package.json)', description: 'Site description', group: InitCommandGroup.MkDocs, nargs: 1, requiresArg: true, type: 'string', implies: 'mkdocs', }, 'site-name': { defaultDescription: '(extension package name)', description: 'Name of site', group: InitCommandGroup.MkDocs, nargs: 1, requiresArg: true, type: 'string', implies: 'mkdocs', }, upgrade: { alias: 'up', describe: 'Only upgrade Python dependencies if out-of-date', group: InitCommandGroup.Behavior, type: 'boolean', conflicts: 'force', implies: 'python', }, } as const satisfies Record<string, Options>; type InitOptions = InferredOptionTypes<typeof opts>; export default { command: 'init', describe: 'Initialize package for doc generation', builder(yargs) { return yargs .options(opts) .check(async (argv) => checkMissingPaths(opts, InitCommandGroup.Paths, argv)); }, async handler(args) { const done = stopwatch('init'); await init({...args, overwrite: args.force, cwd: args.dir}); log.success('Done (%dms)', done()); }, } as CommandModule<object, InitOptions>;