generator-jhipster 7.6.0 → 7.7.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 (310) hide show
  1. package/README.md +1 -3
  2. package/cli/commands.js +3 -0
  3. package/cli/environment-builder.js +53 -18
  4. package/cli/import-jdl.js +3 -0
  5. package/cli/index.mjs +20 -0
  6. package/cli/jhipster.js +19 -11
  7. package/cli/program.js +94 -38
  8. package/generators/app/esm.mjs +1 -3
  9. package/generators/app/index.js +1 -16
  10. package/generators/aws/esm.mjs +1 -3
  11. package/generators/azure-app-service/esm.mjs +1 -3
  12. package/generators/azure-spring-cloud/esm.mjs +1 -3
  13. package/generators/base/esm.mjs +1 -3
  14. package/generators/bootstrap/esm.mjs +1 -3
  15. package/generators/bootstrap/index.js +36 -86
  16. package/generators/bootstrap-application/esm.mjs +19 -0
  17. package/generators/bootstrap-application/generator.mjs +353 -0
  18. package/generators/bootstrap-application/index.mjs +19 -0
  19. package/generators/ci-cd/esm.mjs +1 -3
  20. package/generators/ci-cd/prompts.js +1 -1
  21. package/generators/ci-cd/templates/github-actions.yml.ejs +2 -2
  22. package/generators/client/esm.mjs +5 -3
  23. package/generators/client/files-angular.js +9 -0
  24. package/generators/client/files-common.js +8 -7
  25. package/generators/client/files-vue.js +7 -6
  26. package/generators/client/index.js +2 -1
  27. package/generators/client/templates/angular/angular.json.ejs +1 -1
  28. package/generators/client/templates/angular/package.json +25 -22
  29. package/generators/client/templates/angular/package.json.ejs +5 -1
  30. package/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.component.html.ejs +1 -1
  31. package/generators/client/templates/angular/src/main/webapp/app/account/password/password.component.html.ejs +7 -7
  32. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html.ejs +5 -5
  33. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html.ejs +3 -3
  34. package/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.html.ejs +10 -10
  35. package/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.component.html.ejs +8 -8
  36. package/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.component.html.ejs +2 -2
  37. package/generators/client/templates/angular/src/main/webapp/app/admin/gateway/gateway.component.html.ejs +5 -5
  38. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.html.ejs +1 -1
  39. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.spec.ts.ejs +2 -2
  40. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.ts.ejs +2 -2
  41. package/generators/client/templates/angular/src/main/webapp/app/admin/health/modal/health-modal.component.html.ejs +6 -6
  42. package/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.component.html.ejs +51 -49
  43. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-cache/metrics-cache.component.html.ejs +16 -16
  44. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-datasource/metrics-datasource.component.html.ejs +32 -32
  45. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-endpoints-requests/metrics-endpoints-requests.component.html.ejs +4 -4
  46. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-garbagecollector/metrics-garbagecollector.component.html.ejs +18 -18
  47. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.html.ejs +12 -12
  48. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.ts.ejs +4 -4
  49. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-request/metrics-request.component.html.ejs +4 -4
  50. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-system/metrics-system.component.html.ejs +8 -8
  51. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.component.html.ejs +1 -1
  52. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.html.ejs +1 -1
  53. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/detail/user-management-detail.component.html.ejs +4 -4
  54. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/list/user-management.component.html.ejs +5 -5
  55. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/update/user-management-update.component.html.ejs +11 -11
  56. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs +4 -2
  57. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.scss.ejs +0 -6
  58. package/generators/client/templates/angular/src/main/webapp/app/layouts/profiles/page-ribbon.component.scss.ejs +0 -6
  59. package/generators/client/templates/angular/src/main/webapp/app/login/login.component.html.ejs +3 -3
  60. package/generators/client/templates/angular/src/main/webapp/content/scss/_bootstrap-variables.scss.ejs +5 -5
  61. package/generators/client/templates/angular/src/main/webapp/content/scss/global.scss.ejs +29 -0
  62. package/generators/client/templates/angular/src/main/webapp/content/scss/vendor.scss.ejs +0 -4
  63. package/generators/client/templates/angular/webpack/webpack.custom.js.ejs +19 -0
  64. package/generators/client/templates/common/package.json +2 -2
  65. package/generators/client/templates/common/src/main/webapp/swagger-ui/index.html.ejs +1 -7
  66. package/generators/client/templates/react/package.json +33 -33
  67. package/generators/client/templates/vue/package.json +23 -23
  68. package/generators/client/templates/vue/src/main/webapp/app/core/jhi-navbar/jhi-navbar.component.ts.ejs +3 -3
  69. package/generators/client/templates/vue/src/main/webapp/app/entities/user/user.service.ts.ejs +0 -0
  70. package/generators/client/templates/vue/src/main/webapp/app/main.ts.ejs +29 -1
  71. package/generators/client/templates/vue/src/main/webapp/app/shared/config/axios-interceptor.ts.ejs +2 -2
  72. package/generators/client/templates/vue/src/main/webapp/app/shared/config/config.ts.ejs +0 -4
  73. package/generators/cloudfoundry/esm.mjs +1 -3
  74. package/generators/common/esm.mjs +2 -3
  75. package/generators/common/files.js +1 -2
  76. package/generators/common/index.js +6 -0
  77. package/generators/common/templates/.husky/{pre-commit → pre-commit.ejs} +4 -0
  78. package/generators/common/templates/README.md.jhi.ejs +3 -1
  79. package/generators/common/templates/package.json +3 -3
  80. package/generators/common/templates/sonar-project.properties.ejs +1 -1
  81. package/generators/cypress/esm.mjs +2 -3
  82. package/generators/cypress/files.js +2 -1
  83. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/settings-page.spec.ts.ejs +18 -14
  84. package/generators/database-changelog/esm.mjs +1 -3
  85. package/generators/database-changelog/index.js +1 -1
  86. package/generators/database-changelog-liquibase/esm.mjs +2 -3
  87. package/generators/docker-compose/esm.mjs +1 -3
  88. package/generators/entities/esm.mjs +1 -3
  89. package/generators/entities/index.js +2 -2
  90. package/generators/entities-client/esm.mjs +1 -3
  91. package/generators/entity/esm.mjs +1 -3
  92. package/generators/entity/index.js +11 -15
  93. package/generators/entity/prompts.js +4 -1
  94. package/generators/entity-client/esm.mjs +2 -3
  95. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/delete/entity-management-delete-dialog.component.html.ejs +1 -1
  96. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/detail/entity-management-detail.component.html.ejs +2 -2
  97. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.html.ejs +20 -21
  98. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.html.ejs +14 -16
  99. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.ts.ejs +2 -2
  100. package/generators/entity-client/templates/common/src/test/javascript/cypress/integration/entity/entity.spec.ts.ejs +1 -1
  101. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-reducer.spec.ts.ejs +1 -1
  102. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-update.tsx.ejs +1 -1
  103. package/generators/entity-client/templates/react/src/test/javascript/e2e/entities/entity-update-page-object.ts.ejs +1 -1
  104. package/generators/entity-client/templates/vue/src/test/javascript/e2e/entities/entity-update-page-object.ts.ejs +1 -1
  105. package/generators/entity-client/templates/vue/src/test/javascript/e2e/entities/entity.spec.ts.ejs +1 -1
  106. package/generators/entity-i18n/esm.mjs +2 -3
  107. package/generators/entity-server/esm.mjs +2 -3
  108. package/generators/entity-server/files-couchbase.js +23 -2
  109. package/generators/entity-server/files.js +16 -2
  110. package/generators/entity-server/index.js +8 -1
  111. package/generators/entity-server/templates/couchbase/src/main/java/package/domain/Entity.java.jhi.spring_data_couchbase.ejs +11 -13
  112. package/generators/entity-server/templates/couchbase/src/main/java/package/repository/EntityRepository.java.ejs +23 -59
  113. package/generators/entity-server/templates/couchbase/src/main/resources/config/couchmove/changelog/entity.fts.ejs +5 -6
  114. package/generators/entity-server/templates/couchbase/src/main/resources/config/couchmove/changelog/entity.n1ql.ejs +5 -0
  115. package/generators/entity-server/templates/partials/it_patch_update.partial.java.ejs +2 -2
  116. package/generators/entity-server/templates/partials/save_template.ejs +1 -1
  117. package/generators/entity-server/templates/src/main/java/package/common/get_all_template.ejs +1 -1
  118. package/generators/entity-server/templates/src/main/java/package/common/inject_template.ejs +4 -4
  119. package/generators/entity-server/templates/src/main/java/package/common/patch_template.ejs +3 -3
  120. package/generators/entity-server/templates/src/main/java/package/common/search_stream_template.ejs +1 -1
  121. package/generators/entity-server/templates/src/main/java/package/common/search_template.ejs +1 -1
  122. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.ejs +2 -2
  123. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepository.java.ejs +31 -18
  124. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryInternalImpl_reactive.java.ejs +3 -3
  125. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryWithBagRelationships.java.ejs +37 -0
  126. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryWithBagRelationshipsImpl.java.ejs +90 -0
  127. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepository_reactive.java.ejs +2 -2
  128. package/generators/entity-server/templates/src/main/java/package/repository/rowmapper/EntityRowMapper.java.ejs +1 -1
  129. package/generators/entity-server/templates/src/main/java/package/repository/search/EntitySearchRepository.java.ejs +3 -5
  130. package/generators/entity-server/templates/src/main/java/package/repository/search/{SortToFieldSortBuilderConverter.java.ejs → SortToSortBuilderListConverter.java.ejs} +4 -3
  131. package/generators/entity-server/templates/src/main/java/package/service/criteria/EntityCriteria.java.ejs +8 -6
  132. package/generators/entity-server/templates/src/main/java/package/service/impl/EntityServiceImpl.java.ejs +1 -1
  133. package/generators/entity-server/templates/src/main/java/package/service/mapper/EntityMapper.java.ejs +6 -6
  134. package/generators/entity-server/templates/src/main/java/package/web/rest/EntityResource.java.ejs +1 -1
  135. package/generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIT.java.ejs +5 -5
  136. package/generators/export-jdl/esm.mjs +1 -3
  137. package/generators/gae/esm.mjs +1 -3
  138. package/generators/generate-blueprint/constants.mjs +146 -0
  139. package/generators/generate-blueprint/esm.mjs +19 -0
  140. package/generators/generate-blueprint/files.mjs +81 -0
  141. package/generators/generate-blueprint/generator.mjs +363 -0
  142. package/generators/generate-blueprint/index.mjs +20 -0
  143. package/generators/generate-blueprint/templates/.eslintrc.json.ejs +41 -0
  144. package/generators/generate-blueprint/templates/.github/workflows/generator.yml.ejs +32 -0
  145. package/generators/generate-blueprint/templates/.mocharc.cjs.ejs +29 -0
  146. package/generators/{server/templates/couchbase/src/main/java/package/config/couchbase/package-info.java.ejs → generate-blueprint/templates/.prettierignore.jhi.blueprint.ejs} +4 -7
  147. package/generators/generate-blueprint/templates/README.md.ejs +75 -0
  148. package/generators/generate-blueprint/templates/cli/cli.mjs.ejs +35 -0
  149. package/generators/generate-blueprint/templates/cli/commands.cjs.ejs +25 -0
  150. package/generators/generate-blueprint/templates/generators/generator/generator.mjs.jhi.ejs +98 -0
  151. package/generators/generate-blueprint/templates/generators/generator/generator.spec.mjs.ejs +42 -0
  152. package/generators/generate-blueprint/templates/generators/generator/index.mjs.ejs +19 -0
  153. package/generators/generate-blueprint/templates/generators/generator/templates/template-file.ejs +0 -0
  154. package/generators/generate-blueprint/templates/test/utils.mjs.ejs +17 -0
  155. package/generators/generator-base-blueprint.js +29 -0
  156. package/generators/generator-base-docker.js +1 -0
  157. package/generators/generator-base-entities.cjs +368 -0
  158. package/generators/generator-base.js +128 -23
  159. package/generators/generator-constants.js +18 -16
  160. package/generators/generator-list.js +2 -0
  161. package/generators/gradle/esm.mjs +19 -0
  162. package/generators/heroku/esm.mjs +1 -3
  163. package/generators/info/esm.mjs +1 -3
  164. package/generators/init/esm.mjs +19 -0
  165. package/generators/init/files.cjs +9 -3
  166. package/generators/init/index.cjs +5 -0
  167. package/generators/init/templates/.gitignore.jhi.ejs +5 -0
  168. package/generators/init/templates/{.lintstagedrc.js.ejs → .lintstagedrc.cjs.ejs} +0 -0
  169. package/generators/java/esm.mjs +19 -0
  170. package/generators/java/index.cjs +58 -2
  171. package/generators/kubernetes/esm.mjs +1 -3
  172. package/generators/kubernetes-helm/esm.mjs +1 -3
  173. package/generators/kubernetes-knative/esm.mjs +1 -3
  174. package/generators/languages/esm.mjs +2 -3
  175. package/generators/languages/templates/src/test/resources/i18n/messages_fr.properties.ejs +4 -1
  176. package/generators/maven/esm.mjs +19 -0
  177. package/generators/openapi-client/esm.mjs +1 -3
  178. package/generators/openapi-client/index.js +11 -4
  179. package/generators/openshift/esm.mjs +1 -3
  180. package/generators/page/esm.mjs +1 -3
  181. package/generators/project-name/esm.mjs +19 -0
  182. package/generators/server/esm.mjs +2 -2
  183. package/generators/server/files-couchbase.js +28 -31
  184. package/generators/server/files.js +14 -1
  185. package/generators/server/index.js +13 -13
  186. package/generators/server/needle-api/needle-server-maven.js +1 -1
  187. package/generators/server/templates/couchbase/src/main/java/package/repository/CouchbaseSearchRepository.java.ejs +91 -0
  188. package/generators/server/templates/couchbase/src/main/java/package/repository/JHipsterCouchbaseRepository.java.ejs +43 -64
  189. package/generators/server/templates/couchbase/src/main/java/package/repository/PersistentTokenRepository_couchbase.java.ejs +2 -2
  190. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.1__initial_setup/authority/ROLE_ADMIN.json.ejs +3 -0
  191. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.1__initial_setup/authority/ROLE_USER.json.ejs +3 -0
  192. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.1__initial_setup/{user__admin.json.ejs → user/admin.json.ejs} +2 -2
  193. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.1__initial_setup/{user__user.json.ejs → user/user.json.ejs} +2 -2
  194. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.2__create_indexes.n1ql.ejs +34 -0
  195. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0__create_collections.n1ql.ejs +8 -0
  196. package/generators/server/templates/couchbase/src/test/java/package/CouchbaseTestContainerExtension.java.ejs +4 -3
  197. package/generators/server/templates/couchbase/src/test/java/package/repository/{JHipsterCouchbaseRepositoryTest.java.ejs → CouchbaseSearchRepositoryTest.java.ejs} +2 -2
  198. package/generators/server/templates/gradle/profile_prod.gradle.ejs +4 -0
  199. package/generators/server/templates/gradle.properties.ejs +6 -6
  200. package/generators/server/templates/npmw +14 -5
  201. package/generators/server/templates/pom.xml.ejs +47 -42
  202. package/generators/server/templates/src/main/docker/app.yml.ejs +4 -2
  203. package/generators/server/templates/src/main/docker/zipkin.yml.ejs +25 -0
  204. package/generators/server/templates/src/main/java/package/config/DatabaseConfiguration_couchbase.java.ejs +26 -16
  205. package/generators/server/templates/src/main/java/package/config/LocaleConfiguration_reactive.java.ejs +1 -1
  206. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration_reactive.java.ejs +2 -1
  207. package/generators/server/templates/src/main/java/package/domain/Authority.java.ejs +11 -0
  208. package/generators/server/templates/src/main/java/package/domain/PersistentToken.java.ejs +6 -6
  209. package/generators/server/templates/src/main/java/package/domain/User.java.ejs +9 -7
  210. package/generators/server/templates/src/main/java/package/repository/AuthorityRepository.java.ejs +1 -11
  211. package/generators/server/templates/src/main/java/package/repository/UserRepository.java.ejs +48 -72
  212. package/generators/server/templates/src/main/java/package/security/oauth2/CustomClaimConverter.java.ejs +1 -1
  213. package/generators/server/templates/src/main/java/package/service/UserService.java.ejs +8 -6
  214. package/generators/server/templates/src/main/java/package/web/filter/OAuth2ReactiveRefreshTokensWebFilter.java.ejs +0 -1
  215. package/generators/server/templates/src/main/java/package/web/rest/AccountResource.java.ejs +1 -1
  216. package/generators/server/templates/src/main/java/package/web/rest/LogoutResource_reactive.java.ejs +1 -1
  217. package/generators/server/templates/src/main/java/package/web/rest/PublicUserResource.java.ejs +2 -2
  218. package/generators/server/templates/src/main/resources/config/application-dev.yml.ejs +8 -0
  219. package/generators/server/templates/src/main/resources/config/application-prod.yml.ejs +6 -0
  220. package/generators/server/templates/src/main/resources/config/application.yml.ejs +2 -0
  221. package/generators/server/templates/src/test/java/package/IntegrationTest.java.ejs +3 -1
  222. package/generators/server/templates/src/test/java/package/TechnicalStructureTest.java.ejs +21 -15
  223. package/generators/server/templates/src/test/java/package/config/JHipsterBlockHoundIntegration.java.ejs +2 -0
  224. package/generators/server/templates/src/test/java/package/cucumber/stepdefs/StepDefs.java.ejs +8 -0
  225. package/generators/server/templates/src/test/java/package/cucumber/stepdefs/UserStepDefs.java.ejs +17 -3
  226. package/generators/server/templates/src/test/java/package/security/SecurityUtilsUnitTest_reactive.java.ejs +1 -1
  227. package/generators/server/templates/src/test/java/package/security/oauth2/CustomClaimConverterIT.java.ejs +1 -1
  228. package/generators/server/templates/src/test/java/package/service/mapper/UserMapperTest.java.ejs +1 -1
  229. package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT.java.ejs +13 -6
  230. package/generators/server/templates/src/test/java/package/web/rest/TestUtil.java.ejs +1 -6
  231. package/generators/server/templates/src/test/java/package/web/rest/UserResourceIT.java.ejs +40 -42
  232. package/generators/server/templates/src/test/java/package/web/rest/errors/ExceptionTranslatorIT_reactive.java.ejs +1 -1
  233. package/generators/spring-boot/esm.mjs +19 -0
  234. package/generators/spring-controller/esm.mjs +1 -3
  235. package/generators/spring-service/esm.mjs +1 -3
  236. package/generators/upgrade/esm.mjs +1 -3
  237. package/generators/upgrade-config/esm.mjs +1 -3
  238. package/generators/workspaces/esm.mjs +1 -3
  239. package/lib/constants/logo.cjs +30 -0
  240. package/lib/constants/priorities.cjs +216 -2
  241. package/lib/constants/priorities.mjs +29 -1
  242. package/lib/index.mjs +6 -0
  243. package/lib/support/mixin.cjs +5 -1
  244. package/lib/support/shared-data.cjs +34 -1
  245. package/package.json +27 -23
  246. package/utils/entity.js +19 -2
  247. package/utils/faker.js +3 -3
  248. package/utils/field.js +61 -49
  249. package/utils/relationship.js +5 -3
  250. package/utils/user.js +109 -0
  251. package/generators/app/generator.spec.mjs +0 -47
  252. package/generators/aws/generator.spec.mjs +0 -47
  253. package/generators/azure-app-service/generator.spec.mjs +0 -47
  254. package/generators/azure-spring-cloud/generator.spec.mjs +0 -47
  255. package/generators/base/generator.spec.mjs +0 -44
  256. package/generators/bootstrap/generator.spec.mjs +0 -44
  257. package/generators/ci-cd/generator.spec.mjs +0 -47
  258. package/generators/client/__workflow/devserver-angular.json +0 -13
  259. package/generators/client/__workflow/devserver-react.json +0 -13
  260. package/generators/client/__workflow/devserver-vue.json +0 -13
  261. package/generators/client/generator.spec.mjs +0 -47
  262. package/generators/cloudfoundry/generator.spec.mjs +0 -47
  263. package/generators/common/generator.spec.mjs +0 -47
  264. package/generators/cypress/generator.spec.mjs +0 -47
  265. package/generators/database-changelog/generator.spec.mjs +0 -47
  266. package/generators/database-changelog-liquibase/generator.spec.mjs +0 -47
  267. package/generators/docker-compose/generator.spec.mjs +0 -44
  268. package/generators/entities/generator.spec.mjs +0 -47
  269. package/generators/entities-client/generator.spec.mjs +0 -47
  270. package/generators/entity/generator.spec.mjs +0 -47
  271. package/generators/entity-client/generator.spec.mjs +0 -47
  272. package/generators/entity-i18n/generator.spec.mjs +0 -47
  273. package/generators/entity-server/generator.spec.mjs +0 -47
  274. package/generators/export-jdl/generator.spec.mjs +0 -44
  275. package/generators/gae/generator.spec.mjs +0 -47
  276. package/generators/gradle/__snapshots__/generator.spec.cjs.snap +0 -59
  277. package/generators/gradle/generator.spec.cjs +0 -71
  278. package/generators/heroku/generator.spec.mjs +0 -47
  279. package/generators/info/generator.spec.mjs +0 -44
  280. package/generators/init/__snapshots__/generator.spec.cjs.snap +0 -65
  281. package/generators/init/generator.spec.cjs +0 -112
  282. package/generators/java/__snapshots__/generator.spec.cjs.snap +0 -118
  283. package/generators/java/generator.spec.cjs +0 -87
  284. package/generators/kubernetes/generator.spec.mjs +0 -44
  285. package/generators/kubernetes-helm/generator.spec.mjs +0 -44
  286. package/generators/kubernetes-knative/generator.spec.mjs +0 -44
  287. package/generators/languages/generator.spec.mjs +0 -47
  288. package/generators/maven/__snapshots__/generator.spec.cjs.snap +0 -53
  289. package/generators/maven/generator.spec.cjs +0 -78
  290. package/generators/openapi-client/generator.spec.mjs +0 -47
  291. package/generators/openshift/generator.spec.mjs +0 -44
  292. package/generators/page/generator.spec.mjs +0 -47
  293. package/generators/project-name/generator.spec.cjs +0 -43
  294. package/generators/server/__snapshots__/generator.spec.mjs.snap +0 -1931
  295. package/generators/server/generator.spec.mjs +0 -52
  296. package/generators/server/templates/couchbase/src/main/java/package/config/couchbase/CustomCouchbaseRepositoryFactory.java.ejs +0 -83
  297. package/generators/server/templates/couchbase/src/main/java/package/config/couchbase/CustomCouchbaseRepositoryFactoryBean.java.ejs +0 -40
  298. package/generators/server/templates/couchbase/src/main/java/package/config/couchbase/CustomCouchbaseRepositoryQuery.java.ejs +0 -44
  299. package/generators/server/templates/couchbase/src/main/java/package/config/couchbase/CustomN1qlQueryCreator.java.ejs +0 -162
  300. package/generators/server/templates/couchbase/src/main/java/package/config/couchbase/CustomN1qlRepositoryQueryExecutor.java.ejs +0 -104
  301. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.1__initial_setup/ROLE_ADMIN.json.ejs +0 -3
  302. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.1__initial_setup/ROLE_USER.json.ejs +0 -3
  303. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0__create_indexes.n1ql.ejs +0 -19
  304. package/generators/spring-boot/__snapshots__/generator.spec.cjs.snap +0 -80
  305. package/generators/spring-boot/generator.spec.cjs +0 -64
  306. package/generators/spring-controller/generator.spec.mjs +0 -47
  307. package/generators/spring-service/generator.spec.mjs +0 -47
  308. package/generators/upgrade/generator.spec.mjs +0 -44
  309. package/generators/upgrade-config/generator.spec.mjs +0 -44
  310. package/generators/workspaces/generator.spec.mjs +0 -47
@@ -66,20 +66,24 @@ describe('/account/settings', () => {
66
66
  cy.wait('@settingsSave').then(({ response }) => expect(response.statusCode).to.equal(200));
67
67
  });
68
68
 
69
- it("should not be able to change 'user' settings if email already exists", () => {
70
- cy.login(adminUsername, adminPassword);
71
- cy.visit('');
72
- cy.clickOnSettingsItem();
73
- cy.get(emailSettingsSelector).clear().type('admin@localhost.fr');
74
- cy.get(submitSettingsSelector).click();
69
+ describe('if there is another user with an email', () => {
70
+ before(() => {
71
+ cy.login(adminUsername, adminPassword);
72
+ cy.visit('/account/settings');
73
+ cy.get(emailSettingsSelector).clear().type('admin@localhost.fr');
74
+ cy.intercept({
75
+ method: 'POST',
76
+ url: '/api/account',
77
+ times: 1,
78
+ }).as('settingsSave');
79
+ cy.get(submitSettingsSelector).click();
80
+ cy.wait('@settingsSave');
81
+ });
75
82
 
76
- cy.login(username, password);
77
- cy.visit('');
78
- cy.clickOnSettingsItem();
79
-
80
- cy.intercept('POST', '/api/account').as('settingsNotSave');
81
- cy.get(emailSettingsSelector).clear().type('admin@localhost.fr');
82
- cy.get(submitSettingsSelector).click();
83
- cy.wait('@settingsNotSave').then(({ response }) => expect(response.statusCode).to.equal(400));
83
+ it("should not be able to change 'user' email to same value", () => {
84
+ cy.get(emailSettingsSelector).clear().type('admin@localhost.fr');
85
+ cy.get(submitSettingsSelector).click();
86
+ cy.wait('@settingsSave').then(({ response }) => expect(response.statusCode).to.equal(400));
87
+ });
84
88
  });
85
89
  });
@@ -16,6 +16,4 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import generator from './index.js';
20
-
21
- export default generator;
19
+ export { default } from './index.js';
@@ -98,7 +98,7 @@ module.exports = class extends BaseBlueprintGenerator {
98
98
  /* ======================================================================== */
99
99
 
100
100
  _composeWithIncrementalChangelogProvider(databaseChangelog) {
101
- const skipWriting = !this.options.entities.includes(databaseChangelog.entityName);
101
+ const skipWriting = this.options.skipWriting || !this.options.entities.includes(databaseChangelog.entityName);
102
102
  return this.composeWithJHipster(GENERATOR_DATABASE_CHANGELOG_LIQUIBASE, {
103
103
  databaseChangelog,
104
104
  skipWriting,
@@ -16,6 +16,5 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import generator from './index.js';
20
-
21
- export default generator;
19
+ export { default } from './index.js';
20
+ export { addEntityFiles, updateEntityFiles, updateConstraintsFiles, updateMigrateFiles, fakeFiles } from './files.js';
@@ -16,6 +16,4 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import generator from './index.js';
20
-
21
- export default generator;
19
+ export { default } from './index.js';
@@ -16,6 +16,4 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import generator from './index.js';
20
-
21
- export default generator;
19
+ export { default } from './index.js';
@@ -139,7 +139,7 @@ module.exports = class extends BaseBlueprintGenerator {
139
139
  const selectedEntity = this.options.entities.includes(entityName);
140
140
  const { regenerate = !selectedEntity } = this.options;
141
141
  await this.composeWithJHipster(GENERATOR_ENTITY, [entityName], {
142
- skipWriting: !this.options.writeEveryEntity && !selectedEntity,
142
+ skipWriting: this.options.skipWriting || (!this.options.writeEveryEntity && !selectedEntity),
143
143
  regenerate,
144
144
  skipDbChangelog: this.jhipsterConfig.databaseType === SQL || this.options.skipDbChangelog,
145
145
  skipInstall: true,
@@ -175,7 +175,7 @@ module.exports = class extends BaseBlueprintGenerator {
175
175
  _default() {
176
176
  return {
177
177
  async composeEntitiesClient() {
178
- if (this.options.entities.length !== this.jhipsterConfig.entities.length) return;
178
+ if (this.options.skipWriting || this.options.entities.length !== this.jhipsterConfig.entities.length) return;
179
179
  const clientEntities = this.getExistingEntityNames()
180
180
  .map(entityName => {
181
181
  const entity = this.configOptions.sharedEntities[entityName];
@@ -16,6 +16,4 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import generator from './index.js';
20
-
21
- export default generator;
19
+ export { default } from './index.js';
@@ -16,6 +16,4 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import generator from './index.js';
20
-
21
- export default generator;
19
+ export { default } from './index.js';
@@ -45,6 +45,7 @@ const statistics = require('../statistics');
45
45
  const { isReservedClassName, isReservedTableName } = require('../../jdl/jhipster/reserved-keywords');
46
46
  const {
47
47
  prepareEntityForTemplates,
48
+ prepareEntityServerDomainForTemplates,
48
49
  prepareEntityPrimaryKeyForTemplates,
49
50
  loadRequiredConfigIntoEntity,
50
51
  derivedPrimaryKeyProperties,
@@ -649,16 +650,7 @@ class EntityGenerator extends BaseBlueprintGenerator {
649
650
  },
650
651
 
651
652
  loadDomain() {
652
- const entity = this.context;
653
- const { entityPackage, packageName, packageFolder, persistClass } = entity;
654
- let { entityAbsolutePackage = packageName, entityAbsoluteFolder = packageFolder } = entity;
655
- if (entityPackage) {
656
- entityAbsolutePackage = [packageName, entityPackage].join('.');
657
- entityAbsoluteFolder = path.join(packageFolder, entityPackage.replace(/\./g, '/'));
658
- }
659
- entity.entityAbsolutePackage = entityAbsolutePackage;
660
- entity.entityAbsoluteFolder = entityAbsoluteFolder;
661
- entity.entityAbsoluteClass = `${entityAbsolutePackage}.domain.${persistClass}`;
653
+ prepareEntityServerDomainForTemplates(this.context);
662
654
  },
663
655
  };
664
656
  }
@@ -727,7 +719,9 @@ class EntityGenerator extends BaseBlueprintGenerator {
727
719
  if (!this.context.differentRelationships[entityType]) {
728
720
  this.context.differentRelationships[entityType] = [];
729
721
  }
730
- this.context.differentRelationships[entityType].push(relationship);
722
+ if (!relationship.otherEntityIsEmbedded) {
723
+ this.context.differentRelationships[entityType].push(relationship);
724
+ }
731
725
  });
732
726
  },
733
727
 
@@ -863,17 +857,19 @@ class EntityGenerator extends BaseBlueprintGenerator {
863
857
  .forEach(relationship => {
864
858
  relationship.relationshipEagerLoad =
865
859
  !relationship.embedded &&
866
- // Allows the entity to force earger load every relationship
867
860
  (this.context.eagerLoad ||
868
861
  (this.context.paginate !== PAGINATION &&
869
- relationship.relationshipType === 'many-to-many' &&
870
- relationship.ownerSide === true)) &&
862
+ relationship.ownerSide &&
863
+ // Fetch relationships if otherEntityField differs otherwise the id is enough
864
+ (relationship.collection || relationship.otherEntity.primaryKey.name !== relationship.otherEntityField))) &&
871
865
  // Neo4j & Couchbase eagerly loads relations by default
872
- ![NEO4J, COUCHBASE].includes(this.context.databaseType);
866
+ ![NEO4J, COUCHBASE, CASSANDRA].includes(this.context.databaseType);
867
+ relationship.bagRelationship = relationship.relationshipEagerLoad && relationship.collection;
873
868
  });
874
869
  this.context.relationshipsContainEagerLoad = this.context.relationships.some(relationship => relationship.relationshipEagerLoad);
875
870
  this.context.eagerRelations = this.context.relationships.filter(rel => rel.relationshipEagerLoad);
876
871
  this.context.regularEagerRelations = this.context.eagerRelations.filter(rel => rel.id !== true);
872
+ this.context.containsBagRelationships = this.context.relationships.some(relationship => relationship.bagRelationship);
877
873
 
878
874
  this.context.reactiveEagerRelations = this.context.relationships.filter(
879
875
  rel => rel.relationshipType === 'many-to-one' || (rel.relationshipType === 'one-to-one' && rel.ownerSide === true)
@@ -156,7 +156,7 @@ function askForUpdate() {
156
156
  function askForFields() {
157
157
  const context = this.context;
158
158
  // don't prompt if data is imported from a file
159
- if (context.useConfigurationFile && context.updateEntity !== 'add') {
159
+ if (this.options.defaults || (context.useConfigurationFile && context.updateEntity !== 'add')) {
160
160
  return undefined;
161
161
  }
162
162
 
@@ -209,6 +209,9 @@ function askForFieldsToRemove() {
209
209
 
210
210
  function askForRelationships() {
211
211
  const context = this.context;
212
+ if (this.options.defaults) {
213
+ return undefined;
214
+ }
212
215
  // don't prompt if data is imported from a file
213
216
  if (context.useConfigurationFile && context.updateEntity !== 'add') {
214
217
  return undefined;
@@ -16,6 +16,5 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import generator from './index.js';
20
-
21
- export default generator;
19
+ export { default } from './index.js';
20
+ export { angularFiles, reactFiles, vueFiles, commonFiles } from './files.js';
@@ -20,7 +20,7 @@
20
20
  <div class="modal-header">
21
21
  <h4 class="modal-title" data-cy="<%= entityInstance %>DeleteDialogHeading" <%= jhiPrefix %>Translate="entity.delete.title">Confirm delete operation</h4>
22
22
 
23
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true"
23
+ <button type="button" class="btn-close" data-dismiss="modal" aria-hidden="true"
24
24
  (click)="cancel()">&times;</button>
25
25
  </div>
26
26
 
@@ -16,7 +16,7 @@
16
16
  See the License for the specific language governing permissions and
17
17
  limitations under the License.
18
18
  -%>
19
- <div class="row justify-content-center">
19
+ <div class="d-flex justify-content-center">
20
20
  <div class="col-8">
21
21
  <div *ngIf="<%= entityInstance %>">
22
22
  <h2 data-cy="<%= entityInstance %>DetailsHeading"><span <%= jhiPrefix %>Translate="<%= i18nKeyPrefix %>.detail.title"><%= entityClassHumanized %></span></h2>
@@ -60,7 +60,7 @@ _%>
60
60
  </dd>
61
61
  <%_ } _%>
62
62
  <%_
63
- for (const relationship of relationships) {
63
+ for (const relationship of relationships.filter(rel => !rel.otherEntityIsEmbedded)) {
64
64
  const ownerSide = relationship.ownerSide;
65
65
  const relationshipName = relationship.relationshipName;
66
66
  const relationshipFieldName = relationship.relationshipFieldName;
@@ -31,7 +31,7 @@ _%>
31
31
  <span <%= jhiPrefix %>Translate="<%= i18nKeyPrefix %>.home.title"><%= entityClassPluralHumanized %></span>
32
32
 
33
33
  <div class="d-flex justify-content-end">
34
- <button class="btn btn-info mr-2" (click)="<%= refreshMethod %>" [disabled]="isLoading">
34
+ <button class="btn btn-info me-2" (click)="<%= refreshMethod %>" [disabled]="isLoading">
35
35
  <fa-icon icon="sync" [spin]="isLoading"></fa-icon>
36
36
  <span <%= jhiPrefix %>Translate="<%= i18nKeyPrefix %>.home.refreshListLabel">Refresh List</span>
37
37
  </button>
@@ -52,23 +52,22 @@ _%>
52
52
  <<%= jhiPrefixDashed %>-alert></<%= jhiPrefixDashed %>-alert>
53
53
  <%_ if (searchEngine) { _%>
54
54
 
55
- <div class="row">
55
+ <form name="searchForm" class="row row-cols-sm-auto align-items-center">
56
56
  <div class="col-sm-12">
57
- <form name="searchForm" class="form-inline">
58
- <div class="input-group w-100 mt-3">
59
- <input type="text" class="form-control" [(ngModel)]="currentSearch" id="currentSearch" name="currentSearch" placeholder="<% if (enableTranslation) { %>{{ '<%= i18nKeyPrefix %>.home.search' | translate }}<% } else { %>Query<% } %>">
60
-
61
- <button class="input-group-append btn btn-info" (click)="search(currentSearch)">
62
- <fa-icon icon="search"></fa-icon>
63
- </button>
64
-
65
- <button class="input-group-append btn btn-danger" (click)="search('')" *ngIf="currentSearch">
66
- <fa-icon icon="trash-alt"></fa-icon>
67
- </button>
68
- </div>
69
- </form>
57
+ <div class="input-group w-100 mt-3">
58
+ <label class="visually-hidden" for="currentSearch" <%= jhiPrefix %>Translate="<%= i18nKeyPrefix %>.home.search">Query</label>
59
+ <input type="text" class="form-control" [(ngModel)]="currentSearch" id="currentSearch" name="currentSearch" placeholder="<% if (enableTranslation) { %>{{ '<%= i18nKeyPrefix %>.home.search' | translate }}<% } else { %>Query<% } %>">
60
+
61
+ <button class="btn btn-info" (click)="search(currentSearch)">
62
+ <fa-icon icon="search"></fa-icon>
63
+ </button>
64
+
65
+ <button class="btn btn-danger" (click)="search('')" *ngIf="currentSearch">
66
+ <fa-icon icon="trash-alt"></fa-icon>
67
+ </button>
68
+ </div>
70
69
  </div>
71
- </div>
70
+ </form>
72
71
  <%_ } _%>
73
72
 
74
73
  <div class="alert alert-warning" id="no-result" *ngIf="<%= entityInstancePlural %>?.length === 0">
@@ -82,7 +81,7 @@ _%>
82
81
  <%_ for (const field of fields.filter(field => !field.hidden)) { _%>
83
82
  <th scope="col"<% if (!paginationNo) { %> <%= jhiPrefix %>SortBy="<%= field.fieldName %>"<% } %>><span <%= jhiPrefix %>Translate="<%= field.fieldTranslationKey %>"><%= field.fieldNameHumanized %></span><% if (!paginationNo) { %> <fa-icon <% if (searchEngine && !field.fieldTypeBoolean && !field.fieldTypeNumeric && !field.fieldTypeTemporal) { %>*ngIf="!currentSearch" <% } %>icon="sort"></fa-icon><% } %></th>
84
83
  <%_ } _%>
85
- <%_ for (const relationship of relationships) { _%>
84
+ <%_ for (const relationship of relationships.filter(rel => !rel.otherEntityIsEmbedded)) { _%>
86
85
  <%_ if (relationship.relationshipManyToOne
87
86
  || (relationship.relationshipOneToOne && relationship.ownerSide)
88
87
  || (relationship.relationshipManyToMany && relationship.ownerSide && paginationNo)) {
@@ -126,7 +125,7 @@ _%>
126
125
  <td<% if (field.id) { %>><a<%- routerLink %><% } %>>{{ <%= entityInstance %>.<%= fieldName %> }}<% if (field.id) { %></a><% } %></td>
127
126
  <%_ } _%>
128
127
  <%_ } _%>
129
- <%_ for (const relationship of relationships) {
128
+ <%_ for (const relationship of relationships.filter(rel => !rel.otherEntityIsEmbedded)) {
130
129
  const ownerSide = relationship.ownerSide;
131
130
  const relationshipFieldName = relationship.relationshipFieldName;
132
131
  const relationshipFieldNamePlural = relationship.relationshipFieldNamePlural;
@@ -160,7 +159,7 @@ _%>
160
159
  </td>
161
160
  <%_ } _%>
162
161
  <%_ } _%>
163
- <td class="text-right">
162
+ <td class="text-end">
164
163
  <div class="btn-group">
165
164
  <button type="submit"
166
165
  [routerLink]="['/<%= entityPage %>', <%= entityInstance %>.<%= primaryKey.name %>, 'view']"
@@ -195,11 +194,11 @@ _%>
195
194
  <%_ if (paginationPagination) { _%>
196
195
 
197
196
  <div *ngIf="<%= entityInstancePlural %> && <%= entityInstancePlural %>.length > 0">
198
- <div class="row justify-content-center">
197
+ <div class="d-flex justify-content-center">
199
198
  <<%= jhiPrefixDashed %>-item-count [params]="{ page: page, totalItems: totalItems, itemsPerPage: itemsPerPage }"></<%= jhiPrefixDashed %>-item-count>
200
199
  </div>
201
200
 
202
- <div class="row justify-content-center">
201
+ <div class="d-flex justify-content-center">
203
202
  <ngb-pagination [collectionSize]="totalItems" [(page)]="ngbPaginationPage" [pageSize]="itemsPerPage" [maxSize]="5" [rotate]="true" [boundaryLinks]="true" (pageChange)="loadPage($event)"></ngb-pagination>
204
203
  </div>
205
204
  </div>
@@ -16,7 +16,7 @@
16
16
  See the License for the specific language governing permissions and
17
17
  limitations under the License.
18
18
  -%>
19
- <div class="row justify-content-center">
19
+ <div class="d-flex justify-content-center">
20
20
  <div class="col-8">
21
21
  <form name="editForm" role="form" novalidate (ngSubmit)="save()" [formGroup]="editForm">
22
22
  <h2 id="<%= jhiPrefixDashed %>-<%= entityFileName %>-heading" data-cy="<%= entityClass %>CreateUpdateHeading" <%= jhiPrefix %>Translate="<%= i18nKeyPrefix %>.home.createOrEditLabel">Create or edit a <%= entityClassHumanized %></h2>
@@ -47,8 +47,8 @@
47
47
  }
48
48
  _%>
49
49
 
50
- <div class="form-group"<% if (field.autoGenerate) { %> [hidden]="editForm.get('<%= primaryKey.name %>')!.value == null"<% } %>>
51
- <label class="form-control-label" <%= jhiPrefix %>Translate="<%= translationKey %>" for="field_<%= fieldName %>"<% if (field.javadoc) { if (enableTranslation) { %> [ngbTooltip]="'<%= i18nKeyPrefix %>.help.<%= fieldName %>' | translate"<% } else { %> ngbTooltip="<%= field.javadoc %>"<% } } %>><%= fieldNameHumanized %></label>
50
+ <div class="row mb-3"<% if (field.autoGenerate) { %> [hidden]="editForm.get('<%= primaryKey.name %>')!.value == null"<% } %>>
51
+ <label class="form-label" <%= jhiPrefix %>Translate="<%= translationKey %>" for="field_<%= fieldName %>"<% if (field.javadoc) { if (enableTranslation) { %> [ngbTooltip]="'<%= i18nKeyPrefix %>.help.<%= fieldName %>' | translate"<% } else { %> ngbTooltip="<%= field.javadoc %>"<% } } %>><%= fieldNameHumanized %></label>
52
52
  <%_ if (field.fieldIsEnum) { _%>
53
53
  <select class="form-control" name="<%= fieldName %>" formControlName="<%= fieldName %>" id="field_<%= fieldName %>" data-cy="<%= fieldName %>">
54
54
  <%_ const enumPrefix = frontendAppName + '.'+ fieldType; _%>
@@ -65,16 +65,16 @@ _%>
65
65
  <%_ } _%>
66
66
  <div *ngIf="editForm.get('<%= fieldName %>')!.value" class="form-text text-danger clearfix">
67
67
  <%_ if (field.blobContentTypeAny) { _%>
68
- <a class="pull-left" (click)="openFile(editForm.get('<%= fieldName %>')!.value, editForm.get('<%= fieldName %>ContentType')!.value)" <%= jhiPrefix %>Translate="entity.action.open">open</a><br>
69
- <span class="pull-left">{{ editForm.get('<%= fieldName %>ContentType')!.value }}, {{ byteSize(editForm.get('<%= fieldName %>')!.value) }}</span>
68
+ <a class="pull-start" (click)="openFile(editForm.get('<%= fieldName %>')!.value, editForm.get('<%= fieldName %>ContentType')!.value)" <%= jhiPrefix %>Translate="entity.action.open">open</a><br>
69
+ <span class="pull-start">{{ editForm.get('<%= fieldName %>ContentType')!.value }}, {{ byteSize(editForm.get('<%= fieldName %>')!.value) }}</span>
70
70
  <%_ } else { _%>
71
- <span class="pull-left">{{ editForm.get('<%= fieldName %>ContentType')!.value }}, {{ byteSize(editForm.get('<%= fieldName %>')!.value) }}</span>
71
+ <span class="pull-start">{{ editForm.get('<%= fieldName %>ContentType')!.value }}, {{ byteSize(editForm.get('<%= fieldName %>')!.value) }}</span>
72
72
  <%_ } _%>
73
73
  <%_ if (field.blobContentTypeImage) { _%>
74
- <button type="button" (click)="clearInputImage('<%= fieldName %>', '<%= fieldName %>ContentType', 'file_<%= fieldName %>')" class="btn btn-secondary btn-xs pull-right">
74
+ <button type="button" (click)="clearInputImage('<%= fieldName %>', '<%= fieldName %>ContentType', 'file_<%= fieldName %>')" class="btn btn-secondary btn-xs pull-end">
75
75
  <%_ } else { _%>
76
76
  <button type="button" (click)="editForm.patchValue({<%= fieldName %>: null});editForm.patchValue({<%= fieldName %>ContentType: null});"
77
- class="btn btn-secondary btn-xs pull-right">
77
+ class="btn btn-secondary btn-xs pull-end">
78
78
  <%_ } _%>
79
79
  <fa-icon icon="times"></fa-icon>
80
80
  </button>
@@ -85,9 +85,7 @@ _%>
85
85
  <%_ if (field.fieldTypeLocalDate) { _%>
86
86
  <div class="input-group">
87
87
  <input id="field_<%= fieldName %>" data-cy="<%= fieldName %>" type="text" class="form-control" name="<%= fieldName %>" ngbDatepicker #<%= fieldName %>Dp="ngbDatepicker" formControlName="<%= fieldName %>"<% if (readonly) { %> [readonly]="true"<% } %>/>
88
- <span class="input-group-append">
89
- <button type="button" class="btn btn-secondary" (click)="<%= fieldName %>Dp.toggle()"><fa-icon icon="calendar-alt"></fa-icon></button>
90
- </span>
88
+ <button type="button" class="btn btn-secondary" (click)="<%= fieldName %>Dp.toggle()"><fa-icon icon="calendar-alt"></fa-icon></button>
91
89
  </div>
92
90
  <%_ } else if (field.fieldTypeTimed) { _%>
93
91
  <div class="d-flex">
@@ -176,8 +174,8 @@ _%>
176
174
  _%>
177
175
  <%_ if (relationship.relationshipManyToOne || (relationship.relationshipOneToOne && ownerSide && relationship.otherEntityUser)) { _%>
178
176
 
179
- <div class="form-group">
180
- <label class="form-control-label" <%= jhiPrefix %>Translate="<%= translationKey %>" for="field_<%= relationshipName %>"><%= relationshipNameHumanized %></label>
177
+ <div class="row mb-3">
178
+ <label class="form-label" <%= jhiPrefix %>Translate="<%= translationKey %>" for="field_<%= relationshipName %>"><%= relationshipNameHumanized %></label>
181
179
  <select class="form-control" id="field_<%= relationshipName %>" data-cy="<%= relationshipFieldName %>" name="<%= relationshipName %>" formControlName="<%= relationshipFieldName %>">
182
180
  <%_ if (!relationshipRequired) { _%>
183
181
  <option [ngValue]="null"></option>
@@ -189,8 +187,8 @@ _%>
189
187
  </div>
190
188
  <%_ } else if (relationship.relationshipOneToOne && ownerSide) { _%>
191
189
 
192
- <div class="form-group">
193
- <label class="form-control-label" <%= jhiPrefix %>Translate="<%= translationKey %>" for="field_<%= relationshipName %>"><%= relationshipNameHumanized %></label>
190
+ <div class="row mb-3">
191
+ <label class="form-label" <%= jhiPrefix %>Translate="<%= translationKey %>" for="field_<%= relationshipName %>"><%= relationshipNameHumanized %></label>
194
192
  <select class="form-control" id="field_<%= relationshipName %>" data-cy="<%= relationshipFieldName %>" name="<%= relationshipName %>" formControlName="<%= relationshipName %>">
195
193
  <%_ if (!relationshipRequired) { _%>
196
194
  <option [ngValue]="null"></option>
@@ -202,7 +200,7 @@ _%>
202
200
  </div>
203
201
  <%_ } else if (relationship.relationshipManyToMany && ownerSide) { _%>
204
202
 
205
- <div class="form-group">
203
+ <div class="row mb-3">
206
204
  <label <%= jhiPrefix %>Translate="<%= translationKey %>" for="field_<%= relationshipFieldNamePlural %>"><%= relationshipNameHumanized %></label>
207
205
  <select class="form-control" id="field_<%= relationshipFieldNamePlural %>" data-cy="<%= relationshipFieldName %>" multiple name="<%= relationshipFieldNamePlural %>" formControlName="<%= relationshipFieldNamePlural %>">
208
206
  <option [ngValue]="getSelected<%= relationship.otherEntity.entityAngularName %>(<%= otherEntityName %>Option, editForm.get('<%= relationshipFieldNamePlural %>')!.value)" *ngFor="let <%= otherEntityName %>Option of <%= otherEntity.entityInstancePlural %>SharedCollection; trackBy: track<%= relationship.otherEntity.entityAngularName %>By<%= relationship.otherEntity.primaryKey.nameCapitalized %>">{{ <%= otherEntityName %>Option.<%= otherEntityField %> }}</option>
@@ -166,7 +166,7 @@ _%>
166
166
 
167
167
  this.updateForm(<%= entityInstance %>);
168
168
 
169
- <%_ if (relationships.filter(rel => rel.ownerSide).length > 0) { _%>
169
+ <%_ if (relationships.filter(rel => rel.ownerSide && !rel.otherEntityIsEmbedded).length > 0) { _%>
170
170
  this.loadRelationshipsOptions();
171
171
  <%_ } _%>
172
172
  });
@@ -308,7 +308,7 @@ _%>
308
308
  <%_ } _%>
309
309
  }
310
310
 
311
- <%_ if (relationships.filter(rel => rel.ownerSide).length > 0) { _%>
311
+ <%_ if (relationships.filter(rel => rel.ownerSide && !rel.otherEntityIsEmbedded).length > 0) { _%>
312
312
  protected loadRelationshipsOptions(): void {
313
313
  <%_ for (const relationshipsByEntityNeedingOptions of Object.values(differentRelationships).map(relationships => relationships.filter(rel => rel.ownerSide)).filter(relationships => relationships.length > 0)) { _%>
314
314
  <%_ const relationshipsWithCustomUniqueOptions = relationshipsByEntityNeedingOptions.filter(rel => rel.relationshipOneToOne && !rel.otherEntityUser); %>
@@ -19,7 +19,7 @@ const baseApi = entityApi + 'api/';
19
19
  const entityFakeData = generateFakeData('cypress');
20
20
  const requiredRelationships = relationships.filter(rel => rel.relationshipRequired || rel.id);
21
21
  const requiredOtherEntities = _.uniq(requiredRelationships.map(rel => rel.otherEntity));
22
- const otherEntities = _.uniq(Object.values(differentRelationships).map(rels => rels[0].otherEntity));
22
+ const otherEntities = _.uniq(Object.values(differentRelationships).filter(rels => rels.length > 0).map(rels => rels[0].otherEntity));
23
23
  // We cannot generate a required entity with relationship with required relationships.
24
24
  const skipCreateTest =
25
25
  (
@@ -389,7 +389,7 @@ describe('Entities reducer tests', () => {
389
389
 
390
390
  }
391
391
  ];
392
- await store.dispatch(partialUpdateEntity({ id: <%- generateTestEntityId(primaryKey.type) %> }));
392
+ await store.dispatch(partialUpdateEntity({ <%- primaryKey.name %>: <%- generateTestEntityId(primaryKey.type) %> }));
393
393
  expect(store.getActions()[0]).toMatchObject(expectedActions[0]);
394
394
  expect(store.getActions()[1]).toMatchObject(expectedActions[1]);
395
395
  <%_ if (!paginationInfiniteScroll) { _%>
@@ -211,7 +211,7 @@ _%>
211
211
  const relationshipFieldName = rel.relationshipFieldName;
212
212
  const relationshipFieldNamePlural = rel.relationshipFieldNamePlural;
213
213
  if (rel.relationshipManyToOne || (rel.relationshipOneToOne && rel.ownerSide)) { _%>
214
- <%= relationshipFieldName %>: <%= entityInstance %>Entity?.<%= relationshipFieldName %>?.id,
214
+ <%= relationshipFieldName %>: <%= entityInstance %>Entity?.<%= relationshipFieldName %>?.<%= otherEntityPkName %>,
215
215
  <%_ } else if (rel.relationshipManyToMany && rel.ownerSide) { _%>
216
216
  <%= relationshipFieldNamePlural %>: <%= entityInstance %>Entity?.<%= relationshipFieldNamePlural %>?.map(e => e.<%= otherEntityPkName %>.toString()),
217
217
  <%_ } _%>
@@ -30,7 +30,7 @@ let elementGetter = `getText()`;
30
30
  let openBlockComment = ``;
31
31
  let closeBlockComment = ``;
32
32
  if (enableTranslation) {
33
- elementGetter = `getAttribute('jhiTranslate')`;
33
+ elementGetter = `getAttribute('${jhiPrefix}Translate')`;
34
34
  }
35
35
  for (let relationship of relationships) {
36
36
  if (relationship.relationshipRequired) {
@@ -26,7 +26,7 @@ let elementGetter = `getText()`;
26
26
  let openBlockComment = ``;
27
27
  let closeBlockComment = ``;
28
28
  if (enableTranslation) {
29
- elementGetter = `getAttribute('jhiTranslate')`;
29
+ elementGetter = `getAttribute('${jhiPrefix}Translate')`;
30
30
  }
31
31
  for (let relationship of relationships) {
32
32
  if (relationship.relationshipRequired) {
@@ -47,7 +47,7 @@ let elementGetter = `getText()`;
47
47
  let openBlockComment = ``;
48
48
  let closeBlockComment = ``;
49
49
  if (enableTranslation) {
50
- elementGetter = `getAttribute('jhiTranslate')`;
50
+ elementGetter = `getAttribute('${jhiPrefix}Translate')`;
51
51
  }
52
52
  for (let relationship of relationships) {
53
53
  if (relationship.relationshipRequired || relationship.id) {
@@ -16,6 +16,5 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import generator from './index.js';
20
-
21
- export default generator;
19
+ export { default } from './index.js';
20
+ export { entityClientI18nFiles, enumClientI18nFiles } from './files.js';
@@ -16,6 +16,5 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import generator from './index.js';
20
-
21
- export default generator;
19
+ export { default } from './index.js';
20
+ export { serverFiles as files } from './files.js';
@@ -21,12 +21,23 @@ const { SERVER_MAIN_SRC_DIR, SERVER_MAIN_RES_DIR } = require('../generator-const
21
21
  const entityCouchbaseFiles = {
22
22
  dbChangelog: [
23
23
  {
24
- condition: generator => generator.searchEngineCouchbase && !generator.skipDbChangelog,
24
+ condition: generator => !generator.skipDbChangelog && !generator.embedded,
25
+ path: SERVER_MAIN_RES_DIR,
26
+ templates: [
27
+ {
28
+ file: 'config/couchmove/changelog/entity.n1ql',
29
+ renameTo: generator => `config/couchmove/changelog/V${generator.changelogDate}__${generator.entityInstance.toLowerCase()}.n1ql`,
30
+ },
31
+ ],
32
+ },
33
+ {
34
+ condition: generator => generator.searchEngineCouchbase && !generator.skipDbChangelog && !generator.embedded,
25
35
  path: SERVER_MAIN_RES_DIR,
26
36
  templates: [
27
37
  {
28
38
  file: 'config/couchmove/changelog/entity.fts',
29
- renameTo: generator => `config/couchmove/changelog/V${generator.changelogDate}__${generator.entityInstance.toLowerCase()}.fts`,
39
+ renameTo: generator =>
40
+ `config/couchmove/changelog/V${parseInt(generator.changelogDate, 10) + 10}__${generator.entityInstance.toLowerCase()}.fts`,
30
41
  },
31
42
  ],
32
43
  },
@@ -56,6 +67,16 @@ const entityCouchbaseFiles = {
56
67
 
57
68
  function writeEntityCouchbaseFiles() {
58
69
  return {
70
+ cleanupCouchbaseFiles() {
71
+ if (!this.databaseTypeCouchbase) return;
72
+
73
+ if (this.isJhipsterVersionLessThan('7.6.1')) {
74
+ this.removeFile(
75
+ `${SERVER_MAIN_RES_DIR}config/couchmove/changelog/V${this.changelogDate}__${this.entityInstance.toLowerCase()}.fts`
76
+ );
77
+ }
78
+ },
79
+
59
80
  async writeEntityCouchbaseFiles() {
60
81
  if (this.skipServer || !this.databaseTypeCouchbase) return;
61
82
 
@@ -177,8 +177,8 @@ const serverFiles = {
177
177
  path: SERVER_MAIN_SRC_DIR,
178
178
  templates: [
179
179
  {
180
- file: 'package/repository/search/SortToFieldSortBuilderConverter.java',
181
- renameTo: generator => `${generator.entityAbsoluteFolder}/repository/search/SortToFieldSortBuilderConverter.java`,
180
+ file: 'package/repository/search/SortToSortBuilderListConverter.java',
181
+ renameTo: generator => `${generator.entityAbsoluteFolder}/repository/search/SortToSortBuilderListConverter.java`,
182
182
  },
183
183
  ],
184
184
  },
@@ -192,6 +192,20 @@ const serverFiles = {
192
192
  },
193
193
  ],
194
194
  },
195
+ {
196
+ condition: generator => !generator.reactive && generator.databaseTypeSql && !generator.embedded && generator.containsBagRelationships,
197
+ path: SERVER_MAIN_SRC_DIR,
198
+ templates: [
199
+ {
200
+ file: 'package/repository/EntityRepositoryWithBagRelationships.java',
201
+ renameTo: generator => `${generator.packageFolder}/repository/${generator.entityClass}RepositoryWithBagRelationships.java`,
202
+ },
203
+ {
204
+ file: 'package/repository/EntityRepositoryWithBagRelationshipsImpl.java',
205
+ renameTo: generator => `${generator.packageFolder}/repository/${generator.entityClass}RepositoryWithBagRelationshipsImpl.java`,
206
+ },
207
+ ],
208
+ },
195
209
  {
196
210
  condition: generator => generator.reactive && !generator.embedded && generator.databaseType !== COUCHBASE,
197
211
  path: SERVER_MAIN_SRC_DIR,