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
@@ -31,6 +31,9 @@ import { createImporterFromContent } from '../../jdl/jdl-importer.js';
31
31
  import { GENERATOR_JHIPSTER, JHIPSTER_CONFIG_DIR } from '../generator-constants.mjs';
32
32
  import statistics from '../statistics.mjs';
33
33
  import { addApplicationIndex, allNewApplications, customizeForMicroservices } from './internal/index.mjs';
34
+ import { mergeYoRcContent } from '../../jdl/index.js';
35
+ import { normalizeBlueprintName } from '../base/internal/blueprint.mjs';
36
+ import { updateApplicationEntitiesTransform } from '../base-application/support/update-application-entities-transform.mjs';
34
37
  const { upperFirst } = _;
35
38
  /**
36
39
  * Add jdl extension to the file
@@ -87,8 +90,11 @@ export default class JdlGenerator extends BaseGenerator {
87
90
  get [BaseGenerator.INITIALIZING]() {
88
91
  return this.delegateTasksToBlueprint(() => this.initializing);
89
92
  }
90
- get loading() {
91
- return this.asLoadingTaskGroup({
93
+ get configuring() {
94
+ return this.asConfiguringTaskGroup({
95
+ insight() {
96
+ statistics.sendSubGenEvent('generator', 'import-jdl');
97
+ },
92
98
  async downloadJdlFiles() {
93
99
  if (this.jdlFiles) {
94
100
  this.jdlFiles = await Promise.all(this.jdlFiles.map(toJdlFile).map(async (filename) => {
@@ -114,16 +120,6 @@ export default class JdlGenerator extends BaseGenerator {
114
120
  this.jdlContents.push(this.readDestination(jdlFile)?.toString() ?? '');
115
121
  }
116
122
  },
117
- });
118
- }
119
- get [BaseGenerator.LOADING]() {
120
- return this.delegateTasksToBlueprint(() => this.loading);
121
- }
122
- get default() {
123
- return this.asDefaultTaskGroup({
124
- insight() {
125
- statistics.sendSubGenEvent('generator', 'import-jdl');
126
- },
127
123
  async parseJDL() {
128
124
  const configuration = {
129
125
  applicationName: this.options.baseName ?? (this.existingProject ? this.jhipsterConfig.baseName : undefined),
@@ -145,6 +141,14 @@ export default class JdlGenerator extends BaseGenerator {
145
141
  ...applicationsWithEntities.filter((app) => app.config.applicationType !== 'gateway'),
146
142
  ];
147
143
  },
144
+ configure() {
145
+ const nrApplications = this.applications.length;
146
+ const allNew = allNewApplications(this.applications);
147
+ const interactiveFallback = !allNew;
148
+ this.interactive = this.interactive ?? interactiveFallback;
149
+ this.force = this.options.force ?? (nrApplications > 0 && allNew) ? true : undefined;
150
+ this.reproducible = allNew;
151
+ },
148
152
  customizeApplication() {
149
153
  for (const app of this.applications) {
150
154
  app.config.entities = app.entities.map(entity => entity.name);
@@ -160,17 +164,10 @@ export default class JdlGenerator extends BaseGenerator {
160
164
  addApplicationIndex(this.applications);
161
165
  customizeForMicroservices(this.exportedApplicationsWithEntities);
162
166
  },
163
- configure() {
164
- const nrApplications = this.applications.length;
165
- const allNew = allNewApplications(this.applications);
166
- const interactiveFallback = !allNew;
167
- this.interactive = this.interactive ?? interactiveFallback;
168
- this.force = this.options.force ?? (nrApplications > 0 && allNew) ? true : undefined;
169
- this.reproducible = allNew;
170
- },
171
- generateJson() {
167
+ async generateJson() {
172
168
  if (this.applications.length === 0) {
173
169
  this.writeConfig({ entities: this.exportedEntities });
170
+ await this.env.sharedFs.pipeline({ refresh: true }, updateApplicationEntitiesTransform({ destinationPath: this.destinationPath(), throwOnMissingConfig: false }));
174
171
  }
175
172
  else {
176
173
  this.writeConfig(...this.applications.map(app => (this.ignoreApplication ? { ...app, config: undefined } : app)));
@@ -217,8 +214,8 @@ export default class JdlGenerator extends BaseGenerator {
217
214
  },
218
215
  });
219
216
  }
220
- get [BaseGenerator.DEFAULT]() {
221
- return this.delegateTasksToBlueprint(() => this.default);
217
+ get [BaseGenerator.CONFIGURING]() {
218
+ return this.delegateTasksToBlueprint(() => this.configuring);
222
219
  }
223
220
  get end() {
224
221
  return this.asEndTaskGroup({
@@ -270,16 +267,23 @@ export default class JdlGenerator extends BaseGenerator {
270
267
  }
271
268
  writeConfig(...applications) {
272
269
  for (const application of applications) {
273
- const { folder = '', config, entities = [], sharedFs } = application;
270
+ const { folder = '', entities = [], sharedFs } = application;
271
+ let { config, namespaceConfigs } = application;
274
272
  const appPath = folder ? `${folder}/` : folder;
275
273
  const fs = sharedFs ? createMemFsEditor(sharedFs) : this.fs;
276
274
  if (config) {
277
275
  const configFile = this.destinationPath(`${appPath}.yo-rc.json`);
278
276
  const oldConfig = fs.readJSON(configFile, {});
279
- fs.writeJSON(configFile, {
280
- ...oldConfig,
281
- [GENERATOR_JHIPSTER]: { ...oldConfig[GENERATOR_JHIPSTER], ...config },
282
- });
277
+ if (Array.isArray(config.blueprints)) {
278
+ config = {
279
+ ...config,
280
+ blueprints: config.blueprints.map(({ name, ...remaining }) => ({ ...remaining, name: normalizeBlueprintName(name) })),
281
+ };
282
+ }
283
+ if (namespaceConfigs) {
284
+ namespaceConfigs = Object.fromEntries(Object.entries(namespaceConfigs).map(([ns, config]) => [normalizeBlueprintName(ns), config]));
285
+ }
286
+ fs.writeJSON(configFile, mergeYoRcContent(oldConfig, { ...namespaceConfigs, [GENERATOR_JHIPSTER]: config }));
283
287
  }
284
288
  for (const entity of entities) {
285
289
  const configFile = this.destinationPath(`${appPath}${JHIPSTER_CONFIG_DIR}/${upperFirst(entity.name)}.json`);
@@ -24,7 +24,6 @@ metadata:
24
24
  <%_ if (useKeycloak && ingressTypeGke) { _%>
25
25
  annotations:
26
26
  kubernetes.io/ingress.allow-http: "true"
27
- kubernetes.io/ingress.class: gce
28
27
  kubernetes.io/ingress.global-static-ip-name: <%= app.baseName.toLowerCase()%>-ip
29
28
  cert-manager.io/issuer: letsencrypt-staging
30
29
  acme.cert-manager.io/http01-edit-in-place: "true"
@@ -469,6 +469,7 @@ data:
469
469
  "FreeOTP",
470
470
  "Google Authenticator"
471
471
  ],
472
+ "localizationTexts": {},
472
473
  "webAuthnPolicyRpEntityName": "keycloak",
473
474
  "webAuthnPolicySignatureAlgorithms": [
474
475
  "ES256"
@@ -481,6 +482,7 @@ data:
481
482
  "webAuthnPolicyCreateTimeout": 0,
482
483
  "webAuthnPolicyAvoidSameAuthenticatorRegister": false,
483
484
  "webAuthnPolicyAcceptableAaguids": [],
485
+ "webAuthnPolicyExtraOrigins": [],
484
486
  "webAuthnPolicyPasswordlessRpEntityName": "keycloak",
485
487
  "webAuthnPolicyPasswordlessSignatureAlgorithms": [
486
488
  "ES256"
@@ -493,6 +495,7 @@ data:
493
495
  "webAuthnPolicyPasswordlessCreateTimeout": 0,
494
496
  "webAuthnPolicyPasswordlessAvoidSameAuthenticatorRegister": false,
495
497
  "webAuthnPolicyPasswordlessAcceptableAaguids": [],
498
+ "webAuthnPolicyPasswordlessExtraOrigins": [],
496
499
  "scopeMappings": [
497
500
  {
498
501
  "clientScope": "offline_access",
@@ -2499,7 +2502,7 @@ data:
2499
2502
  "cibaInterval": "5",
2500
2503
  "frontendUrl": ""
2501
2504
  },
2502
- "keycloakVersion": "22.0.1",
2505
+ "keycloakVersion": "23.0.1",
2503
2506
  "userManagedAccessAllowed": false,
2504
2507
  "clientProfiles": {
2505
2508
  "profiles": []
@@ -38,7 +38,7 @@ spec:
38
38
  containers:
39
39
  - name: keycloak
40
40
  image: <%- dockerContainers.keycloak %>
41
- args: ["start --import-realm"]
41
+ args: "start --import-realm"
42
42
  env:
43
43
  - name: KEYCLOAK_ADMIN
44
44
  value: "admin"
@@ -24,6 +24,11 @@ const command = {
24
24
  type: String,
25
25
  required: false,
26
26
  },
27
+ regenerateLanguages: {
28
+ description: 'Regenerate languages',
29
+ type: Boolean,
30
+ scope: 'generator',
31
+ },
27
32
  },
28
33
  };
29
34
  export default command;
@@ -34,6 +34,7 @@ import { updateLanguagesTask as updateLanguagesInJava } from '../server/support/
34
34
  import { SERVER_MAIN_RES_DIR, SERVER_TEST_RES_DIR } from '../generator-constants.mjs';
35
35
  import command from './command.mjs';
36
36
  import { QUEUES } from '../base-application/priorities.mjs';
37
+ import { PRIORITY_NAMES } from '../base/priorities.mjs';
37
38
  const { startCase } = _;
38
39
  /**
39
40
  * This is the base class for a generator that generates entities.
@@ -53,6 +54,7 @@ export default class LanguagesGenerator extends BaseApplicationGenerator {
53
54
  composedBlueprints;
54
55
  languageCommand;
55
56
  writeJavaLanguageFiles;
57
+ regenerateLanguages;
56
58
  constructor(args, options, features) {
57
59
  super(args, options, features);
58
60
  this.languageCommand = this.options.commandName === 'languages';
@@ -67,6 +69,14 @@ export default class LanguagesGenerator extends BaseApplicationGenerator {
67
69
  if (!this.delegateToBlueprint) {
68
70
  await this.dependsOnJHipster(GENERATOR_BOOTSTRAP_APPLICATION);
69
71
  }
72
+ if (!this.jhipsterConfigWithDefaults.skipClient &&
73
+ this.jhipsterConfigWithDefaults.clientFramework !== 'no' &&
74
+ (!this.jhipsterConfig.enableTranslation || this.jhipsterConfigWithDefaults.clientFramework === 'angular')) {
75
+ // We must write languages files for translation process for entities only generation.
76
+ // Angular frontend uses translation files even if enableTranslation is enabled.
77
+ // As side effect, with angular frontends, translation files will be written for nativeLanguage for entity only generation.
78
+ this.setFeatures({ disableSkipPriorities: true });
79
+ }
70
80
  }
71
81
  // Public API method used by the getter and also by Blueprints
72
82
  get initializing() {
@@ -143,27 +153,24 @@ export default class LanguagesGenerator extends BaseApplicationGenerator {
143
153
  }
144
154
  },
145
155
  defaults() {
146
- const { nativeLanguage, languages, enableTranslation } = this.jhipsterConfigWithDefaults;
156
+ const { nativeLanguage, enableTranslation } = this.jhipsterConfigWithDefaults;
157
+ const isLanguageConfigured = Boolean(this.jhipsterConfig.nativeLanguage);
158
+ // Prompts detects current language. Save default native language for next execution.
159
+ this.config.defaults({ nativeLanguage });
147
160
  if (!enableTranslation) {
148
- if (!this.jhipsterConfig.nativeLanguage) {
149
- this.jhipsterConfig.nativeLanguage = nativeLanguage;
150
- }
151
161
  return;
152
162
  }
153
- if (!this.jhipsterConfig.nativeLanguage) {
154
- if (this.languagesToApply.length === 0) {
155
- this.languagesToApply = languages;
156
- }
157
- this.jhipsterConfig.nativeLanguage = nativeLanguage;
158
- }
159
- if (!this.jhipsterConfig.languages) {
160
- this.jhipsterConfig.languages = [];
163
+ this.config.defaults({ languages: [] });
164
+ if (!isLanguageConfigured && this.languagesToApply.length === 0) {
165
+ // If languages is not configured, apply defaults.
166
+ this.languagesToApply = this.jhipsterConfigWithDefaults.languages;
161
167
  }
162
168
  if (this.jhipsterConfig.languages.length === 0 || this.jhipsterConfig.languages[0] !== this.jhipsterConfig.nativeLanguage) {
163
- this.jhipsterConfig.languages = [...new Set([nativeLanguage, ...languages])];
169
+ // Set native language as first language.
170
+ this.jhipsterConfig.languages = [...new Set([nativeLanguage, ...this.jhipsterConfig.languages])];
164
171
  }
165
172
  if (this.languagesToApply && this.languagesToApply.length > 0) {
166
- // Save new languages;
173
+ // Save new languages.
167
174
  this.jhipsterConfig.languages = [...new Set([...this.jhipsterConfig.languages, ...this.languagesToApply])];
168
175
  }
169
176
  },
@@ -177,7 +184,7 @@ export default class LanguagesGenerator extends BaseApplicationGenerator {
177
184
  return this.asPreparingTaskGroup({
178
185
  prepareForTemplates({ application, source }) {
179
186
  if (application.enableTranslation) {
180
- if (!this.languageCommand) {
187
+ if (!this.languageCommand || this.regenerateLanguages) {
181
188
  this.languagesToApply = application.languages;
182
189
  }
183
190
  else {
@@ -204,17 +211,21 @@ export default class LanguagesGenerator extends BaseApplicationGenerator {
204
211
  get default() {
205
212
  return this.asDefaultTaskGroup({
206
213
  async loadNativeLanguage({ application, control }) {
214
+ if (application.skipClient)
215
+ return;
207
216
  control.translations = control.translations ?? {};
208
217
  this.translationData = new TranslationData({ generator: this, translations: control.translations });
209
218
  const { clientSrcDir, enableTranslation, nativeLanguage } = application;
210
219
  const fallbackLanguage = 'en';
211
220
  this.queueLoadLanguages({ clientSrcDir, enableTranslation, nativeLanguage, fallbackLanguage });
212
221
  const filter = createTranslationsFilter({ clientSrcDir, nativeLanguage, fallbackLanguage });
213
- this.env.sharedFs.on('change', filePath => {
222
+ const listener = filePath => {
214
223
  if (filter(filePath)) {
224
+ this.env.sharedFs.removeListener('change', listener);
215
225
  this.queueLoadLanguages({ clientSrcDir, enableTranslation, nativeLanguage, fallbackLanguage });
216
226
  }
217
- });
227
+ };
228
+ this.env.sharedFs.on('change', listener);
218
229
  control.getWebappTranslation = (...args) => this.translationData.getClientTranslation(...args);
219
230
  },
220
231
  insight() {
@@ -243,7 +254,8 @@ export default class LanguagesGenerator extends BaseApplicationGenerator {
243
254
  async translateFile({ application }) {
244
255
  if (!application.enableTranslation ||
245
256
  application.skipServer ||
246
- (!application.backendTypeSpringBoot && !this.writeJavaLanguageFiles))
257
+ (!application.backendTypeSpringBoot && !this.writeJavaLanguageFiles) ||
258
+ this.options.skipPriorities?.includes?.(PRIORITY_NAMES.POST_WRITING))
247
259
  return;
248
260
  await Promise.all(this.languagesToApply.map(async (lang) => {
249
261
  const language = findLanguageForTag(lang);
@@ -291,6 +303,8 @@ export default class LanguagesGenerator extends BaseApplicationGenerator {
291
303
  get postWriting() {
292
304
  return this.asPostWritingTaskGroup({
293
305
  write({ application, control }) {
306
+ if (this.options.skipPriorities?.includes?.(PRIORITY_NAMES.POST_WRITING))
307
+ return;
294
308
  if (application.enableTranslation && !application.skipClient) {
295
309
  if (application.clientFrameworkAngular) {
296
310
  updateLanguagesInAngularTask.call(this, { application, control });
@@ -305,7 +319,7 @@ export default class LanguagesGenerator extends BaseApplicationGenerator {
305
319
  if (application.enableTranslation &&
306
320
  application.generateUserManagement &&
307
321
  !application.skipServer &&
308
- (application.backendTypeSpringBoot || this.writeJavaLanguageFiles)) {
322
+ application.backendTypeSpringBoot) {
309
323
  updateLanguagesInJava.call(this, { application, control });
310
324
  }
311
325
  },
@@ -317,6 +331,8 @@ export default class LanguagesGenerator extends BaseApplicationGenerator {
317
331
  get postWritingEntities() {
318
332
  return this.asPostWritingEntitiesTaskGroup({
319
333
  addEntities({ application, entities, source }) {
334
+ if (application.skipClient)
335
+ return;
320
336
  const languagesToApply = application.enableTranslation ? this.languagesToApply : [...new Set([application.nativeLanguage, 'en'])];
321
337
  for (const entity of entities.filter(entity => !entity.skipClient && !entity.builtIn)) {
322
338
  for (const language of languagesToApply) {
@@ -346,16 +362,16 @@ export default class LanguagesGenerator extends BaseApplicationGenerator {
346
362
  this.queueTask({
347
363
  method: async () => {
348
364
  const filter = createTranslationsFileFilter({ clientSrcDir, nativeLanguage, fallbackLanguage });
349
- await this.env.applyTransforms([this.translationData.loadFromStreamTransform({ clientSrcDir, nativeLanguage, fallbackLanguage })], {
365
+ await this.pipeline({
350
366
  name: 'loading translations',
351
- streamOptions: { filter },
352
- });
353
- if (!enableTranslation) {
354
- await this.env.applyTransforms([this.translationData.clearTranslationsStatusTransform({ clientSrcDir, nativeLanguage, fallbackLanguage })], {
355
- name: 'clearing translations',
356
- streamOptions: { filter },
357
- });
358
- }
367
+ filter: file => file.path.startsWith(this.destinationPath()) && filter(file),
368
+ refresh: true,
369
+ }, this.translationData.loadFromStreamTransform({
370
+ enableTranslation,
371
+ clientSrcDir,
372
+ nativeLanguage,
373
+ fallbackLanguage,
374
+ }));
359
375
  },
360
376
  taskName: 'loadingTranslations',
361
377
  queueName: QUEUES.LOADING_TRANSLATIONS_QUEUE,
@@ -55,7 +55,9 @@ export async function askForLanguages({ control }) {
55
55
  choices: () => {
56
56
  const languageOptions = this.supportedLanguages;
57
57
  const nativeLanguage = this.jhipsterConfigWithDefaults.nativeLanguage;
58
- return languagesAsChoices(languageOptions.filter(l => l.languageTag !== nativeLanguage));
58
+ const choices = languagesAsChoices(languageOptions.filter(l => l.languageTag !== nativeLanguage));
59
+ const defaults = this.jhipsterConfigWithDefaults.languages ?? [];
60
+ return [...choices.filter(({ value }) => defaults.includes(value)), ...choices.filter(({ value }) => !defaults.includes(value))];
59
61
  },
60
62
  default: () => this.jhipsterConfigWithDefaults.languages,
61
63
  },
@@ -63,7 +63,7 @@ export const replaceTranslationKeysWithText = (getWebappTranslation, body, regex
63
63
  }
64
64
  else if (escapeHtml) {
65
65
  // Escape specific chars
66
- replacement = replacement.replace(/'/g, '&apos;').replace(/"/g, '&quot;');
66
+ replacement = replacement.replace(/'/g, '&apos;').replace(/"/g, '&quot;').replace(/@/g, '&#64;');
67
67
  }
68
68
  else if (stringify) {
69
69
  replacement = JSON.stringify(replacement);
@@ -18,7 +18,7 @@
18
18
  -%><%
19
19
  let helpBlocks = 0; %>
20
20
  {
21
- <%_ // Male (default) variant
21
+ <%_ /* Male (default) variant */
22
22
  let Um = 'Um';
23
23
  let novo = 'novo';
24
24
  let criado = 'criado';
@@ -18,9 +18,8 @@
18
18
  */
19
19
  import { inspect } from 'node:util';
20
20
  import * as _ from 'lodash-es';
21
- import { passthrough } from '@yeoman/transform';
21
+ import { transform } from '@yeoman/transform';
22
22
  import { Minimatch } from 'minimatch';
23
- import { clearFileState } from 'mem-fs-editor/state';
24
23
  const { get } = _;
25
24
  export const createTranslationsFilter = ({ clientSrcDir, nativeLanguage, fallbackLanguage }) => {
26
25
  const pattern = !fallbackLanguage || nativeLanguage === fallbackLanguage
@@ -42,22 +41,18 @@ export default class TranslationData {
42
41
  this.generator = generator;
43
42
  this.translations = translations;
44
43
  }
45
- loadFromStreamTransform({ clientSrcDir, nativeLanguage, fallbackLanguage = 'en' }) {
44
+ loadFromStreamTransform({ enableTranslation, clientSrcDir, nativeLanguage, fallbackLanguage = 'en' }) {
46
45
  const filter = createTranslationsFileFilter({ clientSrcDir, nativeLanguage, fallbackLanguage });
47
46
  const minimatchNative = new Minimatch(`**/${clientSrcDir}i18n/${nativeLanguage}/*.json`);
48
- return passthrough(file => {
49
- if (filter(file)) {
47
+ return transform(file => {
48
+ if (filter(file) && file.contents) {
50
49
  const contents = JSON.parse(file.contents.toString());
51
50
  this.mergeTranslation(contents, !minimatchNative.match(file.path));
51
+ if (!enableTranslation) {
52
+ return undefined;
53
+ }
52
54
  }
53
- });
54
- }
55
- clearTranslationsStatusTransform({ clientSrcDir, nativeLanguage, fallbackLanguage = 'en' }) {
56
- const filter = createTranslationsFileFilter({ clientSrcDir, nativeLanguage, fallbackLanguage });
57
- return passthrough(file => {
58
- if (filter(file)) {
59
- clearFileState(file);
60
- }
55
+ return file;
61
56
  });
62
57
  }
63
58
  mergeTranslation(translation, fallback) {
@@ -0,0 +1,19 @@
1
+ # SQL/spring-data-relational sub-generador
2
+
3
+ Adds support to liquibase to SQL databases and Neo4j.
4
+
5
+ ## Customizing
6
+
7
+ Customizing basics can be found at [Customizing](../app/README.md#customizing)
8
+
9
+ ### Notable relationships customizations
10
+
11
+ #### OnUpdate/OnDelete
12
+
13
+ ```jdl
14
+ relationship ManyToOne {
15
+ A to @OnDelete("SET NULL") @OnUpdate("CASCADE") B
16
+ }
17
+ ```
18
+
19
+ Allowed values: `NO ACTION | RESTRICT | CASCADE | SET NULL | SET DEFAULT`
@@ -35,6 +35,8 @@ export default class LiquibaseGenerator extends BaseEntityChangesGenerator {
35
35
  recreateInitialChangelog;
36
36
  numberOfRows;
37
37
  databaseChangelogs = [];
38
+ injectBuildTool = true;
39
+ injectLogs = true;
38
40
  constructor(args, options, features) {
39
41
  super(args, options, { skipParseOptions: false, ...features });
40
42
  this.argument('entities', {
@@ -137,7 +139,7 @@ export default class LiquibaseGenerator extends BaseEntityChangesGenerator {
137
139
  prepareEntity(entity, this, application);
138
140
  prepareEntityForServer(entity);
139
141
  if (!entity.embedded && !entity.primaryKey) {
140
- prepareEntityPrimaryKeyForTemplates(entity, this);
142
+ prepareEntityPrimaryKeyForTemplates.call(this, { entity, application });
141
143
  }
142
144
  for (const field of entity.fields ?? []) {
143
145
  prepareField(entity, field, this);
@@ -222,13 +224,15 @@ export default class LiquibaseGenerator extends BaseEntityChangesGenerator {
222
224
  get postWriting() {
223
225
  return this.asPostWritingTaskGroup({
224
226
  customizeSpring({ source }) {
227
+ if (!this.injectLogs)
228
+ return;
225
229
  source.addLogbackMainLog?.({ name: 'liquibase', level: 'WARN' });
226
230
  source.addLogbackMainLog?.({ name: 'LiquibaseSchemaResolver', level: 'INFO' });
227
231
  source.addLogbackTestLog?.({ name: 'liquibase', level: 'WARN' });
228
232
  source.addLogbackTestLog?.({ name: 'LiquibaseSchemaResolver', level: 'INFO' });
229
233
  },
230
234
  customizeMaven({ source, application }) {
231
- if (!application.buildToolMaven)
235
+ if (!application.buildToolMaven || !this.injectBuildTool)
232
236
  return;
233
237
  if (!application.javaDependencies) {
234
238
  throw new Error('Some application fields are be mandatory');
@@ -331,7 +335,7 @@ export default class LiquibaseGenerator extends BaseEntityChangesGenerator {
331
335
  }
332
336
  },
333
337
  injectGradle({ source, application }) {
334
- if (!application.buildToolGradle)
338
+ if (!application.buildToolGradle || !this.injectBuildTool)
335
339
  return;
336
340
  if (!application.javaDependencies) {
337
341
  throw new Error('Some application fields are be mandatory');
@@ -24,31 +24,35 @@ import { GENERATOR_PROJECT_NAME } from '../generator-list.mjs';
24
24
  import { BASE_NAME } from './constants.mjs';
25
25
  import { getHipster } from '../base/support/index.mjs';
26
26
  import command from './command.mjs';
27
+ import { validateProjectName } from './support/name-resolver.mjs';
27
28
  /**
28
29
  * @class
29
30
  * @extends {BaseApplicationGenerator<import('../base-application/types.mjs').BaseApplication>}
30
31
  */
31
32
  export default class ProjectNameGenerator extends BaseApplicationGenerator {
33
+ javaApplication;
32
34
  async beforeQueue() {
33
- if (this.options.defaults) {
34
- if (!this.jhipsterConfig.baseName) {
35
- this.jhipsterConfig.baseName = getDefaultAppName(this);
36
- }
37
- }
38
35
  this.sharedData.getControl().existingProject =
39
36
  this.options.defaults || this.options.applicationWithConfig || (this.jhipsterConfig.baseName !== undefined && this.config.existed);
40
37
  if (!this.fromBlueprint) {
41
38
  await this.composeWithBlueprints(GENERATOR_PROJECT_NAME);
42
39
  }
43
- if (this.sharedData.getControl().existingProject && !this.jhipsterConfig.baseName) {
44
- this.jhipsterConfig.baseName = getDefaultAppName(this);
45
- }
46
40
  }
47
41
  get initializing() {
48
42
  return this.asInitializingTaskGroup({
49
43
  loadOptions() {
50
44
  this.parseJHipsterOptions(command.options);
51
45
  },
46
+ parseOptions() {
47
+ if (this.options.defaults) {
48
+ if (!this.jhipsterConfig.baseName) {
49
+ this.jhipsterConfig.baseName = getDefaultAppName({
50
+ reproducible: this.options.reproducible,
51
+ javaApplication: this.javaApplication,
52
+ });
53
+ }
54
+ }
55
+ },
52
56
  });
53
57
  }
54
58
  get [BaseApplicationGenerator.INITIALIZING]() {
@@ -63,7 +67,7 @@ export default class ProjectNameGenerator extends BaseApplicationGenerator {
63
67
  type: 'input',
64
68
  validate: input => this.validateBaseName(input),
65
69
  message: 'What is the base name of your application?',
66
- default: () => getDefaultAppName(this),
70
+ default: () => getDefaultAppName({ reproducible: this.options.reproducible, javaApplication: this.javaApplication }),
67
71
  },
68
72
  ], this.config);
69
73
  },
@@ -114,15 +118,6 @@ export default class ProjectNameGenerator extends BaseApplicationGenerator {
114
118
  * @returns Boolean
115
119
  */
116
120
  validateBaseName(input) {
117
- if (!/^([\w-]*)$/.test(input)) {
118
- return 'Your base name cannot contain special characters or a blank space';
119
- }
120
- if (/_/.test(input)) {
121
- return 'Your base name cannot contain underscores as this does not meet the URI spec';
122
- }
123
- if (input?.toLowerCase() === 'application') {
124
- return "Your base name cannot be named 'application' as this is a reserved name for Spring Boot";
125
- }
126
- return true;
121
+ return validateProjectName(input, { javaApplication: this.javaApplication });
127
122
  }
128
123
  }
@@ -17,14 +17,43 @@
17
17
  * limitations under the License.
18
18
  */
19
19
  import path from 'path';
20
+ import { camelCase } from 'lodash-es';
20
21
  import { isReproducible } from '../../base/support/index.mjs';
21
- const getDefaultName = generator => {
22
- const defaultName = 'jhipster';
23
- if (generator && isReproducible(generator)) {
22
+ const defaultName = 'jhipster';
23
+ export const validateJavaApplicationName = (name) => {
24
+ if (!/^([\w]*)$/.test(name)) {
25
+ return 'Your base name cannot contain special characters or a blank space';
26
+ }
27
+ if (/_/.test(name)) {
28
+ return 'Your base name cannot contain underscores as this does not meet the URI spec';
29
+ }
30
+ if (name.toLowerCase() === 'application') {
31
+ return "Your base name cannot be named 'application' as this is a reserved name for Spring Boot";
32
+ }
33
+ return true;
34
+ };
35
+ export const validateNpmProjectName = (name) => {
36
+ if (!/^([\w-.]*)$/.test(name)) {
37
+ return 'Your base name cannot contain special characters or a blank space';
38
+ }
39
+ return true;
40
+ };
41
+ export const validateProjectName = (name, { javaApplication } = {}) => javaApplication ? validateJavaApplicationName(name) : validateNpmProjectName(name);
42
+ const getDefaultName = (generator) => {
43
+ if (generator?.options && isReproducible(generator)) {
44
+ return defaultName;
45
+ }
46
+ let projectName = path.basename(process.cwd());
47
+ const { reproducible = false, javaApplication = false } = generator && !generator.options ? generator : {};
48
+ if (reproducible) {
24
49
  return defaultName;
25
50
  }
26
- return /^[a-zA-Z0-9_-]+$/.test(path.basename(process.cwd()))
27
- ? path.basename(process.cwd()).replace('generator-jhipster-', '')
28
- : defaultName;
51
+ if (javaApplication) {
52
+ projectName = camelCase(projectName);
53
+ }
54
+ else {
55
+ projectName = projectName.replace('generator-jhipster-', '');
56
+ }
57
+ return validateProjectName(projectName, { javaApplication }) === true ? projectName : defaultName;
29
58
  };
30
59
  export default getDefaultName;
@@ -17,7 +17,7 @@
17
17
  * limitations under the License.
18
18
  */
19
19
  import * as _ from 'lodash-es';
20
- import { isFilePending } from 'mem-fs-editor/state';
20
+ import { isFileStateModified } from 'mem-fs-editor/state';
21
21
  import chalk from 'chalk';
22
22
  import BaseApplicationGenerator from '../base-application/index.mjs';
23
23
  import { GENERATOR_CLIENT, GENERATOR_LANGUAGES, GENERATOR_REACT } from '../generator-list.mjs';
@@ -54,7 +54,7 @@ export default class ReactGenerator extends BaseApplicationGenerator {
54
54
  });
55
55
  }
56
56
  get [BaseApplicationGenerator.LOADING]() {
57
- return this.asLoadingTaskGroup(this.delegateTasksToBlueprint(() => this.loading));
57
+ return this.delegateTasksToBlueprint(() => this.loading);
58
58
  }
59
59
  get preparing() {
60
60
  return this.asPreparingTaskGroup({
@@ -84,18 +84,26 @@ export default class ReactGenerator extends BaseApplicationGenerator {
84
84
  get [BaseApplicationGenerator.PREPARING_EACH_ENTITY]() {
85
85
  return this.asPreparingEachEntityTaskGroup(this.delegateTasksToBlueprint(() => this.preparingEachEntity));
86
86
  }
87
- get writing() {
88
- return {
89
- cleanupOldFilesTask,
90
- writeFiles,
87
+ get default() {
88
+ return this.asDefaultTaskGroup({
91
89
  queueTranslateTransform({ control, application }) {
92
90
  if (!application.enableTranslation) {
93
- this.queueTransformStream(translateReactFilesTransform(control.getWebappTranslation), {
94
- name: 'translating webapp',
95
- streamOptions: { filter: file => isFilePending(file) && isTranslatedReactFile(file) },
96
- });
91
+ this.queueTransformStream({
92
+ name: 'translating react application',
93
+ filter: file => isFileStateModified(file) && file.path.startsWith(this.destinationPath()) && isTranslatedReactFile(file),
94
+ refresh: false,
95
+ }, translateReactFilesTransform(control.getWebappTranslation));
97
96
  }
98
97
  },
98
+ });
99
+ }
100
+ get [BaseApplicationGenerator.DEFAULT]() {
101
+ return this.delegateTasksToBlueprint(() => this.default);
102
+ }
103
+ get writing() {
104
+ return {
105
+ cleanupOldFilesTask,
106
+ writeFiles,
99
107
  };
100
108
  }
101
109
  get [BaseApplicationGenerator.WRITING]() {