mmir-tooling
Version:
Build tools for MMIR projects
120 lines (95 loc) • 3.77 kB
text/typescript
import meow from 'meow';
import path from 'path';
import mmirInstall from '../utils/install-mmir-lib';
const appName = 'mmirinstall';
export function main(){
const cli = meow(`
Usage
${appName} <target directory>
Options
--force, -f force overwriting files in target directory
--src, -s source directory for mmir-lib library files
DEFAUL directory of installed mmir-lib package:
${mmirInstall.getMmirDir()}
--help show usage information
--verbose, -v show additional information
DEFAULT: false
Examples
${appName} www/mmirf
${appName} --force src/mmirf
`, {
flags: {
force: {
type: 'boolean',
alias: 'f',
default: false
},
src: {
type: 'string',
alias: 's',
default: mmirInstall.getMmirDir()
},
verbose: {
type: 'boolean',
alias: 'v',
default: false
}
}
});
// console.log(cli);
if(!cli.input || !cli.input[0]){
cli.showHelp();
return;
}
if(cli.flags.verbose){
process.env.verbose = true.toString();
}
try {
var force = cli.flags.force;
var targetDir = cli.input[0];
if(!force && !mmirInstall.canCopy(targetDir)){
console.error('[WARN] Aborted installation: target directory is not empty:');
console.error('[WARN] '+path.resolve(targetDir));
console.error('[INFO] (use option --force for overwriting existing files)')
return cli.showHelp();
}
if(!force && !mmirInstall.isStandardTarget(targetDir)){
var defDir = mmirInstall.getStandardTargetSubDir();
console.error('[WARN] Aborted installation: target directory is not '+defDir+':');
console.error('[WARN] if included in a web page via requirejs, you need to configure the');
console.error('[WARN] library\'s base path, if it is located in a non-standard sub-');
console.error('[WARN] directory, i.e. other than '+defDir);
console.error('[INFO] (use option --force for installing anyway)')
return cli.showHelp();
}
var srcDir = cli.flags.src;
if(!mmirInstall.dirExists(srcDir)){
console.error('[WARN] Cannot install: source directory does not exist, or is not a directory:');
console.error('[WARN] '+path.resolve(targetDir));
return cli.showHelp();
}
mmirInstall.copyFiles(srcDir, targetDir, force).then(function(){
console.log('finished installing mmir-lib files to '+targetDir);
}).catch(function(err){
handleError(err, cli);
})
} catch(err){
handleError(err, cli);
}
}
function handleError(err: Error, cli: meow.Result<meow.AnyFlags> & {input: string[], showHelp: ()=>void}){
console.error(`
An Error occurred for:
${appName} ${cli.input.join(' ')} -f ${cli.flags.force} -s ${cli.flags.src}
Is the directory path correct?`);
if(cli.flags.verbose)
console.error('\n ERROR Details:', err);
else
console.error(' (use flag --verbose for more details)');
console.error('\nHELP:');
cli.showHelp();
}
if(require.main === module){
main();
}