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
50 lines (43 loc) • 1.13 kB
text/typescript
import fs from 'fs';
import path from 'path';
import { errorExit } from '@tps/cli/utils/error-exit';
import Template from '@tps/templates';
import * as TPS from '@tps/utilities/constants';
import { CommandModule } from 'yargs';
import { isDir } from '@tps/utilities/fileSystem';
interface CopyArgv {
template: string;
name: string;
}
export default {
command: ['copy <template> [name]', 'cp <template> [name]'],
description: 'Copy a template',
handler(argv) {
const template = new Template(argv.template);
const newLocation = path.join(TPS.LOCAL_PATH, argv.name || argv.template);
if (!TPS.IS_TPS_INITIALIZED) {
errorExit(
new Error(
`Directory must be initialized with templates. Please run 'tps init'`,
),
);
}
if (isDir(newLocation)) {
errorExit(
new Error(
`Template ${
argv.name || argv.template
} already exists in your directory`,
),
);
}
fs.promises
.cp(template.src, newLocation, { recursive: true })
.then(() => {
process.exit(0);
})
.catch((error) => {
errorExit(error);
});
},
} as CommandModule<object, CopyArgv>;