jovo-cli
Version:
jovo command line tool (beta)
102 lines • 4.14 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const command_1 = require("@oclif/command");
const fs_extra_1 = require("fs-extra");
const jovo_cli_core_1 = require("jovo-cli-core");
const Listr = require("listr");
const utils_1 = require("../utils");
const chalk_1 = __importDefault(require("chalk"));
const { promptOverwriteHandler, ANSWER_SEPERATE, ANSWER_CANCEL } = utils_1.prompts;
const { scaffold } = utils_1.scaffolder;
const srcPath = './models/';
let destPath = './src/app.js';
class Scaffold extends command_1.Command {
async run() {
const { flags } = this.parse(Scaffold);
if (!isValidModel()) {
return;
}
this.log(`\n jovo scaffold: ${Scaffold.description}`);
this.log(chalk_1.default.grey(' >> Learn more: https://jovo.tech/docs/cli/scaffold\n'));
const project = jovo_cli_core_1.getProject();
await project.init();
const isTsProject = await project.isTypeScriptProject();
if (isTsProject) {
destPath = './src/app.ts';
}
if (!flags.overwrite && fs_extra_1.existsSync(destPath)) {
const answers = await promptOverwriteHandler();
if (answers.overwriteHandler === ANSWER_SEPERATE) {
if (isTsProject) {
destPath = './src/app.scaffold.ts';
}
else {
destPath = './src/app.scaffold.js';
}
}
if (answers.overwriteHandler === ANSWER_CANCEL) {
return;
}
}
const tasks = new Listr([
{
title: `Scaffolding handler in ${destPath}...`,
async task() {
await new Promise((res) => {
setTimeout(() => {
const models = fs_extra_1.readdirSync(srcPath);
const intents = [];
let handler = '{\n\tLAUNCH() {\n\n\t},';
for (const file of models) {
const model = JSON.parse(fs_extra_1.readFileSync(`${srcPath}${file}`, { encoding: 'utf-8' }));
for (const { name } of model.intents) {
if (!intents.includes(name)) {
intents.push(name);
handler += `\n\n\t${name}() {\n\n\t},`;
}
}
}
handler += '\n\n\tEND() {\n\n\t},\n}';
const model = scaffold({ handler, type: isTsProject ? 'ts' : 'js' });
fs_extra_1.writeFileSync(destPath, model);
res();
}, 500);
});
},
},
], {
renderer: new utils_1.JovoCliRenderer(),
collapse: false,
});
try {
await tasks.run();
this.log();
this.log(`\n\nSuccessfully scaffolded your handler in '${destPath}'.`);
this.log();
}
catch (err) {
this.error(`There was a problem:\n${err}`);
}
}
}
exports.Scaffold = Scaffold;
Scaffold.description = 'Build a scaffold handler out of your existing language model.';
Scaffold.examples = ['jovo scaffold', 'jovo scaffold --overwrite'];
Scaffold.flags = {
overwrite: command_1.flags.boolean({
description: 'Forces overwriting of an existing handler file.',
}),
};
function isValidModel() {
if (fs_extra_1.existsSync(srcPath)) {
if (fs_extra_1.readdirSync(srcPath).length > 0) {
return true;
}
}
console.log(`No language model available in '${srcPath}'. Please create at least one language model.`);
return false;
}
//# sourceMappingURL=scaffold.js.map