generator-jhipster 8.0.0-rc.1 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +71 -58
- package/dist/cli/environment-builder.mjs +14 -7
- package/dist/cli/jhipster-command.mjs +7 -3
- package/dist/cli/program.mjs +2 -2
- package/dist/generators/angular/cleanup.mjs +7 -0
- package/dist/generators/angular/files-angular.mjs +3 -4
- package/dist/generators/angular/generator.mjs +10 -22
- package/dist/generators/angular/needle-api/needle-client-angular.mjs +2 -8
- package/dist/generators/angular/resources/package.json +25 -24
- package/dist/generators/angular/support/translate-angular.mjs +2 -2
- package/dist/generators/angular/templates/README.md.jhi.client.angular.ejs +1 -1
- package/dist/generators/angular/templates/angular.json.ejs +3 -7
- package/dist/generators/angular/templates/package.json.ejs +4 -8
- package/dist/generators/angular/templates/src/main/webapp/app/account/activate/activate.component.html.ejs +6 -4
- package/dist/generators/angular/templates/src/main/webapp/app/account/password/password-strength-bar/password-strength-bar.component.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/account/password/password.component.html.ejs +39 -33
- package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html.ejs +44 -36
- package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html.ejs +24 -23
- package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.component.html.ejs +74 -62
- package/dist/generators/angular/templates/src/main/webapp/app/account/sessions/sessions.component.html.ejs +12 -4
- package/dist/generators/angular/templates/src/main/webapp/app/account/settings/settings.component.html.ejs +54 -48
- package/dist/generators/angular/templates/src/main/webapp/app/admin/admin.routes.ts.ejs +74 -0
- package/dist/generators/angular/templates/src/main/webapp/app/admin/configuration/configuration.component.html.ejs +15 -5
- package/dist/generators/angular/templates/src/main/webapp/app/admin/docs/docs.component.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/admin/gateway/gateway.component.html.ejs +20 -7
- package/dist/generators/angular/templates/src/main/webapp/app/admin/health/health.component.html.ejs +10 -7
- package/dist/generators/angular/templates/src/main/webapp/app/admin/health/modal/health-modal.component.html.ejs +9 -3
- package/dist/generators/angular/templates/src/main/webapp/app/admin/logs/logs.component.html.ejs +12 -4
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/jvm-memory/jvm-memory.component.html.ejs +13 -7
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-cache/metrics-cache.component.html.ejs +6 -2
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-datasource/metrics-datasource.component.html.ejs +3 -1
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-endpoints-requests/metrics-endpoints-requests.component.html.ejs +13 -9
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-garbagecollector/metrics-garbagecollector.component.html.ejs +13 -5
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.html.ejs +21 -7
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-request/metrics-request.component.html.ejs +6 -2
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-system/metrics-system.component.html.ejs +3 -1
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/metrics.component.html.ejs +16 -7
- package/dist/generators/angular/templates/src/main/webapp/app/admin/tracker/tracker.component.html.ejs +3 -1
- package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.html.ejs +3 -1
- package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/detail/user-management-detail.component.html.ejs +11 -4
- package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/list/user-management.component.html.ejs +20 -11
- package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/update/user-management-update.component.html.ejs +48 -34
- package/dist/generators/angular/templates/src/main/webapp/app/app.component.ts.ejs +73 -0
- package/dist/generators/angular/templates/src/main/webapp/app/app.config.ts.ejs +67 -0
- package/dist/generators/angular/templates/src/main/webapp/app/app.routes.ts.ejs +85 -0
- package/dist/generators/angular/templates/src/main/webapp/app/core/microfrontend/index.ts.ejs +5 -4
- package/dist/generators/angular/templates/src/main/webapp/app/core/util/alert.service.spec.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/core/util/data-util.service.ts.ejs +2 -2
- package/dist/generators/angular/templates/src/main/webapp/app/core/util/event-manager.service.spec.ts.ejs +12 -12
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.model.ts.ejs +4 -4
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/delete/_entityFile_-delete-dialog.component.html.ejs +3 -1
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/detail/_entityFile_-detail.component.html.ejs +26 -14
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.html.ejs +44 -35
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/service/_entityFile_.service.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-form.service.spec.ts.ejs +2 -2
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-form.service.ts.ejs +5 -12
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.html.ejs +55 -21
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.spec.ts.ejs +2 -2
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.ts.ejs +10 -10
- package/dist/generators/angular/templates/src/main/webapp/app/entities/entity.routes.ts.ejs +25 -0
- package/dist/generators/angular/templates/src/main/webapp/app/home/home.component.html.ejs +21 -17
- package/dist/generators/angular/templates/src/main/webapp/app/home/home.component.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/layouts/error/error.component.html.ejs +3 -3
- package/dist/generators/angular/templates/src/main/webapp/app/layouts/main/main.component.spec.ts.ejs +5 -2
- package/dist/generators/angular/templates/src/main/webapp/app/layouts/main/main.component.ts.ejs +5 -1
- package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs +97 -78
- package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/navbar.component.scss.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/navbar.component.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/layouts/profiles/page-ribbon.component.scss.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts.ejs +6 -4
- package/dist/generators/angular/templates/src/main/webapp/app/login/login.component.html.ejs +3 -3
- package/dist/generators/angular/templates/src/main/webapp/app/shared/alert/alert-error.component.html.ejs +6 -2
- package/dist/generators/angular/templates/src/main/webapp/app/shared/alert/alert.component.html.ejs +6 -2
- package/dist/generators/angular/templates/src/main/webapp/app/shared/filter/filter.component.html.ejs +11 -7
- package/dist/generators/angular/templates/src/main/webapp/app/shared/filter/filter.model.spec.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort-by.directive.spec.ts.ejs +3 -3
- package/dist/generators/angular/templates/src/main/webapp/bootstrap.ts.ejs +5 -5
- package/dist/generators/angular/templates/src/main/webapp/content/scss/global.scss.ejs +1 -1
- package/dist/generators/angular/templates/webpack/webpack.microfrontend.js.ejs +48 -126
- package/dist/generators/app/README.md +108 -0
- package/dist/generators/app/USAGE +3 -0
- package/dist/generators/app/command.mjs +3 -3
- package/dist/generators/app/generator.mjs +11 -0
- package/dist/generators/app/support/config.mjs +3 -3
- package/dist/generators/base/command.mjs +0 -11
- package/dist/generators/base/generator.mjs +0 -3
- package/dist/generators/base/support/config.mjs +6 -6
- package/dist/generators/base/support/jhipster7-context.mjs +3 -3
- package/dist/generators/base-application/generator.mjs +7 -8
- package/dist/generators/base-application/support/entities.mjs +2 -2
- package/dist/generators/base-application/support/enum.mjs +1 -1
- package/dist/generators/base-application/support/index.mjs +1 -0
- package/dist/generators/base-application/support/prepare-entity.mjs +14 -11
- package/dist/generators/base-application/support/prepare-field.mjs +11 -7
- package/dist/generators/base-application/support/prepare-relationship.mjs +16 -14
- package/dist/generators/base-application/support/update-application-entities-transform.mjs +52 -0
- package/dist/generators/base-core/generator.mjs +17 -4
- package/dist/generators/base-entity-changes/generator.mjs +1 -1
- package/dist/generators/base-workspaces/internal/docker-prompts.mjs +13 -12
- package/dist/generators/bootstrap/command.mjs +6 -0
- package/dist/generators/bootstrap/generator.mjs +84 -45
- package/dist/generators/bootstrap/support/auto-crlf-transform.mjs +34 -21
- package/dist/generators/bootstrap/support/eslint-transform.mjs +2 -5
- package/dist/generators/bootstrap/support/java-unused-imports-transform.mjs +2 -2
- package/dist/generators/bootstrap/support/multi-step-transform/index.mjs +17 -28
- package/dist/generators/bootstrap/support/multi-step-transform/template-file-fs.mjs +12 -6
- package/dist/generators/bootstrap/support/multi-step-transform/template-file.mjs +1 -0
- package/dist/generators/bootstrap/support/prettier-support.mjs +2 -2
- package/dist/generators/bootstrap-application/generator.mjs +10 -21
- package/dist/generators/bootstrap-application-base/command.mjs +30 -0
- package/dist/generators/bootstrap-application-base/generator.mjs +36 -11
- package/dist/generators/bootstrap-application-base/index.mjs +1 -0
- package/dist/generators/bootstrap-application-base/support/export-jdl-transform.mjs +61 -0
- package/dist/generators/bootstrap-application-base/support/import-jdl-transform.mjs +64 -0
- package/dist/generators/bootstrap-application-base/support/index.mjs +2 -0
- package/dist/generators/bootstrap-application-server/generator.mjs +2 -2
- package/dist/generators/client/command.mjs +2 -0
- package/dist/generators/client/resources/package.json +4 -4
- package/dist/generators/client/support/entity-definition.mjs +3 -3
- package/dist/generators/client/templates/README.md.jhi.client.ejs +2 -2
- package/dist/generators/client/templates/src/main/webapp/content/css/loading.css.ejs +1 -1
- package/dist/generators/client/templates/src/main/webapp/index.html.ejs +2 -2
- package/dist/generators/client/templates/webpack/webpack.microfrontend.js.jhi.ejs +14 -1
- package/dist/generators/common/command.mjs +2 -0
- package/dist/generators/common/files.mjs +1 -1
- package/dist/generators/common/generator.mjs +29 -7
- package/dist/generators/common/resources/package.json +4 -4
- package/dist/generators/common/templates/.lintstagedrc.cjs.ejs +21 -0
- package/dist/generators/common/templates/.prettierrc.ejs +1 -1
- package/dist/generators/common/templates/README.md.jhi.ejs +2 -0
- package/dist/generators/common/templates/sonar-project.properties.ejs +1 -1
- package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/account/settings-page.cy.ts.ejs +3 -0
- package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/entity/_entity_.cy.ts.ejs +0 -1
- package/dist/generators/docker/generator.mjs +1 -1
- package/dist/generators/docker/templates/docker/cassandra.yml.ejs +2 -2
- package/dist/generators/docker/templates/docker/keycloak.yml.ejs +1 -1
- package/dist/generators/docker/templates/docker/realm-config/jhipster-realm.json.ejs +4 -1
- package/dist/generators/docker-compose/generator.mjs +4 -11
- package/dist/generators/docker-compose/templates/docker-compose.yml.ejs +1 -1
- package/dist/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs +4 -1
- package/dist/generators/entity/prompts.mjs +123 -306
- package/dist/generators/export-jdl/generator.mjs +1 -1
- package/dist/generators/feign-client/cleanup.mjs +12 -0
- package/dist/generators/feign-client/files.mjs +35 -0
- package/dist/generators/feign-client/generator.mjs +65 -0
- package/dist/generators/feign-client/index.mjs +19 -0
- package/dist/generators/feign-client/templates/src/main/java/_package_/client/AuthorizationHeaderUtil.java.ejs +174 -0
- package/dist/generators/feign-client/templates/src/main/java/_package_/client/AuthorizedFeignClient.java.ejs +72 -0
- package/dist/generators/feign-client/templates/src/main/java/_package_/client/OAuth2InterceptedFeignConfiguration.java.ejs +35 -0
- package/dist/generators/feign-client/templates/src/main/java/_package_/client/OAuthIdpTokenResponseDTO.java.ejs +161 -0
- package/dist/generators/feign-client/templates/src/main/java/_package_/client/TokenRelayRequestInterceptor.java.ejs +42 -0
- package/dist/generators/feign-client/templates/src/main/java/_package_/client/UserFeignClientInterceptor_jwt.java.ejs +36 -0
- package/dist/generators/feign-client/templates/src/main/java/_package_/config/FeignConfiguration.java.ejs +45 -0
- package/dist/generators/feign-client/templates/src/test/java/_package_/client/AuthorizationHeaderUtilTest.java.ejs +263 -0
- package/dist/generators/generate-blueprint/command.mjs +1 -1
- package/dist/generators/generate-blueprint/resources/package.json +1 -1
- package/dist/generators/generate-blueprint/templates/vitest.config.ts.ejs +1 -1
- package/dist/generators/generator-constants.mjs +11 -7
- package/dist/generators/generator-list.mjs +1 -0
- package/dist/generators/git/generator.mjs +3 -5
- package/dist/generators/gradle/constants.mjs +1 -1
- package/dist/generators/heroku/generator.mjs +318 -595
- package/dist/generators/heroku/templates/Procfile.ejs +1 -1
- package/dist/generators/heroku/templates/application-heroku.yml.ejs +0 -12
- package/dist/generators/info/generator.mjs +6 -4
- package/dist/generators/init/generator.mjs +2 -2
- package/dist/generators/java/command.mjs +6 -0
- package/dist/generators/java/entity-files.mjs +5 -1
- package/dist/generators/java/generator.mjs +15 -15
- package/dist/generators/java/support/package-info-transform.mjs +20 -6
- package/dist/generators/java/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.ejs +24 -28
- package/dist/generators/java/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.jackson_identity_info.ejs +30 -0
- package/dist/generators/java/templates/src/main/java/_package_/_entityPackage_/domain/enumeration/_enumName_.java.ejs +3 -3
- package/dist/generators/java/templates/src/test/java/_package_/_entityPackage_/domain/_persistClass_Test.java.ejs +86 -8
- package/dist/generators/java/templates/src/test/java/_package_/_entityPackage_/domain/_persistClass_TestSamples.java.ejs +85 -0
- package/dist/generators/jdl/generator.mjs +32 -28
- package/dist/generators/kubernetes/templates/ingress.yml.ejs +0 -1
- package/dist/generators/kubernetes/templates/keycloak/keycloak-configmap.yml.ejs +4 -1
- package/dist/generators/kubernetes/templates/keycloak/keycloak.yml.ejs +1 -1
- package/dist/generators/languages/command.mjs +5 -0
- package/dist/generators/languages/generator.mjs +44 -28
- package/dist/generators/languages/prompts.mjs +3 -1
- package/dist/generators/languages/support/translate.mjs +1 -1
- package/dist/generators/languages/templates/entity/i18n/entity_pt-br.json.ejs +1 -1
- package/dist/generators/languages/translation-data.mjs +8 -13
- package/dist/generators/liquibase/README.md +19 -0
- package/dist/generators/liquibase/generator.mjs +7 -3
- package/dist/generators/project-name/generator.mjs +14 -19
- package/dist/generators/project-name/support/name-resolver.mjs +35 -6
- package/dist/generators/react/generator.mjs +18 -10
- package/dist/generators/react/resources/package.json +30 -29
- package/dist/generators/react/templates/package.json.ejs +4 -5
- package/dist/generators/react/templates/src/main/webapp/app/config/icon-loader.ts.ejs +35 -33
- package/dist/generators/react/templates/src/main/webapp/app/config/notification-middleware.spec.ts.ejs +4 -4
- package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-detail.tsx.ejs +1 -2
- package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.tsx.ejs +19 -15
- package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.reducer.ts.ejs +1 -1
- package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.tsx.ejs +3 -8
- package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityModel_.model.ts.ejs +1 -1
- package/dist/generators/react/templates/src/main/webapp/app/modules/home/home.tsx.ejs +1 -1
- package/dist/generators/react/templates/src/main/webapp/app/routes.tsx.ejs +9 -2
- package/dist/generators/react/templates/src/main/webapp/app/shared/layout/header/header-components.tsx.ejs +1 -1
- package/dist/generators/react/templates/src/main/webapp/app/shared/layout/header/header.scss.ejs +6 -5
- package/dist/generators/react/templates/src/main/webapp/app/shared/layout/menus/entities.tsx.ejs +10 -1
- package/dist/generators/react/templates/src/main/webapp/app/shared/reducers/reducer.utils.ts.ejs +1 -1
- package/dist/generators/react/templates/src/main/webapp/app/shared/util/date-utils.ts.ejs +1 -1
- package/dist/generators/react/templates/tsconfig.test.json.ejs +1 -1
- package/dist/generators/react/templates/webpack/webpack.microfrontend.js.jhi.react.ejs +13 -58
- package/dist/generators/server/cleanup.mjs +5 -0
- package/dist/generators/server/command.mjs +13 -2
- package/dist/generators/server/entity-files.mjs +3 -3
- package/dist/generators/server/files.mjs +2 -38
- package/dist/generators/server/generator.mjs +48 -23
- package/dist/generators/server/jdl/application-definition.mjs +5 -2
- package/dist/generators/server/options/feign-client.mjs +24 -0
- package/dist/generators/server/options/index.mjs +1 -0
- package/dist/generators/server/resources/Dockerfile +19 -19
- package/dist/generators/server/resources/gradle/libs.versions.toml +4 -4
- package/dist/generators/server/resources/pom.xml +18 -18
- package/dist/generators/server/support/config.mjs +5 -4
- package/dist/generators/server/support/prepare-entity.mjs +9 -6
- package/dist/generators/server/support/prepare-field.mjs +20 -0
- package/dist/generators/server/support/relationship.mjs +2 -1
- package/dist/generators/server/support/templates/field-values.mjs +5 -2
- package/dist/generators/server/templates/README.md.jhi.spring-boot.ejs +0 -1
- package/dist/generators/server/templates/build.gradle.ejs +1 -2
- package/dist/generators/server/templates/gradle/profile_dev.gradle.ejs +3 -21
- package/dist/generators/server/templates/gradle/profile_prod.gradle.ejs +5 -15
- package/dist/generators/server/templates/package.json.ejs +0 -5
- package/dist/generators/server/templates/pom.xml.ejs +2 -12
- package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/_partials_entity_/get_all_template.ejs +8 -8
- package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/_partials_entity_/search_template.ejs +4 -4
- package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/repository/_entityClass_Repository.java.ejs +1 -1
- package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/service/dto/_dtoClass_.java.ejs +2 -2
- package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/service/mapper/_entityClass_Mapper.java.ejs +2 -2
- package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/web/rest/_entityClass_Resource.java.ejs +14 -14
- package/dist/generators/server/templates/src/main/java/_package_/config/JacksonConfiguration.java.ejs +2 -1
- package/dist/generators/server/templates/src/main/java/_package_/config/SecurityConfiguration_imperative.java.ejs +21 -3
- package/dist/generators/server/templates/src/main/java/_package_/config/SecurityConfiguration_reactive.java.ejs +6 -1
- package/dist/generators/server/templates/src/main/java/_package_/security/oauth2/CustomClaimConverter.java.ejs +1 -5
- package/dist/generators/server/templates/src/main/java/_package_/service/MailService.java.ejs +48 -6
- package/dist/generators/server/templates/src/main/java/_package_/web/rest/AccountResource.java.ejs +1 -1
- package/dist/generators/server/templates/src/main/java/_package_/web/rest/LogoutResource_imperative.java.ejs +4 -13
- package/dist/generators/server/templates/src/main/java/_package_/web/rest/LogoutResource_reactive.java.ejs +5 -11
- package/dist/generators/server/templates/src/main/java/_package_/web/rest/PublicUserResource.java.ejs +6 -7
- package/dist/generators/server/templates/src/main/java/_package_/web/rest/UserResource.java.ejs +6 -8
- package/dist/generators/server/templates/src/main/java/_package_/web/rest/errors/ExceptionTranslator.java.ejs +4 -7
- package/dist/generators/server/templates/src/main/resources/config/application.yml.ejs +8 -7
- package/dist/generators/server/templates/src/test/java/_package_/TechnicalStructureTest.java.ejs +1 -1
- package/dist/generators/server/templates/src/test/java/_package_/_entityPackage_/web/rest/_entityClass_ResourceIT.java.ejs +11 -11
- package/dist/generators/server/templates/src/test/java/_package_/web/rest/AccountResourceIT.java.ejs +4 -4
- package/dist/generators/server/templates/src/test/java/_package_/web/rest/errors/ExceptionTranslatorTestController.java.ejs +2 -2
- package/dist/generators/spring-cache/internal/dependencies.mjs +1 -1
- package/dist/generators/spring-cache/templates/gradle/cache.gradle.ejs +1 -1
- package/dist/generators/spring-cache/templates/src/main/java/_package_/config/CacheFactoryConfiguration.java.ejs +1 -1
- package/dist/generators/spring-cloud-stream/templates/src/main/java/_package_/web/rest/KafkaResource_imperative.java.ejs +1 -1
- package/dist/generators/spring-cloud-stream/templates/src/main/java/_package_/web/rest/KafkaResource_reactive.java.ejs +1 -1
- package/dist/generators/spring-cloud-stream/templates/src/test/java/_package_/web/rest/KafkaResourceIT_reactive.java.ejs +3 -0
- package/dist/generators/spring-data-elasticsearch/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.elastic_search.ejs +1 -1
- package/dist/generators/spring-data-elasticsearch/templates/src/main/java/_package_/_entityPackage_/repository/search/_entityClass_SearchRepository.java.ejs +1 -3
- package/dist/generators/spring-data-elasticsearch/templates/src/main/java/_package_/repository/search/UserSearchRepository.java.ejs +4 -4
- package/dist/generators/spring-data-neo4j/generator.mjs +43 -1
- package/dist/generators/spring-data-neo4j/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.spring_data_neo4j.ejs +3 -37
- package/dist/generators/spring-data-relational/README.md +7 -0
- package/dist/generators/spring-data-relational/generator.mjs +2 -1
- package/dist/generators/spring-data-relational/internal/dependencies.mjs +29 -8
- package/dist/generators/spring-data-relational/support/database-data.mjs +4 -0
- package/dist/generators/spring-data-relational/templates/src/main/java/_package_/repository/EntityManager_reactive.java.ejs +49 -8
- package/dist/generators/spring-data-relational/templates/src/test/java/_package_/config/SqlTestContainersSpringContextCustomizerFactory.java.ejs +1 -1
- package/dist/generators/upgrade/generator.mjs +3 -3
- package/dist/generators/vue/generator.mjs +25 -16
- package/dist/generators/vue/resources/package.json +29 -28
- package/dist/generators/vue/templates/package.json.ejs +4 -5
- package/dist/generators/vue/templates/src/main/webapp/app/core/jhi-navbar/jhi-navbar.component.ts.ejs +10 -3
- package/dist/generators/vue/templates/src/main/webapp/app/core/jhi-navbar/jhi-navbar.vue.ejs +3 -4
- package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-details.vue.ejs +1 -2
- package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.component.spec.ts.ejs +1 -1
- package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.component.ts.ejs +3 -3
- package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.vue.ejs +2 -15
- package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.service.ts.ejs +1 -1
- package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.vue.ejs +14 -7
- package/dist/generators/vue/templates/src/main/webapp/app/router/index.ts.ejs +8 -1
- package/dist/generators/vue/templates/webpack/webpack.microfrontend.js.jhi.vue.ejs +19 -34
- package/dist/jdl/converters/jdl-to-json/jdl-to-json-basic-entity-converter.js +1 -0
- package/dist/jdl/converters/jdl-to-json/jdl-to-json-option-converter.js +2 -2
- package/dist/jdl/converters/jdl-to-json/jdl-to-json-relationship-converter.js +1 -1
- package/dist/jdl/converters/jdl-to-json/jdl-without-application-to-json-converter.js +1 -1
- package/dist/jdl/converters/json-to-jdl-converter.js +1 -1
- package/dist/jdl/converters/json-to-jdl-entity-converter.js +1 -0
- package/dist/jdl/converters/parsed-jdl-to-jdl-object/application-converter.js +1 -17
- package/dist/jdl/converters/parsed-jdl-to-jdl-object/entity-converter.js +5 -0
- package/dist/jdl/converters/parsed-jdl-to-jdl-object/parsed-jdl-to-jdl-object-converter.js +0 -27
- package/dist/jdl/exporters/applications/jhipster-application-formatter.js +17 -1
- package/dist/jdl/exporters/config.js +11 -0
- package/dist/jdl/exporters/export-utils.js +2 -13
- package/dist/jdl/exporters/jhipster-entity-exporter.js +3 -2
- package/dist/jdl/index.js +1 -0
- package/dist/jdl/jdl-importer.js +6 -2
- package/dist/jdl/jhipster/default-application-options.js +1 -1
- package/dist/jdl/jhipster/field-types.js +1 -1
- package/dist/jdl/jhipster/json-entity.js +6 -0
- package/dist/jdl/models/jdl-application-configuration-factory.js +34 -2
- package/dist/jdl/models/jdl-application-configuration.js +6 -3
- package/dist/jdl/models/jdl-application-factory.js +2 -2
- package/dist/jdl/models/jdl-application.js +12 -3
- package/dist/jdl/models/jdl-entity.js +16 -1
- package/dist/jdl/models/jdl-field.js +13 -0
- package/dist/jdl/models/jdl-object.js +3 -3
- package/dist/jdl/models/jdl-relationship.js +23 -5
- package/dist/jdl/parsing/jdl-ast-builder-visitor.js +63 -7
- package/dist/jdl/parsing/jdl-parser.js +52 -6
- package/dist/jdl/parsing/lexer/application-tokens.js +2 -2
- package/dist/jdl/validators/entity-validator.js +4 -2
- package/dist/jdl/validators/enum-validator.js +4 -2
- package/dist/jdl/validators/jdl-with-application-validator.js +18 -8
- package/dist/jdl/validators/jdl-without-application-validator.js +30 -29
- package/dist/jdl/validators/validator.js +1 -1
- package/dist/testing/helpers.mjs +10 -3
- package/dist/types/cli/environment-builder.d.mts +2 -0
- package/dist/types/generators/angular/needle-api/needle-client-angular.d.mts +0 -1
- package/dist/types/generators/base/api.d.mts +12 -0
- package/dist/types/generators/base/support/config.d.mts +3 -3
- package/dist/types/generators/base/support/needles.d.mts +1 -1
- package/dist/types/generators/base-application/generator.d.mts +2 -2
- package/dist/types/generators/base-application/support/index.d.mts +1 -0
- package/dist/types/generators/base-application/support/prepare-entity.d.mts +6 -1
- package/dist/types/generators/base-application/support/update-application-entities-transform.d.mts +4 -0
- package/dist/types/generators/base-application/types/relationship.d.mts +4 -0
- package/dist/types/generators/base-core/generator.d.mts +7 -1
- package/dist/types/generators/bootstrap/support/auto-crlf-transform.d.mts +3 -2
- package/dist/types/generators/bootstrap/support/multi-step-transform/index.d.mts +3 -20
- package/dist/types/generators/bootstrap/support/multi-step-transform/template-file-fs.d.mts +15 -9
- package/dist/types/generators/bootstrap/support/multi-step-transform/template-file.d.mts +1 -0
- package/dist/types/generators/bootstrap-application-base/support/export-jdl-transform.d.mts +8 -0
- package/dist/types/generators/bootstrap-application-base/support/import-jdl-transform.d.mts +6 -0
- package/dist/types/generators/bootstrap-application-base/support/index.d.mts +2 -0
- package/dist/types/generators/client/support/entity-definition.d.mts +2 -2
- package/dist/types/generators/feign-client/types-export.d.ts +1 -0
- package/dist/types/generators/generator-constants.d.mts +52 -48
- package/dist/types/generators/generator-list.d.mts +1 -0
- package/dist/types/generators/java/support/package-info-transform.d.mts +1 -4
- package/dist/types/generators/project-name/support/name-resolver.d.mts +9 -1
- package/dist/types/generators/server/options/feign-client.d.mts +21 -0
- package/dist/types/generators/server/options/index.d.mts +1 -0
- package/dist/types/generators/server/support/templates/field-values.d.mts +1 -1
- package/dist/types/jdl/converters/json-to-jdl-converter.d.ts +1 -0
- package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/option-converter.d.ts +1 -1
- package/dist/types/jdl/exporters/config.d.ts +1 -0
- package/dist/types/jdl/index.d.ts +1 -0
- package/dist/types/jdl/jdl-importer.d.ts +1 -0
- package/dist/types/jdl/jhipster/json-entity.d.ts +2 -0
- package/dist/types/jdl/models/jdl-application-configuration-factory.d.ts +1 -0
- package/dist/types/jdl/models/jdl-application-configuration-option.d.ts +2 -2
- package/dist/types/jdl/models/jdl-application-configuration.d.ts +8 -6
- package/dist/types/jdl/models/jdl-application-factory.d.ts +1 -1
- package/dist/types/jdl/models/jdl-application.d.ts +8 -4
- package/dist/types/jdl/models/jdl-entity.d.ts +1 -0
- package/dist/types/jdl/models/jdl-object.d.ts +1 -1
- package/dist/types/jdl/models/jdl-relationship.d.ts +0 -18
- package/dist/types/jdl/models/list-jdl-application-configuration-option.d.ts +1 -1
- package/dist/types/jdl/parsing/jdl-ast-builder-visitor.d.ts +10 -0
- package/dist/types/jdl/parsing/jdl-parser.d.ts +3 -0
- package/dist/types/jdl/parsing/lexer/application-tokens.d.ts +1 -0
- package/dist/types/jdl/types/types.d.mts +2 -2
- package/dist/types/jdl/validators/entity-validator.d.ts +2 -2
- package/dist/types/jdl/validators/enum-validator.d.ts +2 -2
- package/dist/types/jdl/validators/validator.d.ts +4 -1
- package/package.json +41 -41
|
@@ -21,6 +21,7 @@ import { fieldTypes, validations } from '../../../jdl/jhipster/index.mjs';
|
|
|
21
21
|
import { getTypescriptType, prepareField as prepareClientFieldForTemplates } from '../../client/support/index.mjs';
|
|
22
22
|
import { prepareField as prepareServerFieldForTemplates } from '../../server/support/index.mjs';
|
|
23
23
|
import { fieldIsEnum } from './field-utils.mjs';
|
|
24
|
+
import { mutateData } from '../../base/support/config.mjs';
|
|
24
25
|
const { BlobTypes, CommonDBTypes, RelationalOnlyDBTypes } = fieldTypes;
|
|
25
26
|
const { Validations: { MIN, MINLENGTH, MINBYTES, MAX, MAXBYTES, MAXLENGTH, PATTERN, REQUIRED, UNIQUE }, } = validations;
|
|
26
27
|
const { TEXT, IMAGE, ANY } = BlobTypes;
|
|
@@ -267,14 +268,17 @@ export default function prepareField(entityWithConfig, field, generator) {
|
|
|
267
268
|
return field;
|
|
268
269
|
}
|
|
269
270
|
function prepareCommonFieldForTemplates(entityWithConfig, field, generator) {
|
|
270
|
-
|
|
271
|
-
propertyName: field.fieldName,
|
|
271
|
+
mutateData(field, {
|
|
272
272
|
path: [field.fieldName],
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
273
|
+
propertyName: field.fieldName,
|
|
274
|
+
propertyNameCapitalized: ({ propertyName, propertyNameCapitalized }) => propertyNameCapitalized ?? _.upperFirst(propertyName),
|
|
275
|
+
fieldNameCapitalized: ({ fieldName, fieldNameCapitalized }) => fieldNameCapitalized ?? _.upperFirst(fieldName),
|
|
276
|
+
fieldNameUnderscored: ({ fieldName, fieldNameUnderscored }) => fieldNameUnderscored ?? _.snakeCase(fieldName),
|
|
277
|
+
fieldNameHumanized: ({ fieldName, fieldNameHumanized }) => fieldNameHumanized ?? _.startCase(fieldName),
|
|
278
|
+
fieldTranslationKey: ({ fieldName, fieldTranslationKey }) => fieldTranslationKey ?? `${entityWithConfig.i18nKeyPrefix}.${fieldName}`,
|
|
279
|
+
tsType: ({ fieldType, tsType }) => tsType ?? getTypescriptType(fieldType),
|
|
280
|
+
});
|
|
281
|
+
_.defaults(field, {
|
|
278
282
|
entity: entityWithConfig,
|
|
279
283
|
});
|
|
280
284
|
const fieldType = field.fieldType;
|
|
@@ -22,20 +22,12 @@ import { databaseTypes, entityOptions, reservedKeywords, validations, checkAndRe
|
|
|
22
22
|
import { upperFirstCamelCase } from '../../base/support/string.mjs';
|
|
23
23
|
import { getJoinTableName, hibernateSnakeCase } from '../../server/support/index.mjs';
|
|
24
24
|
import { stringifyApplicationData } from './debug.mjs';
|
|
25
|
+
import { mutateData } from '../../base/support/config.mjs';
|
|
25
26
|
const { isReservedTableName } = reservedKeywords;
|
|
26
27
|
const { NEO4J, NO: DATABASE_NO } = databaseTypes;
|
|
27
28
|
const { MapperTypes } = entityOptions;
|
|
28
29
|
const { Validations: { REQUIRED }, } = validations;
|
|
29
30
|
const { MAPSTRUCT } = MapperTypes;
|
|
30
|
-
function _derivedProperties(relationship) {
|
|
31
|
-
_.defaults(relationship, {
|
|
32
|
-
relationshipOneToOne: relationship.relationshipType === 'one-to-one',
|
|
33
|
-
relationshipOneToMany: relationship.relationshipType === 'one-to-many',
|
|
34
|
-
relationshipManyToOne: relationship.relationshipType === 'many-to-one',
|
|
35
|
-
relationshipManyToMany: relationship.relationshipType === 'many-to-many',
|
|
36
|
-
otherEntityUser: relationship.otherEntityName === 'user',
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
31
|
function _defineOnUpdateAndOnDelete(relationship, generator) {
|
|
40
32
|
relationship.onDelete = checkAndReturnRelationshipOnValue(relationship.options?.onDelete, generator);
|
|
41
33
|
relationship.onUpdate = checkAndReturnRelationshipOnValue(relationship.options?.onUpdate, generator);
|
|
@@ -54,12 +46,19 @@ export default function prepareRelationship(entityWithConfig, relationship, gene
|
|
|
54
46
|
Object.assign(relationship, {
|
|
55
47
|
relationshipLeftSide: relationship.relationshipSide === 'left',
|
|
56
48
|
relationshipRightSide: relationship.relationshipSide === 'right',
|
|
49
|
+
collection: relationship.relationshipType === 'one-to-many' || relationship.relationshipType === 'many-to-many',
|
|
50
|
+
relationshipOneToOne: relationship.relationshipType === 'one-to-one',
|
|
51
|
+
relationshipOneToMany: relationship.relationshipType === 'one-to-many',
|
|
52
|
+
relationshipManyToOne: relationship.relationshipType === 'many-to-one',
|
|
53
|
+
relationshipManyToMany: relationship.relationshipType === 'many-to-many',
|
|
54
|
+
otherEntityUser: relationship.otherEntityName === 'user',
|
|
57
55
|
});
|
|
58
|
-
|
|
56
|
+
mutateData(relationship, {
|
|
59
57
|
// let ownerSide true when type is 'many-to-one' for convenience.
|
|
60
58
|
// means that this side should control the reference.
|
|
61
|
-
ownerSide:
|
|
62
|
-
|
|
59
|
+
ownerSide: ({ ownerSide, relationshipLeftSide, relationshipManyToOne, relationshipOneToMany }) => ownerSide ?? (relationshipManyToOne || (relationshipLeftSide && !relationshipOneToMany)),
|
|
60
|
+
persistableRelationship: ({ persistableRelationship, ownerSide }) => persistableRelationship ?? ownerSide,
|
|
61
|
+
relationshipUpdateBackReference: ({ relationshipUpdateBackReference, ownerSide, relationshipRightSide }) => relationshipUpdateBackReference ?? (entityWithConfig.databaseType === 'neo4j' ? relationshipRightSide : !ownerSide),
|
|
63
62
|
});
|
|
64
63
|
relationship.otherSideReferenceExists = false;
|
|
65
64
|
relationship.otherEntityIsEmbedded = otherEntityData.embedded;
|
|
@@ -80,6 +79,9 @@ export default function prepareRelationship(entityWithConfig, relationship, gene
|
|
|
80
79
|
entityWithConfig.databaseType !== NEO4J &&
|
|
81
80
|
entityWithConfig.databaseType !== DATABASE_NO &&
|
|
82
81
|
(relationship.relationshipType === 'one-to-many' || relationship.ownerSide === false)) {
|
|
82
|
+
if (otherEntityData.builtInUser) {
|
|
83
|
+
throw new Error(`Error at entity ${entityName}: relationships with built-in User cannot have back reference`);
|
|
84
|
+
}
|
|
83
85
|
throw new Error(`Error at entity ${entityName}: could not find the other side of the relationship ${stringifyApplicationData(relationship)}`);
|
|
84
86
|
}
|
|
85
87
|
else {
|
|
@@ -130,8 +132,9 @@ export default function prepareRelationship(entityWithConfig, relationship, gene
|
|
|
130
132
|
: _.upperFirst(pluralize(relationship.relationshipName)),
|
|
131
133
|
otherEntityNameCapitalizedPlural: pluralize(relationship.otherEntityNameCapitalized),
|
|
132
134
|
});
|
|
133
|
-
|
|
135
|
+
mutateData(relationship, {
|
|
134
136
|
propertyName: relationship.collection ? relationship.relationshipFieldNamePlural : relationship.relationshipFieldName,
|
|
137
|
+
propertyNameCapitalized: ({ propertyName, propertyNameCapitalized }) => propertyNameCapitalized ?? _.upperFirst(propertyName),
|
|
135
138
|
});
|
|
136
139
|
if (entityWithConfig.dto === MAPSTRUCT) {
|
|
137
140
|
if (otherEntityData.dto !== MAPSTRUCT && !otherEntityData.builtInUser) {
|
|
@@ -205,7 +208,6 @@ export default function prepareRelationship(entityWithConfig, relationship, gene
|
|
|
205
208
|
}
|
|
206
209
|
relationship.reference = relationshipToReference(entityWithConfig, relationship);
|
|
207
210
|
_defineOnUpdateAndOnDelete(relationship, generator);
|
|
208
|
-
_derivedProperties(relationship);
|
|
209
211
|
return relationship;
|
|
210
212
|
}
|
|
211
213
|
function relationshipToReference(entity, relationship, pathPrefix = []) {
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { readdir } from 'fs/promises';
|
|
2
|
+
import { loadFile } from 'mem-fs';
|
|
3
|
+
import { Minimatch } from 'minimatch';
|
|
4
|
+
import { transform } from 'p-transform';
|
|
5
|
+
import { basename, join } from 'path';
|
|
6
|
+
import { GENERATOR_JHIPSTER } from '../../generator-constants.mjs';
|
|
7
|
+
export const updateApplicationEntitiesTransform = ({ destinationPath, throwOnMissingConfig = true, }) => {
|
|
8
|
+
let yoRcFileInMemory;
|
|
9
|
+
const entities = [];
|
|
10
|
+
const yoRcFilePath = join(destinationPath, '.yo-rc.json');
|
|
11
|
+
const entitiesMatcher = new Minimatch(`${destinationPath}/.jhipster/*.json`);
|
|
12
|
+
return transform(file => {
|
|
13
|
+
if (file.path === yoRcFilePath) {
|
|
14
|
+
yoRcFileInMemory = file;
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
if (entitiesMatcher.match(file.path)) {
|
|
18
|
+
entities.push(basename(file.path).replace('.json', ''));
|
|
19
|
+
}
|
|
20
|
+
return file;
|
|
21
|
+
}, async function () {
|
|
22
|
+
try {
|
|
23
|
+
entities.push(...(await readdir(join(destinationPath, '.jhipster'))).map(file => file.replace('.json', '')));
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// Directory does not exist
|
|
27
|
+
}
|
|
28
|
+
if (entities.length > 0) {
|
|
29
|
+
// The mem-fs instance requires another file instance to emit a change event
|
|
30
|
+
const yoRcFile = loadFile(yoRcFilePath);
|
|
31
|
+
// Prefer in-memory file if it exists
|
|
32
|
+
const yoRcFileContents = yoRcFileInMemory?.contents ?? yoRcFile.contents;
|
|
33
|
+
if (yoRcFileContents) {
|
|
34
|
+
const contents = JSON.parse(yoRcFileContents.toString());
|
|
35
|
+
if (contents[GENERATOR_JHIPSTER]) {
|
|
36
|
+
contents[GENERATOR_JHIPSTER].entities = [...new Set([...(contents[GENERATOR_JHIPSTER].entities ?? []), ...entities])];
|
|
37
|
+
yoRcFile.contents = Buffer.from(JSON.stringify(contents, null, 2));
|
|
38
|
+
yoRcFileInMemory = yoRcFile;
|
|
39
|
+
}
|
|
40
|
+
else if (throwOnMissingConfig) {
|
|
41
|
+
throw new Error(`File ${yoRcFile.path} is not a valid JHipster configuration file`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else if (throwOnMissingConfig) {
|
|
45
|
+
throw new Error(`File ${yoRcFile.path} has no contents`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (yoRcFileInMemory) {
|
|
49
|
+
this.push(yoRcFileInMemory);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
};
|
|
@@ -116,7 +116,7 @@ export default class CoreGenerator extends YeomanGenerator {
|
|
|
116
116
|
}
|
|
117
117
|
this.registerPriorities(CUSTOM_PRIORITIES);
|
|
118
118
|
if (this.getFeatures().jhipsterBootstrap ?? true) {
|
|
119
|
-
// jhipster:bootstrap is always required. Run it once the
|
|
119
|
+
// jhipster:bootstrap is always required. Run it once the environment starts.
|
|
120
120
|
this.env.queueTask('environment:run', async () => this.composeWithJHipster(GENERATOR_BOOTSTRAP).then(), {
|
|
121
121
|
once: 'queueJhipsterBootstrap',
|
|
122
122
|
startQueue: false,
|
|
@@ -141,6 +141,19 @@ export default class CoreGenerator extends YeomanGenerator {
|
|
|
141
141
|
}
|
|
142
142
|
return this._needleApi;
|
|
143
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* Warn or throws check failure based on current skipChecks option.
|
|
146
|
+
* @param message
|
|
147
|
+
*/
|
|
148
|
+
handleCheckFailure(message) {
|
|
149
|
+
if (this.skipChecks) {
|
|
150
|
+
this.log.warn(message);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
throw new Error(`${message}
|
|
154
|
+
You can ignore this error by passing '--skip-checks' to jhipster command.`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
144
157
|
/**
|
|
145
158
|
* Check if the JHipster version used to generate an existing project is less than the passed version argument
|
|
146
159
|
*
|
|
@@ -189,7 +202,7 @@ export default class CoreGenerator extends YeomanGenerator {
|
|
|
189
202
|
*/
|
|
190
203
|
getTaskNames() {
|
|
191
204
|
let priorities = super.getTaskNames();
|
|
192
|
-
if (this.options.skipPriorities) {
|
|
205
|
+
if (!this.features.disableSkipPriorities && this.options.skipPriorities) {
|
|
193
206
|
// Make sure yeoman-generator will not throw on empty tasks due to filtered priorities.
|
|
194
207
|
this.customLifecycle = priorities.length > 0;
|
|
195
208
|
priorities = priorities.filter(priorityName => !this.options.skipPriorities.includes(priorityName));
|
|
@@ -226,7 +239,7 @@ export default class CoreGenerator extends YeomanGenerator {
|
|
|
226
239
|
if (!optionDesc?.type || !optionDesc.scope || (common && optionDesc.scope === 'generator'))
|
|
227
240
|
return;
|
|
228
241
|
let optionValue;
|
|
229
|
-
// Hidden options are test options, which doesn't rely on
|
|
242
|
+
// Hidden options are test options, which doesn't rely on commander for options parsing.
|
|
230
243
|
// We must parse environment variables manually
|
|
231
244
|
if (this.options[optionDesc.name ?? optionName] === undefined && optionDesc.env && process.env[optionDesc.env]) {
|
|
232
245
|
optionValue = process.env[optionDesc.env];
|
|
@@ -413,7 +426,7 @@ export default class CoreGenerator extends YeomanGenerator {
|
|
|
413
426
|
generator = namespace;
|
|
414
427
|
}
|
|
415
428
|
else {
|
|
416
|
-
// Keep test
|
|
429
|
+
// Keep test compatibility were jhipster lookup does not run.
|
|
417
430
|
const found = ['/index.js', '/index.cjs', '/index.mjs', '/index.ts', '/index.cts', '/index.mts'].find(extension => {
|
|
418
431
|
const pathToLook = join(__dirname, `../${generator}${extension}`);
|
|
419
432
|
return existsSync(pathToLook) ? pathToLook : undefined;
|
|
@@ -64,7 +64,7 @@ export default class GeneratorBaseEntityChanges extends GeneratorBaseApplication
|
|
|
64
64
|
const { generateBuiltInUserEntity, incrementalChangelog } = this.sharedData.getApplication();
|
|
65
65
|
const entityNames = this.getExistingEntityNames();
|
|
66
66
|
const entitiesByName = Object.fromEntries(entityNames.map(entityName => [entityName, this.sharedData.getEntity(entityName)]));
|
|
67
|
-
const entitiesWithExistingChangelog = entityNames.filter(entityName => !this.isChangelogNew({ entityName, changelogDate: entitiesByName[entityName].changelogDate }));
|
|
67
|
+
const entitiesWithExistingChangelog = entityNames.filter(entityName => !this.isChangelogNew({ entityName, changelogDate: entitiesByName[entityName].annotations?.changelogDate }));
|
|
68
68
|
const previousEntitiesByName = Object.fromEntries(entityNames
|
|
69
69
|
.filter(entityName => existsSync(this.getEntityConfigPath(entityName)))
|
|
70
70
|
.map(entityName => [
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
19
|
import chalk from 'chalk';
|
|
20
|
-
import { readdirSync, statSync } from 'node:fs';
|
|
20
|
+
import { readFileSync, readdirSync, statSync } from 'node:fs';
|
|
21
|
+
import { join } from 'node:path';
|
|
21
22
|
import { loadConfigs } from './docker-base.mjs';
|
|
22
23
|
import { applicationTypes, monitoringTypes, serviceDiscoveryTypes } from '../../../jdl/jhipster/index.mjs';
|
|
23
24
|
import { convertSecretToBase64 } from '../../base/support/index.mjs';
|
|
@@ -115,7 +116,7 @@ async function askForPath() {
|
|
|
115
116
|
const path = this.destinationPath(input);
|
|
116
117
|
try {
|
|
117
118
|
if (statSync(path).isDirectory) {
|
|
118
|
-
const appsFolders = getAppFolders.call(this,
|
|
119
|
+
const appsFolders = getAppFolders.call(this, path, deploymentApplicationType);
|
|
119
120
|
if (appsFolders.length === 0) {
|
|
120
121
|
return deploymentApplicationType === MONOLITH
|
|
121
122
|
? `No monolith found in ${path}`
|
|
@@ -138,7 +139,7 @@ async function askForPath() {
|
|
|
138
139
|
this.log.log(chalk.yellow(`The path "${this.directoryPath}" does not end with a trailing "/", adding it anyway.`));
|
|
139
140
|
this.directoryPath += '/';
|
|
140
141
|
}
|
|
141
|
-
this.appsFolders = getAppFolders.call(this, this.directoryPath, deploymentApplicationType);
|
|
142
|
+
this.appsFolders = getAppFolders.call(this, this.destinationPath(this.directoryPath), deploymentApplicationType);
|
|
142
143
|
// Removing registry from appsFolders, using reverse for loop
|
|
143
144
|
for (let i = this.appsFolders.length - 1; i >= 0; i--) {
|
|
144
145
|
if (this.appsFolders[i] === 'jhipster-registry' || this.appsFolders[i] === 'registry') {
|
|
@@ -341,25 +342,25 @@ async function askForDockerPushCommand() {
|
|
|
341
342
|
* @param deploymentApplicationType type of application being composed
|
|
342
343
|
* @returns {Array} array of string representing app folders
|
|
343
344
|
*/
|
|
344
|
-
export function getAppFolders(
|
|
345
|
-
const
|
|
346
|
-
const files = readdirSync(destinationPath);
|
|
345
|
+
export function getAppFolders(directory, deploymentApplicationType) {
|
|
346
|
+
const files = readdirSync(directory);
|
|
347
347
|
const appsFolders = [];
|
|
348
348
|
files.forEach(file => {
|
|
349
349
|
try {
|
|
350
|
-
if (statSync(
|
|
351
|
-
|
|
350
|
+
if (statSync(join(directory, file)).isDirectory()) {
|
|
351
|
+
const yoRcFile = join(directory, file, '.yo-rc.json');
|
|
352
|
+
if (statSync(yoRcFile).isFile()) {
|
|
352
353
|
try {
|
|
353
|
-
const fileData =
|
|
354
|
+
const fileData = JSON.parse(readFileSync(yoRcFile).toString());
|
|
354
355
|
if (fileData['generator-jhipster'].baseName !== undefined &&
|
|
355
356
|
(deploymentApplicationType === undefined ||
|
|
356
|
-
deploymentApplicationType === fileData['generator-jhipster'].applicationType ||
|
|
357
|
+
deploymentApplicationType === (fileData['generator-jhipster'].applicationType ?? MONOLITH) ||
|
|
357
358
|
(deploymentApplicationType === MICROSERVICE && fileData['generator-jhipster'].applicationType === GATEWAY))) {
|
|
358
|
-
appsFolders.push(file.
|
|
359
|
+
appsFolders.push(file.match(/([^/]*)\/*$/)[1]);
|
|
359
360
|
}
|
|
360
361
|
}
|
|
361
362
|
catch (err) {
|
|
362
|
-
this.log.error(chalk.red(`${
|
|
363
|
+
this.log.error(chalk.red(`${yoRcFile}: this .yo-rc.json can't be read`));
|
|
363
364
|
this.log.debug('Error:', err);
|
|
364
365
|
}
|
|
365
366
|
}
|
|
@@ -16,8 +16,10 @@
|
|
|
16
16
|
* See the License for the specific language governing permissions and
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
|
+
import { Duplex } from 'stream';
|
|
19
20
|
import { forceYoFiles, createConflicterTransform, createYoResolveTransform } from '@yeoman/conflicter';
|
|
20
|
-
import { isFilePending } from 'mem-fs-editor/state';
|
|
21
|
+
import { isFileStateModified, isFilePending } from 'mem-fs-editor/state';
|
|
22
|
+
import { createCommitTransform } from 'mem-fs-editor/transform';
|
|
21
23
|
import BaseGenerator from '../base/index.mjs';
|
|
22
24
|
import { createMultiStepTransform, createPrettierTransform, createForceWriteConfigFilesTransform, autoCrlfTransform, isPrettierConfigFilePath, createSortConfigFilesTransform, createESLintTransform, createRemoveUnusedImportsTransform, } from './support/index.mjs';
|
|
23
25
|
import { PRETTIER_EXTENSIONS } from '../generator-constants.mjs';
|
|
@@ -34,8 +36,11 @@ export default class BootstrapGenerator extends BaseGenerator {
|
|
|
34
36
|
static PRE_CONFLICTS = PRE_CONFLICTS_PRIORITY;
|
|
35
37
|
upgradeCommand;
|
|
36
38
|
skipPrettier;
|
|
39
|
+
prettierExtensions = PRETTIER_EXTENSIONS.split(',');
|
|
40
|
+
prettierOptions = { plugins: [] };
|
|
41
|
+
refreshOnCommit = false;
|
|
37
42
|
constructor(args, options, features) {
|
|
38
|
-
super(args, options, { jhipsterBootstrap: false, uniqueGlobally: true, customCommitTask: () => this.
|
|
43
|
+
super(args, options, { jhipsterBootstrap: false, uniqueGlobally: true, customCommitTask: () => this.commitTask(), ...features });
|
|
39
44
|
}
|
|
40
45
|
async beforeQueue() {
|
|
41
46
|
loadStoredAppOptions.call(this);
|
|
@@ -52,7 +57,7 @@ export default class BootstrapGenerator extends BaseGenerator {
|
|
|
52
57
|
get initializing() {
|
|
53
58
|
return this.asInitializingTaskGroup({
|
|
54
59
|
loadOptions() {
|
|
55
|
-
this.parseJHipsterOptions(command.options);
|
|
60
|
+
this.parseJHipsterOptions(command.options, command.configs);
|
|
56
61
|
},
|
|
57
62
|
validateBlueprint() {
|
|
58
63
|
if (this.jhipsterConfig.blueprints && !this.skipChecks) {
|
|
@@ -69,13 +74,8 @@ export default class BootstrapGenerator extends BaseGenerator {
|
|
|
69
74
|
}
|
|
70
75
|
get multistepTransform() {
|
|
71
76
|
return {
|
|
72
|
-
|
|
77
|
+
queueMultistepTransform() {
|
|
73
78
|
this.queueMultistepTransform();
|
|
74
|
-
this.env.sharedFs.on('change', filePath => {
|
|
75
|
-
if (createMultiStepTransform().templateFileFs.isTemplate(filePath)) {
|
|
76
|
-
this.queueMultistepTransform();
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
79
|
},
|
|
80
80
|
};
|
|
81
81
|
}
|
|
@@ -84,13 +84,8 @@ export default class BootstrapGenerator extends BaseGenerator {
|
|
|
84
84
|
}
|
|
85
85
|
get preConflicts() {
|
|
86
86
|
return {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
this.env.sharedFs.on('change', filePath => {
|
|
90
|
-
if (isPrettierConfigFilePath(filePath)) {
|
|
91
|
-
this.queueCommitPrettierConfig();
|
|
92
|
-
}
|
|
93
|
-
});
|
|
87
|
+
queueCommitPrettierConfig() {
|
|
88
|
+
this.queueCommitPrettierConfig();
|
|
94
89
|
},
|
|
95
90
|
};
|
|
96
91
|
}
|
|
@@ -101,14 +96,22 @@ export default class BootstrapGenerator extends BaseGenerator {
|
|
|
101
96
|
* Queue multi step templates transform
|
|
102
97
|
*/
|
|
103
98
|
queueMultistepTransform() {
|
|
99
|
+
const multiStepTransform = createMultiStepTransform();
|
|
100
|
+
const listener = filePath => {
|
|
101
|
+
if (multiStepTransform.templateFileFs.isTemplate(filePath)) {
|
|
102
|
+
this.env.sharedFs.removeListener('change', listener);
|
|
103
|
+
this.queueMultistepTransform();
|
|
104
|
+
}
|
|
105
|
+
};
|
|
104
106
|
this.queueTask({
|
|
105
|
-
method: () => {
|
|
106
|
-
|
|
107
|
-
const filter = file => isFilePending(file) && multiStepTransform.templateFileFs.isTemplate(file.path);
|
|
108
|
-
return this.env.applyTransforms([multiStepTransform], {
|
|
107
|
+
method: async () => {
|
|
108
|
+
await this.pipeline({
|
|
109
109
|
name: 'applying multi-step templates',
|
|
110
|
-
|
|
111
|
-
|
|
110
|
+
filter: file => isFileStateModified(file) && multiStepTransform.templateFileFs.isTemplate(file.path),
|
|
111
|
+
refresh: true,
|
|
112
|
+
allowOverride: true,
|
|
113
|
+
}, multiStepTransform);
|
|
114
|
+
this.env.sharedFs.on('change', listener);
|
|
112
115
|
},
|
|
113
116
|
taskName: MULTISTEP_TRANSFORM_QUEUE,
|
|
114
117
|
queueName: MULTISTEP_TRANSFORM_QUEUE,
|
|
@@ -116,9 +119,16 @@ export default class BootstrapGenerator extends BaseGenerator {
|
|
|
116
119
|
});
|
|
117
120
|
}
|
|
118
121
|
queueCommitPrettierConfig() {
|
|
122
|
+
const listener = filePath => {
|
|
123
|
+
if (isPrettierConfigFilePath(filePath)) {
|
|
124
|
+
this.env.sharedFs.removeListener('change', listener);
|
|
125
|
+
this.queueCommitPrettierConfig();
|
|
126
|
+
}
|
|
127
|
+
};
|
|
119
128
|
this.queueTask({
|
|
120
129
|
method: async () => {
|
|
121
130
|
await this.commitPrettierConfig();
|
|
131
|
+
this.env.sharedFs.on('change', listener);
|
|
122
132
|
},
|
|
123
133
|
taskName: 'commitPrettierConfig',
|
|
124
134
|
queueName: PRE_CONFLICTS_QUEUE,
|
|
@@ -126,37 +136,66 @@ export default class BootstrapGenerator extends BaseGenerator {
|
|
|
126
136
|
});
|
|
127
137
|
}
|
|
128
138
|
async commitPrettierConfig() {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
139
|
+
await this.commitSharedFs({
|
|
140
|
+
log: 'prettier configuration files committed to disk',
|
|
141
|
+
filter: file => isPrettierConfigFilePath(file.path),
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
async commitTask() {
|
|
145
|
+
await this.commitSharedFs({ refresh: this.refreshOnCommit }, ...this.env
|
|
146
|
+
.findFeature('commitTransformFactory')
|
|
147
|
+
.map(({ feature }) => feature())
|
|
148
|
+
.flat());
|
|
132
149
|
}
|
|
133
150
|
/**
|
|
134
151
|
* Commits the MemFs to the disc.
|
|
135
|
-
* @param stream - files stream, defaults to this.sharedFs.stream().
|
|
136
152
|
*/
|
|
137
|
-
async commitSharedFs(
|
|
138
|
-
const
|
|
139
|
-
|
|
153
|
+
async commitSharedFs({ log, ...options } = {}, ...transforms) {
|
|
154
|
+
const skipYoResolveTransforms = [];
|
|
155
|
+
if (!this.options.skipYoResolve) {
|
|
156
|
+
skipYoResolveTransforms.push(createYoResolveTransform());
|
|
157
|
+
}
|
|
158
|
+
const prettierTransforms = [];
|
|
159
|
+
if (!this.skipPrettier) {
|
|
160
|
+
const ignoreErrors = this.options.ignoreErrors || this.upgradeCommand;
|
|
161
|
+
prettierTransforms.push(createESLintTransform.call(this, { ignoreErrors, extensions: 'ts,js' }), createRemoveUnusedImportsTransform.call(this, { ignoreErrors }), await createPrettierTransform.call(this, {
|
|
162
|
+
ignoreErrors,
|
|
163
|
+
prettierPackageJson: true,
|
|
164
|
+
prettierJava: !this.jhipsterConfig.skipServer,
|
|
165
|
+
extensions: this.prettierExtensions.join(','),
|
|
166
|
+
prettierOptions: this.prettierOptions,
|
|
167
|
+
}));
|
|
168
|
+
}
|
|
169
|
+
const autoCrlfTransforms = [];
|
|
170
|
+
if (this.jhipsterConfig.autoCrlf) {
|
|
171
|
+
autoCrlfTransforms.push(await autoCrlfTransform({ baseDir: this.destinationPath() }));
|
|
172
|
+
}
|
|
140
173
|
const transformStreams = [
|
|
141
|
-
...
|
|
174
|
+
...skipYoResolveTransforms,
|
|
142
175
|
forceYoFiles(),
|
|
143
176
|
createSortConfigFilesTransform(),
|
|
144
177
|
createForceWriteConfigFilesTransform(),
|
|
145
|
-
...
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
createRemoveUnusedImportsTransform.call(this, { ignoreErrors }),
|
|
150
|
-
await createPrettierTransform.call(this, {
|
|
151
|
-
ignoreErrors,
|
|
152
|
-
prettierPackageJson: true,
|
|
153
|
-
prettierJava: !this.jhipsterConfig.skipServer,
|
|
154
|
-
extensions: PRETTIER_EXTENSIONS,
|
|
155
|
-
}),
|
|
156
|
-
]),
|
|
157
|
-
...(this.jhipsterConfig.autoCrlf ? [autoCrlfTransform(this.createGit())] : []),
|
|
158
|
-
createConflicterTransform(this.env.adapter, { ...this.env.conflicterOptions, memFs: this.env.sharedFs }),
|
|
178
|
+
...prettierTransforms,
|
|
179
|
+
...autoCrlfTransforms,
|
|
180
|
+
createConflicterTransform(this.env.adapter, { ...this.env.conflicterOptions }),
|
|
181
|
+
createCommitTransform(),
|
|
159
182
|
];
|
|
160
|
-
await this.
|
|
183
|
+
await this.pipeline({
|
|
184
|
+
refresh: false,
|
|
185
|
+
// Let pending files pass through.
|
|
186
|
+
pendingFiles: false,
|
|
187
|
+
...options,
|
|
188
|
+
// Disable progress since it blocks stdin.
|
|
189
|
+
disabled: true,
|
|
190
|
+
}, ...transforms,
|
|
191
|
+
// Filter out pending files.
|
|
192
|
+
Duplex.from(async function* (files) {
|
|
193
|
+
for await (const file of files) {
|
|
194
|
+
if (isFilePending(file)) {
|
|
195
|
+
yield file;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}), ...transformStreams);
|
|
199
|
+
this.log.ok(log ?? 'files committed to disk');
|
|
161
200
|
}
|
|
162
201
|
}
|
|
@@ -18,8 +18,11 @@
|
|
|
18
18
|
*/
|
|
19
19
|
import { stat } from 'fs/promises';
|
|
20
20
|
import { createReadStream } from 'fs';
|
|
21
|
+
import { relative } from 'path';
|
|
21
22
|
import { transform } from 'p-transform';
|
|
22
23
|
import { isBinaryFile } from 'isbinaryfile';
|
|
24
|
+
import { simpleGit } from 'simple-git';
|
|
25
|
+
import { isFileStateModified } from 'mem-fs-editor/state';
|
|
23
26
|
import { normalizeLineEndings } from '../../base/support/index.mjs';
|
|
24
27
|
/**
|
|
25
28
|
* Detect the file first line endings
|
|
@@ -44,27 +47,37 @@ export function detectCrLf(filePath) {
|
|
|
44
47
|
});
|
|
45
48
|
});
|
|
46
49
|
}
|
|
47
|
-
const autoCrlfTransform = (
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const fstat = await stat(file.path);
|
|
55
|
-
if (!fstat.isFile()) {
|
|
56
|
-
return file;
|
|
50
|
+
const autoCrlfTransform = async ({ baseDir }) => {
|
|
51
|
+
const git = simpleGit({ baseDir }).env({
|
|
52
|
+
...process.env,
|
|
53
|
+
LANG: 'en',
|
|
54
|
+
});
|
|
55
|
+
if (!(await git.checkIsRepo())) {
|
|
56
|
+
throw new Error(`${baseDir} is not inside a git repository`);
|
|
57
57
|
}
|
|
58
|
-
|
|
59
|
-
.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
58
|
+
return transform(async (file) => {
|
|
59
|
+
if (!isFileStateModified(file) || !file.path.startsWith(baseDir)) {
|
|
60
|
+
return file;
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
const fstat = await stat(file.path);
|
|
64
|
+
if (fstat.isFile()) {
|
|
65
|
+
if (await isBinaryFile(file.contents)) {
|
|
66
|
+
return file;
|
|
67
|
+
}
|
|
68
|
+
const attrs = Object.fromEntries((await git.raw('check-attr', 'binary', 'eol', '--', relative(baseDir, file.path)))
|
|
69
|
+
.split(/\r\n|\r|\n/)
|
|
70
|
+
.map(attr => attr.split(':'))
|
|
71
|
+
.map(([_file, attr, value]) => [attr, value]));
|
|
72
|
+
if (attrs.eol === 'crlf' || (attrs.binary !== 'set' && attrs.eol !== 'lf' && (await detectCrLf(file.path)))) {
|
|
73
|
+
file.contents = Buffer.from(normalizeLineEndings(file.contents.toString(), '\r\n'));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// File doesn't exist.
|
|
79
|
+
}
|
|
63
80
|
return file;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
file.contents = Buffer.from(normalizeLineEndings(file.contents.toString(), '\r\n'));
|
|
67
|
-
}
|
|
68
|
-
return file;
|
|
69
|
-
});
|
|
81
|
+
});
|
|
82
|
+
};
|
|
70
83
|
export default autoCrlfTransform;
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
19
|
import { passthrough } from 'p-transform';
|
|
20
|
-
import {
|
|
20
|
+
import { isFileStateModified } from 'mem-fs-editor/state';
|
|
21
21
|
import ESLint from 'eslint';
|
|
22
22
|
import { Minimatch } from 'minimatch';
|
|
23
23
|
import { getPackageRoot } from '../../../lib/index.mjs';
|
|
@@ -46,12 +46,9 @@ export const createESLintTransform = function (transformOptions = {}) {
|
|
|
46
46
|
},
|
|
47
47
|
});
|
|
48
48
|
return passthrough(async (file) => {
|
|
49
|
-
if (!minimatch.match(file.path) ||
|
|
49
|
+
if (!minimatch.match(file.path) || !isFileStateModified(file)) {
|
|
50
50
|
return;
|
|
51
51
|
}
|
|
52
|
-
if (!file.contents) {
|
|
53
|
-
throw new Error(`File content doesn't exist for ${file.relative}`);
|
|
54
|
-
}
|
|
55
52
|
try {
|
|
56
53
|
if (await eslint.isPathIgnored(file.path)) {
|
|
57
54
|
return;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { extname } from 'path';
|
|
2
2
|
import { passthrough } from '@yeoman/transform';
|
|
3
|
-
import {
|
|
3
|
+
import { isFileStateModified } from 'mem-fs-editor/state';
|
|
4
4
|
import { removeUnusedImports } from 'java-lint';
|
|
5
5
|
// eslint-disable-next-line import/prefer-default-export
|
|
6
6
|
export const createRemoveUnusedImportsTransform = function (options = {}) {
|
|
7
7
|
const { ignoreErrors } = options;
|
|
8
8
|
return passthrough((file) => {
|
|
9
|
-
if (extname(file.path) === '.java' &&
|
|
9
|
+
if (extname(file.path) === '.java' && isFileStateModified(file)) {
|
|
10
10
|
if (file.contents) {
|
|
11
11
|
try {
|
|
12
12
|
file.contents = Buffer.from(removeUnusedImports(file.contents.toString('utf8')));
|