/**
* Synchronously copies src to dest. By default, dest is overwritten if it already exists.
* @param src — A path to the source file.
* @param dest — A path to the destination file.
*/
export async function cp(src: string, dest: string, options: {
callback?: (dest: string) => void,
flags?: number,
} = {}) {
if (!fs.existsSync(src)) {
return console.log(`Source file is not exists. "${src}"`);
}
if (fs.statSync(src).isFile()) {
fs.copyFileSync(src, dest);
if (options.callback) {
await Promise.resolve(options.callback(dest));
}
return;
}
fs.mkdirSync(dest);
const files: string[] = fs.readdirSync(src);
if (files && files.length > 0) {
for (const file of files) {
await cp(path.resolve(src, file), path.resolve(dest, file), options);
}
}
}
#!/usr/bin/env node
'use strict';
const program = require('commander');
const commands = [
{
command: 'list',
aliases: ['l', '--l'],
// isDefault: true,
description: 'list dir content',
examples: [
'zzz list [-ls]'
]
},
{
command: 'remove',
alias: 'rm',
description: 'rm dir or file',
examples: [
'zzz rm <dirName|fileName>'
]
},
{
command: 'file <type>',
alias: 'f',
description: 'file operation',
examples: [
'zzz f new <fileName>',
'zzz f vim <fileName>'
]
},
]
// zzz ex -e haha
program
.command('exec <cmd>')
.alias('ex')
.description('execute the given remote cmd')
.option("-e, --exec_mode", "Which exec mode to use", true)
.option("-d, --ddd", "Which exec mode to use")
.action(function (cmd, options) {
console.log(arguments);
console.log('exec "%s" using %s mode', cmd, options.exec_mode);
}).on('--help', function () {
console.log('');
console.log('Examples:');
console.log('');
console.log(' $ deploy exec sequential');
console.log(' $ deploy exec async');
});
for (const { command, alias, aliases, isDefault, description } of commands) {
program.command(command, { isDefault })
[alias ? 'alias' : 'aliases'](alias || aliases)
.description(description)
.action((...args) => {
console.log(args.length);
console.log(command, args.join('\n\n'));
});
}
program.on('--help', () => {
console.log('----------');
console.log('\nExamples:');
console.log(commands.map(c => c.examples.map(e => ` ${e}`).join('\n')).join('\n'));
});
program.version('0.0.0').parse(process.argv);