generator-jhipster 8.5.0 → 8.6.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.
Files changed (211) hide show
  1. package/README.md +3 -4
  2. package/dist/cli/commands.mjs +2 -0
  3. package/dist/cli/environment-builder.mjs +5 -0
  4. package/dist/cli/program.mjs +10 -4
  5. package/dist/generators/angular/entity-files-angular.js +6 -7
  6. package/dist/generators/angular/resources/package.json +17 -17
  7. package/dist/generators/angular/templates/src/main/webapp/app/account/activate/activate.component.spec.ts.ejs +4 -3
  8. package/dist/generators/angular/templates/src/main/webapp/app/account/activate/activate.service.spec.ts.ejs +3 -2
  9. package/dist/generators/angular/templates/src/main/webapp/app/account/password/password.component.spec.ts.ejs +4 -5
  10. package/dist/generators/angular/templates/src/main/webapp/app/account/password/password.service.spec.ts.ejs +3 -2
  11. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.spec.ts.ejs +4 -3
  12. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.spec.ts.ejs +3 -2
  13. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.component.spec.ts.ejs +3 -3
  14. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.service.spec.ts.ejs +3 -2
  15. package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.component.spec.ts.ejs +2 -3
  16. package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.service.spec.ts.ejs +3 -2
  17. package/dist/generators/angular/templates/src/main/webapp/app/account/sessions/sessions.component.spec.ts.ejs +3 -3
  18. package/dist/generators/angular/templates/src/main/webapp/app/account/settings/settings.component.spec.ts.ejs +3 -4
  19. package/dist/generators/angular/templates/src/main/webapp/app/admin/configuration/configuration.component.spec.ts.ejs +3 -3
  20. package/dist/generators/angular/templates/src/main/webapp/app/admin/configuration/configuration.service.spec.ts.ejs +3 -2
  21. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/health.component.spec.ts.ejs +4 -4
  22. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/health.service.spec.ts.ejs +3 -2
  23. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/modal/health-modal.component.spec.ts.ejs +3 -3
  24. package/dist/generators/angular/templates/src/main/webapp/app/admin/logs/logs.component.spec.ts.ejs +4 -3
  25. package/dist/generators/angular/templates/src/main/webapp/app/admin/logs/logs.service.spec.ts.ejs +3 -2
  26. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/jvm-threads/jvm-threads.component.ts.ejs +1 -1
  27. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.spec.ts.ejs +3 -3
  28. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/metrics.component.spec.ts.ejs +3 -2
  29. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/metrics.service.spec.ts.ejs +3 -2
  30. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.spec.ts.ejs +3 -3
  31. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/list/user-management.component.html.ejs +1 -1
  32. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/list/user-management.component.spec.ts.ejs +3 -4
  33. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/service/user-management.service.spec.ts.ejs +3 -3
  34. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/update/user-management-update.component.spec.ts.ejs +3 -2
  35. package/dist/generators/angular/templates/src/main/webapp/app/app-page-title-strategy.ts.ejs +1 -1
  36. package/dist/generators/angular/templates/src/main/webapp/app/app.component.ts.ejs +0 -1
  37. package/dist/generators/angular/templates/src/main/webapp/app/app.config.ts.ejs +2 -2
  38. package/dist/generators/angular/templates/src/main/webapp/app/config/uib-pagination.config.ts.ejs +1 -1
  39. package/dist/generators/angular/templates/src/main/webapp/app/core/auth/account.service.spec.ts.ejs +7 -5
  40. package/dist/generators/angular/templates/src/main/webapp/app/core/auth/auth-jwt.service.spec.ts.ejs +3 -2
  41. package/dist/generators/angular/templates/src/main/webapp/app/core/interceptor/auth-expired.interceptor.ts.ejs +3 -3
  42. package/dist/generators/angular/templates/src/main/webapp/app/core/interceptor/auth.interceptor.ts.ejs +2 -2
  43. package/dist/generators/angular/templates/src/main/webapp/app/core/interceptor/error-handler.interceptor.ts.ejs +1 -1
  44. package/dist/generators/angular/templates/src/main/webapp/app/core/util/alert.service.spec.ts.ejs +6 -6
  45. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/delete/_entityFile_-delete-dialog.component.spec.ts.ejs +3 -4
  46. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.html.ejs +1 -1
  47. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.spec.ts.ejs +2 -3
  48. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.ts.ejs +2 -2
  49. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/route/_entityFile_-routing-resolve.service.spec.ts.ejs +2 -3
  50. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/service/_entityFile_.service.spec.ts.ejs +5 -3
  51. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.spec.ts.ejs +2 -3
  52. package/dist/generators/angular/templates/src/main/webapp/app/layouts/error/error.component.ts.ejs +2 -2
  53. package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/active-menu.directive.ts.ejs +3 -3
  54. package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/navbar.component.spec.ts.ejs +3 -3
  55. package/dist/generators/angular/templates/src/main/webapp/app/layouts/profiles/page-ribbon.component.spec.ts.ejs +3 -2
  56. package/dist/generators/angular/templates/src/main/webapp/app/shared/auth/has-any-authority.directive.spec.ts.ejs +3 -3
  57. package/dist/generators/angular/templates/src/main/webapp/app/shared/language/find-language-from-key.pipe.ts.ejs +1 -1
  58. package/dist/generators/angular/templates/src/main/webapp/app/shared/language/translation.module.ts.ejs +2 -2
  59. package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort-by.directive.spec.ts.ejs +10 -10
  60. package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort-by.directive.ts.ejs +6 -7
  61. package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort.directive.spec.ts.ejs +4 -4
  62. package/dist/generators/angular/templates/src/main/webapp/content/scss/global.scss.ejs +2 -0
  63. package/dist/generators/base/command.js +1 -0
  64. package/dist/generators/base/generator.js +7 -12
  65. package/dist/generators/base/internal/command.js +13 -0
  66. package/dist/generators/base/internal/index.js +1 -0
  67. package/dist/generators/base/shared-data.js +74 -2
  68. package/dist/generators/base/support/config.js +1 -1
  69. package/dist/generators/base/support/jhipster7-context.js +155 -52
  70. package/dist/generators/base-application/generator.js +1 -1
  71. package/dist/generators/base-core/generator.js +93 -55
  72. package/dist/generators/bootstrap/generator.js +1 -1
  73. package/dist/generators/bootstrap/support/eslint-worker.js +14 -12
  74. package/dist/generators/bootstrap/support/multi-step-transform/template-file.js +6 -1
  75. package/dist/generators/bootstrap-application/generator.js +1 -1
  76. package/dist/generators/bootstrap-application-client/generator.js +5 -1
  77. package/dist/generators/ci-cd/generator.js +1 -1
  78. package/dist/generators/ci-cd/templates/docker-registry.yml.ejs +0 -1
  79. package/dist/generators/ci-cd/templates/jenkins/jenkins.yml.ejs +0 -1
  80. package/dist/generators/client/generator.js +2 -3
  81. package/dist/generators/client/resources/package.json +3 -3
  82. package/dist/generators/client/support/filter-entities.js +1 -1
  83. package/dist/generators/client/templates/.eslintignore.ejs +9 -5
  84. package/dist/generators/client/templates/README.md.jhi.client.ejs +29 -20
  85. package/dist/generators/client/templates/src/main/webapp/index.html.ejs +1 -1
  86. package/dist/generators/common/resources/package.json +1 -1
  87. package/dist/generators/docker/templates/docker/keycloak.yml.ejs +2 -1
  88. package/dist/generators/docker/templates/docker/mariadb.yml.ejs +1 -1
  89. package/dist/generators/docker/templates/docker/mysql.yml.ejs +1 -2
  90. package/dist/generators/docker/templates/docker/realm-config/keycloak-health-check.sh +2 -2
  91. package/dist/generators/docker-compose/templates/docker-compose.yml.ejs +1 -0
  92. package/dist/generators/docker-compose/templates/realm-config/keycloak-health-check.sh +2 -2
  93. package/dist/generators/feign-client/templates/src/main/java/_package_/client/AuthorizationHeaderUtil.java.ejs +1 -1
  94. package/dist/generators/gatling/generator.js +0 -1
  95. package/dist/generators/generate-blueprint/files.js +3 -1
  96. package/dist/generators/generate-blueprint/generator.js +17 -7
  97. package/dist/generators/generate-blueprint/resources/package.json +2 -0
  98. package/dist/generators/generate-blueprint/templates/.blueprint/github-build-matrix/generator.mjs.ejs +2 -6
  99. package/dist/generators/generate-blueprint/templates/.github/workflows/build-cache.yml.ejs +39 -0
  100. package/dist/generators/generate-blueprint/templates/.github/workflows/samples.yml.ejs +105 -0
  101. package/dist/generators/generate-blueprint/templates/.prettierignore.jhi.blueprint.ejs +1 -1
  102. package/dist/generators/generate-blueprint/templates/eslint.config.js.ejs +33 -0
  103. package/dist/generators/generator-constants.js +2 -2
  104. package/dist/generators/gradle/templates/gradle/wrapper/gradle-wrapper.properties +1 -1
  105. package/dist/generators/heroku/generator.js +1 -1
  106. package/dist/generators/info/support/extract-info.js +60 -0
  107. package/dist/generators/info/support/index.js +1 -0
  108. package/dist/generators/init/resources/.node-version +1 -1
  109. package/dist/generators/init/resources/package.json +2 -2
  110. package/dist/generators/java/generators/bootstrap/generator.js +9 -2
  111. package/dist/generators/java/generators/build-tool/command.js +2 -2
  112. package/dist/generators/java/generators/node/templates/npmw +1 -5
  113. package/dist/generators/java/support/add-java-annotation.js +1 -1
  114. package/dist/generators/jdl/generator.js +6 -6
  115. package/dist/generators/kubernetes/templates/db/mysql.yml.ejs +1 -0
  116. package/dist/generators/languages/generator.js +1 -0
  117. package/dist/generators/liquibase/templates/src/main/java/_package_/config/LiquibaseConfiguration.java.ejs +1 -1
  118. package/dist/generators/maven/command.js +15 -0
  119. package/dist/generators/maven/generator.js +6 -1
  120. package/dist/generators/maven/index.js +1 -0
  121. package/dist/generators/maven/internal/xml-store.js +7 -6
  122. package/dist/generators/maven/support/pom-store.js +24 -9
  123. package/dist/generators/maven/templates/.mvn/wrapper/maven-wrapper.properties +1 -1
  124. package/dist/generators/react/entity-files-react.js +7 -7
  125. package/dist/generators/react/resources/package.json +12 -12
  126. package/dist/generators/react/templates/src/main/webapp/app/app.tsx.ejs +9 -0
  127. package/dist/generators/react/templates/src/main/webapp/app/config/translation.ts.ejs +4 -0
  128. package/dist/generators/react/templates/src/main/webapp/app/modules/home/home.tsx.ejs +15 -1
  129. package/dist/generators/react/templates/src/main/webapp/app/modules/login/login-redirect.tsx.ejs +4 -0
  130. package/dist/generators/react/templates/src/main/webapp/app/modules/login/logout.tsx.ejs +5 -3
  131. package/dist/generators/react/templates/src/main/webapp/app/routes.tsx.ejs +1 -1
  132. package/dist/generators/react/templates/src/main/webapp/app/shared/auth/private-route.spec.tsx.ejs +1 -1
  133. package/dist/generators/react/templates/src/main/webapp/app/shared/auth/private-route.tsx.ejs +1 -1
  134. package/dist/generators/react/templates/src/main/webapp/app/shared/layout/header/header.tsx.ejs +0 -9
  135. package/dist/generators/react/templates/src/main/webapp/app/shared/layout/menus/account.spec.tsx.ejs +1 -3
  136. package/dist/generators/react/templates/src/main/webapp/app/shared/layout/menus/account.tsx.ejs +29 -6
  137. package/dist/generators/react/templates/src/main/webapp/app/shared/util/url-utils.ts.ejs +1 -1
  138. package/dist/generators/server/generator.js +7 -5
  139. package/dist/generators/server/resources/Dockerfile +5 -5
  140. package/dist/generators/server/resources/gradle/libs.versions.toml +5 -5
  141. package/dist/generators/server/resources/pom.xml +11 -11
  142. package/dist/generators/server/templates/gradle/profile_dev.gradle.ejs +1 -1
  143. package/dist/generators/server/templates/gradle/profile_prod.gradle.ejs +1 -1
  144. package/dist/generators/server/templates/pom.xml.ejs +0 -26
  145. package/dist/generators/server/templates/src/main/java/_package_/config/AsyncConfiguration.java.ejs +1 -1
  146. package/dist/generators/server/templates/src/main/java/_package_/config/SecurityJwtConfiguration.java.ejs +1 -1
  147. package/dist/generators/server/templates/src/main/java/_package_/config/WebConfigurer.java.ejs +1 -1
  148. package/dist/generators/server/templates/src/main/java/_package_/security/DomainUserDetailsService.java.ejs +1 -1
  149. package/dist/generators/server/templates/src/main/java/_package_/security/PersistentTokenRememberMeServices.java.ejs +1 -1
  150. package/dist/generators/server/templates/src/main/java/_package_/security/oauth2/AudienceValidator.java.ejs +1 -1
  151. package/dist/generators/server/templates/src/main/java/_package_/service/MailService.java.ejs +1 -1
  152. package/dist/generators/server/templates/src/main/java/_package_/service/dto/UserDTO.java.ejs +11 -0
  153. package/dist/generators/server/templates/src/main/java/_package_/web/rest/AccountResource.java.ejs +1 -1
  154. package/dist/generators/server/templates/src/main/java/_package_/web/rest/AccountResource_oauth2.java.ejs +1 -1
  155. package/dist/generators/server/templates/src/main/java/_package_/web/rest/AccountResource_skipUserManagement.java.ejs +1 -1
  156. package/dist/generators/server/templates/src/main/java/_package_/web/rest/AuthenticateController.java.ejs +1 -1
  157. package/dist/generators/server/templates/src/main/resources/config/application-dev.yml.ejs +1 -1
  158. package/dist/generators/server/templates/src/main/resources/config/application.yml.ejs +1 -1
  159. package/dist/generators/server/templates/src/main/resources/config/bootstrap.yml.ejs +1 -1
  160. package/dist/generators/spring-boot/generator.js +4 -2
  161. package/dist/generators/spring-boot/resources/spring-boot-dependencies.pom +105 -105
  162. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/service/UserService.java.ejs +1 -1
  163. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/service/_entityClass_QueryService.java.ejs +1 -1
  164. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/service/impl/_entityClass_ServiceImpl.java.ejs +1 -1
  165. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/PublicUserResource.java.ejs +1 -1
  166. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/UserResource.java.ejs +1 -1
  167. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/_entityClass_Resource.java.ejs +1 -1
  168. package/dist/generators/spring-cache/resources/gradle/libs.versions.toml +1 -1
  169. package/dist/generators/spring-cache/templates/src/main/java/_package_/config/CacheConfiguration.java.ejs +3 -3
  170. package/dist/generators/spring-cloud/generators/gateway/command.js +5 -0
  171. package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/main/java/_package_/broker/KafkaConsumer_imperative.java.ejs +1 -1
  172. package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/main/java/_package_/broker/KafkaConsumer_reactive.java.ejs +1 -1
  173. package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/main/java/_package_/web/rest/KafkaResource_imperative.java.ejs +1 -1
  174. package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/main/java/_package_/web/rest/KafkaResource_reactive.java.ejs +1 -1
  175. package/dist/generators/spring-data-couchbase/templates/src/main/java/_package_/config/DatabaseConfiguration.java.ejs +1 -1
  176. package/dist/generators/spring-data-neo4j/templates/src/main/java/_package_/config/DatabaseConfiguration.java_neo4j.ejs +18 -2
  177. package/dist/generators/spring-data-relational/templates/src/main/java/_package_/config/DatabaseConfiguration.java.ejs +1 -1
  178. package/dist/generators/vue/entity-files-vue.js +7 -7
  179. package/dist/generators/vue/resources/package.json +11 -11
  180. package/dist/generators/vue/templates/.eslintrc.cjs.ejs +7 -0
  181. package/dist/lib/eslint/base.js +25 -0
  182. package/dist/lib/eslint/recommended.js +22 -0
  183. package/dist/testing/github.js +32 -0
  184. package/dist/testing/helpers.js +9 -0
  185. package/dist/testing/index.js +2 -0
  186. package/dist/testing/sample-config.js +31 -0
  187. package/dist/types/cli/commands.d.mts +2 -0
  188. package/dist/types/cli/environment-builder.d.mts +1 -0
  189. package/dist/types/generators/base/api.d.ts +14 -7
  190. package/dist/types/generators/base/internal/command.d.ts +2 -0
  191. package/dist/types/generators/base/internal/index.d.ts +1 -0
  192. package/dist/types/generators/base/shared-data.d.ts +10 -1
  193. package/dist/types/generators/base/types.d.ts +12 -0
  194. package/dist/types/generators/base-application/types.d.ts +11 -0
  195. package/dist/types/generators/base-core/generator.d.ts +2 -1
  196. package/dist/types/generators/generator-constants.d.ts +1 -1
  197. package/dist/types/generators/info/support/extract-info.d.ts +14 -0
  198. package/dist/types/generators/info/support/index.d.ts +1 -0
  199. package/dist/types/generators/java/types.d.ts +12 -0
  200. package/dist/types/generators/maven/internal/xml-store.d.ts +3 -2
  201. package/dist/types/generators/maven/support/pom-store.d.ts +5 -2
  202. package/dist/types/generators/maven/types.d.ts +1 -0
  203. package/dist/types/generators/server/types.d.ts +2 -1
  204. package/dist/types/lib/eslint/base.d.ts +20 -0
  205. package/dist/types/lib/eslint/recommended.d.ts +20 -0
  206. package/dist/types/testing/github.d.ts +11 -0
  207. package/dist/types/testing/helpers.d.ts +8 -0
  208. package/dist/types/testing/index.d.ts +2 -0
  209. package/dist/types/testing/sample-config.d.ts +4 -0
  210. package/package.json +22 -18
  211. package/dist/generators/generate-blueprint/templates/.eslintrc.json.ejs +0 -35
@@ -174,7 +174,7 @@ export default class JdlGenerator extends BaseGenerator {
174
174
  return;
175
175
  }
176
176
  const generatorOptions = { defaults: true, reproducible: this.options.reproducible ?? this.reproducible, force: this.force };
177
- if (this.ignoreApplication || this.applications.length === 0) {
177
+ if (this.ignoreApplication !== false && (this.ignoreApplication || this.applications.length === 0)) {
178
178
  if (this.applications.length === 0) {
179
179
  const entities = this.exportedEntities;
180
180
  await this.composeWithJHipster(this.entitiesGenerator, {
@@ -194,11 +194,7 @@ export default class JdlGenerator extends BaseGenerator {
194
194
  }
195
195
  }
196
196
  }
197
- else if (this.applications.length === 1) {
198
- this.log.info('Generating 1 application');
199
- await this.composeWithJHipster(this.entrypointGenerator, { generatorOptions });
200
- }
201
- else {
197
+ else if (this.applications.length > 1) {
202
198
  this.log.info(`Generating ${this.applications.length} applications`);
203
199
  await this.composeWithJHipster(this.workspacesGenerator, {
204
200
  generatorOptions: {
@@ -207,6 +203,10 @@ export default class JdlGenerator extends BaseGenerator {
207
203
  },
208
204
  });
209
205
  }
206
+ else {
207
+ this.log.info('Generating 1 application');
208
+ await this.composeWithJHipster(this.entrypointGenerator, { generatorOptions });
209
+ }
210
210
  },
211
211
  });
212
212
  }
@@ -70,6 +70,7 @@ spec:
70
70
  value: <%= app.baseName.toLowerCase() %>
71
71
  args:
72
72
  - --lower_case_table_names=1
73
+ - --skip-mysqlx
73
74
  - --character_set_server=utf8mb4
74
75
  - --explicit_defaults_for_timestamp
75
76
  ports:
@@ -310,6 +310,7 @@ export default class LanguagesGenerator extends BaseApplicationGenerator {
310
310
  if (application.enableTranslation &&
311
311
  application.generateUserManagement &&
312
312
  !application.skipServer &&
313
+ application.backendTypeJavaAny &&
313
314
  application.backendTypeSpringBoot) {
314
315
  updateLanguagesInJava.call(this, { application, control });
315
316
  }
@@ -55,7 +55,7 @@ import org.springframework.core.env.Profiles;
55
55
  @Configuration
56
56
  public class LiquibaseConfiguration {
57
57
 
58
- private final Logger log = LoggerFactory.getLogger(LiquibaseConfiguration.class);
58
+ private static final Logger log = LoggerFactory.getLogger(LiquibaseConfiguration.class);
59
59
 
60
60
  private final Environment env;
61
61
 
@@ -0,0 +1,15 @@
1
+ const command = {
2
+ options: {},
3
+ configs: {
4
+ sortMavenPom: {
5
+ description: 'Sort the pom.xml file',
6
+ cli: {
7
+ type: Boolean,
8
+ hide: true,
9
+ },
10
+ scope: 'generator',
11
+ },
12
+ },
13
+ import: [],
14
+ };
15
+ export default command;
@@ -25,6 +25,7 @@ import cleanupOldServerFilesTask from './cleanup.js';
25
25
  import { createPomStorage } from './support/index.js';
26
26
  export default class MavenGenerator extends BaseApplicationGenerator {
27
27
  pomStorage;
28
+ sortMavenPom;
28
29
  async beforeQueue() {
29
30
  if (!this.fromBlueprint) {
30
31
  await this.composeWithBlueprints();
@@ -35,8 +36,11 @@ export default class MavenGenerator extends BaseApplicationGenerator {
35
36
  }
36
37
  get initializing() {
37
38
  return this.asInitializingTaskGroup({
39
+ async parseCommand() {
40
+ await this.parseCurrentJHipsterCommand();
41
+ },
38
42
  pomStorage() {
39
- this.pomStorage = createPomStorage(this);
43
+ this.pomStorage = createPomStorage(this, { sortFile: this.sortMavenPom });
40
44
  },
41
45
  });
42
46
  }
@@ -72,6 +76,7 @@ export default class MavenGenerator extends BaseApplicationGenerator {
72
76
  }
73
77
  };
74
78
  }
79
+ source.mergeMavenPomContent = content => this.pomStorage.merge(content);
75
80
  source.addMavenAnnotationProcessor = createForEach(artifact => this.pomStorage.addAnnotationProcessor(artifact));
76
81
  source.addMavenDependency = createForEach(artifact => this.pomStorage.addDependency(artifact));
77
82
  source.addMavenDependencyManagement = createForEach(artifact => this.pomStorage.addDependencyManagement(artifact));
@@ -16,4 +16,5 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
+ export { default as command } from './command.js';
19
20
  export { default } from './generator.js';
@@ -36,19 +36,20 @@ const defaultXmlBuildOptions = {
36
36
  indentBy: ' ',
37
37
  };
38
38
  export default class XmlStorage {
39
- sortFile = true;
39
+ sortFile;
40
40
  saveFile;
41
41
  loadFile;
42
42
  parser;
43
43
  builder;
44
44
  _cachedStore;
45
- constructor({ saveFile, loadFile, xmlParserOptions, xmlBuildOptions, }) {
45
+ constructor({ saveFile, loadFile, xmlParserOptions, xmlBuildOptions, sortFile, }) {
46
46
  assert(saveFile, 'saveFile callback is required to create a storage');
47
47
  assert(loadFile, 'loadFile callback is required to create a storage');
48
48
  this.parser = new XMLParser({ ...defaultXmlParserOptions, ...xmlParserOptions });
49
49
  this.builder = new XMLBuilder({ ...defaultXmlBuildOptions, ...xmlBuildOptions });
50
50
  this.saveFile = saveFile;
51
51
  this.loadFile = loadFile;
52
+ this.sortFile = sortFile ?? true;
52
53
  }
53
54
  clearCache() {
54
55
  delete this._cachedStore;
@@ -59,6 +60,10 @@ export default class XmlStorage {
59
60
  }
60
61
  this.persist(false);
61
62
  }
63
+ merge(source) {
64
+ assert(typeof source === 'object', 'Storage `merge` method only accept objects');
65
+ this._cachedStore = merge({}, this.store, source);
66
+ }
62
67
  sort() { }
63
68
  persist(sort = this.sortFile) {
64
69
  if (this._cachedStore) {
@@ -77,10 +82,6 @@ export default class XmlStorage {
77
82
  this._cachedStore = this.parser.parse(this.loadFile());
78
83
  }
79
84
  }
80
- merge(source) {
81
- assert(typeof source === 'object', 'Storage `merge` method only accept objects');
82
- this._cachedStore = merge({}, this.store, source);
83
- }
84
85
  mergeContent(existing, newContent) {
85
86
  return newContent ? { ...existing, ...this.parser.parse(newContent) } : existing;
86
87
  }
@@ -55,6 +55,17 @@ const propertiesOrder = [
55
55
  'spring-boot.version',
56
56
  ];
57
57
  const formatFirstXmlLevel = content => content.replace(/(\n {4}<(?:groupId|distributionManagement|repositories|pluginRepositories|properties|dependencyManagement|dependencies|build|profiles)>)/g, '\n$1');
58
+ const sortSection = section => {
59
+ return Object.fromEntries(Object.entries(section).sort(([key1, value1], [key2, value2]) => {
60
+ if (typeof value1 === typeof value2)
61
+ key1.localeCompare(key2);
62
+ if (typeof value1 === 'string')
63
+ return -1;
64
+ if (typeof value2 === 'string')
65
+ return 1;
66
+ return 0;
67
+ }));
68
+ };
58
69
  const isComment = name => name.startsWith('#');
59
70
  const toMaxInt = nr => (nr === -1 ? Number.MAX_SAFE_INTEGER : nr);
60
71
  const sortWithTemplate = (template, a, b) => {
@@ -129,7 +140,7 @@ const sortArtifacts = (artifacts) => artifacts.sort((a, b) => {
129
140
  }
130
141
  return a.artifactId.localeCompare(b.artifactId);
131
142
  });
132
- const sortProfiles = (profiles) => profiles.sort((a, b) => a.id.localeCompare(b.id));
143
+ const sortProfiles = (profiles) => profiles.sort((a, b) => a.id?.localeCompare(b.id) ?? 1);
133
144
  const ensureChildPath = (node, childPath) => {
134
145
  let child = get(node, childPath);
135
146
  if (child)
@@ -158,8 +169,8 @@ const ensureChild = (current, ...childPath) => {
158
169
  const reorderArtifact = ({ groupId, artifactId, inProfile, version, ...rest }) => ({ inProfile, groupId, artifactId, version, ...rest });
159
170
  const reorderDependency = ({ groupId, artifactId, inProfile, version, type, scope, classifier, ...rest }) => ({ inProfile, groupId, artifactId, version, type, scope, classifier, ...rest });
160
171
  export default class PomStorage extends XmlStorage {
161
- constructor({ saveFile, loadFile }) {
162
- super({ saveFile, loadFile });
172
+ constructor({ saveFile, loadFile, sortFile }) {
173
+ super({ saveFile, loadFile, sortFile });
163
174
  }
164
175
  addProperty({ inProfile, property, value = null }) {
165
176
  const node = this.getNode({ nodePath: 'properties', profile: inProfile });
@@ -262,11 +273,14 @@ export default class PomStorage extends XmlStorage {
262
273
  if (Array.isArray(project.dependencyManagement?.dependencies?.dependency)) {
263
274
  project.dependencyManagement.dependencies.dependency = sortArtifacts(project.dependencyManagement.dependencies.dependency);
264
275
  }
265
- if (Array.isArray(project.build?.plugins?.plugin)) {
266
- project.build.plugins.plugin = sortArtifacts(project.build.plugins.plugin);
267
- }
268
- if (Array.isArray(project.build?.pluginManagement?.plugins?.plugin)) {
269
- project.build.pluginManagement.plugins.plugin = sortArtifacts(project.build.pluginManagement.plugins.plugin);
276
+ if (project.build) {
277
+ project.build = sortSection(project.build);
278
+ if (Array.isArray(project.build.plugins?.plugin)) {
279
+ project.build.plugins.plugin = sortArtifacts(project.build.plugins.plugin);
280
+ }
281
+ if (Array.isArray(project.build.pluginManagement?.plugins?.plugin)) {
282
+ project.build.pluginManagement.plugins.plugin = sortArtifacts(project.build.pluginManagement.plugins.plugin);
283
+ }
270
284
  }
271
285
  if (Array.isArray(project.profiles?.profile)) {
272
286
  project.profiles.profile = sortProfiles(project.profiles.profile);
@@ -280,11 +294,12 @@ const emptyPomFile = `<?xml version="1.0" encoding="UTF-8"?>
280
294
  <modelVersion>4.0.0</modelVersion>
281
295
  </project>
282
296
  `;
283
- export const createPomStorage = (generator) => {
297
+ export const createPomStorage = (generator, { sortFile } = {}) => {
284
298
  const loadFile = () => generator.readDestination('pom.xml', { defaults: emptyPomFile })?.toString() ?? '';
285
299
  const pomStorage = new PomStorage({
286
300
  loadFile,
287
301
  saveFile: content => generator.writeDestination('pom.xml', formatFirstXmlLevel(content)),
302
+ sortFile,
288
303
  });
289
304
  generator.fs.store.on('change', filename => {
290
305
  if (filename === generator.destinationPath('pom.xml')) {
@@ -15,4 +15,4 @@
15
15
  # specific language governing permissions and limitations
16
16
  # under the License.
17
17
  wrapperVersion=3.3.2
18
- distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.7/apache-maven-3.9.7-bin.zip
18
+ distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.8/apache-maven-3.9.8-bin.zip
@@ -16,7 +16,7 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import { clientApplicationTemplatesBlock, filterEntitiesAndPropertiesForClient, filterEntitiesForClient } from '../client/support/index.js';
19
+ import { clientApplicationTemplatesBlock } from '../client/support/index.js';
20
20
  export const reactFiles = {
21
21
  client: [
22
22
  {
@@ -48,16 +48,16 @@ export const reactFiles = {
48
48
  },
49
49
  ],
50
50
  };
51
- export async function writeEntitiesFiles({ application, entities }) {
52
- for (const entity of filterEntitiesAndPropertiesForClient(entities).filter(entity => !entity.builtInUser)) {
51
+ export async function writeEntitiesFiles({ control, application, entities }) {
52
+ for (const entity of (control.filterEntitiesAndPropertiesForClient ?? (entities => entities))(entities).filter(entity => !entity.builtInUser)) {
53
53
  await this.writeFiles({
54
54
  sections: reactFiles,
55
55
  context: { ...application, ...entity },
56
56
  });
57
57
  }
58
58
  }
59
- export async function postWriteEntitiesFiles({ application, entities }) {
60
- for (const entity of filterEntitiesForClient(entities).filter(entity => !entity.builtInUser)) {
59
+ export async function postWriteEntitiesFiles({ control, application, entities }) {
60
+ for (const entity of (control.filterEntitiesForClient ?? (entities => entities))(entities).filter(entity => !entity.builtInUser)) {
61
61
  if (!entity.embedded) {
62
62
  const { entityInstance, entityClass, entityAngularName, entityFolderName, entityFileName } = entity;
63
63
  const { applicationTypeMicroservice, clientSrcDir } = application;
@@ -69,8 +69,8 @@ export async function postWriteEntitiesFiles({ application, entities }) {
69
69
  }
70
70
  }
71
71
  }
72
- export function cleanupEntitiesFiles({ application, entities }) {
73
- for (const entity of filterEntitiesForClient(entities).filter(entity => !entity.builtInUser)) {
72
+ export function cleanupEntitiesFiles({ control, application, entities }) {
73
+ for (const entity of (control.filterEntitiesForClient ?? (entities => entities))(entities).filter(entity => !entity.builtInUser)) {
74
74
  const { entityFolderName, entityFileName } = entity;
75
75
  if (this.isJhipsterVersionLessThan('7.0.0-beta.1')) {
76
76
  this.removeFile(`${application.clientTestDir}spec/app/entities/${entityFolderName}/${entityFileName}-reducer.spec.ts`);
@@ -11,7 +11,7 @@
11
11
  "path-browserify": "1.0.1",
12
12
  "react": "18.3.1",
13
13
  "react-dom": "18.3.1",
14
- "react-hook-form": "7.51.5",
14
+ "react-hook-form": "7.52.0",
15
15
  "react-jhipster": "0.25.3",
16
16
  "react-loadable": "5.5.0",
17
17
  "react-redux": "9.1.2",
@@ -24,23 +24,23 @@
24
24
  "rxjs": "7.8.1",
25
25
  "sockjs-client": "1.6.1",
26
26
  "sonar-scanner": "3.1.0",
27
- "tslib": "2.6.2",
28
- "uuid": "9.0.1",
27
+ "tslib": "2.6.3",
28
+ "uuid": "10.0.0",
29
29
  "webstomp-client": "1.2.6"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@module-federation/utilities": "3.0.3-0",
33
- "@testing-library/react": "15.0.7",
33
+ "@testing-library/react": "16.0.0",
34
34
  "@types/jest": "29.5.12",
35
- "@types/lodash": "4.17.4",
35
+ "@types/lodash": "4.17.5",
36
36
  "@types/node": "20.11.25",
37
37
  "@types/react": "18.3.3",
38
38
  "@types/react-dom": "18.3.0",
39
39
  "@types/react-redux": "7.1.33",
40
40
  "@types/redux": "3.6.31",
41
41
  "@types/webpack-env": "1.18.5",
42
- "@typescript-eslint/eslint-plugin": "7.11.0",
43
- "@typescript-eslint/parser": "7.11.0",
42
+ "@typescript-eslint/eslint-plugin": "7.13.1",
43
+ "@typescript-eslint/parser": "7.13.1",
44
44
  "autoprefixer": "10.4.19",
45
45
  "browser-sync": "2.29.3",
46
46
  "browser-sync-webpack-plugin": "2.3.0",
@@ -51,7 +51,7 @@
51
51
  "css-minimizer-webpack-plugin": "7.0.0",
52
52
  "eslint": "8.57.0",
53
53
  "eslint-config-prettier": "9.1.0",
54
- "eslint-plugin-react": "7.34.2",
54
+ "eslint-plugin-react": "7.34.3",
55
55
  "eslint-webpack-plugin": "4.2.0",
56
56
  "folder-hash": "4.0.4",
57
57
  "fork-ts-checker-webpack-plugin": "9.0.2",
@@ -69,7 +69,7 @@
69
69
  "react-infinite-scroll-component": "6.1.0",
70
70
  "redux-mock-store": "1.5.4",
71
71
  "rimraf": "5.0.7",
72
- "sass": "1.77.4",
72
+ "sass": "1.77.6",
73
73
  "sass-loader": "14.2.1",
74
74
  "simple-progress-webpack-plugin": "2.0.0",
75
75
  "sinon": "18.0.0",
@@ -78,10 +78,10 @@
78
78
  "style-loader": "4.0.0",
79
79
  "terser-webpack-plugin": "5.3.10",
80
80
  "thread-loader": "4.0.2",
81
- "ts-jest": "29.1.4",
81
+ "ts-jest": "29.1.5",
82
82
  "ts-loader": "9.5.1",
83
- "typescript": "5.4.5",
84
- "webpack": "5.91.0",
83
+ "typescript": "5.5.2",
84
+ "webpack": "5.92.1",
85
85
  "webpack-cli": "5.1.4",
86
86
  "webpack-dev-server": "5.0.4",
87
87
  "webpack-merge": "5.10.0",
@@ -34,6 +34,9 @@ import { hasAnyAuthority } from 'app/shared/auth/private-route';
34
34
  import ErrorBoundary from 'app/shared/error/error-boundary';
35
35
  import { AUTHORITIES } from 'app/config/constants';
36
36
  import AppRoutes from 'app/routes';
37
+ <%_ if (enableTranslation && enableI18nRTL) { _%>
38
+ import { setTextDirection } from './config/translation';
39
+ <%_ } _%>
37
40
 
38
41
  const baseHref = document.querySelector('base').getAttribute('href').replace(/\/$/, '');
39
42
 
@@ -54,6 +57,12 @@ export const App = () => {
54
57
  const isInProduction = useAppSelector(state => state.applicationProfile.inProduction);
55
58
  const isOpenAPIEnabled = useAppSelector(state => state.applicationProfile.isOpenAPIEnabled);
56
59
 
60
+ <%_ if (enableTranslation && enableI18nRTL) { _%>
61
+ useEffect(() => {
62
+ setTextDirection(currentLocale);
63
+ }, [currentLocale]);
64
+ <%_ } _%>
65
+
57
66
  const paddingTop = '60px';
58
67
  return (
59
68
  <BrowserRouter basename={baseHref}>
@@ -34,6 +34,10 @@ export const locales = Object.keys(languages).sort();
34
34
 
35
35
  <%_ if (enableI18nRTL) { _%>
36
36
  export const isRTL = (lang: string): boolean => languages[lang] && languages[lang].rtl;
37
+
38
+ export const setTextDirection = (lang: string) => {
39
+ document.querySelector('html').setAttribute('dir', isRTL(lang) ? 'rtl' : 'ltr');
40
+ };
37
41
  <%_ } _%>
38
42
 
39
43
  export const registerLocale = store => {
@@ -23,7 +23,11 @@ import React, { useEffect } from 'react';
23
23
  <%_ } else { _%>
24
24
  import React from 'react';
25
25
  <%_ } _%>
26
+ <%_ if (authenticationTypeOauth2) { _%>
27
+ import { useLocation, useNavigate } from 'react-router-dom';
28
+ <%_ } else { _%>
26
29
  import { Link } from 'react-router-dom';
30
+ <%_ } _%>
27
31
  import { Translate } from 'react-jhipster';
28
32
  import { Row, Col, Alert } from 'reactstrap';
29
33
 
@@ -35,6 +39,9 @@ import { useAppSelector } from 'app/config/store';
35
39
  export const Home = () => {
36
40
  const account = useAppSelector(state => state.authentication.account);
37
41
  <%_ if (authenticationTypeOauth2) { _%>
42
+ const pageLocation = useLocation();
43
+ const navigate = useNavigate();
44
+
38
45
  useEffect(() => {
39
46
  const redirectURL = localStorage.getItem(REDIRECT_URL);
40
47
  if (redirectURL) {
@@ -65,7 +72,14 @@ export const Home = () => {
65
72
  <Translate contentKey="global.messages.info.authenticated.prefix">If you want to </Translate>
66
73
  <% if (!enableTranslation) { %><span>&nbsp;</span><% } %>
67
74
  <%_ if (authenticationTypeOauth2) { _%>
68
- <a href={getLoginUrl()} className="alert-link">
75
+ <a
76
+ className="alert-link"
77
+ onClick={() =>
78
+ navigate(getLoginUrl(), {
79
+ state: { from: pageLocation },
80
+ })
81
+ }
82
+ >
69
83
  <Translate contentKey="global.messages.info.authenticated.link">sign in</Translate>
70
84
  </a>
71
85
  <%_ } else { _%>
@@ -7,7 +7,11 @@ export const LoginRedirect = () => {
7
7
 
8
8
  useEffect(() => {
9
9
  localStorage.setItem(REDIRECT_URL, pageLocation.state.from.pathname);
10
+ <%_ if (authenticationTypeOauth2) { _%>
11
+ window.location.href = '/oauth2/authorization/oidc';
12
+ <%_ } else { _%>
10
13
  window.location.reload();
14
+ <%_ } _%>
11
15
  });
12
16
 
13
17
  return null;
@@ -22,13 +22,15 @@ import { useAppDispatch, useAppSelector } from 'app/config/store';
22
22
  import { logout } from 'app/shared/reducers/authentication';
23
23
 
24
24
  export const Logout = () => {
25
- const logoutUrl = useAppSelector(state => state.authentication.logoutUrl);
25
+ const authentication = useAppSelector(state => state.authentication);
26
26
  const dispatch = useAppDispatch();
27
27
 
28
28
  useLayoutEffect(() => {
29
29
  dispatch(logout());
30
- if (logoutUrl) {
31
- window.location.href = logoutUrl;
30
+ if (authentication.logoutUrl) {
31
+ window.location.href = authentication.logoutUrl;
32
+ } else if (!authentication.isAuthenticated) {
33
+ window.location.href = '/';
32
34
  }
33
35
  });
34
36
 
@@ -112,7 +112,7 @@ const AppRoutes = () => {
112
112
  }
113
113
  />
114
114
  <%_ if (authenticationTypeOauth2) { _%>
115
- <Route path="oauth2/authorization/oidc" element={<LoginRedirect />} />
115
+ <Route path="sign-in" element={<LoginRedirect />} />
116
116
  <%_ } _%>
117
117
  <%_ if (applicationTypeGateway && microfrontend) { _%>
118
118
  <%_ for (const remote of microfrontends) { _%>
@@ -92,7 +92,7 @@ describe('private-route component', () => {
92
92
  </PrivateRoute>
93
93
  }
94
94
  />
95
- <Route path="<% if(authenticationTypeOauth2) { %>/oauth2/authorization/oidc<% } else { %>/login<% } %>" element={<div>Login</div>} />
95
+ <Route path="<% if(authenticationTypeOauth2) { %>/sign-in<% } else { %>/login<% } %>" element={<div>Login</div>} />
96
96
  </Routes>,
97
97
  {
98
98
  isAuthenticated: false,
@@ -42,7 +42,7 @@ export const PrivateRoute = ({ children, hasAnyAuthorities = [], ...rest }: IOwn
42
42
  return (
43
43
  <Navigate
44
44
  to={{
45
- pathname: '<%_ if (authenticationTypeOauth2) { _%>/oauth2/authorization/oidc<%_ } else {_%>/login<%_ } _%>',
45
+ pathname: '<%_ if (authenticationTypeOauth2) { _%>/sign-in<%_ } else {_%>/login<%_ } _%>',
46
46
  search: pageLocation.search,
47
47
  }}
48
48
  replace
@@ -28,9 +28,6 @@ import {
28
28
  } from 'reactstrap';
29
29
  import LoadingBar from 'react-redux-loading-bar';
30
30
 
31
- <%_ if (enableTranslation && enableI18nRTL) { _%>
32
- import { isRTL } from 'app/config/translation';
33
- <%_ } _%>
34
31
  import { Home, Brand } from './header-components';
35
32
  import { AdminMenu, EntitiesMenu, AccountMenu<%_ if (enableTranslation) { _%>, LocaleMenu<%_ } _%>} from '../menus';
36
33
  <%_ if (enableTranslation) { _%>
@@ -52,9 +49,6 @@ export interface IHeaderProps {
52
49
 
53
50
  const Header = (props: IHeaderProps) => {
54
51
  const [menuOpen, setMenuOpen] = useState(false);
55
- <%_ if (enableI18nRTL) { _%>
56
- useEffect(() => document.querySelector('html').setAttribute('dir', isRTL(Storage.session.get('locale')) ? 'rtl' : 'ltr'));
57
- <%_ } _%>
58
52
 
59
53
  <%_ if (enableTranslation) { _%>
60
54
  const dispatch = useAppDispatch();
@@ -63,9 +57,6 @@ const Header = (props: IHeaderProps) => {
63
57
  const langKey = event.target.value;
64
58
  Storage.session.set('locale', langKey);
65
59
  dispatch(setLocale(langKey));
66
- <%_ if (enableI18nRTL) { _%>
67
- document.querySelector('html').setAttribute('dir', isRTL(langKey) ? 'rtl' : 'ltr');
68
- <%_ } _%>
69
60
  }
70
61
  <%_ } _%>
71
62
 
@@ -68,9 +68,7 @@ describe('AccountMenu', () => {
68
68
  it('Renders a guest AccountMenu component', () => {
69
69
  const html = guestWrapper();
70
70
 
71
- <%_ if (authenticationTypeOauth2) { _%>
72
- expect(html).toContain(getLoginUrl());
73
- <%_ } else { _%>
71
+ <%_ if (!authenticationTypeOauth2) { _%>
74
72
  expect(html).toContain('/login');
75
73
  <%_ } _%>
76
74
  expect(html).not.toContain('/logout');
@@ -27,6 +27,9 @@ import { Translate, translate } from 'react-jhipster';
27
27
  import { getLoginUrl } from 'app/shared/util/url-utils';
28
28
  <%_ } _%>
29
29
  import { NavDropdown } from './menu-components';
30
+ <%_ if (authenticationTypeOauth2) { _%>
31
+ import { useLocation, useNavigate } from 'react-router';
32
+ <%_ } _%>
30
33
 
31
34
 
32
35
  const accountMenuItemsAuthenticated = () => (
@@ -42,18 +45,38 @@ const accountMenuItemsAuthenticated = () => (
42
45
  </>
43
46
  );
44
47
 
48
+ <%_ if (authenticationTypeOauth2) { _%>
49
+ const accountMenuItems = () => {
50
+ const navigate = useNavigate();
51
+ const pageLocation = useLocation();
52
+
53
+ return (
54
+ <>
55
+ <DropdownItem
56
+ id="login-item"
57
+ tag="a"
58
+ data-cy="login"
59
+ onClick={() =>
60
+ navigate(getLoginUrl(), {
61
+ state: { from: pageLocation },
62
+ })
63
+ }
64
+ >
65
+ <FontAwesomeIcon icon="sign-in-alt" /> <Translate contentKey="global.menu.account.login">Sign in</Translate>
66
+ </DropdownItem>
67
+ </>
68
+ );
69
+ };
70
+ <%_ } else { _%>
45
71
  const accountMenuItems = () => (
46
72
  <>
47
- <%_ if (!authenticationTypeOauth2) { _%>
48
73
  <MenuItem id="login-item" icon="sign-in-alt" to="/login" data-cy="login"><Translate contentKey="global.menu.account.login">Sign in</Translate></MenuItem>
49
- <%_ } else { _%>
50
- <DropdownItem id="login-item" tag="a" href={getLoginUrl()} data-cy="login"><FontAwesomeIcon icon="sign-in-alt" /> <Translate contentKey="global.menu.account.login">Sign in</Translate></DropdownItem>
51
- <%_ } _%>
52
- <%_ if (generateUserManagement) { _%>
74
+ <%_ if (generateUserManagement) { _%>
53
75
  <MenuItem icon="user-plus" to="/account/register" data-cy="register"><Translate contentKey="global.menu.account.register">Register</Translate></MenuItem>
54
- <%_ } _%>
76
+ <%_ } _%>
55
77
  </>
56
78
  );
79
+ <%_ } _%>
57
80
 
58
81
  export const AccountMenu = ({ isAuthenticated = false }) => (
59
82
  <NavDropdown icon="user" name={translate('global.menu.account.main')} id="account-menu" data-cy="accountMenu">
@@ -21,7 +21,7 @@ export const getLoginUrl = () => {
21
21
 
22
22
  // If you have configured multiple OIDC providers, then, you can update this URL to /login.
23
23
  // It will show a Spring Security generated login page with links to configured OIDC providers.
24
- return `//${location.hostname}${port}${location.pathname}oauth2/authorization/oidc`;
24
+ return `//${location.hostname}${port}/sign-in`;
25
25
  }
26
26
  <%_ if (authenticationTypeOauth2) { _%>
27
27
  export const REDIRECT_URL = 'redirectURL';
@@ -428,14 +428,16 @@ export default class JHipsterServerGenerator extends BaseApplicationGenerator {
428
428
  packageJsonE2eScripts({ application }) {
429
429
  const scriptsStorage = this.packageJson.createStorage('scripts');
430
430
  const buildCmd = application.buildToolGradle ? 'gradlew' : 'mvnw';
431
+ const applicationWaitTimeout = WAIT_TIMEOUT * (application.applicationTypeGateway ? 2 : 1);
432
+ const applicationEndpoint = application.applicationTypeMicroservice
433
+ ? `http-get://127.0.0.1:${application.gatewayServerPort}/${application.endpointPrefix}/management/health/readiness`
434
+ : 'http-get://127.0.0.1:$npm_package_config_backend_port/management/health';
435
+ scriptsStorage.set({
436
+ 'ci:server:await': `echo "Waiting for server at port $npm_package_config_backend_port to start" && wait-on -t ${applicationWaitTimeout} ${applicationEndpoint} && echo "Server at port $npm_package_config_backend_port started"`,
437
+ });
431
438
  // TODO add e2eTests property to application.
432
439
  if (this.jhipsterConfig.testFrameworks?.includes('cypress')) {
433
- const applicationWaitTimeout = WAIT_TIMEOUT * (application.applicationTypeGateway ? 2 : 1);
434
- const applicationEndpoint = application.applicationTypeMicroservice
435
- ? `http-get://127.0.0.1:${application.gatewayServerPort}/${application.endpointPrefix}/management/health/readiness`
436
- : 'http-get://127.0.0.1:$npm_package_config_backend_port/management/health';
437
440
  scriptsStorage.set({
438
- 'ci:server:await': `echo "Waiting for server at port $npm_package_config_backend_port to start" && wait-on -t ${applicationWaitTimeout} ${applicationEndpoint} && echo "Server at port $npm_package_config_backend_port started"`,
439
441
  'pree2e:headless': 'npm run ci:server:await',
440
442
  'ci:e2e:run': 'concurrently -k -s first "npm run ci:e2e:server:start" "npm run e2e:headless"',
441
443
  'e2e:dev': `concurrently -k -s first "./${buildCmd}" "npm run e2e"`,