UNPKG

gen-jhipster

Version:

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

414 lines (413 loc) 16.7 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 { asWriteFilesSection } from "../base-application/support/task-type-inference.js"; import { addSectionsCondition, mergeSections } from "../base-core/support/index.js"; import { SERVER_MAIN_RES_DIR, SERVER_MAIN_SRC_DIR, SERVER_TEST_RES_DIR, SERVER_TEST_SRC_DIR } from "../generator-constants.js"; import { javaMainPackageTemplatesBlock, moveToJavaPackageSrcDir, moveToJavaPackageTestDir, moveToSrcMainResourcesDir, } from "../java/support/index.js"; const carboneFiles = asWriteFilesSection({ carboneDto: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: [ 'service/dto/carbone/CarboneBody.java', 'service/dto/carbone/CarboneOption.java', 'service/dto/carbone/CarboneResponseDTO.java', 'service/dto/carbone/CarboneResponseData.java', ], }, ], carboneService: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['service/CarboneService.java', 'service/util/FileUtil.java'], }, ], carboneXlsx: [ { path: SERVER_MAIN_RES_DIR, renameTo: moveToSrcMainResourcesDir, transform: false, templates: ['templates/carbone/sample-export.xlsx', 'templates/carbone/sample-import.xlsx'], }, ], }); const imperativeConfigFiles = asWriteFilesSection({ imperativeFiles: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['ApplicationWebXml.java'], }, { path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: ['config/CRLFLogConverterTest.java', 'config/WebConfigurerTest.java', 'config/WebConfigurerTestController.java'], }, ], }); const reactiveConfigFiles = asWriteFilesSection({ reactiveFiles: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['config/ReactorConfiguration.java'], }, { path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: ['config/JHipsterBlockHoundIntegration.java'], }, { path: SERVER_TEST_RES_DIR, templates: ['META-INF/services/reactor.blockhound.integration.BlockHoundIntegration'], }, ], }); const accountFiles = asWriteFilesSection({ accountResource: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: [ data => { if (data.authenticationTypeOauth2 && data.generateBuiltInUserEntity) return 'web/rest/AccountResource_oauth2.java'; if (data.generateUserManagement) return 'web/rest/AccountResource.java'; return 'web/rest/AccountResource_skipUserManagement.java'; }, ], }, { condition: data => data.generateUserManagement, path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['web/rest/vm/ManagedUserVM.java'], }, { path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: [ data => { if (data.authenticationTypeOauth2) return 'web/rest/AccountResourceIT_oauth2.java'; if (data.generateUserManagement) return 'web/rest/AccountResourceIT.java'; return 'web/rest/AccountResourceIT_skipUserManagement.java'; }, ], }, ], }); const userManagementFiles = asWriteFilesSection({ userManagementFiles: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: [ 'security/DomainUserDetailsService.java', 'security/UserNotActivatedException.java', 'service/MailService.java', 'service/dto/PasswordChangeDTO.java', 'service/EmailAlreadyUsedException.java', 'service/InvalidPasswordException.java', 'service/UsernameAlreadyUsedException.java', 'web/rest/vm/KeyAndPasswordVM.java', 'web/rest/errors/EmailAlreadyUsedException.java', 'web/rest/errors/InvalidPasswordException.java', 'web/rest/errors/LoginAlreadyUsedException.java', ], }, { path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: ['service/MailServiceIT.java', 'security/DomainUserDetailsServiceIT.java'], }, { path: SERVER_MAIN_RES_DIR, templates: ['templates/mail/activationEmail.html', 'templates/mail/creationEmail.html', 'templates/mail/passwordResetEmail.html'], }, { path: SERVER_TEST_RES_DIR, templates: [ 'templates/mail/activationEmail.html', 'templates/mail/creationEmail.html', 'templates/mail/passwordResetEmail.html', 'templates/mail/testEmail.html', ], }, ], }); const swaggerFiles = asWriteFilesSection({ swagger: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['config/OpenApiConfiguration.java'], }, ], }); /** * The default is to use a file path string. It implies use of the template method. * For any other config an object { file:.., method:.., template:.. } can be used */ export const baseServerFiles = asWriteFilesSection({ readme: [ { templates: ['README.md.jhi.spring-boot'], }, ], packageJson: [ { condition: generator => generator.clientFrameworkNo, templates: ['package.json'], }, ], envDbUrl: [ { path: '.', templates: [{ file: '.env.ejs', renameTo: () => '.env' }], }, ], serverBuild: [ { templates: ['.devcontainer/devcontainer.json', '.devcontainer/Dockerfile', 'lombok.config'], }, { condition: generator => generator.buildToolGradle, templates: [ 'settings.gradle', 'gradle.properties', 'gradle/profile_dev.gradle', 'gradle/profile_prod.gradle', 'gradle/spring-boot.gradle', 'gradle/war.gradle', 'gradle/zipkin.gradle', ], }, { condition: generator => generator.buildToolMaven, templates: ['pom.xml'], }, ], serverResource: [ { path: SERVER_MAIN_RES_DIR, renameTo: moveToSrcMainResourcesDir, transform: false, templates: [data => (data.clientFrameworkReact || data.clientFrameworkVue ? `banner_${data.clientFramework}.txt` : 'banner.txt')], }, { path: SERVER_MAIN_RES_DIR, templates: [ // Thymeleaf templates 'templates/error.html', 'logback-spring.xml', 'config/application.yml', 'config/application-dev.yml', 'config/application-prod.yml', 'config/application-secret-samples.yml', 'config/application-tls.yml', ], }, ], serverJavaAuthConfig: [ { condition: generator => !generator.reactive && (generator.databaseTypeSql || generator.databaseTypeMongodb || generator.databaseTypeCouchbase), path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['security/SpringSecurityAuditorAware.java'], }, { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['security/SecurityUtils.java', 'security/AuthoritiesConstants.java'], }, { path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: [data => `security/SecurityUtilsUnitTest_${data.imperativeOrReactive}.java`], }, { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: [data => `config/SecurityConfiguration_${data.imperativeOrReactive}.java`], }, { condition: generator => generator.generateUserManagement && generator.authenticationTypeSession && !generator.reactive, path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['security/PersistentTokenRememberMeServices.java', 'domain/PersistentToken.java'], }, { condition: generator => generator.generateUserManagement && generator.authenticationTypeSession && !generator.reactive && !generator.databaseTypeCouchbase, path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['repository/PersistentTokenRepository.java'], }, ], serverMicroservice: [ javaMainPackageTemplatesBlock({ condition: generator => generator.applicationTypeMicroservice, templates: ['config/SpringDocConfiguration.java'], }), { condition: generator => generator.applicationTypeMicroservice, path: SERVER_MAIN_RES_DIR, templates: [{ file: 'static/index_microservices.html', renameTo: () => 'static/index.html' }], }, ], serviceDiscovery: [ { condition: generator => generator.serviceDiscoveryAny, path: SERVER_MAIN_RES_DIR, templates: ['config/bootstrap.yml', 'config/bootstrap-prod.yml'], }, { condition: generator => generator.serviceDiscoveryAny, path: SERVER_TEST_RES_DIR, templates: ['config/bootstrap.yml'], }, { condition: generator => generator.serviceDiscoveryAny && generator.serviceDiscoveryEureka, path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['config/EurekaWorkaroundConfiguration.java'], }, ], serverJavaApp: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: (data, filename) => moveToJavaPackageSrcDir(data, filename.replace('Application.java', `${data.mainClass}.java`)), templates: ['Application.java'], }, { path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: [ 'TechnicalStructureTest.java', 'config/AsyncSyncConfiguration.java', 'IntegrationTest.java', 'config/SpringBootTestClassOrderer.java', ], }, ], serverJavaConfig: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: [ 'aop/logging/LoggingAspect.java', 'config/AsyncConfiguration.java', 'config/CRLFLogConverter.java', 'config/DateTimeFormatConfiguration.java', 'config/LoggingConfiguration.java', 'config/ApplicationProperties.java', 'config/JacksonConfiguration.java', 'config/LoggingAspectConfiguration.java', 'config/WebConfigurer.java', 'config/ServerConfiguration.java', ], }, { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['config/Constants.java'], }, ], serverJavaDomain: [ { condition: ctx => ctx.generateSpringAuditor, path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['domain/AbstractAuditingEntity.java'], }, ], serverJavaWebError: [ { path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: [ 'web/rest/errors/BadRequestAlertException.java', 'web/rest/errors/ErrorConstants.java', 'web/rest/errors/ExceptionTranslator.java', 'web/rest/errors/FieldErrorVM.java', ], }, ], serverJavaWeb: [ { condition: generator => generator.clientFrameworkAny && !generator.reactive, path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: ['config/StaticResourcesWebConfiguration.java'], }, { // TODO : add these tests to reactive condition: generator => generator.clientFrameworkAny && !generator.reactive, path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: ['config/StaticResourcesWebConfigurerTest.java'], }, { condition: generator => generator.clientFrameworkAny, path: `${SERVER_MAIN_SRC_DIR}_package_/`, renameTo: moveToJavaPackageSrcDir, templates: [data => `web/filter/SpaWebFilter_${data.imperativeOrReactive}.java`], }, { condition: generator => generator.clientFrameworkAny, path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: [data => `web/filter/SpaWebFilterIT_${data.imperativeOrReactive}.java`], }, { condition: generator => generator.clientFrameworkAny && generator.reactive, path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: ['web/filter/SpaWebFilterTestController_reactive.java'], }, ], serverTestFw: [ { path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: ['web/rest/TestUtil.java', 'web/rest/errors/ExceptionTranslatorTestController.java'], }, { path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: [data => `web/rest/errors/ExceptionTranslatorIT_${data.imperativeOrReactive}.java`], }, { path: SERVER_TEST_RES_DIR, templates: ['config/application.yml', 'logback.xml', 'junit-platform.properties'], }, ], serverJavaUserManagement: [ { path: `${SERVER_TEST_SRC_DIR}_package_/`, renameTo: moveToJavaPackageTestDir, templates: ['web/rest/WithUnauthenticatedMockUser.java'], }, ], }); export const serverFiles = mergeSections(baseServerFiles, addSectionsCondition(accountFiles, context => context.generateAuthenticationApi), addSectionsCondition(userManagementFiles, context => context.generateUserManagement), addSectionsCondition(imperativeConfigFiles, context => !context.reactive), addSectionsCondition(reactiveConfigFiles, context => context.reactive), addSectionsCondition(swaggerFiles, context => context.enableSwaggerCodegen), carboneFiles);