From 077fd12ec3f451b7a988492a462b90a9448a91c6 Mon Sep 17 00:00:00 2001 From: Daniel Scalzi Date: Mon, 29 Jul 2019 22:31:11 -0400 Subject: [PATCH] Add empty prototype commands. --- src/index.ts | 122 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 104 insertions(+), 18 deletions(-) diff --git a/src/index.ts b/src/index.ts index 491745f..fb68f06 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,31 +2,117 @@ import { resolve } from 'path' import yargs from 'yargs' -function positionalRoot(yargs: yargs.Argv) { - return yargs.positional('root', { - describe: 'File structure root', - type: 'string' +function rootOption(yargs: yargs.Argv) { + return yargs.option('root', { + describe: 'File structure root.', + type: 'string', + demandOption: true, + global: true }) + .coerce({ + root: resolve + }) +} + +// ------------- +// Init Commands + +const initRootCommand: yargs.CommandModule = { + command: 'root', + describe: 'Generate an empty standard file structure.', + builder: (yargs) => { + yargs = rootOption(yargs) + return yargs + }, + handler: (argv) => { + console.log(`Root set to ${argv.root}`) + console.log('Invoked init root.') + } +} + +const initCommand: yargs.CommandModule = { + command: 'init', + aliases: ['i'], + describe: 'Base init command.', + builder: (yargs) => { + return yargs + .command(initRootCommand) + }, + handler: (argv) => { + argv._handled = true + } +} + +// ----------------- +// Generate Commands + +const generateServerCommand: yargs.CommandModule = { + command: 'server ', + describe: 'Generate a new server configuration.', + builder: (yargs) => { + yargs = rootOption(yargs) + return yargs + .positional('id', { + describe: 'Server id.', + type: 'string' + }) + .positional('version', { + describe: 'Minecraft version.', + type: 'string' + }) + .option('forge', { + describe: 'Include Forge.', + type: 'boolean', + default: true + }) + .option('liteloader', { + describe: 'Include liteloader.', + type: 'boolean', + default: false + }) + }, + handler: (argv) => { + console.log(`Root set to ${argv.root}`) + console.log(`Generating server ${argv.id} for Minecraft ${argv.version}.`, + `\n\t├ Include forge: ${argv.forge}`, + `\n\t└ Include liteloader: ${argv.liteloader}`) + } +} + +const generateDistroCommand: yargs.CommandModule = { + command: 'distro', + describe: 'Generate a distribution index from the root file structure.', + builder: (yargs) => { + yargs = rootOption(yargs) + return yargs + }, + handler: (argv) => { + console.log(`Root set to ${argv.root}`) + console.log('Invoked generate distro.') + } +} + +const generateCommand: yargs.CommandModule = { + command: 'generate', + aliases: ['g'], + describe: 'Base generate command.', + builder: (yargs) => { + return yargs + .command(generateServerCommand) + .command(generateDistroCommand) + }, + handler: (argv) => { + argv._handled = true + } } // Registering yargs configuration. // tslint:disable-next-line:no-unused-expression yargs +.version(false) .scriptName('') -.coerce({ - root: resolve -}) -.command({ - command: 'generate server ', - aliases: ['g'], - describe: 'Generate a distribution.json', - builder: (yargs) => { - return positionalRoot(yargs) - }, - handler: (argv) => { - console.log(`got generate with root=${argv.root}`) - } -}) +.command(initCommand) +.command(generateCommand) .demandCommand() .help() .argv