generator-jhipster 8.0.0-rc.1 → 8.1.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 (369) hide show
  1. package/README.md +71 -58
  2. package/dist/cli/environment-builder.mjs +14 -7
  3. package/dist/cli/jhipster-command.mjs +7 -3
  4. package/dist/cli/program.mjs +2 -2
  5. package/dist/generators/angular/cleanup.mjs +7 -0
  6. package/dist/generators/angular/files-angular.mjs +3 -4
  7. package/dist/generators/angular/generator.mjs +10 -22
  8. package/dist/generators/angular/needle-api/needle-client-angular.mjs +2 -8
  9. package/dist/generators/angular/resources/package.json +25 -24
  10. package/dist/generators/angular/support/translate-angular.mjs +2 -2
  11. package/dist/generators/angular/templates/README.md.jhi.client.angular.ejs +1 -1
  12. package/dist/generators/angular/templates/angular.json.ejs +3 -7
  13. package/dist/generators/angular/templates/package.json.ejs +4 -8
  14. package/dist/generators/angular/templates/src/main/webapp/app/account/activate/activate.component.html.ejs +6 -4
  15. package/dist/generators/angular/templates/src/main/webapp/app/account/password/password-strength-bar/password-strength-bar.component.ts.ejs +1 -1
  16. package/dist/generators/angular/templates/src/main/webapp/app/account/password/password.component.html.ejs +39 -33
  17. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html.ejs +44 -36
  18. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html.ejs +24 -23
  19. package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.component.html.ejs +74 -62
  20. package/dist/generators/angular/templates/src/main/webapp/app/account/sessions/sessions.component.html.ejs +12 -4
  21. package/dist/generators/angular/templates/src/main/webapp/app/account/settings/settings.component.html.ejs +54 -48
  22. package/dist/generators/angular/templates/src/main/webapp/app/admin/admin.routes.ts.ejs +74 -0
  23. package/dist/generators/angular/templates/src/main/webapp/app/admin/configuration/configuration.component.html.ejs +15 -5
  24. package/dist/generators/angular/templates/src/main/webapp/app/admin/docs/docs.component.ts.ejs +1 -1
  25. package/dist/generators/angular/templates/src/main/webapp/app/admin/gateway/gateway.component.html.ejs +20 -7
  26. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/health.component.html.ejs +10 -7
  27. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/modal/health-modal.component.html.ejs +9 -3
  28. package/dist/generators/angular/templates/src/main/webapp/app/admin/logs/logs.component.html.ejs +12 -4
  29. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/jvm-memory/jvm-memory.component.html.ejs +13 -7
  30. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-cache/metrics-cache.component.html.ejs +6 -2
  31. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-datasource/metrics-datasource.component.html.ejs +3 -1
  32. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-endpoints-requests/metrics-endpoints-requests.component.html.ejs +13 -9
  33. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-garbagecollector/metrics-garbagecollector.component.html.ejs +13 -5
  34. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.html.ejs +21 -7
  35. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-request/metrics-request.component.html.ejs +6 -2
  36. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-system/metrics-system.component.html.ejs +3 -1
  37. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/metrics.component.html.ejs +16 -7
  38. package/dist/generators/angular/templates/src/main/webapp/app/admin/tracker/tracker.component.html.ejs +3 -1
  39. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.html.ejs +3 -1
  40. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/detail/user-management-detail.component.html.ejs +11 -4
  41. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/list/user-management.component.html.ejs +20 -11
  42. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/update/user-management-update.component.html.ejs +48 -34
  43. package/dist/generators/angular/templates/src/main/webapp/app/app.component.ts.ejs +73 -0
  44. package/dist/generators/angular/templates/src/main/webapp/app/app.config.ts.ejs +67 -0
  45. package/dist/generators/angular/templates/src/main/webapp/app/app.routes.ts.ejs +85 -0
  46. package/dist/generators/angular/templates/src/main/webapp/app/core/microfrontend/index.ts.ejs +5 -4
  47. package/dist/generators/angular/templates/src/main/webapp/app/core/util/alert.service.spec.ts.ejs +1 -1
  48. package/dist/generators/angular/templates/src/main/webapp/app/core/util/data-util.service.ts.ejs +2 -2
  49. package/dist/generators/angular/templates/src/main/webapp/app/core/util/event-manager.service.spec.ts.ejs +12 -12
  50. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.model.ts.ejs +4 -4
  51. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/delete/_entityFile_-delete-dialog.component.html.ejs +3 -1
  52. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/detail/_entityFile_-detail.component.html.ejs +26 -14
  53. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.html.ejs +44 -35
  54. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.ts.ejs +1 -1
  55. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/service/_entityFile_.service.ts.ejs +1 -1
  56. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-form.service.spec.ts.ejs +2 -2
  57. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-form.service.ts.ejs +5 -12
  58. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.html.ejs +55 -21
  59. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.spec.ts.ejs +2 -2
  60. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.ts.ejs +10 -10
  61. package/dist/generators/angular/templates/src/main/webapp/app/entities/entity.routes.ts.ejs +25 -0
  62. package/dist/generators/angular/templates/src/main/webapp/app/home/home.component.html.ejs +21 -17
  63. package/dist/generators/angular/templates/src/main/webapp/app/home/home.component.ts.ejs +1 -1
  64. package/dist/generators/angular/templates/src/main/webapp/app/layouts/error/error.component.html.ejs +3 -3
  65. package/dist/generators/angular/templates/src/main/webapp/app/layouts/main/main.component.spec.ts.ejs +5 -2
  66. package/dist/generators/angular/templates/src/main/webapp/app/layouts/main/main.component.ts.ejs +5 -1
  67. package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs +97 -78
  68. package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/navbar.component.scss.ejs +1 -1
  69. package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/navbar.component.ts.ejs +1 -1
  70. package/dist/generators/angular/templates/src/main/webapp/app/layouts/profiles/page-ribbon.component.scss.ejs +1 -1
  71. package/dist/generators/angular/templates/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts.ejs +6 -4
  72. package/dist/generators/angular/templates/src/main/webapp/app/login/login.component.html.ejs +3 -3
  73. package/dist/generators/angular/templates/src/main/webapp/app/shared/alert/alert-error.component.html.ejs +6 -2
  74. package/dist/generators/angular/templates/src/main/webapp/app/shared/alert/alert.component.html.ejs +6 -2
  75. package/dist/generators/angular/templates/src/main/webapp/app/shared/filter/filter.component.html.ejs +11 -7
  76. package/dist/generators/angular/templates/src/main/webapp/app/shared/filter/filter.model.spec.ts.ejs +1 -1
  77. package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort-by.directive.spec.ts.ejs +3 -3
  78. package/dist/generators/angular/templates/src/main/webapp/bootstrap.ts.ejs +5 -5
  79. package/dist/generators/angular/templates/src/main/webapp/content/scss/global.scss.ejs +1 -1
  80. package/dist/generators/angular/templates/webpack/webpack.microfrontend.js.ejs +48 -126
  81. package/dist/generators/app/README.md +108 -0
  82. package/dist/generators/app/USAGE +3 -0
  83. package/dist/generators/app/command.mjs +3 -3
  84. package/dist/generators/app/generator.mjs +11 -0
  85. package/dist/generators/app/support/config.mjs +3 -3
  86. package/dist/generators/base/command.mjs +0 -11
  87. package/dist/generators/base/generator.mjs +0 -3
  88. package/dist/generators/base/support/config.mjs +6 -6
  89. package/dist/generators/base/support/jhipster7-context.mjs +3 -3
  90. package/dist/generators/base-application/generator.mjs +7 -8
  91. package/dist/generators/base-application/support/entities.mjs +2 -2
  92. package/dist/generators/base-application/support/enum.mjs +1 -1
  93. package/dist/generators/base-application/support/index.mjs +1 -0
  94. package/dist/generators/base-application/support/prepare-entity.mjs +14 -11
  95. package/dist/generators/base-application/support/prepare-field.mjs +11 -7
  96. package/dist/generators/base-application/support/prepare-relationship.mjs +16 -14
  97. package/dist/generators/base-application/support/update-application-entities-transform.mjs +52 -0
  98. package/dist/generators/base-core/generator.mjs +17 -4
  99. package/dist/generators/base-entity-changes/generator.mjs +1 -1
  100. package/dist/generators/base-workspaces/internal/docker-prompts.mjs +13 -12
  101. package/dist/generators/bootstrap/command.mjs +6 -0
  102. package/dist/generators/bootstrap/generator.mjs +84 -45
  103. package/dist/generators/bootstrap/support/auto-crlf-transform.mjs +34 -21
  104. package/dist/generators/bootstrap/support/eslint-transform.mjs +2 -5
  105. package/dist/generators/bootstrap/support/java-unused-imports-transform.mjs +2 -2
  106. package/dist/generators/bootstrap/support/multi-step-transform/index.mjs +17 -28
  107. package/dist/generators/bootstrap/support/multi-step-transform/template-file-fs.mjs +12 -6
  108. package/dist/generators/bootstrap/support/multi-step-transform/template-file.mjs +1 -0
  109. package/dist/generators/bootstrap/support/prettier-support.mjs +2 -2
  110. package/dist/generators/bootstrap-application/generator.mjs +10 -21
  111. package/dist/generators/bootstrap-application-base/command.mjs +30 -0
  112. package/dist/generators/bootstrap-application-base/generator.mjs +36 -11
  113. package/dist/generators/bootstrap-application-base/index.mjs +1 -0
  114. package/dist/generators/bootstrap-application-base/support/export-jdl-transform.mjs +61 -0
  115. package/dist/generators/bootstrap-application-base/support/import-jdl-transform.mjs +64 -0
  116. package/dist/generators/bootstrap-application-base/support/index.mjs +2 -0
  117. package/dist/generators/bootstrap-application-server/generator.mjs +2 -2
  118. package/dist/generators/client/command.mjs +2 -0
  119. package/dist/generators/client/resources/package.json +4 -4
  120. package/dist/generators/client/support/entity-definition.mjs +3 -3
  121. package/dist/generators/client/templates/README.md.jhi.client.ejs +2 -2
  122. package/dist/generators/client/templates/src/main/webapp/content/css/loading.css.ejs +1 -1
  123. package/dist/generators/client/templates/src/main/webapp/index.html.ejs +2 -2
  124. package/dist/generators/client/templates/webpack/webpack.microfrontend.js.jhi.ejs +14 -1
  125. package/dist/generators/common/command.mjs +2 -0
  126. package/dist/generators/common/files.mjs +1 -1
  127. package/dist/generators/common/generator.mjs +29 -7
  128. package/dist/generators/common/resources/package.json +4 -4
  129. package/dist/generators/common/templates/.lintstagedrc.cjs.ejs +21 -0
  130. package/dist/generators/common/templates/.prettierrc.ejs +1 -1
  131. package/dist/generators/common/templates/README.md.jhi.ejs +2 -0
  132. package/dist/generators/common/templates/sonar-project.properties.ejs +1 -1
  133. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/account/settings-page.cy.ts.ejs +3 -0
  134. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/entity/_entity_.cy.ts.ejs +0 -1
  135. package/dist/generators/docker/generator.mjs +1 -1
  136. package/dist/generators/docker/templates/docker/cassandra.yml.ejs +2 -2
  137. package/dist/generators/docker/templates/docker/keycloak.yml.ejs +1 -1
  138. package/dist/generators/docker/templates/docker/realm-config/jhipster-realm.json.ejs +4 -1
  139. package/dist/generators/docker-compose/generator.mjs +4 -11
  140. package/dist/generators/docker-compose/templates/docker-compose.yml.ejs +1 -1
  141. package/dist/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs +4 -1
  142. package/dist/generators/entity/prompts.mjs +123 -306
  143. package/dist/generators/export-jdl/generator.mjs +1 -1
  144. package/dist/generators/feign-client/cleanup.mjs +12 -0
  145. package/dist/generators/feign-client/files.mjs +35 -0
  146. package/dist/generators/feign-client/generator.mjs +65 -0
  147. package/dist/generators/feign-client/index.mjs +19 -0
  148. package/dist/generators/feign-client/templates/src/main/java/_package_/client/AuthorizationHeaderUtil.java.ejs +174 -0
  149. package/dist/generators/feign-client/templates/src/main/java/_package_/client/AuthorizedFeignClient.java.ejs +72 -0
  150. package/dist/generators/feign-client/templates/src/main/java/_package_/client/OAuth2InterceptedFeignConfiguration.java.ejs +35 -0
  151. package/dist/generators/feign-client/templates/src/main/java/_package_/client/OAuthIdpTokenResponseDTO.java.ejs +161 -0
  152. package/dist/generators/feign-client/templates/src/main/java/_package_/client/TokenRelayRequestInterceptor.java.ejs +42 -0
  153. package/dist/generators/feign-client/templates/src/main/java/_package_/client/UserFeignClientInterceptor_jwt.java.ejs +36 -0
  154. package/dist/generators/feign-client/templates/src/main/java/_package_/config/FeignConfiguration.java.ejs +45 -0
  155. package/dist/generators/feign-client/templates/src/test/java/_package_/client/AuthorizationHeaderUtilTest.java.ejs +263 -0
  156. package/dist/generators/generate-blueprint/command.mjs +1 -1
  157. package/dist/generators/generate-blueprint/resources/package.json +1 -1
  158. package/dist/generators/generate-blueprint/templates/vitest.config.ts.ejs +1 -1
  159. package/dist/generators/generator-constants.mjs +11 -7
  160. package/dist/generators/generator-list.mjs +1 -0
  161. package/dist/generators/git/generator.mjs +3 -5
  162. package/dist/generators/gradle/constants.mjs +1 -1
  163. package/dist/generators/heroku/generator.mjs +318 -595
  164. package/dist/generators/heroku/templates/Procfile.ejs +1 -1
  165. package/dist/generators/heroku/templates/application-heroku.yml.ejs +0 -12
  166. package/dist/generators/info/generator.mjs +6 -4
  167. package/dist/generators/init/generator.mjs +2 -2
  168. package/dist/generators/java/command.mjs +6 -0
  169. package/dist/generators/java/entity-files.mjs +5 -1
  170. package/dist/generators/java/generator.mjs +15 -15
  171. package/dist/generators/java/support/package-info-transform.mjs +20 -6
  172. package/dist/generators/java/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.ejs +24 -28
  173. package/dist/generators/java/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.jackson_identity_info.ejs +30 -0
  174. package/dist/generators/java/templates/src/main/java/_package_/_entityPackage_/domain/enumeration/_enumName_.java.ejs +3 -3
  175. package/dist/generators/java/templates/src/test/java/_package_/_entityPackage_/domain/_persistClass_Test.java.ejs +86 -8
  176. package/dist/generators/java/templates/src/test/java/_package_/_entityPackage_/domain/_persistClass_TestSamples.java.ejs +85 -0
  177. package/dist/generators/jdl/generator.mjs +32 -28
  178. package/dist/generators/kubernetes/templates/ingress.yml.ejs +0 -1
  179. package/dist/generators/kubernetes/templates/keycloak/keycloak-configmap.yml.ejs +4 -1
  180. package/dist/generators/kubernetes/templates/keycloak/keycloak.yml.ejs +1 -1
  181. package/dist/generators/languages/command.mjs +5 -0
  182. package/dist/generators/languages/generator.mjs +44 -28
  183. package/dist/generators/languages/prompts.mjs +3 -1
  184. package/dist/generators/languages/support/translate.mjs +1 -1
  185. package/dist/generators/languages/templates/entity/i18n/entity_pt-br.json.ejs +1 -1
  186. package/dist/generators/languages/translation-data.mjs +8 -13
  187. package/dist/generators/liquibase/README.md +19 -0
  188. package/dist/generators/liquibase/generator.mjs +7 -3
  189. package/dist/generators/project-name/generator.mjs +14 -19
  190. package/dist/generators/project-name/support/name-resolver.mjs +35 -6
  191. package/dist/generators/react/generator.mjs +18 -10
  192. package/dist/generators/react/resources/package.json +30 -29
  193. package/dist/generators/react/templates/package.json.ejs +4 -5
  194. package/dist/generators/react/templates/src/main/webapp/app/config/icon-loader.ts.ejs +35 -33
  195. package/dist/generators/react/templates/src/main/webapp/app/config/notification-middleware.spec.ts.ejs +4 -4
  196. package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-detail.tsx.ejs +1 -2
  197. package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.tsx.ejs +19 -15
  198. package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.reducer.ts.ejs +1 -1
  199. package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.tsx.ejs +3 -8
  200. package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityModel_.model.ts.ejs +1 -1
  201. package/dist/generators/react/templates/src/main/webapp/app/modules/home/home.tsx.ejs +1 -1
  202. package/dist/generators/react/templates/src/main/webapp/app/routes.tsx.ejs +9 -2
  203. package/dist/generators/react/templates/src/main/webapp/app/shared/layout/header/header-components.tsx.ejs +1 -1
  204. package/dist/generators/react/templates/src/main/webapp/app/shared/layout/header/header.scss.ejs +6 -5
  205. package/dist/generators/react/templates/src/main/webapp/app/shared/layout/menus/entities.tsx.ejs +10 -1
  206. package/dist/generators/react/templates/src/main/webapp/app/shared/reducers/reducer.utils.ts.ejs +1 -1
  207. package/dist/generators/react/templates/src/main/webapp/app/shared/util/date-utils.ts.ejs +1 -1
  208. package/dist/generators/react/templates/tsconfig.test.json.ejs +1 -1
  209. package/dist/generators/react/templates/webpack/webpack.microfrontend.js.jhi.react.ejs +13 -58
  210. package/dist/generators/server/cleanup.mjs +5 -0
  211. package/dist/generators/server/command.mjs +13 -2
  212. package/dist/generators/server/entity-files.mjs +3 -3
  213. package/dist/generators/server/files.mjs +2 -38
  214. package/dist/generators/server/generator.mjs +48 -23
  215. package/dist/generators/server/jdl/application-definition.mjs +5 -2
  216. package/dist/generators/server/options/feign-client.mjs +24 -0
  217. package/dist/generators/server/options/index.mjs +1 -0
  218. package/dist/generators/server/resources/Dockerfile +19 -19
  219. package/dist/generators/server/resources/gradle/libs.versions.toml +4 -4
  220. package/dist/generators/server/resources/pom.xml +18 -18
  221. package/dist/generators/server/support/config.mjs +5 -4
  222. package/dist/generators/server/support/prepare-entity.mjs +9 -6
  223. package/dist/generators/server/support/prepare-field.mjs +20 -0
  224. package/dist/generators/server/support/relationship.mjs +2 -1
  225. package/dist/generators/server/support/templates/field-values.mjs +5 -2
  226. package/dist/generators/server/templates/README.md.jhi.spring-boot.ejs +0 -1
  227. package/dist/generators/server/templates/build.gradle.ejs +1 -2
  228. package/dist/generators/server/templates/gradle/profile_dev.gradle.ejs +3 -21
  229. package/dist/generators/server/templates/gradle/profile_prod.gradle.ejs +5 -15
  230. package/dist/generators/server/templates/package.json.ejs +0 -5
  231. package/dist/generators/server/templates/pom.xml.ejs +2 -12
  232. package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/_partials_entity_/get_all_template.ejs +8 -8
  233. package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/_partials_entity_/search_template.ejs +4 -4
  234. package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/repository/_entityClass_Repository.java.ejs +1 -1
  235. package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/service/dto/_dtoClass_.java.ejs +2 -2
  236. package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/service/mapper/_entityClass_Mapper.java.ejs +2 -2
  237. package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/web/rest/_entityClass_Resource.java.ejs +14 -14
  238. package/dist/generators/server/templates/src/main/java/_package_/config/JacksonConfiguration.java.ejs +2 -1
  239. package/dist/generators/server/templates/src/main/java/_package_/config/SecurityConfiguration_imperative.java.ejs +21 -3
  240. package/dist/generators/server/templates/src/main/java/_package_/config/SecurityConfiguration_reactive.java.ejs +6 -1
  241. package/dist/generators/server/templates/src/main/java/_package_/security/oauth2/CustomClaimConverter.java.ejs +1 -5
  242. package/dist/generators/server/templates/src/main/java/_package_/service/MailService.java.ejs +48 -6
  243. package/dist/generators/server/templates/src/main/java/_package_/web/rest/AccountResource.java.ejs +1 -1
  244. package/dist/generators/server/templates/src/main/java/_package_/web/rest/LogoutResource_imperative.java.ejs +4 -13
  245. package/dist/generators/server/templates/src/main/java/_package_/web/rest/LogoutResource_reactive.java.ejs +5 -11
  246. package/dist/generators/server/templates/src/main/java/_package_/web/rest/PublicUserResource.java.ejs +6 -7
  247. package/dist/generators/server/templates/src/main/java/_package_/web/rest/UserResource.java.ejs +6 -8
  248. package/dist/generators/server/templates/src/main/java/_package_/web/rest/errors/ExceptionTranslator.java.ejs +4 -7
  249. package/dist/generators/server/templates/src/main/resources/config/application.yml.ejs +8 -7
  250. package/dist/generators/server/templates/src/test/java/_package_/TechnicalStructureTest.java.ejs +1 -1
  251. package/dist/generators/server/templates/src/test/java/_package_/_entityPackage_/web/rest/_entityClass_ResourceIT.java.ejs +11 -11
  252. package/dist/generators/server/templates/src/test/java/_package_/web/rest/AccountResourceIT.java.ejs +4 -4
  253. package/dist/generators/server/templates/src/test/java/_package_/web/rest/errors/ExceptionTranslatorTestController.java.ejs +2 -2
  254. package/dist/generators/spring-cache/internal/dependencies.mjs +1 -1
  255. package/dist/generators/spring-cache/templates/gradle/cache.gradle.ejs +1 -1
  256. package/dist/generators/spring-cache/templates/src/main/java/_package_/config/CacheFactoryConfiguration.java.ejs +1 -1
  257. package/dist/generators/spring-cloud-stream/templates/src/main/java/_package_/web/rest/KafkaResource_imperative.java.ejs +1 -1
  258. package/dist/generators/spring-cloud-stream/templates/src/main/java/_package_/web/rest/KafkaResource_reactive.java.ejs +1 -1
  259. package/dist/generators/spring-cloud-stream/templates/src/test/java/_package_/web/rest/KafkaResourceIT_reactive.java.ejs +3 -0
  260. package/dist/generators/spring-data-elasticsearch/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.elastic_search.ejs +1 -1
  261. package/dist/generators/spring-data-elasticsearch/templates/src/main/java/_package_/_entityPackage_/repository/search/_entityClass_SearchRepository.java.ejs +1 -3
  262. package/dist/generators/spring-data-elasticsearch/templates/src/main/java/_package_/repository/search/UserSearchRepository.java.ejs +4 -4
  263. package/dist/generators/spring-data-neo4j/generator.mjs +43 -1
  264. package/dist/generators/spring-data-neo4j/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.spring_data_neo4j.ejs +3 -37
  265. package/dist/generators/spring-data-relational/README.md +7 -0
  266. package/dist/generators/spring-data-relational/generator.mjs +2 -1
  267. package/dist/generators/spring-data-relational/internal/dependencies.mjs +29 -8
  268. package/dist/generators/spring-data-relational/support/database-data.mjs +4 -0
  269. package/dist/generators/spring-data-relational/templates/src/main/java/_package_/repository/EntityManager_reactive.java.ejs +49 -8
  270. package/dist/generators/spring-data-relational/templates/src/test/java/_package_/config/SqlTestContainersSpringContextCustomizerFactory.java.ejs +1 -1
  271. package/dist/generators/upgrade/generator.mjs +3 -3
  272. package/dist/generators/vue/generator.mjs +25 -16
  273. package/dist/generators/vue/resources/package.json +29 -28
  274. package/dist/generators/vue/templates/package.json.ejs +4 -5
  275. package/dist/generators/vue/templates/src/main/webapp/app/core/jhi-navbar/jhi-navbar.component.ts.ejs +10 -3
  276. package/dist/generators/vue/templates/src/main/webapp/app/core/jhi-navbar/jhi-navbar.vue.ejs +3 -4
  277. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-details.vue.ejs +1 -2
  278. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.component.spec.ts.ejs +1 -1
  279. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.component.ts.ejs +3 -3
  280. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.vue.ejs +2 -15
  281. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.service.ts.ejs +1 -1
  282. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.vue.ejs +14 -7
  283. package/dist/generators/vue/templates/src/main/webapp/app/router/index.ts.ejs +8 -1
  284. package/dist/generators/vue/templates/webpack/webpack.microfrontend.js.jhi.vue.ejs +19 -34
  285. package/dist/jdl/converters/jdl-to-json/jdl-to-json-basic-entity-converter.js +1 -0
  286. package/dist/jdl/converters/jdl-to-json/jdl-to-json-option-converter.js +2 -2
  287. package/dist/jdl/converters/jdl-to-json/jdl-to-json-relationship-converter.js +1 -1
  288. package/dist/jdl/converters/jdl-to-json/jdl-without-application-to-json-converter.js +1 -1
  289. package/dist/jdl/converters/json-to-jdl-converter.js +1 -1
  290. package/dist/jdl/converters/json-to-jdl-entity-converter.js +1 -0
  291. package/dist/jdl/converters/parsed-jdl-to-jdl-object/application-converter.js +1 -17
  292. package/dist/jdl/converters/parsed-jdl-to-jdl-object/entity-converter.js +5 -0
  293. package/dist/jdl/converters/parsed-jdl-to-jdl-object/parsed-jdl-to-jdl-object-converter.js +0 -27
  294. package/dist/jdl/exporters/applications/jhipster-application-formatter.js +17 -1
  295. package/dist/jdl/exporters/config.js +11 -0
  296. package/dist/jdl/exporters/export-utils.js +2 -13
  297. package/dist/jdl/exporters/jhipster-entity-exporter.js +3 -2
  298. package/dist/jdl/index.js +1 -0
  299. package/dist/jdl/jdl-importer.js +6 -2
  300. package/dist/jdl/jhipster/default-application-options.js +1 -1
  301. package/dist/jdl/jhipster/field-types.js +1 -1
  302. package/dist/jdl/jhipster/json-entity.js +6 -0
  303. package/dist/jdl/models/jdl-application-configuration-factory.js +34 -2
  304. package/dist/jdl/models/jdl-application-configuration.js +6 -3
  305. package/dist/jdl/models/jdl-application-factory.js +2 -2
  306. package/dist/jdl/models/jdl-application.js +12 -3
  307. package/dist/jdl/models/jdl-entity.js +16 -1
  308. package/dist/jdl/models/jdl-field.js +13 -0
  309. package/dist/jdl/models/jdl-object.js +3 -3
  310. package/dist/jdl/models/jdl-relationship.js +23 -5
  311. package/dist/jdl/parsing/jdl-ast-builder-visitor.js +63 -7
  312. package/dist/jdl/parsing/jdl-parser.js +52 -6
  313. package/dist/jdl/parsing/lexer/application-tokens.js +2 -2
  314. package/dist/jdl/validators/entity-validator.js +4 -2
  315. package/dist/jdl/validators/enum-validator.js +4 -2
  316. package/dist/jdl/validators/jdl-with-application-validator.js +18 -8
  317. package/dist/jdl/validators/jdl-without-application-validator.js +30 -29
  318. package/dist/jdl/validators/validator.js +1 -1
  319. package/dist/testing/helpers.mjs +10 -3
  320. package/dist/types/cli/environment-builder.d.mts +2 -0
  321. package/dist/types/generators/angular/needle-api/needle-client-angular.d.mts +0 -1
  322. package/dist/types/generators/base/api.d.mts +12 -0
  323. package/dist/types/generators/base/support/config.d.mts +3 -3
  324. package/dist/types/generators/base/support/needles.d.mts +1 -1
  325. package/dist/types/generators/base-application/generator.d.mts +2 -2
  326. package/dist/types/generators/base-application/support/index.d.mts +1 -0
  327. package/dist/types/generators/base-application/support/prepare-entity.d.mts +6 -1
  328. package/dist/types/generators/base-application/support/update-application-entities-transform.d.mts +4 -0
  329. package/dist/types/generators/base-application/types/relationship.d.mts +4 -0
  330. package/dist/types/generators/base-core/generator.d.mts +7 -1
  331. package/dist/types/generators/bootstrap/support/auto-crlf-transform.d.mts +3 -2
  332. package/dist/types/generators/bootstrap/support/multi-step-transform/index.d.mts +3 -20
  333. package/dist/types/generators/bootstrap/support/multi-step-transform/template-file-fs.d.mts +15 -9
  334. package/dist/types/generators/bootstrap/support/multi-step-transform/template-file.d.mts +1 -0
  335. package/dist/types/generators/bootstrap-application-base/support/export-jdl-transform.d.mts +8 -0
  336. package/dist/types/generators/bootstrap-application-base/support/import-jdl-transform.d.mts +6 -0
  337. package/dist/types/generators/bootstrap-application-base/support/index.d.mts +2 -0
  338. package/dist/types/generators/client/support/entity-definition.d.mts +2 -2
  339. package/dist/types/generators/feign-client/types-export.d.ts +1 -0
  340. package/dist/types/generators/generator-constants.d.mts +52 -48
  341. package/dist/types/generators/generator-list.d.mts +1 -0
  342. package/dist/types/generators/java/support/package-info-transform.d.mts +1 -4
  343. package/dist/types/generators/project-name/support/name-resolver.d.mts +9 -1
  344. package/dist/types/generators/server/options/feign-client.d.mts +21 -0
  345. package/dist/types/generators/server/options/index.d.mts +1 -0
  346. package/dist/types/generators/server/support/templates/field-values.d.mts +1 -1
  347. package/dist/types/jdl/converters/json-to-jdl-converter.d.ts +1 -0
  348. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/option-converter.d.ts +1 -1
  349. package/dist/types/jdl/exporters/config.d.ts +1 -0
  350. package/dist/types/jdl/index.d.ts +1 -0
  351. package/dist/types/jdl/jdl-importer.d.ts +1 -0
  352. package/dist/types/jdl/jhipster/json-entity.d.ts +2 -0
  353. package/dist/types/jdl/models/jdl-application-configuration-factory.d.ts +1 -0
  354. package/dist/types/jdl/models/jdl-application-configuration-option.d.ts +2 -2
  355. package/dist/types/jdl/models/jdl-application-configuration.d.ts +8 -6
  356. package/dist/types/jdl/models/jdl-application-factory.d.ts +1 -1
  357. package/dist/types/jdl/models/jdl-application.d.ts +8 -4
  358. package/dist/types/jdl/models/jdl-entity.d.ts +1 -0
  359. package/dist/types/jdl/models/jdl-object.d.ts +1 -1
  360. package/dist/types/jdl/models/jdl-relationship.d.ts +0 -18
  361. package/dist/types/jdl/models/list-jdl-application-configuration-option.d.ts +1 -1
  362. package/dist/types/jdl/parsing/jdl-ast-builder-visitor.d.ts +10 -0
  363. package/dist/types/jdl/parsing/jdl-parser.d.ts +3 -0
  364. package/dist/types/jdl/parsing/lexer/application-tokens.d.ts +1 -0
  365. package/dist/types/jdl/types/types.d.mts +2 -2
  366. package/dist/types/jdl/validators/entity-validator.d.ts +2 -2
  367. package/dist/types/jdl/validators/enum-validator.d.ts +2 -2
  368. package/dist/types/jdl/validators/validator.d.ts +4 -1
  369. package/package.json +41 -41
@@ -182,11 +182,8 @@ function askForFieldsToRemove() {
182
182
  }
183
183
  });
184
184
  }
185
- function askForRelationships() {
185
+ function askForRelationships(...args) {
186
186
  const context = this.entityData;
187
- if (this.options.defaults) {
188
- return undefined;
189
- }
190
187
  // don't prompt if data is imported from a file
191
188
  if (context.useConfigurationFile && context.updateEntity !== 'add') {
192
189
  return undefined;
@@ -194,7 +191,7 @@ function askForRelationships() {
194
191
  if (context.databaseType === CASSANDRA) {
195
192
  return undefined;
196
193
  }
197
- return askForRelationship.call(this);
194
+ return askForRelationship.call(this, ...args);
198
195
  }
199
196
  function askForRelationsToRemove() {
200
197
  const context = this.entityData;
@@ -384,22 +381,26 @@ function askForPagination() {
384
381
  /**
385
382
  * ask question for a field creation
386
383
  */
387
- function askForField() {
384
+ async function askForField() {
388
385
  const context = this.entityData;
389
386
  this.log.log(chalk.green(`\nGenerating field #${this.entityConfig.fields.length + 1}\n`));
390
- const skipServer = context.skipServer;
391
387
  const databaseType = context.databaseType;
392
388
  const clientFramework = context.clientFramework;
393
389
  const possibleFiltering = databaseType === SQL && !context.reactive;
394
- const prompts = [
390
+ const fieldAddAnswer = await this.prompt([
395
391
  {
396
392
  type: 'confirm',
397
393
  name: 'fieldAdd',
398
394
  message: 'Do you want to add a field to your entity?',
399
395
  default: true,
400
396
  },
397
+ ]);
398
+ if (!fieldAddAnswer.fieldAdd) {
399
+ logFieldsAndRelationships.call(this);
400
+ return;
401
+ }
402
+ const answers = await this.prompt([
401
403
  {
402
- when: response => response.fieldAdd === true,
403
404
  type: 'input',
404
405
  name: 'fieldName',
405
406
  validate: input => {
@@ -430,67 +431,25 @@ function askForField() {
430
431
  message: 'What is the name of your field?',
431
432
  },
432
433
  {
433
- when: response => response.fieldAdd === true && (skipServer || ['sql', 'mongodb', 'neo4j', 'couchbase'].includes(databaseType)),
434
434
  type: 'list',
435
435
  name: 'fieldType',
436
436
  message: 'What is the type of your field?',
437
- choices: [
438
- {
439
- value: STRING,
440
- name: 'String',
441
- },
442
- {
443
- value: INTEGER,
444
- name: 'Integer',
445
- },
446
- {
447
- value: LONG,
448
- name: 'Long',
449
- },
450
- {
451
- value: FLOAT,
452
- name: 'Float',
453
- },
454
- {
455
- value: DOUBLE,
456
- name: 'Double',
457
- },
458
- {
459
- value: BIG_DECIMAL,
460
- name: 'BigDecimal',
461
- },
462
- {
463
- value: LOCAL_DATE,
464
- name: 'LocalDate',
465
- },
466
- {
467
- value: INSTANT,
468
- name: 'Instant',
469
- },
470
- {
471
- value: ZONED_DATE_TIME,
472
- name: 'ZonedDateTime',
473
- },
474
- {
475
- value: DURATION,
476
- name: 'Duration',
477
- },
478
- {
479
- value: BOOLEAN,
480
- name: 'Boolean',
481
- },
482
- {
483
- value: ENUM,
484
- name: 'Enumeration (Java enum type)',
485
- },
486
- {
487
- value: UUID,
488
- name: 'UUID',
489
- },
490
- {
491
- value: BYTES,
492
- name: '[BETA] Blob',
493
- },
437
+ choices: () => [
438
+ { value: STRING, name: 'String' },
439
+ { value: INTEGER, name: 'Integer' },
440
+ { value: LONG, name: 'Long' },
441
+ { value: FLOAT, name: 'Float' },
442
+ { value: DOUBLE, name: 'Double' },
443
+ { value: BIG_DECIMAL, name: 'BigDecimal' },
444
+ { value: LOCAL_DATE, name: 'LocalDate' },
445
+ { value: INSTANT, name: 'Instant' },
446
+ { value: ZONED_DATE_TIME, name: 'ZonedDateTime' },
447
+ { value: DURATION, name: 'Duration' },
448
+ { value: BOOLEAN, name: 'Boolean' },
449
+ { value: ENUM, name: 'Enumeration (Java enum type)' },
450
+ { value: UUID, name: 'UUID' },
451
+ { value: UUID, name: 'UUID' },
452
+ ...(databaseType === CASSANDRA ? [{ value: BYTE_BUFFER, name: '[BETA] Blob' }] : [{ value: BYTES, name: '[BETA] Blob' }]),
494
453
  ],
495
454
  default: 0,
496
455
  },
@@ -566,117 +525,26 @@ function askForField() {
566
525
  },
567
526
  },
568
527
  {
569
- when: response => response.fieldAdd === true && databaseType === CASSANDRA,
570
- type: 'list',
571
- name: 'fieldType',
572
- message: 'What is the type of your field?',
573
- choices: [
574
- {
575
- value: UUID,
576
- name: 'UUID',
577
- },
578
- {
579
- value: STRING,
580
- name: 'String',
581
- },
582
- {
583
- value: INTEGER,
584
- name: 'Integer',
585
- },
586
- {
587
- value: LONG,
588
- name: 'Long',
589
- },
590
- {
591
- value: FLOAT,
592
- name: 'Float',
593
- },
594
- {
595
- value: DOUBLE,
596
- name: 'Double',
597
- },
598
- {
599
- value: BIG_DECIMAL,
600
- name: 'BigDecimal',
601
- },
602
- {
603
- value: LOCAL_DATE,
604
- name: 'LocalDate',
605
- },
606
- {
607
- value: INSTANT,
608
- name: 'Instant',
609
- },
610
- {
611
- value: ZONED_DATE_TIME,
612
- name: 'ZonedDateTime',
613
- },
614
- {
615
- value: DURATION,
616
- name: 'Duration',
617
- },
618
- {
619
- value: ENUM,
620
- name: 'Enumeration (Java enum type)',
621
- },
622
- {
623
- value: BOOLEAN,
624
- name: 'Boolean',
625
- },
626
- {
627
- value: BYTE_BUFFER,
628
- name: '[BETA] blob',
629
- },
630
- ],
631
- default: 0,
632
- },
633
- {
634
- when: response => response.fieldAdd === true && response.fieldType === BYTES,
635
- type: 'list',
636
- name: 'fieldTypeBlobContent',
637
- message: 'What is the content of the Blob field?',
638
- choices: [
639
- {
640
- value: IMAGE,
641
- name: 'An image',
642
- },
643
- {
644
- value: ANY,
645
- name: 'A binary file',
646
- },
647
- {
648
- value: TEXT,
649
- name: 'A CLOB (Text field)',
650
- },
651
- ],
652
- default: 0,
653
- },
654
- {
655
- when: response => response.fieldAdd === true && response.fieldType === BYTE_BUFFER,
528
+ when: response => response.fieldType === BYTES || response.fieldType === BYTE_BUFFER,
656
529
  type: 'list',
657
530
  name: 'fieldTypeBlobContent',
658
531
  message: 'What is the content of the Blob field?',
659
- choices: [
660
- {
661
- value: IMAGE,
662
- name: 'An image',
663
- },
664
- {
665
- value: ANY,
666
- name: 'A binary file',
667
- },
532
+ choices: answers => [
533
+ { value: IMAGE, name: 'An image' },
534
+ { value: ANY, name: 'A binary file' },
535
+ ...(answers.fieldType === BYTES ? [{ value: TEXT, name: 'A CLOB (Text field)' }] : []),
668
536
  ],
669
537
  default: 0,
670
538
  },
671
539
  {
672
- when: response => response.fieldAdd === true && response.fieldType !== BYTE_BUFFER,
540
+ when: response => response.fieldType !== BYTE_BUFFER,
673
541
  type: 'confirm',
674
542
  name: 'fieldValidate',
675
543
  message: 'Do you want to add validation rules to your field?',
676
544
  default: false,
677
545
  },
678
546
  {
679
- when: response => response.fieldAdd === true && response.fieldValidate === true,
547
+ when: response => response.fieldValidate === true,
680
548
  type: 'checkbox',
681
549
  name: 'fieldValidateRules',
682
550
  message: 'Which validation rules do you want to add?',
@@ -719,7 +587,7 @@ function askForField() {
719
587
  default: 0,
720
588
  },
721
589
  {
722
- when: response => response.fieldAdd === true && response.fieldValidate === true && response.fieldValidateRules.includes('minlength'),
590
+ when: response => response.fieldValidate === true && response.fieldValidateRules.includes('minlength'),
723
591
  type: 'input',
724
592
  name: 'fieldValidateRulesMinlength',
725
593
  validate: input => (inputIsNumber(input) ? true : 'Minimum length must be a positive number'),
@@ -727,7 +595,7 @@ function askForField() {
727
595
  default: 0,
728
596
  },
729
597
  {
730
- when: response => response.fieldAdd === true && response.fieldValidate === true && response.fieldValidateRules.includes('maxlength'),
598
+ when: response => response.fieldValidate === true && response.fieldValidateRules.includes('maxlength'),
731
599
  type: 'input',
732
600
  name: 'fieldValidateRulesMaxlength',
733
601
  validate: input => (inputIsNumber(input) ? true : 'Maximum length must be a positive number'),
@@ -735,7 +603,7 @@ function askForField() {
735
603
  default: 20,
736
604
  },
737
605
  {
738
- when: response => response.fieldAdd === true && response.fieldValidate === true && response.fieldValidateRules.includes('min'),
606
+ when: response => response.fieldValidate === true && response.fieldValidateRules.includes('min'),
739
607
  type: 'input',
740
608
  name: 'fieldValidateRulesMin',
741
609
  message: 'What is the minimum of your field?',
@@ -748,7 +616,7 @@ function askForField() {
748
616
  default: 0,
749
617
  },
750
618
  {
751
- when: response => response.fieldAdd === true && response.fieldValidate === true && response.fieldValidateRules.includes('max'),
619
+ when: response => response.fieldValidate === true && response.fieldValidateRules.includes('max'),
752
620
  type: 'input',
753
621
  name: 'fieldValidateRulesMax',
754
622
  message: 'What is the maximum of your field?',
@@ -761,8 +629,7 @@ function askForField() {
761
629
  default: 100,
762
630
  },
763
631
  {
764
- when: response => response.fieldAdd === true &&
765
- response.fieldValidate === true &&
632
+ when: response => response.fieldValidate === true &&
766
633
  response.fieldValidateRules.includes(MINBYTES) &&
767
634
  response.fieldType === BYTES &&
768
635
  response.fieldTypeBlobContent !== TEXT,
@@ -773,8 +640,7 @@ function askForField() {
773
640
  default: 0,
774
641
  },
775
642
  {
776
- when: response => response.fieldAdd === true &&
777
- response.fieldValidate === true &&
643
+ when: response => response.fieldValidate === true &&
778
644
  response.fieldValidateRules.includes(MAXBYTES) &&
779
645
  response.fieldType === BYTES &&
780
646
  response.fieldTypeBlobContent !== TEXT,
@@ -785,79 +651,64 @@ function askForField() {
785
651
  default: 5000000,
786
652
  },
787
653
  {
788
- when: response => response.fieldAdd === true && response.fieldValidate === true && response.fieldValidateRules.includes('pattern'),
654
+ when: response => response.fieldValidate === true && response.fieldValidateRules.includes('pattern'),
789
655
  type: 'input',
790
656
  name: 'fieldValidateRulesPattern',
791
657
  message: 'What is the regular expression pattern you want to apply on your field?',
792
658
  default: '^[a-zA-Z0-9]*$',
793
659
  },
794
- ];
795
- return this.prompt(prompts).then(props => {
796
- if (props.fieldAdd) {
797
- if (props.fieldIsEnum) {
798
- props.fieldType = _.upperFirst(props.fieldType);
799
- props.fieldValues = props.fieldValues.toUpperCase();
800
- }
801
- const field = {
802
- fieldName: props.fieldName,
803
- fieldType: props.enumType || props.fieldType,
804
- fieldTypeBlobContent: props.fieldTypeBlobContent,
805
- fieldValues: props.fieldValues,
806
- fieldValidateRules: props.fieldValidateRules,
807
- fieldValidateRulesMinlength: props.fieldValidateRulesMinlength,
808
- fieldValidateRulesMaxlength: props.fieldValidateRulesMaxlength,
809
- fieldValidateRulesPattern: props.fieldValidateRulesPattern,
810
- fieldValidateRulesMin: props.fieldValidateRulesMin,
811
- fieldValidateRulesMax: props.fieldValidateRulesMax,
812
- fieldValidateRulesMinbytes: props.fieldValidateRulesMinbytes,
813
- fieldValidateRulesMaxbytes: props.fieldValidateRulesMaxbytes,
814
- };
815
- this.entityConfig.fields = this.entityConfig.fields.concat(field);
816
- }
817
- logFieldsAndRelationships.call(this);
818
- if (props.fieldAdd) {
819
- return askForField.call(this);
820
- }
821
- return undefined;
822
- });
660
+ ]);
661
+ if (answers.fieldIsEnum) {
662
+ answers.fieldType = _.upperFirst(answers.fieldType);
663
+ answers.fieldValues = answers.fieldValues.toUpperCase();
664
+ }
665
+ const field = {
666
+ fieldName: answers.fieldName,
667
+ fieldType: answers.enumType || answers.fieldType,
668
+ fieldTypeBlobContent: answers.fieldTypeBlobContent,
669
+ fieldValues: answers.fieldValues,
670
+ fieldValidateRules: answers.fieldValidateRules,
671
+ fieldValidateRulesMinlength: answers.fieldValidateRulesMinlength,
672
+ fieldValidateRulesMaxlength: answers.fieldValidateRulesMaxlength,
673
+ fieldValidateRulesPattern: answers.fieldValidateRulesPattern,
674
+ fieldValidateRulesMin: answers.fieldValidateRulesMin,
675
+ fieldValidateRulesMax: answers.fieldValidateRulesMax,
676
+ fieldValidateRulesMinbytes: answers.fieldValidateRulesMinbytes,
677
+ fieldValidateRulesMaxbytes: answers.fieldValidateRulesMaxbytes,
678
+ };
679
+ this.entityConfig.fields = this.entityConfig.fields.concat(field);
680
+ logFieldsAndRelationships.call(this);
681
+ await askForField.call(this);
823
682
  }
824
683
  /**
825
684
  * ask question for a relationship creation
826
685
  */
827
- function askForRelationship() {
686
+ async function askForRelationship(...args) {
687
+ const [{ application }] = args;
828
688
  const context = this.entityData;
829
689
  const name = context.name;
830
690
  this.log.log(chalk.green('\nGenerating relationships to other entities\n'));
831
- const prompts = [
691
+ const addRelationshipAnswers = await this.prompt([
832
692
  {
833
693
  type: 'confirm',
834
694
  name: 'relationshipAdd',
835
695
  message: 'Do you want to add a relationship to another entity?',
836
696
  default: true,
837
697
  },
698
+ ]);
699
+ if (!addRelationshipAnswers.relationshipAdd) {
700
+ logFieldsAndRelationships.call(this);
701
+ this.log.log('\n');
702
+ return;
703
+ }
704
+ const answers = await this.prompt([
838
705
  {
839
- when: response => response.relationshipAdd === true,
840
- type: 'input',
706
+ type: 'list',
841
707
  name: 'otherEntityName',
842
- validate: input => {
843
- if (!/^([a-zA-Z0-9_]*)$/.test(input)) {
844
- return 'Your other entity name cannot contain special characters';
845
- }
846
- if (input === '') {
847
- return 'Your other entity name cannot be empty';
848
- }
849
- if (isReservedTableName(input, 'JAVA')) {
850
- return 'Your other entity name cannot contain a Java reserved keyword';
851
- }
852
- if (input.toLowerCase() === 'user' && context.applicationType === 'microservice') {
853
- return "Your entity cannot have a relationship with User because it's a gateway entity";
854
- }
855
- return true;
856
- },
857
- message: 'What is the name of the other entity?',
708
+ message: 'What is the other entity?',
709
+ choices: () => [...this.getExistingEntityNames(), ...(application.generateBuiltInUserEntity ? ['User'] : [])],
858
710
  },
859
711
  {
860
- when: response => response.relationshipAdd === true,
861
712
  type: 'input',
862
713
  name: 'relationshipName',
863
714
  validate: input => {
@@ -882,83 +733,59 @@ function askForRelationship() {
882
733
  default: response => _.lowerFirst(response.otherEntityName),
883
734
  },
884
735
  {
885
- when: response => response.relationshipAdd === true,
886
736
  type: 'list',
887
737
  name: 'relationshipType',
888
738
  message: 'What is the type of the relationship?',
889
- choices: response => {
890
- const opts = [
891
- {
892
- value: 'many-to-one',
893
- name: 'many-to-one',
894
- },
895
- {
896
- value: 'many-to-many',
897
- name: 'many-to-many',
898
- },
899
- {
900
- value: 'one-to-one',
901
- name: 'one-to-one',
902
- },
903
- ];
904
- if (!this.isBuiltInUser(response.otherEntityName)) {
905
- opts.unshift({
906
- value: 'one-to-many',
907
- name: 'one-to-many',
908
- });
909
- }
910
- return opts;
911
- },
739
+ choices: response => [
740
+ 'many-to-one',
741
+ 'many-to-many',
742
+ 'one-to-one',
743
+ ...(this.isBuiltInUser(response.otherEntityName) ? [] : ['one-to-many']),
744
+ ],
912
745
  default: 0,
913
746
  },
914
747
  {
915
- when: response => response.relationshipAdd === true &&
916
- response.otherEntityName.toLowerCase() !== 'user' &&
917
- (response.relationshipType === 'many-to-many' || response.relationshipType === 'one-to-one'),
918
- type: 'confirm',
919
- name: 'ownerSide',
920
- message: 'Is this entity the owner of the relationship?',
921
- default: false,
922
- },
923
- {
924
- when: response => context.databaseType === SQL &&
925
- response.relationshipAdd === true &&
926
- response.relationshipType === 'one-to-one' &&
927
- (response.ownerSide === true || response.otherEntityName.toLowerCase() === 'user'),
748
+ when: response => application.databaseType === SQL && response.relationshipType === 'one-to-one',
928
749
  type: 'confirm',
929
750
  name: 'id',
930
751
  message: 'Do you want to use JPA Derived Identifier - @MapsId?',
931
752
  default: false,
932
753
  },
933
754
  {
934
- when: response => response.relationshipAdd === true &&
935
- (response.relationshipType === 'one-to-many' ||
936
- ((response.relationshipType === 'many-to-many' || response.relationshipType === 'one-to-one') &&
937
- !this.isBuiltInUser(response.otherEntityName))),
755
+ when: answers => {
756
+ if (this.isBuiltInUser(answers.otherEntityName)) {
757
+ answers.bidirectional = false;
758
+ return false;
759
+ }
760
+ if (!application.databaseTypeNeo4j && answers.relationshipType !== 'many-to-one') {
761
+ // Relationships requires bidirectional.
762
+ answers.bidirectional = true;
763
+ return false;
764
+ }
765
+ return true;
766
+ },
767
+ type: 'input',
768
+ name: 'bidirectional',
769
+ message: 'Do you want to generate a bidirectional relationship',
770
+ default: true,
771
+ },
772
+ {
773
+ when: response => response.bidirectional,
938
774
  type: 'input',
939
775
  name: 'otherEntityRelationshipName',
940
776
  message: 'What is the name of this relationship in the other entity?',
941
777
  default: () => _.lowerFirst(name),
942
778
  },
943
779
  {
944
- when: response => response.relationshipAdd === true &&
945
- response.otherEntityName.toLowerCase() !== 'user' &&
946
- (response.relationshipType === 'many-to-one' ||
947
- (response.relationshipType === 'many-to-many' && response.ownerSide === true) ||
948
- (response.relationshipType === 'one-to-one' && response.ownerSide === true)),
949
780
  type: 'input',
950
781
  name: 'otherEntityField',
951
782
  message: response => `When you display this relationship on client-side, which field from '${response.otherEntityName}' do you want to use? This field will be displayed as a String, so it cannot be a Blob`,
952
- default: 'id',
783
+ default: answers => (answers.otherEntityName === 'User' ? 'login' : 'id'),
953
784
  },
954
785
  {
955
- when: response => response.relationshipAdd === true &&
956
- response.otherEntityName.toLowerCase() !== context.name.toLowerCase() &&
957
- (response.relationshipType === 'many-to-one' ||
958
- (response.relationshipType === 'many-to-many' &&
959
- (response.ownerSide === true || response.otherEntityName.toLowerCase() === 'user')) ||
960
- (response.relationshipType === 'one-to-one' &&
961
- (response.ownerSide === true || response.otherEntityName.toLowerCase() === 'user'))),
786
+ when: response => (response.otherEntityName.toLowerCase() !== context.name.toLowerCase() && response.relationshipType === 'many-to-one') ||
787
+ response.relationshipType === 'many-to-many' ||
788
+ response.relationshipType === 'one-to-one',
962
789
  type: 'confirm',
963
790
  name: 'relationshipValidate',
964
791
  message: 'Do you want to add any validation rules to this relationship?',
@@ -977,33 +804,23 @@ function askForRelationship() {
977
804
  ],
978
805
  default: 0,
979
806
  },
980
- ];
981
- return this.prompt(prompts).then(props => {
982
- if (props.relationshipAdd) {
983
- const relationship = {
984
- relationshipName: props.relationshipName,
985
- otherEntityName: _.lowerFirst(props.otherEntityName),
986
- relationshipType: props.relationshipType,
987
- relationshipValidateRules: props.relationshipValidateRules,
988
- otherEntityField: props.otherEntityField,
989
- ownerSide: props.ownerSide,
990
- id: props.id,
991
- otherEntityRelationshipName: props.otherEntityRelationshipName,
992
- };
993
- if (props.otherEntityName.toLowerCase() === 'user') {
994
- relationship.ownerSide = true;
995
- relationship.otherEntityField = 'login';
996
- relationship.otherEntityRelationshipName = _.lowerFirst(name);
997
- }
998
- this.entityConfig.relationships = this.entityConfig.relationships.concat(relationship);
999
- }
1000
- logFieldsAndRelationships.call(this);
1001
- if (props.relationshipAdd) {
1002
- return askForRelationship.call(this);
1003
- }
1004
- this.log.log('\n');
1005
- return undefined;
1006
- });
807
+ ]);
808
+ const relationship = {
809
+ relationshipSide: 'left',
810
+ relationshipName: answers.relationshipName,
811
+ otherEntityName: _.lowerFirst(answers.otherEntityName),
812
+ relationshipType: answers.relationshipType,
813
+ relationshipValidateRules: answers.relationshipValidateRules,
814
+ otherEntityField: answers.otherEntityField,
815
+ ownerSide: answers.ownerSide,
816
+ id: answers.id,
817
+ otherEntityRelationshipName: answers.otherEntityRelationshipName,
818
+ };
819
+ if (this.isBuiltInUser(answers.otherEntityName)) {
820
+ relationship.otherEntityRelationshipName = _.lowerFirst(name);
821
+ }
822
+ this.entityConfig.relationships = this.entityConfig.relationships.concat(relationship);
823
+ await askForRelationship.call(this, ...args);
1007
824
  }
1008
825
  /**
1009
826
  * Show the entity and it's fields and relationships in console
@@ -1060,7 +877,7 @@ function logFieldsAndRelationships() {
1060
877
  if (relationship.relationshipValidateRules && relationship.relationshipValidateRules.includes(REQUIRED)) {
1061
878
  validationDetails.push(REQUIRED);
1062
879
  }
1063
- this.log.verboseInfo(`${chalk.red(relationship.relationshipName)} ${chalk.white(`(${_.upperFirst(relationship.otherEntityName)})`)} ${chalk.cyan(relationship.relationshipType)} ${chalk.cyan(validationDetails.join(' '))}`);
880
+ this.log.log(`${chalk.red(relationship.relationshipName)} ${chalk.white(`(${_.upperFirst(relationship.otherEntityName)})`)} ${chalk.cyan(relationship.relationshipType)} ${chalk.cyan(validationDetails.join(' '))}`);
1064
881
  });
1065
882
  this.log.log();
1066
883
  }
@@ -51,7 +51,7 @@ export default class extends BaseGenerator {
51
51
  }
52
52
  catch (error) {
53
53
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
54
- throw new Error(`An error occurred while exporting to JDL: ${error.message}\n${error}`);
54
+ throw new Error(`An error occurred while exporting to JDL: ${error.message}\n${error}`, { cause: error });
55
55
  }
56
56
  },
57
57
  });
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Removes server files that where generated in previous JHipster versions and therefore
3
+ * need to be removed.
4
+ */
5
+ export default function cleanupTask({ application }) {
6
+ if (this.isJhipsterVersionLessThan('8.0.1')) {
7
+ if (application.authenticationTypeOauth2) {
8
+ this.removeFile(`${application.javaPackageSrcDir}security/oauth2/AuthorizationHeaderUtil.java`);
9
+ this.removeFile(`${application.javaPackageTestDir}security/oauth2/AuthorizationHeaderUtilTest.java`);
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,35 @@
1
+ import { SERVER_MAIN_SRC_DIR, SERVER_TEST_SRC_DIR } from '../generator-constants.mjs';
2
+ import { moveToJavaPackageSrcDir, moveToJavaPackageTestDir } from '../java/support/index.mjs';
3
+ export const feignFiles = {
4
+ microserviceFeignFiles: [
5
+ {
6
+ path: `${SERVER_MAIN_SRC_DIR}_package_/`,
7
+ renameTo: moveToJavaPackageSrcDir,
8
+ templates: ['config/FeignConfiguration.java'],
9
+ },
10
+ {
11
+ condition: generator => generator.authenticationTypeOauth2,
12
+ path: `${SERVER_MAIN_SRC_DIR}_package_/`,
13
+ renameTo: moveToJavaPackageSrcDir,
14
+ templates: [
15
+ 'client/AuthorizationHeaderUtil.java',
16
+ 'client/AuthorizedFeignClient.java',
17
+ 'client/OAuth2InterceptedFeignConfiguration.java',
18
+ 'client/TokenRelayRequestInterceptor.java',
19
+ 'client/OAuthIdpTokenResponseDTO.java',
20
+ ],
21
+ },
22
+ {
23
+ condition: generator => generator.authenticationTypeJwt,
24
+ path: `${SERVER_MAIN_SRC_DIR}_package_/`,
25
+ renameTo: moveToJavaPackageSrcDir,
26
+ templates: ['client/UserFeignClientInterceptor_jwt.java'],
27
+ },
28
+ {
29
+ condition: generator => generator.authenticationTypeOauth2,
30
+ path: `${SERVER_TEST_SRC_DIR}_package_/`,
31
+ renameTo: moveToJavaPackageTestDir,
32
+ templates: ['client/AuthorizationHeaderUtilTest.java'],
33
+ },
34
+ ],
35
+ };