jovo-cli
Version:
jovo command line tool (beta)
177 lines • 7.01 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const command_1 = require("@oclif/command");
const chalk_1 = __importDefault(require("chalk"));
const jovo_cli_core_1 = require("jovo-cli-core");
const listr_1 = __importDefault(require("listr"));
const lodash_1 = __importDefault(require("lodash"));
const path = __importStar(require("path"));
const utils_1 = require("../utils");
const { ANSWER_CANCEL, promptOverwriteProject } = utils_1.prompts;
const { isValidProjectName, isValidTemplate } = utils_1.validators;
const { buildTask, deployTask } = utils_1.tasks;
class New extends command_1.Command {
async run() {
try {
utils_1.platforms.addCliOptions('new', New.flags);
utils_1.addBaseCliOptions(New.flags);
const { args, flags } = this.parse(New);
if (!utils_1.platforms.validateCliOptions('new', flags)) {
return;
}
if (!isValidProjectName(args.directory) || !isValidTemplate(flags.template)) {
return;
}
this.log(`\n jovo new: ${New.description}`);
this.log(chalk_1.default.grey(' >> Learn more: https://jovo.tech/docs/cli/new\n'));
const project = jovo_cli_core_1.getProject();
await project.init();
const tasks = new listr_1.default([], {
renderer: new utils_1.JovoCliRenderer(),
collapse: false,
});
const config = {
types: [],
debug: flags.debug,
};
args.directory = args.directory || flags.template;
if (project.hasExistingProject(args.directory)) {
const { overwrite } = await promptOverwriteProject();
if (overwrite === ANSWER_CANCEL) {
return;
}
else {
utils_1.deleteFolderRecursive(path.join(process.cwd(), args.directory));
}
}
config.types = flags.build ? [flags.build] : [];
if (flags.deploy && !flags.build) {
this.log('Please use --build if you use --deploy');
}
this.log(" I'm setting everything up");
this.log();
const language = flags.typescript ? 'typescript' : flags.language || jovo_cli_core_1.DEFAULT_LANGUAGE;
lodash_1.default.merge(config, {
language,
projectName: args.directory,
locales: project.getLocales(flags.locale),
template: flags.template || jovo_cli_core_1.DEFAULT_TEMPLATE,
invocation: flags.invocation,
endpoint: flags.endpoint || jovo_cli_core_1.DEFAULT_ENDPOINT,
});
for (const type of config.types) {
const platform = utils_1.platforms.get(type, config.stage);
lodash_1.default.merge(config, platform.getPlatformConfigValues(project, flags));
}
project.setProjectPath(args.directory);
tasks.add({
title: `Creating new directory /${chalk_1.default.white.bold(config.projectName)}`,
task() {
return project.createEmptyProject();
},
});
tasks.add({
title: `Downloading and extracting template ${chalk_1.default.white.bold(config.template)}`,
async task(ctx) {
await project.downloadAndExtract(ctx.projectName, ctx.template, ctx.locales[0], ctx.language);
await project.updateModelLocale(ctx.locales[0]);
},
});
if (flags.build) {
tasks.add({
title: 'Building project...',
task(ctx) {
return new listr_1.default(buildTask(ctx));
},
});
}
if (flags.deploy) {
tasks.add({
title: 'Deploying project...',
task(ctx) {
return new listr_1.default(deployTask(ctx));
},
});
}
tasks.add({
title: 'Installing npm dependencies...',
enabled() {
return !flags['skip-npminstall'];
},
async task() {
return project.runNpmInstall();
},
});
await tasks.run(config);
this.log();
this.log('Installation completed.');
this.log();
}
catch (err) {
this.error(`There was a problem:\n${err}`);
}
}
}
exports.New = New;
New.description = 'Creates a new Jovo project.';
New.examples = [
'jovo new jovo-example-project',
'jovo new jovo-example-project --locale de-DE --language typescript',
];
New.flags = {
'template': command_1.flags.string({
char: 't',
description: 'Name of the template.',
default: 'helloworld',
parse(template) {
return template.replace('/', '-');
},
}),
'locale': command_1.flags.string({
char: 'l',
description: 'Locale of the language model\n<en-US|de-DE|etc>',
default: 'en-US',
}),
'build': command_1.flags.string({
description: 'Runs build after new',
options: utils_1.platforms.getAllAvailable(),
}),
'deploy': command_1.flags.boolean({
description: 'Runs deploy after new/build.',
}),
'invocation': command_1.flags.string({
description: 'Sets the invocation name.',
}),
'skip-npminstall': command_1.flags.boolean({
description: 'Skips npm install.',
}),
'language': command_1.flags.string({
description: 'Sets the programming language of the template.',
options: ['javascript', 'typescript'],
}),
'endpoint': command_1.flags.string({
description: 'Type of endpoint',
default: jovo_cli_core_1.ENDPOINT_JOVOWEBHOOK,
options: [jovo_cli_core_1.ENDPOINT_JOVOWEBHOOK, jovo_cli_core_1.ENDPOINT_NGROK, jovo_cli_core_1.ENDPOINT_NONE],
}),
'typescript': command_1.flags.boolean({
description: 'Sets the programming language of the template to TypeScript.',
default: false,
}),
'debug': command_1.flags.boolean({
hidden: true,
default: false,
}),
};
New.args = [{ name: 'directory' }];
//# sourceMappingURL=new.js.map