diff --git a/src/cli.ts b/src/cli.ts index e5ecfee3..c10c672f 100755 --- a/src/cli.ts +++ b/src/cli.ts @@ -16,6 +16,7 @@ import {Logger} from '@openstapps/logger'; import * as commander from 'commander'; import {readFileSync} from 'fs'; import {join} from 'path'; +import { URL } from 'url'; import {copy} from './copy'; import {HttpClient} from './httpClient'; @@ -31,36 +32,53 @@ process.on('unhandledRejection', (error) => { }); commander - .command('copy ') + .command('copy ') .version(pkgJson.version) .description('Copy data from one instance to another') .option( - '-s, --bulkSource [bulkSource]', + '-s, --bulkSource ', 'The source identifier for the bulk to use with the target instance [copy]', 'copy', ) - .option('-t, --type ', 'The type to request from the source instance') // TODO: remove - .option('-a, --appVersion [version]', 'The App version to use [unset by default]') - .option('-b, --batchSize ', 'Number of items per batch') + .option('-a, --appVersion ', 'The App version to use [unset by default]') .allowUnknownOption(false) - .action((from, to, copyCommand) => { - actionDone = true; + .action((type, from, to, batchSize, copyCommand) => { - if (typeof copyCommand.type === 'undefined') { - logger.error(' argument is required'); + // validate type + if (typeof type !== 'string') { + logger.error('expected parameter "type" to be of type: string'); copyCommand.outputHelp(); process.exit(-1); } - logger.info('Copying ' + copyCommand.type + ' objects from ' + from + ' to ' + to); + // validate urls + try { + from = (new URL(from)).toString(); + to = (new URL(to)).toString(); + } catch (err) { + logger.error('expected parameters "from" and "to" to be valid urls', err); + copyCommand.outputHelp(); + process.exit(-1); + } + + // validate batchSize + if (isNaN(parseInt(batchSize, 10))) { + logger.error('expected parameter "batchSize" to be of type: number'); + copyCommand.outputHelp(); + process.exit(-1); + } + + actionDone = true; + + logger.info('Copying ' + type + ' objects from ' + from + ' to ' + to); copy(client, { - batchSize: parseInt(copyCommand.batchSize, 10), + batchSize: parseInt(batchSize, 10), from: from, source: copyCommand.bulkSource, to: to, - type: copyCommand.type, + type: type, version: copyCommand.appVersion, }).then(() => { logger.ok('Done');