generator-jhipster 8.4.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 (430) 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 +20 -20
  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 +6 -5
  12. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts.ejs +3 -6
  13. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.spec.ts.ejs +3 -2
  14. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.component.spec.ts.ejs +5 -5
  15. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts.ejs +3 -6
  16. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.service.spec.ts.ejs +3 -2
  17. package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.component.spec.ts.ejs +2 -3
  18. package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.component.ts.ejs +3 -6
  19. package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.service.spec.ts.ejs +3 -2
  20. package/dist/generators/angular/templates/src/main/webapp/app/account/sessions/sessions.component.spec.ts.ejs +3 -3
  21. package/dist/generators/angular/templates/src/main/webapp/app/account/settings/settings.component.spec.ts.ejs +3 -4
  22. package/dist/generators/angular/templates/src/main/webapp/app/admin/configuration/configuration.component.spec.ts.ejs +3 -3
  23. package/dist/generators/angular/templates/src/main/webapp/app/admin/configuration/configuration.service.spec.ts.ejs +3 -2
  24. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/health.component.spec.ts.ejs +4 -4
  25. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/health.service.spec.ts.ejs +3 -2
  26. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/modal/health-modal.component.spec.ts.ejs +3 -3
  27. package/dist/generators/angular/templates/src/main/webapp/app/admin/logs/logs.component.spec.ts.ejs +4 -3
  28. package/dist/generators/angular/templates/src/main/webapp/app/admin/logs/logs.service.spec.ts.ejs +3 -2
  29. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/jvm-threads/jvm-threads.component.ts.ejs +1 -1
  30. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.html.ejs +11 -11
  31. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.spec.ts.ejs +3 -3
  32. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/metrics.component.spec.ts.ejs +3 -2
  33. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/metrics.service.spec.ts.ejs +3 -2
  34. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.html.ejs +0 -2
  35. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.spec.ts.ejs +3 -3
  36. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/list/user-management.component.html.ejs +1 -1
  37. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/list/user-management.component.spec.ts.ejs +3 -4
  38. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/service/user-management.service.spec.ts.ejs +3 -3
  39. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/update/user-management-update.component.spec.ts.ejs +3 -2
  40. package/dist/generators/angular/templates/src/main/webapp/app/app-page-title-strategy.ts.ejs +1 -1
  41. package/dist/generators/angular/templates/src/main/webapp/app/app.component.ts.ejs +0 -1
  42. package/dist/generators/angular/templates/src/main/webapp/app/app.config.ts.ejs +2 -2
  43. package/dist/generators/angular/templates/src/main/webapp/app/config/uib-pagination.config.ts.ejs +1 -1
  44. package/dist/generators/angular/templates/src/main/webapp/app/core/auth/account.service.spec.ts.ejs +7 -5
  45. package/dist/generators/angular/templates/src/main/webapp/app/core/auth/auth-jwt.service.spec.ts.ejs +3 -2
  46. package/dist/generators/angular/templates/src/main/webapp/app/core/auth/user-route-access.service.ts.ejs +1 -1
  47. package/dist/generators/angular/templates/src/main/webapp/app/core/interceptor/auth-expired.interceptor.ts.ejs +3 -3
  48. package/dist/generators/angular/templates/src/main/webapp/app/core/interceptor/auth.interceptor.ts.ejs +2 -2
  49. package/dist/generators/angular/templates/src/main/webapp/app/core/interceptor/error-handler.interceptor.ts.ejs +1 -1
  50. package/dist/generators/angular/templates/src/main/webapp/app/core/util/alert.service.spec.ts.ejs +6 -6
  51. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/delete/_entityFile_-delete-dialog.component.html.ejs +0 -3
  52. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/delete/_entityFile_-delete-dialog.component.spec.ts.ejs +3 -4
  53. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/detail/_entityFile_-detail.component.spec.ts.ejs +2 -2
  54. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.html.ejs +1 -1
  55. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.spec.ts.ejs +2 -3
  56. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.ts.ejs +2 -2
  57. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/route/_entityFile_-routing-resolve.service.spec.ts.ejs +4 -5
  58. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/service/_entityFile_.service.spec.ts.ejs +5 -3
  59. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.spec.ts.ejs +5 -6
  60. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.ts.ejs +11 -17
  61. package/dist/generators/angular/templates/src/main/webapp/app/layouts/error/error.component.ts.ejs +2 -2
  62. package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/active-menu.directive.ts.ejs +6 -6
  63. package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/navbar.component.spec.ts.ejs +3 -3
  64. package/dist/generators/angular/templates/src/main/webapp/app/layouts/profiles/page-ribbon.component.spec.ts.ejs +3 -2
  65. package/dist/generators/angular/templates/src/main/webapp/app/login/login.component.spec.ts.ejs +2 -2
  66. package/dist/generators/angular/templates/src/main/webapp/app/login/login.component.ts.ejs +3 -4
  67. package/dist/generators/angular/templates/src/main/webapp/app/shared/alert/alert-error.component.spec.ts.ejs +2 -2
  68. package/dist/generators/angular/templates/src/main/webapp/app/shared/auth/has-any-authority.directive.spec.ts.ejs +11 -9
  69. package/dist/generators/angular/templates/src/main/webapp/app/shared/auth/has-any-authority.directive.ts.ejs +3 -8
  70. package/dist/generators/angular/templates/src/main/webapp/app/shared/filter/filter.component.html.ejs +6 -2
  71. package/dist/generators/angular/templates/src/main/webapp/app/shared/language/find-language-from-key.pipe.ts.ejs +1 -1
  72. package/dist/generators/angular/templates/src/main/webapp/app/shared/language/translation.module.ts.ejs +2 -2
  73. package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort-by.directive.spec.ts.ejs +10 -10
  74. package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort-by.directive.ts.ejs +6 -7
  75. package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort.directive.spec.ts.ejs +4 -4
  76. package/dist/generators/angular/templates/src/main/webapp/content/scss/global.scss.ejs +2 -0
  77. package/dist/generators/app/generator.js +4 -13
  78. package/dist/generators/base/command.js +1 -0
  79. package/dist/generators/base/generator.js +22 -28
  80. package/dist/generators/base/internal/command.js +13 -0
  81. package/dist/generators/base/internal/index.js +1 -0
  82. package/dist/generators/base/priorities.js +12 -1
  83. package/dist/generators/base/shared-data.js +74 -2
  84. package/dist/generators/base/support/config.js +1 -1
  85. package/dist/generators/base/support/jhipster7-context.js +155 -52
  86. package/dist/generators/base-application/generator.js +15 -3
  87. package/dist/generators/base-application/priorities.js +1 -0
  88. package/dist/generators/base-application/support/prepare-entity.js +7 -8
  89. package/dist/generators/base-application/support/prepare-relationship.js +3 -2
  90. package/dist/generators/base-core/generator.js +132 -63
  91. package/dist/generators/bootstrap/generator.js +1 -1
  92. package/dist/generators/bootstrap/support/eslint-worker.js +14 -12
  93. package/dist/generators/bootstrap/support/multi-step-transform/template-file.js +6 -1
  94. package/dist/generators/bootstrap-application/generator.js +1 -1
  95. package/dist/generators/bootstrap-application-base/generator.js +7 -3
  96. package/dist/generators/bootstrap-application-client/generator.js +5 -1
  97. package/dist/generators/bootstrap-application-server/generator.js +1 -0
  98. package/dist/generators/ci-cd/generator.js +1 -1
  99. package/dist/generators/ci-cd/templates/docker-registry.yml.ejs +0 -1
  100. package/dist/generators/ci-cd/templates/jenkins/jenkins.yml.ejs +0 -1
  101. package/dist/generators/client/command.js +2 -2
  102. package/dist/generators/client/generator.js +2 -3
  103. package/dist/generators/client/generators/common/command.js +5 -0
  104. package/dist/generators/client/generators/common/generator.js +79 -0
  105. package/dist/generators/client/generators/common/index.js +20 -0
  106. package/dist/generators/client/generators/common/templates/src/main/webapp/app/shared/jhipster/headers.ts.ejs +57 -0
  107. package/dist/generators/client/generators/common/templates/src/main/webapp/app/shared/jhipster/problem-details.ts.ejs +51 -0
  108. package/dist/generators/client/resources/package.json +6 -6
  109. package/dist/generators/client/support/filter-entities.js +1 -1
  110. package/dist/generators/client/templates/.eslintignore.ejs +9 -5
  111. package/dist/generators/client/templates/README.md.jhi.client.ejs +29 -20
  112. package/dist/generators/client/templates/src/main/webapp/index.html.ejs +1 -1
  113. package/dist/generators/common/generator.js +5 -0
  114. package/dist/generators/common/resources/package.json +2 -2
  115. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/account/login-page.cy.ts.ejs +4 -4
  116. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/account/password-page.cy.ts.ejs +2 -2
  117. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/account/register-page.cy.ts.ejs +1 -1
  118. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/account/reset-password-page.cy.ts.ejs +1 -1
  119. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/entity/_entity_.cy.ts.ejs +10 -10
  120. package/dist/generators/docker/templates/docker/keycloak.yml.ejs +2 -1
  121. package/dist/generators/docker/templates/docker/mariadb.yml.ejs +1 -1
  122. package/dist/generators/docker/templates/docker/mysql.yml.ejs +1 -2
  123. package/dist/generators/docker/templates/docker/realm-config/jhipster-realm.json.ejs +14 -3
  124. package/dist/generators/docker/templates/docker/realm-config/keycloak-health-check.sh +2 -2
  125. package/dist/generators/docker-compose/templates/docker-compose.yml.ejs +1 -0
  126. package/dist/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs +14 -3
  127. package/dist/generators/docker-compose/templates/realm-config/keycloak-health-check.sh +2 -2
  128. package/dist/generators/entity/generator.js +2 -10
  129. package/dist/generators/entity/prompts.js +6 -11
  130. package/dist/generators/feign-client/templates/src/main/java/_package_/client/AuthorizationHeaderUtil.java.ejs +1 -1
  131. package/dist/generators/gatling/README.md +15 -0
  132. package/dist/generators/gatling/generator.js +0 -1
  133. package/dist/generators/gatling/templates/src/test/java/gatling/simulations/_entityClass_GatlingTest.java.ejs +2 -10
  134. package/dist/generators/generate-blueprint/command.js +16 -0
  135. package/dist/generators/generate-blueprint/files.js +11 -1
  136. package/dist/generators/generate-blueprint/generator.js +34 -17
  137. package/dist/generators/generate-blueprint/resources/package.json +3 -1
  138. package/dist/generators/generate-blueprint/templates/.blueprint/cli/commands.mjs.ejs +6 -0
  139. package/dist/generators/generate-blueprint/templates/.blueprint/generate-sample/command.mjs.ejs +20 -0
  140. package/dist/generators/generate-blueprint/templates/.blueprint/generate-sample/generator.mjs.ejs +9 -13
  141. package/dist/generators/generate-blueprint/templates/.blueprint/github-build-matrix/build-matrix.mjs.ejs +22 -0
  142. package/dist/generators/generate-blueprint/templates/.blueprint/github-build-matrix/generator.mjs.ejs +20 -0
  143. package/dist/generators/generate-blueprint/templates/.blueprint/github-build-matrix/index.mjs.ejs +1 -0
  144. package/dist/generators/generate-blueprint/templates/.github/workflows/build-cache.yml.ejs +39 -0
  145. package/dist/generators/generate-blueprint/templates/.github/workflows/samples.yml.ejs +105 -0
  146. package/dist/generators/generate-blueprint/templates/.prettierignore.jhi.blueprint.ejs +1 -1
  147. package/dist/generators/generate-blueprint/templates/README.md.ejs +16 -8
  148. package/dist/generators/generate-blueprint/templates/eslint.config.js.ejs +33 -0
  149. package/dist/generators/generate-blueprint/templates/vitest.config.ts.ejs +1 -0
  150. package/dist/generators/generator-constants.js +2 -2
  151. package/dist/generators/gradle/templates/gradle/wrapper/gradle-wrapper.properties +1 -1
  152. package/dist/generators/heroku/generator.js +1 -1
  153. package/dist/generators/info/generator.js +1 -3
  154. package/dist/generators/info/support/extract-info.js +60 -0
  155. package/dist/generators/info/support/index.js +1 -0
  156. package/dist/generators/init/generator.js +2 -2
  157. package/dist/generators/init/resources/.node-version +1 -1
  158. package/dist/generators/init/resources/package.json +2 -2
  159. package/dist/generators/java/generators/bootstrap/generator.js +9 -2
  160. package/dist/generators/java/generators/build-tool/command.js +6 -3
  161. package/dist/generators/java/generators/domain/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.ejs +1 -5
  162. package/dist/generators/java/generators/domain/templates/src/test/java/_package_/_entityPackage_/domain/_persistClass_Asserts.java.ejs +3 -3
  163. package/dist/generators/java/generators/domain/templates/src/test/java/_package_/_entityPackage_/domain/_persistClass_Test.java.ejs +3 -3
  164. package/dist/generators/java/generators/node/templates/npmw +1 -5
  165. package/dist/generators/java/support/add-java-annotation.js +28 -7
  166. package/dist/generators/java/support/generated-annotation-transform.js +1 -1
  167. package/dist/generators/java/support/index.js +1 -1
  168. package/dist/generators/jdl/generator.js +7 -7
  169. package/dist/generators/kubernetes/files.js +1 -1
  170. package/dist/generators/kubernetes/templates/db/mysql.yml.ejs +1 -1
  171. package/dist/generators/kubernetes/templates/keycloak/keycloak-configmap.yml.ejs +14 -3
  172. package/dist/generators/languages/generator.js +5 -2
  173. package/dist/generators/liquibase/templates/src/main/java/_package_/config/LiquibaseConfiguration.java.ejs +1 -1
  174. package/dist/generators/maven/command.js +15 -0
  175. package/dist/generators/maven/generator.js +6 -1
  176. package/dist/generators/maven/index.js +1 -0
  177. package/dist/generators/maven/internal/xml-store.js +7 -6
  178. package/dist/generators/maven/support/pom-store.js +24 -9
  179. package/dist/generators/maven/templates/.mvn/wrapper/maven-wrapper.properties +2 -2
  180. package/dist/generators/maven/templates/mvnw +185 -243
  181. package/dist/generators/maven/templates/mvnw.cmd +121 -180
  182. package/dist/generators/react/entity-files-react.js +7 -7
  183. package/dist/generators/react/generator.js +10 -0
  184. package/dist/generators/react/resources/package.json +28 -28
  185. package/dist/generators/react/templates/src/main/webapp/app/app.tsx.ejs +9 -0
  186. package/dist/generators/react/templates/src/main/webapp/app/config/axios-interceptor.spec.ts.ejs +1 -1
  187. package/dist/generators/react/templates/src/main/webapp/app/config/axios-interceptor.ts.ejs +1 -1
  188. package/dist/generators/react/templates/src/main/webapp/app/config/notification-middleware.spec.ts.ejs +1 -1
  189. package/dist/generators/react/templates/src/main/webapp/app/config/notification-middleware.ts.ejs +80 -87
  190. package/dist/generators/react/templates/src/main/webapp/app/config/store.ts.ejs +1 -1
  191. package/dist/generators/react/templates/src/main/webapp/app/config/translation.ts.ejs +4 -0
  192. package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.tsx.ejs +3 -3
  193. package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.reducer.ts.ejs +12 -7
  194. package/dist/generators/react/templates/src/main/webapp/app/modules/home/home.tsx.ejs +15 -1
  195. package/dist/generators/react/templates/src/main/webapp/app/modules/login/login-redirect.tsx.ejs +4 -0
  196. package/dist/generators/react/templates/src/main/webapp/app/modules/login/logout.tsx.ejs +5 -3
  197. package/dist/generators/react/templates/src/main/webapp/app/routes.tsx.ejs +1 -1
  198. package/dist/generators/react/templates/src/main/webapp/app/shared/auth/private-route.spec.tsx.ejs +1 -1
  199. package/dist/generators/react/templates/src/main/webapp/app/shared/auth/private-route.tsx.ejs +1 -1
  200. package/dist/generators/react/templates/src/main/webapp/app/shared/layout/header/header.tsx.ejs +0 -9
  201. package/dist/generators/react/templates/src/main/webapp/app/shared/layout/menus/account.spec.tsx.ejs +1 -3
  202. package/dist/generators/react/templates/src/main/webapp/app/shared/layout/menus/account.tsx.ejs +29 -6
  203. package/dist/generators/react/templates/src/main/webapp/app/shared/reducers/reducer.utils.ts.ejs +2 -3
  204. package/dist/generators/react/templates/src/main/webapp/app/shared/util/url-utils.ts.ejs +1 -1
  205. package/dist/generators/server/command.js +0 -11
  206. package/dist/generators/server/generator.js +16 -75
  207. package/dist/generators/server/jdl/application-definition.js +3 -1
  208. package/dist/generators/server/resources/Dockerfile +13 -13
  209. package/dist/generators/server/resources/gradle/libs.versions.toml +9 -7
  210. package/dist/generators/server/resources/pom.xml +16 -16
  211. package/dist/generators/server/support/config.js +4 -8
  212. package/dist/generators/server/support/prepare-entity.js +5 -6
  213. package/dist/generators/server/support/relationship.js +5 -2
  214. package/dist/generators/server/templates/build.gradle.ejs +5 -3
  215. package/dist/generators/server/templates/gradle/profile_dev.gradle.ejs +2 -1
  216. package/dist/generators/server/templates/gradle/profile_prod.gradle.ejs +2 -1
  217. package/dist/generators/server/templates/gradle.properties.ejs +1 -1
  218. package/dist/generators/server/templates/pom.xml.ejs +7 -31
  219. package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/service/dto/_dtoClass_.java.ejs +1 -1
  220. package/dist/generators/server/templates/src/main/java/_package_/config/AsyncConfiguration.java.ejs +1 -1
  221. package/dist/generators/server/templates/src/main/java/_package_/config/Constants.java.ejs +0 -2
  222. package/dist/generators/server/templates/src/main/java/_package_/config/SecurityConfiguration_imperative.java.ejs +1 -18
  223. package/dist/generators/server/templates/src/main/java/_package_/config/SecurityConfiguration_reactive.java.ejs +1 -15
  224. package/dist/generators/server/templates/src/main/java/_package_/config/SecurityJwtConfiguration.java.ejs +1 -21
  225. package/dist/generators/server/templates/src/main/java/_package_/config/WebConfigurer.java.ejs +1 -1
  226. package/dist/generators/server/templates/src/main/java/_package_/security/DomainUserDetailsService.java.ejs +1 -1
  227. package/dist/generators/server/templates/src/main/java/_package_/security/PersistentTokenRememberMeServices.java.ejs +1 -1
  228. package/dist/generators/server/templates/src/main/java/_package_/security/SecurityUtils.java.ejs +65 -5
  229. package/dist/generators/server/templates/src/main/java/_package_/security/oauth2/AudienceValidator.java.ejs +1 -1
  230. package/dist/generators/server/templates/src/main/java/_package_/service/MailService.java.ejs +1 -1
  231. package/dist/generators/server/templates/src/main/java/_package_/service/dto/UserDTO.java.ejs +34 -0
  232. package/dist/generators/server/templates/src/main/java/_package_/service/mapper/UserMapper.java.ejs +8 -4
  233. package/dist/generators/server/templates/src/main/java/_package_/web/rest/AccountResource.java.ejs +1 -1
  234. package/dist/generators/server/templates/src/main/java/_package_/web/rest/AccountResource_oauth2.java.ejs +1 -1
  235. package/dist/generators/server/templates/src/main/java/_package_/web/rest/AccountResource_skipUserManagement.java.ejs +44 -10
  236. package/dist/generators/server/templates/src/main/java/_package_/web/rest/AuthenticateController.java.ejs +1 -1
  237. package/dist/generators/server/templates/src/main/resources/config/application-dev.yml.ejs +1 -1
  238. package/dist/generators/server/templates/src/main/resources/config/application.yml.ejs +60 -22
  239. package/dist/generators/server/templates/src/main/resources/config/bootstrap.yml.ejs +1 -1
  240. package/dist/generators/server/templates/src/main/resources/swagger/api.yml.ejs +1 -1
  241. package/dist/generators/server/templates/src/test/java/_package_/security/DomainUserDetailsServiceIT.java.ejs +31 -13
  242. package/dist/generators/server/templates/src/test/java/_package_/service/mapper/UserMapperTest.java.ejs +84 -17
  243. package/dist/generators/server/templates/src/test/java/_package_/web/rest/AccountResourceIT.java.ejs +62 -6
  244. package/dist/generators/server/templates/src/test/java/_package_/web/rest/AccountResourceIT_oauth2.java.ejs +22 -0
  245. package/dist/generators/server/templates/src/test/resources/config/application.yml.ejs +20 -10
  246. package/dist/generators/spring-boot/command.js +117 -6
  247. package/dist/generators/spring-boot/files.js +0 -5
  248. package/dist/generators/spring-boot/generator.js +44 -9
  249. package/dist/generators/spring-boot/prompts.js +6 -70
  250. package/dist/generators/spring-boot/resources/spring-boot-dependencies.pom +374 -582
  251. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/service/UserService.java.ejs +1 -1
  252. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/service/_entityClass_QueryService.java.ejs +1 -1
  253. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/service/impl/_entityClass_ServiceImpl.java.ejs +1 -1
  254. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/PublicUserResource.java.ejs +1 -1
  255. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/UserResource.java.ejs +1 -1
  256. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/_entityClass_Resource.java.ejs +1 -1
  257. package/dist/generators/spring-boot/templates/src/test/java/_package_/_entityPackage_/service/UserServiceIT.java.ejs +47 -11
  258. package/dist/generators/spring-boot/templates/src/test/java/_package_/_entityPackage_/web/rest/PublicUserResourceIT.java.ejs +60 -24
  259. package/dist/generators/spring-boot/templates/src/test/java/_package_/_entityPackage_/web/rest/UserResourceIT.java.ejs +195 -318
  260. package/dist/generators/spring-boot/templates/src/test/java/_package_/_entityPackage_/web/rest/_entityClass_ResourceIT.java.ejs +58 -51
  261. package/dist/generators/spring-cache/internal/dependencies.js +2 -2
  262. package/dist/generators/spring-cache/resources/gradle/libs.versions.toml +1 -1
  263. package/dist/generators/spring-cache/templates/src/main/java/_package_/config/CacheConfiguration.java.ejs +3 -3
  264. package/dist/generators/spring-cloud/generators/gateway/command.js +10 -1
  265. package/dist/generators/spring-cloud/generators/gateway/generator.js +13 -0
  266. package/dist/generators/spring-cloud/generators/gateway/jdl/jdl-routes-option.js +6 -0
  267. package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/main/java/_package_/broker/KafkaConsumer_imperative.java.ejs +1 -1
  268. package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/main/java/_package_/broker/KafkaConsumer_reactive.java.ejs +1 -1
  269. package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/main/java/_package_/web/rest/KafkaResource_imperative.java.ejs +1 -1
  270. package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/main/java/_package_/web/rest/KafkaResource_reactive.java.ejs +1 -1
  271. package/dist/generators/spring-data-cassandra/generator.js +2 -2
  272. package/dist/generators/spring-data-couchbase/templates/src/main/java/_package_/config/DatabaseConfiguration.java.ejs +1 -1
  273. package/dist/generators/spring-data-neo4j/templates/src/main/java/_package_/config/DatabaseConfiguration.java_neo4j.ejs +18 -2
  274. package/dist/generators/spring-data-relational/templates/src/main/java/_package_/config/DatabaseConfiguration.java.ejs +1 -1
  275. package/dist/generators/spring-data-relational/templates/src/test/java/_package_/config/SqlTestContainersSpringContextCustomizerFactory.java.ejs +3 -1
  276. package/dist/generators/vue/entity-files-vue.js +7 -7
  277. package/dist/generators/vue/resources/package.json +21 -21
  278. package/dist/generators/vue/templates/.eslintrc.cjs.ejs +7 -0
  279. package/dist/generators/vue/templates/src/main/webapp/app/admin/tracker/tracker.service.spec.ts.ejs +1 -1
  280. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-details.vue.ejs +1 -1
  281. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.vue.ejs +1 -1
  282. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.vue.ejs +1 -1
  283. package/dist/generators/vue/templates/src/main/webapp/app/shared/alert/alert.service.spec.ts.ejs +8 -8
  284. package/dist/generators/vue/templates/src/main/webapp/app/shared/data/data-utils.service.spec.ts.ejs +1 -1
  285. package/dist/generators/vue/templates/tsconfig.app.json.ejs +1 -1
  286. package/dist/generators/vue/templates/vite.config.mts.ejs +5 -4
  287. package/dist/jdl/converters/jdl-to-json/jdl-to-json-basic-entity-converter.js +1 -1
  288. package/dist/jdl/converters/jdl-to-json/jdl-to-json-field-converter.js +4 -4
  289. package/dist/jdl/converters/jdl-to-json/jdl-with-applications-to-json-converter.js +9 -9
  290. package/dist/jdl/converters/jdl-to-json/jdl-without-application-to-json-converter.js +2 -2
  291. package/dist/jdl/converters/json-to-jdl-application-converter.js +1 -1
  292. package/dist/jdl/converters/json-to-jdl-converter.js +6 -5
  293. package/dist/jdl/converters/json-to-jdl-entity-converter.js +14 -14
  294. package/dist/jdl/converters/json-to-jdl-option-converter.js +1 -2
  295. package/dist/jdl/converters/parsed-jdl-to-jdl-object/application-converter.js +1 -1
  296. package/dist/jdl/converters/parsed-jdl-to-jdl-object/option-converter.js +2 -2
  297. package/dist/jdl/converters/parsed-jdl-to-jdl-object/parsed-jdl-to-jdl-object-converter.js +7 -6
  298. package/dist/jdl/converters/parsed-jdl-to-jdl-object/validation-converter.js +1 -1
  299. package/dist/jdl/exporters/applications/jhipster-application-formatter.js +16 -23
  300. package/dist/jdl/exporters/config.js +1 -0
  301. package/dist/jdl/exporters/jhipster-deployment-exporter.js +5 -5
  302. package/dist/jdl/exporters/jhipster-entity-exporter.js +1 -1
  303. package/dist/jdl/jdl-importer.js +22 -20
  304. package/dist/jdl/jhipster/binary-options.js +12 -8
  305. package/dist/jdl/jhipster/json-entity.js +1 -1
  306. package/dist/jdl/models/abstract-jdl-option.js +2 -2
  307. package/dist/jdl/models/jdl-application-configuration-factory.js +2 -0
  308. package/dist/jdl/models/jdl-binary-option.js +2 -2
  309. package/dist/jdl/models/jdl-deployment.js +11 -0
  310. package/dist/jdl/models/jdl-entity.js +1 -1
  311. package/dist/jdl/models/jdl-enum.js +1 -1
  312. package/dist/jdl/models/jdl-enums.js +0 -18
  313. package/dist/jdl/models/jdl-field.js +2 -2
  314. package/dist/jdl/models/jdl-object-wrapper.js +1 -0
  315. package/dist/jdl/models/jdl-object.js +23 -45
  316. package/dist/jdl/models/jdl-options.js +0 -18
  317. package/dist/jdl/models/jdl-relationships.js +8 -16
  318. package/dist/jdl/models/jdl-unary-option.js +1 -1
  319. package/dist/jdl/models/list-jdl-application-configuration-option.js +5 -2
  320. package/dist/jdl/parsing/jdl-ast-builder-visitor.js +12 -0
  321. package/dist/jdl/parsing/jdl-parser.js +14 -0
  322. package/dist/jdl/parsing/lexer/lexer.js +17 -11
  323. package/dist/jdl/parsing/validator.js +16 -2
  324. package/dist/jdl/readers/json-reader.js +1 -1
  325. package/dist/jdl/utils/array-utils.js +6 -0
  326. package/dist/jdl/utils/set-utils.js +3 -2
  327. package/dist/jdl/validators/jdl-without-application-validator.js +2 -2
  328. package/dist/lib/eslint/base.js +25 -0
  329. package/dist/lib/eslint/recommended.js +22 -0
  330. package/dist/testing/github.js +32 -0
  331. package/dist/testing/helpers.js +13 -0
  332. package/dist/testing/index.js +2 -0
  333. package/dist/testing/sample-config.js +31 -0
  334. package/dist/types/cli/commands.d.mts +2 -0
  335. package/dist/types/cli/environment-builder.d.mts +1 -0
  336. package/dist/types/generators/base/api.d.ts +19 -8
  337. package/dist/types/generators/base/generator.d.ts +10 -4
  338. package/dist/types/generators/base/internal/command.d.ts +2 -0
  339. package/dist/types/generators/base/internal/index.d.ts +1 -0
  340. package/dist/types/generators/base/priorities.d.ts +4 -0
  341. package/dist/types/generators/base/shared-data.d.ts +11 -2
  342. package/dist/types/generators/base/types.d.ts +12 -0
  343. package/dist/types/generators/base-application/priorities.d.ts +2 -0
  344. package/dist/types/generators/base-application/support/entity.d.ts +2 -2
  345. package/dist/types/generators/base-application/support/prepare-entity.d.ts +3 -3
  346. package/dist/types/generators/base-application/support/relationship.d.ts +5 -5
  347. package/dist/types/generators/base-application/types.d.ts +11 -0
  348. package/dist/types/generators/base-core/generator.d.ts +18 -2
  349. package/dist/types/generators/generator-constants.d.ts +1 -1
  350. package/dist/types/generators/info/support/extract-info.d.ts +14 -0
  351. package/dist/types/generators/info/support/index.d.ts +1 -0
  352. package/dist/types/generators/java/support/add-java-annotation.d.ts +10 -20
  353. package/dist/types/generators/java/support/doc.d.ts +1 -1
  354. package/dist/types/generators/java/support/index.d.ts +1 -1
  355. package/dist/types/generators/java/types.d.ts +12 -0
  356. package/dist/types/generators/maven/internal/xml-store.d.ts +3 -2
  357. package/dist/types/generators/maven/support/pom-store.d.ts +5 -2
  358. package/dist/types/generators/maven/types.d.ts +1 -0
  359. package/dist/types/generators/server/support/relationship.d.ts +2 -2
  360. package/dist/types/generators/server/types.d.ts +7 -1
  361. package/dist/types/generators/spring-cloud/generators/gateway/jdl/jdl-routes-option.d.ts +2 -0
  362. package/dist/types/generators/spring-cloud/generators/gateway/types.d.ts +4 -0
  363. package/dist/types/jdl/converters/jdl-to-json/jdl-to-json-field-converter.d.ts +2 -2
  364. package/dist/types/jdl/converters/jdl-to-json/jdl-with-applications-to-json-converter.d.ts +2 -1
  365. package/dist/types/jdl/converters/jdl-to-json/jdl-without-application-to-json-converter.d.ts +3 -1
  366. package/dist/types/jdl/converters/json-to-jdl-application-converter.d.ts +9 -2
  367. package/dist/types/jdl/converters/json-to-jdl-converter.d.ts +3 -3
  368. package/dist/types/jdl/converters/json-to-jdl-entity-converter.d.ts +2 -4
  369. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/application-converter.d.ts +3 -1
  370. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/deployment-converter.d.ts +2 -1
  371. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/entity-converter.d.ts +3 -1
  372. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/enum-converter.d.ts +2 -1
  373. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/field-converter.d.ts +2 -1
  374. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/option-converter.d.ts +3 -3
  375. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/parsed-jdl-to-jdl-object-converter.d.ts +2 -1
  376. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/relationship-converter.d.ts +2 -1
  377. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/types.d.ts +110 -0
  378. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/validation-converter.d.ts +2 -1
  379. package/dist/types/jdl/converters/types.d.ts +102 -14
  380. package/dist/types/jdl/exporters/applications/jhipster-application-formatter.d.ts +4 -4
  381. package/dist/types/jdl/exporters/config.d.ts +2 -1
  382. package/dist/types/jdl/exporters/export-utils.d.ts +2 -1
  383. package/dist/types/jdl/exporters/jdl-exporter.d.ts +2 -1
  384. package/dist/types/jdl/exporters/jhipster-deployment-exporter.d.ts +3 -1
  385. package/dist/types/jdl/exporters/jhipster-entity-exporter.d.ts +3 -1
  386. package/dist/types/jdl/exporters/types.d.ts +61 -0
  387. package/dist/types/jdl/jhipster/binary-options.d.ts +8 -26
  388. package/dist/types/jdl/jhipster/field-types.d.ts +2 -2
  389. package/dist/types/jdl/jhipster/json-entity.d.ts +2 -2
  390. package/dist/types/jdl/models/abstract-jdl-option.d.ts +14 -9
  391. package/dist/types/jdl/models/boolean-jdl-application-configuration-option.d.ts +1 -1
  392. package/dist/types/jdl/models/integer-jdl-application-configuration-option.d.ts +1 -1
  393. package/dist/types/jdl/models/jdl-application-configuration-factory.d.ts +1 -1
  394. package/dist/types/jdl/models/jdl-application-configuration-option.d.ts +4 -4
  395. package/dist/types/jdl/models/jdl-application-configuration.d.ts +4 -4
  396. package/dist/types/jdl/models/jdl-application-definition.d.ts +4 -4
  397. package/dist/types/jdl/models/jdl-application-entities.d.ts +4 -4
  398. package/dist/types/jdl/models/jdl-application.d.ts +16 -13
  399. package/dist/types/jdl/models/jdl-binary-option.d.ts +5 -3
  400. package/dist/types/jdl/models/jdl-deployment.d.ts +13 -1
  401. package/dist/types/jdl/models/jdl-entity.d.ts +5 -5
  402. package/dist/types/jdl/models/jdl-enum-value.d.ts +4 -4
  403. package/dist/types/jdl/models/jdl-enum.d.ts +9 -5
  404. package/dist/types/jdl/models/jdl-enums.d.ts +6 -5
  405. package/dist/types/jdl/models/jdl-field.d.ts +10 -8
  406. package/dist/types/jdl/models/jdl-object-wrapper.d.ts +25 -0
  407. package/dist/types/jdl/models/jdl-object.d.ts +23 -19
  408. package/dist/types/jdl/models/jdl-options.d.ts +7 -24
  409. package/dist/types/jdl/models/jdl-relationship.d.ts +16 -10
  410. package/dist/types/jdl/models/jdl-relationships.d.ts +5 -5
  411. package/dist/types/jdl/models/jdl-validation.d.ts +3 -3
  412. package/dist/types/jdl/models/list-jdl-application-configuration-option.d.ts +4 -3
  413. package/dist/types/jdl/models/string-jdl-application-configuration-option.d.ts +2 -2
  414. package/dist/types/jdl/parsing/jdl-ast-builder-visitor.d.ts +1 -0
  415. package/dist/types/jdl/parsing/jdl-parser.d.ts +1 -0
  416. package/dist/types/jdl/parsing/jdl-parsing-types.d.ts +23 -0
  417. package/dist/types/jdl/parsing/lexer/lexer.d.ts +6 -2
  418. package/dist/types/jdl/parsing/validator.d.ts +1 -1
  419. package/dist/types/jdl/utils/array-utils.d.ts +1 -0
  420. package/dist/types/jdl/utils/set-utils.d.ts +1 -19
  421. package/dist/types/jdl/validators/deployment-validator.d.ts +2 -1
  422. package/dist/types/lib/eslint/base.d.ts +20 -0
  423. package/dist/types/lib/eslint/recommended.d.ts +20 -0
  424. package/dist/types/testing/github.d.ts +11 -0
  425. package/dist/types/testing/helpers.d.ts +21 -3
  426. package/dist/types/testing/index.d.ts +2 -0
  427. package/dist/types/testing/sample-config.d.ts +4 -0
  428. package/package.json +35 -30
  429. package/dist/generators/generate-blueprint/templates/.eslintrc.json.ejs +0 -35
  430. /package/dist/jdl/converters/{types.js → parsed-jdl-to-jdl-object/types.js} +0 -0
@@ -16,23 +16,47 @@
16
16
  See the License for the specific language governing permissions and
17
17
  limitations under the License.
18
18
  -%>
19
-
20
19
  <%_ if (enableTranslation) { _%>
21
20
  import { translate } from 'react-jhipster';
22
21
  <%_ } _%>
23
22
  import { toast } from 'react-toastify';
24
23
  import { isFulfilledAction, isRejectedAction } from 'app/shared/reducers/reducer.utils';
25
- import { AxiosError, AxiosHeaderValue } from 'axios';
24
+ import { isAxiosError } from 'axios';
25
+ import { FieldErrorVM, isProblemWithMessage } from 'app/shared/jhipster/problem-details';
26
+ import { getMessageFromHeaders } from 'app/shared/jhipster/headers';
27
+
28
+ type TostMessage = {
29
+ message?: string;
30
+ <%_ if (enableTranslation) { _%>
31
+ key?: string;
32
+ data?: any;
33
+ <%_ } _%>
34
+ };
26
35
 
27
- const addErrorAlert = (message, key?, data?) => {
36
+ const addErrorAlert = (message: TostMessage) => {
28
37
  <%_ if (enableTranslation) { _%>
29
- key = key ? key : message;
30
- toast.error(translate(key, data));
38
+ toast.error(message.key ? translate(message.key, message.data) ?? message.message : message.message);
31
39
  <%_ } else { _%>
32
- toast.error(message);
40
+ toast.error(message.message);
33
41
  <%_ } _%>
34
42
  };
35
43
 
44
+ const getFieldErrorsTosts = (fieldErrors: FieldErrorVM[]): TostMessage[] =>
45
+ fieldErrors.map(fieldError => {
46
+ if (['Min', 'Max', 'DecimalMin', 'DecimalMax'].includes(fieldError.message)) {
47
+ fieldError.message = 'Size';
48
+ }
49
+ // convert 'something[14].other[4].id' to 'something[].other[].id' so translations can be written to it
50
+ const convertedField = fieldError.field.replace(/\[\d*\]/g, '[]');
51
+ <%_ if (enableTranslation) { _%>
52
+ const fieldName = translate(`<%= frontendAppName %>.${fieldError.objectName}.${convertedField}`);
53
+ return { message: `Error on field "${fieldName}"`, key: `error.${fieldError.message}`, data: { fieldName } };
54
+ <%_ } else { _%>
55
+ const fieldName = convertedField.charAt(0).toUpperCase() + convertedField.slice(1);
56
+ return { message: `Error on field "${fieldName}"` };
57
+ <%_ } _%>
58
+ });
59
+
36
60
  export default () => next => action => {
37
61
  const { error, payload } = action;
38
62
 
@@ -40,103 +64,72 @@ export default () => next => action => {
40
64
  *
41
65
  * The notification middleware serves to add success and error notifications
42
66
  */
43
- if (isFulfilledAction(action) && payload && payload.headers) {
44
- const headers = payload?.headers;
45
- let alert: string | null = null;
46
- <%_ if (enableTranslation) { _%>
47
- let alertParams: string | null = null;
48
- <%_ } _%>
49
- headers && Object.entries<string>(headers).forEach(([k, v]) => {
50
- if (k.toLowerCase().endsWith('app-alert')) {
51
- alert = v;
52
- }<% if (enableTranslation) { %> else if (k.toLowerCase().endsWith('app-params')) {
53
- alertParams = decodeURIComponent(v.replace(/\+/g, ' '));
54
- }<% } %>
55
- });
67
+ if (isFulfilledAction(action) && payload?.headers) {
68
+ const { alert<% if (enableTranslation) { %>, param<% } %> } = getMessageFromHeaders(payload.headers);
56
69
  if (alert) {
57
70
  <%_ if (enableTranslation) { _%>
58
- const alertParam = alertParams;
59
- toast.success(translate(alert, { param: alertParam }));
71
+ toast.success(translate(alert, { param }));
60
72
  <%_ } else { _%>
61
73
  toast.success(alert);
62
74
  <%_ } _%>
63
75
  }
64
76
  }
65
77
 
66
-
67
- if (isRejectedAction(action) && error && error.isAxiosError) {
68
- const axiosError = error as AxiosError;
69
- if (axiosError.response) {
70
- const response = axiosError.response;
71
- const data = response.data as any;
72
- if (
73
- !(
74
- response.status === 401 &&
75
- (axiosError.message === '' || response.config.url === 'api/account' || response.config.url === 'api/authenticate')
76
- )
77
- ) {
78
- switch (response.status) {
79
- // connection refused, server not reachable
80
- case 0:
81
- addErrorAlert('Server not reachable', 'error.server.not.reachable');
82
- break;
83
-
84
- case 400: {
85
- let errorHeader: string | null = null;
86
- let entityKey: string | null = null;
87
- response?.headers &&
88
- Object.entries<AxiosHeaderValue>(response.headers).forEach(([k, v]) => {
89
- if (k.toLowerCase().endsWith('app-error')) {
90
- errorHeader = v as string;
91
- } else if (k.toLowerCase().endsWith('app-params')) {
92
- entityKey = v as string;
93
- }
94
- });
95
- if (errorHeader) {
96
- const entityName = <% if (enableTranslation) { %>translate(
97
- 'global.menu.entities.' + entityKey
98
- )<% } else { %>entityKey<% } %>;
99
- addErrorAlert(errorHeader, errorHeader, { entityName });
100
- } else if (data?.fieldErrors) {
101
- const fieldErrors = data.fieldErrors;
102
- for (const fieldError of fieldErrors) {
103
- if (['Min', 'Max', 'DecimalMin', 'DecimalMax'].includes(fieldError.message)) {
104
- fieldError.message = 'Size';
105
- }
106
- // convert 'something[14].other[4].id' to 'something[].other[].id' so translations can be written to it
107
- const convertedField = fieldError.field.replace(/\[\d*\]/g, '[]');
108
- const fieldName = <% if (enableTranslation) { %>translate(
109
- `<%= frontendAppName %>.${fieldError.objectName}.${convertedField}`
110
- )<% } else { %>convertedField.charAt(0).toUpperCase() + convertedField.slice(1)<% } %>;
111
- addErrorAlert(`Error on field "${fieldName}"`, `error.${fieldError.message}`, { fieldName });
112
- }
113
- } else if (typeof data === 'string' && data !== '') {
114
- addErrorAlert(data);
115
- } else {
116
- toast.error(data?.message || data?.error || data?.title || 'Unknown error!');
117
- }
118
- break;
78
+ if (isRejectedAction(action) && isAxiosError(error)) {
79
+ if (error.response) {
80
+ const response = error.response;
81
+ if (response.status === 401) {
82
+ // Ignore, page will be redirected to login.
83
+ } else if (error.config?.url?.endsWith('api/account') || error.config?.url?.endsWith('api/authenticate')) {
84
+ // Ignore, authentication status check and authentication are treated differently.
85
+ } else if (response.status === 0) {
86
+ // connection refused, server not reachable
87
+ addErrorAlert({
88
+ message: 'Server not reachable',
89
+ <%_ if (enableTranslation) { _%>
90
+ key: 'error.server.not.reachable',
91
+ <%_ } _%>
92
+ });
93
+ } else if (response.status === 404) {
94
+ addErrorAlert({
95
+ message: 'Not found',
96
+ <%_ if (enableTranslation) { _%>
97
+ key: 'error.url.not.found',
98
+ <%_ } _%>
99
+ });
100
+ } else {
101
+ const data = response.data;
102
+ const problem = isProblemWithMessage(data) ? data : null;
103
+ if (problem?.fieldErrors) {
104
+ getFieldErrorsTosts(problem.fieldErrors).forEach(message => addErrorAlert(message));
105
+ } else {
106
+ const { error: toastError<% if (enableTranslation) { %>, param<% } %> } = getMessageFromHeaders((response.headers as any) ?? {});
107
+ if (toastError) {
108
+ <%_ if (enableTranslation) { _%>
109
+ const entityName = translate('global.menu.entities.' + param);
110
+ addErrorAlert({ key: toastError, data: { entityName } });
111
+ <%_ } else { _%>
112
+ addErrorAlert({ message: toastError });
113
+ <%_ } _%>
114
+ <%_ if (enableTranslation) { _%>
115
+ } else if (problem?.message) {
116
+ addErrorAlert({ message: problem.detail, key: problem.message });
117
+ <%_ } _%>
118
+ } else if (typeof data === 'string' && data !== '') {
119
+ addErrorAlert({ message: data });
120
+ } else {
121
+ toast.error(data?.detail ?? data?.message ?? data?.error ?? data?.title ?? 'Unknown error!');
119
122
  }
120
- case 404:
121
- addErrorAlert('Not found', 'error.url.not.found');
122
- break;
123
-
124
- default:
125
- if (typeof data === 'string' && data !== '') {
126
- addErrorAlert(data);
127
- } else {
128
- toast.error(data?.message || data?.error || data?.title || 'Unknown error!');
129
- }
130
123
  }
131
124
  }
132
- } else if (axiosError.config && axiosError.config.url === 'api/account' && axiosError.config.method === 'get') {
125
+ } else if (error.config?.url?.endsWith('api/account') && error.config?.method === 'get') {
133
126
  /* eslint-disable no-console */
134
127
  console.log('Authentication Error: Trying to access url api/account with GET.');
135
128
  } else {
136
- toast.error(error.message || 'Unknown error!');
129
+ addErrorAlert({ message: error.message ?? 'Unknown error!' });
137
130
  }
138
131
  } else if (error) {
139
- toast.error(error.message || 'Unknown error!');
132
+ addErrorAlert({ message: error.message ?? 'Unknown error!' });
140
133
  }
141
134
 
142
135
  return next(action);
@@ -45,7 +45,7 @@ const store = configureStore({
45
45
  getDefaultMiddleware({
46
46
  serializableCheck: {
47
47
  // Ignore these field paths in all actions
48
- ignoredActionPaths: ['payload.config', 'payload.request', 'payload.headers', 'error', 'meta.arg'],
48
+ ignoredActionPaths: ['meta.arg', 'meta.baseQueryMeta', 'payload.config', 'payload.request', 'payload.headers', 'error'],
49
49
  },
50
50
  }).concat(
51
51
  errorMiddleware,
@@ -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 => {
@@ -143,7 +143,7 @@ _%>
143
143
  const entity = {
144
144
  ...<%= entityInstance %>Entity,
145
145
  ...values,
146
- <%_ for (const rel of persistableRelationships) { _%>
146
+ <%_ for (const rel of persistableRelationships.filter(rel => !rel.otherEntity.embedded)) { _%>
147
147
  <%_ if (rel.collection) { _%>
148
148
  <%= rel.propertyName %>: mapIdList(values.<%= rel.propertyName %>),
149
149
  <%_ } else { _%>
@@ -186,7 +186,7 @@ _%>
186
186
  <%= fieldName %>: convertDateTimeFromServer(<%= entityInstance %>Entity.<%= fieldName %>),
187
187
  <%_ } _%>
188
188
  <%_ } _%>
189
- <%_ for (const rel of persistableRelationships) {
189
+ <%_ for (const rel of persistableRelationships.filter(rel => !rel.otherEntity.embedded)) {
190
190
  const otherEntityPkName = rel.otherEntity.primaryKey && rel.otherEntity.primaryKey.name || 'id';
191
191
  const relationshipFieldName = rel.relationshipFieldName;
192
192
  const relationshipFieldNamePlural = rel.relationshipFieldNamePlural;
@@ -297,7 +297,7 @@ _%>
297
297
  </UncontrolledTooltip>
298
298
  <%_ } _%>
299
299
  <%_ } _%>
300
- <%_ for (const rel of persistableRelationships) {
300
+ <%_ for (const rel of persistableRelationships.filter(rel => !rel.otherEntity.embedded)) {
301
301
  const otherEntityPkName = rel.otherEntity.primaryKey && rel.otherEntity.primaryKey.name || 'id';
302
302
  const otherEntityNamePlural = rel.otherEntityNamePlural;
303
303
  const relationshipName = rel.relationshipName;
@@ -63,18 +63,23 @@ export const searchEntities = createAsyncThunk(
63
63
  const requestUrl = `${apiSearchUrl}?query=${query}`;
64
64
  <%_ } _%>
65
65
  return axios.get<I<%= entityReactName %>[]>(requestUrl);
66
- }
66
+ },
67
+ { serializeError: serializeAxiosError },
67
68
  );
68
69
 
69
70
  <%_ } _%>
70
- export const getEntities = createAsyncThunk('<%= entityInstance %>/fetch_entity_list', async ({ <%_ if(!paginationNo) { _%>page, size, <%_ } _%>sort }: IQueryParams) => {
71
+ export const getEntities = createAsyncThunk(
72
+ '<%= entityInstance %>/fetch_entity_list',
73
+ async ({ <%_ if(!paginationNo) { _%>page, size, <%_ } _%>sort }: IQueryParams) => {
71
74
  <%_ if (!paginationNo) { _%>
72
- const requestUrl = `${apiUrl}?${sort ? `page=${page}&size=${size}&sort=${sort}&` : ''}cacheBuster=${new Date().getTime()}`;
75
+ const requestUrl = `${apiUrl}?${sort ? `page=${page}&size=${size}&sort=${sort}&` : ''}cacheBuster=${new Date().getTime()}`;
73
76
  <%_ } else { _%>
74
- const requestUrl = `${apiUrl}?${sort ? `sort=${sort}&` : ''}cacheBuster=${new Date().getTime()}`;
77
+ const requestUrl = `${apiUrl}?${sort ? `sort=${sort}&` : ''}cacheBuster=${new Date().getTime()}`;
75
78
  <%_ } _%>
76
- return axios.get<I<%= entityReactName %>[]>(requestUrl);
77
- });
79
+ return axios.get<I<%= entityReactName %>[]>(requestUrl);
80
+ },
81
+ { serializeError: serializeAxiosError },
82
+ );
78
83
 
79
84
  export const getEntity = createAsyncThunk(
80
85
  '<%= entityInstance %>/fetch_entity',
@@ -82,7 +87,7 @@ export const getEntity = createAsyncThunk(
82
87
  const requestUrl = `${apiUrl}/${id}`;
83
88
  return axios.get<I<%= entityReactName %>>(requestUrl);
84
89
  },
85
- { serializeError: serializeAxiosError }
90
+ { serializeError: serializeAxiosError },
86
91
  );
87
92
 
88
93
  <%_ if (!readOnly) { _%>
@@ -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">
@@ -25,7 +25,7 @@ import {
25
25
  SliceCaseReducers,
26
26
  ValidateSliceCaseReducers,
27
27
  } from '@reduxjs/toolkit';
28
- import { AxiosError } from 'axios';
28
+ import { AxiosError, isAxiosError } from 'axios';
29
29
 
30
30
  /**
31
31
  * Model for redux actions with pagination
@@ -69,7 +69,7 @@ const commonErrorProperties: Array<keyof SerializedError> = ['name', 'message',
69
69
  */
70
70
  export const serializeAxiosError = (value: any): AxiosError | SerializedError => {
71
71
  if (typeof value === 'object' && value !== null) {
72
- if (value.isAxiosError) {
72
+ if (isAxiosError(value)) {
73
73
  return value;
74
74
  } else {
75
75
  const simpleError: SerializedError = {};
@@ -143,4 +143,3 @@ export const createEntitySlice = <T, Reducers extends SliceCaseReducers<EntitySt
143
143
  },
144
144
  });
145
145
  };
146
-
@@ -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';
@@ -21,12 +21,6 @@ import { GENERATOR_COMMON, GENERATOR_SPRING_BOOT } from '../generator-list.js';
21
21
  import { APPLICATION_TYPE_GATEWAY, APPLICATION_TYPE_MICROSERVICE, APPLICATION_TYPE_MONOLITH } from '../../jdl/index.js';
22
22
  const command = {
23
23
  options: {
24
- authenticationType: {
25
- name: 'auth',
26
- description: 'Provide authentication type for the application when skipping server side generation',
27
- type: String,
28
- scope: 'storage',
29
- },
30
24
  db: {
31
25
  description: 'Provide DB name for the application when skipping server side generation',
32
26
  type: String,
@@ -65,11 +59,6 @@ const command = {
65
59
  type: String,
66
60
  scope: 'storage',
67
61
  },
68
- reactive: {
69
- description: 'Generate a reactive backend',
70
- type: Boolean,
71
- scope: 'storage',
72
- },
73
62
  searchEngine: {
74
63
  description: 'Provide search engine for the application when skipping server side generation',
75
64
  type: String,