generator-jhipster 8.2.1 → 8.3.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 (339) hide show
  1. package/dist/cli/environment-builder.mjs +3 -3
  2. package/dist/cli/jhipster-command.mjs +1 -2
  3. package/dist/cli/jhipster.cjs +0 -0
  4. package/dist/generators/angular/command.js +5 -0
  5. package/dist/generators/angular/generator.js +36 -9
  6. package/dist/generators/angular/index.js +1 -0
  7. package/dist/generators/angular/needle-api/needle-client-angular.js +3 -3
  8. package/dist/generators/angular/resources/package.json +13 -10
  9. package/dist/generators/angular/support/index.js +0 -1
  10. package/dist/generators/angular/support/translate-angular.js +142 -8
  11. package/dist/generators/angular/templates/package.json.ejs +0 -10
  12. package/dist/generators/angular/templates/src/main/webapp/app/account/activate/activate.component.html.ejs +4 -4
  13. package/dist/generators/angular/templates/src/main/webapp/app/account/activate/activate.component.ts.ejs +1 -1
  14. package/dist/generators/angular/templates/src/main/webapp/app/account/password/password-strength-bar/password-strength-bar.component.html.ejs +1 -1
  15. package/dist/generators/angular/templates/src/main/webapp/app/account/password/password-strength-bar/password-strength-bar.component.ts.ejs +1 -1
  16. package/dist/generators/angular/templates/src/main/webapp/app/account/password/password.component.html.ejs +18 -26
  17. package/dist/generators/angular/templates/src/main/webapp/app/account/password/password.component.ts.ejs +1 -1
  18. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html.ejs +18 -25
  19. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts.ejs +1 -1
  20. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html.ejs +10 -15
  21. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts.ejs +1 -1
  22. package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.component.html.ejs +31 -46
  23. package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.component.ts.ejs +1 -1
  24. package/dist/generators/angular/templates/src/main/webapp/app/account/sessions/sessions.component.html.ejs +7 -8
  25. package/dist/generators/angular/templates/src/main/webapp/app/account/sessions/sessions.component.ts.ejs +1 -1
  26. package/dist/generators/angular/templates/src/main/webapp/app/account/settings/settings.component.html.ejs +20 -31
  27. package/dist/generators/angular/templates/src/main/webapp/app/account/settings/settings.component.ts.ejs +1 -1
  28. package/dist/generators/angular/templates/src/main/webapp/app/admin/configuration/configuration.component.html.ejs +4 -4
  29. package/dist/generators/angular/templates/src/main/webapp/app/admin/configuration/configuration.service.ts.ejs +1 -1
  30. package/dist/generators/angular/templates/src/main/webapp/app/admin/gateway/gateway.component.html.ejs +7 -7
  31. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/health.component.html.ejs +7 -12
  32. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/health.model.ts.ejs +9 -5
  33. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/modal/health-modal.component.html.ejs +5 -9
  34. package/dist/generators/angular/templates/src/main/webapp/app/admin/logs/logs.component.html.ejs +5 -5
  35. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/jvm-memory/jvm-memory.component.html.ejs +3 -3
  36. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/jvm-memory/jvm-memory.component.ts.ejs +3 -3
  37. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/jvm-threads/jvm-threads.component.html.ejs +5 -5
  38. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-cache/metrics-cache.component.html.ejs +12 -12
  39. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-cache/metrics-cache.component.ts.ejs +4 -4
  40. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-datasource/metrics-datasource.component.html.ejs +36 -36
  41. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-datasource/metrics-datasource.component.ts.ejs +4 -4
  42. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-endpoints-requests/metrics-endpoints-requests.component.html.ejs +2 -2
  43. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-endpoints-requests/metrics-endpoints-requests.component.ts.ejs +3 -3
  44. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-garbagecollector/metrics-garbagecollector.component.html.ejs +33 -33
  45. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-garbagecollector/metrics-garbagecollector.component.ts.ejs +3 -3
  46. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.html.ejs +8 -8
  47. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-request/metrics-request.component.html.ejs +8 -8
  48. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-request/metrics-request.component.ts.ejs +4 -4
  49. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-system/metrics-system.component.html.ejs +13 -13
  50. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-system/metrics-system.component.ts.ejs +3 -3
  51. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/metrics.component.html.ejs +4 -4
  52. package/dist/generators/angular/templates/src/main/webapp/app/admin/tracker/tracker.component.html.ejs +6 -6
  53. package/dist/generators/angular/templates/src/main/webapp/app/admin/tracker/tracker.component.ts.ejs +2 -1
  54. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.html.ejs +4 -4
  55. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/detail/user-management-detail.component.html.ejs +26 -26
  56. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/detail/user-management-detail.component.spec.ts.ejs +3 -3
  57. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/detail/user-management-detail.component.ts.ejs +2 -2
  58. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/list/user-management.component.html.ejs +16 -18
  59. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/list/user-management.component.spec.ts.ejs +1 -2
  60. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/update/user-management-update.component.html.ejs +20 -34
  61. package/dist/generators/angular/templates/src/main/webapp/app/app.component.ts.ejs +1 -1
  62. package/dist/generators/angular/templates/src/main/webapp/app/core/auth/account.service.spec.ts.ejs +0 -2
  63. package/dist/generators/angular/templates/src/main/webapp/app/core/tracker/tracker.service.ts.ejs +7 -7
  64. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/delete/_entityFile_-delete-dialog.component.html.ejs +4 -4
  65. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/detail/_entityFile_-detail.component.html.ejs +25 -25
  66. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/detail/_entityFile_-detail.component.spec.ts.ejs +3 -3
  67. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/detail/_entityFile_-detail.component.ts.ejs +2 -2
  68. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.html.ejs +14 -14
  69. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.spec.ts.ejs +0 -2
  70. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/route/_entityFile_-routing-resolve.service.spec.ts.ejs +1 -2
  71. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.html.ejs +17 -24
  72. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.spec.ts.ejs +0 -2
  73. package/dist/generators/angular/templates/src/main/webapp/app/home/home.component.html.ejs +14 -15
  74. package/dist/generators/angular/templates/src/main/webapp/app/home/home.component.spec.ts.ejs +1 -5
  75. package/dist/generators/angular/templates/src/main/webapp/app/layouts/error/error.component.html.ejs +1 -1
  76. package/dist/generators/angular/templates/src/main/webapp/app/layouts/footer/footer.component.html.ejs +1 -1
  77. package/dist/generators/angular/templates/src/main/webapp/app/layouts/main/main.component.spec.ts.ejs +11 -18
  78. package/dist/generators/angular/templates/src/main/webapp/app/layouts/main/main.component.ts.ejs +1 -1
  79. package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs +21 -21
  80. package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/navbar.component.spec.ts.ejs +0 -2
  81. package/dist/generators/angular/templates/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts.ejs +1 -1
  82. package/dist/generators/angular/templates/src/main/webapp/app/login/login.component.html.ejs +11 -12
  83. package/dist/generators/angular/templates/src/main/webapp/app/login/login.component.spec.ts.ejs +1 -2
  84. package/dist/generators/angular/templates/src/main/webapp/app/login/login.component.ts.ejs +1 -1
  85. package/dist/generators/angular/templates/src/main/webapp/app/shared/filter/filter.component.html.ejs +3 -3
  86. package/dist/generators/angular/templates/src/main/webapp/app/shared/filter/filter.component.ts.ejs +1 -1
  87. package/dist/generators/app/generator.js +4 -4
  88. package/dist/generators/base/generator.js +21 -2
  89. package/dist/generators/base/shared-data.js +1 -2
  90. package/dist/generators/base/support/basename.js +1 -2
  91. package/dist/generators/base/support/needles.js +3 -5
  92. package/dist/generators/base/support/string.js +2 -2
  93. package/dist/generators/base-application/generator.js +4 -4
  94. package/dist/generators/base-application/support/entity.js +1 -2
  95. package/dist/generators/base-application/support/enum.js +2 -2
  96. package/dist/generators/base-application/support/prepare-entity.js +1 -1
  97. package/dist/generators/base-application/support/prepare-field.js +5 -6
  98. package/dist/generators/base-application/support/relationship.js +1 -2
  99. package/dist/generators/base-application/support/task-type-inference.js +6 -0
  100. package/dist/generators/base-core/generator.js +83 -14
  101. package/dist/generators/base-workspaces/internal/deployments.js +2 -2
  102. package/dist/generators/base-workspaces/internal/docker-dependencies.js +2 -2
  103. package/dist/generators/bootstrap/generator.js +4 -5
  104. package/dist/generators/bootstrap/internal/transform-utils.js +4 -0
  105. package/dist/generators/bootstrap/support/eslint-transform.js +2 -1
  106. package/dist/generators/bootstrap/support/java-unused-imports-transform.js +2 -1
  107. package/dist/generators/bootstrap/support/prettier-worker.js +2 -4
  108. package/dist/generators/bootstrap-application/generator.js +3 -4
  109. package/dist/generators/bootstrap-application-base/generator.js +4 -5
  110. package/dist/generators/bootstrap-application-base/utils.js +3 -3
  111. package/dist/generators/bootstrap-application-client/generator.js +2 -3
  112. package/dist/generators/bootstrap-application-server/generator.js +21 -15
  113. package/dist/generators/bootstrap-workspaces/generator.js +1 -2
  114. package/dist/generators/ci-cd/command.js +1 -2
  115. package/dist/generators/ci-cd/generator.js +3 -3
  116. package/dist/generators/client/command.js +1 -2
  117. package/dist/generators/client/generator.js +12 -12
  118. package/dist/generators/client/needle-api/needle-client-vue.js +2 -2
  119. package/dist/generators/client/resources/package.json +4 -4
  120. package/dist/generators/client/templates/src/main/webapp/index.html.ejs +1 -1
  121. package/dist/generators/common/generator.js +5 -5
  122. package/dist/generators/common/resources/package.json +1 -1
  123. package/dist/generators/cucumber/generator.js +17 -10
  124. package/dist/generators/cucumber/templates/buildSrc/src/main/groovy/jhipster.cucumber-conventions.gradle.ejs +1 -5
  125. package/dist/generators/cypress/generator.js +2 -3
  126. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/administration/administration.cy.ts.ejs +10 -0
  127. package/dist/generators/docker/generator.js +4 -6
  128. package/dist/generators/docker/templates/docker/realm-config/jhipster-realm.json.ejs +0 -32
  129. package/dist/generators/docker/utils.js +2 -3
  130. package/dist/generators/docker-compose/generator.js +4 -5
  131. package/dist/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs +0 -32
  132. package/dist/generators/entities/generator.js +4 -4
  133. package/dist/generators/entity/generator.js +10 -9
  134. package/dist/generators/entity/prompts.js +12 -12
  135. package/dist/generators/feign-client/generator.js +3 -4
  136. package/dist/generators/gatling/generator.js +2 -3
  137. package/dist/generators/generate-blueprint/files.js +1 -0
  138. package/dist/generators/generate-blueprint/generator.js +3 -4
  139. package/dist/generators/generate-blueprint/templates/.blueprint/generate-sample/generator.mjs.ejs +3 -2
  140. package/dist/generators/generate-blueprint/templates/generators/generator/command.mjs.ejs +19 -1
  141. package/dist/generators/generate-blueprint/templates/vitest.test-setup.ts.ejs +6 -0
  142. package/dist/generators/generator-constants.js +5 -2
  143. package/dist/generators/git/generator.js +3 -5
  144. package/dist/generators/gradle/command.js +32 -0
  145. package/dist/generators/gradle/constants.js +0 -1
  146. package/dist/generators/gradle/files.js +2 -8
  147. package/dist/generators/gradle/generator.js +85 -13
  148. package/dist/generators/gradle/generators/code-quality/generator.js +86 -0
  149. package/dist/generators/{java/cleanup.js → gradle/generators/code-quality/index.js} +1 -5
  150. package/dist/generators/gradle/generators/jib/generator.js +64 -0
  151. package/dist/generators/gradle/generators/jib/index.js +19 -0
  152. package/dist/generators/gradle/generators/node-gradle/generator.js +64 -0
  153. package/dist/generators/gradle/generators/node-gradle/index.js +19 -0
  154. package/dist/generators/gradle/generators/node-gradle/templates/buildSrc/src/main/groovy/jhipster.node-gradle-conventions.gradle.ejs +101 -0
  155. package/dist/generators/gradle/index.js +1 -0
  156. package/dist/generators/gradle/internal/needles.js +9 -3
  157. package/dist/generators/gradle/templates/buildSrc/build.gradle.ejs +3 -2
  158. package/dist/generators/gradle/templates/buildSrc/gradle/libs.versions.toml.ejs +8 -1
  159. package/dist/generators/gradle/templates/gradle/wrapper/{gradle-wrapper.properties.ejs → gradle-wrapper.properties} +1 -1
  160. package/dist/generators/heroku/generator.js +3 -3
  161. package/dist/generators/init/generator.js +3 -4
  162. package/dist/generators/init/resources/.node-version +1 -0
  163. package/dist/generators/java/command.js +2 -38
  164. package/dist/generators/java/generator.js +5 -260
  165. package/dist/generators/java/generators/bootstrap/command.js +35 -0
  166. package/dist/generators/java/generators/bootstrap/generator.js +178 -0
  167. package/dist/generators/java/generators/bootstrap/index.js +20 -0
  168. package/dist/generators/java/generators/build-tool/command.js +42 -0
  169. package/dist/generators/java/generators/build-tool/generator.js +143 -0
  170. package/dist/generators/java/generators/build-tool/index.js +20 -0
  171. package/dist/generators/java/generators/code-quality/command.js +5 -0
  172. package/dist/generators/java/generators/code-quality/generator.js +91 -0
  173. package/dist/generators/java/generators/code-quality/index.js +20 -0
  174. package/dist/generators/java/generators/domain/command.js +30 -0
  175. package/dist/generators/java/{entity-files.js → generators/domain/entity-files.js} +1 -1
  176. package/dist/generators/java/generators/domain/generator.js +153 -0
  177. package/dist/generators/java/generators/domain/index.js +20 -0
  178. package/dist/generators/java/generators/jib/command.js +5 -0
  179. package/dist/generators/java/generators/jib/generator.js +97 -0
  180. package/dist/generators/java/generators/jib/index.js +20 -0
  181. package/dist/generators/{server → java/generators/jib}/templates/src/main/docker/jib/entrypoint.sh.ejs +2 -0
  182. package/dist/generators/java/generators/node/command.js +5 -0
  183. package/dist/generators/java/generators/node/generator.js +97 -0
  184. package/dist/generators/java/generators/node/index.js +20 -0
  185. package/dist/generators/java/support/index.js +1 -0
  186. package/dist/generators/jdl/generator.js +6 -9
  187. package/dist/generators/kubernetes/generator.js +1 -1
  188. package/dist/generators/kubernetes/kubernetes-base.js +3 -3
  189. package/dist/generators/kubernetes/templates/keycloak/keycloak-configmap.yml.ejs +0 -32
  190. package/dist/generators/kubernetes-helm/generator.js +1 -1
  191. package/dist/generators/kubernetes-knative/generator.js +1 -1
  192. package/dist/generators/languages/entity-files.js +3 -2
  193. package/dist/generators/languages/generator.js +7 -10
  194. package/dist/generators/languages/support/translate.js +34 -9
  195. package/dist/generators/languages/translation-data.js +4 -5
  196. package/dist/generators/liquibase/generator.js +68 -25
  197. package/dist/generators/liquibase/support/maven-plugin.js +6 -0
  198. package/dist/generators/liquibase/templates/gradle/liquibase.gradle.ejs +3 -6
  199. package/dist/generators/maven/generator.js +14 -6
  200. package/dist/generators/maven/generators/code-quality/command.js +5 -0
  201. package/dist/generators/maven/generators/code-quality/generator.js +268 -0
  202. package/dist/generators/maven/generators/code-quality/index.js +20 -0
  203. package/dist/generators/maven/generators/frontend-plugin/command.js +5 -0
  204. package/dist/generators/maven/generators/frontend-plugin/generator.js +295 -0
  205. package/dist/generators/maven/generators/frontend-plugin/index.js +20 -0
  206. package/dist/generators/maven/generators/jib/command.js +5 -0
  207. package/dist/generators/maven/generators/jib/generator.js +136 -0
  208. package/dist/generators/maven/generators/jib/index.js +20 -0
  209. package/dist/generators/maven/internal/xml-store.js +1 -2
  210. package/dist/generators/maven/support/dependabot-maven.js +12 -2
  211. package/dist/generators/maven/support/pom-store.js +1 -2
  212. package/dist/generators/project-name/generator.js +9 -11
  213. package/dist/generators/react/generator.js +25 -6
  214. package/dist/generators/react/needle-api/needle-client-react.js +2 -2
  215. package/dist/generators/react/resources/package.json +18 -15
  216. package/dist/generators/react/templates/package.json.ejs +1 -7
  217. package/dist/generators/react/templates/src/main/webapp/app/modules/administration/tracker/tracker.tsx.ejs +2 -2
  218. package/dist/generators/server/command.js +2 -34
  219. package/dist/generators/server/generator.js +20 -154
  220. package/dist/generators/server/jdl/application-definition.js +1 -2
  221. package/dist/generators/server/prompts.js +4 -46
  222. package/dist/generators/server/resources/Dockerfile +7 -7
  223. package/dist/generators/server/resources/build.gradle +1 -0
  224. package/dist/generators/server/resources/gradle/libs.versions.toml +25 -7
  225. package/dist/generators/server/resources/pom.xml +4 -22
  226. package/dist/generators/server/support/prepare-field.js +1 -2
  227. package/dist/generators/server/templates/build.gradle.ejs +29 -143
  228. package/dist/generators/server/templates/gradle/profile_dev.gradle.ejs +1 -1
  229. package/dist/generators/server/templates/gradle.properties.ejs +0 -7
  230. package/dist/generators/server/templates/pom.xml.ejs +23 -444
  231. package/dist/generators/server/templates/settings.gradle.ejs +0 -4
  232. package/dist/generators/server/templates/src/main/java/_package_/config/SecurityConfiguration_imperative.java.ejs +15 -3
  233. package/dist/generators/server/templates/src/main/java/_package_/web/filter/SpaWebFilter_imperative.java.ejs +4 -1
  234. package/dist/generators/server/templates/src/main/resources/config/application.yml.ejs +15 -4
  235. package/dist/generators/server/templates/src/test/java/_package_/IntegrationTest.java.ejs +0 -2
  236. package/dist/generators/server/templates/src/test/java/_package_/config/TestContainersSpringContextCustomizerFactory.java.ejs +71 -46
  237. package/dist/generators/server/templates/src/test/java/_package_/security/jwt/AuthenticationIntegrationTest.java.ejs +0 -3
  238. package/dist/generators/server/templates/src/test/resources/config/application.yml.ejs +1 -1
  239. package/dist/generators/spring-boot/command.js +31 -2
  240. package/dist/generators/spring-boot/entity-files.js +2 -2
  241. package/dist/generators/spring-boot/files.js +3 -38
  242. package/dist/generators/spring-boot/generator.js +98 -37
  243. package/dist/generators/spring-boot/resources/spring-boot-dependencies.pom +105 -105
  244. package/dist/generators/spring-boot/templates/src/test/java/_package_/_entityPackage_/web/rest/_entityClass_ResourceIT.java.ejs +2 -2
  245. package/dist/generators/spring-cache/generator.js +11 -6
  246. package/dist/generators/spring-cache/internal/dependencies.js +5 -0
  247. package/dist/generators/spring-cache/resources/build.gradle +1 -0
  248. package/dist/generators/spring-cache/resources/gradle/libs.versions.toml +15 -0
  249. package/dist/generators/spring-cache/templates/src/test/java/_package_/config/RedisTestContainersSpringContextCustomizerFactory.java.ejs +29 -13
  250. package/dist/generators/spring-cloud/generators/gateway/command.js +5 -0
  251. package/dist/generators/spring-cloud/generators/gateway/generator.js +146 -0
  252. package/dist/generators/spring-cloud/generators/gateway/index.js +20 -0
  253. package/dist/generators/spring-cloud-stream/generator.js +2 -3
  254. package/dist/generators/spring-cloud-stream/generators/kafka/generator.js +2 -2
  255. package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/test/java/_package_/config/KafkaTestContainersSpringContextCustomizerFactory.java.ejs +28 -12
  256. package/dist/generators/spring-cloud-stream/generators/pulsar/generator.js +2 -2
  257. package/dist/generators/spring-cloud-stream/generators/pulsar/templates/src/test/java/_package_/config/PulsarTestContainersSpringContextCustomizerFactory.java.ejs +33 -17
  258. package/dist/generators/spring-data-cassandra/generator.js +5 -6
  259. package/dist/generators/spring-data-cassandra/templates/src/test/java/_package_/config/CassandraTestContainersSpringContextCustomizerFactory.java.ejs +33 -17
  260. package/dist/generators/spring-data-couchbase/generator.js +3 -4
  261. package/dist/generators/spring-data-elasticsearch/generator.js +3 -5
  262. package/dist/generators/spring-data-mongodb/generator.js +5 -5
  263. package/dist/generators/spring-data-neo4j/generator.js +11 -5
  264. package/dist/generators/spring-data-neo4j/templates/src/test/java/_package_/config/Neo4jTestContainersSpringContextCustomizerFactory.java.ejs +32 -16
  265. package/dist/generators/spring-data-relational/generator.js +6 -7
  266. package/dist/generators/spring-data-relational/templates/src/test/java/_package_/config/SqlTestContainersSpringContextCustomizerFactory.java.ejs +47 -32
  267. package/dist/generators/spring-websocket/generator.js +2 -3
  268. package/dist/generators/statistics.js +2 -2
  269. package/dist/generators/upgrade/generator.js +4 -3
  270. package/dist/generators/vue/generator.js +4 -4
  271. package/dist/generators/vue/resources/package.json +18 -15
  272. package/dist/generators/vue/templates/package.json.ejs +3 -3
  273. package/dist/generators/vue/templates/src/main/webapp/app/account/account.service.spec.ts.ejs +1 -1
  274. package/dist/generators/vue/templates/src/main/webapp/app/account/account.service.ts.ejs +1 -1
  275. package/dist/generators/vue/templates/src/main/webapp/app/admin/tracker/tracker.service.ts.ejs +3 -3
  276. package/dist/generators/vue/templates/src/main/webapp/app/admin/tracker/tracker.vue.ejs +2 -2
  277. package/dist/generators/vue/templates/src/main/webapp/app/main.ts.ejs +4 -3
  278. package/dist/generators/vue/templates/vite.config.mts.ejs +6 -0
  279. package/dist/generators/workspaces/generator.js +5 -4
  280. package/dist/jdl/converters/jdl-to-json/jdl-to-json-field-converter.js +2 -2
  281. package/dist/jdl/converters/jdl-to-json/jdl-to-json-relationship-converter.js +3 -3
  282. package/dist/jdl/converters/parsed-jdl-to-jdl-object/parsed-jdl-to-jdl-object-converter.js +2 -2
  283. package/dist/jdl/jdl-importer.js +1 -2
  284. package/dist/jdl/jhipster/default-application-options.js +1 -1
  285. package/dist/jdl/jhipster/field-types.js +2 -2
  286. package/dist/jdl/jhipster/relationship-types.js +1 -2
  287. package/dist/jdl/models/jdl-deployment.js +1 -2
  288. package/dist/jdl/parsing/api.js +2 -2
  289. package/dist/jdl/parsing/lexer/token-creator.js +1 -2
  290. package/dist/jdl/parsing/self-checks/parsing-system-checker.js +13 -13
  291. package/dist/jdl/parsing/validator.js +5 -5
  292. package/dist/testing/get-generator.js +1 -1
  293. package/dist/testing/helpers.js +34 -9
  294. package/dist/types/generators/angular/support/index.d.ts +0 -1
  295. package/dist/types/generators/angular/support/translate-angular.d.ts +7 -4
  296. package/dist/types/generators/app/support/config.d.ts +1 -1
  297. package/dist/types/generators/base/api.d.ts +7 -0
  298. package/dist/types/generators/base/generator.d.ts +1 -1
  299. package/dist/types/generators/base-application/generator.d.ts +4 -4
  300. package/dist/types/generators/base-application/support/task-type-inference.d.ts +3 -0
  301. package/dist/types/generators/base-application/support/update-application-entities-transform.d.ts +1 -1
  302. package/dist/types/generators/base-core/generator.d.ts +33 -1
  303. package/dist/types/generators/bootstrap/internal/transform-utils.d.ts +1 -0
  304. package/dist/types/generators/bootstrap/support/java-unused-imports-transform.d.ts +1 -1
  305. package/dist/types/generators/bootstrap-application-base/support/export-jdl-transform.d.ts +2 -2
  306. package/dist/types/generators/docker/utils.d.ts +7 -0
  307. package/dist/types/generators/generator-constants.d.ts +2 -20
  308. package/dist/types/generators/gradle/types.d.ts +21 -7
  309. package/dist/types/generators/java/support/index.d.ts +1 -0
  310. package/dist/types/generators/java/types.d.ts +37 -22
  311. package/dist/types/generators/languages/support/translate.d.ts +29 -0
  312. package/dist/types/generators/maven/support/dependabot-maven.d.ts +17 -1
  313. package/dist/types/generators/project-name/support/name-resolver.d.ts +1 -1
  314. package/dist/types/generators/server/types.d.ts +2 -0
  315. package/dist/types/jdl/converters/jdl-to-json/jdl-to-json-field-converter.d.ts +0 -18
  316. package/dist/types/testing/helpers.d.ts +6 -0
  317. package/dist/types/testing/support/matrix-utils.d.ts +1 -1
  318. package/package.json +15 -27
  319. package/dist/generators/java/files.js +0 -20
  320. /package/dist/generators/{server → gradle/generators/code-quality}/templates/buildSrc/src/main/groovy/jhipster.code-quality-conventions.gradle.ejs +0 -0
  321. /package/dist/generators/{server → gradle/generators/jib}/templates/buildSrc/src/main/groovy/jhipster.docker-conventions.gradle.ejs +0 -0
  322. /package/dist/generators/java/{templates → generators/bootstrap/templates}/src/main/java/_package_/GeneratedByJHipster.java.ejs +0 -0
  323. /package/dist/generators/{server → java/generators/code-quality}/templates/checkstyle.xml.ejs +0 -0
  324. /package/dist/generators/java/{templates → generators/domain/templates}/_global_partials_entity_/field_validators.ejs +0 -0
  325. /package/dist/generators/java/{templates → generators/domain/templates}/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.ejs +0 -0
  326. /package/dist/generators/java/{templates → generators/domain/templates}/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.jackson_identity_info.ejs +0 -0
  327. /package/dist/generators/java/{templates → generators/domain/templates}/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.jakarta_validation.ejs +0 -0
  328. /package/dist/generators/java/{templates → generators/domain/templates}/src/main/java/_package_/_entityPackage_/domain/enumeration/_enumName_.java.ejs +0 -0
  329. /package/dist/generators/java/{templates → generators/domain/templates}/src/test/java/_package_/_entityPackage_/domain/_persistClass_Asserts.java.ejs +0 -0
  330. /package/dist/generators/java/{templates → generators/domain/templates}/src/test/java/_package_/_entityPackage_/domain/_persistClass_Test.java.ejs +0 -0
  331. /package/dist/generators/java/{templates → generators/domain/templates}/src/test/java/_package_/_entityPackage_/domain/_persistClass_TestSamples.java.ejs +0 -0
  332. /package/dist/generators/java/{templates → generators/domain/templates}/src/test/java/_package_/domain/AssertUtils.java.ejs +0 -0
  333. /package/dist/generators/{server → java/generators/node}/templates/npmw +0 -0
  334. /package/dist/generators/{server → java/generators/node}/templates/npmw.cmd +0 -0
  335. /package/dist/generators/{server → spring-cloud/generators/gateway}/templates/src/main/java/_package_/security/jwt/JWTRelayGatewayFilterFactory.java.ejs +0 -0
  336. /package/dist/generators/{server → spring-cloud/generators/gateway}/templates/src/main/java/_package_/web/filter/ModifyServersOpenApiFilter.java.ejs +0 -0
  337. /package/dist/generators/{server → spring-cloud/generators/gateway}/templates/src/main/java/_package_/web/rest/GatewayResource.java.ejs +0 -0
  338. /package/dist/generators/{server → spring-cloud/generators/gateway}/templates/src/main/java/_package_/web/rest/vm/RouteVM.java.ejs +0 -0
  339. /package/dist/generators/{server → spring-cloud/generators/gateway}/templates/src/test/java/_package_/web/filter/ModifyServersOpenApiFilterTest.java.ejs +0 -0
@@ -42,10 +42,13 @@ public class SpaWebFilter extends OncePerRequestFilter {
42
42
  <%_ if (devDatabaseTypeH2Any) { _%>
43
43
  !path.startsWith("/h2-console") &&
44
44
  <%_ } _%>
45
- <%_ if (authenticationTypeOauth2 && applicationTypeMonolith) { _%>
45
+ <%_ if (authenticationTypeOauth2 && (applicationTypeGateway || applicationTypeMonolith)) { _%>
46
46
  !path.startsWith("/login") &&
47
47
  !path.startsWith("/oauth2") &&
48
48
  <%_ } _%>
49
+ <%_ if (applicationTypeGateway) { _%>
50
+ !path.startsWith("/services") &&
51
+ <%_ } _%>
49
52
  <%_ if (communicationSpringWebsocket) { _%>
50
53
  !path.startsWith("/websocket") &&
51
54
  <%_ } _%>
@@ -69,7 +69,7 @@ eureka:
69
69
  git-branch: ${git.branch:}
70
70
  context-path: ${server.servlet.context-path:}
71
71
  <%_ } _%>
72
- <%_ if (applicationTypeGateway || (applicationTypeMicroservice && reactive)) { _%>
72
+ <%_ if ((applicationTypeGateway || applicationTypeMicroservice) && reactive) { _%>
73
73
  reactive:
74
74
  feign:
75
75
  circuit:
@@ -99,7 +99,7 @@ management:
99
99
  include:
100
100
  - configprops
101
101
  - env
102
- <% if (applicationTypeGateway && reactive) { -%>
102
+ <% if (applicationTypeGateway) { -%>
103
103
  - gateway
104
104
  <% } -%>
105
105
  - health
@@ -175,7 +175,7 @@ spring:
175
175
  <%_ } _%>
176
176
  application:
177
177
  name: <%= baseName %>
178
- <%_ if (serviceDiscoveryConsul || (applicationTypeGateway && reactive) || messageBrokerKafka) { _%>
178
+ <%_ if (serviceDiscoveryConsul || applicationTypeGateway || messageBrokerKafka) { _%>
179
179
  cloud:
180
180
  <%_ if (serviceDiscoveryConsul) { _%>
181
181
  consul:
@@ -187,8 +187,9 @@ spring:
187
187
  watch:
188
188
  enabled: false
189
189
  <%_ } _%>
190
- <%_ if (applicationTypeGateway && reactive) { _%>
190
+ <%_ if (applicationTypeGateway) { _%>
191
191
  gateway:
192
+ <%_ if (reactive) { _%>
192
193
  default-filters:
193
194
  - <% if (authenticationTypeJwt) { %>JWTRelay<% } else { %>TokenRelay<% } %>
194
195
  discovery:
@@ -207,6 +208,16 @@ spring:
207
208
  httpclient:
208
209
  pool:
209
210
  max-connections: 1000
211
+ <%_ } else { _%>
212
+ mvc:
213
+ routes:
214
+ - id: <%= lowercaseBaseName %>_route
215
+ uri: lb://<%= lowercaseBaseName %>:<%= serverPort %>
216
+ predicates:
217
+ - Path=/services/<%= lowercaseBaseName %>/**
218
+ filters:
219
+ - RewritePath=/services/<%= lowercaseBaseName %>/?(?<segment>.*), /$\{segment}
220
+ <%_ } _%>
210
221
  <%_ } _%>
211
222
  <%_ if (messageBrokerKafka) { _%>
212
223
  function:
@@ -52,7 +52,6 @@ import <%= packageName %>.config.TestSecurityConfiguration;
52
52
  <%_ if (cacheProviderRedis) { _%>
53
53
  import org.junit.jupiter.api.extension.ExtendWith;
54
54
  <%_ } _%>
55
- import org.springframework.test.annotation.DirtiesContext;
56
55
  import org.springframework.boot.test.context.SpringBootTest;
57
56
 
58
57
  import java.lang.annotation.ElementType;
@@ -88,7 +87,6 @@ import java.lang.annotation.Target;
88
87
  <%_ if (databaseTypeSql) { _%>
89
88
  @EmbeddedSQL
90
89
  <%_ } _%>
91
- @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
92
90
  public @interface IntegrationTest {
93
91
  <%_ if (reactive) { _%>
94
92
  // 5s is Spring's default https://github.com/spring-projects/spring-framework/blob/main/spring-test/src/main/java/org/springframework/test/web/reactive/server/DefaultWebTestClient.java#L106
@@ -25,10 +25,12 @@ import org.slf4j.LoggerFactory;
25
25
  import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
26
26
  import org.springframework.beans.factory.support.DefaultSingletonBeanRegistry;
27
27
  import org.springframework.core.annotation.AnnotatedElementUtils;
28
+ import org.springframework.context.ConfigurableApplicationContext;
28
29
 
29
30
  import org.springframework.test.context.ContextConfigurationAttributes;
30
31
  import org.springframework.test.context.ContextCustomizer;
31
32
  import org.springframework.test.context.ContextCustomizerFactory;
33
+ import org.springframework.test.context.MergedContextConfiguration;
32
34
  import org.springframework.beans.factory.support.DefaultListableBeanFactory;
33
35
  import org.springframework.boot.test.util.TestPropertyValues;
34
36
 
@@ -49,56 +51,79 @@ public class TestContainersSpringContextCustomizerFactory implements ContextCust
49
51
  @Override
50
52
  public ContextCustomizer createContextCustomizer(Class<?> testClass, List<ContextConfigurationAttributes> configAttributes) {
51
53
 
52
- return (context, mergedConfig) -> {
53
- ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
54
- TestPropertyValues testValues = TestPropertyValues.empty();
55
- <%_ if (databaseTypeCouchbase || searchEngineCouchbase) { _%>
56
- EmbeddedCouchbase couchbaseAnnotation = AnnotatedElementUtils.findMergedAnnotation(testClass, EmbeddedCouchbase.class);
57
- if (null != couchbaseAnnotation) {
58
- log.debug("detected the EmbeddedCouchbase annotation on class {}", testClass.getName());
59
- log.info("Warming up the Couchbase database");
60
- if (null == couchbaseBean) {
61
- couchbaseBean = beanFactory.createBean(CouchbaseTestContainer.class);
62
- beanFactory.registerSingleton(CouchbaseTestContainer.class.getName(), couchbaseBean);
63
- // ((DefaultListableBeanFactory)beanFactory).registerDisposableBean(CouchbaseTestContainer.class.getName(), couchbaseBean);
64
- }
65
- testValues = testValues.and("spring.couchbase.connection-string=" + couchbaseBean.getCouchbaseContainer().getConnectionString());
66
- testValues = testValues.and("spring.couchbase.username=" + couchbaseBean.getCouchbaseContainer().getUsername());
67
- testValues = testValues.and("spring.couchbase.password=" + couchbaseBean.getCouchbaseContainer().getPassword());
68
- testValues = testValues.and("jhipster.database.couchbase.bucket-name=" + couchbaseBean.getBucketName());
69
- testValues = testValues.and("jhipster.database.couchbase.scope-name=testScope");
70
- }
71
- <%_ } _%>
72
- <%_ if (databaseTypeMongodb) { _%>
73
- EmbeddedMongo mongoAnnotation = AnnotatedElementUtils.findMergedAnnotation(testClass, EmbeddedMongo.class);
74
- if (null != mongoAnnotation) {
75
- log.debug("detected the EmbeddedMongo annotation on class {}", testClass.getName());
76
- log.info("Warming up the mongo database");
77
- if (null == mongoDbBean) {
78
- mongoDbBean = beanFactory.createBean(MongoDbTestContainer.class);
79
- beanFactory.registerSingleton(MongoDbTestContainer.class.getName(), mongoDbBean);
80
- // ((DefaultListableBeanFactory)beanFactory).registerDisposableBean(MongoDbTestContainer.class.getName(), mongoDbBean);
54
+ return new ContextCustomizer() {
55
+ @Override
56
+ public void customizeContext(ConfigurableApplicationContext context,
57
+ MergedContextConfiguration mergedConfig) {
58
+ ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
59
+ TestPropertyValues testValues = TestPropertyValues.empty();
60
+ <%_ if (databaseTypeCouchbase || searchEngineCouchbase) { _%>
61
+ EmbeddedCouchbase couchbaseAnnotation = AnnotatedElementUtils.findMergedAnnotation(testClass, EmbeddedCouchbase.class);
62
+ if (null != couchbaseAnnotation) {
63
+ log.debug("detected the EmbeddedCouchbase annotation on class {}", testClass.getName());
64
+ log.info("Warming up the Couchbase database");
65
+ if (null == couchbaseBean) {
66
+ couchbaseBean = beanFactory.createBean(CouchbaseTestContainer.class);
67
+ beanFactory.registerSingleton(CouchbaseTestContainer.class.getName(), couchbaseBean);
68
+ // ((DefaultListableBeanFactory)beanFactory).registerDisposableBean(CouchbaseTestContainer.class.getName(), couchbaseBean);
81
69
  }
82
- testValues = testValues.and("spring.data.mongodb.uri=" + mongoDbBean.getMongoDBContainer().getReplicaSetUrl());
70
+ testValues = testValues.and("spring.couchbase.connection-string=" + couchbaseBean.getCouchbaseContainer().getConnectionString());
71
+ testValues = testValues.and("spring.couchbase.username=" + couchbaseBean.getCouchbaseContainer().getUsername());
72
+ testValues = testValues.and("spring.couchbase.password=" + couchbaseBean.getCouchbaseContainer().getPassword());
73
+ testValues = testValues.and("jhipster.database.couchbase.bucket-name=" + couchbaseBean.getBucketName());
74
+ testValues = testValues.and("jhipster.database.couchbase.scope-name=testScope");
83
75
  }
84
- <%_ } _%>
85
- <%_ if (searchEngineElasticsearch) { _%>
86
- EmbeddedElasticsearch elasticsearchAnnotation = AnnotatedElementUtils.findMergedAnnotation(testClass, EmbeddedElasticsearch.class);
87
- if (null != elasticsearchAnnotation) {
88
- log.debug("detected the EmbeddedElasticsearch annotation on class {}", testClass.getName());
89
- log.info("Warming up the elastic database");
90
- if (null == elasticsearchBean) {
91
- elasticsearchBean = beanFactory.createBean(ElasticsearchTestContainer.class);
92
- beanFactory.registerSingleton(ElasticsearchTestContainer.class.getName(), elasticsearchBean);
93
- // ((DefaultListableBeanFactory)beanFactory).registerDisposableBean(ElasticsearchTestContainer.class.getName(), elasticsearchBean);
76
+ <%_ } _%>
77
+ <%_ if (databaseTypeMongodb) { _%>
78
+ EmbeddedMongo mongoAnnotation = AnnotatedElementUtils.findMergedAnnotation(testClass, EmbeddedMongo.class);
79
+ if (null != mongoAnnotation) {
80
+ log.debug("detected the EmbeddedMongo annotation on class {}", testClass.getName());
81
+ log.info("Warming up the mongo database");
82
+ if (null == mongoDbBean) {
83
+ mongoDbBean = beanFactory.createBean(MongoDbTestContainer.class);
84
+ beanFactory.registerSingleton(MongoDbTestContainer.class.getName(), mongoDbBean);
85
+ // ((DefaultListableBeanFactory)beanFactory).registerDisposableBean(MongoDbTestContainer.class.getName(), mongoDbBean);
86
+ }
87
+ testValues = testValues.and("spring.data.mongodb.uri=" + mongoDbBean.getMongoDBContainer().getReplicaSetUrl());
88
+ }
89
+ <%_ } _%>
90
+ <%_ if (searchEngineElasticsearch) { _%>
91
+ EmbeddedElasticsearch elasticsearchAnnotation = AnnotatedElementUtils.findMergedAnnotation(testClass, EmbeddedElasticsearch.class);
92
+ if (null != elasticsearchAnnotation) {
93
+ log.debug("detected the EmbeddedElasticsearch annotation on class {}", testClass.getName());
94
+ log.info("Warming up the elastic database");
95
+ if (null == elasticsearchBean) {
96
+ elasticsearchBean = beanFactory.createBean(ElasticsearchTestContainer.class);
97
+ beanFactory.registerSingleton(ElasticsearchTestContainer.class.getName(), elasticsearchBean);
98
+ // ((DefaultListableBeanFactory)beanFactory).registerDisposableBean(ElasticsearchTestContainer.class.getName(), elasticsearchBean);
99
+ }
100
+ testValues =
101
+ testValues.and(
102
+ "spring.elasticsearch.uris=http://" + elasticsearchBean.getElasticsearchContainer().getHttpHostAddress()
103
+ );
94
104
  }
95
- testValues =
96
- testValues.and(
97
- "spring.elasticsearch.uris=http://" + elasticsearchBean.getElasticsearchContainer().getHttpHostAddress()
98
- );
105
+ <%_ } _%>
106
+ testValues.applyTo(context);
107
+ }
108
+
109
+ @Override
110
+ public int hashCode() {
111
+ return
112
+ <%_ if (databaseTypeMongodb) { _%>
113
+ MongoDbTestContainer.class.getName().hashCode() <% if (searchEngineElasticsearch || databaseTypeCouchbase || searchEngineCouchbase) { %> + <% } else { %>;<% } %>
114
+ <%_ } _%>
115
+ <%_ if (searchEngineElasticsearch) { _%>
116
+ ElasticsearchTestContainer.class.getName().hashCode() <% if (databaseTypeCouchbase || searchEngineCouchbase) { %> + <% } else { %>;<% } %>
117
+ <%_ } _%>
118
+ <%_ if (databaseTypeCouchbase || searchEngineCouchbase) { _%>
119
+ CouchbaseTestContainer.class.getName().hashCode();
120
+ <%_ } _%>
121
+ }
122
+
123
+ @Override
124
+ public boolean equals(Object obj) {
125
+ return this.hashCode() == obj.hashCode();
99
126
  }
100
- <%_ } _%>
101
- testValues.applyTo(context);
102
127
  };
103
128
  }
104
129
  }
@@ -5,8 +5,6 @@ import java.lang.annotation.Retention;
5
5
  import java.lang.annotation.RetentionPolicy;
6
6
  import java.lang.annotation.Target;
7
7
 
8
- import org.springframework.test.annotation.DirtiesContext;
9
-
10
8
  import <%= packageName %>.config.SecurityConfiguration;
11
9
  import <%= packageName %>.config.SecurityJwtConfiguration;
12
10
  import <%= packageName %>.config.WebConfigurer;
@@ -72,7 +70,6 @@ import org.springframework.boot.test.context.SpringBootTest;
72
70
  }
73
71
  )
74
72
  <%_ } _%>
75
- @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
76
73
  public @interface AuthenticationIntegrationTest {
77
74
 
78
75
  }
@@ -63,7 +63,7 @@ mongock:
63
63
  spring:
64
64
  application:
65
65
  name: <%= baseName %>
66
- <%_ if (applicationTypeGateway && reactive) { _%>
66
+ <%_ if (applicationTypeGateway) { _%>
67
67
  autoconfigure:
68
68
  exclude:
69
69
  - org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration
@@ -1,4 +1,5 @@
1
- import { GENERATOR_SERVER } from '../generator-list.js';
1
+ import { GENERATOR_JAVA, GENERATOR_LIQUIBASE, GENERATOR_SPRING_DATA_RELATIONAL } from '../generator-list.js';
2
+ import { APPLICATION_TYPE_MICROSERVICE } from '../../jdl/index.js';
2
3
  const command = {
3
4
  options: {
4
5
  fakeKeytool: {
@@ -9,6 +10,34 @@ const command = {
9
10
  hide: true,
10
11
  },
11
12
  },
12
- import: [GENERATOR_SERVER],
13
+ configs: {
14
+ feignClient: {
15
+ description: 'Generate a feign client',
16
+ cli: {
17
+ type: Boolean,
18
+ },
19
+ prompt: {
20
+ type: 'confirm',
21
+ message: 'Do you want to generate a feign client?',
22
+ when: currentAnswer => currentAnswer.applicationType === APPLICATION_TYPE_MICROSERVICE &&
23
+ currentAnswer.reactive !== undefined &&
24
+ !currentAnswer.reactive,
25
+ },
26
+ default: false,
27
+ },
28
+ syncUserWithIdp: {
29
+ description: 'Allow relationships with User for oauth2 applications',
30
+ cli: {
31
+ type: Boolean,
32
+ },
33
+ prompt: gen => ({
34
+ type: 'confirm',
35
+ message: 'Do you want to allow relationships with User entity?',
36
+ when: ({ authenticationType }) => (authenticationType ?? gen.jhipsterConfigWithDefaults.authenticationType) === 'oauth2',
37
+ }),
38
+ default: false,
39
+ },
40
+ },
41
+ import: [GENERATOR_JAVA, GENERATOR_LIQUIBASE, GENERATOR_SPRING_DATA_RELATIONAL],
13
42
  };
14
43
  export default command;
@@ -191,8 +191,8 @@ export function writeFiles() {
191
191
  },
192
192
  async writeServerFiles({ application, entities }) {
193
193
  const rootTemplatesPath = application.reactive
194
- ? ['reactive', '', '../../server/templates/', '../../java/templates/']
195
- : ['', '../../server/templates/', '../../java/templates/'];
194
+ ? ['reactive', '', '../../server/templates/', '../../java/generators/domain/templates/']
195
+ : ['', '../../server/templates/', '../../java/generators/domain/templates/'];
196
196
  for (const entity of entities.filter(entity => !entity.skipServer)) {
197
197
  if (entity.builtInUser) {
198
198
  await this.writeFiles({
@@ -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 { SERVER_MAIN_SRC_DIR, SERVER_MAIN_RES_DIR, SERVER_TEST_SRC_DIR, SERVER_TEST_RES_DIR, GRADLE_BUILD_SRC_MAIN_DIR, } from '../generator-constants.js';
19
+ import { SERVER_MAIN_SRC_DIR, SERVER_MAIN_RES_DIR, SERVER_TEST_SRC_DIR, SERVER_TEST_RES_DIR } from '../generator-constants.js';
20
20
  import { addSectionsCondition, mergeSections } from '../base/support/index.js';
21
21
  import { moveToJavaPackageSrcDir, moveToJavaPackageTestDir, moveToSrcMainResourcesDir } from '../java/support/index.js';
22
22
  const imperativeConfigFiles = {
@@ -226,28 +226,6 @@ const jwtFiles = {
226
226
  },
227
227
  ],
228
228
  };
229
- const gatewayFiles = {
230
- gatewayFiles: [
231
- {
232
- condition: generator => generator.authenticationTypeJwt,
233
- path: `${SERVER_MAIN_SRC_DIR}_package_/`,
234
- renameTo: moveToJavaPackageSrcDir,
235
- templates: ['security/jwt/JWTRelayGatewayFilterFactory.java'],
236
- },
237
- {
238
- condition: generator => generator.serviceDiscoveryAny,
239
- path: `${SERVER_MAIN_SRC_DIR}_package_/`,
240
- renameTo: moveToJavaPackageSrcDir,
241
- templates: ['web/rest/vm/RouteVM.java', 'web/rest/GatewayResource.java', 'web/filter/ModifyServersOpenApiFilter.java'],
242
- },
243
- {
244
- condition: generator => generator.serviceDiscoveryAny,
245
- path: `${SERVER_TEST_SRC_DIR}_package_/`,
246
- renameTo: moveToJavaPackageTestDir,
247
- templates: ['web/filter/ModifyServersOpenApiFilterTest.java'],
248
- },
249
- ],
250
- };
251
229
  const swaggerFiles = {
252
230
  swagger: [
253
231
  {
@@ -270,12 +248,6 @@ const swaggerFiles = {
270
248
  * For any other config an object { file:.., method:.., template:.. } can be used
271
249
  */
272
250
  export const baseServerFiles = {
273
- jib: [
274
- {
275
- path: 'src/main/docker/jib/',
276
- templates: ['entrypoint.sh'],
277
- },
278
- ],
279
251
  readme: [
280
252
  {
281
253
  templates: ['README.md.jhi.spring-boot'],
@@ -289,7 +261,7 @@ export const baseServerFiles = {
289
261
  ],
290
262
  serverBuild: [
291
263
  {
292
- templates: ['checkstyle.xml', '.devcontainer/devcontainer.json', '.devcontainer/Dockerfile'],
264
+ templates: ['.devcontainer/devcontainer.json', '.devcontainer/Dockerfile'],
293
265
  },
294
266
  {
295
267
  condition: generator => generator.buildToolGradle,
@@ -301,19 +273,12 @@ export const baseServerFiles = {
301
273
  'gradle/profile_prod.gradle',
302
274
  'gradle/war.gradle',
303
275
  'gradle/zipkin.gradle',
304
- `${GRADLE_BUILD_SRC_MAIN_DIR}/jhipster.code-quality-conventions.gradle`,
305
- `${GRADLE_BUILD_SRC_MAIN_DIR}/jhipster.docker-conventions.gradle`,
306
276
  ],
307
277
  },
308
278
  {
309
279
  condition: generator => generator.buildToolMaven,
310
280
  templates: ['pom.xml'],
311
281
  },
312
- {
313
- condition: generator => generator.useNpmWrapper,
314
- transform: false,
315
- templates: ['npmw', 'npmw.cmd'],
316
- },
317
282
  ],
318
283
  serverResource: [
319
284
  {
@@ -537,4 +502,4 @@ export const baseServerFiles = {
537
502
  },
538
503
  ],
539
504
  };
540
- export const serverFiles = mergeSections(baseServerFiles, addSectionsCondition(jwtFiles, context => context.authenticationTypeJwt), addSectionsCondition(oauth2Files, context => context.authenticationTypeOauth2), addSectionsCondition(gatewayFiles, context => context.applicationTypeGateway), addSectionsCondition(accountFiles, context => context.generateAuthenticationApi), addSectionsCondition(userManagementFiles, context => context.generateUserManagement), addSectionsCondition(imperativeConfigFiles, context => !context.reactive), addSectionsCondition(reactiveConfigFiles, context => context.reactive), addSectionsCondition(swaggerFiles, context => context.enableSwaggerCodegen));
505
+ export const serverFiles = mergeSections(baseServerFiles, addSectionsCondition(jwtFiles, context => context.authenticationTypeJwt), addSectionsCondition(oauth2Files, context => context.authenticationTypeOauth2), addSectionsCondition(accountFiles, context => context.generateAuthenticationApi), addSectionsCondition(userManagementFiles, context => context.generateUserManagement), addSectionsCondition(imperativeConfigFiles, context => !context.reactive), addSectionsCondition(reactiveConfigFiles, context => context.reactive), addSectionsCondition(swaggerFiles, context => context.enableSwaggerCodegen));
@@ -18,18 +18,18 @@
18
18
  */
19
19
  import os from 'node:os';
20
20
  import chalk from 'chalk';
21
- import { kebabCase, sortedUniqBy } from 'lodash-es';
21
+ import { sortedUniqBy } from 'lodash-es';
22
22
  import BaseApplicationGenerator from '../base-application/index.js';
23
- import { GENERATOR_SERVER, GENERATOR_SPRING_CACHE, GENERATOR_SPRING_CLOUD_STREAM, GENERATOR_SPRING_DATA_CASSANDRA, GENERATOR_SPRING_DATA_COUCHBASE, GENERATOR_SPRING_DATA_ELASTICSEARCH, GENERATOR_SPRING_DATA_MONGODB, GENERATOR_SPRING_DATA_NEO4J, GENERATOR_SPRING_DATA_RELATIONAL, GENERATOR_SPRING_WEBSOCKET, } from '../generator-list.js';
23
+ import { GENERATOR_CUCUMBER, GENERATOR_DOCKER, GENERATOR_FEIGN_CLIENT, GENERATOR_GATLING, GENERATOR_LANGUAGES, GENERATOR_SERVER, GENERATOR_SPRING_CACHE, GENERATOR_SPRING_CLOUD_STREAM, GENERATOR_SPRING_DATA_CASSANDRA, GENERATOR_SPRING_DATA_COUCHBASE, GENERATOR_SPRING_DATA_ELASTICSEARCH, GENERATOR_SPRING_DATA_MONGODB, GENERATOR_SPRING_DATA_NEO4J, GENERATOR_SPRING_DATA_RELATIONAL, GENERATOR_SPRING_WEBSOCKET, } from '../generator-list.js';
24
24
  import { serverFiles } from './files.js';
25
25
  import cleanupTask from './cleanup.js';
26
26
  import { ADD_SPRING_MILESTONE_REPOSITORY } from '../generator-constants.js';
27
27
  import { addSpringFactory, getJavaValueGeneratorForType, getPrimaryKeyValue, getSpecificationBuildForType, insertContentIntoApplicationProperties, javaBeanCase, } from '../server/support/index.js';
28
28
  import { addJavaAnnotation, generateKeyStore } from '../java/support/index.js';
29
29
  import { createNeedleCallback, mutateData } from '../base/support/index.js';
30
- import { APPLICATION_TYPE_MICROSERVICE, applicationTypes, cacheTypes, databaseTypes, fieldTypes, messageBrokerTypes, searchEngineTypes, websocketTypes, } from '../../jdl/index.js';
30
+ import { APPLICATION_TYPE_MICROSERVICE, applicationTypes, cacheTypes, databaseTypes, fieldTypes, messageBrokerTypes, searchEngineTypes, testFrameworkTypes, websocketTypes, } from '../../jdl/index.js';
31
31
  import { writeFiles as writeEntityFiles } from './entity-files.js';
32
- import { getPomVersionProperties } from '../maven/support/index.js';
32
+ import { getPomVersionProperties, parseMavenPom } from '../maven/support/index.js';
33
33
  const { CAFFEINE, EHCACHE, HAZELCAST, INFINISPAN, MEMCACHED, REDIS, NO: NO_CACHE } = cacheTypes;
34
34
  const { NO: NO_WEBSOCKET, SPRING_WEBSOCKET } = websocketTypes;
35
35
  const { CASSANDRA, COUCHBASE, MONGODB, NEO4J, SQL } = databaseTypes;
@@ -37,6 +37,7 @@ const { MICROSERVICE, GATEWAY } = applicationTypes;
37
37
  const { KAFKA, PULSAR } = messageBrokerTypes;
38
38
  const { ELASTICSEARCH } = searchEngineTypes;
39
39
  const { BYTES: TYPE_BYTES, BYTE_BUFFER: TYPE_BYTE_BUFFER } = fieldTypes.RelationalOnlyDBTypes;
40
+ const { CUCUMBER, GATLING } = testFrameworkTypes;
40
41
  export default class SpringBootGenerator extends BaseApplicationGenerator {
41
42
  fakeKeytool;
42
43
  async beforeQueue() {
@@ -45,6 +46,8 @@ export default class SpringBootGenerator extends BaseApplicationGenerator {
45
46
  }
46
47
  if (!this.delegateToBlueprint) {
47
48
  await this.dependsOnJHipster(GENERATOR_SERVER);
49
+ await this.dependsOnJHipster('jhipster:java:domain');
50
+ await this.dependsOnJHipster('jhipster:java:build-tool');
48
51
  }
49
52
  }
50
53
  get initializing() {
@@ -57,30 +60,26 @@ export default class SpringBootGenerator extends BaseApplicationGenerator {
57
60
  get [BaseApplicationGenerator.INITIALIZING]() {
58
61
  return this.delegateTasksToBlueprint(() => this.initializing);
59
62
  }
63
+ get prompting() {
64
+ return this.asPromptingTaskGroup({
65
+ async promptCommand({ control }) {
66
+ if (control.existingProject && this.options.askAnswered !== true)
67
+ return;
68
+ await this.promptCurrentJHipsterCommand();
69
+ },
70
+ });
71
+ }
72
+ get [BaseApplicationGenerator.PROMPTING]() {
73
+ return this.delegateTasksToBlueprint(() => this.prompting);
74
+ }
60
75
  get configuring() {
61
76
  return this.asConfiguringTaskGroup({
62
- forceReactiveGateway() {
63
- if (this.jhipsterConfig.applicationType === GATEWAY) {
64
- if (this.jhipsterConfig.reactive !== undefined && !this.jhipsterConfig.reactive) {
65
- this.log.warn('Non reactive gateway is not supported. Switching to reactive.');
66
- }
67
- this.jhipsterConfig.reactive = true;
68
- }
69
- },
70
77
  checks() {
71
78
  const config = this.jhipsterConfigWithDefaults;
72
79
  if (config.enableHibernateCache && [NO_CACHE, MEMCACHED].includes(config.cacheProvider)) {
73
80
  this.log.verboseInfo(`Disabling hibernate cache for cache provider ${config.cacheProvider}`);
74
81
  this.jhipsterConfig.enableHibernateCache = false;
75
82
  }
76
- if (config.websocket && config.websocket !== NO_WEBSOCKET) {
77
- if (config.reactive) {
78
- throw new Error('Spring Websocket is not supported with reactive applications.');
79
- }
80
- if (config.applicationType === MICROSERVICE) {
81
- throw new Error('Spring Websocket is not supported with microservice applications.');
82
- }
83
- }
84
83
  },
85
84
  feignMigration() {
86
85
  const { reactive, applicationType, feignClient } = this.jhipsterConfigWithDefaults;
@@ -107,7 +106,28 @@ export default class SpringBootGenerator extends BaseApplicationGenerator {
107
106
  get composing() {
108
107
  return this.asComposingTaskGroup({
109
108
  async composing() {
110
- const { databaseType, messageBroker, searchEngine, websocket, cacheProvider } = this.jhipsterConfigWithDefaults;
109
+ const { applicationType, databaseType, messageBroker, searchEngine, websocket, cacheProvider, skipClient, clientFramework, enableTranslation, testFrameworks, feignClient, } = this.jhipsterConfigWithDefaults;
110
+ await this.composeWithJHipster(GENERATOR_DOCKER);
111
+ await this.composeWithJHipster('jhipster:java:jib');
112
+ await this.composeWithJHipster('jhipster:java:code-quality');
113
+ if (!skipClient && clientFramework !== 'no') {
114
+ await this.composeWithJHipster('jhipster:java:node');
115
+ }
116
+ if (applicationType === GATEWAY) {
117
+ await this.composeWithJHipster('jhipster:spring-cloud:gateway');
118
+ }
119
+ if (enableTranslation) {
120
+ await this.composeWithJHipster(GENERATOR_LANGUAGES);
121
+ }
122
+ if (testFrameworks?.includes(CUCUMBER)) {
123
+ await this.composeWithJHipster(GENERATOR_CUCUMBER);
124
+ }
125
+ if (testFrameworks?.includes(GATLING)) {
126
+ await this.composeWithJHipster(GENERATOR_GATLING);
127
+ }
128
+ if (feignClient) {
129
+ await this.composeWithJHipster(GENERATOR_FEIGN_CLIENT);
130
+ }
111
131
  if (databaseType === SQL) {
112
132
  await this.composeWithJHipster(GENERATOR_SPRING_DATA_RELATIONAL);
113
133
  }
@@ -143,19 +163,33 @@ export default class SpringBootGenerator extends BaseApplicationGenerator {
143
163
  }
144
164
  get preparing() {
145
165
  return this.asPreparingTaskGroup({
166
+ checksWebsocket({ application }) {
167
+ const { websocket } = application;
168
+ if (websocket && websocket !== NO_WEBSOCKET) {
169
+ if (application.reactive) {
170
+ throw new Error('Spring Websocket is not supported with reactive applications.');
171
+ }
172
+ if (application.applicationType === MICROSERVICE) {
173
+ throw new Error('Spring Websocket is not supported with microservice applications.');
174
+ }
175
+ }
176
+ },
146
177
  loadSpringBootBom({ application }) {
147
- const pomFile = this.readTemplate(this.jhipsterTemplatePath('../resources/spring-boot-dependencies.pom'))?.toString();
148
178
  if (this.useVersionPlaceholders) {
149
- application.javaDependencies['spring-boot'] = "'SPRING-BOOT-VERSION'";
150
- application.springBootDependencies = {};
179
+ application.springBootDependencies = {
180
+ 'spring-boot-dependencies': "'SPRING-BOOT-VERSION'",
181
+ };
151
182
  }
152
183
  else {
153
- application.springBootDependencies = this.prepareDependencies(getPomVersionProperties(pomFile), value => `'${kebabCase(value).toUpperCase()}-VERSION'`);
184
+ const pomFile = this.readTemplate(this.jhipsterTemplatePath('../resources/spring-boot-dependencies.pom')).toString();
185
+ const pom = parseMavenPom(pomFile);
186
+ application.springBootDependencies = this.prepareDependencies(getPomVersionProperties(pom), 'java');
154
187
  application.javaDependencies['spring-boot'] = application.springBootDependencies['spring-boot-dependencies'];
188
+ Object.assign(application.javaManagedProperties, pom.project.properties);
155
189
  }
156
190
  },
157
191
  prepareForTemplates({ application }) {
158
- const SPRING_BOOT_VERSION = application.javaDependencies['spring-boot'];
192
+ const SPRING_BOOT_VERSION = application.springBootDependencies['spring-boot-dependencies'];
159
193
  application.addSpringMilestoneRepository =
160
194
  (application.backendType ?? 'Java') === 'Java' &&
161
195
  (ADD_SPRING_MILESTONE_REPOSITORY || SPRING_BOOT_VERSION.includes('M') || SPRING_BOOT_VERSION.includes('RC'));
@@ -300,7 +334,7 @@ public void set${javaBeanCase(propertyName)}(${propertyType} ${propertyName}) {
300
334
  async writeFiles({ application }) {
301
335
  return this.writeFiles({
302
336
  sections: serverFiles,
303
- rootTemplatesPath: ['', '../../server/templates/', '../../java/templates/'],
337
+ rootTemplatesPath: ['', '../../server/templates/', '../../java/generators/domain/templates/'],
304
338
  context: application,
305
339
  });
306
340
  },
@@ -329,20 +363,47 @@ public void set${javaBeanCase(propertyName)}(${propertyType} ${propertyName}) {
329
363
  get postWriting() {
330
364
  return this.asPostWritingTaskGroup({
331
365
  addJHipsterBomDependencies({ application, source }) {
366
+ const { applicationTypeGateway, applicationTypeMicroservice, javaDependencies, jhipsterDependenciesVersion, messageBrokerAny } = application;
367
+ const { serviceDiscoveryAny } = application;
368
+ if (application.buildToolMaven) {
369
+ source.addMavenProperty?.({
370
+ property: 'spring-boot.version',
371
+ // eslint-disable-next-line no-template-curly-in-string
372
+ value: '${project.parent.version}',
373
+ });
374
+ }
332
375
  source.addJavaDependencies?.([
333
- {
334
- groupId: 'tech.jhipster',
335
- artifactId: 'jhipster-dependencies',
336
- version: application.jhipsterDependenciesVersion,
337
- type: 'pom',
338
- scope: 'import',
339
- },
340
- { groupId: 'tech.jhipster', artifactId: 'jhipster-framework' },
376
+ { groupId: 'tech.jhipster', artifactId: 'jhipster-framework', version: jhipsterDependenciesVersion },
341
377
  ]);
378
+ if (applicationTypeGateway || applicationTypeMicroservice || serviceDiscoveryAny || messageBrokerAny) {
379
+ source.addJavaDependencies?.([
380
+ {
381
+ groupId: 'org.springframework.cloud',
382
+ artifactId: 'spring-cloud-dependencies',
383
+ type: 'pom',
384
+ scope: 'import',
385
+ version: javaDependencies['spring-cloud-dependencies'],
386
+ },
387
+ ]);
388
+ }
342
389
  },
343
390
  addSpringdoc({ application, source }) {
344
391
  const springdocDependency = `springdoc-openapi-starter-${application.reactive ? 'webflux' : 'webmvc'}-api`;
345
- source.addJavaDependencies?.([{ groupId: 'org.springdoc', artifactId: springdocDependency }]);
392
+ source.addJavaDependencies?.([
393
+ { groupId: 'org.springdoc', artifactId: springdocDependency, version: application.javaDependencies.springdoc },
394
+ ]);
395
+ },
396
+ addFeignReactor({ application, source }) {
397
+ const { applicationTypeGateway, applicationTypeMicroservice, javaDependencies, reactive } = application;
398
+ if ((applicationTypeMicroservice || applicationTypeGateway) && reactive) {
399
+ const groupId = 'com.playtika.reactivefeign';
400
+ source.addJavaDependencies?.([
401
+ { groupId, artifactId: 'feign-reactor-bom', type: 'pom', scope: 'import', version: javaDependencies['feign-reactor-bom'] },
402
+ { groupId, artifactId: 'feign-reactor-cloud' },
403
+ { groupId, artifactId: 'feign-reactor-spring-configuration' },
404
+ { groupId, artifactId: 'feign-reactor-webclient' },
405
+ ]);
406
+ }
346
407
  },
347
408
  addSpringSnapshotRepository({ application, source }) {
348
409
  if (application.buildToolMaven) {
@@ -403,7 +464,7 @@ public void set${javaBeanCase(propertyName)}(${propertyType} ${propertyName}) {
403
464
  });
404
465
  }
405
466
  get [BaseApplicationGenerator.END]() {
406
- return this.asEndTaskGroup(this.delegateTasksToBlueprint(() => this.end));
467
+ return this.delegateTasksToBlueprint(() => this.end);
407
468
  }
408
469
  /**
409
470
  * @private