UNPKG

gen-jhipster

Version:

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

246 lines (245 loc) 10.3 kB
/** * Copyright 2013-2026 the original author or authors from the JHipster project. * * This file is part of the JHipster project, see https://www.jhipster.tech/ * for more information. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { APPLICATION_TYPE_GATEWAY, APPLICATION_TYPE_MICROSERVICE, APPLICATION_TYPE_MONOLITH } from "../core/application-types.js"; import applicationOptions from "./application-options.js"; import authenticationTypes from "./authentication-types.js"; import buildToolTypes from "./build-tool-types.js"; import cacheTypes from "./cache-types.js"; import clientFrameworkTypes from "./client-framework-types.js"; import databaseTypes from "./database-types.js"; import serviceDiscoveryTypes from "./service-discovery-types.js"; const { CONSUL } = serviceDiscoveryTypes; const { SQL, POSTGRESQL } = databaseTypes; const { OptionNames, OptionValues } = applicationOptions; const { JWT, OAUTH2 } = authenticationTypes; const { ANGULAR, NO: NO_CLIENT_FRAMEWORK } = clientFrameworkTypes; const { EHCACHE, HAZELCAST } = cacheTypes; const { NO: NO_CACHE_PROVIDER, MEMCACHED } = cacheTypes; const NO_SERVICE_DISCOVERY = serviceDiscoveryTypes.NO; const { MAVEN } = buildToolTypes; const { APPLICATION_TYPE, AUTHENTICATION_TYPE, BASE_NAME, BUILD_TOOL, CACHE_PROVIDER, CLIENT_FRAMEWORK, CLIENT_THEME, CLIENT_THEME_VARIANT, WITH_ADMIN_UI, DATABASE_TYPE, DEV_DATABASE_TYPE, DTO_SUFFIX, ENABLE_HIBERNATE_CACHE, ENABLE_SWAGGER_CODEGEN, ENABLE_TRANSLATION, ENTITY_SUFFIX, JHI_PREFIX, LANGUAGES, NATIVE_LANGUAGE, PACKAGE_FOLDER, PACKAGE_NAME, PROD_DATABASE_TYPE, REACTIVE, SEARCH_ENGINE, SERVER_PORT, SERVICE_DISCOVERY_TYPE, SKIP_CLIENT, SKIP_USER_MANAGEMENT, TEST_FRAMEWORKS, WEBSOCKET, ENABLE_GRADLE_DEVELOCITY, GRADLE_DEVELOCITY_HOST, ENABLE_GRPC, GRPC_PORT, ENABLE_VIRTUAL_THREADS, } = OptionNames; const commonDefaultOptions = { [AUTHENTICATION_TYPE]: JWT, [BUILD_TOOL]: MAVEN, [DTO_SUFFIX]: OptionValues[DTO_SUFFIX], [ENABLE_SWAGGER_CODEGEN]: OptionValues[ENABLE_SWAGGER_CODEGEN], [ENABLE_TRANSLATION]: OptionValues[ENABLE_TRANSLATION], [ENTITY_SUFFIX]: OptionValues[ENTITY_SUFFIX], [JHI_PREFIX]: OptionValues[JHI_PREFIX], messageBroker: 'no', [SEARCH_ENGINE]: OptionValues[SEARCH_ENGINE].no, [WEBSOCKET]: OptionValues[WEBSOCKET].no, [ENABLE_GRPC]: OptionValues[ENABLE_GRPC], [GRPC_PORT]: OptionValues[GRPC_PORT], [ENABLE_VIRTUAL_THREADS]: OptionValues[ENABLE_VIRTUAL_THREADS], }; export function getConfigWithDefaults(customOptions = {}) { const applicationType = customOptions.applicationType; if (applicationType === APPLICATION_TYPE_GATEWAY) { return getConfigForGatewayApplication(customOptions); } if (applicationType === APPLICATION_TYPE_MICROSERVICE) { return getConfigForMicroserviceApplication(customOptions); } return getConfigForMonolithApplication(customOptions); } function getConfigForClientApplication(options = {}) { if (options[SKIP_CLIENT]) { options[CLIENT_FRAMEWORK] = NO_CLIENT_FRAMEWORK; } const clientFramework = options[CLIENT_FRAMEWORK]; if (clientFramework === NO_CLIENT_FRAMEWORK) { return options; } options[OptionNames.MICROFRONTEND] ??= Boolean(options[OptionNames.MICROFRONTENDS]?.length); if (!options[CLIENT_THEME]) { options[CLIENT_THEME] = OptionValues[CLIENT_THEME]; } else if (options[CLIENT_THEME] !== OptionValues[CLIENT_THEME] && !options[CLIENT_THEME_VARIANT]) { options[CLIENT_THEME_VARIANT] = 'primary'; } switch (clientFramework) { case 'vue': { options.clientBundler ??= options.microfrontend || options.applicationType === 'microservice' ? 'webpack' : 'vite'; options.devServerPort ??= options.clientBundler === 'webpack' ? 9060 : 9000; break; } case 'react': { options.clientBundler ??= 'webpack'; options.devServerPort ??= 9060; break; } case 'angular': { options.clientBundler ??= options.microfrontend || options.applicationType === 'microservice' ? 'webpack' : 'esbuild'; options.devServerPort ??= 4200; break; } default: { options.devServerPort ??= 9060; break; } } options.devServerPortProxy ??= options.clientBundler === 'webpack' ? 9000 : undefined; return options; } function getConfigForAuthenticationType(options = {}) { if (typeof options[SKIP_USER_MANAGEMENT] !== 'boolean') { if (options[AUTHENTICATION_TYPE] === OAUTH2) { options[SKIP_USER_MANAGEMENT] = true; } else { options[SKIP_USER_MANAGEMENT] = OptionValues[SKIP_USER_MANAGEMENT]; } } return options; } function getConfigForPackageName(options = {}) { if (!options[PACKAGE_NAME]) { if (options[PACKAGE_FOLDER]) { options[PACKAGE_NAME] = options[PACKAGE_FOLDER].split('/').filter(Boolean).join('.'); } else { options[PACKAGE_NAME] = OptionValues[PACKAGE_NAME]; } } return options; } function getConfigForCacheProvider(options = {}) { if (options[REACTIVE] || options[CACHE_PROVIDER] === undefined) { options[CACHE_PROVIDER] = NO_CACHE_PROVIDER; } options[ENABLE_HIBERNATE_CACHE] ??= options[DATABASE_TYPE] === SQL && !options[REACTIVE] && ![NO_CACHE_PROVIDER, MEMCACHED].includes(options[CACHE_PROVIDER]); return options; } function getConfigForReactive(options = {}) { options[REACTIVE] ??= false; return options; } function getConfigForTranslation(options = {}) { options[ENABLE_TRANSLATION] ??= true; options[NATIVE_LANGUAGE] ??= 'en'; if (options[ENABLE_TRANSLATION] && options[LANGUAGES] === undefined) { options[LANGUAGES] = []; } return options; } function getConfigForDatabaseType(options = {}) { options[DATABASE_TYPE] ??= SQL; if (options[DATABASE_TYPE] === SQL) { options[PROD_DATABASE_TYPE] ??= POSTGRESQL; options[DEV_DATABASE_TYPE] ??= options[PROD_DATABASE_TYPE]; } if (options[DATABASE_TYPE] === 'no') { options[SKIP_USER_MANAGEMENT] = true; } options.databaseMigration ??= options.databaseType === SQL ? 'liquibase' : 'no'; return options; } function getServerConfigForMonolithApplication(customOptions = {}) { const options = { ...commonDefaultOptions, [CACHE_PROVIDER]: EHCACHE, [CLIENT_FRAMEWORK]: ANGULAR, [SERVER_PORT]: OptionValues[SERVER_PORT], [SERVICE_DISCOVERY_TYPE]: NO_SERVICE_DISCOVERY, [WITH_ADMIN_UI]: true, ...customOptions, }; return { ...options, [APPLICATION_TYPE]: APPLICATION_TYPE_MONOLITH, }; } export function getConfigForMonolithApplication(customOptions = {}) { let options = getServerConfigForMonolithApplication(customOptions); options = getConfigForClientApplication(options); options = getConfigForPackageName(options); options = getConfigForDatabaseType(options); options = getConfigForCacheProvider(options); options = getConfigForReactive(options); options = getConfigForTranslation(options); return getConfigForAuthenticationType(options); } function getServerConfigForGatewayApplication(customOptions = {}) { const options = { ...commonDefaultOptions, [CLIENT_FRAMEWORK]: ANGULAR, [SERVER_PORT]: OptionValues[SERVER_PORT], [SERVICE_DISCOVERY_TYPE]: CONSUL, [WITH_ADMIN_UI]: true, ...customOptions, }; options[CACHE_PROVIDER] = NO_CACHE_PROVIDER; options[ENABLE_HIBERNATE_CACHE] = false; return { [REACTIVE]: true, ...options, [APPLICATION_TYPE]: APPLICATION_TYPE_GATEWAY, }; } export function getConfigForGatewayApplication(customOptions = {}) { let options = getServerConfigForGatewayApplication(customOptions); options = getConfigForClientApplication(options); options = getConfigForPackageName(options); options = getConfigForDatabaseType(options); options = getConfigForCacheProvider(options); options = getConfigForReactive(options); options = getConfigForTranslation(options); return getConfigForAuthenticationType(options); } function getServerConfigForMicroserviceApplication(customOptions = {}) { const DEFAULT_SERVER_PORT = 8081; const options = { ...commonDefaultOptions, [CACHE_PROVIDER]: HAZELCAST, [SERVER_PORT]: DEFAULT_SERVER_PORT, [SERVICE_DISCOVERY_TYPE]: CONSUL, [SKIP_USER_MANAGEMENT]: true, [CLIENT_FRAMEWORK]: NO_CLIENT_FRAMEWORK, ...customOptions, }; options[WITH_ADMIN_UI] = false; return { ...options, [APPLICATION_TYPE]: APPLICATION_TYPE_MICROSERVICE, }; } export function getConfigForMicroserviceApplication(customOptions = {}) { let options = getServerConfigForMicroserviceApplication(customOptions); options = getConfigForClientApplication(options); options = getConfigForPackageName(options); options = getConfigForDatabaseType(options); options = getConfigForCacheProvider(options); options = getConfigForReactive(options); options = getConfigForTranslation(options); return getConfigForAuthenticationType(options); } export function getDefaultConfigForNewApplication(customOptions = {}) { const options = { ...commonDefaultOptions, [BASE_NAME]: OptionValues[BASE_NAME], [LANGUAGES]: OptionValues[LANGUAGES], [TEST_FRAMEWORKS]: [], [ENABLE_GRADLE_DEVELOCITY]: OptionValues[ENABLE_GRADLE_DEVELOCITY], [GRADLE_DEVELOCITY_HOST]: OptionValues[GRADLE_DEVELOCITY_HOST], ...customOptions, }; return getConfigWithDefaults(options); }