@vendure/cli
Version:
A modern, headless ecommerce framework
110 lines • 4.34 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.addCommand = addCommand;
const prompts_1 = require("@clack/prompts");
const picocolors_1 = __importDefault(require("picocolors"));
const constants_1 = require("../../constants");
const utils_1 = require("../../utilities/utils");
const add_operations_1 = require("./add-operations");
const add_api_extension_1 = require("./api-extension/add-api-extension");
const add_codegen_1 = require("./codegen/add-codegen");
const add_entity_1 = require("./entity/add-entity");
const add_job_queue_1 = require("./job-queue/add-job-queue");
const create_new_plugin_1 = require("./plugin/create-new-plugin");
const add_service_1 = require("./service/add-service");
const add_ui_extensions_1 = require("./ui-extensions/add-ui-extensions");
const cancelledMessage = 'Add feature cancelled.';
async function addCommand(options) {
const nonInteractive = options && Object.values(options).some(v => v !== undefined && v !== false);
if (nonInteractive) {
await handleNonInteractiveMode(options);
}
else {
await handleInteractiveMode();
}
}
async function handleNonInteractiveMode(options) {
try {
const result = await (0, add_operations_1.performAddOperation)(options);
if (result.success) {
prompts_1.log.success(result.message);
}
else {
prompts_1.log.error(result.message);
process.exit(1);
}
}
catch (e) {
if (e.message.includes('Plugin name is required')) {
const errorMessage = e.message;
const stackLines = e.stack.split('\n');
const stackTrace = stackLines.slice(1).join('\n');
prompts_1.log.error(stackTrace);
prompts_1.log.error('');
prompts_1.log.error(picocolors_1.default.red('Error:') + ' ' + String(errorMessage));
}
else {
prompts_1.log.error(e.message);
if (e.stack) {
prompts_1.log.error(e.stack);
}
}
process.exit(1);
}
}
async function handleInteractiveMode() {
console.log(`\n`);
(0, prompts_1.intro)(picocolors_1.default.blue("✨ Let's add a new feature to your Vendure project!"));
const addCommands = [
create_new_plugin_1.createNewPluginCommand,
add_entity_1.addEntityCommand,
add_service_1.addServiceCommand,
add_api_extension_1.addApiExtensionCommand,
add_job_queue_1.addJobQueueCommand,
add_ui_extensions_1.addUiExtensionsCommand,
add_codegen_1.addCodegenCommand,
];
const featureType = await (0, utils_1.withInteractiveTimeout)(async () => {
return await (0, prompts_1.select)({
message: 'Which feature would you like to add?',
options: addCommands.map(c => ({
value: c.id,
label: `${picocolors_1.default.blue(`${c.category}`)} ${c.description}`,
})),
});
});
if ((0, prompts_1.isCancel)(featureType)) {
(0, prompts_1.cancel)(cancelledMessage);
process.exit(0);
}
try {
const command = addCommands.find(c => c.id === featureType);
if (!command) {
throw new Error(`Could not find command with id "${featureType}"`);
}
const { modifiedSourceFiles, project } = await command.run();
if (modifiedSourceFiles.length) {
const importsSpinner = (0, prompts_1.spinner)();
importsSpinner.start('Organizing imports...');
await (0, utils_1.pauseForPromptDisplay)();
for (const sourceFile of modifiedSourceFiles) {
sourceFile.organizeImports();
}
await project.save();
importsSpinner.stop('Imports organized');
}
(0, prompts_1.outro)('✅ Done!');
}
catch (e) {
prompts_1.log.error(e.message);
const isCliMessage = Object.values(constants_1.Messages).includes(e.message);
if (!isCliMessage && e.stack) {
prompts_1.log.error(e.stack);
}
(0, prompts_1.outro)('❌ Error');
}
}
//# sourceMappingURL=add.js.map