generator-jhipster 8.4.0 → 8.6.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 (430) hide show
  1. package/README.md +3 -4
  2. package/dist/cli/commands.mjs +2 -0
  3. package/dist/cli/environment-builder.mjs +5 -0
  4. package/dist/cli/program.mjs +10 -4
  5. package/dist/generators/angular/entity-files-angular.js +6 -7
  6. package/dist/generators/angular/resources/package.json +20 -20
  7. package/dist/generators/angular/templates/src/main/webapp/app/account/activate/activate.component.spec.ts.ejs +4 -3
  8. package/dist/generators/angular/templates/src/main/webapp/app/account/activate/activate.service.spec.ts.ejs +3 -2
  9. package/dist/generators/angular/templates/src/main/webapp/app/account/password/password.component.spec.ts.ejs +4 -5
  10. package/dist/generators/angular/templates/src/main/webapp/app/account/password/password.service.spec.ts.ejs +3 -2
  11. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.spec.ts.ejs +6 -5
  12. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts.ejs +3 -6
  13. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.spec.ts.ejs +3 -2
  14. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.component.spec.ts.ejs +5 -5
  15. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts.ejs +3 -6
  16. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.service.spec.ts.ejs +3 -2
  17. package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.component.spec.ts.ejs +2 -3
  18. package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.component.ts.ejs +3 -6
  19. package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.service.spec.ts.ejs +3 -2
  20. package/dist/generators/angular/templates/src/main/webapp/app/account/sessions/sessions.component.spec.ts.ejs +3 -3
  21. package/dist/generators/angular/templates/src/main/webapp/app/account/settings/settings.component.spec.ts.ejs +3 -4
  22. package/dist/generators/angular/templates/src/main/webapp/app/admin/configuration/configuration.component.spec.ts.ejs +3 -3
  23. package/dist/generators/angular/templates/src/main/webapp/app/admin/configuration/configuration.service.spec.ts.ejs +3 -2
  24. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/health.component.spec.ts.ejs +4 -4
  25. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/health.service.spec.ts.ejs +3 -2
  26. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/modal/health-modal.component.spec.ts.ejs +3 -3
  27. package/dist/generators/angular/templates/src/main/webapp/app/admin/logs/logs.component.spec.ts.ejs +4 -3
  28. package/dist/generators/angular/templates/src/main/webapp/app/admin/logs/logs.service.spec.ts.ejs +3 -2
  29. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/jvm-threads/jvm-threads.component.ts.ejs +1 -1
  30. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.html.ejs +11 -11
  31. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.spec.ts.ejs +3 -3
  32. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/metrics.component.spec.ts.ejs +3 -2
  33. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/metrics.service.spec.ts.ejs +3 -2
  34. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.html.ejs +0 -2
  35. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.spec.ts.ejs +3 -3
  36. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/list/user-management.component.html.ejs +1 -1
  37. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/list/user-management.component.spec.ts.ejs +3 -4
  38. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/service/user-management.service.spec.ts.ejs +3 -3
  39. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/update/user-management-update.component.spec.ts.ejs +3 -2
  40. package/dist/generators/angular/templates/src/main/webapp/app/app-page-title-strategy.ts.ejs +1 -1
  41. package/dist/generators/angular/templates/src/main/webapp/app/app.component.ts.ejs +0 -1
  42. package/dist/generators/angular/templates/src/main/webapp/app/app.config.ts.ejs +2 -2
  43. package/dist/generators/angular/templates/src/main/webapp/app/config/uib-pagination.config.ts.ejs +1 -1
  44. package/dist/generators/angular/templates/src/main/webapp/app/core/auth/account.service.spec.ts.ejs +7 -5
  45. package/dist/generators/angular/templates/src/main/webapp/app/core/auth/auth-jwt.service.spec.ts.ejs +3 -2
  46. package/dist/generators/angular/templates/src/main/webapp/app/core/auth/user-route-access.service.ts.ejs +1 -1
  47. package/dist/generators/angular/templates/src/main/webapp/app/core/interceptor/auth-expired.interceptor.ts.ejs +3 -3
  48. package/dist/generators/angular/templates/src/main/webapp/app/core/interceptor/auth.interceptor.ts.ejs +2 -2
  49. package/dist/generators/angular/templates/src/main/webapp/app/core/interceptor/error-handler.interceptor.ts.ejs +1 -1
  50. package/dist/generators/angular/templates/src/main/webapp/app/core/util/alert.service.spec.ts.ejs +6 -6
  51. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/delete/_entityFile_-delete-dialog.component.html.ejs +0 -3
  52. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/delete/_entityFile_-delete-dialog.component.spec.ts.ejs +3 -4
  53. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/detail/_entityFile_-detail.component.spec.ts.ejs +2 -2
  54. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.html.ejs +1 -1
  55. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.spec.ts.ejs +2 -3
  56. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.ts.ejs +2 -2
  57. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/route/_entityFile_-routing-resolve.service.spec.ts.ejs +4 -5
  58. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/service/_entityFile_.service.spec.ts.ejs +5 -3
  59. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.spec.ts.ejs +5 -6
  60. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.ts.ejs +11 -17
  61. package/dist/generators/angular/templates/src/main/webapp/app/layouts/error/error.component.ts.ejs +2 -2
  62. package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/active-menu.directive.ts.ejs +6 -6
  63. package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/navbar.component.spec.ts.ejs +3 -3
  64. package/dist/generators/angular/templates/src/main/webapp/app/layouts/profiles/page-ribbon.component.spec.ts.ejs +3 -2
  65. package/dist/generators/angular/templates/src/main/webapp/app/login/login.component.spec.ts.ejs +2 -2
  66. package/dist/generators/angular/templates/src/main/webapp/app/login/login.component.ts.ejs +3 -4
  67. package/dist/generators/angular/templates/src/main/webapp/app/shared/alert/alert-error.component.spec.ts.ejs +2 -2
  68. package/dist/generators/angular/templates/src/main/webapp/app/shared/auth/has-any-authority.directive.spec.ts.ejs +11 -9
  69. package/dist/generators/angular/templates/src/main/webapp/app/shared/auth/has-any-authority.directive.ts.ejs +3 -8
  70. package/dist/generators/angular/templates/src/main/webapp/app/shared/filter/filter.component.html.ejs +6 -2
  71. package/dist/generators/angular/templates/src/main/webapp/app/shared/language/find-language-from-key.pipe.ts.ejs +1 -1
  72. package/dist/generators/angular/templates/src/main/webapp/app/shared/language/translation.module.ts.ejs +2 -2
  73. package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort-by.directive.spec.ts.ejs +10 -10
  74. package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort-by.directive.ts.ejs +6 -7
  75. package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort.directive.spec.ts.ejs +4 -4
  76. package/dist/generators/angular/templates/src/main/webapp/content/scss/global.scss.ejs +2 -0
  77. package/dist/generators/app/generator.js +4 -13
  78. package/dist/generators/base/command.js +1 -0
  79. package/dist/generators/base/generator.js +22 -28
  80. package/dist/generators/base/internal/command.js +13 -0
  81. package/dist/generators/base/internal/index.js +1 -0
  82. package/dist/generators/base/priorities.js +12 -1
  83. package/dist/generators/base/shared-data.js +74 -2
  84. package/dist/generators/base/support/config.js +1 -1
  85. package/dist/generators/base/support/jhipster7-context.js +155 -52
  86. package/dist/generators/base-application/generator.js +15 -3
  87. package/dist/generators/base-application/priorities.js +1 -0
  88. package/dist/generators/base-application/support/prepare-entity.js +7 -8
  89. package/dist/generators/base-application/support/prepare-relationship.js +3 -2
  90. package/dist/generators/base-core/generator.js +132 -63
  91. package/dist/generators/bootstrap/generator.js +1 -1
  92. package/dist/generators/bootstrap/support/eslint-worker.js +14 -12
  93. package/dist/generators/bootstrap/support/multi-step-transform/template-file.js +6 -1
  94. package/dist/generators/bootstrap-application/generator.js +1 -1
  95. package/dist/generators/bootstrap-application-base/generator.js +7 -3
  96. package/dist/generators/bootstrap-application-client/generator.js +5 -1
  97. package/dist/generators/bootstrap-application-server/generator.js +1 -0
  98. package/dist/generators/ci-cd/generator.js +1 -1
  99. package/dist/generators/ci-cd/templates/docker-registry.yml.ejs +0 -1
  100. package/dist/generators/ci-cd/templates/jenkins/jenkins.yml.ejs +0 -1
  101. package/dist/generators/client/command.js +2 -2
  102. package/dist/generators/client/generator.js +2 -3
  103. package/dist/generators/client/generators/common/command.js +5 -0
  104. package/dist/generators/client/generators/common/generator.js +79 -0
  105. package/dist/generators/client/generators/common/index.js +20 -0
  106. package/dist/generators/client/generators/common/templates/src/main/webapp/app/shared/jhipster/headers.ts.ejs +57 -0
  107. package/dist/generators/client/generators/common/templates/src/main/webapp/app/shared/jhipster/problem-details.ts.ejs +51 -0
  108. package/dist/generators/client/resources/package.json +6 -6
  109. package/dist/generators/client/support/filter-entities.js +1 -1
  110. package/dist/generators/client/templates/.eslintignore.ejs +9 -5
  111. package/dist/generators/client/templates/README.md.jhi.client.ejs +29 -20
  112. package/dist/generators/client/templates/src/main/webapp/index.html.ejs +1 -1
  113. package/dist/generators/common/generator.js +5 -0
  114. package/dist/generators/common/resources/package.json +2 -2
  115. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/account/login-page.cy.ts.ejs +4 -4
  116. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/account/password-page.cy.ts.ejs +2 -2
  117. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/account/register-page.cy.ts.ejs +1 -1
  118. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/account/reset-password-page.cy.ts.ejs +1 -1
  119. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/entity/_entity_.cy.ts.ejs +10 -10
  120. package/dist/generators/docker/templates/docker/keycloak.yml.ejs +2 -1
  121. package/dist/generators/docker/templates/docker/mariadb.yml.ejs +1 -1
  122. package/dist/generators/docker/templates/docker/mysql.yml.ejs +1 -2
  123. package/dist/generators/docker/templates/docker/realm-config/jhipster-realm.json.ejs +14 -3
  124. package/dist/generators/docker/templates/docker/realm-config/keycloak-health-check.sh +2 -2
  125. package/dist/generators/docker-compose/templates/docker-compose.yml.ejs +1 -0
  126. package/dist/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs +14 -3
  127. package/dist/generators/docker-compose/templates/realm-config/keycloak-health-check.sh +2 -2
  128. package/dist/generators/entity/generator.js +2 -10
  129. package/dist/generators/entity/prompts.js +6 -11
  130. package/dist/generators/feign-client/templates/src/main/java/_package_/client/AuthorizationHeaderUtil.java.ejs +1 -1
  131. package/dist/generators/gatling/README.md +15 -0
  132. package/dist/generators/gatling/generator.js +0 -1
  133. package/dist/generators/gatling/templates/src/test/java/gatling/simulations/_entityClass_GatlingTest.java.ejs +2 -10
  134. package/dist/generators/generate-blueprint/command.js +16 -0
  135. package/dist/generators/generate-blueprint/files.js +11 -1
  136. package/dist/generators/generate-blueprint/generator.js +34 -17
  137. package/dist/generators/generate-blueprint/resources/package.json +3 -1
  138. package/dist/generators/generate-blueprint/templates/.blueprint/cli/commands.mjs.ejs +6 -0
  139. package/dist/generators/generate-blueprint/templates/.blueprint/generate-sample/command.mjs.ejs +20 -0
  140. package/dist/generators/generate-blueprint/templates/.blueprint/generate-sample/generator.mjs.ejs +9 -13
  141. package/dist/generators/generate-blueprint/templates/.blueprint/github-build-matrix/build-matrix.mjs.ejs +22 -0
  142. package/dist/generators/generate-blueprint/templates/.blueprint/github-build-matrix/generator.mjs.ejs +20 -0
  143. package/dist/generators/generate-blueprint/templates/.blueprint/github-build-matrix/index.mjs.ejs +1 -0
  144. package/dist/generators/generate-blueprint/templates/.github/workflows/build-cache.yml.ejs +39 -0
  145. package/dist/generators/generate-blueprint/templates/.github/workflows/samples.yml.ejs +105 -0
  146. package/dist/generators/generate-blueprint/templates/.prettierignore.jhi.blueprint.ejs +1 -1
  147. package/dist/generators/generate-blueprint/templates/README.md.ejs +16 -8
  148. package/dist/generators/generate-blueprint/templates/eslint.config.js.ejs +33 -0
  149. package/dist/generators/generate-blueprint/templates/vitest.config.ts.ejs +1 -0
  150. package/dist/generators/generator-constants.js +2 -2
  151. package/dist/generators/gradle/templates/gradle/wrapper/gradle-wrapper.properties +1 -1
  152. package/dist/generators/heroku/generator.js +1 -1
  153. package/dist/generators/info/generator.js +1 -3
  154. package/dist/generators/info/support/extract-info.js +60 -0
  155. package/dist/generators/info/support/index.js +1 -0
  156. package/dist/generators/init/generator.js +2 -2
  157. package/dist/generators/init/resources/.node-version +1 -1
  158. package/dist/generators/init/resources/package.json +2 -2
  159. package/dist/generators/java/generators/bootstrap/generator.js +9 -2
  160. package/dist/generators/java/generators/build-tool/command.js +6 -3
  161. package/dist/generators/java/generators/domain/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.ejs +1 -5
  162. package/dist/generators/java/generators/domain/templates/src/test/java/_package_/_entityPackage_/domain/_persistClass_Asserts.java.ejs +3 -3
  163. package/dist/generators/java/generators/domain/templates/src/test/java/_package_/_entityPackage_/domain/_persistClass_Test.java.ejs +3 -3
  164. package/dist/generators/java/generators/node/templates/npmw +1 -5
  165. package/dist/generators/java/support/add-java-annotation.js +28 -7
  166. package/dist/generators/java/support/generated-annotation-transform.js +1 -1
  167. package/dist/generators/java/support/index.js +1 -1
  168. package/dist/generators/jdl/generator.js +7 -7
  169. package/dist/generators/kubernetes/files.js +1 -1
  170. package/dist/generators/kubernetes/templates/db/mysql.yml.ejs +1 -1
  171. package/dist/generators/kubernetes/templates/keycloak/keycloak-configmap.yml.ejs +14 -3
  172. package/dist/generators/languages/generator.js +5 -2
  173. package/dist/generators/liquibase/templates/src/main/java/_package_/config/LiquibaseConfiguration.java.ejs +1 -1
  174. package/dist/generators/maven/command.js +15 -0
  175. package/dist/generators/maven/generator.js +6 -1
  176. package/dist/generators/maven/index.js +1 -0
  177. package/dist/generators/maven/internal/xml-store.js +7 -6
  178. package/dist/generators/maven/support/pom-store.js +24 -9
  179. package/dist/generators/maven/templates/.mvn/wrapper/maven-wrapper.properties +2 -2
  180. package/dist/generators/maven/templates/mvnw +185 -243
  181. package/dist/generators/maven/templates/mvnw.cmd +121 -180
  182. package/dist/generators/react/entity-files-react.js +7 -7
  183. package/dist/generators/react/generator.js +10 -0
  184. package/dist/generators/react/resources/package.json +28 -28
  185. package/dist/generators/react/templates/src/main/webapp/app/app.tsx.ejs +9 -0
  186. package/dist/generators/react/templates/src/main/webapp/app/config/axios-interceptor.spec.ts.ejs +1 -1
  187. package/dist/generators/react/templates/src/main/webapp/app/config/axios-interceptor.ts.ejs +1 -1
  188. package/dist/generators/react/templates/src/main/webapp/app/config/notification-middleware.spec.ts.ejs +1 -1
  189. package/dist/generators/react/templates/src/main/webapp/app/config/notification-middleware.ts.ejs +80 -87
  190. package/dist/generators/react/templates/src/main/webapp/app/config/store.ts.ejs +1 -1
  191. package/dist/generators/react/templates/src/main/webapp/app/config/translation.ts.ejs +4 -0
  192. package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.tsx.ejs +3 -3
  193. package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.reducer.ts.ejs +12 -7
  194. package/dist/generators/react/templates/src/main/webapp/app/modules/home/home.tsx.ejs +15 -1
  195. package/dist/generators/react/templates/src/main/webapp/app/modules/login/login-redirect.tsx.ejs +4 -0
  196. package/dist/generators/react/templates/src/main/webapp/app/modules/login/logout.tsx.ejs +5 -3
  197. package/dist/generators/react/templates/src/main/webapp/app/routes.tsx.ejs +1 -1
  198. package/dist/generators/react/templates/src/main/webapp/app/shared/auth/private-route.spec.tsx.ejs +1 -1
  199. package/dist/generators/react/templates/src/main/webapp/app/shared/auth/private-route.tsx.ejs +1 -1
  200. package/dist/generators/react/templates/src/main/webapp/app/shared/layout/header/header.tsx.ejs +0 -9
  201. package/dist/generators/react/templates/src/main/webapp/app/shared/layout/menus/account.spec.tsx.ejs +1 -3
  202. package/dist/generators/react/templates/src/main/webapp/app/shared/layout/menus/account.tsx.ejs +29 -6
  203. package/dist/generators/react/templates/src/main/webapp/app/shared/reducers/reducer.utils.ts.ejs +2 -3
  204. package/dist/generators/react/templates/src/main/webapp/app/shared/util/url-utils.ts.ejs +1 -1
  205. package/dist/generators/server/command.js +0 -11
  206. package/dist/generators/server/generator.js +16 -75
  207. package/dist/generators/server/jdl/application-definition.js +3 -1
  208. package/dist/generators/server/resources/Dockerfile +13 -13
  209. package/dist/generators/server/resources/gradle/libs.versions.toml +9 -7
  210. package/dist/generators/server/resources/pom.xml +16 -16
  211. package/dist/generators/server/support/config.js +4 -8
  212. package/dist/generators/server/support/prepare-entity.js +5 -6
  213. package/dist/generators/server/support/relationship.js +5 -2
  214. package/dist/generators/server/templates/build.gradle.ejs +5 -3
  215. package/dist/generators/server/templates/gradle/profile_dev.gradle.ejs +2 -1
  216. package/dist/generators/server/templates/gradle/profile_prod.gradle.ejs +2 -1
  217. package/dist/generators/server/templates/gradle.properties.ejs +1 -1
  218. package/dist/generators/server/templates/pom.xml.ejs +7 -31
  219. package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/service/dto/_dtoClass_.java.ejs +1 -1
  220. package/dist/generators/server/templates/src/main/java/_package_/config/AsyncConfiguration.java.ejs +1 -1
  221. package/dist/generators/server/templates/src/main/java/_package_/config/Constants.java.ejs +0 -2
  222. package/dist/generators/server/templates/src/main/java/_package_/config/SecurityConfiguration_imperative.java.ejs +1 -18
  223. package/dist/generators/server/templates/src/main/java/_package_/config/SecurityConfiguration_reactive.java.ejs +1 -15
  224. package/dist/generators/server/templates/src/main/java/_package_/config/SecurityJwtConfiguration.java.ejs +1 -21
  225. package/dist/generators/server/templates/src/main/java/_package_/config/WebConfigurer.java.ejs +1 -1
  226. package/dist/generators/server/templates/src/main/java/_package_/security/DomainUserDetailsService.java.ejs +1 -1
  227. package/dist/generators/server/templates/src/main/java/_package_/security/PersistentTokenRememberMeServices.java.ejs +1 -1
  228. package/dist/generators/server/templates/src/main/java/_package_/security/SecurityUtils.java.ejs +65 -5
  229. package/dist/generators/server/templates/src/main/java/_package_/security/oauth2/AudienceValidator.java.ejs +1 -1
  230. package/dist/generators/server/templates/src/main/java/_package_/service/MailService.java.ejs +1 -1
  231. package/dist/generators/server/templates/src/main/java/_package_/service/dto/UserDTO.java.ejs +34 -0
  232. package/dist/generators/server/templates/src/main/java/_package_/service/mapper/UserMapper.java.ejs +8 -4
  233. package/dist/generators/server/templates/src/main/java/_package_/web/rest/AccountResource.java.ejs +1 -1
  234. package/dist/generators/server/templates/src/main/java/_package_/web/rest/AccountResource_oauth2.java.ejs +1 -1
  235. package/dist/generators/server/templates/src/main/java/_package_/web/rest/AccountResource_skipUserManagement.java.ejs +44 -10
  236. package/dist/generators/server/templates/src/main/java/_package_/web/rest/AuthenticateController.java.ejs +1 -1
  237. package/dist/generators/server/templates/src/main/resources/config/application-dev.yml.ejs +1 -1
  238. package/dist/generators/server/templates/src/main/resources/config/application.yml.ejs +60 -22
  239. package/dist/generators/server/templates/src/main/resources/config/bootstrap.yml.ejs +1 -1
  240. package/dist/generators/server/templates/src/main/resources/swagger/api.yml.ejs +1 -1
  241. package/dist/generators/server/templates/src/test/java/_package_/security/DomainUserDetailsServiceIT.java.ejs +31 -13
  242. package/dist/generators/server/templates/src/test/java/_package_/service/mapper/UserMapperTest.java.ejs +84 -17
  243. package/dist/generators/server/templates/src/test/java/_package_/web/rest/AccountResourceIT.java.ejs +62 -6
  244. package/dist/generators/server/templates/src/test/java/_package_/web/rest/AccountResourceIT_oauth2.java.ejs +22 -0
  245. package/dist/generators/server/templates/src/test/resources/config/application.yml.ejs +20 -10
  246. package/dist/generators/spring-boot/command.js +117 -6
  247. package/dist/generators/spring-boot/files.js +0 -5
  248. package/dist/generators/spring-boot/generator.js +44 -9
  249. package/dist/generators/spring-boot/prompts.js +6 -70
  250. package/dist/generators/spring-boot/resources/spring-boot-dependencies.pom +374 -582
  251. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/service/UserService.java.ejs +1 -1
  252. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/service/_entityClass_QueryService.java.ejs +1 -1
  253. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/service/impl/_entityClass_ServiceImpl.java.ejs +1 -1
  254. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/PublicUserResource.java.ejs +1 -1
  255. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/UserResource.java.ejs +1 -1
  256. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/_entityClass_Resource.java.ejs +1 -1
  257. package/dist/generators/spring-boot/templates/src/test/java/_package_/_entityPackage_/service/UserServiceIT.java.ejs +47 -11
  258. package/dist/generators/spring-boot/templates/src/test/java/_package_/_entityPackage_/web/rest/PublicUserResourceIT.java.ejs +60 -24
  259. package/dist/generators/spring-boot/templates/src/test/java/_package_/_entityPackage_/web/rest/UserResourceIT.java.ejs +195 -318
  260. package/dist/generators/spring-boot/templates/src/test/java/_package_/_entityPackage_/web/rest/_entityClass_ResourceIT.java.ejs +58 -51
  261. package/dist/generators/spring-cache/internal/dependencies.js +2 -2
  262. package/dist/generators/spring-cache/resources/gradle/libs.versions.toml +1 -1
  263. package/dist/generators/spring-cache/templates/src/main/java/_package_/config/CacheConfiguration.java.ejs +3 -3
  264. package/dist/generators/spring-cloud/generators/gateway/command.js +10 -1
  265. package/dist/generators/spring-cloud/generators/gateway/generator.js +13 -0
  266. package/dist/generators/spring-cloud/generators/gateway/jdl/jdl-routes-option.js +6 -0
  267. package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/main/java/_package_/broker/KafkaConsumer_imperative.java.ejs +1 -1
  268. package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/main/java/_package_/broker/KafkaConsumer_reactive.java.ejs +1 -1
  269. package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/main/java/_package_/web/rest/KafkaResource_imperative.java.ejs +1 -1
  270. package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/main/java/_package_/web/rest/KafkaResource_reactive.java.ejs +1 -1
  271. package/dist/generators/spring-data-cassandra/generator.js +2 -2
  272. package/dist/generators/spring-data-couchbase/templates/src/main/java/_package_/config/DatabaseConfiguration.java.ejs +1 -1
  273. package/dist/generators/spring-data-neo4j/templates/src/main/java/_package_/config/DatabaseConfiguration.java_neo4j.ejs +18 -2
  274. package/dist/generators/spring-data-relational/templates/src/main/java/_package_/config/DatabaseConfiguration.java.ejs +1 -1
  275. package/dist/generators/spring-data-relational/templates/src/test/java/_package_/config/SqlTestContainersSpringContextCustomizerFactory.java.ejs +3 -1
  276. package/dist/generators/vue/entity-files-vue.js +7 -7
  277. package/dist/generators/vue/resources/package.json +21 -21
  278. package/dist/generators/vue/templates/.eslintrc.cjs.ejs +7 -0
  279. package/dist/generators/vue/templates/src/main/webapp/app/admin/tracker/tracker.service.spec.ts.ejs +1 -1
  280. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-details.vue.ejs +1 -1
  281. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.vue.ejs +1 -1
  282. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.vue.ejs +1 -1
  283. package/dist/generators/vue/templates/src/main/webapp/app/shared/alert/alert.service.spec.ts.ejs +8 -8
  284. package/dist/generators/vue/templates/src/main/webapp/app/shared/data/data-utils.service.spec.ts.ejs +1 -1
  285. package/dist/generators/vue/templates/tsconfig.app.json.ejs +1 -1
  286. package/dist/generators/vue/templates/vite.config.mts.ejs +5 -4
  287. package/dist/jdl/converters/jdl-to-json/jdl-to-json-basic-entity-converter.js +1 -1
  288. package/dist/jdl/converters/jdl-to-json/jdl-to-json-field-converter.js +4 -4
  289. package/dist/jdl/converters/jdl-to-json/jdl-with-applications-to-json-converter.js +9 -9
  290. package/dist/jdl/converters/jdl-to-json/jdl-without-application-to-json-converter.js +2 -2
  291. package/dist/jdl/converters/json-to-jdl-application-converter.js +1 -1
  292. package/dist/jdl/converters/json-to-jdl-converter.js +6 -5
  293. package/dist/jdl/converters/json-to-jdl-entity-converter.js +14 -14
  294. package/dist/jdl/converters/json-to-jdl-option-converter.js +1 -2
  295. package/dist/jdl/converters/parsed-jdl-to-jdl-object/application-converter.js +1 -1
  296. package/dist/jdl/converters/parsed-jdl-to-jdl-object/option-converter.js +2 -2
  297. package/dist/jdl/converters/parsed-jdl-to-jdl-object/parsed-jdl-to-jdl-object-converter.js +7 -6
  298. package/dist/jdl/converters/parsed-jdl-to-jdl-object/validation-converter.js +1 -1
  299. package/dist/jdl/exporters/applications/jhipster-application-formatter.js +16 -23
  300. package/dist/jdl/exporters/config.js +1 -0
  301. package/dist/jdl/exporters/jhipster-deployment-exporter.js +5 -5
  302. package/dist/jdl/exporters/jhipster-entity-exporter.js +1 -1
  303. package/dist/jdl/jdl-importer.js +22 -20
  304. package/dist/jdl/jhipster/binary-options.js +12 -8
  305. package/dist/jdl/jhipster/json-entity.js +1 -1
  306. package/dist/jdl/models/abstract-jdl-option.js +2 -2
  307. package/dist/jdl/models/jdl-application-configuration-factory.js +2 -0
  308. package/dist/jdl/models/jdl-binary-option.js +2 -2
  309. package/dist/jdl/models/jdl-deployment.js +11 -0
  310. package/dist/jdl/models/jdl-entity.js +1 -1
  311. package/dist/jdl/models/jdl-enum.js +1 -1
  312. package/dist/jdl/models/jdl-enums.js +0 -18
  313. package/dist/jdl/models/jdl-field.js +2 -2
  314. package/dist/jdl/models/jdl-object-wrapper.js +1 -0
  315. package/dist/jdl/models/jdl-object.js +23 -45
  316. package/dist/jdl/models/jdl-options.js +0 -18
  317. package/dist/jdl/models/jdl-relationships.js +8 -16
  318. package/dist/jdl/models/jdl-unary-option.js +1 -1
  319. package/dist/jdl/models/list-jdl-application-configuration-option.js +5 -2
  320. package/dist/jdl/parsing/jdl-ast-builder-visitor.js +12 -0
  321. package/dist/jdl/parsing/jdl-parser.js +14 -0
  322. package/dist/jdl/parsing/lexer/lexer.js +17 -11
  323. package/dist/jdl/parsing/validator.js +16 -2
  324. package/dist/jdl/readers/json-reader.js +1 -1
  325. package/dist/jdl/utils/array-utils.js +6 -0
  326. package/dist/jdl/utils/set-utils.js +3 -2
  327. package/dist/jdl/validators/jdl-without-application-validator.js +2 -2
  328. package/dist/lib/eslint/base.js +25 -0
  329. package/dist/lib/eslint/recommended.js +22 -0
  330. package/dist/testing/github.js +32 -0
  331. package/dist/testing/helpers.js +13 -0
  332. package/dist/testing/index.js +2 -0
  333. package/dist/testing/sample-config.js +31 -0
  334. package/dist/types/cli/commands.d.mts +2 -0
  335. package/dist/types/cli/environment-builder.d.mts +1 -0
  336. package/dist/types/generators/base/api.d.ts +19 -8
  337. package/dist/types/generators/base/generator.d.ts +10 -4
  338. package/dist/types/generators/base/internal/command.d.ts +2 -0
  339. package/dist/types/generators/base/internal/index.d.ts +1 -0
  340. package/dist/types/generators/base/priorities.d.ts +4 -0
  341. package/dist/types/generators/base/shared-data.d.ts +11 -2
  342. package/dist/types/generators/base/types.d.ts +12 -0
  343. package/dist/types/generators/base-application/priorities.d.ts +2 -0
  344. package/dist/types/generators/base-application/support/entity.d.ts +2 -2
  345. package/dist/types/generators/base-application/support/prepare-entity.d.ts +3 -3
  346. package/dist/types/generators/base-application/support/relationship.d.ts +5 -5
  347. package/dist/types/generators/base-application/types.d.ts +11 -0
  348. package/dist/types/generators/base-core/generator.d.ts +18 -2
  349. package/dist/types/generators/generator-constants.d.ts +1 -1
  350. package/dist/types/generators/info/support/extract-info.d.ts +14 -0
  351. package/dist/types/generators/info/support/index.d.ts +1 -0
  352. package/dist/types/generators/java/support/add-java-annotation.d.ts +10 -20
  353. package/dist/types/generators/java/support/doc.d.ts +1 -1
  354. package/dist/types/generators/java/support/index.d.ts +1 -1
  355. package/dist/types/generators/java/types.d.ts +12 -0
  356. package/dist/types/generators/maven/internal/xml-store.d.ts +3 -2
  357. package/dist/types/generators/maven/support/pom-store.d.ts +5 -2
  358. package/dist/types/generators/maven/types.d.ts +1 -0
  359. package/dist/types/generators/server/support/relationship.d.ts +2 -2
  360. package/dist/types/generators/server/types.d.ts +7 -1
  361. package/dist/types/generators/spring-cloud/generators/gateway/jdl/jdl-routes-option.d.ts +2 -0
  362. package/dist/types/generators/spring-cloud/generators/gateway/types.d.ts +4 -0
  363. package/dist/types/jdl/converters/jdl-to-json/jdl-to-json-field-converter.d.ts +2 -2
  364. package/dist/types/jdl/converters/jdl-to-json/jdl-with-applications-to-json-converter.d.ts +2 -1
  365. package/dist/types/jdl/converters/jdl-to-json/jdl-without-application-to-json-converter.d.ts +3 -1
  366. package/dist/types/jdl/converters/json-to-jdl-application-converter.d.ts +9 -2
  367. package/dist/types/jdl/converters/json-to-jdl-converter.d.ts +3 -3
  368. package/dist/types/jdl/converters/json-to-jdl-entity-converter.d.ts +2 -4
  369. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/application-converter.d.ts +3 -1
  370. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/deployment-converter.d.ts +2 -1
  371. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/entity-converter.d.ts +3 -1
  372. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/enum-converter.d.ts +2 -1
  373. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/field-converter.d.ts +2 -1
  374. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/option-converter.d.ts +3 -3
  375. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/parsed-jdl-to-jdl-object-converter.d.ts +2 -1
  376. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/relationship-converter.d.ts +2 -1
  377. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/types.d.ts +110 -0
  378. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/validation-converter.d.ts +2 -1
  379. package/dist/types/jdl/converters/types.d.ts +102 -14
  380. package/dist/types/jdl/exporters/applications/jhipster-application-formatter.d.ts +4 -4
  381. package/dist/types/jdl/exporters/config.d.ts +2 -1
  382. package/dist/types/jdl/exporters/export-utils.d.ts +2 -1
  383. package/dist/types/jdl/exporters/jdl-exporter.d.ts +2 -1
  384. package/dist/types/jdl/exporters/jhipster-deployment-exporter.d.ts +3 -1
  385. package/dist/types/jdl/exporters/jhipster-entity-exporter.d.ts +3 -1
  386. package/dist/types/jdl/exporters/types.d.ts +61 -0
  387. package/dist/types/jdl/jhipster/binary-options.d.ts +8 -26
  388. package/dist/types/jdl/jhipster/field-types.d.ts +2 -2
  389. package/dist/types/jdl/jhipster/json-entity.d.ts +2 -2
  390. package/dist/types/jdl/models/abstract-jdl-option.d.ts +14 -9
  391. package/dist/types/jdl/models/boolean-jdl-application-configuration-option.d.ts +1 -1
  392. package/dist/types/jdl/models/integer-jdl-application-configuration-option.d.ts +1 -1
  393. package/dist/types/jdl/models/jdl-application-configuration-factory.d.ts +1 -1
  394. package/dist/types/jdl/models/jdl-application-configuration-option.d.ts +4 -4
  395. package/dist/types/jdl/models/jdl-application-configuration.d.ts +4 -4
  396. package/dist/types/jdl/models/jdl-application-definition.d.ts +4 -4
  397. package/dist/types/jdl/models/jdl-application-entities.d.ts +4 -4
  398. package/dist/types/jdl/models/jdl-application.d.ts +16 -13
  399. package/dist/types/jdl/models/jdl-binary-option.d.ts +5 -3
  400. package/dist/types/jdl/models/jdl-deployment.d.ts +13 -1
  401. package/dist/types/jdl/models/jdl-entity.d.ts +5 -5
  402. package/dist/types/jdl/models/jdl-enum-value.d.ts +4 -4
  403. package/dist/types/jdl/models/jdl-enum.d.ts +9 -5
  404. package/dist/types/jdl/models/jdl-enums.d.ts +6 -5
  405. package/dist/types/jdl/models/jdl-field.d.ts +10 -8
  406. package/dist/types/jdl/models/jdl-object-wrapper.d.ts +25 -0
  407. package/dist/types/jdl/models/jdl-object.d.ts +23 -19
  408. package/dist/types/jdl/models/jdl-options.d.ts +7 -24
  409. package/dist/types/jdl/models/jdl-relationship.d.ts +16 -10
  410. package/dist/types/jdl/models/jdl-relationships.d.ts +5 -5
  411. package/dist/types/jdl/models/jdl-validation.d.ts +3 -3
  412. package/dist/types/jdl/models/list-jdl-application-configuration-option.d.ts +4 -3
  413. package/dist/types/jdl/models/string-jdl-application-configuration-option.d.ts +2 -2
  414. package/dist/types/jdl/parsing/jdl-ast-builder-visitor.d.ts +1 -0
  415. package/dist/types/jdl/parsing/jdl-parser.d.ts +1 -0
  416. package/dist/types/jdl/parsing/jdl-parsing-types.d.ts +23 -0
  417. package/dist/types/jdl/parsing/lexer/lexer.d.ts +6 -2
  418. package/dist/types/jdl/parsing/validator.d.ts +1 -1
  419. package/dist/types/jdl/utils/array-utils.d.ts +1 -0
  420. package/dist/types/jdl/utils/set-utils.d.ts +1 -19
  421. package/dist/types/jdl/validators/deployment-validator.d.ts +2 -1
  422. package/dist/types/lib/eslint/base.d.ts +20 -0
  423. package/dist/types/lib/eslint/recommended.d.ts +20 -0
  424. package/dist/types/testing/github.d.ts +11 -0
  425. package/dist/types/testing/helpers.d.ts +21 -3
  426. package/dist/types/testing/index.d.ts +2 -0
  427. package/dist/types/testing/sample-config.d.ts +4 -0
  428. package/package.json +35 -30
  429. package/dist/generators/generate-blueprint/templates/.eslintrc.json.ejs +0 -35
  430. /package/dist/jdl/converters/{types.js → parsed-jdl-to-jdl-object/types.js} +0 -0
@@ -271,7 +271,7 @@ export default class BaseApplicationGenerator extends BaseGenerator {
271
271
  if ([PREPARING, LOADING].includes(priorityName)) {
272
272
  return {
273
273
  application,
274
- applicationDefaults: data => mutateData(application, data),
274
+ applicationDefaults: data => mutateData(application, { __override__: false, ...data }),
275
275
  };
276
276
  }
277
277
  if (LOADING_ENTITIES === priorityName) {
@@ -448,6 +448,8 @@ export default class BaseApplicationGenerator extends BaseGenerator {
448
448
  taskName: 'queueConfiguringEachEntity',
449
449
  cancellable: true,
450
450
  method: () => {
451
+ if (this.options.skipPriorities?.includes(CONFIGURING_EACH_ENTITY))
452
+ return;
451
453
  this.log.debug(`Queueing entity tasks ${CONFIGURING_EACH_ENTITY}`);
452
454
  const tasks = this.extractTasksFromPriority(CONFIGURING_EACH_ENTITY, { skip: false });
453
455
  this.getEntitiesDataToConfigure().forEach(({ entityName, entityStorage, entityConfig }) => {
@@ -467,6 +469,8 @@ export default class BaseApplicationGenerator extends BaseGenerator {
467
469
  taskName: 'queueLoadingEntities',
468
470
  cancellable: true,
469
471
  method: () => {
472
+ if (this.options.skipPriorities?.includes(LOADING_ENTITIES))
473
+ return;
470
474
  this.log.debug(`Queueing entity tasks ${LOADING_ENTITIES}`);
471
475
  const tasks = this.extractTasksFromPriority(LOADING_ENTITIES, { skip: false });
472
476
  this.log.debug(`Queueing entity tasks ${LOADING_ENTITIES}`);
@@ -484,6 +488,8 @@ export default class BaseApplicationGenerator extends BaseGenerator {
484
488
  taskName: 'queuePreparingEachEntity',
485
489
  cancellable: true,
486
490
  method: () => {
491
+ if (this.options.skipPriorities?.includes(PREPARING_EACH_ENTITY))
492
+ return;
487
493
  this.log.debug(`Queueing entity tasks ${PREPARING_EACH_ENTITY}`);
488
494
  const tasks = this.extractTasksFromPriority(PREPARING_EACH_ENTITY, { skip: false });
489
495
  this.getEntitiesDataToPrepare().forEach(({ description, ...data }) => {
@@ -503,6 +509,8 @@ export default class BaseApplicationGenerator extends BaseGenerator {
503
509
  taskName: 'queuePreparingEachEntityField',
504
510
  cancellable: true,
505
511
  method: () => {
512
+ if (this.options.skipPriorities?.includes(PREPARING_EACH_ENTITY_FIELD))
513
+ return;
506
514
  const tasks = this.extractTasksFromPriority(PREPARING_EACH_ENTITY_FIELD, { skip: false });
507
515
  this.getEntitiesFieldsDataToPrepare().forEach(({ description, ...data }) => {
508
516
  this.log.debug(`Queueing entity tasks ${PREPARING_EACH_ENTITY_FIELD} for ${description}`);
@@ -521,6 +529,8 @@ export default class BaseApplicationGenerator extends BaseGenerator {
521
529
  taskName: 'queuePreparingEachEntityRelationship',
522
530
  cancellable: true,
523
531
  method: () => {
532
+ if (this.options.skipPriorities?.includes(PREPARING_EACH_ENTITY_RELATIONSHIP))
533
+ return;
524
534
  const tasks = this.extractTasksFromPriority(PREPARING_EACH_ENTITY_RELATIONSHIP, { skip: false });
525
535
  this.getEntitiesRelationshipsDataToPrepare().forEach(({ description, ...data }) => {
526
536
  this.log.debug(`Queueing entity tasks ${PREPARING_EACH_ENTITY_RELATIONSHIP} for ${description}`);
@@ -539,6 +549,8 @@ export default class BaseApplicationGenerator extends BaseGenerator {
539
549
  taskName: 'queuePostPreparingEachEntity',
540
550
  cancellable: true,
541
551
  method: () => {
552
+ if (this.options.skipPriorities?.includes(POST_PREPARING_EACH_ENTITY))
553
+ return;
542
554
  const tasks = this.extractTasksFromPriority(POST_PREPARING_EACH_ENTITY, { skip: false });
543
555
  this.getEntitiesDataToPostPrepare().forEach(({ description, ...data }) => {
544
556
  this.log.debug(`Queueing entity tasks ${POST_PREPARING_EACH_ENTITY} for ${description}`);
@@ -557,7 +569,7 @@ export default class BaseApplicationGenerator extends BaseGenerator {
557
569
  taskName: 'queueWritingEachEntity',
558
570
  cancellable: true,
559
571
  method: () => {
560
- if (this.options.skipWriting)
572
+ if (this.options.skipWriting || this.options.skipPriorities?.includes(WRITING_ENTITIES))
561
573
  return;
562
574
  const tasks = this.extractTasksFromPriority(WRITING_ENTITIES, { skip: false });
563
575
  const args = this.getArgsForPriority(WRITING_ENTITIES);
@@ -574,7 +586,7 @@ export default class BaseApplicationGenerator extends BaseGenerator {
574
586
  taskName: 'queuePostWritingEachEntity',
575
587
  cancellable: true,
576
588
  method: () => {
577
- if (this.options.skipWriting)
589
+ if (this.options.skipWriting || this.options.skipPriorities?.includes(POST_WRITING_ENTITIES))
578
590
  return;
579
591
  const tasks = this.extractTasksFromPriority(POST_WRITING_ENTITIES, { skip: false });
580
592
  const args = this.getArgsForPriority(POST_WRITING_ENTITIES);
@@ -126,6 +126,7 @@ export const PRIORITY_NAMES_LIST = [
126
126
  PRIORITY_NAMES.PROMPTING,
127
127
  PRIORITY_NAMES.CONFIGURING,
128
128
  PRIORITY_NAMES.COMPOSING,
129
+ PRIORITY_NAMES.COMPOSING_COMPONENT,
129
130
  PRIORITY_NAMES.LOADING,
130
131
  PRIORITY_NAMES.PREPARING,
131
132
  CONFIGURING_EACH_ENTITY,
@@ -22,12 +22,11 @@ import { getDatabaseTypeData, hibernateSnakeCase } from '../../server/support/in
22
22
  import { createFaker, parseChangelog, stringHashCode, upperFirstCamelCase, getMicroserviceAppName, mutateData, } from '../../base/support/index.js';
23
23
  import { fieldToReference } from './prepare-field.js';
24
24
  import { getTypescriptKeyType, getEntityParentPathAddition } from '../../client/support/index.js';
25
- import { applicationTypes, authenticationTypes, binaryOptions, databaseTypes, entityOptions, fieldTypes, searchEngineTypes, } from '../../../jdl/jhipster/index.js';
25
+ import { applicationTypes, binaryOptions, databaseTypes, entityOptions, fieldTypes, searchEngineTypes, } from '../../../jdl/jhipster/index.js';
26
26
  import { fieldIsEnum } from './field-utils.js';
27
27
  const NO_SEARCH_ENGINE = searchEngineTypes.NO;
28
28
  const { PaginationTypes, ServiceTypes, MapperTypes } = entityOptions;
29
29
  const { GATEWAY, MICROSERVICE } = applicationTypes;
30
- const { OAUTH2 } = authenticationTypes;
31
30
  const { CommonDBTypes } = fieldTypes;
32
31
  const { BOOLEAN, LONG, STRING, UUID, INTEGER } = CommonDBTypes;
33
32
  const { NO: NO_DTO, MAPSTRUCT } = MapperTypes;
@@ -191,10 +190,16 @@ export default function prepareEntity(entityWithConfig, generator, application)
191
190
  ? `${entityWithConfig.clientRootFolder}-${entityWithConfig.entityStateName}`
192
191
  : entityWithConfig.entityStateName);
193
192
  mutateData(entityWithConfig, {
193
+ __override__: false,
194
194
  i18nKeyPrefix: data => data.i18nKeyPrefix ?? `${data.frontendAppName}.${data.entityTranslationKey}`,
195
195
  i18nAlertHeaderPrefix: data => data.i18nAlertHeaderPrefix ?? data.microserviceAppName
196
196
  ? `${data.microserviceAppName}.${data.entityTranslationKey}`
197
197
  : data.i18nKeyPrefix,
198
+ hasRelationshipWithBuiltInUser: ({ relationships }) => relationships.some(relationship => relationship.otherEntity.builtInUser),
199
+ saveUserSnapshot: ({ hasRelationshipWithBuiltInUser, dto }) => application.applicationTypeMicroservice &&
200
+ application.authenticationTypeOauth2 &&
201
+ hasRelationshipWithBuiltInUser &&
202
+ dto === NO_MAPPER,
198
203
  });
199
204
  const { microserviceName, entityFileName, microfrontend } = entityWithConfig;
200
205
  entityWithConfig.entityApi = microserviceName ? `services/${microserviceName.toLowerCase()}/` : '';
@@ -203,12 +208,6 @@ export default function prepareEntity(entityWithConfig, generator, application)
203
208
  (microfrontend && microserviceName && entityWithConfig.applicationType === MICROSERVICE
204
209
  ? `${microserviceName.toLowerCase()}/${entityFileName}`
205
210
  : `${entityFileName}`);
206
- const hasBuiltInUserField = entityWithConfig.relationships.some(relationship => relationship.otherEntity.builtInUser);
207
- entityWithConfig.saveUserSnapshot =
208
- application.applicationType === MICROSERVICE &&
209
- application.authenticationType === OAUTH2 &&
210
- hasBuiltInUserField &&
211
- entityWithConfig.dto === NO_MAPPER;
212
211
  entityWithConfig.generateFakeData = type => {
213
212
  const fieldsToGenerate = type === 'cypress' ? entityWithConfig.fields.filter(field => !field.id || !field.autoGenerate) : entityWithConfig.fields;
214
213
  const fieldEntries = fieldsToGenerate.map(field => {
@@ -71,9 +71,9 @@ export default function prepareRelationship(entityWithConfig, relationship, gene
71
71
  otherEntityNameCapitalized: upperFirst(otherEntityName),
72
72
  // let ownerSide true when type is 'many-to-one' for convenience.
73
73
  // means that this side should control the reference.
74
- ownerSide: relationshipManyToOne || (relationshipLeftSide && !relationshipOneToMany),
74
+ ownerSide: relationship.otherEntity.embedded || relationshipManyToOne || (relationshipLeftSide && !relationshipOneToMany),
75
75
  persistableRelationship: ({ ownerSide }) => ownerSide,
76
- relationshipUpdateBackReference: ({ ownerSide, relationshipRightSide }) => entityWithConfig.databaseType === 'neo4j' ? relationshipRightSide : !ownerSide,
76
+ relationshipUpdateBackReference: ({ ownerSide, relationshipRightSide, otherEntity }) => !otherEntity.embedded && (entityWithConfig.databaseType === NEO4J ? relationshipRightSide : !ownerSide),
77
77
  // DB properties
78
78
  columnName: hibernateSnakeCase(relationshipName),
79
79
  columnNamePrefix: relationship.id && relationshipOneToOne ? '' : `${hibernateSnakeCase(relationshipName)}_`,
@@ -94,6 +94,7 @@ export default function prepareRelationship(entityWithConfig, relationship, gene
94
94
  relationship.otherSideReferenceExists = true;
95
95
  }
96
96
  else if (!ignoreMissingRequiredRelationship &&
97
+ !relationship.otherEntity.embedded &&
97
98
  !relationship.relationshipIgnoreBackReference &&
98
99
  entityWithConfig.databaseType !== NEO4J &&
99
100
  entityWithConfig.databaseType !== DATABASE_NO &&
@@ -25,14 +25,14 @@ import assert from 'assert';
25
25
  import { requireNamespace } from '@yeoman/namespace';
26
26
  import chalk from 'chalk';
27
27
  import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
28
- import { kebabCase, snakeCase, merge, get, set } from 'lodash-es';
28
+ import { kebabCase, snakeCase, merge, get, set, defaults, mergeWith } from 'lodash-es';
29
29
  import { simpleGit } from 'simple-git';
30
30
  import semver, { lt as semverLessThan } from 'semver';
31
31
  import YeomanGenerator from 'yeoman-generator';
32
32
  import latestVersion from 'latest-version';
33
33
  import SharedData from '../base/shared-data.js';
34
34
  import { CUSTOM_PRIORITIES, PRIORITY_NAMES, PRIORITY_PREFIX } from '../base/priorities.js';
35
- import { createJHipster7Context, formatDateForChangelog, joinCallbacks } from '../base/support/index.js';
35
+ import { createJHipster7Context, formatDateForChangelog, joinCallbacks, removeFieldsWithNullishValues, } from '../base/support/index.js';
36
36
  import { packageJson } from '../../lib/index.js';
37
37
  import { GENERATOR_BOOTSTRAP } from '../generator-list.js';
38
38
  import NeedleApi from '../needle-api.js';
@@ -41,7 +41,9 @@ import { GENERATOR_JHIPSTER, YO_RC_FILE } from '../generator-constants.js';
41
41
  import { convertConfigToOption } from '../../lib/internal/index.js';
42
42
  import { getGradleLibsVersionsProperties } from '../gradle/support/dependabot-gradle.js';
43
43
  import { dockerPlaceholderGenerator } from '../docker/utils.js';
44
- const { INITIALIZING, PROMPTING, CONFIGURING, COMPOSING, LOADING, PREPARING, POST_PREPARING, DEFAULT, WRITING, POST_WRITING, INSTALL, POST_INSTALL, END, } = PRIORITY_NAMES;
44
+ import { getConfigWithDefaults } from '../../jdl/index.js';
45
+ import { extractArgumentsFromConfigs } from '../base/internal/command.js';
46
+ const { INITIALIZING, PROMPTING, CONFIGURING, COMPOSING, COMPOSING_COMPONENT, LOADING, PREPARING, POST_PREPARING, DEFAULT, WRITING, POST_WRITING, INSTALL, POST_INSTALL, END, } = PRIORITY_NAMES;
45
47
  const __filename = fileURLToPath(import.meta.url);
46
48
  const __dirname = dirname(__filename);
47
49
  const asPriority = (priorityName) => `${PRIORITY_PREFIX}${priorityName}`;
@@ -49,6 +51,7 @@ const relativeDir = (from, to) => {
49
51
  const rel = posixRelative(from, to);
50
52
  return rel ? `${rel}/` : '';
51
53
  };
54
+ const deepMerge = (source1, source2) => mergeWith({}, source1, source2, (a, b) => (Array.isArray(a) ? a.concat(b) : undefined));
52
55
  /**
53
56
  * This is the base class for a generator for every generator.
54
57
  */
@@ -58,6 +61,7 @@ export default class CoreGenerator extends YeomanGenerator {
58
61
  static PROMPTING = asPriority(PROMPTING);
59
62
  static CONFIGURING = asPriority(CONFIGURING);
60
63
  static COMPOSING = asPriority(COMPOSING);
64
+ static COMPOSING_COMPONENT = asPriority(COMPOSING_COMPONENT);
61
65
  static LOADING = asPriority(LOADING);
62
66
  static PREPARING = asPriority(PREPARING);
63
67
  static POST_PREPARING = asPriority(POST_PREPARING);
@@ -69,6 +73,7 @@ export default class CoreGenerator extends YeomanGenerator {
69
73
  static END = asPriority(END);
70
74
  useVersionPlaceholders;
71
75
  skipChecks;
76
+ ignoreNeedlesError;
72
77
  experimental;
73
78
  debugEnabled;
74
79
  jhipster7Migration;
@@ -99,14 +104,12 @@ export default class CoreGenerator extends YeomanGenerator {
99
104
  unique: 'namespace',
100
105
  ...features,
101
106
  });
102
- let jhipsterOldVersion = null;
103
107
  if (!this.options.help) {
104
108
  /* Force config to use 'generator-jhipster' namespace. */
105
109
  this._config = this._getStorage('generator-jhipster');
106
110
  /* JHipster config using proxy mode used as a plain object instead of using get/set. */
107
111
  this.jhipsterConfig = this.config.createProxy();
108
- jhipsterOldVersion = this.jhipsterConfig.jhipsterVersion ?? null;
109
- this.sharedData = this.createSharedData({ jhipsterOldVersion, help: this.options.help });
112
+ this.sharedData = this.createSharedData({ help: this.options.help });
110
113
  /* Options parsing must be executed after forcing jhipster storage namespace and after sharedData have been populated */
111
114
  this.parseJHipsterOptions(command.options);
112
115
  // Don't write jhipsterVersion to .yo-rc.json when reproducible
@@ -149,6 +152,19 @@ export default class CoreGenerator extends YeomanGenerator {
149
152
  }
150
153
  return this._needleApi;
151
154
  }
155
+ /**
156
+ * JHipster config with default values fallback
157
+ */
158
+ get jhipsterConfigWithDefaults() {
159
+ const configWithDefaults = getConfigWithDefaults(removeFieldsWithNullishValues(this.config.getAll()));
160
+ defaults(configWithDefaults, {
161
+ skipFakeData: false,
162
+ skipCheckLengthOfIdentifier: false,
163
+ enableGradleEnterprise: false,
164
+ pages: [],
165
+ });
166
+ return configWithDefaults;
167
+ }
152
168
  /**
153
169
  * Warn or throws check failure based on current skipChecks option.
154
170
  * @param message
@@ -169,11 +185,14 @@ You can ignore this error by passing '--skip-checks' to jhipster command.`);
169
185
  */
170
186
  isJhipsterVersionLessThan(version) {
171
187
  const jhipsterOldVersion = this.sharedData.getControl().jhipsterOldVersion;
172
- if (!jhipsterOldVersion) {
173
- // if old version is unknown then can't compare (the project may be null) and return false
174
- return false;
175
- }
176
- return semverLessThan(jhipsterOldVersion, version);
188
+ return this.isVersionLessThan(jhipsterOldVersion, version);
189
+ }
190
+ /**
191
+ * Wrapper for `semver.lt` to check if the oldVersion exists and is less than the newVersion.
192
+ * Can be used by blueprints.
193
+ */
194
+ isVersionLessThan(oldVersion, newVersion) {
195
+ return oldVersion ? semverLessThan(oldVersion, newVersion) : false;
177
196
  }
178
197
  /**
179
198
  * Get arguments for the priority
@@ -251,6 +270,19 @@ You can ignore this error by passing '--skip-checks' to jhipster command.`);
251
270
  }
252
271
  return this.prompt(this.prepareQuestions(generatorCommand.configs));
253
272
  }
273
+ /**
274
+ * Configure the current JHipster command.
275
+ * Blueprints with command override takes precedence.
276
+ */
277
+ async configureCurrentJHipsterCommandConfig() {
278
+ const generatorCommand = await this.getCurrentJHipsterCommand();
279
+ if (!generatorCommand.configs) {
280
+ throw new Error(`Configs not found for generator ${this.options.namespace}`);
281
+ }
282
+ for (const def of Object.values(generatorCommand.configs)) {
283
+ def.configure?.(this);
284
+ }
285
+ }
254
286
  /**
255
287
  * Load the current JHipster command storage configuration into the context.
256
288
  * Blueprints with command override takes precedence.
@@ -266,7 +298,7 @@ You can ignore this error by passing '--skip-checks' to jhipster command.`);
266
298
  context[name] = context[name] ?? config?.[name] ?? this.config.get(name) ?? def.default;
267
299
  }
268
300
  if (def.scope === 'generator') {
269
- context[name] = context[name] ?? this[name] ?? def.default;
301
+ this[name] = this[name] ?? this.options[name] ?? def.default;
270
302
  }
271
303
  if (def.scope === 'blueprint') {
272
304
  context[name] = context[name] ?? this.blueprintStorage?.get(name) ?? def.default;
@@ -292,15 +324,7 @@ You can ignore this error by passing '--skip-checks' to jhipster command.`);
292
324
  this.parseJHipsterArguments(commandDef.arguments);
293
325
  }
294
326
  else if (commandDef.configs) {
295
- this.parseJHipsterArguments(Object.fromEntries(Object.entries(commandDef.configs)
296
- .filter(([_name, def]) => def.argument)
297
- .map(([name, def]) => [
298
- name,
299
- {
300
- description: def.description,
301
- ...def.argument,
302
- },
303
- ])));
327
+ this.parseJHipsterArguments(extractArgumentsFromConfigs(commandDef.configs));
304
328
  }
305
329
  if (commandDef.options || commandDef.configs) {
306
330
  this.parseJHipsterOptions(commandDef.options, commandDef.configs);
@@ -395,7 +419,7 @@ You can ignore this error by passing '--skip-checks' to jhipster command.`);
395
419
  return Object.entries(configs)
396
420
  .filter(([_name, def]) => def?.prompt)
397
421
  .map(([name, def]) => {
398
- const promptSpec = typeof def.prompt === 'function' ? def.prompt(this) : { ...def.prompt };
422
+ const promptSpec = typeof def.prompt === 'function' ? def.prompt(this, def) : { ...def.prompt };
399
423
  let storage;
400
424
  if ((def.scope ?? 'storage') === 'storage') {
401
425
  storage = this.config;
@@ -595,7 +619,12 @@ You can ignore this error by passing '--skip-checks' to jhipster command.`);
595
619
  // Convert to any because ejs types doesn't support string[] https://github.com/DefinitelyTyped/DefinitelyTyped/pull/63315
596
620
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
597
621
  const root = this.jhipsterTemplatesFolders ?? this.templatePath();
598
- return this.renderTemplate(source, destination, data, { root, ...options }, { noGlob: true, ...copyOptions });
622
+ try {
623
+ return this.renderTemplate(source, destination, data, { root, ...options }, { noGlob: true, ...copyOptions });
624
+ }
625
+ catch (error) {
626
+ throw new Error(`Error writing file ${source} to ${destination}: ${error}`, { cause: error });
627
+ }
599
628
  }
600
629
  /**
601
630
  * write the given files using provided options.
@@ -604,10 +633,15 @@ You can ignore this error by passing '--skip-checks' to jhipster command.`);
604
633
  const paramCount = Object.keys(options).filter(key => ['sections', 'blocks', 'templates'].includes(key)).length;
605
634
  assert(paramCount > 0, 'One of sections, blocks or templates is required');
606
635
  assert(paramCount === 1, 'Only one of sections, blocks or templates must be provided');
607
- const { sections, blocks, templates, rootTemplatesPath, context = this, transform: methodTransform = [] } = options;
636
+ const { sections, blocks, context = this, templates } = options;
637
+ const { rootTemplatesPath, customizeTemplatePath = file => file, transform: methodTransform = [] } = options;
608
638
  const { _: commonSpec = {} } = sections || {};
609
639
  const { transform: sectionTransform = [] } = commonSpec;
610
640
  const startTime = new Date().getMilliseconds();
641
+ const { customizeTemplatePaths: contextCustomizeTemplatePaths = [] } = context;
642
+ const templateData = this.jhipster7Migration
643
+ ? createJHipster7Context(this, context, { log: this.jhipster7Migration === 'verbose' ? msg => this.log.info(msg) : () => { } })
644
+ : context;
611
645
  /* Build lookup order first has preference.
612
646
  * Example
613
647
  * rootTemplatesPath = ['reactive', 'common']
@@ -642,7 +676,7 @@ You can ignore this error by passing '--skip-checks' to jhipster command.`);
642
676
  return val;
643
677
  }
644
678
  if (typeof val === 'function') {
645
- return val.call(this, context) || false;
679
+ return val.call(this, templateData) || false;
646
680
  }
647
681
  throw new Error(`Type not supported ${val}`);
648
682
  };
@@ -650,7 +684,6 @@ You can ignore this error by passing '--skip-checks' to jhipster command.`);
650
684
  const extension = extname(sourceFile);
651
685
  const isBinary = binary || ['.png', '.jpg', '.gif', '.svg', '.ico'].includes(extension);
652
686
  const appendEjs = noEjs === undefined ? !isBinary && extension !== '.ejs' : !noEjs;
653
- const ejsFile = appendEjs || extension === '.ejs';
654
687
  let targetFile;
655
688
  if (typeof destinationFile === 'function') {
656
689
  targetFile = resolveCallback(destinationFile);
@@ -661,9 +694,14 @@ You can ignore this error by passing '--skip-checks' to jhipster command.`);
661
694
  let sourceFileFrom;
662
695
  if (Array.isArray(rootTemplatesAbsolutePath)) {
663
696
  // Look for existing templates
664
- const existingTemplates = rootTemplatesAbsolutePath
697
+ let existingTemplates = rootTemplatesAbsolutePath
665
698
  .map(rootPath => this.templatePath(rootPath, sourceFile))
666
699
  .filter(templateFile => existsSync(appendEjs ? `${templateFile}.ejs` : templateFile));
700
+ if (existingTemplates.length === 0 && this.getFeatures().jhipster7Migration) {
701
+ existingTemplates = rootTemplatesAbsolutePath
702
+ .map(rootPath => this.templatePath(rootPath, appendEjs ? sourceFile : `${sourceFile}.ejs`))
703
+ .filter(templateFile => existsSync(templateFile));
704
+ }
667
705
  if (existingTemplates.length > 1) {
668
706
  const moreThanOneMessage = `Multiples templates were found for file ${sourceFile}, using the first
669
707
  templates: ${JSON.stringify(existingTemplates, null, 2)}`;
@@ -685,43 +723,68 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
685
723
  else {
686
724
  sourceFileFrom = this.templatePath(sourceFile);
687
725
  }
688
- if (appendEjs) {
689
- sourceFileFrom = `${sourceFileFrom}.ejs`;
726
+ const file = customizeTemplatePath({ sourceFile, resolvedSourceFile: sourceFileFrom, destinationFile: targetFile });
727
+ if (!file) {
728
+ return undefined;
690
729
  }
691
- if (!ejsFile) {
692
- await this.copyTemplateAsync(sourceFileFrom, targetFile);
693
- }
694
- else {
695
- let useAsync = true;
696
- if (context.entityClass) {
697
- if (!context.baseName) {
698
- throw new Error('baseName is require at templates context');
699
- }
700
- const sourceBasename = basename(sourceFileFrom);
701
- const seed = `${context.entityClass}-${sourceBasename}${context.fakerSeed ?? ''}`;
702
- Object.values(this.sharedData.getApplication()?.sharedEntities ?? {}).forEach((entity) => {
703
- entity.resetFakerSeed(seed);
704
- });
705
- // Async calls will make the render method to be scheduled, allowing the faker key to change in the meantime.
706
- useAsync = false;
730
+ sourceFileFrom = file.resolvedSourceFile;
731
+ targetFile = file.destinationFile;
732
+ let templatesRoots = [].concat(rootTemplatesAbsolutePath);
733
+ for (const contextCustomizeTemplatePath of contextCustomizeTemplatePaths) {
734
+ const file = contextCustomizeTemplatePath({
735
+ namespace: this.options.namespace,
736
+ sourceFile,
737
+ resolvedSourceFile: sourceFileFrom,
738
+ destinationFile: targetFile,
739
+ templatesRoots,
740
+ });
741
+ if (!file) {
742
+ return undefined;
707
743
  }
708
- const renderOptions = {
709
- ...(options?.renderOptions ?? {}),
710
- // Set root for ejs to lookup for partials.
711
- root: rootTemplatesAbsolutePath,
712
- // ejs caching cause problem https://github.com/jhipster/generator-jhipster/pull/20757
713
- cache: false,
714
- };
715
- const copyOptions = { noGlob: true };
716
- // TODO drop for v8 final release
717
- const data = this.jhipster7Migration ? createJHipster7Context(this, context, { ignoreWarnings: true }) : context;
718
- if (useAsync) {
719
- await this.renderTemplateAsync(sourceFileFrom, targetFile, data, renderOptions, copyOptions);
744
+ sourceFileFrom = file.resolvedSourceFile;
745
+ targetFile = file.destinationFile;
746
+ templatesRoots = file.templatesRoots;
747
+ }
748
+ try {
749
+ if (!appendEjs && extname(sourceFileFrom) !== '.ejs') {
750
+ await this.copyTemplateAsync(sourceFileFrom, targetFile);
720
751
  }
721
752
  else {
722
- this.renderTemplate(sourceFileFrom, targetFile, data, renderOptions, copyOptions);
753
+ let useAsync = true;
754
+ if (context.entityClass) {
755
+ if (!context.baseName) {
756
+ throw new Error('baseName is required at templates context');
757
+ }
758
+ const sourceBasename = basename(sourceFileFrom);
759
+ const seed = `${context.entityClass}-${sourceBasename}${context.fakerSeed ?? ''}`;
760
+ Object.values(this.sharedData.getApplication()?.sharedEntities ?? {}).forEach((entity) => {
761
+ entity.resetFakerSeed(seed);
762
+ });
763
+ // Async calls will make the render method to be scheduled, allowing the faker key to change in the meantime.
764
+ useAsync = false;
765
+ }
766
+ const renderOptions = {
767
+ ...(options?.renderOptions ?? {}),
768
+ // Set root for ejs to lookup for partials.
769
+ root: templatesRoots,
770
+ // ejs caching cause problem https://github.com/jhipster/generator-jhipster/pull/20757
771
+ cache: false,
772
+ };
773
+ const copyOptions = { noGlob: true };
774
+ if (appendEjs) {
775
+ sourceFileFrom = `${sourceFileFrom}.ejs`;
776
+ }
777
+ if (useAsync) {
778
+ await this.renderTemplateAsync(sourceFileFrom, targetFile, templateData, renderOptions, copyOptions);
779
+ }
780
+ else {
781
+ this.renderTemplate(sourceFileFrom, targetFile, templateData, renderOptions, copyOptions);
782
+ }
723
783
  }
724
784
  }
785
+ catch (error) {
786
+ throw new Error(`Error rendering template ${sourceFileFrom} to ${targetFile}: ${error}`, { cause: error });
787
+ }
725
788
  if (!isBinary && transform && transform.length) {
726
789
  this.editFile(targetFile, ...transform);
727
790
  }
@@ -867,7 +930,7 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
867
930
  if (!originalContent) {
868
931
  const { ignoreNonExisting, create } = actualOptions;
869
932
  const errorMessage = typeof ignoreNonExisting === 'string' ? ` ${ignoreNonExisting}.` : '';
870
- if (ignoreNonExisting) {
933
+ if (ignoreNonExisting || (!create && this.ignoreNeedlesError)) {
871
934
  this.log(`${chalk.yellow('\nUnable to find ')}${filePath}.${chalk.yellow(errorMessage)}\n`);
872
935
  // return a noop.
873
936
  const noop = () => noop;
@@ -884,7 +947,11 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
884
947
  try {
885
948
  newContent = joinCallbacks(...callbacks).call(this, newContent, filePath);
886
949
  if (actualOptions.assertModified && originalContent === newContent) {
887
- throw new Error(`Fail to edit file '${file}'.`);
950
+ const errorMessage = `${chalk.yellow('Fail to modify ')}${filePath}.`;
951
+ if (!this.ignoreNeedlesError) {
952
+ throw new Error(errorMessage);
953
+ }
954
+ this.log(errorMessage);
888
955
  }
889
956
  this.writeDestination(filePath, newContent);
890
957
  }
@@ -919,7 +986,9 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
919
986
  }
920
987
  return true;
921
988
  });
922
- return headerComments.join('\n').concat('\n', stringifyYaml(merge(parseYaml(content), value)));
989
+ const mergedContent = stringifyYaml(deepMerge(parseYaml(content), value));
990
+ const header = headerComments.length > 0 ? headerComments.join('\n').concat('\n') : '';
991
+ return `${header}${mergedContent}`;
923
992
  });
924
993
  }
925
994
  /**
@@ -1060,7 +1129,7 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
1060
1129
  getSharedApplication(applicationFolder = this.destinationPath()) {
1061
1130
  return this.options.sharedData.applications?.[this.calculateApplicationId(applicationFolder)];
1062
1131
  }
1063
- createSharedData({ jhipsterOldVersion, help, }) {
1132
+ createSharedData({ help }) {
1064
1133
  const applicationId = this.options.applicationId ?? this.calculateApplicationId(this.destinationPath());
1065
1134
  if (this.options.sharedData.applications === undefined) {
1066
1135
  this.options.sharedData.applications = {};
@@ -1070,6 +1139,6 @@ templates: ${JSON.stringify(existingTemplates, null, 2)}`;
1070
1139
  sharedApplications[applicationId] = {};
1071
1140
  }
1072
1141
  const { ignoreNeedlesError } = this.options;
1073
- return new SharedData(sharedApplications[applicationId], { jhipsterOldVersion, ignoreNeedlesError });
1142
+ return new SharedData(sharedApplications[applicationId], { destinationPath: this.destinationPath(), memFs: this.env.sharedFs, log: this.log, logCwd: this.env.logCwd }, { ignoreNeedlesError });
1074
1143
  }
1075
1144
  }
@@ -157,7 +157,7 @@ export default class BootstrapGenerator extends BaseGenerator {
157
157
  const prettierTransforms = [];
158
158
  if (!this.skipPrettier) {
159
159
  const ignoreErrors = this.options.ignoreErrors || this.upgradeCommand;
160
- prettierTransforms.push(createESLintTransform.call(this, { ignoreErrors, extensions: 'ts,js' }), createRemoveUnusedImportsTransform.call(this, { ignoreErrors }), await createPrettierTransform.call(this, {
160
+ prettierTransforms.push(createESLintTransform.call(this, { ignoreErrors, extensions: 'ts,js,cjs,mjs' }), createRemoveUnusedImportsTransform.call(this, { ignoreErrors }), await createPrettierTransform.call(this, {
161
161
  ignoreErrors,
162
162
  prettierPackageJson: true,
163
163
  prettierJava: !this.jhipsterConfig.skipServer,
@@ -1,8 +1,15 @@
1
- import ESLint from 'eslint';
2
- let eslint;
1
+ import eslint from 'eslint';
2
+ import { baseRules } from '../../../lib/eslint/base.js';
3
+ let eslintInstance;
4
+ /* Flat config based eslint
5
+ Blocked by https://github.com/import-js/eslint-plugin-import/issues/2556
6
+ import eslint from 'eslint/use-at-your-own-risk';
7
+ const { languageOptions, plugins: tseslintPlugins } = tseslint.configs.base;
8
+ new eslint.FlatESLint({ fix: true, overrideConfigFile: true, cwd, plugins, baseConfig: { languageOptions, rules } });
9
+ */
3
10
  export default async ({ resolvePluginsRelativeTo, filePath, fileContents }) => {
4
- if (!eslint) {
5
- eslint = new ESLint.ESLint({
11
+ if (!eslintInstance) {
12
+ eslintInstance = new eslint.ESLint({
6
13
  fix: true,
7
14
  // Disable destination configs. We should apply plugins and rules which jhipster depends on.
8
15
  useEslintrc: false,
@@ -14,20 +21,15 @@ export default async ({ resolvePluginsRelativeTo, filePath, fileContents }) => {
14
21
  sourceType: 'module',
15
22
  ecmaVersion: 'latest',
16
23
  },
17
- rules: {
18
- 'import/order': 'error',
19
- 'import/no-duplicates': 'error',
20
- 'unused-imports/no-unused-imports': 'error',
21
- 'unused-imports/no-unused-vars': ['warn', { vars: 'all', varsIgnorePattern: '^_', args: 'after-used', argsIgnorePattern: '^_' }],
22
- },
24
+ rules: baseRules,
23
25
  },
24
26
  });
25
27
  }
26
- if (await eslint.isPathIgnored(filePath)) {
28
+ if (await eslintInstance.isPathIgnored(filePath)) {
27
29
  return { result: fileContents };
28
30
  }
29
31
  try {
30
- const [result] = await eslint.lintText(fileContents, { filePath });
32
+ const [result] = await eslintInstance.lintText(fileContents, { filePath });
31
33
  return { result: result.output ?? fileContents };
32
34
  }
33
35
  catch (error) {
@@ -36,7 +36,12 @@ export default class TemplateFile {
36
36
  this._debug('======');
37
37
  this._debug(contents);
38
38
  }
39
- this._compiled = ejs.compile(contents, options);
39
+ try {
40
+ this._compiled = ejs.compile(contents, options);
41
+ }
42
+ catch (error) {
43
+ throw new Error(`Error compiling ${this._filename}, with contents:\n${contents}`, { cause: error });
44
+ }
40
45
  }
41
46
  addFragment(templateFile) {
42
47
  assert(templateFile, 'templateFile is required');
@@ -48,7 +48,7 @@ export default class BootstrapApplicationGenerator extends BaseApplicationGenera
48
48
  application.skipUserManagement = true;
49
49
  }
50
50
  applicationDefaults({
51
- useNpmWrapper: application => application.clientFrameworkAny && application.backendTypeSpringBoot,
51
+ useNpmWrapper: application => application.clientFrameworkAny && application.backendTypeJavaAny,
52
52
  documentationArchiveUrl: ({ jhipsterVersion }) => `${JHIPSTER_DOCUMENTATION_URL}${JHIPSTER_DOCUMENTATION_ARCHIVE_PATH}v${jhipsterVersion}`,
53
53
  });
54
54
  let prettierExtensions = 'md,json,yml,html';
@@ -140,15 +140,19 @@ export default class BootstrapApplicationBase extends BaseApplicationGenerator {
140
140
  backendTypeJavaAny: ({ backendTypeSpringBoot }) => backendTypeSpringBoot,
141
141
  });
142
142
  },
143
+ userRelationship({ applicationDefaults }) {
144
+ applicationDefaults({
145
+ __override__: false,
146
+ anyEntityHasRelationshipWithUser: this.getExistingEntities().some(entity => (entity.definition.relationships ?? []).some(relationship => relationship.otherEntityName.toLowerCase() === 'user')),
147
+ });
148
+ },
143
149
  syncUserWithIdp({ application, applicationDefaults }) {
144
150
  if (!application.backendTypeSpringBoot)
145
151
  return;
146
152
  if (application.syncUserWithIdp === undefined && application.authenticationType === 'oauth2') {
147
153
  applicationDefaults({
148
154
  __override__: false,
149
- syncUserWithIdp: data => data.databaseType !== 'no' &&
150
- (data.applicationType === 'gateway' ||
151
- this.getExistingEntities().some(entity => (entity.definition.relationships ?? []).some(relationship => relationship.otherEntityName.toLowerCase() === 'user'))),
155
+ syncUserWithIdp: data => data.databaseType !== 'no' && (data.applicationType === 'gateway' || data.anyEntityHasRelationshipWithUser),
152
156
  });
153
157
  }
154
158
  else if (application.syncUserWithIdp && application.authenticationType !== 'oauth2') {