53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
import * as plugins from './mod.plugins.js';
|
|
import * as paths from '../paths.js';
|
|
|
|
import { logger } from '../gitzone.logging.js';
|
|
|
|
export const getTemplatePath = (templateNameArg: string) => {
|
|
return plugins.path.join(paths.templatesDir, templateNameArg);
|
|
};
|
|
|
|
/**
|
|
* receives a template name and returns wether there is a corresponding template
|
|
*/
|
|
export const isTemplate = async (templateNameArg: string) => {
|
|
return plugins.smartfile.fs.isDirectory(getTemplatePath(templateNameArg));
|
|
};
|
|
|
|
export const getTemplate = async (templateNameArg: string) => {
|
|
if (isTemplate(templateNameArg)) {
|
|
const localScafTemplate = new plugins.smartscaf.ScafTemplate(getTemplatePath(templateNameArg));
|
|
await localScafTemplate.readTemplateFromDir();
|
|
return localScafTemplate;
|
|
} else {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
export const run = async (argvArg: any) => {
|
|
let chosenTemplate: string = argvArg._[1];
|
|
|
|
if (!chosenTemplate) {
|
|
const smartinteract = new plugins.smartinteract.SmartInteract();
|
|
const answerBucket = await smartinteract.askQuestion({
|
|
type: 'list',
|
|
default: 'npm',
|
|
message: 'What template do you want to scaffold? (Only showing mpost common options)',
|
|
name: 'templateName',
|
|
choices: ['npm', 'service', 'wcc', 'website'],
|
|
});
|
|
chosenTemplate = answerBucket.value;
|
|
}
|
|
|
|
if (await isTemplate(chosenTemplate)) {
|
|
logger.log('info', `found requested template ${chosenTemplate}`);
|
|
} else {
|
|
logger.log('error', `Template ${chosenTemplate} not available`);
|
|
return;
|
|
}
|
|
|
|
const localScafTemplate = await getTemplate(chosenTemplate);
|
|
await localScafTemplate.askCliForMissingVariables();
|
|
await localScafTemplate.writeToDisk(paths.cwd);
|
|
};
|