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
@@ -16,39 +16,28 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import { Duplex } from 'stream';
20
- import PQueue from 'p-queue';
21
- import { isFilePending } from 'mem-fs-editor/state';
19
+ import { transform } from 'p-transform';
22
20
  import TemplateFileFs from './template-file-fs.mjs';
23
21
  // eslint-disable-next-line import/prefer-default-export
24
22
  export const createMultiStepTransform = () => {
25
- const twoStepTemplateQueue = new PQueue({ concurrency: 1, autoStart: false });
26
23
  const templateFileFs = new TemplateFileFs({});
27
- const pendingFiles = [];
28
- const duplex = Duplex.from(async function* (source) {
29
- for await (const file of source) {
30
- if (file.contents && templateFileFs.isTemplate(file.path)) {
31
- const templateFile = templateFileFs.add(file.path, file.contents.toString());
32
- if (templateFile.rootTemplate) {
33
- // If multi-step root, postpone.
34
- twoStepTemplateQueue.add(() => {
35
- if (pendingFiles.includes(templateFile.basePath)) {
36
- return;
37
- }
38
- file.path = templateFile.basePath;
39
- file.contents = Buffer.from(templateFile.render().concat('\n'));
40
- });
41
- }
42
- else {
43
- delete file.state;
44
- }
45
- }
46
- else if (isFilePending(file)) {
47
- pendingFiles.push(file.path);
48
- }
49
- yield file;
24
+ const templateFiles = [];
25
+ const duplex = transform((file) => {
26
+ if (!templateFileFs.isTemplate(file.path)) {
27
+ throw new Error(`File ${file.path} is not supported`);
28
+ }
29
+ const templateFile = templateFileFs.add(file);
30
+ if (templateFile.rootTemplate) {
31
+ templateFiles.push(templateFile);
32
+ }
33
+ return undefined;
34
+ }, async function () {
35
+ for (const templateFile of templateFiles) {
36
+ const file = templateFile.file;
37
+ file.path = templateFile.basePath;
38
+ file.contents = Buffer.from(templateFile.render().concat('\n'));
39
+ this.push(templateFile.file);
50
40
  }
51
- await twoStepTemplateQueue.start().onIdle();
52
41
  });
53
42
  duplex.templateFileFs = templateFileFs;
54
43
  return duplex;
@@ -21,6 +21,10 @@ import path from 'path';
21
21
  import { minimatch } from 'minimatch';
22
22
  import TemplateFile from './template-file.mjs';
23
23
  export default class TemplateFileFs {
24
+ fragmentFiles;
25
+ rootFiles = [];
26
+ extension;
27
+ delimiter;
24
28
  constructor(options = {}) {
25
29
  this.extension = options.extension || 'jhi';
26
30
  this.delimiter = options.delimiter || '&';
@@ -35,12 +39,14 @@ export default class TemplateFileFs {
35
39
  isDerivedTemplate(filePath) {
36
40
  return minimatch(filePath, `**/*.${this.extension}.*`, { dot: true });
37
41
  }
38
- add(filePath, contents) {
39
- assert(filePath, 'filePath is required');
40
- assert(contents, 'contents is required');
41
- const templateFile = this.get(filePath);
42
- templateFile.compile(filePath, contents, { delimiter: this.delimiter });
43
- if (!templateFile.rootTemplate) {
42
+ add(file) {
43
+ assert(file.contents, 'contents is required');
44
+ const templateFile = this.get(file.path);
45
+ templateFile.compile(file.path, file.contents.toString(), { delimiter: this.delimiter });
46
+ if (templateFile.rootTemplate) {
47
+ templateFile.file = file;
48
+ }
49
+ else {
44
50
  this.get(templateFile.parentPath).addFragment(templateFile);
45
51
  }
46
52
  return templateFile;
@@ -4,6 +4,7 @@ import debugBuilder from 'debug';
4
4
  import ejs from 'ejs';
5
5
  import TemplateData from './template-data.mjs';
6
6
  export default class TemplateFile {
7
+ file;
7
8
  constructor(filename, extension) {
8
9
  this._filename = filename;
9
10
  this._extension = extension;
@@ -17,7 +17,7 @@
17
17
  * limitations under the License.
18
18
  */
19
19
  import { passthrough } from 'p-transform';
20
- import { isFileStateDeleted } from 'mem-fs-editor/state';
20
+ import { isFileStateModified } from 'mem-fs-editor/state';
21
21
  import prettier from 'prettier';
22
22
  import prettierPluginJava from 'prettier-plugin-java';
23
23
  import prettierPluginProperties from 'prettier-plugin-properties';
@@ -34,7 +34,7 @@ export const createPrettierTransform = async function (options = {}) {
34
34
  const globExpression = extensions.includes(',') ? `**/*.{${extensions}}` : `**/*.${extensions}`;
35
35
  const minimatch = new Minimatch(globExpression, { dot: true });
36
36
  return passthrough(async (file) => {
37
- if (!minimatch.match(file.path) || isFileStateDeleted(file)) {
37
+ if (!minimatch.match(file.path) || !isFileStateModified(file)) {
38
38
  return;
39
39
  }
40
40
  if (!file.contents) {
@@ -22,8 +22,6 @@ import { validations } from '../../jdl/jhipster/index.mjs';
22
22
  import { stringifyApplicationData, derivedPrimaryKeyProperties, preparePostEntitiesCommonDerivedProperties, preparePostEntityCommonDerivedProperties, } from '../base-application/support/index.mjs';
23
23
  import { GENERATOR_BOOTSTRAP_APPLICATION, GENERATOR_BOOTSTRAP_APPLICATION_CLIENT, GENERATOR_BOOTSTRAP_APPLICATION_SERVER, } from '../generator-list.mjs';
24
24
  import { preparePostEntityServerDerivedProperties } from '../server/support/index.mjs';
25
- import { getDefaultAppName } from '../project-name/support/index.mjs';
26
- import { packageJson } from '../../lib/index.mjs';
27
25
  import { loadStoredAppOptions } from '../app/support/index.mjs';
28
26
  import { JHIPSTER_DOCUMENTATION_ARCHIVE_PATH, JHIPSTER_DOCUMENTATION_URL } from '../generator-constants.mjs';
29
27
  const { Validations: { MAX, MIN, MAXLENGTH, MINLENGTH, MAXBYTES, MINBYTES, PATTERN }, SUPPORTED_VALIDATION_RULES, } = validations;
@@ -44,22 +42,6 @@ export default class BootstrapApplicationGenerator extends BaseApplicationGenera
44
42
  await this.dependsOnJHipster(GENERATOR_BOOTSTRAP_APPLICATION_CLIENT);
45
43
  await this.dependsOnJHipster(GENERATOR_BOOTSTRAP_APPLICATION_SERVER);
46
44
  }
47
- get configuring() {
48
- return this.asConfiguringTaskGroup({
49
- defaults() {
50
- if (!this.options.reproducible) {
51
- this.config.defaults({
52
- jhipsterVersion: packageJson.version,
53
- baseName: getDefaultAppName(this),
54
- creationTimestamp: new Date().getTime(),
55
- });
56
- }
57
- },
58
- });
59
- }
60
- get [BaseApplicationGenerator.CONFIGURING]() {
61
- return this.configuring;
62
- }
63
45
  get preparing() {
64
46
  return this.asPreparingTaskGroup({
65
47
  preparing({ application, applicationDefaults }) {
@@ -76,9 +58,6 @@ export default class BootstrapApplicationGenerator extends BaseApplicationGenera
76
58
  if (application.clientFrameworkVue) {
77
59
  prettierExtensions = `${prettierExtensions},vue`;
78
60
  }
79
- if (application.clientFrameworkSvelte) {
80
- prettierExtensions = `${prettierExtensions},svelte`;
81
- }
82
61
  }
83
62
  if (!application.skipServer) {
84
63
  prettierExtensions = `${prettierExtensions},java`;
@@ -149,6 +128,16 @@ export default class BootstrapApplicationGenerator extends BaseApplicationGenera
149
128
  postPreparingEntities({ entities }) {
150
129
  preparePostEntitiesCommonDerivedProperties(entities);
151
130
  },
131
+ checkProperties({ entities }) {
132
+ for (const entity of entities) {
133
+ const properties = [...entity.fields.map(entity => entity.propertyName), ...entity.relationships.map(rel => rel.propertyName)];
134
+ if (new Set(properties).size !== properties.length) {
135
+ // Has duplicated properties.
136
+ const duplicated = [...new Set(properties.filter((v, i, a) => a.indexOf(v) !== i))];
137
+ throw new Error(`You have duplicate properties in entity ${entity.name}: ${duplicated.join(', ')}`);
138
+ }
139
+ }
140
+ },
152
141
  });
153
142
  }
154
143
  get [BaseApplicationGenerator.DEFAULT]() {
@@ -0,0 +1,30 @@
1
+ import { parseCreationTimestamp } from '../base/support/timestamp.mjs';
2
+ const command = {
3
+ options: {
4
+ baseName: {
5
+ description: 'Application base name',
6
+ type: String,
7
+ scope: 'storage',
8
+ },
9
+ skipJhipsterDependencies: {
10
+ description: "Don't write jhipster dependencies to package.json.",
11
+ type: Boolean,
12
+ scope: 'storage',
13
+ },
14
+ creationTimestamp: {
15
+ description: 'Project creation timestamp (used for reproducible builds)',
16
+ type: parseCreationTimestamp,
17
+ scope: 'storage',
18
+ },
19
+ },
20
+ configs: {
21
+ jdlStore: {
22
+ description: 'JDL store',
23
+ cli: {
24
+ type: String,
25
+ },
26
+ scope: 'storage',
27
+ },
28
+ },
29
+ };
30
+ export default command;
@@ -21,6 +21,7 @@ import os from 'os';
21
21
  import * as _ from 'lodash-es';
22
22
  import chalk from 'chalk';
23
23
  import { passthrough } from '@yeoman/transform';
24
+ import { isFileStateModified } from 'mem-fs-editor/state';
24
25
  import BaseApplicationGenerator from '../base-application/index.mjs';
25
26
  import { addFakerToEntity, loadEntitiesAnnotations, loadEntitiesOtherSide, stringifyApplicationData, prepareEntity as prepareEntityForTemplates, prepareField as prepareFieldForTemplates, prepareRelationship, } from '../base-application/support/index.mjs';
26
27
  import { createUserEntity } from './utils.mjs';
@@ -29,6 +30,8 @@ import { GENERATOR_BOOTSTRAP, GENERATOR_BOOTSTRAP_APPLICATION_BASE, GENERATOR_CO
29
30
  import { packageJson } from '../../lib/index.mjs';
30
31
  import { loadLanguagesConfig } from '../languages/support/index.mjs';
31
32
  import { loadAppConfig, loadDerivedAppConfig, loadStoredAppOptions } from '../app/support/index.mjs';
33
+ import { exportJDLTransform, importJDLTransform } from './support/index.mjs';
34
+ import command from './command.mjs';
32
35
  const isWin32 = os.platform() === 'win32';
33
36
  const { lowerFirst } = _;
34
37
  export default class BootstrapApplicationBase extends BaseApplicationGenerator {
@@ -45,7 +48,8 @@ export default class BootstrapApplicationBase extends BaseApplicationGenerator {
45
48
  if (this.delegateToBlueprint) {
46
49
  throw new Error('Only sbs blueprint is supported');
47
50
  }
48
- await this.dependsOnJHipster(GENERATOR_PROJECT_NAME);
51
+ const projectNameGenerator = (await this.dependsOnJHipster(GENERATOR_PROJECT_NAME));
52
+ projectNameGenerator.javaApplication = true;
49
53
  await this.composeWithJHipster(GENERATOR_BOOTSTRAP);
50
54
  }
51
55
  get initializing() {
@@ -53,6 +57,19 @@ export default class BootstrapApplicationBase extends BaseApplicationGenerator {
53
57
  displayLogo() {
54
58
  this.printDestinationInfo();
55
59
  },
60
+ parseOptions() {
61
+ this.parseJHipsterCommand(command);
62
+ },
63
+ async jdlStore() {
64
+ if (this.jhipsterConfig.jdlStore) {
65
+ this.logger.warn('Storing configuration inside a JDL file is experimental');
66
+ this.logger.info(`Using JDL store ${this.jhipsterConfig.jdlStore}`);
67
+ const destinationPath = this.destinationPath();
68
+ const jdlStorePath = this.destinationPath(this.jhipsterConfig.jdlStore);
69
+ this.features.commitTransformFactory = () => exportJDLTransform({ destinationPath, jdlStorePath });
70
+ await this.pipeline({ refresh: true, pendingFiles: false }, importJDLTransform({ destinationPath, jdlStorePath }));
71
+ }
72
+ },
56
73
  });
57
74
  }
58
75
  get [BaseApplicationGenerator.INITIALIZING]() {
@@ -112,9 +129,14 @@ export default class BootstrapApplicationBase extends BaseApplicationGenerator {
112
129
  get configuringEachEntity() {
113
130
  return this.asConfiguringEachEntityTaskGroup({
114
131
  configureEntity({ entityStorage, entityConfig }) {
115
- entityStorage.defaults({ fields: [], relationships: [] });
116
- if (entityConfig.changelogDate === undefined) {
117
- entityConfig.changelogDate = this.dateFormatForLiquibase();
132
+ entityStorage.defaults({ fields: [], relationships: [], annotations: {} });
133
+ if (entityConfig.changelogDate) {
134
+ entityConfig.annotations.changelogDate = entityConfig.changelogDate;
135
+ delete entityConfig.changelogDate;
136
+ }
137
+ if (!entityConfig.annotations.changelogDate) {
138
+ entityConfig.annotations.changelogDate = this.dateFormatForLiquibase();
139
+ entityStorage.save();
118
140
  }
119
141
  },
120
142
  configureRelationships({ entityName, entityStorage, entityConfig }) {
@@ -171,8 +193,9 @@ export default class BootstrapApplicationBase extends BaseApplicationGenerator {
171
193
  }
172
194
  }
173
195
  else {
174
- const entity = entityStorage.getAll();
196
+ let entity = entityStorage.getAll();
175
197
  entity.name = entity.name ?? entityName;
198
+ entity = { ...entity, ...entity.annotations };
176
199
  this.sharedData.setEntity(entityName, entity);
177
200
  }
178
201
  }
@@ -243,18 +266,20 @@ export default class BootstrapApplicationBase extends BaseApplicationGenerator {
243
266
  }
244
267
  }
245
268
  };
246
- this.queueTransformStream(passthrough(file => {
247
- if (file.contents && isPackageJson(file)) {
269
+ this.queueTransformStream({
270
+ name: 'updating package.json dependencies versions',
271
+ filter: file => isFileStateModified(file) && file.path.startsWith(this.destinationPath()) && isPackageJson(file),
272
+ refresh: false,
273
+ }, passthrough(file => {
274
+ const contents = file.contents.toString();
275
+ if (contents.includes('null')) {
248
276
  const content = JSON.parse(file.contents.toString());
249
277
  populateNullValues(content.dependencies);
250
278
  populateNullValues(content.devDependencies);
251
279
  populateNullValues(content.peerDependencies);
252
280
  file.contents = Buffer.from(`${JSON.stringify(content, null, 2)}\n`);
253
281
  }
254
- }), {
255
- name: 'updating package.json dependency versions',
256
- streamOptions: { filter: isPackageJson },
257
- });
282
+ }));
258
283
  },
259
284
  });
260
285
  }
@@ -17,3 +17,4 @@
17
17
  * limitations under the License.
18
18
  */
19
19
  export { default } from './generator.mjs';
20
+ export { default as command } from './command.mjs';
@@ -0,0 +1,61 @@
1
+ import { basename, join } from 'path';
2
+ import { Duplex } from 'stream';
3
+ import { loadFile } from 'mem-fs';
4
+ import { Minimatch } from 'minimatch';
5
+ import { setModifiedFileState } from 'mem-fs-editor/state';
6
+ import { GENERATOR_JHIPSTER } from '../../generator-constants.mjs';
7
+ import { getJDLObjectFromSingleApplication } from '../../../jdl/converters/json-to-jdl-converter.js';
8
+ export const exportJDLTransform = ({ destinationPath, jdlStorePath, throwOnMissingConfig = true, keepEntitiesConfig, }) => Duplex.from(async function* (files) {
9
+ const yoRcFilePath = join(destinationPath, '.yo-rc.json');
10
+ const entitiesMatcher = new Minimatch(`${destinationPath}/.jhipster/*.json`);
11
+ const entitiesFiles = [];
12
+ const entitiesMap = new Map();
13
+ let yoRcFileInMemory;
14
+ let jdlStoreFileInMemory;
15
+ for await (const file of files) {
16
+ if (file.path === yoRcFilePath) {
17
+ yoRcFileInMemory = file;
18
+ }
19
+ else if (file.path === jdlStorePath) {
20
+ jdlStoreFileInMemory = file;
21
+ }
22
+ else if (file.contents && entitiesMatcher.match(file.path)) {
23
+ entitiesMap.set(basename(file.path).replace('.json', ''), JSON.parse(file.contents.toString()));
24
+ entitiesFiles.push(file);
25
+ }
26
+ else {
27
+ yield file;
28
+ }
29
+ }
30
+ const yoRcFile = loadFile(yoRcFilePath);
31
+ const yoRcContents = yoRcFileInMemory?.contents ?? yoRcFile.contents;
32
+ if (yoRcContents) {
33
+ const contents = JSON.parse(yoRcContents.toString());
34
+ if (contents[GENERATOR_JHIPSTER]?.jdlStore) {
35
+ const { jdlStore, jwtSecretKey, rememberMeKey, jhipsterVersion, creationTimestamp, incrementalChangelog, ...rest } = contents[GENERATOR_JHIPSTER];
36
+ const jdlObject = getJDLObjectFromSingleApplication({ ...contents, [GENERATOR_JHIPSTER]: { ...rest, incrementalChangelog } }, entitiesMap);
37
+ const jdlContents = jdlObject.toString();
38
+ const jdlStoreFile = jdlStoreFileInMemory ?? loadFile(jdlStorePath);
39
+ jdlStoreFile.contents = Buffer.from(jdlContents);
40
+ setModifiedFileState(jdlStoreFile);
41
+ jdlStoreFile.conflicter = 'force';
42
+ yield jdlStoreFile;
43
+ yoRcFile.contents = Buffer.from(JSON.stringify({ [GENERATOR_JHIPSTER]: { jdlStore, jwtSecretKey, rememberMeKey, jhipsterVersion, creationTimestamp } }, null, 2));
44
+ setModifiedFileState(yoRcFile);
45
+ yoRcFile.conflicter = 'force';
46
+ yield yoRcFile;
47
+ // Incremental changelog requires entities files to be kept for incremental change at next run
48
+ if (keepEntitiesConfig || incrementalChangelog) {
49
+ for (const file of entitiesFiles) {
50
+ yield file;
51
+ }
52
+ }
53
+ }
54
+ else if (throwOnMissingConfig) {
55
+ throw new Error(`File ${yoRcFilePath} is not a valid JHipster configuration file`);
56
+ }
57
+ }
58
+ else if (throwOnMissingConfig) {
59
+ throw new Error(`File ${yoRcFilePath} has no contents`);
60
+ }
61
+ });
@@ -0,0 +1,64 @@
1
+ import { Duplex } from 'stream';
2
+ import { join } from 'path';
3
+ import { loadFile } from 'mem-fs';
4
+ import { Minimatch } from 'minimatch';
5
+ import { upperFirst } from 'lodash-es';
6
+ import { GENERATOR_JHIPSTER } from '../../generator-constants.mjs';
7
+ import { createImporterFromContent } from '../../../jdl/jdl-importer.js';
8
+ import { mergeYoRcContent } from '../../../jdl/index.js';
9
+ export const importJDLTransform = ({ destinationPath, jdlStorePath }) => Duplex.from(async function* (files) {
10
+ const yoRcFilePath = join(destinationPath, '.yo-rc.json');
11
+ const entitiesFolder = join(destinationPath, '.jhipster');
12
+ const entitiesMatcher = new Minimatch(`${entitiesFolder}/*.json`);
13
+ const entityFields = [];
14
+ let jdlStoreFileInMemory;
15
+ let yoRcFileInMemory;
16
+ for await (const file of files) {
17
+ if (file.path === jdlStorePath) {
18
+ jdlStoreFileInMemory = file;
19
+ yield jdlStoreFileInMemory;
20
+ }
21
+ else if (file.path === yoRcFilePath) {
22
+ yoRcFileInMemory = file;
23
+ }
24
+ else if (entitiesMatcher.match(file.path)) {
25
+ entityFields.push(file);
26
+ }
27
+ else {
28
+ yield file;
29
+ }
30
+ }
31
+ const jdlStoreContents = jdlStoreFileInMemory?.contents ?? loadFile(jdlStorePath).contents;
32
+ if (!jdlStoreContents) {
33
+ if (yoRcFileInMemory) {
34
+ yield yoRcFileInMemory;
35
+ }
36
+ for (const file of entityFields) {
37
+ yield file;
38
+ }
39
+ return;
40
+ }
41
+ if (entityFields.length > 0) {
42
+ throw new Error('Entities configuration files are not supported by jdlStore');
43
+ }
44
+ const importer = createImporterFromContent(jdlStoreContents.toString());
45
+ const importState = importer.import();
46
+ const applicationWithEntities = Object.values(importState.exportedApplicationsWithEntities);
47
+ if (applicationWithEntities.length !== 1) {
48
+ throw new Error(`JDL stores supports only jdls with 1 application, found ${applicationWithEntities.length}`);
49
+ }
50
+ const { config, namespaceConfigs, entities } = applicationWithEntities[0];
51
+ const yoRcFile = loadFile(yoRcFilePath);
52
+ const yoRcContents = yoRcFileInMemory?.contents ?? yoRcFile.contents;
53
+ yoRcFile.contents = Buffer.from(JSON.stringify(mergeYoRcContent(yoRcContents ? JSON.parse(yoRcContents.toString()) : {}, {
54
+ ...namespaceConfigs,
55
+ [GENERATOR_JHIPSTER]: config,
56
+ }), null, 2));
57
+ yield yoRcFile;
58
+ for (const entity of entities) {
59
+ const configFile = join(entitiesFolder, `${upperFirst(entity.name)}.json`);
60
+ const file = loadFile(configFile);
61
+ file.contents = Buffer.from(JSON.stringify(entity, null, 2));
62
+ yield file;
63
+ }
64
+ });
@@ -0,0 +1,2 @@
1
+ export * from './export-jdl-transform.mjs';
2
+ export * from './import-jdl-transform.mjs';
@@ -122,10 +122,10 @@ export default class BoostrapApplicationServer extends BaseApplicationGenerator
122
122
  prepareEntity({ entity }) {
123
123
  prepareEntityServerForTemplates(entity);
124
124
  },
125
- preparePrimaryKey({ entity }) {
125
+ preparePrimaryKey({ entity, application }) {
126
126
  // If primaryKey doesn't exist, create it.
127
127
  if (!entity.embedded && !entity.primaryKey) {
128
- prepareEntityPrimaryKeyForTemplates(entity, this);
128
+ prepareEntityPrimaryKeyForTemplates.call(this, { entity, application });
129
129
  }
130
130
  },
131
131
  });
@@ -20,6 +20,7 @@ import chalk from 'chalk';
20
20
  import * as _ from 'lodash-es';
21
21
  import { testFrameworkTypes } from '../../jdl/jhipster/index.mjs';
22
22
  import { APPLICATION_TYPE_GATEWAY, APPLICATION_TYPE_MICROSERVICE, clientFrameworkTypes } from '../../jdl/index.js';
23
+ import { GENERATOR_COMMON } from '../generator-list.mjs';
23
24
  const { CYPRESS } = testFrameworkTypes;
24
25
  const { intersection } = _;
25
26
  const { ANGULAR, REACT, VUE, NO: CLIENT_FRAMEWORK_NO } = clientFrameworkTypes;
@@ -116,5 +117,6 @@ const command = {
116
117
  },
117
118
  },
118
119
  },
120
+ import: [GENERATOR_COMMON],
119
121
  };
120
122
  export default command;
@@ -3,14 +3,14 @@
3
3
  "dayjs": "1.11.10"
4
4
  },
5
5
  "devDependencies": {
6
- "@cypress/code-coverage": "3.12.3",
6
+ "@cypress/code-coverage": "3.12.13",
7
7
  "babel-loader": "9.1.3",
8
8
  "babel-plugin-istanbul": "6.1.1",
9
- "cypress": "13.3.1",
9
+ "cypress": "13.6.1",
10
10
  "cypress-audit": "1.1.0",
11
11
  "eslint-plugin-cypress": "2.15.1",
12
- "lighthouse": "11.2.0",
12
+ "lighthouse": "11.3.0",
13
13
  "nyc": "15.1.0",
14
- "swagger-ui-dist": "5.9.0"
14
+ "swagger-ui-dist": "5.10.3"
15
15
  }
16
16
  }
@@ -34,14 +34,14 @@ const { ANGULAR, VUE } = clientFrameworkTypes;
34
34
  * @param {string} dto - dto
35
35
  * @param [customDateType]
36
36
  * @param {boolean} embedded - either the actual entity is embedded or not
37
- * @param { string} clientFramwork
37
+ * @param { string} clientFramework
38
38
  * @returns variablesWithTypes: Array
39
39
  */
40
- const generateEntityClientFields = (primaryKey, fields, relationships, dto, customDateType = 'dayjs.Dayjs', embedded = false, clientFramwork = ANGULAR) => {
40
+ const generateEntityClientFields = (primaryKey, fields, relationships, dto, customDateType = 'dayjs.Dayjs', embedded = false, clientFramework = ANGULAR) => {
41
41
  const variablesWithTypes = [];
42
42
  if (!embedded && primaryKey) {
43
43
  const tsKeyType = getTypescriptKeyType(primaryKey);
44
- if (clientFramwork === VUE) {
44
+ if (clientFramework === VUE) {
45
45
  variablesWithTypes.push(`id?: ${tsKeyType}`);
46
46
  }
47
47
  }
@@ -109,7 +109,7 @@ The service worker initialization code is commented out by default. To enable it
109
109
  Note: [Workbox](https://developers.google.com/web/tools/workbox/) powers JHipster's service worker. It dynamically generates the `service-worker.js` file.
110
110
  <%_ } _%>
111
111
  <%_ if (clientFrameworkAngular) { _%>
112
- The service worker initialization code is disabled by default. To enable it, uncomment the following code in `<%= clientSrcDir %>app/app.module.ts`:
112
+ The service worker initialization code is disabled by default. To enable it, uncomment the following code in `<%= clientSrcDir %>app/app.config.ts`:
113
113
 
114
114
  ```typescript
115
115
  ServiceWorkerModule.register('ngsw-worker.js', { enabled: false }),
@@ -132,7 +132,7 @@ To benefit from TypeScript type definitions from [DefinitelyTyped][] repository
132
132
 
133
133
  Then you would import the JS and CSS files specified in library's installation instructions so that [Webpack][] knows about them:
134
134
  <%_ if (clientFrameworkAngular) { _%>
135
- Edit [<%= clientSrcDir %>app/app.module.ts](<%= clientSrcDir %>app/app.module.ts) file:
135
+ Edit [<%= clientSrcDir %>app/app.config.ts](<%= clientSrcDir %>app/app.config.ts) file:
136
136
 
137
137
  ```
138
138
  import 'leaflet/dist/leaflet.js';
@@ -151,7 +151,7 @@
151
151
  left: -8px;
152
152
  width: 24px;
153
153
  height: 10px;
154
- background-image: url('../images/logo-jhipster.png');
154
+ background-image: url('/content/images/logo-jhipster.png');
155
155
  background-size: contain;
156
156
  -webkit-animation: lds-pacman-3 1s linear infinite;
157
157
  animation: lds-pacman-3 1.5s linear infinite;
@@ -43,7 +43,7 @@
43
43
  </p>
44
44
  <![endif]-->
45
45
  <%_ if (clientFrameworkAngular) { _%>
46
- <<%= jhiPrefixDashed %>-main>
46
+ <<%= jhiPrefixDashed %>-app>
47
47
  <%_ } else { _%>
48
48
  <div id="<% if (clientFrameworkReact) { %>root<% } else { %>app<% } %>">
49
49
  <%_ } _%>
@@ -95,7 +95,7 @@
95
95
  </div>
96
96
  </div>
97
97
  <%_ if (clientFrameworkAngular) { _%>
98
- </<%= jhiPrefixDashed %>-main>
98
+ </<%= jhiPrefixDashed %>-app>
99
99
  <%_ } else { _%>
100
100
  </div>
101
101
  <%_ } _%>
@@ -20,6 +20,7 @@
20
20
  // Register sections and max allowed fragments, 0 for unlimited.
21
21
  fragments.registerSections({
22
22
  importsSection:0,
23
+ configSection: 0,
23
24
  moduleFederationSection: 0,
24
25
  pluginsSection: 0,
25
26
  });
@@ -28,7 +29,18 @@ _&>
28
29
  const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin');
29
30
  <&- fragments.importsSection() &>
30
31
  const packageJson = require('../package.json');
31
- const appVersion = packageJson.version;
32
+ // Microfrontend api, should match across gateway and microservices.
33
+ const apiVersion = '0.0.1';
34
+
35
+ const sharedDefaults = { singleton: true, strictVersion: true, requiredVersion: apiVersion };
36
+ const shareMappings = (...mappings) => Object.fromEntries(mappings.map(map => [map, { ...sharedDefaults, version: apiVersion }]));
37
+
38
+ const shareDependencies = ({ skipList = [] } = {}) =>
39
+ Object.fromEntries(
40
+ Object.entries(packageJson.dependencies)
41
+ .filter(([dependency]) => !skipList.includes(dependency))
42
+ .map(([dependency, version]) => [dependency, { ...sharedDefaults, version, requiredVersion: version }]),
43
+ );
32
44
 
33
45
  module.exports = ({ serve }) => {
34
46
  return {
@@ -37,6 +49,7 @@ module.exports = ({ serve }) => {
37
49
  chunkIds: 'named',
38
50
  runtimeChunk: false,
39
51
  },
52
+ <&- fragments.configSection() &>
40
53
  plugins: [
41
54
  new ModuleFederationPlugin({
42
55
  <%_ if (applicationTypeMicroservice) { _%>
@@ -1,3 +1,4 @@
1
+ import { GENERATOR_BOOTSTRAP_APPLICATION_BASE } from '../generator-list.mjs';
1
2
  const command = {
2
3
  options: {
3
4
  prettierTabWidth: {
@@ -11,5 +12,6 @@ const command = {
11
12
  scope: 'storage',
12
13
  },
13
14
  },
15
+ import: [GENERATOR_BOOTSTRAP_APPLICATION_BASE],
14
16
  };
15
17
  export default command;
@@ -41,7 +41,7 @@ export const commonFiles = {
41
41
  commitHooks: [
42
42
  {
43
43
  condition: generator => !generator.skipCommitHook,
44
- templates: ['.lintstagedrc.js', '.husky/pre-commit'],
44
+ templates: ['.lintstagedrc.cjs', '.husky/pre-commit'],
45
45
  },
46
46
  ],
47
47
  };