generator-jhipster 7.8.1 → 7.9.2

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 (516) hide show
  1. package/README.md +1 -1
  2. package/cli/environment-builder.js +3 -1
  3. package/cli/import-jdl.js +61 -35
  4. package/cli/jdl.js +5 -4
  5. package/cli/jhipster-command.js +1 -1
  6. package/cli/program.js +5 -3
  7. package/generators/app/index.js +11 -0
  8. package/generators/app/prompts.js +60 -12
  9. package/generators/azure-app-service/templates/github/workflows/azure-app-service.yml.ejs +3 -3
  10. package/generators/azure-spring-cloud/templates/github/workflows/azure-spring-cloud.yml.ejs +3 -3
  11. package/generators/bootstrap/index.js +1 -0
  12. package/generators/bootstrap-application/generator.mjs +1 -0
  13. package/generators/ci-cd/templates/.gitlab-ci.yml.ejs +2 -3
  14. package/generators/client/files-angular.js +72 -89
  15. package/generators/client/files-react.js +63 -74
  16. package/generators/client/files-vue.js +8 -54
  17. package/generators/client/index.js +18 -11
  18. package/generators/client/needle-api/needle-client-angular.js +1 -4
  19. package/generators/client/needle-api/needle-client-react.js +2 -2
  20. package/generators/client/prompts.js +1 -0
  21. package/generators/client/templates/angular/.eslintrc.json.ejs +10 -1
  22. package/generators/client/templates/angular/angular.json.ejs +0 -1
  23. package/generators/client/templates/angular/jest.conf.js.ejs +3 -1
  24. package/generators/client/templates/angular/package.json +31 -31
  25. package/generators/client/templates/angular/package.json.ejs +23 -22
  26. package/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.component.html.ejs +4 -4
  27. package/generators/client/templates/angular/src/main/webapp/app/account/password/password-strength-bar/password-strength-bar.component.html.ejs +1 -1
  28. package/generators/client/templates/angular/src/main/webapp/app/account/password/password.component.html.ejs +15 -15
  29. package/generators/client/templates/angular/src/main/webapp/app/account/password/password.component.ts.ejs +17 -11
  30. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html.ejs +16 -16
  31. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts.ejs +14 -9
  32. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html.ejs +9 -9
  33. package/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.html.ejs +27 -27
  34. package/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.ts.ejs +28 -13
  35. package/generators/client/templates/angular/src/main/webapp/app/account/sessions/sessions.component.html.ejs +7 -7
  36. package/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.component.html.ejs +19 -19
  37. package/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.component.spec.ts.ejs +1 -1
  38. package/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.component.ts.ejs +35 -37
  39. package/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.component.html.ejs +4 -4
  40. package/generators/client/templates/angular/src/main/webapp/app/admin/gateway/gateway.component.html.ejs +7 -7
  41. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.html.ejs +6 -6
  42. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.module.ts.ejs +0 -1
  43. package/generators/client/templates/angular/src/main/webapp/app/admin/health/modal/health-modal.component.html.ejs +3 -3
  44. package/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.component.html.ejs +5 -5
  45. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/jvm-memory/jvm-memory.component.html.ejs +1 -1
  46. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/jvm-threads/jvm-threads.component.html.ejs +5 -5
  47. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-cache/metrics-cache.component.html.ejs +10 -10
  48. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-datasource/metrics-datasource.component.html.ejs +10 -10
  49. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-garbagecollector/metrics-garbagecollector.component.html.ejs +9 -9
  50. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.html.ejs +8 -8
  51. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-request/metrics-request.component.html.ejs +5 -5
  52. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.component.html.ejs +4 -4
  53. package/generators/client/templates/angular/src/main/webapp/app/admin/tracker/tracker.component.html.ejs +5 -5
  54. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.html.ejs +4 -4
  55. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/detail/user-management-detail.component.html.ejs +14 -14
  56. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/list/user-management.component.html.ejs +16 -16
  57. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/list/user-management.component.ts.ejs +2 -1
  58. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/update/user-management-update.component.html.ejs +133 -138
  59. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/update/user-management-update.component.spec.ts.ejs +22 -24
  60. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/update/user-management-update.component.ts.ejs +40 -49
  61. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.model.ts.ejs +2 -2
  62. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.module.ts.ejs +0 -1
  63. package/generators/client/templates/angular/src/main/webapp/app/config/navigation.constants.ts.ejs +23 -0
  64. package/generators/client/templates/angular/src/main/webapp/app/config/pagination.constants.ts.ejs +2 -3
  65. package/generators/client/templates/angular/src/main/webapp/app/core/request/request-util.ts.ejs +1 -1
  66. package/generators/client/templates/angular/src/main/webapp/app/entities/user/user.model.ts.ejs +2 -2
  67. package/generators/client/templates/angular/src/main/webapp/app/entities/user/user.service.ts.ejs +7 -3
  68. package/generators/client/templates/angular/src/main/webapp/app/home/home.component.html.ejs +14 -14
  69. package/generators/client/templates/angular/src/main/webapp/app/layouts/error/error.component.html.ejs +1 -1
  70. package/generators/client/templates/angular/src/main/webapp/app/layouts/footer/footer.component.html.ejs +1 -1
  71. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs +21 -21
  72. package/generators/client/templates/angular/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts.ejs +1 -1
  73. package/generators/client/templates/angular/src/main/webapp/app/login/login.component.html.ejs +9 -9
  74. package/generators/client/templates/angular/src/main/webapp/app/login/login.component.ts.ejs +16 -27
  75. package/generators/client/templates/angular/src/main/webapp/app/shared/filter/filter.component.html.ejs +10 -0
  76. package/generators/client/templates/angular/src/main/webapp/app/shared/filter/filter.component.ts.ejs +23 -0
  77. package/generators/client/templates/angular/src/main/webapp/app/shared/filter/filter.model.spec.ts.ejs +40 -0
  78. package/generators/client/templates/angular/src/main/webapp/app/shared/filter/filter.model.ts.ejs +95 -0
  79. package/generators/client/templates/angular/src/main/webapp/app/shared/pagination/item-count.component.ts.ejs +1 -1
  80. package/generators/client/templates/angular/src/main/webapp/app/shared/shared.module.ts.ejs +3 -0
  81. package/generators/client/templates/angular/src/main/webapp/app/shared/sort/sort.service.ts.ejs +31 -0
  82. package/generators/client/templates/angular/src/main/webapp/declarations.d.ts.ejs +3 -8
  83. package/generators/client/templates/angular/tsconfig.json.ejs +6 -0
  84. package/generators/client/templates/angular/tsconfig.spec.json.ejs +1 -1
  85. package/generators/client/templates/angular/webpack/webpack.custom.js.ejs +6 -2
  86. package/generators/client/templates/angular/webpack/webpack.microfrontend.js.ejs +1 -1
  87. package/generators/client/templates/common/package.json +6 -6
  88. package/generators/client/templates/common/src/main/webapp/swagger-ui/index.html.ejs +2 -0
  89. package/generators/client/templates/react/.eslintrc.json.ejs +10 -1
  90. package/generators/client/templates/react/jest.conf.js.ejs +3 -1
  91. package/generators/client/templates/react/package.json +57 -57
  92. package/generators/client/templates/react/package.json.ejs +3 -3
  93. package/generators/client/templates/react/src/main/webapp/app/app.tsx.ejs +3 -3
  94. package/generators/client/templates/react/src/main/webapp/app/entities/menu.tsx.ejs +1 -1
  95. package/generators/client/templates/react/src/main/webapp/app/entities/routes.tsx.ejs +7 -5
  96. package/generators/client/templates/react/src/main/webapp/app/index.tsx.ejs +4 -5
  97. package/generators/client/templates/react/src/main/webapp/app/modules/account/activate/activate.tsx.ejs +8 -4
  98. package/generators/client/templates/react/src/main/webapp/app/modules/account/index.tsx.ejs +9 -6
  99. package/generators/client/templates/react/src/main/webapp/app/modules/account/password/password.tsx.ejs +1 -0
  100. package/generators/client/templates/react/src/main/webapp/app/modules/account/password-reset/finish/password-reset-finish.tsx.ejs +8 -5
  101. package/generators/client/templates/react/src/main/webapp/app/modules/administration/administration.reducer.ts.ejs +6 -7
  102. package/generators/client/templates/react/src/main/webapp/app/modules/administration/health/health-modal.tsx.ejs +3 -2
  103. package/generators/client/templates/react/src/main/webapp/app/modules/administration/health/health.tsx.ejs +4 -4
  104. package/generators/client/templates/react/src/main/webapp/app/modules/administration/index.tsx.ejs +14 -11
  105. package/generators/client/templates/react/src/main/webapp/app/modules/administration/metrics/metrics.tsx.ejs +8 -2
  106. package/generators/client/templates/react/src/main/webapp/app/modules/administration/user-management/index.tsx.ejs +13 -13
  107. package/generators/client/templates/react/src/main/webapp/app/modules/administration/user-management/user-management-delete-dialog.tsx.ejs +7 -4
  108. package/generators/client/templates/react/src/main/webapp/app/modules/administration/user-management/user-management-detail.tsx.ejs +5 -3
  109. package/generators/client/templates/react/src/main/webapp/app/modules/administration/user-management/user-management-update.tsx.ejs +10 -6
  110. package/generators/client/templates/react/src/main/webapp/app/modules/administration/user-management/user-management.tsx.ejs +18 -26
  111. package/generators/client/templates/react/src/main/webapp/app/modules/login/login-redirect.tsx.ejs +6 -3
  112. package/generators/client/templates/react/src/main/webapp/app/modules/login/login.tsx.ejs +6 -5
  113. package/generators/client/templates/react/src/main/webapp/app/routes.tsx.ejs +53 -25
  114. package/generators/client/templates/react/src/main/webapp/app/shared/auth/private-route.spec.tsx.ejs +30 -27
  115. package/generators/client/templates/react/src/main/webapp/app/shared/auth/private-route.tsx.ejs +35 -34
  116. package/generators/client/templates/react/src/main/webapp/app/shared/error/error-boundary-routes.spec.tsx.ejs +55 -0
  117. package/generators/client/templates/react/src/main/webapp/app/shared/error/error-boundary-routes.tsx.ejs +21 -0
  118. package/generators/client/templates/react/src/main/webapp/app/shared/error/error-boundary.spec.tsx.ejs +1 -1
  119. package/generators/client/templates/react/src/main/webapp/app/shared/error/error-boundary.tsx.ejs +1 -1
  120. package/generators/client/templates/react/src/main/webapp/app/shared/error/error-loading.tsx.ejs +8 -10
  121. package/generators/client/templates/react/src/main/webapp/app/shared/error/page-not-found.tsx.ejs +9 -13
  122. package/generators/client/templates/react/src/main/webapp/app/shared/layout/header/header.spec.tsx.ejs +3 -5
  123. package/generators/client/templates/react/src/main/webapp/app/shared/layout/menus/account.spec.tsx.ejs +5 -8
  124. package/generators/client/templates/react/src/main/webapp/app/shared/layout/menus/entities.tsx.ejs +1 -1
  125. package/generators/client/templates/react/src/main/webapp/app/shared/layout/menus/menu-item.tsx.ejs +12 -11
  126. package/generators/client/templates/react/src/main/webapp/app/typings.d.ts.ejs +2 -2
  127. package/generators/client/templates/react/tsconfig.json.ejs +2 -4
  128. package/generators/client/templates/react/tsconfig.test.json.ejs +1 -0
  129. package/generators/client/templates/react/webpack/webpack.common.js.ejs +7 -3
  130. package/generators/client/templates/react/webpack/webpack.microfrontend.js.jhi.react.ejs +4 -4
  131. package/generators/client/templates/vue/.eslintrc.js.ejs +10 -1
  132. package/generators/client/templates/vue/package.json +40 -39
  133. package/generators/client/templates/vue/package.json.ejs +3 -3
  134. package/generators/client/templates/vue/src/main/webapp/app/account/login-form/login-form.component.ts.ejs +2 -2
  135. package/generators/client/templates/vue/src/main/webapp/app/admin/metrics/metrics.vue.ejs +1 -1
  136. package/generators/client/templates/vue/src/main/webapp/app/admin/user-management/user-management-edit.component.ts.ejs +2 -2
  137. package/generators/client/templates/vue/src/main/webapp/app/core/jhi-navbar/jhi-navbar.component.ts.ejs +5 -3
  138. package/generators/client/templates/vue/src/main/webapp/app/core/jhi-navbar/jhi-navbar.vue.ejs +2 -2
  139. package/generators/client/templates/vue/src/main/webapp/app/shared/alert/alert.service.ts.ejs +1 -1
  140. package/generators/client/templates/vue/src/main/webapp/app/shared/date/filters.ts.ejs +0 -6
  141. package/generators/client/templates/vue/src/test/javascript/jest.conf.js.ejs +5 -0
  142. package/generators/client/templates/vue/src/test/javascript/spec/app/account/register/register.component.spec.ts.ejs +1 -1
  143. package/generators/client/templates/vue/tsconfig.json.ejs +1 -1
  144. package/generators/client/templates/vue/tsconfig.spec.json.ejs +2 -2
  145. package/generators/client/templates/vue/webpack/webpack.dev.js.ejs +4 -0
  146. package/generators/client/templates/vue/webpack/webpack.prod.js.ejs +8 -1
  147. package/generators/client/transform-angular.cjs +117 -0
  148. package/generators/client/transform-react.cjs +126 -0
  149. package/generators/client/transform-vue.cjs +42 -0
  150. package/generators/common/files.js +2 -9
  151. package/generators/common/templates/README.md.jhi.ejs +21 -5
  152. package/generators/common/templates/package.json +3 -3
  153. package/generators/cypress/files.js +34 -22
  154. package/generators/cypress/index.js +42 -19
  155. package/generators/cypress/templates/cypress-audits.config.ts.ejs +28 -0
  156. package/generators/cypress/templates/cypress.config.ts.ejs +57 -0
  157. package/generators/cypress/templates/src/test/javascript/cypress/{integration/account/login-page.spec.ts.ejs → e2e/account/login-page.cy.ts.ejs} +0 -0
  158. package/generators/cypress/templates/src/test/javascript/cypress/{integration/account/password-page.spec.ts.ejs → e2e/account/password-page.cy.ts.ejs} +0 -0
  159. package/generators/cypress/templates/src/test/javascript/cypress/{integration/account/register-page.spec.ts.ejs → e2e/account/register-page.cy.ts.ejs} +0 -0
  160. package/generators/cypress/templates/src/test/javascript/cypress/{integration/account/reset-password-page.spec.ts.ejs → e2e/account/reset-password-page.cy.ts.ejs} +0 -0
  161. package/generators/cypress/templates/src/test/javascript/cypress/{integration/account/settings-page.spec.ts.ejs → e2e/account/settings-page.cy.ts.ejs} +0 -0
  162. package/generators/cypress/templates/src/test/javascript/cypress/{integration/administration/administration.spec.ts.ejs → e2e/administration/administration.cy.ts.ejs} +1 -1
  163. package/generators/cypress/templates/src/test/javascript/cypress/{integration → e2e}/lighthouse.audits.ts.ejs +0 -0
  164. package/generators/cypress/templates/src/test/javascript/cypress/plugins/global.d.ts.ejs +25 -0
  165. package/generators/cypress/templates/src/test/javascript/cypress/plugins/index.ts.ejs +13 -14
  166. package/generators/cypress/templates/src/test/javascript/cypress/support/commands.ts.ejs +4 -4
  167. package/generators/cypress/templates/src/test/javascript/cypress/support/navbar.ts.ejs +1 -1
  168. package/generators/cypress/templates/src/test/javascript/cypress/support/oauth2.ts.ejs +8 -8
  169. package/generators/cypress/templates/src/test/javascript/cypress/tsconfig.json.ejs +8 -5
  170. package/generators/database-changelog-liquibase/files.js +1 -1
  171. package/generators/database-changelog-liquibase/index.js +3 -0
  172. package/generators/database-changelog-liquibase/templates/src/main/resources/config/liquibase/changelog/added_entity.xml.ejs +1 -1
  173. package/generators/database-changelog-liquibase/templates/src/main/resources/config/liquibase/changelog/added_entity_constraints.xml.ejs +1 -1
  174. package/generators/database-changelog-liquibase/templates/src/main/resources/config/liquibase/changelog/updated_entity.xml.ejs +1 -1
  175. package/generators/database-changelog-liquibase/templates/src/main/resources/config/liquibase/changelog/updated_entity_constraints.xml.ejs +2 -2
  176. package/generators/database-changelog-liquibase/templates/src/main/resources/config/liquibase/changelog/updated_entity_migrate.xml.ejs +1 -1
  177. package/generators/database-changelog-liquibase/templates/src/main/resources/config/liquibase/fake-data/table_entity.csv.ejs +2 -2
  178. package/generators/docker-base.js +6 -3
  179. package/generators/docker-compose/files.js +5 -2
  180. package/generators/docker-compose/index.js +13 -24
  181. package/generators/docker-compose/templates/README-DOCKER-COMPOSE.md.ejs +1 -1
  182. package/generators/docker-compose/templates/docker-compose.yml.ejs +10 -8
  183. package/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs +62 -4
  184. package/generators/docker-prompts.js +1 -2
  185. package/generators/docker-utils.js +0 -1
  186. package/generators/entity/index.js +5 -15
  187. package/generators/entity/prompts.js +1 -52
  188. package/generators/entity-client/files-angular.cjs +169 -0
  189. package/generators/entity-client/files-cypress.cjs +52 -0
  190. package/generators/entity-client/files-react.cjs +113 -0
  191. package/generators/entity-client/files-vue.cjs +140 -0
  192. package/generators/entity-client/files.js +10 -381
  193. package/generators/entity-client/index.js +120 -19
  194. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/delete/entity-management-delete-dialog.component.html.ejs +4 -5
  195. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/delete/entity-management-delete-dialog.component.ts.ejs +2 -1
  196. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/detail/entity-management-detail.component.html.ejs +12 -11
  197. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.module.ts.ejs +0 -5
  198. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity.model.ts.ejs +18 -25
  199. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity.test-samples.ts.ejs +45 -0
  200. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.html.ejs +45 -37
  201. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.spec.ts.ejs +47 -28
  202. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.ts.ejs +292 -94
  203. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/infinite-scroll-template.ejs +5 -106
  204. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/pagination-template.ejs +2 -82
  205. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/route/entity-management-routing-resolve.service.spec.ts.ejs +5 -5
  206. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/route/entity-management-routing-resolve.service.ts.ejs +5 -5
  207. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/route/entity-management-routing.module.ts.ejs +2 -3
  208. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/service/entity.service.spec.ts.ejs +89 -175
  209. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/service/entity.service.ts.ejs +69 -44
  210. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-form.service.spec.ts.ejs +111 -0
  211. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-form.service.ts.ejs +263 -0
  212. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.html.ejs +99 -120
  213. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.spec.ts.ejs +47 -71
  214. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.ts.ejs +79 -195
  215. package/generators/entity-client/templates/{common/src/test/javascript/cypress/integration/entity/entity.spec.ts.ejs → cypress/src/test/javascript/cypress/e2e/entity/entity.cy.ts.ejs} +26 -17
  216. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-delete-dialog.tsx.ejs +10 -5
  217. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-detail.tsx.ejs +5 -3
  218. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-update.tsx.ejs +11 -6
  219. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.tsx.ejs +11 -10
  220. package/generators/entity-client/templates/react/src/main/webapp/app/entities/index.tsx.ejs +13 -13
  221. package/generators/entity-client/templates/react/src/main/webapp/app/entities/react_validators.ejs +25 -32
  222. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity-update.component.ts.ejs +2 -2
  223. package/generators/entity-server/cleanup.js +41 -0
  224. package/generators/entity-server/files.js +118 -53
  225. package/generators/entity-server/index.js +14 -27
  226. package/generators/entity-server/templates/partials/save_template.ejs +1 -1
  227. package/generators/entity-server/templates/partials/update_template.ejs +1 -1
  228. package/generators/entity-server/templates/src/main/java/package/common/get_all_template.ejs +11 -5
  229. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.elastic_search.ejs +17 -0
  230. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.spring_data_cassandra.ejs +3 -1
  231. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepository.java.ejs +6 -1
  232. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryInternalImpl_reactive.java.ejs +1 -1
  233. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryWithBagRelationships.java.ejs +2 -2
  234. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryWithBagRelationshipsImpl.java.ejs +13 -6
  235. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepository_reactive.java.ejs +1 -1
  236. package/generators/entity-server/templates/src/main/java/package/repository/search/EntitySearchRepository.java.ejs +46 -9
  237. package/generators/entity-server/templates/src/main/java/package/service/EntityQueryService.java.ejs +3 -3
  238. package/generators/entity-server/templates/src/main/java/package/service/impl/EntityServiceImpl.java.ejs +2 -2
  239. package/generators/entity-server/templates/src/main/java/package/web/rest/EntityResource.java.ejs +2 -5
  240. package/generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIT.java.ejs +140 -132
  241. package/generators/gae/index.js +1 -1
  242. package/generators/generate-blueprint/constants.mjs +22 -2
  243. package/generators/generate-blueprint/generator.mjs +25 -6
  244. package/generators/generate-blueprint/templates/.github/workflows/generator.yml.ejs +5 -3
  245. package/generators/generate-blueprint/templates/cli/commands.cjs.ejs +2 -1
  246. package/generators/generate-blueprint/templates/generators/generator/generator.mjs.jhi.ejs +6 -5
  247. package/generators/generate-blueprint/templates/generators/generator/generator.spec.mjs.ejs +10 -1
  248. package/generators/generator-base-blueprint.js +19 -20
  249. package/generators/generator-base-private.js +116 -64
  250. package/generators/generator-base.js +241 -91
  251. package/generators/generator-constants.js +118 -66
  252. package/generators/generator-defaults.js +1 -0
  253. package/generators/heroku/index.js +5 -4
  254. package/generators/heroku/templates/application-heroku.yml.ejs +1 -2
  255. package/generators/heroku/templates/heroku.gradle.ejs +28 -1
  256. package/generators/heroku/templates/pom-profile.xml.ejs +29 -0
  257. package/generators/java/index.cjs +2 -2
  258. package/generators/kubernetes/templates/db/couchbase.yml.ejs +1 -2
  259. package/generators/kubernetes/templates/db/mongodb.yml.ejs +1 -2
  260. package/generators/kubernetes/templates/ingress.yml.ejs +11 -4
  261. package/generators/kubernetes/templates/monitoring/jhipster-grafana.yml.ejs +6 -2
  262. package/generators/kubernetes/templates/registry/consul.yml.ejs +1 -2
  263. package/generators/kubernetes/templates/registry/jhipster-registry.yml.ejs +1 -2
  264. package/generators/languages/templates/src/main/webapp/i18n/al/global.json.ejs +7 -1
  265. package/generators/languages/templates/src/main/webapp/i18n/ar-ly/global.json.ejs +7 -1
  266. package/generators/languages/templates/src/main/webapp/i18n/bg/global.json.ejs +7 -1
  267. package/generators/languages/templates/src/main/webapp/i18n/bn/global.json.ejs +7 -1
  268. package/generators/languages/templates/src/main/webapp/i18n/by/global.json.ejs +7 -1
  269. package/generators/languages/templates/src/main/webapp/i18n/ca/global.json.ejs +7 -1
  270. package/generators/languages/templates/src/main/webapp/i18n/cs/global.json.ejs +7 -1
  271. package/generators/languages/templates/src/main/webapp/i18n/da/global.json.ejs +7 -1
  272. package/generators/languages/templates/src/main/webapp/i18n/de/global.json.ejs +7 -1
  273. package/generators/languages/templates/src/main/webapp/i18n/el/global.json.ejs +7 -1
  274. package/generators/languages/templates/src/main/webapp/i18n/en/global.json.ejs +7 -1
  275. package/generators/languages/templates/src/main/webapp/i18n/en/health.json.ejs +3 -0
  276. package/generators/languages/templates/src/main/webapp/i18n/es/global.json.ejs +7 -1
  277. package/generators/languages/templates/src/main/webapp/i18n/et/global.json.ejs +7 -1
  278. package/generators/languages/templates/src/main/webapp/i18n/fa/global.json.ejs +7 -1
  279. package/generators/languages/templates/src/main/webapp/i18n/fi/global.json.ejs +7 -1
  280. package/generators/languages/templates/src/main/webapp/i18n/fr/global.json.ejs +7 -1
  281. package/generators/languages/templates/src/main/webapp/i18n/gl/global.json.ejs +7 -1
  282. package/generators/languages/templates/src/main/webapp/i18n/hi/global.json.ejs +7 -1
  283. package/generators/languages/templates/src/main/webapp/i18n/hr/global.json.ejs +7 -1
  284. package/generators/languages/templates/src/main/webapp/i18n/hu/global.json.ejs +7 -1
  285. package/generators/languages/templates/src/main/webapp/i18n/hy/global.json.ejs +7 -1
  286. package/generators/languages/templates/src/main/webapp/i18n/in/global.json.ejs +7 -1
  287. package/generators/languages/templates/src/main/webapp/i18n/it/global.json.ejs +7 -1
  288. package/generators/languages/templates/src/main/webapp/i18n/ja/global.json.ejs +7 -1
  289. package/generators/languages/templates/src/main/webapp/i18n/ko/global.json.ejs +7 -1
  290. package/generators/languages/templates/src/main/webapp/i18n/mr/global.json.ejs +7 -1
  291. package/generators/languages/templates/src/main/webapp/i18n/my/global.json.ejs +7 -1
  292. package/generators/languages/templates/src/main/webapp/i18n/nl/global.json.ejs +7 -1
  293. package/generators/languages/templates/src/main/webapp/i18n/pa/global.json.ejs +7 -1
  294. package/generators/languages/templates/src/main/webapp/i18n/pl/global.json.ejs +7 -1
  295. package/generators/languages/templates/src/main/webapp/i18n/pt-br/global.json.ejs +7 -1
  296. package/generators/languages/templates/src/main/webapp/i18n/pt-pt/global.json.ejs +7 -1
  297. package/generators/languages/templates/src/main/webapp/i18n/ro/global.json.ejs +7 -1
  298. package/generators/languages/templates/src/main/webapp/i18n/ru/global.json.ejs +7 -1
  299. package/generators/languages/templates/src/main/webapp/i18n/si/global.json.ejs +7 -1
  300. package/generators/languages/templates/src/main/webapp/i18n/sk/global.json.ejs +7 -1
  301. package/generators/languages/templates/src/main/webapp/i18n/sr/global.json.ejs +7 -1
  302. package/generators/languages/templates/src/main/webapp/i18n/sv/global.json.ejs +7 -1
  303. package/generators/languages/templates/src/main/webapp/i18n/ta/global.json.ejs +7 -1
  304. package/generators/languages/templates/src/main/webapp/i18n/te/global.json.ejs +7 -1
  305. package/generators/languages/templates/src/main/webapp/i18n/th/global.json.ejs +7 -1
  306. package/generators/languages/templates/src/main/webapp/i18n/tr/global.json.ejs +7 -1
  307. package/generators/languages/templates/src/main/webapp/i18n/ua/global.json.ejs +7 -1
  308. package/generators/languages/templates/src/main/webapp/i18n/uz-Cyrl-uz/global.json +7 -1
  309. package/generators/languages/templates/src/main/webapp/i18n/uz-Latn-uz/global.json.ejs +7 -1
  310. package/generators/languages/templates/src/main/webapp/i18n/vi/global.json.ejs +7 -1
  311. package/generators/languages/templates/src/main/webapp/i18n/zh-cn/global.json.ejs +7 -1
  312. package/generators/languages/templates/src/main/webapp/i18n/zh-tw/global.json.ejs +7 -1
  313. package/generators/languages/templates/src/test/resources/i18n/messages_al.properties.ejs +4 -1
  314. package/generators/languages/templates/src/test/resources/i18n/messages_ar_LY.properties.ejs +4 -1
  315. package/generators/languages/templates/src/test/resources/i18n/messages_bg.properties.ejs +1 -1
  316. package/generators/languages/templates/src/test/resources/i18n/messages_bn.properties.ejs +4 -1
  317. package/generators/languages/templates/src/test/resources/i18n/messages_by.properties.ejs +4 -1
  318. package/generators/languages/templates/src/test/resources/i18n/messages_ca.properties.ejs +4 -1
  319. package/generators/languages/templates/src/test/resources/i18n/messages_cs.properties.ejs +4 -1
  320. package/generators/languages/templates/src/test/resources/i18n/messages_da.properties.ejs +4 -1
  321. package/generators/languages/templates/src/test/resources/i18n/messages_de.properties.ejs +4 -1
  322. package/generators/languages/templates/src/test/resources/i18n/messages_el.properties.ejs +4 -1
  323. package/generators/languages/templates/src/test/resources/i18n/messages_es.properties.ejs +4 -1
  324. package/generators/languages/templates/src/test/resources/i18n/messages_et.properties.ejs +4 -1
  325. package/generators/languages/templates/src/test/resources/i18n/messages_fa.properties.ejs +4 -1
  326. package/generators/languages/templates/src/test/resources/i18n/messages_fi.properties.ejs +1 -1
  327. package/generators/languages/templates/src/test/resources/i18n/messages_gl.properties.ejs +4 -1
  328. package/generators/languages/templates/src/test/resources/i18n/messages_hi.properties.ejs +4 -1
  329. package/generators/languages/templates/src/test/resources/i18n/messages_hr.properties.ejs +1 -1
  330. package/generators/languages/templates/src/test/resources/i18n/messages_hu.properties.ejs +4 -1
  331. package/generators/languages/templates/src/test/resources/i18n/messages_hy.properties.ejs +4 -1
  332. package/generators/languages/templates/src/test/resources/i18n/messages_in.properties.ejs +4 -1
  333. package/generators/languages/templates/src/test/resources/i18n/messages_it.properties.ejs +4 -1
  334. package/generators/languages/templates/src/test/resources/i18n/messages_ja.properties.ejs +4 -1
  335. package/generators/languages/templates/src/test/resources/i18n/messages_ko.properties.ejs +4 -1
  336. package/generators/languages/templates/src/test/resources/i18n/messages_mr.properties.ejs +4 -1
  337. package/generators/languages/templates/src/test/resources/i18n/messages_my.properties.ejs +4 -1
  338. package/generators/languages/templates/src/test/resources/i18n/messages_nl.properties.ejs +4 -1
  339. package/generators/languages/templates/src/test/resources/i18n/messages_pa.properties.ejs +1 -1
  340. package/generators/languages/templates/src/test/resources/i18n/messages_pl.properties.ejs +4 -1
  341. package/generators/languages/templates/src/test/resources/i18n/messages_pt_BR.properties.ejs +1 -1
  342. package/generators/languages/templates/src/test/resources/i18n/messages_pt_PT.properties.ejs +4 -1
  343. package/generators/languages/templates/src/test/resources/i18n/messages_ro.properties.ejs +4 -1
  344. package/generators/languages/templates/src/test/resources/i18n/messages_ru.properties.ejs +4 -1
  345. package/generators/languages/templates/src/test/resources/i18n/messages_si.properties.ejs +4 -1
  346. package/generators/languages/templates/src/test/resources/i18n/messages_sk.properties.ejs +4 -1
  347. package/generators/languages/templates/src/test/resources/i18n/messages_sr.properties.ejs +4 -1
  348. package/generators/languages/templates/src/test/resources/i18n/messages_sv.properties.ejs +4 -1
  349. package/generators/languages/templates/src/test/resources/i18n/messages_ta.properties.ejs +4 -1
  350. package/generators/languages/templates/src/test/resources/i18n/messages_te.properties.ejs +4 -1
  351. package/generators/languages/templates/src/test/resources/i18n/messages_th.properties.ejs +4 -1
  352. package/generators/languages/templates/src/test/resources/i18n/messages_tr.properties.ejs +4 -1
  353. package/generators/languages/templates/src/test/resources/i18n/messages_ua.properties.ejs +4 -1
  354. package/generators/languages/templates/src/test/resources/i18n/messages_uz_Cyrl_UZ.properties.ejs +4 -1
  355. package/generators/languages/templates/src/test/resources/i18n/messages_uz_Latn_UZ.properties.ejs +4 -1
  356. package/generators/languages/templates/src/test/resources/i18n/messages_vi.properties.ejs +4 -1
  357. package/generators/languages/templates/src/test/resources/i18n/messages_zh_CN.properties.ejs +4 -1
  358. package/generators/languages/templates/src/test/resources/i18n/messages_zh_TW.properties.ejs +4 -1
  359. package/generators/maven/templates/.mvn/wrapper/maven-wrapper.jar +0 -0
  360. package/generators/maven/templates/.mvn/wrapper/maven-wrapper.properties +3 -3
  361. package/generators/maven/templates/pom.xml.jhi.ejs +2 -2
  362. package/generators/openapi-client/files.js +2 -8
  363. package/generators/openapi-client/index.js +2 -0
  364. package/generators/openshift/templates/registry/consul.yml.ejs +1 -2
  365. package/generators/openshift/templates/registry/jhipster-registry.yml.ejs +1 -2
  366. package/generators/project-name/index.cjs +8 -5
  367. package/generators/server/cleanup-angular.js +37 -0
  368. package/generators/server/cleanup-cache-provider.js +46 -0
  369. package/generators/server/cleanup-cassandra.js +49 -0
  370. package/generators/server/cleanup-cucumber.js +40 -0
  371. package/generators/server/cleanup-elasticsearch.js +48 -0
  372. package/generators/server/cleanup-gradle.js +40 -0
  373. package/generators/server/cleanup-kafka.js +41 -0
  374. package/generators/server/cleanup-maven.js +37 -0
  375. package/generators/server/cleanup-mongodb.js +40 -0
  376. package/generators/server/cleanup-oauth2.js +43 -0
  377. package/generators/server/cleanup-reactive.js +38 -0
  378. package/generators/server/cleanup-sql.js +48 -0
  379. package/generators/server/cleanup.js +85 -51
  380. package/generators/server/esm.mjs +1 -0
  381. package/generators/server/files-couchbase.js +11 -10
  382. package/generators/server/files-sql.js +197 -4
  383. package/generators/server/files.js +180 -273
  384. package/generators/server/index.js +32 -86
  385. package/generators/server/needles.cjs +79 -0
  386. package/generators/server/templates/.mvn/jvm.config +1 -1
  387. package/generators/server/templates/.mvn/wrapper/maven-wrapper.jar +0 -0
  388. package/generators/server/templates/.mvn/wrapper/maven-wrapper.properties +3 -3
  389. package/generators/server/templates/.npmrc.ejs +1 -0
  390. package/generators/server/templates/build.gradle.ejs +121 -226
  391. package/generators/server/templates/couchbase/src/test/java/package/config/CouchbaseTestContainer.java.ejs +67 -0
  392. package/generators/server/templates/couchbase/src/test/java/package/config/EmbeddedCouchbase.java.ejs +30 -0
  393. package/generators/server/templates/gradle/docker.gradle.ejs +6 -0
  394. package/generators/server/templates/gradle/profile_dev.gradle.ejs +95 -3
  395. package/generators/server/templates/gradle/profile_prod.gradle.ejs +80 -4
  396. package/generators/server/templates/gradle.properties.ejs +17 -13
  397. package/generators/server/templates/pom.xml.ejs +274 -225
  398. package/generators/server/templates/settings.gradle.ejs +2 -1
  399. package/generators/server/templates/sql/common/src/main/docker/config/mariadb/my.cnf +49 -0
  400. package/generators/server/templates/sql/common/src/main/docker/config/mysql/my.cnf +82 -0
  401. package/generators/server/templates/{src → sql/common/src}/main/docker/mariadb.yml.ejs +2 -0
  402. package/generators/server/templates/{src → sql/common/src}/main/docker/mssql.yml.ejs +0 -0
  403. package/generators/server/templates/{src → sql/common/src}/main/docker/mysql.yml.ejs +2 -2
  404. package/generators/server/templates/{src → sql/common/src}/main/docker/postgresql.yml.ejs +0 -0
  405. package/generators/server/templates/{src → sql/common/src}/main/java/package/config/LiquibaseConfiguration.java.ejs +0 -0
  406. package/generators/server/templates/{src → sql/common/src}/main/resources/h2.server.properties.ejs +0 -0
  407. package/generators/server/templates/sql/common/src/test/java/package/config/EmbeddedSQL.java.ejs +30 -0
  408. package/generators/server/templates/sql/common/src/test/java/package/config/MariadbTestContainer.java.ejs +60 -0
  409. package/generators/server/templates/sql/common/src/test/java/package/config/MsSqlTestContainer.java.ejs +59 -0
  410. package/generators/server/templates/sql/common/src/test/java/package/config/MysqlTestContainer.java.ejs +69 -0
  411. package/generators/server/templates/sql/common/src/test/java/package/config/PostgreSqlTestContainer.java.ejs +59 -0
  412. package/generators/server/templates/sql/common/src/test/java/package/config/SqlTestContainer.java.ejs +28 -0
  413. package/generators/server/templates/{src → sql/common/src}/test/java/package/config/timezone/HibernateTimeZoneIT.java.ejs +0 -0
  414. package/generators/server/templates/{src → sql/common/src}/test/java/package/repository/timezone/DateTimeWrapper.java.ejs +0 -0
  415. package/generators/server/templates/{src → sql/common/src}/test/java/package/repository/timezone/DateTimeWrapperRepository.java.ejs +0 -0
  416. package/generators/server/templates/sql/common/src/test/resources/config/application-testdev.yml.ejs +93 -0
  417. package/generators/server/templates/{src/test/resources/config/application-testcontainers.yml.ejs → sql/common/src/test/resources/config/application-testprod.yml.ejs} +17 -33
  418. package/generators/server/templates/sql/common/src/test/resources/testcontainers/mariadb/my.cnf +49 -0
  419. package/generators/server/templates/sql/common/src/test/resources/testcontainers/mysql/my.cnf +83 -0
  420. package/generators/server/templates/{src → sql/reactive/src}/main/java/package/repository/EntityManager.java.ejs +0 -0
  421. package/generators/server/templates/{src → sql/reactive/src}/main/java/package/repository/rowmapper/ColumnConverter.java.ejs +0 -0
  422. package/generators/server/templates/{src → sql/reactive/src}/main/java/package/repository/rowmapper/UserRowMapper.java.ejs +0 -0
  423. package/generators/server/templates/src/main/docker/app.yml.ejs +16 -14
  424. package/generators/server/templates/src/main/docker/cassandra-migration.yml.ejs +1 -0
  425. package/generators/server/templates/src/main/docker/config/realm-config/jhipster-realm.json.ejs +62 -6
  426. package/generators/server/templates/src/main/docker/jhipster-control-center.yml.ejs +1 -1
  427. package/generators/server/templates/src/main/docker/jhipster-registry.yml.ejs +1 -1
  428. package/generators/server/templates/src/main/docker/jib/entrypoint.sh.ejs +36 -1
  429. package/generators/server/templates/src/main/docker/keycloak.yml.ejs +8 -6
  430. package/generators/server/templates/src/main/java/package/config/ApplicationProperties.java.ejs +3 -0
  431. package/generators/server/templates/src/main/java/package/config/AsyncConfiguration.java.ejs +2 -6
  432. package/generators/server/templates/src/main/java/package/config/DatabaseConfiguration_couchbase.java.ejs +1 -1
  433. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration.java.ejs +16 -30
  434. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration_reactive.java.ejs +108 -15
  435. package/generators/server/templates/src/main/java/package/config/WebConfigurer.java.ejs +6 -0
  436. package/generators/server/templates/src/main/java/package/security/DomainUserDetailsService.java.ejs +6 -3
  437. package/generators/server/templates/src/main/java/package/security/oauth2/CustomClaimConverter.java.ejs +10 -3
  438. package/generators/server/templates/src/main/java/package/service/UserService.java.ejs +12 -2
  439. package/generators/server/templates/src/main/java/package/web/rest/LogoutResource.java.ejs +1 -5
  440. package/generators/server/templates/src/main/java/package/web/rest/LogoutResource_reactive.java.ejs +1 -5
  441. package/generators/server/templates/src/main/java/package/web/rest/UserResource.java.ejs +3 -4
  442. package/generators/server/templates/src/main/resources/config/application-dev.yml.ejs +4 -3
  443. package/generators/server/templates/src/main/resources/config/application-prod.yml.ejs +1 -1
  444. package/generators/server/templates/src/main/resources/config/application.yml.ejs +1 -1
  445. package/generators/server/templates/src/main/resources/config/liquibase/changelog/initial_schema.xml.ejs +1 -1
  446. package/generators/server/templates/src/main/resources/config/liquibase/master.xml.ejs +54 -24
  447. package/generators/server/templates/src/main/resources/swagger/api.yml.ejs +3 -3
  448. package/generators/server/templates/src/test/java/package/IntegrationTest.java.ejs +32 -19
  449. package/generators/server/templates/src/test/java/package/{repository/search/UserSearchRepositoryMockConfiguration.java.ejs → config/AsyncSyncConfiguration.java.ejs} +12 -10
  450. package/generators/server/templates/src/test/java/package/config/CassandraTestContainer.java.ejs +20 -1
  451. package/generators/{entity-server/templates/src/test/java/package/repository/search/EntitySearchRepositoryMockConfiguration.java.ejs → server/templates/src/test/java/package/config/ElasticsearchReactiveTestConfiguration.java.ejs} +14 -11
  452. package/generators/server/templates/src/test/java/package/config/ElasticsearchTestContainer.java.ejs +68 -0
  453. package/generators/server/templates/src/test/java/package/config/EmbeddedCassandra.java.ejs +19 -0
  454. package/generators/server/templates/src/test/java/package/config/EmbeddedElasticsearch.java.ejs +30 -0
  455. package/generators/server/templates/src/test/java/package/config/EmbeddedKafka.java.ejs +19 -0
  456. package/generators/server/templates/src/test/java/package/config/EmbeddedMongo.java.ejs +19 -0
  457. package/generators/server/templates/src/test/java/package/config/EmbeddedNeo4j.java.ejs +29 -0
  458. package/generators/server/templates/src/test/java/package/config/EmbeddedRedis.java.ejs +30 -0
  459. package/generators/server/templates/src/test/java/package/config/JHipsterBlockHoundIntegration.java.ejs +11 -2
  460. package/generators/server/templates/src/test/java/package/config/KafkaTestContainer.java.ejs +19 -1
  461. package/generators/server/templates/src/test/java/package/config/MongoDbTestContainer.java.ejs +5 -5
  462. package/generators/server/templates/src/test/java/package/config/Neo4jTestContainer.java.ejs +66 -0
  463. package/generators/server/templates/src/test/java/package/config/RedisTestContainer.java.ejs +57 -0
  464. package/generators/server/templates/src/test/java/package/config/{NoOpMailConfiguration.java.ejs → SpringBootTestClassOrderer.java.ejs} +16 -16
  465. package/generators/server/templates/src/test/java/package/config/TestContainersSpringContextCustomizerFactory.java.ejs +166 -30
  466. package/generators/server/templates/src/test/java/package/config/WebConfigurerTest.java.ejs +0 -23
  467. package/generators/server/templates/src/test/java/package/security/DomainUserDetailsServiceIT.java.ejs +5 -3
  468. package/generators/server/templates/src/test/java/package/service/MailServiceIT.java.ejs +7 -15
  469. package/generators/server/templates/src/test/java/package/service/UserServiceIT.java.ejs +8 -11
  470. package/generators/server/templates/src/test/java/package/service/mapper/UserMapperTest.java.ejs +1 -1
  471. package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT.java.ejs +19 -73
  472. package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT_skipUserManagement.java.ejs +0 -8
  473. package/generators/server/templates/src/test/java/package/web/rest/TestUtil.java.ejs +13 -10
  474. package/generators/server/templates/src/test/java/package/web/rest/UserResourceIT.java.ejs +76 -51
  475. package/generators/server/templates/src/test/resources/config/application.yml.ejs +13 -62
  476. package/generators/server/templates/src/test/resources/junit-platform.properties.ejs +1 -0
  477. package/generators/server/templates/src/test/resources/templates/mail/activationEmail.html.ejs +19 -0
  478. package/generators/server/templates/src/test/resources/templates/mail/creationEmail.html.ejs +19 -0
  479. package/generators/server/templates/src/test/resources/templates/mail/passwordResetEmail.html.ejs +21 -0
  480. package/generators/spring-controller/index.js +16 -1
  481. package/generators/sql-constants.js +85 -0
  482. package/generators/statistics.js +6 -5
  483. package/generators/upgrade/index.js +1 -1
  484. package/generators/utils.js +32 -30
  485. package/generators/workspaces/index.js +31 -28
  486. package/jdl/converters/jdl-to-json/jdl-to-json-relationship-converter.js +2 -3
  487. package/jdl/converters/json-to-jdl-converter.js +23 -6
  488. package/jdl/exporters/applications/jhipster-application-formatter.js +7 -0
  489. package/jdl/jhipster/application-options.js +8 -0
  490. package/jdl/jhipster/default-application-options.js +2 -2
  491. package/jdl/parsing/lexer/application-tokens.js +6 -0
  492. package/jdl/parsing/validator.js +7 -0
  493. package/jdl/validators/application-validator.js +3 -1
  494. package/jdl/validators/jdl-with-application-validator.js +1 -0
  495. package/jdl/validators/jdl-without-application-validator.js +3 -2
  496. package/lib/support/base.cjs +43 -0
  497. package/lib/support/needles.cjs +221 -0
  498. package/lib/support/shared-data.cjs +2 -2
  499. package/package.json +29 -27
  500. package/utils/blueprint.js +1 -1
  501. package/utils/entity.js +9 -1
  502. package/utils/field.js +24 -11
  503. package/utils/liquibase.js +5 -8
  504. package/utils/relationship.js +3 -2
  505. package/generators/client/templates/react/src/main/webapp/app/shared/error/error-boundary-route.spec.tsx.ejs +0 -33
  506. package/generators/client/templates/react/src/main/webapp/app/shared/error/error-boundary-route.tsx.ejs +0 -17
  507. package/generators/cypress/templates/cypress-audits.json.ejs +0 -32
  508. package/generators/cypress/templates/cypress.json.ejs +0 -46
  509. package/generators/docker-compose/templates/realm-config/jhipster-users-0.json.ejs +0 -61
  510. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/no-pagination-template.ejs +0 -81
  511. package/generators/server/templates/couchbase/src/test/java/package/CouchbaseTestContainerExtension.java.ejs +0 -56
  512. package/generators/server/templates/src/main/docker/config/realm-config/jhipster-users-0.json.ejs +0 -61
  513. package/generators/server/templates/src/test/java/package/AbstractNeo4jIT.java.ejs +0 -44
  514. package/generators/server/templates/src/test/java/package/ReactiveSqlTestContainerExtension.java.ejs +0 -79
  515. package/generators/server/templates/src/test/java/package/RedisTestContainerExtension.java.ejs +0 -44
  516. package/generators/server/templates/src/test/resources/testcontainers/mariadb/my.cnf +0 -2
@@ -42,7 +42,8 @@ const { formatDateForChangelog } = require('../utils/liquibase');
42
42
  const { calculateDbNameWithLimit, hibernateSnakeCase } = require('../utils/db');
43
43
  const defaultApplicationOptions = require('../jdl/jhipster/default-application-options');
44
44
  const databaseTypes = require('../jdl/jhipster/database-types');
45
- const { ANGULAR_X: ANGULAR, REACT, VUE, NO: CLIENT_FRAMEWORK_NO } = require('../jdl/jhipster/client-framework-types');
45
+ const { databaseData } = require('./sql-constants');
46
+ const { ANGULAR_X: ANGULAR, REACT, VUE, SVELTE, NO: CLIENT_FRAMEWORK_NO } = require('../jdl/jhipster/client-framework-types');
46
47
  const {
47
48
  PRIORITY_NAMES: {
48
49
  LOADING,
@@ -67,6 +68,8 @@ const {
67
68
  END,
68
69
  },
69
70
  } = require('../lib/constants/priorities.cjs');
71
+ const { insertContentIntoApplicationProperties } = require('./server/needles.cjs');
72
+ const { joinCallbacks } = require('../lib/support/base.cjs');
70
73
 
71
74
  const JHIPSTER_CONFIG_DIR = constants.JHIPSTER_CONFIG_DIR;
72
75
  const MODULES_HOOK_FILE = `${JHIPSTER_CONFIG_DIR}/modules/jhi-hooks.json`;
@@ -101,14 +104,31 @@ const NO_SEARCH_ENGINE = searchEngineTypes.FALSE;
101
104
  const NO_MESSAGE_BROKER = messageBrokerTypes.NO;
102
105
  const NO_WEBSOCKET = websocketTypes.FALSE;
103
106
 
107
+ const isWin32 = os.platform() === 'win32';
108
+
109
+ /**
110
+ * @callback EditFileCallback
111
+ * @param {JHipsterBaseGenerator} this
112
+ * @param {string} content
113
+ * @param {string} filePath
114
+ * @returns {CascatedEditFileCallback} callback for cascated edit
115
+ */
116
+
117
+ /**
118
+ * @callback CascatedEditFileCallback
119
+ * @param {...EditFileCallback} callbacks
120
+ * @returns {CascatedEditFileCallback} callback for cascated edit
121
+ */
104
122
  /**
105
123
  * This is the Generator base class.
106
124
  * This provides all the public API methods exposed via the module system.
107
125
  * The public API methods can be directly utilized as well using commonJS require.
108
126
  *
109
127
  * The method signatures in public API should not be changed without a major version change
128
+ *
129
+ * @extends {import('yeoman-generator')}
110
130
  */
111
- module.exports = class JHipsterBaseGenerator extends PrivateBase {
131
+ class JHipsterBaseGenerator extends PrivateBase {
112
132
  constructor(args, options, features) {
113
133
  super(args, options, features);
114
134
 
@@ -184,9 +204,8 @@ module.exports = class JHipsterBaseGenerator extends PrivateBase {
184
204
  try {
185
205
  this._jhipsterGenerator = this._jhipsterGenerator || this.env.requireNamespace(this.options.namespace).generator;
186
206
  } catch (error) {
187
- throw new Error(
188
- `The Namespace ${this.options.namespace} may not be correct. Please check your configuration and ensure your blueprint folder start with "generator-". Detail: ${error}`
189
- );
207
+ const split = this.options.namespace.split(':', 2);
208
+ this._jhipsterGenerator = split.length === 1 ? split[0] : split[1];
190
209
  }
191
210
  return this.fetchFromInstalledJHipster(this._jhipsterGenerator, 'templates', ...args);
192
211
  }
@@ -335,6 +354,9 @@ module.exports = class JHipsterBaseGenerator extends PrivateBase {
335
354
  if (this.jhipsterConfig.clientFramework === VUE) {
336
355
  prettierExtensions = `${prettierExtensions},vue`;
337
356
  }
357
+ if (this.jhipsterConfig.clientFramework === SVELTE) {
358
+ prettierExtensions = `${prettierExtensions},svelte`;
359
+ }
338
360
  }
339
361
  if (!this.skipServer && !this.jhipsterConfig.skipServer) {
340
362
  prettierExtensions = `${prettierExtensions},java`;
@@ -1222,6 +1244,15 @@ module.exports = class JHipsterBaseGenerator extends PrivateBase {
1222
1244
  this.needleApi.serverGradle.addPluginManagementRepository(url, username, password);
1223
1245
  }
1224
1246
 
1247
+ /**
1248
+ * Insert content into ApplicationProperties class
1249
+ * @param {import("./server/needles.cjs").ApplicationPropertiesNeedles} needlesContent
1250
+ * @returns {string} ApplicationProperties contents
1251
+ */
1252
+ insertContentIntoApplicationProperties(needlesContent) {
1253
+ return insertContentIntoApplicationProperties(this, needlesContent);
1254
+ }
1255
+
1225
1256
  /**
1226
1257
  * Generate a date to be used by Liquibase changelogs.
1227
1258
  *
@@ -1286,7 +1317,7 @@ module.exports = class JHipsterBaseGenerator extends PrivateBase {
1286
1317
  regex = new RegExp(
1287
1318
  [
1288
1319
  /([\s\n\r]+[a-z][a-zA-Z]*Translate="[a-zA-Z0-9 +{}'_!?.]+")/, // jhiTranslate
1289
- /([\s\n\r]+\[translate(-v|V)alues\]="\{([a-zA-Z]|\d|:|\{|\}|\[|\]|-|'|\s|\.|_)*?\}")/, // translate-values or translateValues
1320
+ /([\s\n\r]+\[translate(-v|V)alues\]="\{([a-zA-Z]|\d|:|\{|\}|\[|\]|\(|\)|\||-|'|\s|\.|_)*?\}")/, // translate-values or translateValues
1290
1321
  /([\s\n\r]+translate-compile)/, // translate-compile
1291
1322
  /([\s\n\r]+translate-value-max="[0-9{}()|]*")/, // translate-value-max
1292
1323
  ]
@@ -1325,6 +1356,7 @@ module.exports = class JHipsterBaseGenerator extends PrivateBase {
1325
1356
  }
1326
1357
 
1327
1358
  /**
1359
+ * @deprecated
1328
1360
  * Copy html templates after stripping translation keys when translation is disabled.
1329
1361
  *
1330
1362
  * @param {string} source - path of the source file to copy from
@@ -1338,6 +1370,7 @@ module.exports = class JHipsterBaseGenerator extends PrivateBase {
1338
1370
  }
1339
1371
 
1340
1372
  /**
1373
+ * @deprecated
1341
1374
  * Copy Js templates after stripping translation keys when translation is disabled.
1342
1375
  *
1343
1376
  * @param {string} source - path of the source file to copy from
@@ -1351,6 +1384,7 @@ module.exports = class JHipsterBaseGenerator extends PrivateBase {
1351
1384
  }
1352
1385
 
1353
1386
  /**
1387
+ * @deprecated
1354
1388
  * Copy JSX templates after stripping translation keys when translation is disabled.
1355
1389
  *
1356
1390
  * @param {string} source - path of the source file to copy from
@@ -1532,6 +1566,7 @@ module.exports = class JHipsterBaseGenerator extends PrivateBase {
1532
1566
  /**
1533
1567
  * Compose with a jhipster generator using default jhipster config.
1534
1568
  * @param {string} generator - jhipster generator.
1569
+ * @param {object} args - args to pass
1535
1570
  * @param {object} [options] - options to pass
1536
1571
  * @param {boolean} [once] - compose once with the generator
1537
1572
  * @return {object} the composed generator
@@ -1676,10 +1711,12 @@ module.exports = class JHipsterBaseGenerator extends PrivateBase {
1676
1711
  }
1677
1712
  dir.closeSync();
1678
1713
 
1679
- return [...new Set((this.jhipsterConfig.entities || []).concat(entityNames))]
1714
+ const entities = [...new Set((this.jhipsterConfig.entities || []).concat(entityNames))]
1680
1715
  .map(entityName => ({ name: entityName, definition: this.readEntityJson(entityName) }))
1681
- .filter(entity => entity && !this.isBuiltInUser(entity.name) && !this.isBuiltInAuthority(entity.name))
1716
+ .filter(entity => entity && !this.isBuiltInUser(entity.name) && !this.isBuiltInAuthority(entity.name) && entity.definition)
1682
1717
  .sort(isBefore);
1718
+ this.jhipsterConfig.entities = entities.map(({ name }) => name);
1719
+ return entities;
1683
1720
  }
1684
1721
 
1685
1722
  /**
@@ -1755,38 +1792,58 @@ module.exports = class JHipsterBaseGenerator extends PrivateBase {
1755
1792
  const separator = legacyDbNames ? '_' : '__';
1756
1793
  const prefix = legacyDbNames ? '' : 'rel_';
1757
1794
  const joinTableName = `${prefix}${this.getTableName(entityName)}${separator}${this.getTableName(relationshipName)}`;
1758
- let limit = 0;
1759
- if (prodDatabaseType === ORACLE && joinTableName.length > 30 && !this.skipCheckLengthOfIdentifier) {
1760
- this.warning(
1761
- `The generated join table "${joinTableName}" is too long for Oracle (which has a 30 character limit). It will be truncated!`
1762
- );
1763
-
1764
- limit = 30;
1765
- } else if (prodDatabaseType === MYSQL && joinTableName.length > 64 && !this.skipCheckLengthOfIdentifier) {
1766
- this.warning(
1767
- `The generated join table "${joinTableName}" is too long for MySQL (which has a 64 character limit). It will be truncated!`
1768
- );
1769
-
1770
- limit = 64;
1771
- } else if (prodDatabaseType === POSTGRESQL && joinTableName.length >= 63 && !this.skipCheckLengthOfIdentifier) {
1795
+ const { name, tableNameMaxLength } = databaseData[prodDatabaseType] || {};
1796
+ // FIXME: In V8, remove specific condition for POSTGRESQL joinTableName.length === 63
1797
+ if (
1798
+ tableNameMaxLength &&
1799
+ (joinTableName.length > tableNameMaxLength || (prodDatabaseType === POSTGRESQL && joinTableName.length === 63)) &&
1800
+ !this.skipCheckLengthOfIdentifier
1801
+ ) {
1772
1802
  this.warning(
1773
- `The generated join table "${joinTableName}" is too long for PostgreSQL (which has a 63 character limit). It will be truncated!`
1803
+ `The generated join table "${joinTableName}" is too long for ${name} (which has a ${tableNameMaxLength} character limit). It will be truncated!`
1774
1804
  );
1805
+ return calculateDbNameWithLimit(entityName, relationshipName, tableNameMaxLength, { prefix, separator, appendHash: !legacyDbNames });
1806
+ }
1807
+ return joinTableName;
1808
+ }
1775
1809
 
1776
- limit = 63;
1777
- } else if (prodDatabaseType === MARIADB && joinTableName.length > 64 && !this.skipCheckLengthOfIdentifier) {
1810
+ /**
1811
+ * get a constraint name for tables in JHipster preferred style
1812
+ *
1813
+ * @param {string} entityName - name of the entity
1814
+ * @param {string} columnOrRelationName - name of the column or related entity
1815
+ * @param {string} prodDatabaseType - database type
1816
+ * @param {boolean} noSnakeCase - do not convert names to snakecase
1817
+ * @param {string} prefix - constraintName prefix for the constraintName
1818
+ * @param {string} suffix - constraintName suffix for the constraintName
1819
+ */
1820
+ getConstraintName(entityName, columnOrRelationName, prodDatabaseType, noSnakeCase, prefix = '', suffix = '') {
1821
+ let constraintName;
1822
+ const legacyDbNames = this.jhipsterConfig && this.jhipsterConfig.legacyDbNames;
1823
+ const separator = legacyDbNames ? '_' : '__';
1824
+ if (noSnakeCase) {
1825
+ constraintName = `${prefix}${entityName}${separator}${columnOrRelationName}${suffix}`;
1826
+ } else {
1827
+ constraintName = `${prefix}${this.getTableName(entityName)}${separator}${this.getTableName(columnOrRelationName)}${suffix}`;
1828
+ }
1829
+ const { name, constraintNameMaxLength } = databaseData[prodDatabaseType] || {};
1830
+ if (constraintNameMaxLength && constraintName.length > constraintNameMaxLength && !this.skipCheckLengthOfIdentifier) {
1778
1831
  this.warning(
1779
- `The generated join table "${joinTableName}" is too long for MariaDB (which has a 64 character limit). It will be truncated!`
1832
+ `The generated constraint name "${constraintName}" is too long for ${name} (which has a ${constraintNameMaxLength} character limit). It will be truncated!`
1780
1833
  );
1781
-
1782
- limit = 64;
1834
+ return `${calculateDbNameWithLimit(entityName, columnOrRelationName, constraintNameMaxLength - suffix.length, {
1835
+ separator,
1836
+ noSnakeCase,
1837
+ prefix,
1838
+ appendHash: !legacyDbNames,
1839
+ })}${suffix}`;
1783
1840
  }
1784
- return limit === 0
1785
- ? joinTableName
1786
- : calculateDbNameWithLimit(entityName, relationshipName, limit, { prefix, separator, appendHash: !legacyDbNames });
1841
+ return constraintName;
1787
1842
  }
1788
1843
 
1789
1844
  /**
1845
+ * @deprecated Should be removed in V8 in favour of getConstraintName
1846
+ *
1790
1847
  * get a constraint name for tables in JHipster preferred style after applying any length limits required.
1791
1848
  *
1792
1849
  * @param {string} entityName - name of the entity
@@ -1805,13 +1862,7 @@ module.exports = class JHipsterBaseGenerator extends PrivateBase {
1805
1862
  constraintName = `${prefix}${this.getTableName(entityName)}${separator}${this.getTableName(columnOrRelationName)}`;
1806
1863
  }
1807
1864
  let limit = 0;
1808
- if (prodDatabaseType === ORACLE && constraintName.length >= 27 && !this.skipCheckLengthOfIdentifier) {
1809
- this.warning(
1810
- `The generated constraint name "${constraintName}" is too long for Oracle (which has a 30 character limit). It will be truncated!`
1811
- );
1812
-
1813
- limit = 28;
1814
- } else if (prodDatabaseType === MYSQL && constraintName.length >= 61 && !this.skipCheckLengthOfIdentifier) {
1865
+ if (prodDatabaseType === MYSQL && constraintName.length >= 61 && !this.skipCheckLengthOfIdentifier) {
1815
1866
  this.warning(
1816
1867
  `The generated constraint name "${constraintName}" is too long for MySQL (which has a 64 character limit). It will be truncated!`
1817
1868
  );
@@ -1840,19 +1891,6 @@ module.exports = class JHipsterBaseGenerator extends PrivateBase {
1840
1891
  });
1841
1892
  }
1842
1893
 
1843
- /**
1844
- * get a foreign key constraint name for tables in JHipster preferred style.
1845
- *
1846
- * @param {string} entityName - name of the entity
1847
- * @param {string} relationshipName - name of the related entity
1848
- * @param {string} prodDatabaseType - database type
1849
- * @param {boolean} noSnakeCase - do not convert names to snakecase
1850
- */
1851
- getConstraintName(entityName, relationshipName, prodDatabaseType, noSnakeCase) {
1852
- // for backward compatibility
1853
- return this.getFKConstraintName(entityName, relationshipName, prodDatabaseType, noSnakeCase);
1854
- }
1855
-
1856
1894
  /**
1857
1895
  * get a foreign key constraint name for tables in JHipster preferred style.
1858
1896
  *
@@ -1862,7 +1900,10 @@ module.exports = class JHipsterBaseGenerator extends PrivateBase {
1862
1900
  * @param {boolean} noSnakeCase - do not convert names to snakecase
1863
1901
  */
1864
1902
  getFKConstraintName(entityName, relationshipName, prodDatabaseType, noSnakeCase) {
1865
- return `${this.getConstraintNameWithLimit(entityName, relationshipName, prodDatabaseType, noSnakeCase, 'fk_')}_id`;
1903
+ // FIXME: In V8, this should use only this.getConstraintName that calculates constraint length correctly
1904
+ return prodDatabaseType === ORACLE
1905
+ ? this.getConstraintName(entityName, relationshipName, prodDatabaseType, noSnakeCase, 'fk_', '_id')
1906
+ : `${this.getConstraintNameWithLimit(entityName, relationshipName, prodDatabaseType, noSnakeCase, 'fk_')}_id`;
1866
1907
  }
1867
1908
 
1868
1909
  /**
@@ -1874,7 +1915,10 @@ module.exports = class JHipsterBaseGenerator extends PrivateBase {
1874
1915
  * @param {boolean} noSnakeCase - do not convert names to snakecase
1875
1916
  */
1876
1917
  getUXConstraintName(entityName, columnName, prodDatabaseType, noSnakeCase) {
1877
- return `ux_${this.getConstraintNameWithLimit(entityName, columnName, prodDatabaseType, noSnakeCase)}`;
1918
+ // FIXME: In V8, this should use only this.getConstraintName that calculates constraint length correctly
1919
+ return prodDatabaseType === ORACLE
1920
+ ? this.getConstraintName(entityName, columnName, prodDatabaseType, noSnakeCase, 'ux_')
1921
+ : `ux_${this.getConstraintNameWithLimit(entityName, columnName, prodDatabaseType, noSnakeCase)}`;
1878
1922
  }
1879
1923
 
1880
1924
  /**
@@ -2007,7 +2051,7 @@ module.exports = class JHipsterBaseGenerator extends PrivateBase {
2007
2051
  * Return the user home
2008
2052
  */
2009
2053
  getUserHome() {
2010
- return process.env[process.platform === 'win32' ? 'USERPROFILE' : 'HOME'];
2054
+ return process.env[isWin32 ? 'USERPROFILE' : 'HOME'];
2011
2055
  }
2012
2056
 
2013
2057
  /**
@@ -2143,7 +2187,7 @@ module.exports = class JHipsterBaseGenerator extends PrivateBase {
2143
2187
  buildCmd += ' -Pwar';
2144
2188
  }
2145
2189
 
2146
- if (os.platform() !== 'win32') {
2190
+ if (!isWin32) {
2147
2191
  buildCmd = `./${buildCmd}`;
2148
2192
  }
2149
2193
  buildCmd += ` -P${profile}`;
@@ -2169,7 +2213,7 @@ module.exports = class JHipsterBaseGenerator extends PrivateBase {
2169
2213
  buildCmd = `gradlew -x ${command}`;
2170
2214
  }
2171
2215
 
2172
- if (os.platform() !== 'win32') {
2216
+ if (!isWin32) {
2173
2217
  buildCmd = `./${buildCmd}`;
2174
2218
  }
2175
2219
  buildCmd += ` -P${profile}`;
@@ -2356,7 +2400,9 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
2356
2400
  assert(paramCount > 0, 'One of sections, blocks or files is required');
2357
2401
  assert(paramCount === 1, 'Only one of sections, blocks or files must be provided');
2358
2402
 
2359
- const { sections, blocks, templates, rootTemplatesPath, context = this } = options;
2403
+ const { sections, blocks, templates, rootTemplatesPath, context = this, transform: methodTransform = [] } = options;
2404
+ const { _: commonSpec = {} } = sections;
2405
+ const { transform: sectionTransform = [] } = commonSpec;
2360
2406
  const startTime = new Date();
2361
2407
 
2362
2408
  /* Build lookup order first has preference.
@@ -2392,20 +2438,18 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
2392
2438
  return val;
2393
2439
  }
2394
2440
  if (typeof val === 'function') {
2395
- return val.call(this, context, this);
2441
+ return val.call(this, context, this) || false;
2396
2442
  }
2397
2443
  throw new Error(`Type not supported ${val}`);
2398
2444
  };
2399
2445
 
2400
- const renderTemplate = async ({ sourceFile, destinationFile, options, transform = true }) => {
2446
+ const renderTemplate = async ({ sourceFile, destinationFile, options, noEjs, transform, binary }) => {
2401
2447
  const extension = path.extname(sourceFile);
2402
- const appendEjs = transform && !['.ejs', '.png', '.jpg', '.gif', '.svg', '.ico'].includes(extension);
2448
+ binary = binary || ['.png', '.jpg', '.gif', '.svg', '.ico'].includes(extension);
2449
+ const appendEjs = noEjs === undefined ? !binary && extension !== '.ejs' : !noEjs;
2403
2450
  const ejsFile = appendEjs || extension === '.ejs';
2404
2451
 
2405
- if (typeof transform !== 'boolean') {
2406
- throw new Error(`Transform ${transform} value is not supported`);
2407
- }
2408
- destinationFile = transform ? normalizeEjs(destinationFile) : destinationFile;
2452
+ destinationFile = appendEjs ? normalizeEjs(destinationFile) : destinationFile;
2409
2453
 
2410
2454
  let sourceFileFrom;
2411
2455
  if (Array.isArray(rootTemplatesAbsolutePath)) {
@@ -2440,11 +2484,33 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
2440
2484
  if (!ejsFile) {
2441
2485
  await this.copyTemplateAsync(sourceFileFrom, destinationFile);
2442
2486
  } else {
2443
- await this.renderTemplateAsync(sourceFileFrom, destinationFile, context, {
2487
+ let useAsync = true;
2488
+ if (context.entityClass) {
2489
+ const basename = path.basename(sourceFileFrom);
2490
+ if (context.configOptions && context.configOptions.sharedEntities) {
2491
+ Object.values(context.configOptions.sharedEntities).forEach(entity => {
2492
+ entity.resetFakerSeed(`${context.entityClass}-${basename}`);
2493
+ });
2494
+ } else if (context.resetFakerSeed) {
2495
+ context.resetFakerSeed(basename);
2496
+ }
2497
+ // Async calls will make the render method to be scheduled, allowing the faker key to change in the meantime.
2498
+ useAsync = false;
2499
+ }
2500
+
2501
+ const renderOptions = {
2444
2502
  ...options,
2445
2503
  // Set root for ejs to lookup for partials.
2446
2504
  root: rootTemplatesAbsolutePath,
2447
- });
2505
+ };
2506
+ if (useAsync) {
2507
+ await this.renderTemplateAsync(sourceFileFrom, destinationFile, context, renderOptions);
2508
+ } else {
2509
+ this.renderTemplate(sourceFileFrom, destinationFile, context, renderOptions);
2510
+ }
2511
+ }
2512
+ if (!binary && transform && transform.length) {
2513
+ this.editFile(destinationFile, ...transform);
2448
2514
  }
2449
2515
  return destinationFile;
2450
2516
  };
@@ -2452,10 +2518,13 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
2452
2518
  let parsedBlocks = blocks;
2453
2519
  if (sections) {
2454
2520
  assert(typeof sections === 'object', 'sections must be an object');
2455
- const parsedSections = Object.entries(sections).map(([sectionName, sectionBlocks]) => {
2456
- assert(Array.isArray(sectionBlocks), `Section must be an array for ${sectionName}`);
2457
- return { sectionName, sectionBlocks };
2458
- });
2521
+ const parsedSections = Object.entries(sections)
2522
+ .map(([sectionName, sectionBlocks]) => {
2523
+ if (sectionName.startsWith('_')) return undefined;
2524
+ assert(Array.isArray(sectionBlocks), `Section must be an array for ${sectionName}`);
2525
+ return { sectionName, sectionBlocks };
2526
+ })
2527
+ .filter(Boolean);
2459
2528
 
2460
2529
  parsedBlocks = parsedSections
2461
2530
  .map(({ sectionName, sectionBlocks }) => {
@@ -2478,7 +2547,7 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
2478
2547
  from: blockFromCallback,
2479
2548
  to: blockToCallback,
2480
2549
  condition: blockConditionCallback,
2481
- transform: blockTransform,
2550
+ transform: blockTransform = [],
2482
2551
  } = block;
2483
2552
  assert(typeof block === 'object', `Block must be an object for ${blockSpecPath}`);
2484
2553
  assert(Array.isArray(block.templates), `Block templates must be an array for ${blockSpecPath}`);
@@ -2491,13 +2560,31 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
2491
2560
  return block.templates.map((fileSpec, fileIdx) => {
2492
2561
  const fileSpecPath = `${blockSpecPath}[${fileIdx}]`;
2493
2562
  assert(typeof fileSpec === 'object' || typeof fileSpec === 'string', `File must be an object or a string for ${fileSpecPath}`);
2563
+ let { noEjs } = fileSpec;
2564
+ let derivedTransform;
2565
+ if (typeof blockTransform === 'boolean') {
2566
+ noEjs = !blockTransform;
2567
+ derivedTransform = [...methodTransform, ...sectionTransform];
2568
+ } else {
2569
+ derivedTransform = [...methodTransform, ...sectionTransform, ...blockTransform];
2570
+ }
2494
2571
  if (typeof fileSpec === 'string') {
2495
2572
  const sourceFile = path.join(blockPath, fileSpec);
2496
2573
  const destinationFile = this.destinationPath(blockTo, fileSpec);
2497
- return { sourceFile, destinationFile, transform: blockTransform };
2574
+ return { sourceFile, destinationFile, noEjs, transform: derivedTransform };
2498
2575
  }
2576
+
2577
+ const { options, file, renameTo, transform: fileTransform = [], binary } = fileSpec;
2499
2578
  let { sourceFile, destinationFile } = fileSpec;
2500
- const { options, file, renameTo } = fileSpec;
2579
+
2580
+ if (typeof fileTransform === 'boolean') {
2581
+ noEjs = !fileTransform;
2582
+ } else if (Array.isArray(fileTransform)) {
2583
+ derivedTransform = [...derivedTransform, ...fileTransform];
2584
+ } else if (fileTransform !== undefined) {
2585
+ throw new Error(`Transform ${fileTransform} value is not supported`);
2586
+ }
2587
+
2501
2588
  const normalizedFile = resolveCallback(sourceFile || file);
2502
2589
  sourceFile = path.join(blockPath, normalizedFile);
2503
2590
  destinationFile = this.destinationPath(blockTo, path.join(resolveCallback(destinationFile || renameTo, normalizedFile)));
@@ -2507,16 +2594,23 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
2507
2594
  this.debug(`skipping file ${destinationFile}`);
2508
2595
  return undefined;
2509
2596
  }
2510
- let { transform } = fileSpec;
2511
- if (transform === undefined) {
2512
- // TODO remove for jhipster 8
2513
- const { noEjs, method } = fileSpec;
2514
- transform = noEjs || method === 'copy' ? false : undefined;
2515
- }
2516
- if (transform === undefined) {
2517
- transform = blockTransform;
2597
+
2598
+ // TODO remove for jhipster 8
2599
+ if (noEjs === undefined) {
2600
+ const { method } = fileSpec;
2601
+ if (method === 'copy') {
2602
+ noEjs = true;
2603
+ }
2518
2604
  }
2519
- return { sourceFile, destinationFile, options, transform };
2605
+
2606
+ return {
2607
+ sourceFile,
2608
+ destinationFile,
2609
+ options,
2610
+ transform: derivedTransform,
2611
+ noEjs,
2612
+ binary,
2613
+ };
2520
2614
  });
2521
2615
  })
2522
2616
  .flat()
@@ -2703,9 +2797,15 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
2703
2797
  if (options.cypressCoverage !== undefined) {
2704
2798
  this.jhipsterConfig.cypressCoverage = options.cypressCoverage;
2705
2799
  }
2800
+ if (options.cypressAudit !== undefined) {
2801
+ this.jhipsterConfig.cypressAudit = options.cypressAudit;
2802
+ }
2706
2803
  if (options.legacyDbNames !== undefined) {
2707
2804
  this.jhipsterConfig.legacyDbNames = options.legacyDbNames;
2708
2805
  }
2806
+ if (options.enableTranslation !== undefined) {
2807
+ this.jhipsterConfig.enableTranslation = options.enableTranslation;
2808
+ }
2709
2809
  if (options.language) {
2710
2810
  // workaround double options parsing, remove once generator supports skipping parse options
2711
2811
  const languages = options.language.flat();
@@ -2826,6 +2926,7 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
2826
2926
  dest.skipUserManagement = config.skipUserManagement;
2827
2927
  dest.skipCheckLengthOfIdentifier = config.skipCheckLengthOfIdentifier;
2828
2928
  dest.microfrontend = config.microfrontend;
2929
+ dest.microfrontends = config.microfrontends;
2829
2930
 
2830
2931
  dest.skipServer = config.skipServer;
2831
2932
  dest.skipCommitHook = config.skipCommitHook;
@@ -2844,6 +2945,7 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
2844
2945
 
2845
2946
  dest.testFrameworks = config.testFrameworks || [];
2846
2947
  dest.cypressCoverage = config.cypressCoverage;
2948
+ dest.cypressAudit = config.cypressAudit === undefined ? true : config.cypressAudit;
2847
2949
 
2848
2950
  dest.remotes = Object.entries(config.applications || {}).map(([baseName, config]) => ({ baseName, ...config })) || [];
2849
2951
 
@@ -2881,7 +2983,14 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
2881
2983
  dest.endpointPrefix = !dest.applicationType || dest.applicationTypeMicroservice ? `services/${dest.lowercaseBaseName}` : '';
2882
2984
  }
2883
2985
 
2884
- if (dest.remotes) {
2986
+ if (dest.microfrontends && dest.microfrontends.length > 0) {
2987
+ dest.microfrontends.forEach(microfrontend => {
2988
+ const { baseName } = microfrontend;
2989
+ microfrontend.lowercaseBaseName = baseName.toLowerCase();
2990
+ microfrontend.capitalizedBaseName = _.upperFirst(baseName);
2991
+ microfrontend.endpointPrefix = `services/${microfrontend.lowercaseBaseName}`;
2992
+ });
2993
+ } else if ((!dest.microfrontends || dest.microfrontends.length === 0) && dest.remotes) {
2885
2994
  dest.remotes.forEach(app => this.loadDerivedAppConfig(app));
2886
2995
  dest.microfrontends = dest.remotes.filter(r => r.clientFramework && r.clientFramework !== CLIENT_FRAMEWORK_NO);
2887
2996
  }
@@ -2890,6 +2999,10 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
2890
2999
  (dest.applicationTypeMicroservice && !dest.skipClient) ||
2891
3000
  (dest.applicationTypeGateway && dest.microfrontends && dest.microfrontends.length > 0);
2892
3001
 
3002
+ if (dest.microfrontend && dest.applicationTypeMicroservice && !dest.gatewayServerPort) {
3003
+ dest.gatewayServerPort = 8080;
3004
+ }
3005
+
2893
3006
  dest.authenticationTypeSession = dest.authenticationType === SESSION;
2894
3007
  dest.authenticationTypeJwt = dest.authenticationType === JWT;
2895
3008
  dest.authenticationTypeOauth2 = dest.authenticationType === OAUTH2;
@@ -3045,11 +3158,6 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
3045
3158
 
3046
3159
  dest.searchEngineCouchbase = dest.searchEngine === COUCHBASE;
3047
3160
  dest.searchEngineElasticsearch = dest.searchEngine === ELASTICSEARCH;
3048
-
3049
- dest.reactiveSqlTestContainers =
3050
- dest.reactive &&
3051
- ([MYSQL, POSTGRESQL, MSSQL, MARIADB].includes(dest.prodDatabaseType) ||
3052
- [MYSQL, POSTGRESQL, MSSQL, MARIADB].includes(dest.devDatabaseType));
3053
3161
  }
3054
3162
 
3055
3163
  loadPlatformConfig(config = _.defaults({}, this.jhipsterConfig, this.jhipsterDefaults), dest = this) {
@@ -3192,7 +3300,7 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
3192
3300
  * @experimental
3193
3301
  * Load dependabot package.json into shared dependabot dependencies.
3194
3302
  * @example this.loadDependabotDependencies(this.fetchFromInstalledJHipster('init', 'templates', 'package.json'));
3195
- * @param String dependabotFile - package.json path
3303
+ * @param {string} packageJson - package.json path
3196
3304
  */
3197
3305
  loadDependabotDependencies(packageJson) {
3198
3306
  const { dependencies, devDependencies } = this.fs.readJSON(packageJson);
@@ -3261,7 +3369,7 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
3261
3369
  * @experimental
3262
3370
  * Load options from an object.
3263
3371
  * When composing, we need to load options from others generators, externalising options allow to easily load them.
3264
- * @param String options - Object containing options.
3372
+ * @param {Object} [options] - Object containing options.
3265
3373
  */
3266
3374
  jhipsterOptions(options = {}) {
3267
3375
  options = _.cloneDeep(options);
@@ -3336,4 +3444,46 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
3336
3444
  LANG: 'en',
3337
3445
  });
3338
3446
  }
3339
- };
3447
+
3448
+ /**
3449
+ * Edit file content
3450
+ * @param {string} file
3451
+ * @param {...EditFileCallback} transformCallbacks
3452
+ * @returns {CascatedEditFileCallback}
3453
+ */
3454
+ editFile(file, ...transformCallbacks) {
3455
+ let filePath = this.destinationPath(file);
3456
+ if (!this.env.sharedFs.existsInMemory(filePath) && this.env.sharedFs.existsInMemory(`${filePath}.jhi`)) {
3457
+ filePath = `${filePath}.jhi`;
3458
+ }
3459
+
3460
+ let content;
3461
+
3462
+ try {
3463
+ content = this.readDestination(filePath);
3464
+ } catch (_error) {
3465
+ if (transformCallbacks.length === 0) {
3466
+ throw new Error(`File ${filePath} doesn't exist`);
3467
+ }
3468
+ // allow to edit non existing files
3469
+ content = '';
3470
+ }
3471
+
3472
+ const writeCallback = (...callbacks) => {
3473
+ if (callbacks.length === 0) {
3474
+ return writeCallback;
3475
+ }
3476
+ try {
3477
+ content = joinCallbacks(...callbacks).call(this, content, filePath);
3478
+ this.writeDestination(filePath, content);
3479
+ } catch (error) {
3480
+ throw new Error(`Error editing file ${filePath}: ${error.message} at ${error.stack}`);
3481
+ }
3482
+ return writeCallback;
3483
+ };
3484
+
3485
+ return writeCallback(...transformCallbacks);
3486
+ }
3487
+ }
3488
+
3489
+ module.exports = JHipsterBaseGenerator;