UNPKG

generator-begcode

Version:

Spring Boot + Angular/React/Vue in one handy generator

108 lines (107 loc) 4.58 kB
import chalk from 'chalk'; import { intersection } from 'lodash-es'; import { testFrameworkTypes } from '../../jdl/jhipster/index.js'; import { APPLICATION_TYPE_GATEWAY, APPLICATION_TYPE_MICROSERVICE, clientFrameworkTypes } from '../../jdl/index.js'; import { GENERATOR_COMMON } from '../generator-list.js'; const { CYPRESS } = testFrameworkTypes; const { ANGULAR, REACT, VUE, NO: CLIENT_FRAMEWORK_NO } = clientFrameworkTypes; const microfrontendsToPromptValue = answer => (Array.isArray(answer) ? answer.map(({ baseName }) => baseName).join(',') : answer); const promptValueToMicrofrontends = answer => answer ? answer .split(',') .map(baseName => baseName.trim()) .filter(Boolean) .map(baseName => ({ baseName })) : []; const command = { options: {}, configs: { clientFramework: { description: 'Provide client framework for the application', cli: { type: String, }, prompt: generator => ({ type: 'list', message: () => generator.jhipsterConfigWithDefaults.applicationType === APPLICATION_TYPE_MICROSERVICE ? `Which ${chalk.yellow('*framework*')} would you like to use as microfrontend?` : `Which ${chalk.yellow('*framework*')} would you like to use for the client?`, }), choices: [ { value: VUE, name: 'Vue' }, { value: CLIENT_FRAMEWORK_NO, name: 'No client' }, ], }, microfrontend: { description: 'Enable microfrontend support', cli: { type: Boolean, }, prompt: ({ jhipsterConfigWithDefaults: config }) => ({ type: 'confirm', when: answers => [ANGULAR, REACT, VUE].includes(answers.clientFramework ?? config.clientFramework) && config.applicationType === APPLICATION_TYPE_GATEWAY, message: `Do you want to enable ${chalk.yellow('*microfrontends*')}?`, default: false, }), }, microfrontends: { description: 'Microfrontends to load', cli: { type: String, }, prompt: ({ jhipsterConfigWithDefaults: config }) => ({ when: answers => { const askForMicrofrontends = Boolean((answers.microfrontend ?? config.microfrontend) && (answers.applicationType ?? config.applicationType) === APPLICATION_TYPE_GATEWAY); if (askForMicrofrontends && answers.microfrontends) { answers.microfrontends = microfrontendsToPromptValue(answers.microfrontends); } else { answers.microfrontends = []; } return askForMicrofrontends; }, type: 'input', message: `Comma separated ${chalk.yellow('*microfrontend*')} app names.`, filter: promptValueToMicrofrontends, transformer: microfrontendsToPromptValue, }), }, clientTestFrameworks: { description: 'Client test frameworks', prompt: ({ jhipsterConfigWithDefaults: config }) => ({ when: answers => [ANGULAR, REACT, VUE].includes(answers.clientFramework ?? config.clientFramework), type: 'checkbox', message: 'Besides Jest/Vitest, which testing frameworks would you like to use?', default: () => intersection([CYPRESS], config.testFrameworks), }), choices: [{ name: 'Cypress', value: CYPRESS }], }, withAdminUi: { description: 'Generate administrative user interface', cli: { type: Boolean, }, prompt: ({ jhipsterConfigWithDefaults: config }) => ({ type: 'confirm', when: answers => [ANGULAR, REACT, VUE].includes(answers.clientFramework ?? config.clientFramework), message: 'Do you want to generate the admin UI?', }), }, clientRootDir: { description: 'Client root', cli: { type: String, }, }, onlyLowcode: { description: 'Only lowcode', cli: { type: Boolean, }, }, }, import: [GENERATOR_COMMON], }; export default command;