generator-jhipster 8.7.1 → 8.7.2

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 (296) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/commands.d.mts +89 -89
  3. package/dist/cli/environment-builder.d.mts +7 -6
  4. package/dist/cli/environment-builder.mjs +5 -3
  5. package/dist/cli/jhipster-command.d.mts +2 -2
  6. package/dist/cli/jhipster-command.mjs +13 -4
  7. package/dist/cli/program.d.mts +53 -36
  8. package/dist/cli/program.mjs +41 -32
  9. package/dist/cli/utils.d.mts +2 -3
  10. package/dist/cli/utils.mjs +11 -21
  11. package/dist/generators/angular/generator.js +2 -2
  12. package/dist/generators/angular/resources/package.json +13 -13
  13. package/dist/generators/angular/templates/src/main/webapp/app/account/activate/activate.component.ts.ejs +2 -2
  14. package/dist/generators/angular/templates/src/main/webapp/app/account/activate/activate.service.ts.ejs +2 -2
  15. package/dist/generators/angular/templates/src/main/webapp/app/account/password/password-strength-bar/password-strength-bar.component.ts.ejs +2 -2
  16. package/dist/generators/angular/templates/src/main/webapp/app/account/password/password.component.ts.ejs +2 -2
  17. package/dist/generators/angular/templates/src/main/webapp/app/account/password/password.service.ts.ejs +2 -2
  18. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts.ejs +2 -2
  19. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts.ejs +2 -2
  20. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts.ejs +2 -2
  21. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts.ejs +2 -2
  22. package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.component.ts.ejs +2 -2
  23. package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.service.ts.ejs +2 -2
  24. package/dist/generators/angular/templates/src/main/webapp/app/account/sessions/sessions.component.ts.ejs +2 -2
  25. package/dist/generators/angular/templates/src/main/webapp/app/account/sessions/sessions.service.ts.ejs +2 -2
  26. package/dist/generators/angular/templates/src/main/webapp/app/account/settings/settings.component.ts.ejs +2 -2
  27. package/dist/generators/angular/templates/src/main/webapp/app/admin/configuration/configuration.component.ts.ejs +2 -2
  28. package/dist/generators/angular/templates/src/main/webapp/app/admin/configuration/configuration.service.ts.ejs +2 -2
  29. package/dist/generators/angular/templates/src/main/webapp/app/admin/gateway/gateway-routes.service.ts.ejs +2 -2
  30. package/dist/generators/angular/templates/src/main/webapp/app/admin/gateway/gateway.component.ts.ejs +1 -1
  31. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/health.component.ts.ejs +2 -2
  32. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/health.service.ts.ejs +2 -2
  33. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/modal/health-modal.component.ts.ejs +1 -1
  34. package/dist/generators/angular/templates/src/main/webapp/app/admin/logs/logs.component.ts.ejs +3 -3
  35. package/dist/generators/angular/templates/src/main/webapp/app/admin/logs/logs.service.ts.ejs +2 -2
  36. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.ts.ejs +1 -1
  37. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/metrics.component.ts.ejs +2 -2
  38. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/metrics.service.ts.ejs +2 -2
  39. package/dist/generators/angular/templates/src/main/webapp/app/admin/tracker/tracker.component.ts.ejs +1 -1
  40. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.ts.ejs +2 -2
  41. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/list/user-management.component.ts.ejs +5 -5
  42. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/service/user-management.service.ts.ejs +3 -3
  43. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/update/user-management-update.component.ts.ejs +2 -2
  44. package/dist/generators/angular/templates/src/main/webapp/app/app.component.ts.ejs +4 -4
  45. package/dist/generators/angular/templates/src/main/webapp/app/core/auth/account.service.ts.ejs +7 -7
  46. package/dist/generators/angular/templates/src/main/webapp/app/core/auth/auth-jwt.service.ts.ejs +3 -3
  47. package/dist/generators/angular/templates/src/main/webapp/app/core/auth/auth-session.service.ts.ejs +2 -2
  48. package/dist/generators/angular/templates/src/main/webapp/app/core/auth/csrf.service.ts.ejs +1 -1
  49. package/dist/generators/angular/templates/src/main/webapp/app/core/auth/state-storage.service.ts.ejs +3 -3
  50. package/dist/generators/angular/templates/src/main/webapp/app/core/interceptor/notification.interceptor.ts.ejs +1 -1
  51. package/dist/generators/angular/templates/src/main/webapp/app/core/tracker/tracker.service.ts.ejs +5 -5
  52. package/dist/generators/angular/templates/src/main/webapp/app/core/util/alert.service.ts.ejs +2 -2
  53. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.ts.ejs +4 -4
  54. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/service/_entityFile_.service.ts.ejs +2 -2
  55. package/dist/generators/angular/templates/src/main/webapp/app/home/home.component.ts.ejs +3 -3
  56. package/dist/generators/angular/templates/src/main/webapp/app/layouts/main/main.component.ts.ejs +7 -7
  57. package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/navbar.component.ts.ejs +7 -7
  58. package/dist/generators/angular/templates/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts.ejs +1 -1
  59. package/dist/generators/angular/templates/src/main/webapp/app/layouts/profiles/profile.service.ts.ejs +3 -3
  60. package/dist/generators/angular/templates/src/main/webapp/app/login/login.component.ts.ejs +3 -3
  61. package/dist/generators/angular/templates/src/main/webapp/app/login/login.service.ts.ejs +4 -4
  62. package/dist/generators/angular/templates/src/main/webapp/app/shared/alert/alert-error.component.ts.ejs +3 -3
  63. package/dist/generators/angular/templates/src/main/webapp/app/shared/alert/alert.component.ts.ejs +1 -1
  64. package/dist/generators/angular/templates/src/main/webapp/app/shared/auth/has-any-authority.directive.ts.ejs +2 -2
  65. package/dist/generators/angular/templates/src/main/webapp/app/shared/language/translate.directive.ts.ejs +2 -2
  66. package/dist/generators/angular/templates/src/main/webapp/app/shared/language/translation.module.ts.ejs +3 -3
  67. package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort-by.directive.ts.ejs +1 -1
  68. package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort.service.ts.ejs +1 -1
  69. package/dist/generators/base/api.d.ts +10 -4
  70. package/dist/generators/base/generator.d.ts +4 -0
  71. package/dist/generators/base/generator.js +10 -1
  72. package/dist/generators/base/shared-data.js +2 -0
  73. package/dist/generators/base/support/faker.d.ts +1 -1
  74. package/dist/generators/base/support/faker.js +1 -1
  75. package/dist/generators/base/support/timestamp.js +10 -2
  76. package/dist/generators/base-application/support/prepare-entity.js +6 -1
  77. package/dist/generators/base-application/support/prepare-field.js +40 -16
  78. package/dist/generators/base-application/support/prepare-relationship.d.ts +1 -1
  79. package/dist/generators/base-application/support/task-type-inference.d.ts +18 -18
  80. package/dist/generators/base-application/types.d.ts +4 -0
  81. package/dist/generators/base-core/generator.d.ts +7 -4
  82. package/dist/generators/base-core/generator.js +31 -35
  83. package/dist/generators/base-workspaces/generator.d.ts +34 -1
  84. package/dist/generators/base-workspaces/generator.js +1 -1
  85. package/dist/generators/base-workspaces/internal/docker-base.js +1 -3
  86. package/dist/generators/bootstrap/support/eslint-transform.js +2 -2
  87. package/dist/generators/bootstrap/support/java-unused-imports-transform.js +2 -2
  88. package/dist/generators/bootstrap/support/prettier-support.js +2 -2
  89. package/dist/generators/bootstrap-application-base/generator.d.ts +2 -2
  90. package/dist/generators/bootstrap-application-base/generator.js +19 -5
  91. package/dist/generators/bootstrap-application-base/utils.d.ts +3 -3
  92. package/dist/generators/bootstrap-application-base/utils.js +9 -3
  93. package/dist/generators/bootstrap-workspaces/command.d.ts +12 -2
  94. package/dist/generators/bootstrap-workspaces/command.js +5 -3
  95. package/dist/generators/bootstrap-workspaces/generator.d.ts +8 -2
  96. package/dist/generators/bootstrap-workspaces/generator.js +0 -2
  97. package/dist/generators/bootstrap-workspaces/index.d.ts +1 -0
  98. package/dist/generators/bootstrap-workspaces/index.js +1 -0
  99. package/dist/generators/client/command.d.ts +22 -0
  100. package/dist/generators/client/command.js +22 -0
  101. package/dist/generators/client/files-common.js +1 -1
  102. package/dist/generators/client/generator.js +4 -5
  103. package/dist/generators/client/prompts.js +10 -9
  104. package/dist/generators/client/resources/package.json +3 -3
  105. package/dist/generators/client/templates/webpack/webpack.microfrontend.js.jhi.ejs +16 -5
  106. package/dist/generators/common/generator.js +2 -2
  107. package/dist/generators/common/resources/package.json +1 -1
  108. package/dist/generators/cypress/files.js +6 -0
  109. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/account/login-page.cy.ts.ejs +2 -2
  110. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/account/logout.cy.ts.ejs +39 -0
  111. package/dist/generators/docker/generator.d.ts +1 -1
  112. package/dist/generators/docker/templates/docker/keycloak.yml.ejs +2 -1
  113. package/dist/generators/docker-compose/command.js +9 -1
  114. package/dist/generators/docker-compose/generator.d.ts +11 -53
  115. package/dist/generators/docker-compose/generator.js +24 -23
  116. package/dist/generators/generate-blueprint/command.d.ts +97 -20
  117. package/dist/generators/generate-blueprint/command.js +28 -0
  118. package/dist/generators/generate-blueprint/constants.d.ts +2 -2
  119. package/dist/generators/generate-blueprint/files.d.ts +1 -42
  120. package/dist/generators/generate-blueprint/files.js +27 -29
  121. package/dist/generators/generate-blueprint/generator.d.ts +5 -2
  122. package/dist/generators/generate-blueprint/generator.js +78 -22
  123. package/dist/generators/generate-blueprint/resources/package.json +3 -3
  124. package/dist/generators/generate-blueprint/templates/.github/workflows/samples.yml.ejs +6 -8
  125. package/dist/generators/generate-blueprint/templates/README.md.ejs +12 -2
  126. package/dist/generators/generate-blueprint/templates/cli/cli-customizations.cjs.ejs +2 -0
  127. package/dist/generators/generate-blueprint/templates/cli/cli.cjs.ejs +2 -1
  128. package/dist/generators/generate-blueprint/templates/cli/commands.cjs.ejs +1 -1
  129. package/dist/generators/generate-blueprint/templates/eslint.config.js.jhi.blueprint.ejs +3 -2
  130. package/dist/generators/generate-blueprint/templates/generators/generator/command.mjs.ejs +8 -12
  131. package/dist/generators/generate-blueprint/templates/generators/generator/generator.mjs.jhi.ejs +8 -11
  132. package/dist/generators/generate-blueprint/templates/generators/generator/generator.spec.mjs.ejs +2 -2
  133. package/dist/generators/generate-blueprint/templates/generators/generator/index.mjs.ejs +2 -4
  134. package/dist/generators/generate-blueprint/templates/vitest.config.ts.ejs +0 -1
  135. package/dist/generators/generator-constants.d.ts +2 -2
  136. package/dist/generators/generator-constants.js +3 -3
  137. package/dist/generators/git/command.d.ts +10 -0
  138. package/dist/generators/git/command.js +10 -0
  139. package/dist/generators/git/generator.d.ts +5 -4
  140. package/dist/generators/git/generator.js +6 -4
  141. package/dist/generators/gradle/generators/node-gradle/templates/buildSrc/src/main/groovy/jhipster.node-gradle-conventions.gradle.ejs +16 -10
  142. package/dist/generators/gradle/internal/needles.d.ts +3 -1
  143. package/dist/generators/gradle/internal/needles.js +10 -5
  144. package/dist/generators/gradle/templates/gradle/wrapper/gradle-wrapper.properties +1 -1
  145. package/dist/generators/gradle/types.d.ts +3 -2
  146. package/dist/generators/init/command.d.ts +4 -20
  147. package/dist/generators/init/command.js +1 -1
  148. package/dist/generators/init/resources/.node-version +1 -1
  149. package/dist/generators/java/command.d.ts +3 -5
  150. package/dist/generators/java/command.js +1 -20
  151. package/dist/generators/java/generators/bootstrap/command.d.ts +7 -0
  152. package/dist/generators/java/generators/bootstrap/command.js +7 -0
  153. package/dist/generators/java/generators/build-tool/generator.js +37 -13
  154. package/dist/generators/java/generators/graalvm/command.d.ts +5 -0
  155. package/dist/generators/java/generators/graalvm/command.js +5 -0
  156. package/dist/generators/java/generators/graalvm/generator.d.ts +9 -0
  157. package/dist/generators/java/generators/graalvm/generator.js +222 -0
  158. package/dist/generators/java/generators/graalvm/index.d.ts +20 -0
  159. package/dist/generators/java/generators/graalvm/index.js +20 -0
  160. package/dist/generators/java/generators/graalvm/internal/maven-definition.d.ts +8 -0
  161. package/dist/generators/java/generators/graalvm/internal/maven-definition.js +130 -0
  162. package/dist/generators/java/generators/graalvm/resources/build.gradle +1 -0
  163. package/dist/generators/java/generators/graalvm/resources/gradle/libs.versions.toml +5 -0
  164. package/dist/generators/java/generators/graalvm/templates/README.md.jhi.native.ejs +53 -0
  165. package/dist/generators/java/generators/graalvm/templates/gradle/native.gradle.ejs +44 -0
  166. package/dist/generators/java/generators/graalvm/templates/src/main/java/_package_/config/NativeConfiguration.java.ejs +14 -0
  167. package/dist/generators/java/generators/node/generator.d.ts +6 -18
  168. package/dist/generators/java/generators/node/generator.js +31 -0
  169. package/dist/generators/java/generators/openapi-generator/generator.js +2 -2
  170. package/dist/generators/java/support/util.d.ts +1 -1
  171. package/dist/generators/java/types.d.ts +4 -1
  172. package/dist/generators/javascript/generators/bootstrap/command.d.ts +21 -20
  173. package/dist/generators/javascript/generators/bootstrap/generator.d.ts +1 -2
  174. package/dist/generators/javascript/generators/bootstrap/generator.js +9 -5
  175. package/dist/generators/javascript/types.d.ts +9 -2
  176. package/dist/generators/kubernetes/command.d.ts +12 -0
  177. package/dist/generators/kubernetes/command.js +12 -0
  178. package/dist/generators/kubernetes/index.d.ts +1 -0
  179. package/dist/generators/kubernetes/index.js +1 -0
  180. package/dist/generators/kubernetes-helm/index.d.ts +1 -0
  181. package/dist/generators/kubernetes-helm/index.js +1 -0
  182. package/dist/generators/kubernetes-knative/generator.d.ts +1 -1
  183. package/dist/generators/kubernetes-knative/index.d.ts +1 -0
  184. package/dist/generators/kubernetes-knative/index.js +1 -0
  185. package/dist/generators/languages/entity-files.d.ts +3 -2
  186. package/dist/generators/languages/entity-files.js +0 -1
  187. package/dist/generators/languages/generator.d.ts +1 -0
  188. package/dist/generators/languages/generator.js +1 -0
  189. package/dist/generators/liquibase/files.js +8 -0
  190. package/dist/generators/liquibase/generator.d.ts +1 -1
  191. package/dist/generators/liquibase/generator.js +15 -0
  192. package/dist/generators/liquibase/templates/src/main/resources/META-INF/native-image/liquibase/reflect-config.json +145 -0
  193. package/dist/generators/liquibase/templates/src/main/resources/config/liquibase/changelog/add_relationship_constraints.ejs +81 -0
  194. package/dist/generators/liquibase/templates/src/main/resources/config/liquibase/changelog/added_entity_constraints.xml.ejs +2 -62
  195. package/dist/generators/liquibase/templates/src/main/resources/config/liquibase/changelog/updated_entity_constraints.xml.ejs +3 -60
  196. package/dist/generators/maven/generators/frontend-plugin/generator.js +10 -5
  197. package/dist/generators/maven/types.d.ts +3 -6
  198. package/dist/generators/project-name/command.d.ts +25 -20
  199. package/dist/generators/project-name/command.js +20 -4
  200. package/dist/generators/project-name/generator.d.ts +3 -12
  201. package/dist/generators/project-name/generator.js +6 -38
  202. package/dist/generators/react/generator.d.ts +1 -1
  203. package/dist/generators/react/generator.js +15 -2
  204. package/dist/generators/react/resources/package.json +25 -24
  205. package/dist/generators/react/templates/package.json.ejs +0 -3
  206. package/dist/generators/server/generator.d.ts +1 -7
  207. package/dist/generators/server/generator.js +22 -50
  208. package/dist/generators/server/resources/Dockerfile +12 -12
  209. package/dist/generators/server/resources/gradle/libs.versions.toml +10 -7
  210. package/dist/generators/server/resources/pom.xml +11 -11
  211. package/dist/generators/server/types.d.ts +8 -0
  212. package/dist/generators/spring-boot/cleanup.js +2 -2
  213. package/dist/generators/spring-boot/command.d.ts +19 -0
  214. package/dist/generators/spring-boot/command.js +19 -0
  215. package/dist/generators/spring-boot/generator.d.ts +1 -1
  216. package/dist/generators/spring-boot/generator.js +4 -1
  217. package/dist/generators/spring-boot/prompts.js +12 -12
  218. package/dist/generators/spring-boot/resources/spring-boot-dependencies.pom +107 -106
  219. package/dist/generators/spring-boot/templates/README.md.jhi.spring-boot.ejs +22 -16
  220. package/dist/generators/spring-boot/templates/gradle/profile_dev.gradle.ejs +2 -46
  221. package/dist/generators/spring-boot/templates/gradle/profile_prod.gradle.ejs +1 -47
  222. package/dist/generators/spring-boot/templates/src/main/java/_package_/Application.java.ejs +4 -1
  223. package/dist/generators/spring-boot/templates/src/main/java/_package_/config/SecurityConfiguration_imperative.java.ejs +29 -6
  224. package/dist/generators/spring-boot/templates/src/main/java/_package_/config/SecurityConfiguration_reactive.java.ejs +32 -6
  225. package/dist/generators/spring-boot/templates/src/main/java/_package_/config/WebConfigurer.java.ejs +13 -8
  226. package/dist/generators/spring-boot/templates/src/main/java/_package_/domain/User.java.ejs +2 -3
  227. package/dist/generators/spring-boot/templates/src/main/resources/config/application-dev.yml.ejs +8 -3
  228. package/dist/generators/spring-boot/templates/src/main/resources/config/application.yml.ejs +4 -2
  229. package/dist/generators/spring-boot/templates/src/test/java/_package_/_entityPackage_/web/rest/_entityClass_ResourceIT.java.ejs +8 -7
  230. package/dist/generators/spring-cache/generator.d.ts +2 -1
  231. package/dist/generators/spring-cache/generator.js +18 -0
  232. package/dist/generators/spring-cache/resources/gradle/libs.versions.toml +1 -1
  233. package/dist/generators/spring-cloud/generators/gateway/generator.js +2 -2
  234. package/dist/generators/spring-data-couchbase/generator.js +2 -2
  235. package/dist/generators/spring-data-mongodb/generator.d.ts +1 -1
  236. package/dist/generators/spring-data-relational/files.d.ts +1 -0
  237. package/dist/generators/spring-data-relational/files.js +6 -0
  238. package/dist/generators/spring-data-relational/generator.d.ts +2 -1
  239. package/dist/generators/spring-data-relational/generator.js +63 -2
  240. package/dist/generators/spring-data-relational/internal/dependencies.d.ts +87 -7
  241. package/dist/generators/spring-data-relational/internal/dependencies.js +30 -18
  242. package/dist/generators/spring-data-relational/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.spring_data_persistable.ejs +6 -0
  243. package/dist/generators/spring-data-relational/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.spring_data_reactive.ejs +1 -2
  244. package/dist/generators/spring-data-relational/templates/src/main/java/_package_/config/DatabaseConfiguration.java.ejs +8 -3
  245. package/dist/generators/spring-data-relational/templates/src/main/java/_package_/config/JacksonNativeConfiguration.java.ejs +98 -0
  246. package/dist/generators/vue/files-vue.js +4 -1
  247. package/dist/generators/vue/generator.d.ts +1 -1
  248. package/dist/generators/vue/generator.js +84 -3
  249. package/dist/generators/vue/resources/package.json +20 -19
  250. package/dist/generators/vue/support/update-languages.js +1 -1
  251. package/dist/generators/vue/templates/module-federation.config.cjs.ejs +55 -0
  252. package/dist/generators/vue/templates/package.json.ejs +11 -62
  253. package/dist/generators/vue/templates/src/main/webapp/app/main.ts.ejs +1 -1
  254. package/dist/generators/vue/templates/vite.config.mts.ejs +15 -21
  255. package/dist/generators/workspaces/generator.d.ts +20 -9
  256. package/dist/generators/workspaces/generator.js +3 -3
  257. package/dist/lib/application/field-types.d.ts +2 -1
  258. package/dist/lib/command/converter.d.ts +6 -2
  259. package/dist/lib/command/converter.js +4 -1
  260. package/dist/lib/command/load.js +1 -0
  261. package/dist/lib/command/lookup-commands-configs.js +9 -12
  262. package/dist/lib/command/support/merge-union.d.ts +17 -6
  263. package/dist/lib/command/types.d.ts +38 -11
  264. package/dist/lib/eslint/index.d.ts +6 -14
  265. package/dist/lib/eslint/index.js +1 -2
  266. package/dist/lib/index.d.ts +1 -0
  267. package/dist/lib/index.js +7 -3
  268. package/dist/lib/jdl/core/parsing/validator.js +2 -2
  269. package/dist/lib/jhipster/default-application-options.d.ts +83 -15
  270. package/dist/lib/jhipster/default-application-options.js +26 -27
  271. package/dist/lib/testing/get-generator.d.ts +1 -0
  272. package/dist/lib/testing/get-generator.js +6 -2
  273. package/dist/lib/testing/github-group.d.ts +6 -0
  274. package/dist/lib/testing/github-group.js +56 -0
  275. package/dist/lib/testing/github-matrix.d.ts +38 -0
  276. package/dist/lib/testing/github-matrix.js +72 -0
  277. package/dist/lib/testing/github.d.ts +1 -0
  278. package/dist/lib/testing/github.js +6 -2
  279. package/dist/lib/testing/helpers.d.ts +41 -3
  280. package/dist/lib/testing/helpers.js +74 -12
  281. package/dist/lib/testing/index.d.ts +2 -0
  282. package/dist/lib/testing/index.js +2 -0
  283. package/dist/lib/testing/support/matcher.d.ts +2 -2
  284. package/dist/lib/testing/support/matcher.js +3 -3
  285. package/dist/lib/types/application/application.d.ts +6 -1
  286. package/dist/lib/types/application/entity.d.ts +3 -1
  287. package/dist/lib/types/application/field.d.ts +16 -4
  288. package/dist/lib/types/application/options.d.ts +4 -0
  289. package/dist/lib/types/application/relationship.d.ts +1 -0
  290. package/dist/lib/types/application/yo-rc.d.ts +4 -0
  291. package/dist/lib/types/base/entity.d.ts +1 -0
  292. package/dist/lib/utils/logger.d.ts +1 -1
  293. package/dist/lib/utils/yo-rc.d.ts +27 -3
  294. package/package.json +33 -31
  295. package/dist/generators/generate-blueprint/templates/vitest.test-setup.ts.ejs +0 -6
  296. package/dist/generators/vue/templates/webpack/webpack.microfrontend.js.jhi.vue.ejs +0 -45
@@ -1,8 +1,19 @@
1
- type Compute<T> = { [K in keyof T]: T[K] } | never;
2
- type AllKeys<T> = T extends any ? keyof T : never;
3
1
  /**
4
- * Based on https://github.com/sindresorhus/type-fest/issues/610
2
+ * Based on https://github.com/sindresorhus/type-fest/issues/610#issuecomment-2398118998
5
3
  */
6
- export type MergeUnion<T, Keys extends keyof T = keyof T> = Compute<
7
- { [K in Keys]: T[Keys] } & { [K in AllKeys<T>]?: T extends any ? (K extends keyof T ? T[K] : never) : never }
8
- >;
4
+ import type { EmptyObject, IsNever, KeysOfUnion, Simplify, UnionToIntersection } from 'type-fest';
5
+
6
+ type _MergeUnionKnownKeys<BaseType, Keys extends keyof BaseType = keyof BaseType> = {
7
+ [K in Keys]: Keys extends K ? BaseType[Keys] : never;
8
+ };
9
+
10
+ type IsUnion<T> = [T] extends [UnionToIntersection<T>] ? false : true;
11
+
12
+ export type MergeUnion<BaseType> =
13
+ IsNever<BaseType> extends false
14
+ ? Simplify<
15
+ _MergeUnionKnownKeys<BaseType> & {
16
+ [K in KeysOfUnion<BaseType>]?: BaseType extends object ? (K extends keyof BaseType ? BaseType[K] : never) : never;
17
+ }
18
+ >
19
+ : EmptyObject;
@@ -31,19 +31,24 @@ export type PromptSpec = {
31
31
 
32
32
  type JHipsterArgumentConfig = SetOptional<ArgumentSpec, 'name'> & { scope?: CommandConfigScope };
33
33
 
34
+ type CliSpec = Omit<SetOptional<CliOptionSpec, 'name'>, 'storage'> & {
35
+ env?: string;
36
+ /**
37
+ * Imply other options.
38
+ */
39
+ implies?: Record<string, any>;
40
+ };
41
+
34
42
  export type ConfigSpec<ConfigContext> = {
35
43
  readonly description?: string;
36
44
  readonly choices?: JHispterChoices;
37
-
38
- readonly cli?: SetOptional<CliOptionSpec, 'name'> & { env?: string };
45
+ readonly cli?: CliSpec;
39
46
  readonly argument?: JHipsterArgumentConfig;
47
+ readonly internal?: true;
40
48
  readonly prompt?:
41
49
  | PromptSpec
42
50
  | ((gen: ConfigContext & { jhipsterConfigWithDefaults: Record<string, any> }, config: ConfigSpec<ConfigContext>) => PromptSpec);
43
51
  readonly jdl?: Omit<JHipsterOptionDefinition, 'name' | 'knownChoices'>;
44
- readonly storage?: {
45
- readonly type?: typeof Boolean | typeof String | typeof Number | typeof Array;
46
- };
47
52
  readonly scope?: CommandConfigScope;
48
53
  /**
49
54
  * The callback receives the generator as input for 'generator' scope.
@@ -69,7 +74,10 @@ export type JHipsterArguments = Record<string, JHipsterArgumentConfig>;
69
74
 
70
75
  export type JHipsterOptions = Record<string, JHipsterOption>;
71
76
 
72
- export type JHipsterConfig<ConfigContext = any> = RequireAtLeastOne<ConfigSpec<ConfigContext>, 'argument' | 'cli' | 'prompt' | 'storage'>;
77
+ export type JHipsterConfig<ConfigContext = any> = RequireAtLeastOne<
78
+ ConfigSpec<ConfigContext>,
79
+ 'argument' | 'cli' | 'prompt' | 'jdl' | 'internal'
80
+ >;
73
81
 
74
82
  export type JHipsterConfigs<ConfigContext = any> = Record<string, JHipsterConfig<ConfigContext>>;
75
83
 
@@ -194,6 +202,12 @@ type DerivedPropertiesWithInferenceUnionFromParseableConfigs<U extends Parseable
194
202
  : never;
195
203
  };
196
204
 
205
+ /**
206
+ * @example
207
+ * ```ts
208
+ * type ExplodedCommandChoices = ExplodeCommandChoicesNoInference<{ clientFramework: { choices: ['angular', 'no'], scope: 'storage' }, clientTestFramework: { choices: ['cypress', 'no'], scope: 'storage' } }>
209
+ * ```
210
+ */
197
211
  type ExplodeCommandChoicesNoInference<U extends ParseableConfigs> = {
198
212
  [K in keyof U]: U[K] extends infer RequiredChoices
199
213
  ? RequiredChoices extends { choices: any }
@@ -222,19 +236,32 @@ type PrepareConfigsWithType<U extends ParseableConfigs> = Simplify<{
222
236
  /** Keep Options/Config filtered by choices */
223
237
  type OnlyChoices<D, C extends boolean> = D extends { choices: JHispterChoices } ? (C extends true ? D : never) : C extends true ? never : D;
224
238
 
225
- /** Keep Options/Config filtered by choices */
226
- type OnlyCofigsWithChoice<D extends ParseableConfigs, C extends boolean> = {
239
+ /**
240
+ * Keep Options/Config filtered by choices
241
+ *
242
+ * @example
243
+ * ```ts
244
+ * type ConfigsWithChoice = OnlyConfigsWithChoice<{ clientFramework: { choices: ['angular', 'no'], scope: 'storage' }, clientTestFramework: { choices: ['cypress', 'no'], scope: 'storage' } }>
245
+ * ```
246
+ */
247
+ type OnlyConfigsWithChoice<D extends ParseableConfigs, C extends boolean> = {
227
248
  [K in keyof D as OnlyChoices<D[K], C> extends never ? never : K]: D[K];
228
249
  };
229
250
 
251
+ /**
252
+ * @example
253
+ * ```
254
+ * type Prop = ExportApplicationPropertiesFromCommand<{ configs: { clientFramework: { choices: ['angular', 'no'], scope: 'storage' }, bar: { scope: 'storage' } } }>;
255
+ * ```
256
+ */
230
257
  export type ExportApplicationPropertiesFromCommand<C extends ParseableCommand> =
231
258
  MergeConfigsOptions<C, 'storage'> extends infer Merged
232
259
  ? Merged extends ParseableConfigs
233
260
  ? // Add value inference to properties with choices
234
- // ? PrepareConfigsWithType<OnlyCofigsWithChoice<F, false>> & ValueOf<ExplodeCommandChoicesWithInference<OnlyCofigsWithChoice<F, true>>>
261
+ // ? PrepareConfigsWithType<OnlyConfigsWithChoice<F, false>> & ValueOf<ExplodeCommandChoicesWithInference<OnlyConfigsWithChoice<F, true>>>
235
262
  Simplify<
236
- PrepareConfigsWithType<OnlyCofigsWithChoice<Merged, false>> &
237
- MergeUnion<ValueOf<ExplodeCommandChoicesNoInference<OnlyCofigsWithChoice<Merged, true>>>>
263
+ PrepareConfigsWithType<OnlyConfigsWithChoice<Merged, false>> &
264
+ MergeUnion<ValueOf<ExplodeCommandChoicesNoInference<OnlyConfigsWithChoice<Merged, true>>>>
238
265
  >
239
266
  : never
240
267
  : never;
@@ -1,15 +1,7 @@
1
- declare const _default: {
2
- recommended: import("typescript-eslint").ConfigWithExtends;
3
- base: import("typescript-eslint").ConfigWithExtends;
4
- extends?: import("@typescript-eslint/utils/ts-eslint").FlatConfig.ConfigArray;
5
- files?: (string[] | string)[];
6
- ignores?: string[];
7
- languageOptions?: import("@typescript-eslint/utils/ts-eslint").FlatConfig.LanguageOptions;
8
- linterOptions?: import("@typescript-eslint/utils/ts-eslint").FlatConfig.LinterOptions;
9
- name?: string;
10
- plugins?: import("@typescript-eslint/utils/ts-eslint").FlatConfig.Plugins;
11
- processor?: import("@typescript-eslint/utils/ts-eslint").FlatConfig.Processor | string;
12
- rules?: import("@typescript-eslint/utils/ts-eslint").FlatConfig.Rules;
13
- settings?: import("@typescript-eslint/utils/ts-eslint").FlatConfig.Settings;
14
- };
1
+ declare namespace _default {
2
+ export { recommended };
3
+ export { base };
4
+ }
15
5
  export default _default;
6
+ import recommended from './recommended.js';
7
+ import base from './base.js';
@@ -1,4 +1,3 @@
1
1
  import recommended from './recommended.js';
2
2
  import base from './base.js';
3
- recommended.recommended = recommended;
4
- export default { ...recommended, recommended, base };
3
+ export default { recommended, base };
@@ -1,3 +1,4 @@
1
1
  export declare const isDistFolder: () => boolean;
2
2
  export declare const getPackageRoot: (relativePath?: string) => string;
3
+ export declare const getSourceRoot: (relativePath?: string) => string;
3
4
  export declare const packageJson: any;
package/dist/lib/index.js CHANGED
@@ -4,11 +4,15 @@ import { fileURLToPath } from 'url';
4
4
  const __filename = fileURLToPath(import.meta.url);
5
5
  const __dirname = dirname(__filename);
6
6
  export const isDistFolder = () => {
7
- return basename(join(__dirname, '..')) === 'dist';
7
+ return basename(dirname(__dirname)) === 'dist';
8
8
  };
9
9
  export const getPackageRoot = (relativePath) => {
10
- const sourceRoot = join(__dirname, '..');
11
- const packageDirectory = isDistFolder() ? join(sourceRoot, '..') : sourceRoot;
10
+ const sourceRoot = dirname(__dirname);
11
+ const packageDirectory = isDistFolder() ? dirname(sourceRoot) : sourceRoot;
12
12
  return relativePath ? join(packageDirectory, relativePath) : packageDirectory;
13
13
  };
14
+ export const getSourceRoot = (relativePath) => {
15
+ const sourceRoot = dirname(__dirname);
16
+ return relativePath ? join(sourceRoot, relativePath) : sourceRoot;
17
+ };
14
18
  export const packageJson = JSON.parse(readFileSync(getPackageRoot('package.json')).toString());
@@ -17,7 +17,7 @@
17
17
  * limitations under the License.
18
18
  */
19
19
  /* eslint-disable no-useless-escape */
20
- import { first, flatten, includes, values } from 'lodash-es';
20
+ import { first, flatten, includes } from 'lodash-es';
21
21
  import { tokenMatcher as matchesToken } from 'chevrotain';
22
22
  import { ALPHABETIC, ALPHABETIC_DASH_LOWER, ALPHABETIC_LOWER, ALPHANUMERIC, ALPHANUMERIC_DASH, ALPHANUMERIC_SPACE, ALPHANUMERIC_UNDERSCORE, } from '../built-in-options/validation-patterns.js';
23
23
  const CONSTANT_PATTERN = /^[A-Z_]+$/;
@@ -352,7 +352,7 @@ export default function performAdditionalSyntaxChecks(cst, runtime) {
352
352
  this.visit(context.deploymentConfigValue, context.DEPLOYMENT_KEY[0]);
353
353
  }
354
354
  deploymentConfigValue(context, configKey) {
355
- const configValue = first(first(values(context)));
355
+ const configValue = first(first(Object.values(context)));
356
356
  this.checkDeploymentConfigPropSyntax(configKey, configValue);
357
357
  }
358
358
  }
@@ -16,18 +16,86 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- export declare function getConfigWithDefaults(customOptions?: string | Record<string, any>): any;
20
- export declare function getConfigForClientApplication(options?: any): any;
21
- export declare function getConfigForAuthenticationType(options?: any): any;
22
- export declare function getConfigForPackageName(options?: any): any;
23
- export declare function getConfigForCacheProvider(options?: any): any;
24
- export declare function getConfigForReactive(options?: any): any;
25
- export declare function getConfigForTranslation(options?: any): any;
26
- export declare function getConfigForDatabaseType(options?: any): any;
27
- export declare function getServerConfigForMonolithApplication(customOptions?: any): any;
28
- export declare function getConfigForMonolithApplication(customOptions?: any): any;
29
- export declare function getServerConfigForGatewayApplication(customOptions?: any): any;
30
- export declare function getConfigForGatewayApplication(customOptions?: any): any;
31
- export declare function getServerConfigForMicroserviceApplication(customOptions?: any): any;
32
- export declare function getConfigForMicroserviceApplication(customOptions?: any): any;
33
- export declare function getDefaultConfigForNewApplication(customOptions?: any): any;
19
+ import type { ApplicationConfiguration } from '../types/application/yo-rc.js';
20
+ type ApplicationDefaults = Partial<ApplicationConfiguration>;
21
+ export declare function getConfigWithDefaults(customOptions?: ApplicationDefaults): Partial<{
22
+ jhipsterVersion?: string | undefined;
23
+ baseName: string;
24
+ creationTimestamp?: number | undefined;
25
+ lastLiquibaseTimestamp?: number | undefined;
26
+ blueprints?: {
27
+ name: string;
28
+ }[] | undefined;
29
+ testFrameworks?: string[] | undefined;
30
+ microfrontends?: {
31
+ baseName: string;
32
+ }[] | undefined;
33
+ skipClient?: boolean | undefined;
34
+ skipServer?: boolean | undefined;
35
+ jhiPrefix?: string | undefined;
36
+ entitySuffix?: string | undefined;
37
+ dtoSuffix?: string | undefined;
38
+ pkType?: string | undefined;
39
+ clientPackageManager?: string | undefined;
40
+ jdlStore?: string | undefined;
41
+ skipJhipsterDependencies?: boolean | undefined;
42
+ clientFramework?: "no" | "angular" | "react" | "vue" | undefined;
43
+ clientTheme?: string | undefined;
44
+ clientThemeVariant?: string | undefined;
45
+ clientBundler?: "webpack" | "vite" | undefined;
46
+ microfrontend?: boolean | undefined;
47
+ clientTestFrameworks?: "cypress" | undefined;
48
+ withAdminUi?: boolean | undefined;
49
+ clientRootDir?: string | undefined;
50
+ monorepository?: boolean | undefined;
51
+ packageName?: string | undefined;
52
+ packageFolder?: string | undefined;
53
+ withGeneratedFlag?: boolean | undefined;
54
+ buildTool?: string | undefined;
55
+ packageJsonNodeEngine?: unknown;
56
+ packageJsonType?: "commonjs" | "module" | undefined;
57
+ prettierTabWidth?: number | undefined;
58
+ languages?: unknown[] | undefined;
59
+ enableTranslation?: boolean | undefined;
60
+ nativeLanguage?: string | undefined;
61
+ incrementalChangelog?: boolean | undefined;
62
+ skipFakeData?: boolean | undefined;
63
+ applicationType?: "monolith" | "microservice" | "gateway" | undefined;
64
+ skipUserManagement?: boolean | undefined;
65
+ cacheProvider?: string | undefined;
66
+ enableSwaggerCodegen?: boolean | undefined;
67
+ enableHibernateCache?: boolean | undefined;
68
+ searchEngine?: string | undefined;
69
+ skipCheckLengthOfIdentifier?: boolean | undefined;
70
+ websocket?: string | undefined;
71
+ reactive?: boolean | undefined;
72
+ serverPort?: unknown;
73
+ serviceDiscoveryType?: "no" | "eureka" | "consul" | undefined;
74
+ jwtSecretKey?: string | undefined;
75
+ authenticationType?: "session" | "jwt" | "oauth2" | undefined;
76
+ feignClient?: boolean | undefined;
77
+ syncUserWithIdp?: boolean | undefined;
78
+ defaultPackaging?: "jar" | "war" | undefined;
79
+ databaseType?: "sql" | "mongodb" | "cassandra" | "couchbase" | "neo4j" | "no" | undefined;
80
+ messageBroker?: "no" | "kafka" | "pulsar" | undefined;
81
+ databaseMigration?: "liquibase" | undefined;
82
+ graalvmSupport?: boolean | undefined;
83
+ routes?: unknown[] | undefined;
84
+ prodDatabaseType?: "mysql" | "mariadb" | "postgresql" | "mssql" | "oracle" | undefined;
85
+ devDatabaseType?: string | undefined;
86
+ }>;
87
+ export declare function getConfigForClientApplication(options?: ApplicationDefaults): ApplicationDefaults;
88
+ export declare function getConfigForAuthenticationType(options?: ApplicationDefaults): ApplicationDefaults;
89
+ export declare function getConfigForPackageName(options?: ApplicationDefaults): ApplicationDefaults;
90
+ export declare function getConfigForCacheProvider(options?: ApplicationDefaults): ApplicationDefaults;
91
+ export declare function getConfigForReactive(options?: ApplicationDefaults): ApplicationDefaults;
92
+ export declare function getConfigForTranslation(options?: ApplicationDefaults): ApplicationDefaults;
93
+ export declare function getConfigForDatabaseType(options?: ApplicationDefaults): ApplicationDefaults;
94
+ export declare function getServerConfigForMonolithApplication(customOptions?: ApplicationDefaults): ApplicationDefaults;
95
+ export declare function getConfigForMonolithApplication(customOptions?: ApplicationDefaults): ApplicationDefaults;
96
+ export declare function getServerConfigForGatewayApplication(customOptions?: ApplicationDefaults): ApplicationDefaults;
97
+ export declare function getConfigForGatewayApplication(customOptions?: ApplicationDefaults): ApplicationDefaults;
98
+ export declare function getServerConfigForMicroserviceApplication(customOptions?: ApplicationDefaults): ApplicationDefaults;
99
+ export declare function getConfigForMicroserviceApplication(customOptions?: ApplicationDefaults): ApplicationDefaults;
100
+ export declare function getDefaultConfigForNewApplication(customOptions?: ApplicationDefaults): ApplicationDefaults;
101
+ export {};
@@ -26,8 +26,7 @@ import clientFrameworkTypes from './client-framework-types.js';
26
26
  import buildToolTypes from './build-tool-types.js';
27
27
  const { MONOLITH, MICROSERVICE, GATEWAY } = applicationTypes;
28
28
  const { CONSUL } = serviceDiscoveryTypes;
29
- const { COUCHBASE, CASSANDRA, MONGODB, NEO4J, SQL, POSTGRESQL } = databaseTypes;
30
- const NO_DATABASE_TYPE = databaseTypes.NO;
29
+ const { SQL, POSTGRESQL } = databaseTypes;
31
30
  const { OptionNames, OptionValues } = applicationOptions;
32
31
  const { JWT, OAUTH2 } = authenticationTypes;
33
32
  const { ANGULAR, NO: NO_CLIENT_FRAMEWORK } = clientFrameworkTypes;
@@ -49,7 +48,7 @@ const commonDefaultOptions = {
49
48
  [WEBSOCKET]: OptionValues[WEBSOCKET].no,
50
49
  };
51
50
  export function getConfigWithDefaults(customOptions = {}) {
52
- const applicationType = typeof customOptions === 'string' ? customOptions : customOptions.applicationType;
51
+ const applicationType = customOptions.applicationType;
53
52
  if (applicationType === GATEWAY) {
54
53
  return getConfigForGatewayApplication(customOptions);
55
54
  }
@@ -62,18 +61,28 @@ export function getConfigForClientApplication(options = {}) {
62
61
  if (options[SKIP_CLIENT]) {
63
62
  options[CLIENT_FRAMEWORK] = NO_CLIENT_FRAMEWORK;
64
63
  }
64
+ const clientFramework = options[CLIENT_FRAMEWORK];
65
+ if (clientFramework === NO_CLIENT_FRAMEWORK) {
66
+ return options;
67
+ }
65
68
  if (options[OptionNames.MICROFRONTEND] === undefined) {
66
69
  options[OptionNames.MICROFRONTEND] = Boolean(options[OptionNames.MICROFRONTENDS]?.length);
67
70
  }
68
- const clientFramework = options[CLIENT_FRAMEWORK];
69
- if (clientFramework !== NO_CLIENT_FRAMEWORK) {
70
- if (!options[CLIENT_THEME]) {
71
- options[CLIENT_THEME] = OptionValues[CLIENT_THEME];
72
- options[CLIENT_THEME_VARIANT] = '';
73
- }
74
- else if (options[CLIENT_THEME] !== OptionValues[CLIENT_THEME] && !options[CLIENT_THEME_VARIANT]) {
75
- options[CLIENT_THEME_VARIANT] = 'primary';
76
- }
71
+ if (!options[CLIENT_THEME]) {
72
+ options[CLIENT_THEME] = OptionValues[CLIENT_THEME];
73
+ options[CLIENT_THEME_VARIANT] = '';
74
+ }
75
+ else if (options[CLIENT_THEME] !== OptionValues[CLIENT_THEME] && !options[CLIENT_THEME_VARIANT]) {
76
+ options[CLIENT_THEME_VARIANT] = 'primary';
77
+ }
78
+ if (clientFramework === 'vue') {
79
+ options.clientBundler = options.microfrontend || options.applicationType === 'microservice' ? 'webpack' : 'vite';
80
+ }
81
+ else if (clientFramework === 'react') {
82
+ options.clientBundler = 'webpack';
83
+ }
84
+ else if (clientFramework === 'angular') {
85
+ options.clientBundler = 'webpack';
77
86
  }
78
87
  return options;
79
88
  }
@@ -101,9 +110,10 @@ export function getConfigForPackageName(options = {}) {
101
110
  return options;
102
111
  }
103
112
  export function getConfigForCacheProvider(options = {}) {
104
- if (options[REACTIVE]) {
113
+ if (options[REACTIVE] || options[CACHE_PROVIDER] === undefined) {
105
114
  options[CACHE_PROVIDER] = NO_CACHE_PROVIDER;
106
115
  }
116
+ options[ENABLE_HIBERNATE_CACHE] ??= options[DATABASE_TYPE] === SQL && !options[REACTIVE] && options[CACHE_PROVIDER] !== NO_CACHE_PROVIDER;
107
117
  return options;
108
118
  }
109
119
  export function getConfigForReactive(options = {}) {
@@ -136,17 +146,6 @@ export function getConfigForDatabaseType(options = {}) {
136
146
  options[DEV_DATABASE_TYPE] = options[PROD_DATABASE_TYPE];
137
147
  }
138
148
  }
139
- else if ([MONGODB, COUCHBASE, CASSANDRA, NEO4J, NO_DATABASE_TYPE].includes(options[DATABASE_TYPE])) {
140
- if (NO_DATABASE_TYPE !== options[DATABASE_TYPE]) {
141
- options[ENABLE_HIBERNATE_CACHE] = false;
142
- }
143
- }
144
- if (options[REACTIVE]) {
145
- options[ENABLE_HIBERNATE_CACHE] = false;
146
- }
147
- if (options[ENABLE_HIBERNATE_CACHE] === undefined) {
148
- options[ENABLE_HIBERNATE_CACHE] = true;
149
- }
150
149
  return options;
151
150
  }
152
151
  export function getServerConfigForMonolithApplication(customOptions = {}) {
@@ -168,8 +167,8 @@ export function getConfigForMonolithApplication(customOptions = {}) {
168
167
  let options = getServerConfigForMonolithApplication(customOptions);
169
168
  options = getConfigForClientApplication(options);
170
169
  options = getConfigForPackageName(options);
171
- options = getConfigForCacheProvider(options);
172
170
  options = getConfigForDatabaseType(options);
171
+ options = getConfigForCacheProvider(options);
173
172
  options = getConfigForReactive(options);
174
173
  options = getConfigForTranslation(options);
175
174
  return getConfigForAuthenticationType(options);
@@ -195,8 +194,8 @@ export function getConfigForGatewayApplication(customOptions = {}) {
195
194
  let options = getServerConfigForGatewayApplication(customOptions);
196
195
  options = getConfigForClientApplication(options);
197
196
  options = getConfigForPackageName(options);
198
- options = getConfigForCacheProvider(options);
199
197
  options = getConfigForDatabaseType(options);
198
+ options = getConfigForCacheProvider(options);
200
199
  options = getConfigForReactive(options);
201
200
  options = getConfigForTranslation(options);
202
201
  return getConfigForAuthenticationType(options);
@@ -222,8 +221,8 @@ export function getConfigForMicroserviceApplication(customOptions = {}) {
222
221
  let options = getServerConfigForMicroserviceApplication(customOptions);
223
222
  options = getConfigForClientApplication(options);
224
223
  options = getConfigForPackageName(options);
225
- options = getConfigForCacheProvider(options);
226
224
  options = getConfigForDatabaseType(options);
225
+ options = getConfigForCacheProvider(options);
227
226
  options = getConfigForReactive(options);
228
227
  options = getConfigForTranslation(options);
229
228
  return getConfigForAuthenticationType(options);
@@ -1,3 +1,4 @@
1
+ export declare const getGeneratorRelativeFolder: (generatorName: string) => string;
1
2
  export declare const getGeneratorFolder: (generatorName: string) => string;
2
3
  declare const getGenerator: (generatorName: string) => string;
3
4
  export default getGenerator;
@@ -1,10 +1,14 @@
1
- import { dirname, resolve } from 'path';
1
+ import { dirname, join, resolve } from 'path';
2
2
  import { existsSync } from 'fs';
3
3
  import { fileURLToPath } from 'url';
4
4
  const __filename = fileURLToPath(import.meta.url);
5
5
  const __dirname = dirname(__filename);
6
+ export const getGeneratorRelativeFolder = (generatorName) => {
7
+ generatorName = generatorName.replace('jhipster:', '');
8
+ return join('generators', generatorName.split(':').join('/generators/'));
9
+ };
6
10
  export const getGeneratorFolder = (generatorName) => {
7
- return resolve(__dirname, '../../generators', generatorName.split(':').join('/generators/'));
11
+ return resolve(__dirname, '../..', getGeneratorRelativeFolder(generatorName));
8
12
  };
9
13
  const getGenerator = (generatorName) => {
10
14
  const generatorFolder = getGeneratorFolder(generatorName);
@@ -0,0 +1,6 @@
1
+ import type { GitHubMatrixGroup } from './github-matrix.js';
2
+ export declare const getGithubSamplesGroups: (samplesGroupFolder: string) => Promise<string[]>;
3
+ export declare const getGithubSamplesGroup: (samplesGroupFolder: string, group: string) => Promise<{
4
+ samples: GitHubMatrixGroup;
5
+ warnings: string[];
6
+ }>;
@@ -0,0 +1,56 @@
1
+ import { readFile, readdir } from 'node:fs/promises';
2
+ import { extname, join } from 'node:path';
3
+ import { getUnknownGitHubMatrixGroupProperties } from './github-matrix.js';
4
+ export const getGithubSamplesGroups = async (samplesGroupFolder) => {
5
+ const samplesFolderContent = await readdir(samplesGroupFolder);
6
+ return samplesFolderContent.filter(sample => ['.json', '.js', '.ts', ''].includes(extname(sample)));
7
+ };
8
+ export const getGithubSamplesGroup = async (samplesGroupFolder, group) => {
9
+ const warnings = [];
10
+ let samples = {};
11
+ const samplesFolderContent = await getGithubSamplesGroups(samplesGroupFolder);
12
+ if (samplesFolderContent.includes(`${group}.js`) || samplesFolderContent.includes(`${group}.ts`)) {
13
+ const jsGroup = await import(join(samplesGroupFolder, `${group}.js`));
14
+ samples = Object.fromEntries(Object.entries(jsGroup.default).map(([sample, value]) => [sample, { ...value, 'samples-group': group }]));
15
+ }
16
+ else if (samplesFolderContent.includes(`${group}.json`)) {
17
+ const jsonFile = await readFile(join(samplesGroupFolder, `${group}.json`));
18
+ samples = Object.fromEntries(Object.entries(JSON.parse(jsonFile.toString())).map(([sample, value]) => [
19
+ sample,
20
+ { ...value, 'samples-group': group },
21
+ ]));
22
+ }
23
+ else if (samplesFolderContent.includes(group)) {
24
+ const samplesFolderContent = await readdir(join(samplesGroupFolder, group));
25
+ if (samplesFolderContent.length > 0) {
26
+ // Support jdl files and folder (with .yo-rc.json files)
27
+ samples = Object.fromEntries(samplesFolderContent
28
+ .filter(sample => ['', '.jdl'].includes(extname(sample)))
29
+ .map(sample => [
30
+ sample.replace('.jdl', ''),
31
+ {
32
+ 'samples-group': group,
33
+ 'sample-type': extname(sample) === '.jdl' ? 'jdl' : 'yo-rc',
34
+ },
35
+ ]));
36
+ if (samplesFolderContent.includes('samples.json')) {
37
+ const jsonFile = await readFile(join(samplesGroupFolder, group, 'samples.json'));
38
+ const jsonSamples = JSON.parse(jsonFile.toString());
39
+ for (const [sample, value] of Object.entries(jsonSamples)) {
40
+ if (!samples[sample]) {
41
+ throw new Error(`Sample ${sample} not found in ${group}`);
42
+ }
43
+ samples[sample] = { ...samples[sample], ...value };
44
+ }
45
+ }
46
+ }
47
+ }
48
+ if (!samples) {
49
+ throw new Error();
50
+ }
51
+ const unknownProperties = getUnknownGitHubMatrixGroupProperties(samples);
52
+ if (unknownProperties.length) {
53
+ warnings.push(`Unknown properties in ${group}: ${unknownProperties.join(', ')}`);
54
+ }
55
+ return { samples, warnings };
56
+ };
@@ -0,0 +1,38 @@
1
+ export type GitHubMatrix = {
2
+ os: string;
3
+ 'node-version': string;
4
+ 'java-version': string;
5
+ 'default-environment': string;
6
+ 'job-name': string;
7
+ sample: string;
8
+ 'samples-group'?: string;
9
+ 'sample-type'?: string;
10
+ args?: string;
11
+ 'jwt-secret-key'?: string;
12
+ jdl?: string;
13
+ };
14
+ export type GitHubMatrixGroup = Record<string, Partial<Omit<GitHubMatrix, 'job-name'>> & {
15
+ disabled?: boolean;
16
+ }>;
17
+ export type GitHubMatrixOutput = {
18
+ include: GitHubMatrix[];
19
+ };
20
+ export declare const getUnknownGitHubMatrixProperties: (matrix: Partial<GitHubMatrix>) => string[];
21
+ export declare const getUnknownGitHubMatrixGroupProperties: (matrixRecord: GitHubMatrixGroup) => string[];
22
+ export declare const defaultGithubEnvironment: {
23
+ os: string;
24
+ 'node-version': string;
25
+ 'java-version': string;
26
+ 'npm-version': any;
27
+ 'default-environment': string;
28
+ 'jwt-secret-key': string;
29
+ };
30
+ type RandomEnvironmentOptions = {
31
+ useVersionPlaceholders?: boolean;
32
+ javaVersions?: string[];
33
+ nodeVersions?: string[];
34
+ };
35
+ export declare const convertToGitHubMatrix: (matrix: GitHubMatrixGroup, options?: {
36
+ randomEnvironment?: boolean;
37
+ } & RandomEnvironmentOptions) => GitHubMatrixOutput;
38
+ export {};
@@ -0,0 +1,72 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { readFileSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { RECOMMENDED_JAVA_VERSION, RECOMMENDED_NODE_VERSION } from '../../generators/index.js';
5
+ import { getPackageRoot } from '../index.js';
6
+ import { JAVA_COMPATIBLE_VERSIONS, JAVA_VERSION, NODE_VERSION } from '../../generators/generator-constants.js';
7
+ const knwonGitHubMatrixProperties = [
8
+ 'os',
9
+ 'node-version',
10
+ 'java-version',
11
+ 'default-environment',
12
+ 'job-name',
13
+ 'sample',
14
+ 'samples-group',
15
+ 'sample-type',
16
+ 'args',
17
+ 'jwt-secret',
18
+ 'jdl',
19
+ ];
20
+ export const getUnknownGitHubMatrixProperties = (matrix) => {
21
+ return Object.keys(matrix).filter(key => !knwonGitHubMatrixProperties.includes(key));
22
+ };
23
+ export const getUnknownGitHubMatrixGroupProperties = (matrixRecord) => {
24
+ let unknownProperties = [];
25
+ for (const matrix of Object.values(matrixRecord)) {
26
+ unknownProperties = [...new Set([...unknownProperties, ...getUnknownGitHubMatrixProperties(matrix)])];
27
+ }
28
+ return unknownProperties;
29
+ };
30
+ const NPM_VERSION = JSON.parse(readFileSync(join(getPackageRoot(), 'generators/common/resources/package.json'), 'utf-8')).devDependencies
31
+ .npm;
32
+ export const defaultGithubEnvironment = {
33
+ os: 'ubuntu-latest',
34
+ 'node-version': RECOMMENDED_NODE_VERSION,
35
+ 'java-version': RECOMMENDED_JAVA_VERSION,
36
+ 'npm-version': NPM_VERSION,
37
+ 'default-environment': 'prod',
38
+ 'jwt-secret-key': 'ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=',
39
+ };
40
+ const randomReproducibleValue = (seed, choices, options) => {
41
+ const { useVersionPlaceholders } = options ?? {};
42
+ const index = createHash('shake256', { outputLength: 1 }).update(seed, 'utf8').digest('binary').charCodeAt(0) % choices.length;
43
+ if (useVersionPlaceholders) {
44
+ return `[${index}]`;
45
+ }
46
+ return choices[index];
47
+ };
48
+ const randomEnvironmentMatrix = (key, options) => {
49
+ const { useVersionPlaceholders, javaVersions = [JAVA_VERSION, ...JAVA_COMPATIBLE_VERSIONS], nodeVersions = [NODE_VERSION, '18', '20'], } = options;
50
+ const javaVersion = randomReproducibleValue(`java-${key}`, javaVersions, { useVersionPlaceholders });
51
+ const nodeVersion = randomReproducibleValue(`node-${key}`, nodeVersions, { useVersionPlaceholders });
52
+ return {
53
+ 'job-name': `${key} (n${nodeVersion}/j${javaVersion})`,
54
+ 'java-version': javaVersion,
55
+ 'node-version': nodeVersion,
56
+ };
57
+ };
58
+ export const convertToGitHubMatrix = (matrix, options) => {
59
+ const { randomEnvironment, useVersionPlaceholders, ...randomEnvironmentOptions } = options ?? {};
60
+ return {
61
+ include: Object.entries(matrix)
62
+ .filter(([_key, value]) => !value.disabled)
63
+ .map(([key, value]) => ({
64
+ 'job-name': key,
65
+ sample: key,
66
+ ...defaultGithubEnvironment,
67
+ ...(useVersionPlaceholders ? { 'java-version': 'JAVA-VERSION', 'node-version': 'NODE-VERSION', 'npm-version': 'NPM-VERSION' } : {}),
68
+ ...value,
69
+ ...(randomEnvironment ? randomEnvironmentMatrix(key, { useVersionPlaceholders, ...randomEnvironmentOptions }) : {}),
70
+ })),
71
+ };
72
+ };
@@ -3,6 +3,7 @@ export declare const parseIssue: (issue: string) => undefined | {
3
3
  repository: string;
4
4
  issue: string;
5
5
  };
6
+ export declare const getGithubOutputFile: () => string | undefined;
6
7
  export declare const setGithubTaskOutput: (name: string, value: string | boolean | number) => void;
7
8
  export declare const getGithubIssue: ({ owner, repository, issue }: {
8
9
  owner: string;
@@ -10,11 +10,15 @@ export const parseIssue = (issue) => {
10
10
  }
11
11
  return undefined;
12
12
  };
13
+ export const getGithubOutputFile = () => {
14
+ const filePath = process.env.GITHUB_OUTPUT;
15
+ return filePath && existsSync(filePath) ? filePath : undefined;
16
+ };
13
17
  export const setGithubTaskOutput = (name, value) => {
14
18
  const delimiter = `delimiter_${randomUUID()}`;
15
19
  const output = `${name}<<${delimiter}${EOL}${value}${EOL}${delimiter}${EOL}`;
16
- const filePath = process.env.GITHUB_OUTPUT;
17
- if (filePath && existsSync(filePath)) {
20
+ const filePath = getGithubOutputFile();
21
+ if (filePath) {
18
22
  appendFileSync(filePath, output, { encoding: 'utf8' });
19
23
  }
20
24
  else {