generator-jhipster 7.3.0 → 7.5.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 (340) hide show
  1. package/cli/import-jdl.js +3 -2
  2. package/cli/jhipster-command.js +2 -2
  3. package/cli/program.js +32 -29
  4. package/generators/app/index.js +46 -27
  5. package/generators/aws/index.js +8 -8
  6. package/generators/aws/lib/eb.js +1 -1
  7. package/generators/azure-app-service/index.js +16 -9
  8. package/generators/azure-app-service/templates/github/workflows/azure-app-service.yml.ejs +2 -2
  9. package/generators/azure-spring-cloud/index.js +16 -9
  10. package/generators/azure-spring-cloud/templates/github/workflows/azure-spring-cloud.yml.ejs +2 -2
  11. package/generators/bootstrap/index.js +57 -62
  12. package/generators/ci-cd/index.js +11 -8
  13. package/generators/ci-cd/templates/github-actions.yml.ejs +1 -1
  14. package/generators/ci-cd/templates/travis.yml.ejs +9 -4
  15. package/generators/cleanup.js +27 -171
  16. package/generators/client/files-angular.js +12 -1
  17. package/generators/client/files-common.js +6 -2
  18. package/generators/client/files-react.js +13 -2
  19. package/generators/client/files-vue.js +59 -7
  20. package/generators/client/index.js +46 -32
  21. package/generators/client/needle-api/needle-client-angular.js +1 -1
  22. package/generators/client/needle-api/needle-client-vue.js +57 -7
  23. package/generators/client/templates/angular/.eslintrc.json.ejs +1 -0
  24. package/generators/client/templates/angular/angular.json.ejs +5 -0
  25. package/generators/client/templates/angular/jest.conf.js.ejs +2 -0
  26. package/generators/client/templates/angular/package.json +29 -29
  27. package/generators/client/templates/angular/package.json.ejs +3 -1
  28. package/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.component.spec.ts.ejs +52 -54
  29. package/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.component.ts.ejs +4 -4
  30. package/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.service.spec.ts.ejs +65 -0
  31. package/generators/client/templates/angular/src/main/webapp/app/account/password/password-strength-bar/password-strength-bar.component.spec.ts.ejs +35 -37
  32. package/generators/client/templates/angular/src/main/webapp/app/account/password/password-strength-bar/password-strength-bar.component.ts.ejs +1 -1
  33. package/generators/client/templates/angular/src/main/webapp/app/account/password/password.component.spec.ts.ejs +78 -80
  34. package/generators/client/templates/angular/src/main/webapp/app/account/password/password.component.ts.ejs +4 -4
  35. package/generators/client/templates/angular/src/main/webapp/app/account/password/password.service.spec.ts.ejs +41 -0
  36. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.spec.ts.ejs +73 -75
  37. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts.ejs +4 -4
  38. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.spec.ts.ejs +62 -0
  39. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.component.spec.ts.ejs +44 -46
  40. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.service.spec.ts.ejs +61 -0
  41. package/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.spec.ts.ejs +122 -123
  42. package/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.ts.ejs +1 -1
  43. package/generators/client/templates/angular/src/main/webapp/app/account/register/register.service.spec.ts.ejs +66 -0
  44. package/generators/client/templates/angular/src/main/webapp/app/account/sessions/sessions.component.spec.ts.ejs +75 -77
  45. package/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.component.spec.ts.ejs +80 -80
  46. package/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.component.spec.ts.ejs +48 -50
  47. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.spec.ts.ejs +45 -47
  48. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.ts.ejs +4 -4
  49. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.service.spec.ts.ejs +66 -0
  50. package/generators/client/templates/angular/src/main/webapp/app/admin/health/modal/health-modal.component.spec.ts.ejs +99 -101
  51. package/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.component.spec.ts.ejs +61 -63
  52. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/jvm-memory/jvm-memory.component.html.ejs +2 -2
  53. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.component.spec.ts.ejs +28 -30
  54. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.spec.ts.ejs +35 -37
  55. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/detail/user-management-detail.component.spec.ts.ejs +40 -42
  56. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/list/user-management.component.spec.ts.ejs +89 -91
  57. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/list/user-management.component.ts.ejs +4 -4
  58. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/update/user-management-update.component.spec.ts.ejs +81 -83
  59. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/update/user-management-update.component.ts.ejs +8 -8
  60. package/generators/client/templates/angular/src/main/webapp/app/app-routing.module.ts.ejs +14 -3
  61. package/generators/client/templates/angular/src/main/webapp/app/app.module.ts.ejs +8 -29
  62. package/generators/client/templates/angular/src/main/webapp/app/config/datepicker-adapter.ts.ejs +1 -1
  63. package/generators/client/templates/angular/src/main/webapp/app/config/dayjs.ts.ejs +4 -4
  64. package/generators/client/templates/angular/src/main/webapp/app/core/auth/account.service.spec.ts.ejs +14 -9
  65. package/generators/client/templates/angular/src/main/webapp/app/core/tracker/tracker.service.ts.ejs +6 -6
  66. package/generators/client/templates/angular/src/main/webapp/app/core/util/parse-links.service.ts.ejs +1 -1
  67. package/generators/client/templates/angular/src/main/webapp/app/entities/entity-navbar-items.ts.ejs +29 -0
  68. package/generators/client/templates/angular/src/main/webapp/app/home/home.component.spec.ts.ejs +106 -98
  69. package/generators/client/templates/angular/src/main/webapp/app/layouts/main/main.component.spec.ts.ejs +166 -168
  70. package/generators/client/templates/angular/src/main/webapp/app/layouts/main/main.component.ts.ejs +1 -1
  71. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs +20 -0
  72. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.spec.ts.ejs +74 -70
  73. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.ts.ejs +41 -2
  74. package/generators/client/templates/angular/src/main/webapp/app/layouts/profiles/page-ribbon.component.spec.ts.ejs +27 -29
  75. package/generators/client/templates/angular/src/main/webapp/app/login/login.component.spec.ts.ejs +114 -115
  76. package/generators/client/templates/angular/src/main/webapp/app/login/login.component.ts.ejs +4 -4
  77. package/generators/client/templates/angular/src/main/webapp/app/shared/alert/alert-error.component.spec.ts.ejs +132 -134
  78. package/generators/client/templates/angular/src/main/webapp/app/shared/alert/alert.component.spec.ts.ejs +29 -31
  79. package/generators/client/templates/angular/src/main/webapp/app/shared/auth/has-any-authority.directive.spec.ts.ejs +4 -4
  80. package/generators/client/templates/angular/src/main/webapp/app/shared/date/duration.pipe.ts.ejs +1 -1
  81. package/generators/client/templates/angular/src/main/webapp/app/shared/date/format-medium-date.pipe.spec.ts.ejs +1 -1
  82. package/generators/client/templates/angular/src/main/webapp/app/shared/date/format-medium-date.pipe.ts.ejs +1 -1
  83. package/generators/client/templates/angular/src/main/webapp/app/shared/date/format-medium-datetime.pipe.spec.ts.ejs +1 -1
  84. package/generators/client/templates/angular/src/main/webapp/app/shared/date/format-medium-datetime.pipe.ts.ejs +1 -1
  85. package/generators/client/templates/angular/src/main/webapp/app/shared/language/translate.directive.ts.ejs +6 -6
  86. package/generators/client/templates/angular/src/main/webapp/app/shared/language/translation.module.ts.ejs +83 -0
  87. package/generators/client/templates/angular/src/main/webapp/declarations.d.ts.ejs +16 -2
  88. package/generators/client/templates/angular/tsconfig.json.ejs +2 -0
  89. package/generators/client/templates/angular/tsconfig.spec.json.ejs +0 -1
  90. package/generators/client/templates/angular/webpack/proxy.conf.js.ejs +0 -2
  91. package/generators/client/templates/angular/webpack/webpack.custom.js.ejs +0 -16
  92. package/generators/client/templates/angular/webpack/webpack.microfrontend.js.ejs +12 -5
  93. package/generators/client/templates/common/package.json +6 -6
  94. package/generators/client/templates/common/src/main/webapp/robots.txt.ejs +0 -1
  95. package/generators/client/templates/common/src/main/webapp/swagger-ui/index.html.ejs +86 -56
  96. package/generators/client/templates/common/webpack/webpack.microfrontend.js.jhi.ejs +56 -0
  97. package/generators/client/templates/react/.eslintrc.json.ejs +1 -0
  98. package/generators/client/templates/react/package.json +54 -53
  99. package/generators/client/templates/react/package.json.ejs +6 -1
  100. package/generators/client/templates/react/src/main/webapp/app/app.scss.ejs +0 -3
  101. package/generators/client/templates/react/src/main/webapp/app/config/axios-interceptor.spec.ts.ejs +3 -2
  102. package/generators/client/templates/react/src/main/webapp/app/modules/account/password/password.tsx.ejs +2 -2
  103. package/generators/client/templates/react/src/main/webapp/app/modules/administration/configuration/configuration.tsx.ejs +2 -2
  104. package/generators/client/templates/react/src/main/webapp/app/modules/administration/gateway/gateway.tsx.ejs +2 -2
  105. package/generators/client/templates/react/src/main/webapp/app/modules/administration/metrics/metrics.tsx.ejs +6 -6
  106. package/generators/client/templates/react/src/main/webapp/app/modules/administration/user-management/user-management.tsx.ejs +8 -8
  107. package/generators/client/templates/react/src/main/webapp/app/modules/home/home.tsx.ejs +1 -1
  108. package/generators/client/templates/react/src/main/webapp/app/shared/layout/header/header.scss.ejs +9 -0
  109. package/generators/client/templates/react/src/main/webapp/app/shared/layout/header/header.tsx.ejs +2 -2
  110. package/generators/client/templates/react/src/main/webapp/app/shared/layout/menus/account.tsx.ejs +3 -3
  111. package/generators/client/templates/react/src/main/webapp/app/shared/layout/menus/admin.tsx.ejs +7 -7
  112. package/generators/client/templates/react/src/main/webapp/app/shared/layout/menus/menu-components.tsx.ejs +1 -1
  113. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/authentication.spec.ts.ejs +1 -1
  114. package/generators/client/templates/react/webpack/webpack.dev.js.ejs +17 -3
  115. package/generators/client/templates/react/webpack/webpack.prod.js.ejs +13 -1
  116. package/generators/client/templates/vue/.eslintrc.js.ejs +8 -5
  117. package/generators/client/templates/vue/package.json +40 -49
  118. package/generators/client/templates/vue/package.json.ejs +13 -17
  119. package/generators/client/templates/vue/src/main/webapp/app/account/account.service.ts.ejs +23 -12
  120. package/generators/client/templates/vue/src/main/webapp/app/account/settings/settings.vue.ejs +7 -1
  121. package/generators/client/templates/vue/src/main/webapp/app/admin/configuration/configuration.vue.ejs +1 -1
  122. package/generators/client/templates/vue/src/main/webapp/app/admin/metrics/metrics.component.ts.ejs +1 -1
  123. package/generators/client/templates/vue/src/main/webapp/app/constants.ts.ejs +16 -6
  124. package/generators/client/templates/vue/src/main/webapp/app/core/jhi-navbar/jhi-navbar.component.ts.ejs +27 -8
  125. package/generators/client/templates/vue/src/main/webapp/app/core/jhi-navbar/jhi-navbar.vue.ejs +6 -0
  126. package/generators/client/templates/vue/src/main/webapp/app/declarations.d.ts.ejs +41 -0
  127. package/generators/client/templates/vue/src/main/webapp/app/entities/entities-menu.component.ts.ejs +34 -0
  128. package/generators/client/templates/vue/src/main/webapp/app/entities/entities-menu.vue.ejs +13 -0
  129. package/generators/client/templates/vue/src/main/webapp/app/entities/entities.component.ts.ejs +20 -0
  130. package/generators/client/templates/vue/src/main/webapp/app/entities/entities.vue.ejs +5 -0
  131. package/generators/client/templates/vue/src/main/webapp/app/entities/user/{user.oauth2.service.ts.ejs → user.service.ts.ejs} +1 -1
  132. package/generators/client/templates/vue/{webpack/utils.js.ejs → src/main/webapp/app/index.ts.ejs} +1 -12
  133. package/generators/client/templates/vue/src/main/webapp/app/locale/translation.service.ts.ejs +26 -9
  134. package/generators/client/templates/vue/src/main/webapp/app/main.ts.ejs +20 -18
  135. package/generators/client/templates/vue/src/main/webapp/app/router/entities.ts.ejs +45 -3
  136. package/generators/client/templates/vue/src/main/webapp/app/router/index.ts.ejs +19 -3
  137. package/generators/client/templates/vue/src/main/webapp/app/shared/config/axios-interceptor.ts.ejs +0 -2
  138. package/generators/client/templates/vue/src/main/webapp/app/shared/data/data-utils.service.ts.ejs +3 -1
  139. package/generators/client/templates/vue/src/main/webapp/app/shims-vue.d.ts.ejs +17 -3
  140. package/generators/client/templates/vue/src/test/javascript/jest.conf.js.ejs +25 -10
  141. package/generators/client/templates/vue/src/test/javascript/spec/app/account/login-form/login-form.component.spec.ts.ejs +2 -2
  142. package/generators/client/templates/vue/src/test/javascript/spec/app/admin/user-management/user-management-edit.component.spec.ts.ejs +6 -4
  143. package/generators/client/templates/vue/src/test/javascript/spec/app/admin/user-management/user-management.component.spec.ts.ejs +4 -2
  144. package/generators/client/templates/vue/src/test/javascript/spec/app/core/jhi-navbar/jhi-navbar.component.spec.ts.ejs +10 -4
  145. package/generators/client/templates/vue/src/test/javascript/spec/app/entities/entities-menu.spec.ts.ejs +52 -0
  146. package/generators/client/templates/vue/src/test/javascript/spec/app/microfrontends/entities-menu.component.ts.ejs +4 -0
  147. package/generators/client/templates/vue/src/test/javascript/spec/app/microfrontends/entities-menu.vue.ejs +7 -0
  148. package/generators/client/templates/vue/src/test/javascript/spec/app/microfrontends/entities-router.ts.ejs +1 -0
  149. package/generators/client/templates/vue/src/test/javascript/spec/app/shared/config/axios-interceptor.spec.ts.ejs +0 -1
  150. package/generators/client/templates/vue/tsconfig.json.ejs +6 -10
  151. package/generators/client/templates/vue/tsconfig.spec.json.ejs +37 -0
  152. package/generators/client/templates/vue/webpack/config.js.ejs +50 -0
  153. package/generators/client/templates/vue/webpack/vue.utils.js.ejs +33 -32
  154. package/generators/client/templates/vue/webpack/webpack.common.js.ejs +150 -126
  155. package/generators/client/templates/vue/webpack/webpack.dev.js.ejs +19 -76
  156. package/generators/client/templates/vue/webpack/webpack.microfrontend.js.jhi.vue.ejs +77 -0
  157. package/generators/client/templates/vue/webpack/webpack.prod.js.ejs +5 -41
  158. package/generators/cloudfoundry/index.js +9 -9
  159. package/generators/common/index.js +12 -10
  160. package/generators/common/templates/.prettierrc.ejs +1 -1
  161. package/generators/common/templates/README.md.jhi.ejs +19 -0
  162. package/generators/common/templates/package.json +4 -4
  163. package/generators/cypress/index.js +12 -9
  164. package/generators/cypress/templates/cypress.json.ejs +16 -2
  165. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/login-page.spec.ts.ejs +3 -14
  166. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/password-page.spec.ts.ejs +33 -39
  167. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/register-page.spec.ts.ejs +52 -62
  168. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/reset-password-page.spec.ts.ejs +2 -10
  169. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/settings-page.spec.ts.ejs +25 -34
  170. package/generators/cypress/templates/src/test/javascript/cypress/integration/administration/administration.spec.ts.ejs +1 -22
  171. package/generators/cypress/templates/src/test/javascript/cypress/plugins/index.ts.ejs +4 -4
  172. package/generators/cypress/templates/src/test/javascript/cypress/support/commands.ts.ejs +67 -7
  173. package/generators/cypress/templates/src/test/javascript/cypress/support/entity.ts.ejs +4 -4
  174. package/generators/cypress/templates/src/test/javascript/cypress/support/index.ts.ejs +1 -6
  175. package/generators/cypress/templates/src/test/javascript/cypress/support/management.ts.ejs +1 -1
  176. package/generators/cypress/templates/src/test/javascript/cypress/support/navbar.ts.ejs +8 -8
  177. package/generators/cypress/templates/src/test/javascript/cypress/support/oauth2.ts.ejs +0 -9
  178. package/generators/database-changelog/index.js +33 -22
  179. package/generators/database-changelog-liquibase/index.js +12 -8
  180. package/generators/database-changelog-liquibase/templates/src/main/resources/config/liquibase/changelog/updated_entity_constraints.xml.ejs +1 -1
  181. package/generators/docker-compose/index.js +11 -12
  182. package/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs +1 -1
  183. package/generators/entities/index.js +35 -26
  184. package/generators/entities-client/index.js +10 -7
  185. package/generators/entity/index.js +81 -32
  186. package/generators/entity-client/files.js +7 -16
  187. package/generators/entity-client/index.js +22 -12
  188. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/delete/entity-management-delete-dialog.component.spec.ts.ejs +42 -44
  189. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/detail/entity-management-detail.component.html.ejs +1 -1
  190. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/detail/entity-management-detail.component.spec.ts.ejs +58 -60
  191. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.module.ts.ejs +1 -35
  192. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity.model.ts.ejs +1 -1
  193. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.html.ejs +4 -4
  194. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.spec.ts.ejs +110 -112
  195. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.ts.ejs +9 -2
  196. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/infinite-scroll-template.ejs +8 -8
  197. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/no-pagination-template.ejs +8 -8
  198. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/pagination-template.ejs +8 -8
  199. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/route/entity-management-routing-resolve.service.spec.ts.ejs +15 -6
  200. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/route/entity-management-routing.module.ts.ejs +1 -1
  201. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/service/entity.service.spec.ts.ejs +1 -1
  202. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/service/entity.service.ts.ejs +1 -1
  203. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.spec.ts.ejs +203 -198
  204. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.ts.ejs +5 -5
  205. package/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity.spec.ts.ejs +1 -1
  206. package/generators/entity-client/templates/common/src/test/javascript/cypress/integration/entity/entity.spec.ts.ejs +264 -127
  207. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-update.tsx.ejs +17 -14
  208. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.reducer.ts.ejs +5 -4
  209. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.tsx.ejs +11 -13
  210. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity-update.component.ts.ejs +32 -25
  211. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity-update.vue.ejs +6 -9
  212. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity.component.ts.ejs +2 -1
  213. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity.model.ts.ejs +1 -1
  214. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity.service.ts.ejs +2 -6
  215. package/generators/entity-client/templates/vue/src/test/javascript/spec/app/entities/entity-update.component.spec.ts.ejs +10 -7
  216. package/generators/entity-client/templates/vue/src/test/javascript/spec/app/entities/entity.component.spec.ts.ejs +5 -1
  217. package/generators/entity-client/templates/vue/src/test/javascript/spec/app/entities/entity.service.spec.ts.ejs +1 -1
  218. package/generators/entity-i18n/index.js +7 -4
  219. package/generators/entity-server/files.js +14 -0
  220. package/generators/entity-server/index.js +12 -8
  221. package/generators/entity-server/templates/src/main/java/package/common/get_all_template.ejs +2 -2
  222. package/generators/entity-server/templates/src/main/java/package/common/search_template.ejs +1 -1
  223. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.ejs +9 -8
  224. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryInternalImpl_reactive.java.ejs +16 -29
  225. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepository_reactive.java.ejs +3 -3
  226. package/generators/entity-server/templates/src/main/java/package/repository/EntitySqlHelper_reactive.java.ejs +46 -0
  227. package/generators/entity-server/templates/src/main/java/package/repository/rowmapper/EntityRowMapper.java.ejs +1 -1
  228. package/generators/entity-server/templates/src/main/java/package/repository/search/EntitySearchRepository.java.ejs +18 -2
  229. package/generators/entity-server/templates/src/main/java/package/repository/search/SortToFieldSortBuilderConverter.java.ejs +24 -0
  230. package/generators/entity-server/templates/src/main/java/package/service/dto/EntityDTO.java.ejs +8 -6
  231. package/generators/entity-server/templates/src/main/java/package/service/mapper/EntityMapper.java.ejs +5 -1
  232. package/generators/entity-server/templates/src/main/java/package/web/rest/EntityResource.java.ejs +41 -43
  233. package/generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIT.java.ejs +3 -3
  234. package/generators/gae/index.js +10 -10
  235. package/generators/generator-base-blueprint.js +14 -46
  236. package/generators/generator-base-private.js +44 -23
  237. package/generators/generator-base.js +58 -18
  238. package/generators/generator-constants.js +30 -23
  239. package/generators/generator-transforms.js +39 -27
  240. package/generators/heroku/index.js +14 -33
  241. package/generators/init/constants.cjs +1 -1
  242. package/generators/java/constants.cjs +1 -1
  243. package/generators/kubernetes/files.js +3 -0
  244. package/generators/kubernetes/index.js +10 -10
  245. package/generators/kubernetes/templates/db/couchbase.yml.ejs +1 -1
  246. package/generators/kubernetes/templates/deployment.yml.ejs +8 -3
  247. package/generators/kubernetes/templates/istio/destination-rule.yml.ejs +1 -1
  248. package/generators/kubernetes/templates/istio/gateway/grafana-gateway.yml.ejs +5 -2
  249. package/generators/kubernetes/templates/istio/gateway/jhipster-grafana-gateway.yml.ejs +5 -2
  250. package/generators/kubernetes/templates/istio/gateway/kiali-gateway.yml.ejs +10 -8
  251. package/generators/kubernetes/templates/istio/gateway/zipkin-gateway.yml.ejs +5 -2
  252. package/generators/kubernetes/templates/istio/gateway.yml.ejs +7 -5
  253. package/generators/kubernetes/templates/secret/couchbase-secret.yml.ejs +9 -0
  254. package/generators/kubernetes-base.js +1 -0
  255. package/generators/kubernetes-helm/files.js +3 -8
  256. package/generators/kubernetes-helm/index.js +10 -10
  257. package/generators/kubernetes-helm/templates/README-KUBERNETES-HELM.md.ejs +0 -1
  258. package/generators/kubernetes-helm/templates/app/Chart.yml.ejs +5 -0
  259. package/generators/kubernetes-helm/templates/app/helpers.tpl.ejs +0 -11
  260. package/generators/kubernetes-helm/templates/app/requirements.yml.ejs +5 -0
  261. package/generators/kubernetes-helm/templates/app/values.yml.ejs +68 -5
  262. package/generators/kubernetes-helm/templates/csvc/Chart.yml.ejs +1 -1
  263. package/generators/kubernetes-helm/templates/csvc/requirements.yml.ejs +1 -1
  264. package/generators/kubernetes-knative/index.js +10 -10
  265. package/generators/kubernetes-knative/templates/istio/gateway.yml.ejs +6 -4
  266. package/generators/kubernetes-knative/templates/service.yml.ejs +1 -1
  267. package/generators/languages/index.js +13 -13
  268. package/generators/languages/templates/src/main/webapp/i18n/vi/login.json +1 -1
  269. package/generators/openapi-client/index.js +13 -10
  270. package/generators/openshift/index.js +10 -11
  271. package/generators/openshift/templates/deployment.yml.ejs +1 -1
  272. package/generators/page/index.js +12 -10
  273. package/generators/server/__snapshots__/generator.spec.mjs.snap +28 -15
  274. package/generators/server/cleanup.js +151 -0
  275. package/generators/server/files-sql.js +52 -0
  276. package/generators/server/files.js +31 -14
  277. package/generators/server/index.js +86 -33
  278. package/generators/server/templates/build.gradle.ejs +231 -189
  279. package/generators/server/templates/gradle.properties.ejs +12 -12
  280. package/generators/server/templates/npmw +8 -6
  281. package/generators/server/templates/npmw.cmd +13 -8
  282. package/generators/server/templates/pom.xml.ejs +425 -217
  283. package/generators/server/templates/sql/reactive/src/main/java/package/repository/UserSqlHelper.java.ejs +48 -0
  284. package/generators/server/templates/src/main/docker/app.yml.ejs +1 -1
  285. package/generators/server/templates/src/main/docker/config/realm-config/jhipster-realm.json.ejs +2 -2
  286. package/generators/server/templates/src/main/java/package/config/LocaleConfiguration.java.ejs +3 -2
  287. package/generators/server/templates/src/main/java/package/config/OpenApiConfiguration.java.ejs +17 -54
  288. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration.java.ejs +5 -5
  289. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration_reactive.java.ejs +4 -6
  290. package/generators/server/templates/src/main/java/package/config/WebConfigurer.java.ejs +0 -3
  291. package/generators/server/templates/src/main/java/package/config/neo4j/Neo4jMigrations.java.ejs +19 -9
  292. package/generators/server/templates/src/main/java/package/management/SecurityMetersService.java.ejs +68 -0
  293. package/generators/server/templates/src/main/java/package/repository/AuthorityRepository.java.ejs +2 -2
  294. package/generators/server/templates/src/main/java/package/repository/UserRepository.java.ejs +0 -25
  295. package/generators/server/templates/src/main/java/package/security/jwt/TokenProvider.java.ejs +31 -4
  296. package/generators/server/templates/src/main/java/package/security/oauth2/CustomClaimConverter.java.ejs +23 -11
  297. package/generators/server/templates/src/main/java/package/service/UserService.java.ejs +16 -8
  298. package/generators/server/templates/src/main/java/package/service/dto/UserDTO.java.ejs +6 -6
  299. package/generators/server/templates/src/main/java/package/web/filter/ModifyServersOpenApiFilter.java.ejs +3 -2
  300. package/generators/server/templates/src/main/java/package/web/filter/SpaWebFilter.java.ejs +1 -1
  301. package/generators/server/templates/src/main/java/package/web/rest/PublicUserResource.java.ejs +2 -2
  302. package/generators/server/templates/src/main/java/package/web/rest/UserResource.java.ejs +2 -2
  303. package/generators/server/templates/src/main/resources/config/application.yml.ejs +22 -8
  304. package/generators/server/templates/src/main/resources/logback-spring.xml.ejs +1 -2
  305. package/generators/server/templates/src/main/resources/static/microservices_index.html.ejs +1 -1
  306. package/generators/server/templates/src/test/java/package/cucumber/CucumberIT.java.ejs +2 -6
  307. package/generators/server/templates/src/test/java/package/cucumber/CucumberTestContextConfiguration.java.ejs +2 -3
  308. package/generators/server/templates/src/test/java/package/cucumber/stepdefs/UserStepDefs.java.ejs +41 -6
  309. package/generators/server/templates/src/test/java/package/management/SecurityMetersServiceTests.java.ejs +113 -0
  310. package/generators/server/templates/src/test/java/package/security/jwt/JWTFilterTest.java.ejs +6 -1
  311. package/generators/server/templates/src/test/java/package/security/jwt/TokenProviderSecurityMetersTests.java.ejs +198 -0
  312. package/generators/server/templates/src/test/java/package/security/jwt/TokenProviderTest.java.ejs +13 -3
  313. package/generators/server/templates/src/test/java/package/security/oauth2/AuthorizationHeaderUtilTest.java.ejs +17 -3
  314. package/generators/server/templates/src/test/java/package/security/oauth2/CustomClaimConverterIT.java.ejs +63 -0
  315. package/generators/server/templates/src/test/java/package/service/MailServiceIT.java.ejs +1 -1
  316. package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT.java.ejs +2 -3
  317. package/generators/server/templates/src/test/java/package/web/rest/ClientForwardControllerTest.java.ejs +9 -0
  318. package/generators/server/templates/src/test/resources/junit-platform.properties.ejs +2 -0
  319. package/generators/server/templates/src/test/resources/logback.xml.ejs +1 -1
  320. package/generators/server/templates/src/test/{features → resources/package/features}/gitkeep +0 -0
  321. package/generators/server/templates/src/test/{features → resources/package/features}/user/user.feature.ejs +0 -0
  322. package/generators/spring-controller/index.js +9 -7
  323. package/generators/spring-controller/templates/src/test/java/package/web/rest/ResourceIT.java.ejs +1 -1
  324. package/generators/spring-service/index.js +10 -7
  325. package/generators/upgrade/index.js +4 -5
  326. package/generators/utils.js +2 -2
  327. package/generators/workspaces/index.js +16 -7
  328. package/jdl/jhipster/default-application-options.js +9 -7
  329. package/package.json +22 -22
  330. package/utils/entity.js +17 -4
  331. package/utils/field.js +11 -1
  332. package/utils/multi-step-transform/index.js +8 -8
  333. package/generators/client/templates/react/.npmrc.ejs +0 -1
  334. package/generators/client/templates/vue/webpack/dev.env.js.ejs +0 -17
  335. package/generators/client/templates/vue/webpack/env.js.ejs +0 -67
  336. package/generators/client/templates/vue/webpack/loader.conf.js.ejs +0 -20
  337. package/generators/client/templates/vue/webpack/prod.env.js.ejs +0 -15
  338. package/generators/server/templates/src/main/java/package/config/apidocs/GatewaySwaggerResourcesProvider.java.ejs +0 -91
  339. package/generators/server/templates/src/test/java/package/config/apidocs/GatewaySwaggerResourcesProviderTest.java.ejs +0 -79
  340. package/generators/server/templates/src/test/resources/cucumber.properties.ejs +0 -1
@@ -66,18 +66,22 @@ import AlertService from '@/shared/alert/alert.service';
66
66
  hasManyToMany = true;
67
67
  } _%>
68
68
  <%_ if (!importEntitiesSeen.includes(otherEntityAngularName)) { _%>
69
- <% if (relationship.otherEntityUser && !authenticationTypeOauth2) { %>
70
- import UserService from '@/admin/user-management/user-management.service';
71
- <% } else if (relationship.otherEntityUser && authenticationTypeOauth2) { %>
72
- import UserOAuth2Service from '@/entities/user/user.oauth2.service';
73
- <% } else if (!relationship.otherEntityUser) { %>
69
+ <% if (relationship.otherEntityUser && (!skipUserManagement || authenticationTypeOauth2)) { %>
70
+ import UserService from '@/entities/user/user.service';
71
+ <% } else { %>
74
72
  import <%= otherEntityAngularName %>Service from '@/entities/<%= otherEntityClientRootFolder %><%= otherEntityFolderName %>/<%= otherEntityFileName %>.service';
75
73
  import { I<%= otherEntityAngularName %> } from '@/shared/model/<%= otherEntityModelName %>.model';
76
- <% } %>
74
+ <% } %>
75
+ <%_ } _%>
76
+ <%_ importEntitiesSeen.push(otherEntityAngularName); _%>
77
+ <%_ } _%>
77
78
  <%_ } _%>
78
- <%_ importEntitiesSeen.push(otherEntityAngularName); } } _%>
79
79
  import { I<%= entityAngularName %>, <%= entityAngularName %> } from '@/shared/model/<%= entityModelFileName %>.model';
80
80
  import <%= entityAngularName %>Service from './<%= entityFileName %>.service';
81
+ <%_ const enumImports = generateEntityClientEnumImports(fields); _%>
82
+ <%_ enumImports.forEach( (importedPath, importedType) => { _%>
83
+ import { <%- importedType %> } from '<%- importedPath %>';
84
+ <%_ }); _%>
81
85
 
82
86
  const validations: any = {
83
87
  <%= entityInstance %>: {
@@ -113,7 +117,7 @@ _%>
113
117
  <%_ } _%>
114
118
  <%_ for (relationship of relationships) { _%>
115
119
  <%_ if (relationship.relationshipValidate && relationship.relationshipRequired) { _%>
116
- <%= relationship.relationshipFieldName %>: {
120
+ <%= relationship.collection ? relationship.relationshipFieldNamePlural : relationship.relationshipFieldName %>: {
117
121
  required
118
122
  },
119
123
  <%_ } _%>
@@ -138,16 +142,21 @@ export default class <%= entityAngularName %>Update extends <% if (fieldsContain
138
142
  const otherEntityAngularName = relationship.otherEntityAngularName;
139
143
  _%>
140
144
  <%_ if (!entitiesSeen.includes(otherEntityAngularName)) { %>
141
- <%_ if (otherEntityAngularName === 'User' && authenticationType === 'oauth2') { _%>
142
- @Inject('userOAuth2Service') private userOAuth2Service: () => UserOAuth2Service;
143
- <%_ } else {_%>
145
+ <% if (relationship.otherEntityUser && (!skipUserManagement || authenticationTypeOauth2)) { %>
146
+ @Inject('userService') private userService: () => UserService;
147
+ <% } else { %>
144
148
  @Inject('<%= otherEntityName %>Service') private <%= otherEntityName %>Service: () => <%= otherEntityAngularName %>Service;
145
- <%_ } _%>
146
- <%_ } _%>
147
- <%_ if (!entitiesSeen.includes(otherEntityNamePlural)) { %>
149
+ <%_ } _%>
150
+ <%_ } _%>
151
+ <%_ if (!entitiesSeen.includes(otherEntityNamePlural)) { %>
148
152
  public <%= otherEntityNamePlural %> : <% if (otherEntityAngularName === 'User') { %>Array<any><%_ } else { _%>I<%= otherEntityAngularName %>[]<%_ } _%> = [];
153
+ <%_ } _%>
154
+ <%_ entitiesSeen.push(otherEntityAngularName);entitiesSeen.push(otherEntityNamePlural); _%>
149
155
  <%_ } _%>
150
- <%_ entitiesSeen.push(otherEntityAngularName);entitiesSeen.push(otherEntityNamePlural); } } _%>
156
+ <%_ } _%>
157
+ <%_ enumImports.forEach( (importedPath, importedType) => { _%>
158
+ public <%- _.lowerFirst(importedType) %>Values : string[] = Object.keys(<%- importedType %>);
159
+ <%_ }); _%>
151
160
  public isSaving = false;
152
161
  public currentLanguage = '';
153
162
 
@@ -310,24 +319,22 @@ _%>
310
319
  if (!entitiesSet.has(otherEntityName)) {
311
320
  entitiesSet.add(otherEntityName);
312
321
  _%>
313
- <%_ if (otherEntityAngularName === 'User' && authenticationType === 'oauth2') { _%>
314
- this.userOAuth2Service().retrieve().then((res) => {
315
- <%_ } else {_%>
322
+ <% if (relationship.otherEntityUser && (!skipUserManagement || authenticationTypeOauth2)) { %>
323
+ this.userService().retrieve().then((res) => {
324
+ <%_ } else { _%>
316
325
  this.<%= otherEntityName %>Service().retrieve().then((res) => {
317
- <%_ } _%>
326
+ <%_ } _%>
318
327
  this.<%= otherEntityNamePlural %> = res.data;
319
328
  });
320
- <%_ } } } _%>
329
+ <%_ } _%>
330
+ <%_ } _%>
331
+ <%_ } _%>
321
332
  }
322
333
 
323
334
  <%_ if (hasManyToMany) { _%>
324
335
  public getSelected(selectedVals, option) : any {
325
336
  if (selectedVals) {
326
- for (let i = 0; i < selectedVals.length; i++) {
327
- if (option.id === selectedVals[i].id) {
328
- return selectedVals[i];
329
- }
330
- }
337
+ return selectedVals.find(value => option.id === value.id) ?? option;
331
338
  }
332
339
  return option;
333
340
  }
@@ -34,12 +34,9 @@ _%>
34
34
  <label class="form-control-label" v-text="$t('<%= translationKey %>')" for="<%= entityFileName %>-<%= fieldName %>"><%= fieldNameHumanized %></label>
35
35
  <%_ if (field.fieldIsEnum) { _%>
36
36
  <select class="form-control" name="<%= fieldName %>" :class="{'valid': !$v.<%= entityInstance %>.<%= fieldName %>.$invalid, 'invalid': $v.<%= entityInstance %>.<%= fieldName %>.$invalid }" v-model="$v.<%= entityInstance %>.<%= fieldName %>.$model" id="<%= entityFileName %>-<%= fieldName %>" data-cy="<%= fieldName %>" <% if (field.fieldValidate === true && field.fieldValidateRules.includes('required')) { %> required<% } %>>
37
- <%_ const enumPrefix = frontendAppName + '.'+ fieldType;
38
- const values = field.enumValues;
39
- for (key in values) {
40
- const enumValue = values[key]; _%>
41
- <option value="<%= enumValue.name %>" v-bind:label="$t('<%=enumPrefix%>.<%= enumValue.name %>')"><%= enumValue.value %></option>
42
- <%_ } _%>
37
+ <%_ const enumPrefix = frontendAppName + '.'+ fieldType; _%>
38
+ <option v-for="<%= _.lowerFirst(fieldType) %> in <%= _.lowerFirst(fieldType)%>Values" :key="<%= _.lowerFirst(fieldType) %>" v-bind:value="<%= _.lowerFirst(fieldType) %>" v-bind:label="$t('<%= enumPrefix %>.'+<%= _.lowerFirst(fieldType) %>)">{{ <%= _.lowerFirst(fieldType) %> }}</option>
39
+
43
40
  </select>
44
41
  <%_ } else { _%>
45
42
  <%_ if (field.fieldTypeBinary && !field.blobContentTypeText) { _%>
@@ -195,15 +192,15 @@ _%>
195
192
  <%_ } else if (relationship.relationshipManyToMany && ownerSide) { _%>
196
193
  <div class="form-group">
197
194
  <label v-text="$t('<%= translationKey %>')" for="<%= entityFileName %>-<%= relationshipName %>"><%= relationshipNameHumanized %></label>
198
- <select class="form-control" id="<%= entityFileName %>-<%= relationshipName %>" data-cy="<%= relationshipFieldName %>" multiple name="<%= relationshipName %>" v-if="<%=entityInstance %>.<%=relationshipFieldNamePlural %> !== undefined" v-model="<%=entityInstance %>.<%=relationshipFieldNamePlural %>"<% if (relationshipRequired) { %> required<% } %>>
195
+ <select class="form-control" id="<%= entityFileName %>-<%= relationshipFieldNamePlural %>" data-cy="<%= relationshipFieldName %>" multiple name="<%= relationshipName %>" v-if="<%=entityInstance %>.<%=relationshipFieldNamePlural %> !== undefined" v-model="<%=entityInstance %>.<%=relationshipFieldNamePlural %>"<% if (relationshipRequired) { %> required<% } %>>
199
196
  <option v-bind:value="getSelected(<%=entityInstance %>.<%=relationshipFieldNamePlural %>, <%=otherEntityName %>Option)" v-for="<%=otherEntityName %>Option in <%=otherEntityNamePlural %>" :key="<%=otherEntityName %>Option.id">{{<%=otherEntityName %>Option.<%=otherEntityField %>}}</option>
200
197
  </select>
201
198
  </div>
202
199
  <%_ } _%>
203
200
  <%_ if (relationship.relationshipValidate) { _%>
204
- <div v-if="$v.<%= entityInstance %>.<%= relationshipName %>.$anyDirty && $v.<%= entityInstance %>.<%= relationshipName %>.$invalid">
201
+ <div v-if="$v.<%= entityInstance %>.<%= relationship.collection ? relationshipFieldNamePlural : relationshipFieldName %>.$anyDirty && $v.<%= entityInstance %>.<%= relationship.collection ? relationshipFieldNamePlural : relationshipFieldName %>.$invalid">
205
202
  <%_ if (relationshipRequired) { _%>
206
- <small class="form-text text-danger" v-if="!$v.<%= entityInstance %>.<%= relationshipName %>.required" v-text="$t('entity.validation.required')">
203
+ <small class="form-text text-danger" v-if="!$v.<%= entityInstance %>.<%= relationship.collection ? relationshipFieldNamePlural : relationshipFieldName %>.required" v-text="$t('entity.validation.required')">
207
204
  This field is required.
208
205
  </small>
209
206
  <%_ } _%>
@@ -1,5 +1,6 @@
1
+ <%_ if (fieldsContainBlob || paginationInfiniteScroll) { -%>
1
2
  import { mixins } from 'vue-class-component';
2
-
3
+ <%_ } -%>
3
4
  import { Component, Vue, Inject } from 'vue-property-decorator';
4
5
  import Vue2Filters from 'vue2-filters';
5
6
  import { I<%= entityAngularName %> } from '@/shared/model/<%= entityModelFileName %>.model';
@@ -32,7 +32,7 @@ import { <%- importedType %> } from '<%- importedPath %>';
32
32
  <%_ }); _%>
33
33
 
34
34
  <%_ enumImports.forEach( (importedPath, importedType) => { _%>
35
- import { <%- importedType %> } from '<%- importedPath.replace('app/', '@/'); %>';
35
+ import { <%- importedType %> } from '<%- importedPath %>';
36
36
  <%_ }); _%>
37
37
  export interface I<%= entityAngularName %> {
38
38
  <%_ variablesWithTypes.forEach(variablesWithType => { _%>
@@ -4,13 +4,9 @@ import buildPaginationQueryOpts from '@/shared/sort/sorts';
4
4
  <% } %>
5
5
  import { I<%= entityAngularName %> } from '@/shared/model/<%= entityModelFileName %>.model';
6
6
 
7
- <%_
8
- const baseApi = (applicationTypeGateway && locals.microserviceName) ? 'services/' + microserviceName.toLowerCase() + '/api/' : 'api/';
9
- _%>
10
-
11
- const baseApiUrl = '<%= baseApi + entityApiUrl %>';
7
+ const baseApiUrl = '<%= entityApi %>api/<%= entityApiUrl %>';
12
8
  <%_ if (searchEngine) { _%>
13
- const baseSearchApiUrl = '<%= baseApi %>_search/<%= entityApiUrl %>?query=';
9
+ const baseSearchApiUrl = '<%= entityApi %>api/_search/<%= entityApiUrl %>?query=';
14
10
  <%_ } _%>
15
11
 
16
12
  export default class <%= entityAngularName %>Service {
@@ -21,6 +21,7 @@
21
21
  import { shallowMount, createLocalVue, Wrapper } from '@vue/test-utils';
22
22
  import sinon, { SinonStubbedInstance } from 'sinon';
23
23
  import Router from 'vue-router';
24
+ import { ToastPlugin } from 'bootstrap-vue';
24
25
 
25
26
  <%_ let dayJsIncluded = false;
26
27
  for (field of fields.filter(field => !field.id)) { _%>
@@ -44,10 +45,8 @@ import <%= entityAngularName %>Service from '@/entities/<%= entityFolderName %>/
44
45
  const otherEntityFolderName = relationship.otherEntityFileName;
45
46
  const otherEntityClientRootFolder = relationship.otherEntityClientRootFolder; _%>
46
47
  <%_ if (!importEntitiesSeen.includes(otherEntityAngularName)) { _%>
47
- <% if (relationship.otherEntityUser && !authenticationTypeOauth2) { %>
48
- import UserService from '@/admin/user-management/user-management.service';
49
- <%_ } else if (relationship.otherEntityUser && authenticationTypeOauth2) { _%>
50
- import UserOAuth2Service from '@/entities/user/user.oauth2.service';
48
+ <% if (relationship.otherEntityUser && (!skipUserManagement || authenticationTypeOauth2)) { %>
49
+ import UserService from '@/entities/user/user.service';
51
50
  <% } else if (!relationship.otherEntityUser) { %>
52
51
  import <%= otherEntityAngularName %>Service from '@/entities/<%= otherEntityClientRootFolder %><%= otherEntityFolderName %>/<%= otherEntityFileName %>.service';
53
52
  <%_ } _%>
@@ -66,6 +65,7 @@ const i18n = config.initI18N(localVue);
66
65
  const store = config.initVueXStore(localVue);
67
66
  const router = new Router();
68
67
  localVue.use(Router);
68
+ localVue.use(ToastPlugin);
69
69
  localVue.component('font-awesome-icon', {});
70
70
  localVue.component('b-input-group', {});
71
71
  localVue.component('b-input-group-prepend', {});
@@ -99,10 +99,13 @@ describe('Component Tests', () => {
99
99
  const otherEntityName = relationship.otherEntityName;
100
100
  const otherEntityAngularName = relationship.otherEntityAngularName; _%>
101
101
  <%_ if (!entitiesSeen.includes(otherEntityAngularName)) { %>
102
- <%_ if (relationship.otherEntityUser && authenticationTypeOauth2) { _%>
103
- userOAuth2Service: () => new UserOAuth2Service(),
102
+ <% if (relationship.otherEntityUser && (!skipUserManagement || authenticationTypeOauth2)) { %>
103
+ userService: () => new UserService(),
104
104
  <%_ } else { _%>
105
- <%= otherEntityName %>Service: () => new <%= otherEntityAngularName %>Service(),
105
+ <%= otherEntityName %>Service: () =>
106
+ sinon.createStubInstance<<%= otherEntityAngularName %>Service>(<%= otherEntityAngularName %>Service, {
107
+ retrieve: sinon.stub().resolves({}),
108
+ } as any),
106
109
  <%_ } _%>
107
110
  <%_ } _%>
108
111
  <%_ entitiesSeen.push(otherEntityAngularName); _%>
@@ -22,6 +22,7 @@ _%>
22
22
  /* tslint:disable max-line-length */
23
23
  import { shallowMount, createLocalVue, Wrapper } from '@vue/test-utils';
24
24
  import sinon, { SinonStubbedInstance } from 'sinon';
25
+ import { ToastPlugin } from 'bootstrap-vue';
25
26
 
26
27
  import * as config from '@/shared/config/config';
27
28
  import <%= entityAngularName %>Component from '@/entities/<%= entityFolderName %>/<%= entityFileName %>.vue';
@@ -30,6 +31,7 @@ import <%= entityAngularName %>Service from '@/entities/<%= entityFolderName %>/
30
31
  import AlertService from '@/shared/alert/alert.service';
31
32
 
32
33
  const localVue = createLocalVue();
34
+ localVue.use(ToastPlugin);
33
35
 
34
36
  config.initVueApp(localVue);
35
37
  <%_ if (enableTranslation) { _%>
@@ -185,12 +187,14 @@ describe('Component Tests', () => {
185
187
 
186
188
  // WHEN
187
189
  comp.prepareRemove({id: <%- tsKeyId %>});
190
+ expect(<%= entityInstance %>ServiceStub.retrieve.callCount).toEqual(1);
191
+
188
192
  comp.remove<%= entityAngularName %>();
189
193
  await comp.$nextTick();
190
194
 
191
195
  // THEN
192
196
  expect(<%= entityInstance %>ServiceStub.delete.called).toBeTruthy();
193
- expect(<%= entityInstance %>ServiceStub.retrieve.callCount).toEqual(1);
197
+ expect(<%= entityInstance %>ServiceStub.retrieve.callCount).toEqual(2);
194
198
  });
195
199
  <%_ } _%>
196
200
  });
@@ -33,7 +33,7 @@ import { <%_ if (fieldsContainLocalDate) { _%>DATE_FORMAT,<%_ } if (fieldsContai
33
33
  import <%= entityAngularName %>Service from '@/entities/<%= entityFolderName %>/<%= entityFileName %>.service';
34
34
  import { <%= entityAngularName %> } from '@/shared/model/<%= entityModelFileName %>.model';
35
35
  <%_ enumImports.forEach( (importedPath, importedType) => { _%>
36
- import { <%- importedType %> } from '<%- importedPath.replace('app/', '@/') %>';
36
+ import { <%- importedType %> } from '<%- importedPath %>';
37
37
  <%_ }); _%>
38
38
 
39
39
  const error = {
@@ -23,7 +23,6 @@ const { GENERATOR_ENTITY_I_18_N } = require('../generator-list');
23
23
  const BaseBlueprintGenerator = require('../generator-base-blueprint');
24
24
 
25
25
  /* constants used throughout */
26
- let useBlueprints;
27
26
 
28
27
  module.exports = class extends BaseBlueprintGenerator {
29
28
  constructor(args, options, features) {
@@ -31,8 +30,12 @@ module.exports = class extends BaseBlueprintGenerator {
31
30
 
32
31
  this.entity = this.options.context;
33
32
  this.jhipsterContext = this.options.jhipsterContext || this.options.context;
33
+ }
34
34
 
35
- useBlueprints = !this.fromBlueprint && this.instantiateBlueprints(GENERATOR_ENTITY_I_18_N, { context: this.options.context });
35
+ async _postConstruct() {
36
+ if (!this.fromBlueprint) {
37
+ await this.composeWithBlueprints(GENERATOR_ENTITY_I_18_N, { context: this.options.context });
38
+ }
36
39
  }
37
40
 
38
41
  // Public API method used by the getter and also by Blueprints
@@ -47,7 +50,7 @@ module.exports = class extends BaseBlueprintGenerator {
47
50
  }
48
51
 
49
52
  get default() {
50
- if (useBlueprints) return;
53
+ if (this.delegateToBlueprint) return {};
51
54
  return this._default();
52
55
  }
53
56
 
@@ -57,7 +60,7 @@ module.exports = class extends BaseBlueprintGenerator {
57
60
  }
58
61
 
59
62
  get writing() {
60
- if (useBlueprints) return;
63
+ if (this.delegateToBlueprint) return {};
61
64
  return this._writing();
62
65
  }
63
66
  };
@@ -172,6 +172,16 @@ const serverFiles = {
172
172
  },
173
173
  ],
174
174
  },
175
+ {
176
+ condition: generator => generator.searchEngine === ELASTICSEARCH && !generator.embedded && !generator.paginationNo,
177
+ path: SERVER_MAIN_SRC_DIR,
178
+ templates: [
179
+ {
180
+ file: 'package/repository/search/SortToFieldSortBuilderConverter.java',
181
+ renameTo: generator => `${generator.entityAbsoluteFolder}/repository/search/SortToFieldSortBuilderConverter.java`,
182
+ },
183
+ ],
184
+ },
175
185
  {
176
186
  condition: generator => !generator.reactive && !generator.embedded && generator.databaseType !== COUCHBASE,
177
187
  path: SERVER_MAIN_SRC_DIR,
@@ -200,6 +210,10 @@ const serverFiles = {
200
210
  file: 'package/repository/EntityRepositoryInternalImpl_reactive.java',
201
211
  renameTo: generator => `${generator.entityAbsoluteFolder}/repository/${generator.entityClass}RepositoryInternalImpl.java`,
202
212
  },
213
+ {
214
+ file: 'package/repository/EntitySqlHelper_reactive.java',
215
+ renameTo: generator => `${generator.entityAbsoluteFolder}/repository/${generator.entityClass}SqlHelper.java`,
216
+ },
203
217
  {
204
218
  file: 'package/repository/rowmapper/EntityRowMapper.java',
205
219
  renameTo: generator => `${generator.entityAbsoluteFolder}/repository/rowmapper/${generator.entityClass}RowMapper.java`,
@@ -27,7 +27,6 @@ const { SQL } = require('../../jdl/jhipster/database-types');
27
27
  const { isReservedTableName } = require('../../jdl/jhipster/reserved-keywords');
28
28
 
29
29
  /* constants used throughout */
30
- let useBlueprints;
31
30
 
32
31
  module.exports = class extends BaseBlueprintGenerator {
33
32
  constructor(args, options, features) {
@@ -36,8 +35,12 @@ module.exports = class extends BaseBlueprintGenerator {
36
35
  this.entity = this.options.context;
37
36
 
38
37
  this.jhipsterContext = this.options.jhipsterContext || this.options.context;
38
+ }
39
39
 
40
- useBlueprints = !this.fromBlueprint && this.instantiateBlueprints(GENERATOR_ENTITY_SERVER, { context: this.options.context });
40
+ async _postConstruct() {
41
+ if (!this.fromBlueprint) {
42
+ await this.composeWithBlueprints(GENERATOR_ENTITY_SERVER, { context: this.options.context });
43
+ }
41
44
  }
42
45
 
43
46
  // Public API method used by the getter and also by Blueprints
@@ -51,7 +54,7 @@ module.exports = class extends BaseBlueprintGenerator {
51
54
  }
52
55
 
53
56
  get initializing() {
54
- if (useBlueprints) return;
57
+ if (this.delegateToBlueprint) return {};
55
58
  return this._initializing();
56
59
  }
57
60
 
@@ -69,7 +72,7 @@ module.exports = class extends BaseBlueprintGenerator {
69
72
  }
70
73
 
71
74
  get preparing() {
72
- if (useBlueprints) return;
75
+ if (this.delegateToBlueprint) return {};
73
76
  return this._preparing();
74
77
  }
75
78
 
@@ -98,7 +101,7 @@ module.exports = class extends BaseBlueprintGenerator {
98
101
  }
99
102
 
100
103
  get preparingFields() {
101
- if (useBlueprints) return;
104
+ if (this.delegateToBlueprint) return {};
102
105
  return this._preparingFields();
103
106
  }
104
107
 
@@ -157,6 +160,7 @@ module.exports = class extends BaseBlueprintGenerator {
157
160
  },
158
161
 
159
162
  processUniqueEntityTypes() {
163
+ this.reactiveOtherEntities = new Set(this.reactiveEagerRelations.map(rel => rel.otherEntity));
160
164
  this.reactiveUniqueEntityTypes = new Set(this.reactiveEagerRelations.map(rel => rel.otherEntityNameCapitalized));
161
165
  this.reactiveUniqueEntityTypes.add(this.entityClass);
162
166
  },
@@ -164,7 +168,7 @@ module.exports = class extends BaseBlueprintGenerator {
164
168
  }
165
169
 
166
170
  get default() {
167
- if (useBlueprints) return;
171
+ if (this.delegateToBlueprint) return {};
168
172
  return this._default();
169
173
  }
170
174
 
@@ -177,7 +181,7 @@ module.exports = class extends BaseBlueprintGenerator {
177
181
  }
178
182
 
179
183
  get writing() {
180
- if (useBlueprints) return;
184
+ if (this.delegateToBlueprint) return {};
181
185
  return this._writing();
182
186
  }
183
187
 
@@ -191,7 +195,7 @@ module.exports = class extends BaseBlueprintGenerator {
191
195
  }
192
196
 
193
197
  get postWriting() {
194
- if (useBlueprints) return;
198
+ if (this.delegateToBlueprint) return {};
195
199
  return this._postWriting();
196
200
  }
197
201
 
@@ -25,7 +25,7 @@
25
25
  const reactiveEntityToDto = (dtoMapstruct && !viaService) ? `.map(${entityToDtoReference})` : '';
26
26
  _%>
27
27
  <%_ if (jpaMetamodelFiltering) { _%>
28
- public ResponseEntity<List<<%= instanceType %>>> getAll<%= entityClassPlural %>(<%= entityClass %>Criteria criteria<% if (!paginationNo) { %>, Pageable pageable<% if (reactive) { %>, ServerHttpRequest request<% } %><% } %>) {
28
+ public ResponseEntity<List<<%= instanceType %>>> getAll<%= entityClassPlural %>(<%= entityClass %>Criteria criteria<% if (!paginationNo) { %>, @org.springdoc.api.annotations.ParameterObject Pageable pageable<% if (reactive) { %>, ServerHttpRequest request<% } %><% } %>) {
29
29
  log.debug("REST request to get <%= entityClassPlural %> by criteria: {}", criteria);
30
30
  <%_ if (paginationNo) { _%>
31
31
  List<<%= instanceType %>> entityList = <%= entityInstance %>QueryService.findByCriteria(criteria);
@@ -65,7 +65,7 @@ _%>
65
65
  return <%= entityInstance %>Repository.<% if (relationshipsContainEagerLoad) { %>findAllWithEagerRelationships<% } else { %>findAll<% } %>()<% if (reactive) { %>.collectList()<% } %>;
66
66
  <%_ } _%>
67
67
  <%_ } else { _%>
68
- public <% if (reactive) { %>Mono<ResponseEntity<List<<%= instanceType %>>>><% } else { %>ResponseEntity<List<<%= instanceType %>>><% } %> getAll<%= entityClassPlural %>(Pageable pageable<% if (reactive) { %>, ServerHttpRequest request<% } %><% if (fieldsContainNoOwnerOneToOne) { %>, @RequestParam(required = false) String filter<% } %><% if (relationshipsContainEagerLoad) { %>, @RequestParam(required = false, defaultValue = "false") boolean eagerload<% } %>) {<%- include('get_all_stream_template', {viaService: viaService}); -%>
68
+ public <% if (reactive) { %>Mono<ResponseEntity<List<<%= instanceType %>>>><% } else { %>ResponseEntity<List<<%= instanceType %>>><% } %> getAll<%= entityClassPlural %>(@org.springdoc.api.annotations.ParameterObject Pageable pageable<% if (reactive) { %>, ServerHttpRequest request<% } %><% if (fieldsContainNoOwnerOneToOne) { %>, @RequestParam(required = false) String filter<% } %><% if (relationshipsContainEagerLoad) { %>, @RequestParam(required = false, defaultValue = "false") boolean eagerload<% } %>) {<%- include('get_all_stream_template', {viaService: viaService}); -%>
69
69
  log.debug("REST request to get a page of <%= entityClassPlural %>");
70
70
  <%_ if (!reactive) { _%>
71
71
  <%_ if (relationshipsContainEagerLoad) { _%>
@@ -27,7 +27,7 @@ if (paginationNo) { %>
27
27
  public <% if (reactive) { %>Mono<<% } %>List<<%= instanceType %>><% if (reactive) { %>><% } %> search<%= entityClassPlural %>(@RequestParam String query) {
28
28
  log.debug("REST request to search <%= entityClassPlural %> for query {}", query);<%- include('search_stream_template', {viaService: viaService, fromResource: true}); -%>
29
29
  <% } if (!paginationNo) { %>
30
- public <% if (reactive) { %>Mono<<% } %>ResponseEntity<<%= listOrFlux %><<%= instanceType %>>><% if (reactive) { %>><% } %> search<%= entityClassPlural %>(@RequestParam String query, Pageable pageable<% if (reactive) { %>, ServerHttpRequest request<% } %>) {
30
+ public <% if (reactive) { %>Mono<<% } %>ResponseEntity<<%= listOrFlux %><<%= instanceType %>>><% if (reactive) { %>><% } %> search<%= entityClassPlural %>(@RequestParam String query, @org.springdoc.api.annotations.ParameterObject Pageable pageable<% if (reactive) { %>, ServerHttpRequest request<% } %>) {
31
31
  log.debug("REST request to search for a page of <%= entityClassPlural %> for query {}", query);
32
32
  <%_ if (!reactive) { _%>
33
33
  <%_ if (viaService) { _%>
@@ -50,11 +50,8 @@ package <%= entityAbsolutePackage %>.domain;
50
50
  <%_ if (relationshipsContainOtherSideIgnore) { _%>
51
51
  import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
52
52
  <%_ } _%>
53
- <%_ if (!dtoMapstruct && typeof javadoc !== 'undefined') { _%>
54
- import io.swagger.annotations.ApiModel;
55
- <%_ } _%>
56
- <%_ if (!dtoMapstruct && importApiModelProperty) { _%>
57
- import io.swagger.annotations.ApiModelProperty;
53
+ <%_ if (!dtoMapstruct && (typeof javadoc !== 'undefined' || importApiModelProperty)) { _%>
54
+ import io.swagger.v3.oas.annotations.media.Schema;
58
55
  <%_ } _%>
59
56
 
60
57
  import java.io.Serializable;
@@ -80,6 +77,10 @@ Object.keys(uniqueEnums).forEach(function(element) { _%>
80
77
  import <%= entityAbsolutePackage %>.domain.enumeration.<%= element %>;
81
78
  <%_ }); _%>
82
79
 
80
+ <%_ for (const otherEntity of otherEntities.filter(otherEntity => otherEntity.entityPackage !== entityPackage)) { _%>
81
+ import <%= otherEntity.entityAbsoluteClass %>;
82
+ <%_ } _%>
83
+
83
84
  <%_ if (typeof javadoc === 'undefined') { _%>
84
85
  /**
85
86
  * A <%= persistClass %>.
@@ -87,7 +88,7 @@ import <%= entityAbsolutePackage %>.domain.enumeration.<%= element %>;
87
88
  <%_ } else { _%>
88
89
  <%- formatAsClassJavadoc(javadoc) %>
89
90
  <%_ if (!dtoMapstruct) { _%>
90
- @ApiModel(description = "<%- formatAsApiDescription(javadoc) %>")
91
+ @Schema(description = "<%- formatAsApiDescription(javadoc) %>")
91
92
  <%_ } _%>
92
93
  <%_ } _%>
93
94
  <&- fragments.annotationSection() -&>
@@ -107,7 +108,7 @@ public class <%= persistClass %> implements Serializable {
107
108
  <%- formatAsFieldJavadoc(field.javadoc) %>
108
109
  <%_ } _%>
109
110
  <%_ if (!dtoMapstruct && typeof field.javadoc !== 'undefined') { _%>
110
- @ApiModelProperty(value = "<%- formatAsApiDescription(field.javadoc) %>"<% if (field.fieldValidationRequired) { %>, required = true<% } %>)
111
+ @Schema(description = "<%- formatAsApiDescription(field.javadoc) %>"<% if (field.fieldValidationRequired) { %>, required = true<% } %>)
111
112
  <%_ } _%>
112
113
  <&- fragments.field<%- field.fieldNameCapitalized %>AnnotationSection() -&>
113
114
  private <%= field.javaFieldType %> <%= field.fieldName %>;
@@ -126,7 +127,7 @@ for (relationship of relationships.filter(relationship => !relationship.embedded
126
127
  if (typeof relationship.javadoc !== 'undefined') { _%>
127
128
  <%- formatAsFieldJavadoc(relationship.javadoc) %>
128
129
  <%_ if (!dtoMapstruct) { _%>
129
- @ApiModelProperty(value = "<%- formatAsApiDescription(relationship.javadoc) %>")
130
+ @Schema(description = "<%- formatAsApiDescription(relationship.javadoc) %>")
130
131
  <%_ } _%>
131
132
  <%_ } _%>
132
133
  <&- fragments.relationship<%- relationship.relationshipNameCapitalized %>AnnotationSection() -&>
@@ -59,7 +59,7 @@ import org.springframework.r2dbc.core.RowsFetchSpec;
59
59
  import <%= entityAbsolutePackage %>.domain.<%= persistClass %>;
60
60
  <% relationships.forEach(function(rel) {
61
61
  if (rel.relationshipManyToMany && rel.ownerSide) { _%>
62
- import <%= entityAbsolutePackage %>.domain.<%= asEntity(rel.otherEntityNameCapitalized) %>;
62
+ import <%= rel.otherEntity.entityAbsolutePackage %>.domain.<%= rel.otherEntity.persistClass %>;
63
63
  <%_ } _%>
64
64
  <%_ }); _%>
65
65
  <%_ Object.keys(uniqueEnums).forEach(function(element) { _%>
@@ -67,12 +67,15 @@ import <%= entityAbsolutePackage %>.domain.<%= asEntity(rel.otherEntityNameCapit
67
67
  import <%= entityAbsolutePackage %>.domain.enumeration.<%= element %>;
68
68
  <%_ }); _%>
69
69
 
70
- <%_ reactiveUniqueEntityTypes.forEach(function(element) { _%>
71
- import <%= entityAbsolutePackage %>.repository.rowmapper.<%= element %>RowMapper;
70
+ <%_ [...reactiveOtherEntities, entity].forEach(otherEntity => { _%>
71
+ import <%= otherEntity.entityAbsolutePackage %>.repository.rowmapper.<%= otherEntity.entityClass %>RowMapper;
72
+ <%_ if (otherEntity.entityPackage !== entityPackage) { _%>
73
+ import <%= otherEntity.entityAbsolutePackage %>.repository.<%= otherEntity.entityClass %>SqlHelper;
74
+ <%_ } _%>
72
75
  <%_ }); _%>
73
- import <%= entityAbsolutePackage %>.service.EntityManager;
76
+ import <%= packageName %>.service.EntityManager;
74
77
  <%_ if (fieldsContainOwnerManyToMany) { _%>
75
- import <%= entityAbsolutePackage %>.service.EntityManager.LinkTable;
78
+ import <%= packageName %>.service.EntityManager.LinkTable;
76
79
  <%_ } _%>
77
80
 
78
81
  import reactor.core.publisher.Flux;
@@ -149,13 +152,13 @@ _%>
149
152
 
150
153
  @Override
151
154
  public Mono<<%= persistClass %>> findById(<%= primaryKey.type %> id) {
152
- return createQuery(null, where("id").is(id)).one();
155
+ return createQuery(null, where("<%= primaryKey.name %>").is(id)).one();
153
156
  }
154
157
 
155
158
  <%_ if (fieldsContainOwnerManyToMany) { _%>
156
159
 
157
160
  @Override
158
- public Mono<<%= persistClass %>> findOneWithEagerRelationships(Long id) {
161
+ public Mono<<%= persistClass %>> findOneWithEagerRelationships(<%= primaryKey.type %> id) {
159
162
  return findById(id);
160
163
  }
161
164
 
@@ -202,11 +205,15 @@ _%>
202
205
 
203
206
  @Override
204
207
  public Mono<Integer> update(<%= persistClass %> entity) {
205
- <%_ if (fields.length + reactiveEagerRelations.length > 0) { _%>
208
+ <%_ if (fields.some(field => !field.id) || relationships.some(relationship => !relationship.id && relationship.ownerSide)) { _%>
206
209
  //fixme is this the proper way?
207
210
  return r2dbcEntityTemplate.update(entity).thenReturn(1);
208
211
  <%_ } else { _%>
209
- // What can we update on this field?
212
+ /*
213
+ * Entity doesn't contain any updatable data, ignore update for compatibility.
214
+ * Otherwise it fails with `IllegalArgumentException: UPDATE contains no assignments`
215
+ * https://github.com/spring-projects/spring-data-r2dbc/issues/250#issuecomment-563122844
216
+ */
210
217
  return Mono.just(1);
211
218
  <%_ } _%>
212
219
  }
@@ -247,23 +254,3 @@ _%>
247
254
 
248
255
  <%_ } _%>
249
256
  }
250
-
251
- class <%= entityClass %>SqlHelper {
252
- static List<Expression> getColumns(Table table, String columnPrefix) {
253
- List<Expression> columns = new ArrayList<>();
254
- <%_ fields.forEach(function(field) {
255
- let col = field.fieldNameAsDatabaseColumn;
256
- _%>
257
- columns.add(Column.aliased("<%= col %>", table, columnPrefix + "_<%= col %>"));
258
- <%_ if ((field.fieldTypeBinary) && !field.blobContentTypeText) { _%>
259
- columns.add(Column.aliased("<%= col %>_content_type", table, columnPrefix + "_<%= col %>_content_type"));
260
- <%_ } _%>
261
- <%_ }); _%>
262
-
263
- <%_ reactiveRegularEagerRelations.forEach(function(rel) { _%>
264
- columns.add(Column.aliased("<%= getColumnName(rel.relationshipName) %>_id", table, columnPrefix + "_<%= getColumnName(rel.relationshipName) %>_id"));
265
- <%_ }); _%>
266
- return columns;
267
- }
268
-
269
- }
@@ -104,7 +104,7 @@ if (databaseTypeSql) {
104
104
  Flux<<%= persistClass %>> findAllWithEagerRelationships(Pageable page);
105
105
 
106
106
  @Override
107
- Mono<Void> deleteById(Long id);
107
+ Mono<Void> deleteById(<%= primaryKey.type %> id);
108
108
 
109
109
  <%_ } _%>
110
110
 
@@ -138,7 +138,7 @@ if (databaseTypeSql) {
138
138
  Flux<<%= persistClass %>> findAll();
139
139
 
140
140
  @Override
141
- Mono<<%= persistClass %>> findById(Long id);
141
+ Mono<<%= persistClass %>> findById(<%= primaryKey.type %> id);
142
142
 
143
143
  @Override
144
144
  <S extends <%= persistClass %>> Mono<S> save(S entity);
@@ -165,7 +165,7 @@ interface <%= entityClass %>RepositoryInternal {
165
165
 
166
166
  Flux<<%= persistClass %>> findAllWithEagerRelationships(Pageable page);
167
167
 
168
- Mono<Void> deleteById(Long id);
168
+ Mono<Void> deleteById(<%= primaryKey.type %> id);
169
169
  <%_ } _%>
170
170
 
171
171
  }