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
@@ -25,7 +25,7 @@ import { AlertService } from 'app/core/util/alert.service';
25
25
 
26
26
  @Injectable()
27
27
  export class NotificationInterceptor implements HttpInterceptor {
28
- private alertService = inject(AlertService);
28
+ private readonly alertService = inject(AlertService);
29
29
 
30
30
  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
31
31
  return next.handle(request).pipe(
@@ -43,14 +43,14 @@ export class TrackerService {
43
43
  private rxStomp?: RxStomp;
44
44
  private routerSubscription: Subscription | null = null;
45
45
 
46
- private router = inject(Router);
47
- private accountService = inject(AccountService);
46
+ private readonly router = inject(Router);
47
+ private readonly accountService = inject(AccountService);
48
48
  <%_ if (authenticationTypeSession) { _%>
49
- private csrfService = inject(CSRFService);
49
+ private readonly csrfService = inject(CSRFService);
50
50
  <%_ } else if (authenticationTypeJwt) { _%>
51
- private authServerProvider = inject(AuthServerProvider);
51
+ private readonly authServerProvider = inject(AuthServerProvider);
52
52
  <%_ } _%>
53
- private location = inject(Location);
53
+ private readonly location = inject(Location);
54
54
 
55
55
  setup(): void {
56
56
  this.rxStomp = new RxStomp();
@@ -52,9 +52,9 @@ export class AlertService {
52
52
  private alertId = 0;
53
53
  private alerts: Alert[] = [];
54
54
 
55
- private sanitizer = inject(DomSanitizer);
55
+ private readonly sanitizer = inject(DomSanitizer);
56
56
  <%_ if (enableTranslation) { _%>
57
- private translateService = inject(TranslateService);
57
+ private readonly translateService = inject(TranslateService);
58
58
  <%_ } _%>
59
59
 
60
60
  clear(): void {
@@ -137,10 +137,10 @@ export class <%= componentName %> implements OnInit {
137
137
  isFirstFetch = computed(() => Object.keys(this.links()).length === 0);
138
138
  <%_ } _%>
139
139
 
140
- public router = inject(Router);
141
- protected <%= entityInstance %>Service = inject(<%= entityAngularName %>Service);
142
- protected activatedRoute = inject(ActivatedRoute);
143
- protected sortService = inject(SortService);
140
+ public readonly router = inject(Router);
141
+ protected readonly <%= entityInstance %>Service = inject(<%= entityAngularName %>Service);
142
+ protected readonly activatedRoute = inject(ActivatedRoute);
143
+ protected readonly sortService = inject(SortService);
144
144
  <%_ if (paginationInfiniteScroll) { _%>
145
145
  protected parseLinks = inject(ParseLinks);
146
146
  <%_ } _%>
@@ -84,8 +84,8 @@ export type EntityArrayResponseType = HttpResponse<I<%= entityAngularName %>[]>;
84
84
 
85
85
  @Injectable({ providedIn: 'root' })
86
86
  export class <%= entityAngularName %>Service {
87
- protected http = inject(HttpClient);
88
- protected applicationConfigService = inject(ApplicationConfigService);
87
+ protected readonly http = inject(HttpClient);
88
+ protected readonly applicationConfigService = inject(ApplicationConfigService);
89
89
 
90
90
  protected resourceUrl = this.applicationConfigService.getEndpointFor('api/<%= entityApiUrl %>'<% if ((applicationTypeGateway || applicationTypeMicroservice) && locals.microserviceName) { %>, '<%= microserviceName.toLowerCase() %>'<% } %>);
91
91
  <%_ if (searchEngineAny) { _%>
@@ -49,11 +49,11 @@ export default class HomeComponent implements OnInit<% if (!authenticationTypeOa
49
49
  private readonly destroy$ = new Subject<void>();
50
50
  <%_ } _%>
51
51
 
52
- private accountService = inject(AccountService);
52
+ private readonly accountService = inject(AccountService);
53
53
  <%_ if (!authenticationTypeOauth2) { _%>
54
- private router = inject(Router);
54
+ private readonly router = inject(Router);
55
55
  <%_ } else { _%>
56
- private loginService = inject(LoginService);
56
+ private readonly loginService = inject(LoginService);
57
57
  <%_ } _%>
58
58
 
59
59
  ngOnInit(): void {
@@ -40,18 +40,18 @@ import PageRibbonComponent from '../profiles/page-ribbon.component';
40
40
  })
41
41
  export default class MainComponent implements OnInit {
42
42
  <%_ if (enableTranslation) { _%>
43
- private renderer: Renderer2;
43
+ private readonly renderer: Renderer2;
44
44
  <%_ } _%>
45
45
 
46
- private router = inject(Router);
47
- private appPageTitleStrategy = inject(AppPageTitleStrategy);
48
- private accountService = inject(AccountService);
46
+ private readonly router = inject(Router);
47
+ private readonly appPageTitleStrategy = inject(AppPageTitleStrategy);
48
+ private readonly accountService = inject(AccountService);
49
49
  <%_ if (enableI18nRTL) { _%>
50
- private findLanguageFromKeyPipe = inject(FindLanguageFromKeyPipe);
50
+ private readonly findLanguageFromKeyPipe = inject(FindLanguageFromKeyPipe);
51
51
  <%_ } _%>
52
52
  <%_ if (enableTranslation) { _%>
53
- private translateService = inject(TranslateService);
54
- private rootRenderer = inject(RendererFactory2);
53
+ private readonly translateService = inject(TranslateService);
54
+ private readonly rootRenderer = inject(RendererFactory2);
55
55
  <%_ } _%>
56
56
  <%_ if (enableTranslation) { _%>
57
57
 
@@ -70,19 +70,19 @@ export default class NavbarComponent implements OnInit {
70
70
  <%_ } _%>
71
71
  <%_ } _%>
72
72
 
73
- private loginService = inject(LoginService);
73
+ private readonly loginService = inject(LoginService);
74
74
  <%_ if (enableTranslation) { _%>
75
- private translateService = inject(TranslateService);
76
- private stateStorageService = inject(StateStorageService);
75
+ private readonly translateService = inject(TranslateService);
76
+ private readonly stateStorageService = inject(StateStorageService);
77
77
  <%_ if (applicationTypeGateway && microfrontend) { _%>
78
- private injector = inject(Injector);
78
+ private readonly injector = inject(Injector);
79
79
  <%_ } _%>
80
80
  <%_ } _%>
81
81
  <%_ if (applicationTypeGateway && microfrontend) { _%>
82
- private accountService = inject(AccountService);
82
+ private readonly accountService = inject(AccountService);
83
83
  <%_ } _%>
84
- private profileService = inject(ProfileService);
85
- private router = inject(Router);
84
+ private readonly profileService = inject(ProfileService);
85
+ private readonly router = inject(Router);
86
86
 
87
87
  constructor() {
88
88
  if (VERSION) {
@@ -39,7 +39,7 @@ import { ProfileService } from './profile.service';
39
39
  export default class PageRibbonComponent implements OnInit {
40
40
  ribbonEnv$?: Observable<string | undefined>;
41
41
 
42
- private profileService = inject(ProfileService);
42
+ private readonly profileService = inject(ProfileService);
43
43
 
44
44
  ngOnInit(): void {
45
45
  this.ribbonEnv$ = this.profileService.getProfileInfo().pipe(map(profileInfo => profileInfo.ribbonEnv));
@@ -26,10 +26,10 @@ import { ProfileInfo, InfoResponse } from './profile-info.model';
26
26
 
27
27
  @Injectable({ providedIn: 'root' })
28
28
  export class ProfileService {
29
- private http = inject(HttpClient);
30
- private applicationConfigService = inject(ApplicationConfigService);
29
+ private readonly http = inject(HttpClient);
30
+ private readonly applicationConfigService = inject(ApplicationConfigService);
31
31
 
32
- private infoUrl = this.applicationConfigService.getEndpointFor('management/info');
32
+ private readonly infoUrl = this.applicationConfigService.getEndpointFor('management/info');
33
33
  private profileInfo$?: Observable<ProfileInfo>;
34
34
 
35
35
  getProfileInfo(): Observable<ProfileInfo> {
@@ -41,9 +41,9 @@ export default class LoginComponent implements OnInit, AfterViewInit {
41
41
  rememberMe: new FormControl(false, { nonNullable: true, validators: [Validators.required] }),
42
42
  });
43
43
 
44
- private accountService = inject(AccountService);
45
- private loginService = inject(LoginService);
46
- private router = inject(Router);
44
+ private readonly accountService = inject(AccountService);
45
+ private readonly loginService = inject(LoginService);
46
+ private readonly router = inject(Router);
47
47
 
48
48
  ngOnInit(): void {
49
49
  // if already authenticated then navigate to home page
@@ -44,14 +44,14 @@ import { Login } from './login.model';
44
44
  @Injectable({ providedIn: 'root' })
45
45
  export class LoginService {
46
46
  <%_ if (authenticationTypeSession) { _%>
47
- private applicationConfigService = inject(ApplicationConfigService);
47
+ private readonly applicationConfigService = inject(ApplicationConfigService);
48
48
  <%_ } _%>
49
49
  <%_ if (authenticationTypeOauth2) { _%>
50
- private location = inject(Location);
50
+ private readonly location = inject(Location);
51
51
  <%_ } else { _%>
52
- private accountService = inject(AccountService);
52
+ private readonly accountService = inject(AccountService);
53
53
  <%_ } _%>
54
- private authServerProvider = inject(AuthServerProvider);
54
+ private readonly authServerProvider = inject(AuthServerProvider);
55
55
 
56
56
  <%_ if (authenticationTypeOauth2) { _%>
57
57
  login(): void {
@@ -40,10 +40,10 @@ export class AlertErrorComponent implements OnDestroy {
40
40
  errorListener: Subscription;
41
41
  httpErrorListener: Subscription;
42
42
 
43
- private alertService = inject(AlertService);
44
- private eventManager = inject(EventManager);
43
+ private readonly alertService = inject(AlertService);
44
+ private readonly eventManager = inject(EventManager);
45
45
  <% if (enableTranslation) { %>
46
- private translateService = inject(TranslateService);
46
+ private readonly translateService = inject(TranslateService);
47
47
  <% } %>
48
48
 
49
49
  constructor() {
@@ -31,7 +31,7 @@ import { AlertService, Alert } from 'app/core/util/alert.service';
31
31
  export class AlertComponent implements OnInit, OnDestroy {
32
32
  alerts = signal<Alert[]>([]);
33
33
 
34
- private alertService = inject(AlertService);
34
+ private readonly alertService = inject(AlertService);
35
35
 
36
36
  ngOnInit(): void {
37
37
  this.alerts.set(this.alertService.get());
@@ -38,8 +38,8 @@ import { AccountService } from 'app/core/auth/account.service';
38
38
  export default class HasAnyAuthorityDirective {
39
39
  public authorities = input<string | string[]>([], { alias: '<%= jhiPrefix %>HasAnyAuthority' });
40
40
 
41
- private templateRef = inject(TemplateRef<any>);
42
- private viewContainerRef = inject(ViewContainerRef);
41
+ private readonly templateRef = inject(TemplateRef<any>);
42
+ private readonly viewContainerRef = inject(ViewContainerRef);
43
43
 
44
44
  constructor() {
45
45
  const accountService = inject(AccountService);
@@ -36,8 +36,8 @@ export default class TranslateDirective implements OnChanges, OnInit, OnDestroy
36
36
 
37
37
  private readonly directiveDestroyed = new Subject();
38
38
 
39
- private el = inject(ElementRef);
40
- private translateService = inject(TranslateService);
39
+ private readonly el = inject(ElementRef);
40
+ private readonly translateService = inject(TranslateService);
41
41
 
42
42
  ngOnInit(): void {
43
43
  this.translateService.onLangChange.pipe(takeUntil(this.directiveDestroyed)).subscribe(() => {
@@ -42,9 +42,9 @@ function lazyTranslatePartialLoader(http: HttpClient): TranslateLoader {
42
42
  ],
43
43
  })
44
44
  export class LazyTranslationModule {
45
- private translateService = inject(TranslateService);
46
- private translateLoader = inject(TranslateLoader);
47
- private stateStorageService = inject(StateStorageService);
45
+ private readonly translateService = inject(TranslateService);
46
+ private readonly translateLoader = inject(TranslateLoader);
47
+ private readonly stateStorageService = inject(StateStorageService);
48
48
 
49
49
  constructor() {
50
50
  const { currentLang } = this.translateService.store;
@@ -35,7 +35,7 @@ export class SortByDirective {
35
35
  protected sortAscIcon = faSortUp;
36
36
  protected sortDescIcon = faSortDown;
37
37
 
38
- private sort = inject(SortDirective, { host: true });
38
+ private readonly sort = inject(SortDirective, { host: true });
39
39
 
40
40
  constructor() {
41
41
  effect(() => {
@@ -21,7 +21,7 @@ import { SortState } from './sort-state';
21
21
 
22
22
  @Injectable({ providedIn: 'root' })
23
23
  export class SortService {
24
- private collator = new Intl.Collator(undefined, {
24
+ private readonly collator = new Intl.Collator(undefined, {
25
25
  numeric: true,
26
26
  sensitivity: 'base',
27
27
  });
@@ -43,6 +43,9 @@ export type JHipsterGeneratorOptions = BaseOptions &
43
43
  jhipsterContext?: any;
44
44
  composeWithLocalBlueprint?: boolean;
45
45
 
46
+ /** boostrap options */
47
+ applyDefaults?: <const data = any>(data: data) => data;
48
+
46
49
  /* generate-blueprint options */
47
50
  localBlueprint?: boolean;
48
51
 
@@ -118,16 +121,19 @@ export type CascatedEditFileCallback<Generator = CoreGenerator> = (
118
121
  ...callbacks: EditFileCallback<Generator>[]
119
122
  ) => CascatedEditFileCallback<Generator>;
120
123
 
124
+ type DataCallback<Type, DataType = ApplicationType<Entity>, Generator = CoreGenerator> = Type | ((this: Generator, data: DataType) => Type);
125
+
121
126
  export type WriteFileTemplate<DataType = ApplicationType<Entity>, Generator = CoreGenerator> =
122
127
  | string
123
128
  | ((this: Generator, data: DataType, filePath: string) => string)
124
129
  | {
130
+ condition?: DataCallback<boolean, DataType, Generator>;
125
131
  /** source file */
126
- sourceFile?: string | ((this: Generator, data: DataType) => string);
132
+ sourceFile?: DataCallback<string, DataType, Generator>;
127
133
  /** destination file */
128
- destinationFile?: string | ((this: Generator, destinationFile: DataType) => string);
134
+ destinationFile?: DataCallback<string, DataType, Generator>;
129
135
  /** @deprecated, use sourceFile instead */
130
- file?: string | ((this: Generator, data: DataType) => string);
136
+ file?: DataCallback<string, DataType, Generator>;
131
137
  /** @deprecated, use destinationFile instead */
132
138
  renameTo?: string | ((this: Generator, data: DataType, filePath: string) => string);
133
139
  /** transforms (files processing) to be applied */
@@ -136,7 +142,7 @@ export type WriteFileTemplate<DataType = ApplicationType<Entity>, Generator = Co
136
142
  binary?: boolean;
137
143
  /** ejs options. Refer to https://ejs.co/#docs */
138
144
  options?: Record<string, object>;
139
- override?: boolean | ((this: Generator, data: DataType) => boolean);
145
+ override?: DataCallback<boolean, DataType, Generator>;
140
146
  };
141
147
 
142
148
  export type WriteFileBlock<DataType = ApplicationType<Entity>, Generator = CoreGenerator> = {
@@ -16,6 +16,10 @@ export default class JHipsterBaseBlueprintGenerator<TaskTypes extends BaseTaskTy
16
16
  * Filter generator's tasks in case the blueprint should be responsible on queueing those tasks.
17
17
  */
18
18
  delegateTasksToBlueprint<TaskGroupType>(tasksGetter: () => TaskGroupType): TaskGroupType;
19
+ /**
20
+ * Utility method to get typed objects for autocomplete.
21
+ */
22
+ asAnyTaskGroup<const K extends string>(taskGroup: GenericTaskGroup<this, any, K>): GenericTaskGroup<any, any, K>;
19
23
  /**
20
24
  * Priority API stub for blueprints.
21
25
  *
@@ -82,6 +82,12 @@ export default class JHipsterBaseBlueprintGenerator extends CoreGenerator {
82
82
  delegateTasksToBlueprint(tasksGetter) {
83
83
  return this.delegateToBlueprint ? {} : tasksGetter();
84
84
  }
85
+ /**
86
+ * Utility method to get typed objects for autocomplete.
87
+ */
88
+ asAnyTaskGroup(taskGroup) {
89
+ return taskGroup;
90
+ }
85
91
  /**
86
92
  * Priority API stub for blueprints.
87
93
  *
@@ -452,8 +458,11 @@ export default class JHipsterBaseBlueprintGenerator extends CoreGenerator {
452
458
  async _configureBlueprints() {
453
459
  let argvBlueprints = this.options.blueprints || '';
454
460
  // check for old single blueprint declaration
455
- const { blueprint } = this.options;
461
+ let { blueprint } = this.options;
456
462
  if (blueprint) {
463
+ if (typeof blueprint === 'string') {
464
+ blueprint = [blueprint];
465
+ }
457
466
  this.log.warn('--blueprint option is deprecated. Please use --blueprints instead');
458
467
  argvBlueprints = union(blueprint, argvBlueprints.split(',')).join(',');
459
468
  }
@@ -89,6 +89,8 @@ export default class SharedData {
89
89
  removeFiles,
90
90
  customizeRemoveFiles: [],
91
91
  cleanupFiles: async (cleanup) => {
92
+ if (!jhipsterOldVersion)
93
+ return;
92
94
  await Promise.all(Object.entries(cleanup).map(async ([version, files]) => {
93
95
  const stringFiles = [];
94
96
  for (const file of files) {
@@ -22,7 +22,7 @@ declare class RandexpWithFaker extends Randexp {
22
22
  faker: Faker;
23
23
  constructor(regexp: string | RegExp, flags: string | undefined, faker: Faker);
24
24
  }
25
- declare class FakerWithRandexp extends Faker {
25
+ export declare class FakerWithRandexp extends Faker {
26
26
  createRandexp(regexp: string | RegExp, flags?: string): RandexpWithFaker;
27
27
  }
28
28
  /**
@@ -34,7 +34,7 @@ class RandexpWithFaker extends Randexp {
34
34
  };
35
35
  }
36
36
  }
37
- class FakerWithRandexp extends Faker {
37
+ export class FakerWithRandexp extends Faker {
38
38
  createRandexp(regexp, flags) {
39
39
  return new RandexpWithFaker(regexp, flags, this);
40
40
  }
@@ -51,8 +51,16 @@ export function parseChangelog(changelogDate) {
51
51
  if (changelogDate.length !== 14) {
52
52
  throw new Error(`changelogDate ${changelogDate} is not a valid changelogDate.`);
53
53
  }
54
- const formattedDate = `${changelogDate.substring(0, 4)}-${changelogDate.substring(4, 6)}-${changelogDate.substring(6, 8)}T${changelogDate.substring(8, 10)}:${changelogDate.substring(10, 12)}:${changelogDate.substring(12, 14)}+00:00`;
55
- return new Date(Date.parse(formattedDate));
54
+ const zeroFallback = (val, fallback) => (/^0+$/.test(val) ? fallback : val);
55
+ const year = zeroFallback(changelogDate.substring(0, 4), '2024');
56
+ const month = zeroFallback(changelogDate.substring(4, 6), '01');
57
+ const day = zeroFallback(changelogDate.substring(6, 8), '01');
58
+ const formattedDate = `${year}-${month}-${day}T${changelogDate.substring(8, 10)}:${changelogDate.substring(10, 12)}:${changelogDate.substring(12, 14)}+00:00`;
59
+ const parsedTimestamp = Date.parse(formattedDate);
60
+ if (isNaN(parsedTimestamp)) {
61
+ throw new Error(`changelogDate ${changelogDate} is not a valid date.`);
62
+ }
63
+ return new Date(parsedTimestamp);
56
64
  }
57
65
  /**
58
66
  * Parse creationTimestamp option
@@ -118,7 +118,12 @@ export default function prepareEntity(entityWithConfig, generator, application)
118
118
  const entitySuffix = entityWithConfig.entitySuffix ?? application.entitySuffix;
119
119
  mutateData(entityWithConfig, entityDefaultConfig, BASE_TEMPLATE_DATA);
120
120
  if (entityWithConfig.changelogDate) {
121
- entityWithConfig.changelogDateForRecent = parseChangelog(String(entityWithConfig.changelogDate));
121
+ try {
122
+ entityWithConfig.changelogDateForRecent = parseChangelog(String(entityWithConfig.changelogDate));
123
+ }
124
+ catch (error) {
125
+ throw new Error(`Error parsing changelog date for entity ${entityName}: ${error.message}`, { cause: error });
126
+ }
122
127
  }
123
128
  entityWithConfig.entityAngularJSSuffix = entityWithConfig.angularJSSuffix;
124
129
  if (entityWithConfig.entityAngularJSSuffix && !entityWithConfig.entityAngularJSSuffix.startsWith('-')) {
@@ -101,15 +101,24 @@ const fakeStringTemplateForFieldName = columnName => {
101
101
  */
102
102
  function generateFakeDataForField(field, faker, changelogDate, type = 'csv') {
103
103
  let data;
104
+ for (const prop of ['fieldValidateRulesMax', 'fieldValidateRulesMin', 'fieldValidateRulesMaxlength', 'fieldValidateRulesMinlength']) {
105
+ if (prop in field) {
106
+ try {
107
+ field[prop] = parseInt(field[prop], 10);
108
+ }
109
+ catch {
110
+ throw new Error(`Error parsing ${prop} for field ${field.fieldName}`);
111
+ }
112
+ }
113
+ }
104
114
  if (field.fakerTemplate) {
105
- data = faker.faker(field.fakerTemplate);
115
+ data = faker.helpers.fake(field.fakerTemplate);
106
116
  }
107
- else if (field.fieldValidate && field.fieldValidateRules.includes('pattern')) {
108
- const re = field.createRandexp();
109
- if (!re) {
117
+ else if (field.fieldValidate && field.fieldValidateRules?.includes('pattern')) {
118
+ const generated = field.generateFakeDataFromPattern();
119
+ if (!generated) {
110
120
  return undefined;
111
121
  }
112
- const generated = re.gen();
113
122
  if (type === 'csv' || type === 'cypress') {
114
123
  data = generated.replace(/"/g, '');
115
124
  }
@@ -122,7 +131,7 @@ function generateFakeDataForField(field, faker, changelogDate, type = 'csv') {
122
131
  }
123
132
  }
124
133
  else if (field.fieldIsEnum) {
125
- if (field.fieldValues.length !== 0) {
134
+ if (field.enumValues && field.enumValues.length > 0) {
126
135
  const enumValues = field.enumValues;
127
136
  data = enumValues[faker.number.int(enumValues.length - 1)].name;
128
137
  }
@@ -137,15 +146,15 @@ function generateFakeDataForField(field, faker, changelogDate, type = 'csv') {
137
146
  }
138
147
  else if ([FLOAT, '${floatType}', DOUBLE, BIG_DECIMAL].includes(field.fieldType)) {
139
148
  data = faker.number.float({
140
- max: field.fieldValidateRulesMax ? parseInt(field.fieldValidateRulesMax, 10) : 32767,
141
- min: field.fieldValidateRulesMin ? parseInt(field.fieldValidateRulesMin, 10) : 0,
149
+ max: field.fieldValidateRulesMax ?? 32767,
150
+ min: field.fieldValidateRulesMin ?? 0,
142
151
  multipleOf: 0.01,
143
152
  });
144
153
  }
145
154
  else if ([INTEGER, LONG, DURATION].includes(field.fieldType)) {
146
155
  data = faker.number.int({
147
- max: field.fieldValidateRulesMax ? parseInt(field.fieldValidateRulesMax, 10) : 32767,
148
- min: field.fieldValidateRulesMin ? parseInt(field.fieldValidateRulesMin, 10) : 0,
156
+ max: field.fieldValidateRulesMax ?? 32767,
157
+ min: field.fieldValidateRulesMin ?? 0,
149
158
  });
150
159
  }
151
160
  else if ([INSTANT, ZONED_DATE_TIME, LOCAL_DATE].includes(field.fieldType)) {
@@ -191,16 +200,16 @@ function generateFakeDataForField(field, faker, changelogDate, type = 'csv') {
191
200
  data = Buffer.from(data).toString('base64');
192
201
  }
193
202
  // Validation rules
194
- if (data !== undefined && field.fieldValidate === true) {
203
+ if (data !== undefined && field.fieldValidate === true && field.fieldValidateRules) {
204
+ const { fieldValidateRulesMinlength = 0, fieldValidateRulesMaxlength } = field;
195
205
  // manage String max length
196
- if (field.fieldValidateRules.includes(MAXLENGTH)) {
206
+ if (field.fieldValidateRules.includes(MAXLENGTH) && fieldValidateRulesMaxlength !== undefined) {
197
207
  const maxlength = field.fieldValidateRulesMaxlength;
198
208
  data = data.substring(0, maxlength);
199
209
  }
200
210
  // manage String min length
201
- if (field.fieldValidateRules.includes(MINLENGTH)) {
202
- const minlength = field.fieldValidateRulesMinlength;
203
- data = data.length > minlength ? data : data + 'X'.repeat(minlength - data.length);
211
+ if (field.fieldValidateRules.includes(MINLENGTH) && fieldValidateRulesMinlength !== undefined) {
212
+ data = data.length > fieldValidateRulesMinlength ? data : data + 'X'.repeat(fieldValidateRulesMinlength - data.length);
204
213
  }
205
214
  // test if generated data is still compatible with the regexp as we potentially modify it with min/maxLength
206
215
  if (field.fieldValidateRules.includes(PATTERN) && !new RegExp(`^${field.fieldValidateRulesPattern}$`).test(data)) {
@@ -212,7 +221,7 @@ function generateFakeDataForField(field, faker, changelogDate, type = 'csv') {
212
221
  if (type === 'ts' && ![BOOLEAN, INTEGER, LONG, FLOAT, '${floatType}', DOUBLE, BIG_DECIMAL].includes(field.fieldType)) {
213
222
  data = `'${typeof data === 'string' ? data.replace(/\\/g, '\\\\').replace(/'/g, "\\'") : data}'`;
214
223
  }
215
- else if (type === 'csv' && field.fieldValidate && field.fieldValidateRules.includes(PATTERN)) {
224
+ else if (type === 'csv' && field.fieldValidate && field.fieldValidateRules?.includes(PATTERN)) {
216
225
  data = `"${typeof data === 'string' ? data.replace(/"/g, '\\"') : data}"`;
217
226
  }
218
227
  }
@@ -306,6 +315,21 @@ function prepareCommonFieldForTemplates(entityWithConfig, field, generator) {
306
315
  field.maxlength = field.fieldValidateRulesMaxlength || 255;
307
316
  }
308
317
  const faker = entityWithConfig.faker;
318
+ field.generateFakeDataFromPattern = () => {
319
+ // check if regex is valid. If not, issue warning and we skip fake data generation.
320
+ try {
321
+ new RegExp(field.fieldValidateRulesPattern);
322
+ }
323
+ catch {
324
+ generator.log.warn(`${field.fieldName} pattern is not valid: ${field.fieldValidateRulesPattern}. Skipping generating fake data. `);
325
+ return undefined;
326
+ }
327
+ const re = faker.createRandexp(field.fieldValidateRulesPattern);
328
+ if (!re) {
329
+ generator.log.warn(`Error creating generator for pattern ${field.fieldValidateRulesPattern}`);
330
+ }
331
+ return re?.gen();
332
+ };
309
333
  field.createRandexp = () => {
310
334
  // check if regex is valid. If not, issue warning and we skip fake data generation.
311
335
  try {
@@ -1,4 +1,4 @@
1
1
  import type CoreGenerator from '../../base-core/generator.js';
2
2
  import type { Relationship } from '../../../lib/types/application/relationship.js';
3
3
  import type { Entity } from '../../../lib/types/application/entity.js';
4
- export default function prepareRelationship(entityWithConfig: Entity, relationship: Relationship<Entity>, generator: CoreGenerator, ignoreMissingRequiredRelationship?: boolean): Relationship<Entity<import("../index.js").Field, never>>;
4
+ export default function prepareRelationship(entityWithConfig: Entity, relationship: Relationship<Omit<Entity, 'relationships'>>, generator: CoreGenerator, ignoreMissingRequiredRelationship?: boolean): Relationship<Omit<Entity<import("../index.js").Field, never>, "relationships">>;
@@ -5,21 +5,21 @@ import type { WriteFileBlock, WriteFileSection } from '../../base/api.js';
5
5
  import type { Entity } from '../../../lib/types/application/entity.js';
6
6
  export declare function asWriteFilesSection<Data = ApplicationType<Entity>>(section: WriteFileSection<Data>): WriteFileSection<Data>;
7
7
  export declare function asWriteFilesBlock<Data = ApplicationType<Entity>>(section: WriteFileBlock<Data>): WriteFileBlock<Data>;
8
- export declare function asInitializingTask<E = Entity, A = ApplicationType<E>>(task: (this: CoreGenerator, params: TaskTypes<E, A>['InitializingTaskParam']) => void): (this: CoreGenerator, params: TaskTypes<E, A>["InitializingTaskParam"]) => void;
9
- export declare function asPromptingTask<E = Entity, A = ApplicationType<E>>(task: (this: CoreGenerator, params: TaskTypes<E, A>['PromptingTaskParam']) => void): (this: CoreGenerator, params: TaskTypes<E, A>["PromptingTaskParam"]) => void;
10
- export declare function asConfiguringTask<E = Entity, A = ApplicationType<E>>(task: (this: CoreGenerator, params: TaskTypes<E, A>['ConfiguringTaskParam']) => void): (this: CoreGenerator, params: TaskTypes<E, A>["ConfiguringTaskParam"]) => void;
11
- export declare function asComposingTask<E = Entity, A = ApplicationType<E>>(task: (this: CoreGenerator, params: TaskTypes<E, A>['ComposingTaskParam']) => void): (this: CoreGenerator, params: TaskTypes<E, A>["ComposingTaskParam"]) => void;
12
- export declare function asLoadingTask<E = Entity, A = ApplicationType<E>>(task: (this: CoreGenerator, params: TaskTypes<E, A>['LoadingTaskParam']) => void): (this: CoreGenerator, params: TaskTypes<E, A>["LoadingTaskParam"]) => void;
13
- export declare function asPreparingTask<E = Entity, A = ApplicationType<E>>(task: (this: CoreGenerator, params: TaskTypes<E, A>['PreparingTaskParam']) => void): (this: CoreGenerator, params: TaskTypes<E, A>["PreparingTaskParam"]) => void;
14
- export declare function asPostPreparingTask<E = Entity, A = ApplicationType<E>>(task: (this: CoreGenerator, params: TaskTypes<E, A>['PostPreparingTaskParam']) => void): (this: CoreGenerator, params: TaskTypes<E, A>["PostPreparingTaskParam"]) => void;
15
- export declare function asPreparingEachEntityTask<E = Entity, A = ApplicationType<E>>(task: (this: CoreGenerator, params: TaskTypes<E, A>['PreparingEachEntityTaskParam']) => void): (this: CoreGenerator, params: TaskTypes<E, A>["PreparingEachEntityTaskParam"]) => void;
16
- export declare function asPreparingEachEntityFieldTask<E = Entity, A = ApplicationType<E>>(task: (this: CoreGenerator, params: TaskTypes<E, A>['PreparingEachEntityFieldTaskParam']) => void): (this: CoreGenerator, params: TaskTypes<E, A>["PreparingEachEntityFieldTaskParam"]) => void;
17
- export declare function asPreparingEachEntityRelationshipTask<E = Entity, A = ApplicationType<E>>(task: (this: CoreGenerator, params: TaskTypes<E, A>['PreparingEachEntityRelationshipTaskParam']) => void): (this: CoreGenerator, params: TaskTypes<E, A>["PreparingEachEntityRelationshipTaskParam"]) => void;
18
- export declare function asPostPreparingEachEntityTask<E = Entity, A = ApplicationType<E>>(task: (this: CoreGenerator, params: TaskTypes<E, A>['PostPreparingEachEntityTaskParam']) => void): (this: CoreGenerator, params: TaskTypes<E, A>["PostPreparingEachEntityTaskParam"]) => void;
19
- export declare function asDefaultTask<E = Entity, A = ApplicationType<E>>(task: (this: CoreGenerator, params: TaskTypes<E, A>['DefaultTaskParam']) => void): (this: CoreGenerator, params: TaskTypes<E, A>["DefaultTaskParam"]) => void;
20
- export declare function asWritingTask<E = Entity, A = ApplicationType<E>>(task: (this: CoreGenerator, params: TaskTypes<E, A>['WritingTaskParam']) => void): (this: CoreGenerator, params: TaskTypes<E, A>["WritingTaskParam"]) => void;
21
- export declare function asWritingEntitiesTask<E = Entity, A = ApplicationType<E>>(task: (this: CoreGenerator, params: TaskTypes<E, A>['WritingEntitiesTaskParam']) => void): (this: CoreGenerator, params: TaskTypes<E, A>["WritingEntitiesTaskParam"]) => void;
22
- export declare function asPostWritingTask<E = Entity, A = ApplicationType<E>>(task: (this: CoreGenerator, params: TaskTypes<E, A>['PostWritingTaskParam']) => void): (this: CoreGenerator, params: TaskTypes<E, A>["PostWritingTaskParam"]) => void;
23
- export declare function asPostWritingEntitiesTask<E = Entity, A = ApplicationType<E>>(task: (this: CoreGenerator, params: TaskTypes<E, A>['PostWritingEntitiesTaskParam']) => void): (this: CoreGenerator, params: TaskTypes<E, A>["PostWritingEntitiesTaskParam"]) => void;
24
- export declare function asInstallTask<E = Entity, A = ApplicationType<E>>(task: (this: CoreGenerator, params: TaskTypes<E, A>['InstallTaskParam']) => void): (this: CoreGenerator, params: TaskTypes<E, A>["InstallTaskParam"]) => void;
25
- export declare function asEndTask<E = Entity, A = ApplicationType<E>>(task: (this: CoreGenerator, params: TaskTypes<E, A>['EndTaskParam']) => void): (this: CoreGenerator, params: TaskTypes<E, A>["EndTaskParam"]) => void;
8
+ export declare function asInitializingTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(task: (this: G, params: TaskTypes<E, A>['InitializingTaskParam']) => void): (this: G, params: TaskTypes<E, A>["InitializingTaskParam"]) => void;
9
+ export declare function asPromptingTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(task: (this: G, params: TaskTypes<E, A>['PromptingTaskParam']) => void): (this: G, params: TaskTypes<E, A>["PromptingTaskParam"]) => void;
10
+ export declare function asConfiguringTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(task: (this: G, params: TaskTypes<E, A>['ConfiguringTaskParam']) => void): (this: G, params: TaskTypes<E, A>["ConfiguringTaskParam"]) => void;
11
+ export declare function asComposingTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(task: (this: G, params: TaskTypes<E, A>['ComposingTaskParam']) => void): (this: G, params: TaskTypes<E, A>["ComposingTaskParam"]) => void;
12
+ export declare function asLoadingTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(task: (this: G, params: TaskTypes<E, A>['LoadingTaskParam']) => void): (this: G, params: TaskTypes<E, A>["LoadingTaskParam"]) => void;
13
+ export declare function asPreparingTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(task: (this: G, params: TaskTypes<E, A>['PreparingTaskParam']) => void): (this: G, params: TaskTypes<E, A>["PreparingTaskParam"]) => void;
14
+ export declare function asPostPreparingTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(task: (this: G, params: TaskTypes<E, A>['PostPreparingTaskParam']) => void): (this: G, params: TaskTypes<E, A>["PostPreparingTaskParam"]) => void;
15
+ export declare function asPreparingEachEntityTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(task: (this: G, params: TaskTypes<E, A>['PreparingEachEntityTaskParam']) => void): (this: G, params: TaskTypes<E, A>["PreparingEachEntityTaskParam"]) => void;
16
+ export declare function asPreparingEachEntityFieldTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(task: (this: G, params: TaskTypes<E, A>['PreparingEachEntityFieldTaskParam']) => void): (this: G, params: TaskTypes<E, A>["PreparingEachEntityFieldTaskParam"]) => void;
17
+ export declare function asPreparingEachEntityRelationshipTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(task: (this: G, params: TaskTypes<E, A>['PreparingEachEntityRelationshipTaskParam']) => void): (this: G, params: TaskTypes<E, A>["PreparingEachEntityRelationshipTaskParam"]) => void;
18
+ export declare function asPostPreparingEachEntityTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(task: (this: G, params: TaskTypes<E, A>['PostPreparingEachEntityTaskParam']) => void): (this: G, params: TaskTypes<E, A>["PostPreparingEachEntityTaskParam"]) => void;
19
+ export declare function asDefaultTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(task: (this: G, params: TaskTypes<E, A>['DefaultTaskParam']) => void): (this: G, params: TaskTypes<E, A>["DefaultTaskParam"]) => void;
20
+ export declare function asWritingTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(task: (this: G, params: TaskTypes<E, A>['WritingTaskParam']) => void): (this: G, params: TaskTypes<E, A>["WritingTaskParam"]) => void;
21
+ export declare function asWritingEntitiesTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(task: (this: G, params: TaskTypes<E, A>['WritingEntitiesTaskParam']) => void): (this: G, params: TaskTypes<E, A>["WritingEntitiesTaskParam"]) => void;
22
+ export declare function asPostWritingTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(task: (this: G, params: TaskTypes<E, A>['PostWritingTaskParam']) => void): (this: G, params: TaskTypes<E, A>["PostWritingTaskParam"]) => void;
23
+ export declare function asPostWritingEntitiesTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(task: (this: G, params: TaskTypes<E, A>['PostWritingEntitiesTaskParam']) => void): (this: G, params: TaskTypes<E, A>["PostWritingEntitiesTaskParam"]) => void;
24
+ export declare function asInstallTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(task: (this: G, params: TaskTypes<E, A>['InstallTaskParam']) => void): (this: G, params: TaskTypes<E, A>["InstallTaskParam"]) => void;
25
+ export declare function asEndTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(task: (this: G, params: TaskTypes<E, A>['EndTaskParam']) => void): (this: G, params: TaskTypes<E, A>["EndTaskParam"]) => void;