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
@@ -22,6 +22,7 @@ import { upperFirst } from '../utils/string-utils.js';
22
22
  * The JSONEntity class represents a read-to-be exported to JSON entity.
23
23
  */
24
24
  class JSONEntity {
25
+ annotations;
25
26
  /**
26
27
  * Creates a new JSONEntity instance.
27
28
  * @param args the entity configuration, keys:
@@ -46,6 +47,7 @@ class JSONEntity {
46
47
  const merged = merge(getDefaults(args.entityName), args);
47
48
  this.name = merged.name;
48
49
  this.fields = merged.fields;
50
+ this.annotations = merged.annotations;
49
51
  this.relationships = merged.relationships;
50
52
  this.documentation = merged.documentation;
51
53
  this.entityTableName = merged.entityTableName;
@@ -100,6 +102,9 @@ class JSONEntity {
100
102
  this[optionName] = options[optionName];
101
103
  });
102
104
  }
105
+ setAnnotations(annotations = {}) {
106
+ Object.assign(this.annotations, annotations);
107
+ }
103
108
  }
104
109
  export default JSONEntity;
105
110
  function getDefaults(entityName) {
@@ -108,5 +113,6 @@ function getDefaults(entityName) {
108
113
  fields: [],
109
114
  relationships: [],
110
115
  applications: [],
116
+ annotations: {},
111
117
  };
112
118
  }
@@ -32,12 +32,44 @@ export default function createApplicationConfigurationFromObject(configurationOb
32
32
  logger.debug(`Unrecognized application option name and value: '${optionName}' and '${optionValue}'.`);
33
33
  return;
34
34
  }
35
- configuration.setOption(createJDLConfigurationOption(optionName, optionValue));
35
+ configuration.setOption(createApplicationJDLConfigurationOption(optionName, optionValue));
36
36
  });
37
37
  return configuration;
38
38
  }
39
- function createJDLConfigurationOption(name, value) {
39
+ export function createApplicationNamespaceConfigurationFromObject(parsedNamespaceConfigs = {}) {
40
+ return Object.entries(parsedNamespaceConfigs).map(([namespace, parsedConfig]) => {
41
+ const configuration = new JDLApplicationConfiguration(namespace);
42
+ for (const [optionName, optionValue] of Object.entries(parsedConfig)) {
43
+ configuration.setOption(createUnknownJDLConfigurationOption(optionName, optionValue));
44
+ }
45
+ return configuration;
46
+ });
47
+ }
48
+ function createUnknownJDLConfigurationOption(name, value) {
49
+ let type;
50
+ if (typeof value === 'boolean') {
51
+ type = 'boolean';
52
+ }
53
+ else if (/^\d+$/.test(value)) {
54
+ value = parseInt(value, 10);
55
+ type = 'integer';
56
+ }
57
+ else if (Array.isArray(value)) {
58
+ type = 'list';
59
+ }
60
+ else if (typeof value === 'string') {
61
+ type = 'string';
62
+ }
63
+ else {
64
+ throw new Error(`Unknown value type for option ${name}`);
65
+ }
66
+ return createJDLConfigurationOption(type, name, value);
67
+ }
68
+ function createApplicationJDLConfigurationOption(name, value) {
40
69
  const type = applicationDefinition.getTypeForOption(name);
70
+ return createJDLConfigurationOption(type, name, value);
71
+ }
72
+ function createJDLConfigurationOption(type, name, value) {
41
73
  switch (type) {
42
74
  case 'string':
43
75
  return new StringJDLApplicationConfigurationOption(name, value, applicationDefinition.shouldTheValueBeQuoted(name));
@@ -20,8 +20,10 @@ import ApplicationOptions from '../jhipster/application-options.js';
20
20
  const { OptionNames } = ApplicationOptions;
21
21
  export default class JDLApplicationConfiguration {
22
22
  options;
23
- constructor() {
23
+ namespace;
24
+ constructor(namespace) {
24
25
  this.options = {};
26
+ this.namespace = namespace;
25
27
  }
26
28
  hasOption(optionName) {
27
29
  if (!optionName) {
@@ -54,12 +56,13 @@ export default class JDLApplicationConfiguration {
54
56
  }
55
57
  toString(indent = 0) {
56
58
  const spaceBeforeConfigKeyword = ' '.repeat(indent);
59
+ const namespace = this.namespace ? `:${this.namespace}` : '';
57
60
  if (Object.keys(this.options).length === 0) {
58
- return `${spaceBeforeConfigKeyword}config {}`;
61
+ return `${spaceBeforeConfigKeyword}config${namespace} {}`;
59
62
  }
60
63
  const spaceBeforeOption = ' '.repeat(2 * indent);
61
64
  const config = getFormattedConfigOptionsString(this.options, spaceBeforeOption);
62
- return `${spaceBeforeConfigKeyword}config {
65
+ return `${spaceBeforeConfigKeyword}config${namespace} {
63
66
  ${config}
64
67
  ${spaceBeforeConfigKeyword}}`;
65
68
  }
@@ -22,6 +22,6 @@ import JDLApplication from './jdl-application.js';
22
22
  * @param {Object} config - the application configuration.
23
23
  * @returns {JDLApplication} the created JDL application.
24
24
  */
25
- export default function createJDLApplication(config = {}) {
26
- return new JDLApplication({ config: { baseName: 'jhipster', ...config } });
25
+ export default function createJDLApplication(config, namespaceConfigs) {
26
+ return new JDLApplication({ config: { baseName: 'jhipster', ...config }, namespaceConfigs });
27
27
  }
@@ -16,15 +16,17 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import createApplicationConfigurationFromObject from './jdl-application-configuration-factory.js';
19
+ import createApplicationConfigurationFromObject, { createApplicationNamespaceConfigurationFromObject, } from './jdl-application-configuration-factory.js';
20
20
  import JDLApplicationEntities from './jdl-application-entities.js';
21
21
  import JDLOptions from './jdl-options.js';
22
22
  export default class JDLApplication {
23
23
  config;
24
+ namespaceConfigs;
24
25
  entityNames;
25
26
  options;
26
- constructor({ config = {}, entityNames = [] } = {}) {
27
+ constructor({ config = {}, entityNames = [], namespaceConfigs = {} } = {}) {
27
28
  this.config = createApplicationConfigurationFromObject(config);
29
+ this.namespaceConfigs = createApplicationNamespaceConfigurationFromObject(namespaceConfigs);
28
30
  this.entityNames = new JDLApplicationEntities(entityNames);
29
31
  this.options = new JDLOptions();
30
32
  }
@@ -50,6 +52,11 @@ export default class JDLApplication {
50
52
  forEachConfigurationOption(passedFunction) {
51
53
  this.config.forEachOption(passedFunction);
52
54
  }
55
+ forEachNamespaceConfiguration(passedFunction) {
56
+ for (const namespaceConfig of this.namespaceConfigs) {
57
+ passedFunction(namespaceConfig);
58
+ }
59
+ }
53
60
  addEntityName(entityName) {
54
61
  if (!entityName) {
55
62
  throw new Error('An entity name has to be passed so as to be added to the application.');
@@ -87,7 +94,9 @@ export default class JDLApplication {
87
94
  return this.options.size();
88
95
  }
89
96
  toString() {
90
- let stringifiedApplication = `application {\n${this.config.toString(2)}\n`;
97
+ let stringifiedApplication = `application {
98
+ ${this.config.toString(2)}
99
+ ${this.namespaceConfigs.map(config => `${config.toString(2)}\n`).join()}`;
91
100
  if (this.entityNames.size() !== 0) {
92
101
  stringifiedApplication += `\n${this.entityNames.toString(2)}\n`;
93
102
  }
@@ -16,6 +16,7 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
+ import { upperFirst } from 'lodash-es';
19
20
  import { merge } from '../utils/object-utils.js';
20
21
  import getTableNameFromEntityName from '../jhipster/entity-table-name-creator.js';
21
22
  export default class JDLEntity {
@@ -23,6 +24,7 @@ export default class JDLEntity {
23
24
  tableName;
24
25
  fields;
25
26
  comment;
27
+ annotations;
26
28
  constructor(args) {
27
29
  const merged = merge(defaults(), args);
28
30
  if (!merged.name) {
@@ -32,6 +34,7 @@ export default class JDLEntity {
32
34
  this.tableName = merged.tableName || merged.name;
33
35
  this.fields = merged.fields;
34
36
  this.comment = merged.comment;
37
+ this.annotations = merged.annotations ?? {};
35
38
  }
36
39
  /**
37
40
  * Adds the fields to the entity.
@@ -60,6 +63,18 @@ export default class JDLEntity {
60
63
  .map(line => ` * ${line}\n`)
61
64
  .join('')} */\n`;
62
65
  }
66
+ Object.entries(this.annotations).forEach(([key, value]) => {
67
+ key = upperFirst(key);
68
+ if (value === true) {
69
+ stringifiedEntity += `@${key}\n`;
70
+ }
71
+ else if (typeof value === 'string') {
72
+ stringifiedEntity += `@${key}("${value}")\n`;
73
+ }
74
+ else {
75
+ stringifiedEntity += `@${key}(${value})\n`;
76
+ }
77
+ });
63
78
  stringifiedEntity += `entity ${this.name}`;
64
79
  if (this.tableName && getTableNameFromEntityName(this.name) !== getTableNameFromEntityName(this.tableName)) {
65
80
  stringifiedEntity += ` (${this.tableName})`;
@@ -73,7 +88,7 @@ export default class JDLEntity {
73
88
  function defaults() {
74
89
  return {
75
90
  fields: {},
76
- options: [],
91
+ annotations: {},
77
92
  };
78
93
  }
79
94
  function formatFieldObjects(jdlFieldObjects) {
@@ -16,6 +16,7 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
+ import { upperFirst } from 'lodash-es';
19
20
  import { merge } from '../utils/object-utils.js';
20
21
  export default class JDLField {
21
22
  name;
@@ -66,6 +67,18 @@ export default class JDLField {
66
67
  .map(line => ` * ${line}\n`)
67
68
  .join('')} */\n`;
68
69
  }
70
+ Object.entries(this.options ?? {}).forEach(([key, value]) => {
71
+ key = upperFirst(key);
72
+ if (value === true) {
73
+ string += `@${key}\n`;
74
+ }
75
+ else if (typeof value === 'string') {
76
+ string += `@${key}("${value}")\n`;
77
+ }
78
+ else {
79
+ string += `@${key}(${value})\n`;
80
+ }
81
+ });
69
82
  string += `${this.name} ${this.type}`;
70
83
  Object.keys(this.validations).forEach(validationName => {
71
84
  string += ` ${this.validations[validationName].toString()}`;
@@ -229,10 +229,10 @@ export default class JDLObject {
229
229
  string += `${this.enums.toString()}\n`;
230
230
  }
231
231
  if (this.getRelationshipQuantity() !== 0) {
232
- string += `${relationshipsToString(this.relationships)}\n`;
232
+ string += `${relationshipsToString(this.relationships)}`;
233
233
  }
234
234
  if (this.getOptionQuantity() !== 0) {
235
- string += `${optionsToString(this.options)}`;
235
+ string += `\n${optionsToString(this.options)}`;
236
236
  }
237
237
  return string;
238
238
  }
@@ -263,7 +263,7 @@ function relationshipsToString(relationships) {
263
263
  if (string === '') {
264
264
  return '';
265
265
  }
266
- return `${relationships.toString()}\n`;
266
+ return `${string}\n`;
267
267
  }
268
268
  function optionsToString(options) {
269
269
  const string = options.toString();
@@ -1,3 +1,22 @@
1
+ /**
2
+ * Copyright 2013-2023 the original author or authors from the JHipster project.
3
+ *
4
+ * This file is part of the JHipster project, see https://www.jhipster.tech/
5
+ * for more information.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * https://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ */
19
+ import { upperFirst } from 'lodash-es';
1
20
  import { Validations } from '../jhipster/index.mjs';
2
21
  import { relationshipTypeExists } from '../jhipster/relationship-types.js';
3
22
  const { REQUIRED } = Validations;
@@ -72,9 +91,9 @@ export default class JDLRelationship {
72
91
  if (Object.keys(sourceOptions).length !== 0) {
73
92
  Object.keys(sourceOptions).forEach(name => {
74
93
  const value = sourceOptions[name];
75
- string += ` @${name}${value != null && sourceOptions[name] !== true ? `(${value})` : ''}\n`;
94
+ name = upperFirst(name);
95
+ string += `@${name}${value != null && value !== true ? `(${value}) ` : ' '}`;
76
96
  });
77
- string += ' ';
78
97
  }
79
98
  string += `${this.from}`;
80
99
  if (this.injectedFieldInFrom) {
@@ -92,12 +111,11 @@ export default class JDLRelationship {
92
111
  }
93
112
  const destinationOptions = this.options.destination;
94
113
  if (Object.keys(destinationOptions).length !== 0) {
95
- string += '\n';
96
114
  Object.keys(destinationOptions).forEach(name => {
97
115
  const value = destinationOptions[name];
98
- string += ` @${name}${value != null && destinationOptions[name] !== true ? `(${value})` : ''}\n`;
116
+ name = upperFirst(name);
117
+ string += `@${name}${value != null && value !== true ? `(${value}) ` : ' '}`;
99
118
  });
100
- string += ' ';
101
119
  }
102
120
  string += `${this.to}`;
103
121
  if (this.injectedFieldInTo) {
@@ -135,14 +135,29 @@ export default class JDLAstBuilderVisitor extends BaseJDLCSTVisitor {
135
135
  };
136
136
  }
137
137
  annotationDeclaration(context) {
138
+ const optionName = context.option[0].image;
138
139
  if (!context.value) {
139
- return { optionName: context.option[0].image, type: 'UNARY' };
140
- }
141
- return {
142
- optionName: context.option[0].image,
143
- optionValue: context.value[0].image.replace(/"/g, ''),
144
- type: 'BINARY',
145
- };
140
+ return { optionName, type: 'UNARY' };
141
+ }
142
+ let { image: optionValue } = context.value[0];
143
+ const { tokenType } = context.value[0];
144
+ switch (tokenType.name) {
145
+ case 'INTEGER':
146
+ optionValue = parseInt(optionValue, 10);
147
+ break;
148
+ case 'DECIMAL':
149
+ optionValue = parseFloat(optionValue);
150
+ break;
151
+ case 'TRUE':
152
+ optionValue = true;
153
+ break;
154
+ case 'FALSE':
155
+ optionValue = false;
156
+ break;
157
+ default:
158
+ optionValue = optionValue.replace(/"/g, '');
159
+ }
160
+ return { optionName, optionValue, type: 'BINARY' };
146
161
  }
147
162
  entityTableNameDeclaration(context) {
148
163
  return context.NAME[0].image;
@@ -380,6 +395,7 @@ export default class JDLAstBuilderVisitor extends BaseJDLCSTVisitor {
380
395
  applicationSubDeclaration(context) {
381
396
  const applicationSubDeclaration = {
382
397
  config: {},
398
+ namespaceConfigs: {},
383
399
  entities: { entityList: [], excluded: [] },
384
400
  options: {},
385
401
  useOptions: [],
@@ -388,6 +404,10 @@ export default class JDLAstBuilderVisitor extends BaseJDLCSTVisitor {
388
404
  // Apparently the pegjs grammar only returned the last config
389
405
  applicationSubDeclaration.config = this.visit(context.applicationSubConfig[context.applicationSubConfig.length - 1]);
390
406
  }
407
+ if (context.applicationSubNamespaceConfig) {
408
+ const { namespace, config } = this.visit(context.applicationSubNamespaceConfig[context.applicationSubNamespaceConfig.length - 1]);
409
+ applicationSubDeclaration.namespaceConfigs[namespace] = config;
410
+ }
391
411
  if (context.applicationSubEntities) {
392
412
  // Apparently the pegjs grammar only returned the last entities
393
413
  applicationSubDeclaration.entities = this.visit(context.applicationSubEntities[context.applicationSubEntities.length - 1]);
@@ -429,6 +449,42 @@ export default class JDLAstBuilderVisitor extends BaseJDLCSTVisitor {
429
449
  }
430
450
  return applicationSubDeclaration;
431
451
  }
452
+ applicationSubNamespaceConfig(context) {
453
+ const config = {};
454
+ const namespace = context.namespace[0].image;
455
+ if (context.applicationNamespaceConfigDeclaration) {
456
+ const configProps = context.applicationNamespaceConfigDeclaration.map(this.visit, this);
457
+ configProps.forEach(configProp => {
458
+ config[configProp.key] = configProp.value;
459
+ });
460
+ }
461
+ return { namespace, config };
462
+ }
463
+ applicationNamespaceConfigDeclaration(context) {
464
+ const key = context.NAME[0].image;
465
+ const value = this.visit(context.namespaceConfigValue);
466
+ return { key, value };
467
+ }
468
+ namespaceConfigValue(context) {
469
+ if (context.qualifiedName) {
470
+ return this.visit(context.qualifiedName);
471
+ }
472
+ if (context.list) {
473
+ return this.visit(context.list);
474
+ }
475
+ if (context.INTEGER) {
476
+ return context.INTEGER[0].image;
477
+ }
478
+ if (context.STRING) {
479
+ const stringImage = context.STRING[0].image;
480
+ return stringImage.substring(1, stringImage.length - 1);
481
+ }
482
+ if (context.BOOLEAN) {
483
+ return context.BOOLEAN[0].image === 'true';
484
+ }
485
+ /* istanbul ignore next */
486
+ throw new Error('No valid config value was found, expected a qualified name, a list, an integer, a string or a boolean.');
487
+ }
432
488
  applicationSubConfig(context) {
433
489
  const config = {};
434
490
  if (context.applicationConfigDeclaration) {
@@ -18,6 +18,7 @@
18
18
  */
19
19
  import { CstParser } from 'chevrotain';
20
20
  import { tokens as LexerTokens } from './lexer/lexer.js';
21
+ import { NAME } from './lexer/shared-tokens.js';
21
22
  let instance;
22
23
  export default class JDLParser extends CstParser {
23
24
  constructor() {
@@ -64,9 +65,12 @@ export default class JDLParser extends CstParser {
64
65
  this.applicationDeclaration();
65
66
  this.applicationSubDeclaration();
66
67
  this.applicationSubConfig();
68
+ this.applicationSubNamespaceConfig();
67
69
  this.applicationSubEntities();
68
70
  this.applicationConfigDeclaration();
69
71
  this.configValue();
72
+ this.applicationNamespaceConfigDeclaration();
73
+ this.namespaceConfigValue();
70
74
  this.qualifiedName();
71
75
  this.list();
72
76
  // very important to call this after all the rules have been defined.
@@ -133,12 +137,17 @@ export default class JDLParser extends CstParser {
133
137
  this.CONSUME(LexerTokens.NAME, { LABEL: 'option' });
134
138
  this.OPTION(() => {
135
139
  this.CONSUME(LexerTokens.LPAREN);
136
- this.OR([
137
- { ALT: () => this.CONSUME2(LexerTokens.STRING, { LABEL: 'value' }) },
138
- { ALT: () => this.CONSUME2(LexerTokens.NAME, { LABEL: 'value' }) },
139
- { ALT: () => this.CONSUME3(LexerTokens.INTEGER, { LABEL: 'value' }) },
140
- { ALT: () => this.CONSUME3(LexerTokens.DECIMAL, { LABEL: 'value' }) },
141
- ]);
140
+ this.OR({
141
+ IGNORE_AMBIGUITIES: true,
142
+ DEF: [
143
+ { ALT: () => this.CONSUME(LexerTokens.STRING, { LABEL: 'value' }) },
144
+ { ALT: () => this.CONSUME(LexerTokens.INTEGER, { LABEL: 'value' }) },
145
+ { ALT: () => this.CONSUME(LexerTokens.DECIMAL, { LABEL: 'value' }) },
146
+ { ALT: () => this.CONSUME(LexerTokens.TRUE, { LABEL: 'value' }) },
147
+ { ALT: () => this.CONSUME(LexerTokens.FALSE, { LABEL: 'value' }) },
148
+ { ALT: () => this.CONSUME2(LexerTokens.NAME, { LABEL: 'value' }) },
149
+ ],
150
+ });
142
151
  this.CONSUME(LexerTokens.RPAREN);
143
152
  });
144
153
  });
@@ -455,6 +464,7 @@ export default class JDLParser extends CstParser {
455
464
  this.RULE('applicationSubDeclaration', () => {
456
465
  this.MANY(() => {
457
466
  this.OR([
467
+ { ALT: () => this.SUBRULE(this.applicationSubNamespaceConfig) },
458
468
  { ALT: () => this.SUBRULE(this.applicationSubConfig) },
459
469
  { ALT: () => this.SUBRULE(this.applicationSubEntities) },
460
470
  { ALT: () => this.SUBRULE(this.unaryOptionDeclaration) },
@@ -464,6 +474,42 @@ export default class JDLParser extends CstParser {
464
474
  });
465
475
  });
466
476
  }
477
+ applicationSubNamespaceConfig() {
478
+ this.RULE('applicationSubNamespaceConfig', () => {
479
+ this.CONSUME(LexerTokens.CONFIG);
480
+ this.CONSUME(LexerTokens.LPAREN);
481
+ this.CONSUME(LexerTokens.NAME, { LABEL: 'namespace' });
482
+ this.CONSUME(LexerTokens.RPAREN);
483
+ this.CONSUME(LexerTokens.LCURLY);
484
+ this.MANY(() => {
485
+ this.OR([
486
+ { ALT: () => this.CONSUME(LexerTokens.JAVADOC) },
487
+ { ALT: () => this.SUBRULE(this.applicationNamespaceConfigDeclaration) },
488
+ ]);
489
+ });
490
+ this.CONSUME(LexerTokens.RCURLY);
491
+ });
492
+ }
493
+ applicationNamespaceConfigDeclaration() {
494
+ this.RULE('applicationNamespaceConfigDeclaration', () => {
495
+ this.CONSUME(NAME);
496
+ this.SUBRULE(this.namespaceConfigValue);
497
+ this.OPTION(() => {
498
+ this.CONSUME(LexerTokens.COMMA);
499
+ });
500
+ });
501
+ }
502
+ namespaceConfigValue() {
503
+ this.RULE('namespaceConfigValue', () => {
504
+ this.OR([
505
+ { ALT: () => this.CONSUME(LexerTokens.BOOLEAN) },
506
+ { ALT: () => this.SUBRULE(this.qualifiedName) },
507
+ { ALT: () => this.SUBRULE(this.list) },
508
+ { ALT: () => this.CONSUME(LexerTokens.INTEGER) },
509
+ { ALT: () => this.CONSUME(LexerTokens.STRING) },
510
+ ]);
511
+ });
512
+ }
467
513
  applicationSubConfig() {
468
514
  this.RULE('applicationSubConfig', () => {
469
515
  this.CONSUME(LexerTokens.CONFIG);
@@ -23,7 +23,7 @@ import { applicationOptions } from '../../jhipster/index.mjs';
23
23
  import jhipsterDefinition from '../../../generators/app/jdl/index.mjs';
24
24
  const { OptionNames } = applicationOptions;
25
25
  const { APPLICATION_TYPE, AUTHENTICATION_TYPE, BASE_NAME, BLUEPRINT, BLUEPRINTS, BUILD_TOOL, CACHE_PROVIDER, CLIENT_FRAMEWORK, CLIENT_PACKAGE_MANAGER, CLIENT_THEME, CLIENT_THEME_VARIANT, CREATION_TIMESTAMP, DATABASE_TYPE, DEV_DATABASE_TYPE, DTO_SUFFIX, EMBEDDABLE_LAUNCH_SCRIPT, ENABLE_HIBERNATE_CACHE, ENABLE_SWAGGER_CODEGEN, ENABLE_TRANSLATION, ENTITY_SUFFIX, GATEWAY_SERVER_PORT, JHIPSTER_VERSION, JHI_PREFIX, JWT_SECRET_KEY, LANGUAGES, MICROFRONTEND, MICROFRONTENDS, NATIVE_LANGUAGE, PACKAGE_NAME, PROD_DATABASE_TYPE, REACTIVE, REMEMBER_ME_KEY, SEARCH_ENGINE, SERVER_PORT, SKIP_CLIENT, SKIP_SERVER, SKIP_USER_MANAGEMENT, TEST_FRAMEWORKS, WEBSOCKET, WITH_ADMIN_UI, ENABLE_GRADLE_ENTERPRISE, GRADLE_ENTERPRISE_HOST, } = OptionNames;
26
- const applicationConfigCategoryToken = createTokenFromConfig({ name: 'CONFIG_KEY', pattern: Lexer.NA });
26
+ export const applicationConfigCategoryToken = createTokenFromConfig({ name: 'CONFIG_KEY', pattern: Lexer.NA });
27
27
  const applicationConfigTokens = [
28
28
  { name: 'BASE_NAME', pattern: BASE_NAME },
29
29
  { name: 'BLUEPRINTS', pattern: BLUEPRINTS },
@@ -55,7 +55,7 @@ const applicationConfigTokens = [
55
55
  { name: 'CLIENT_THEME', pattern: CLIENT_THEME },
56
56
  { name: 'WITH_ADMIN_UI', pattern: WITH_ADMIN_UI },
57
57
  { name: 'NATIVE_LANGUAGE', pattern: NATIVE_LANGUAGE },
58
- { name: 'FRONT_END_BUILDER', pattern: 'frontendBuilder' },
58
+ { name: 'FRONT_END_BUILDER', pattern: 'frontendBuilder' }, // TODO always valid?
59
59
  { name: 'SKIP_USER_MANAGEMENT', pattern: SKIP_USER_MANAGEMENT },
60
60
  { name: 'ENABLE_SWAGGER_CODEGEN', pattern: ENABLE_SWAGGER_CODEGEN },
61
61
  { name: 'REACTIVE', pattern: REACTIVE },
@@ -23,9 +23,11 @@ export default class EntityValidator extends Validator {
23
23
  constructor() {
24
24
  super('entity', ['name', 'tableName']);
25
25
  }
26
- validate(jdlEntity) {
26
+ validate(jdlEntity, options = {}) {
27
27
  super.validate(jdlEntity);
28
- checkForReservedClassName(jdlEntity);
28
+ if (options.checkReservedKeywords) {
29
+ checkForReservedClassName(jdlEntity);
30
+ }
29
31
  }
30
32
  }
31
33
  function checkForReservedClassName(jdlEntity) {
@@ -23,9 +23,11 @@ export default class EnumValidator extends Validator {
23
23
  constructor() {
24
24
  super('enum', ['name']);
25
25
  }
26
- validate(jdlEnum) {
26
+ validate(jdlEnum, options = {}) {
27
27
  super.validate(jdlEnum);
28
- checkForReservedClassName(jdlEnum);
28
+ if (options.checkReservedKeywords) {
29
+ checkForReservedClassName(jdlEnum);
30
+ }
29
31
  }
30
32
  }
31
33
  function checkForReservedClassName(jdlEnum) {
@@ -42,20 +42,30 @@ export default function createValidator(jdlObject, logger = console) {
42
42
  checkForErrors: () => {
43
43
  jdlObject.forEachApplication(jdlApplication => {
44
44
  const blueprints = jdlApplication.getConfigurationOptionValue(BLUEPRINTS);
45
- if (blueprints && blueprints.length > 0) {
45
+ const checkReservedKeywords = (blueprints?.length ?? 0) === 0;
46
+ checkForNamespaceConfigErrors(jdlApplication);
47
+ checkForRelationshipErrors();
48
+ checkForEntityErrors(jdlApplication, { checkReservedKeywords });
49
+ checkForEnumErrors({ checkReservedKeywords });
50
+ if (!checkReservedKeywords) {
46
51
  logger.warn('Blueprints are being used, the JDL validation phase is skipped.');
47
52
  return;
48
53
  }
49
- checkForEntityErrors(jdlApplication);
50
- checkForRelationshipErrors();
51
- checkForEnumErrors();
52
54
  checkDeploymentsErrors();
53
55
  checkForOptionErrors();
54
56
  });
55
57
  checkForRelationshipsBetweenApplications();
56
58
  },
57
59
  };
58
- function checkForEntityErrors(jdlApplication) {
60
+ function checkForNamespaceConfigErrors(jdlApplication) {
61
+ jdlApplication.forEachNamespaceConfiguration(config => {
62
+ const blueprints = jdlApplication.config.getOption('blueprints');
63
+ if (!blueprints || !blueprints.getValue().some(blueprint => blueprint === config.namespace)) {
64
+ throw new Error(`Blueprint namespace config ${config.namespace} requires the blueprint ${config.namespace}`);
65
+ }
66
+ });
67
+ }
68
+ function checkForEntityErrors(jdlApplication, options) {
59
69
  if (jdlObject.getEntityQuantity() === 0) {
60
70
  return;
61
71
  }
@@ -64,7 +74,7 @@ export default function createValidator(jdlObject, logger = console) {
64
74
  if (!jdlApplication.hasEntityName(jdlEntity.name)) {
65
75
  return;
66
76
  }
67
- validator.validate(jdlEntity);
77
+ validator.validate(jdlEntity, options);
68
78
  checkForFieldErrors(jdlEntity.name, jdlEntity.fields, jdlApplication);
69
79
  });
70
80
  }
@@ -100,13 +110,13 @@ export default function createValidator(jdlObject, logger = console) {
100
110
  });
101
111
  });
102
112
  }
103
- function checkForEnumErrors() {
113
+ function checkForEnumErrors(options) {
104
114
  if (jdlObject.getEnumQuantity() === 0) {
105
115
  return;
106
116
  }
107
117
  const validator = new EnumValidator();
108
118
  jdlObject.forEachEnum(jdlEnum => {
109
- validator.validate(jdlEnum);
119
+ validator.validate(jdlEnum, options);
110
120
  });
111
121
  }
112
122
  function checkDeploymentsErrors() {