templates-mo
Version:
Templates is a scaffolding framework that makes code generation simple, dynamic, and reusable. Generate files, parts of your app, or whole project structures—without the repetitive copy-pasting
89 lines (69 loc) • 1.94 kB
text/typescript
import { CommandModule } from 'yargs';
import debug from 'debug';
import Template from '@tps/templates';
import { TemplateOptions, Templates } from '@tps/templates/templates';
import * as TPS from '@tps/utilities/constants';
import {
InitializedAlreadyError,
GlobalInitializedAlreadyError,
} from '@tps/errors';
import logger from '@tps/utilities/logger';
import path from 'path';
interface InitArgv {
force: boolean;
global: boolean;
verbose: boolean;
}
export default {
command: ['init', 'i'],
builder: {
force: {
alias: 'f',
describe: 'Initialize tps in cwd no matter what',
type: 'boolean',
},
global: {
alias: 'g',
describe: 'Initialize tps globally',
type: 'boolean',
},
},
describe: 'Initialize local settings',
async handler(argv) {
if (argv.verbose) {
debug.enable('tps:cli');
}
const tpsConfig: Partial<TemplateOptions> = {
force: argv.force,
tpsPath: TPS.DEFAULT_TPS,
};
logger.cli.info('Cli options: %n', tpsConfig);
const tps = new Template('init', tpsConfig);
/**
* tps global init
*/
if (argv.global) {
logger.cli.info('Initializing Global...');
if (Templates.hasGloablTps()) {
throw new GlobalInitializedAlreadyError(TPS.USER_HOME);
}
await tps.render(TPS.USER_HOME);
const initializedFolder = path.join(TPS.USER_HOME, TPS.TPS_FOLDER);
logger.cli.info('Globally initialized %s', initializedFolder);
console.log(initializedFolder);
return;
}
/**
* tps local init
*/
logger.cli.info('Tps local location: %s', TPS.CWD);
if (Templates.directoryIsTpsInitialized(TPS.CWD)) {
throw new InitializedAlreadyError(TPS.CWD);
}
logger.cli.info('Initializing repo...');
await tps.render(TPS.CWD);
const initializedFolder = path.join(TPS.CWD, TPS.TPS_FOLDER);
logger.cli.info('Repo initialized %s', initializedFolder);
console.log(initializedFolder);
},
} as CommandModule<object, InitArgv>;