generator-jhipster 7.4.1 → 7.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/generators/app/index.js +11 -1
  2. package/generators/cleanup.js +27 -171
  3. package/generators/client/files-angular.js +6 -1
  4. package/generators/client/files-vue.js +5 -1
  5. package/generators/client/index.js +2 -1
  6. package/generators/client/templates/angular/angular.json.ejs +5 -0
  7. package/generators/client/templates/angular/jest.conf.js.ejs +2 -0
  8. package/generators/client/templates/angular/package.json +24 -24
  9. package/generators/client/templates/angular/package.json.ejs +3 -1
  10. package/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.component.ts.ejs +4 -4
  11. package/generators/client/templates/angular/src/main/webapp/app/account/password/password-strength-bar/password-strength-bar.component.ts.ejs +1 -1
  12. package/generators/client/templates/angular/src/main/webapp/app/account/password/password.component.ts.ejs +4 -4
  13. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts.ejs +4 -4
  14. package/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.spec.ts.ejs +10 -9
  15. package/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.ts.ejs +1 -1
  16. package/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.component.spec.ts.ejs +8 -6
  17. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.ts.ejs +4 -4
  18. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/list/user-management.component.spec.ts.ejs +4 -4
  19. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/list/user-management.component.ts.ejs +4 -4
  20. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/update/user-management-update.component.ts.ejs +8 -8
  21. package/generators/client/templates/angular/src/main/webapp/app/app-routing.module.ts.ejs +14 -3
  22. package/generators/client/templates/angular/src/main/webapp/app/app.module.ts.ejs +8 -29
  23. package/generators/client/templates/angular/src/main/webapp/app/config/datepicker-adapter.ts.ejs +1 -1
  24. package/generators/client/templates/angular/src/main/webapp/app/config/dayjs.ts.ejs +4 -4
  25. package/generators/client/templates/angular/src/main/webapp/app/core/auth/account.service.spec.ts.ejs +14 -9
  26. package/generators/client/templates/angular/src/main/webapp/app/core/tracker/tracker.service.ts.ejs +6 -6
  27. package/generators/client/templates/angular/src/main/webapp/app/core/util/parse-links.service.ts.ejs +1 -1
  28. package/generators/client/templates/angular/src/main/webapp/app/entities/entity-navbar-items.ts.ejs +29 -0
  29. package/generators/client/templates/angular/src/main/webapp/app/home/home.component.spec.ts.ejs +14 -4
  30. package/generators/client/templates/angular/src/main/webapp/app/layouts/main/main.component.ts.ejs +1 -1
  31. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs +20 -0
  32. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.spec.ts.ejs +10 -4
  33. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.ts.ejs +41 -2
  34. package/generators/client/templates/angular/src/main/webapp/app/login/login.component.spec.ts.ejs +3 -2
  35. package/generators/client/templates/angular/src/main/webapp/app/login/login.component.ts.ejs +4 -4
  36. package/generators/client/templates/angular/src/main/webapp/app/shared/auth/has-any-authority.directive.spec.ts.ejs +4 -4
  37. package/generators/client/templates/angular/src/main/webapp/app/shared/date/duration.pipe.ts.ejs +1 -1
  38. package/generators/client/templates/angular/src/main/webapp/app/shared/date/format-medium-date.pipe.spec.ts.ejs +1 -1
  39. package/generators/client/templates/angular/src/main/webapp/app/shared/date/format-medium-date.pipe.ts.ejs +1 -1
  40. package/generators/client/templates/angular/src/main/webapp/app/shared/date/format-medium-datetime.pipe.spec.ts.ejs +1 -1
  41. package/generators/client/templates/angular/src/main/webapp/app/shared/date/format-medium-datetime.pipe.ts.ejs +1 -1
  42. package/generators/client/templates/angular/src/main/webapp/app/shared/language/translate.directive.ts.ejs +6 -6
  43. package/generators/client/templates/angular/src/main/webapp/app/shared/language/translation.module.ts.ejs +83 -0
  44. package/generators/client/templates/angular/src/main/webapp/declarations.d.ts.ejs +16 -2
  45. package/generators/client/templates/angular/tsconfig.json.ejs +2 -0
  46. package/generators/client/templates/angular/tsconfig.spec.json.ejs +0 -1
  47. package/generators/client/templates/angular/webpack/proxy.conf.js.ejs +0 -2
  48. package/generators/client/templates/angular/webpack/webpack.custom.js.ejs +0 -16
  49. package/generators/client/templates/angular/webpack/webpack.microfrontend.js.ejs +12 -5
  50. package/generators/client/templates/common/package.json +2 -2
  51. package/generators/client/templates/common/src/main/webapp/robots.txt.ejs +0 -1
  52. package/generators/client/templates/common/src/main/webapp/swagger-ui/index.html.ejs +86 -56
  53. package/generators/client/templates/react/package.json +27 -27
  54. package/generators/client/templates/react/package.json.ejs +2 -0
  55. package/generators/client/templates/react/src/main/webapp/app/config/axios-interceptor.spec.ts.ejs +3 -2
  56. package/generators/client/templates/react/src/main/webapp/app/shared/layout/header/header.scss.ejs +9 -0
  57. package/generators/client/templates/react/src/main/webapp/app/shared/layout/header/header.tsx.ejs +1 -1
  58. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/authentication.spec.ts.ejs +1 -1
  59. package/generators/client/templates/react/webpack/webpack.dev.js.ejs +0 -2
  60. package/generators/client/templates/vue/package.json +22 -22
  61. package/generators/client/templates/vue/package.json.ejs +3 -3
  62. package/generators/client/templates/vue/src/main/webapp/app/account/account.service.ts.ejs +19 -9
  63. package/generators/client/templates/vue/src/main/webapp/app/entities/entities.component.ts.ejs +6 -0
  64. package/generators/client/templates/vue/src/main/webapp/app/entities/user/{user.oauth2.service.ts.ejs → user.service.ts.ejs} +1 -1
  65. package/generators/client/templates/vue/src/main/webapp/app/main.ts.ejs +0 -8
  66. package/generators/client/templates/vue/src/test/javascript/spec/app/admin/user-management/user-management-edit.component.spec.ts.ejs +4 -4
  67. package/generators/client/templates/vue/src/test/javascript/spec/app/admin/user-management/user-management.component.spec.ts.ejs +2 -2
  68. package/generators/client/templates/vue/webpack/webpack.common.js.ejs +0 -2
  69. package/generators/common/templates/README.md.jhi.ejs +1 -3
  70. package/generators/common/templates/package.json +3 -3
  71. package/generators/cypress/templates/cypress.json.ejs +9 -2
  72. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/login-page.spec.ts.ejs +3 -14
  73. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/password-page.spec.ts.ejs +33 -39
  74. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/register-page.spec.ts.ejs +52 -62
  75. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/reset-password-page.spec.ts.ejs +2 -10
  76. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/settings-page.spec.ts.ejs +25 -34
  77. package/generators/cypress/templates/src/test/javascript/cypress/integration/administration/administration.spec.ts.ejs +1 -22
  78. package/generators/cypress/templates/src/test/javascript/cypress/support/commands.ts.ejs +38 -6
  79. package/generators/cypress/templates/src/test/javascript/cypress/support/index.ts.ejs +1 -6
  80. package/generators/cypress/templates/src/test/javascript/cypress/support/navbar.ts.ejs +7 -7
  81. package/generators/cypress/templates/src/test/javascript/cypress/support/oauth2.ts.ejs +0 -9
  82. package/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs +1 -1
  83. package/generators/entity/index.js +45 -3
  84. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/delete/entity-management-delete-dialog.component.spec.ts.ejs +1 -1
  85. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/detail/entity-management-detail.component.html.ejs +1 -1
  86. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.module.ts.ejs +1 -35
  87. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity.model.ts.ejs +1 -1
  88. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.html.ejs +4 -4
  89. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.spec.ts.ejs +8 -8
  90. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.ts.ejs +1 -1
  91. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/infinite-scroll-template.ejs +8 -8
  92. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/no-pagination-template.ejs +8 -8
  93. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/pagination-template.ejs +8 -8
  94. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/route/entity-management-routing-resolve.service.spec.ts.ejs +15 -6
  95. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/service/entity.service.spec.ts.ejs +1 -1
  96. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/service/entity.service.ts.ejs +1 -1
  97. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.spec.ts.ejs +12 -5
  98. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.ts.ejs +5 -5
  99. package/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity.spec.ts.ejs +1 -1
  100. package/generators/entity-client/templates/common/src/test/javascript/cypress/integration/entity/entity.spec.ts.ejs +14 -37
  101. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.reducer.ts.ejs +5 -4
  102. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity-update.component.ts.ejs +23 -19
  103. package/generators/entity-client/templates/vue/src/test/javascript/spec/app/entities/entity-update.component.spec.ts.ejs +4 -6
  104. package/generators/entity-server/files.js +10 -0
  105. package/generators/entity-server/templates/src/main/java/package/common/get_all_template.ejs +2 -2
  106. package/generators/entity-server/templates/src/main/java/package/common/search_template.ejs +1 -1
  107. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.ejs +5 -8
  108. package/generators/entity-server/templates/src/main/java/package/repository/search/EntitySearchRepository.java.ejs +18 -2
  109. package/generators/entity-server/templates/src/main/java/package/repository/search/SortToFieldSortBuilderConverter.java.ejs +24 -0
  110. package/generators/entity-server/templates/src/main/java/package/service/dto/EntityDTO.java.ejs +4 -6
  111. package/generators/entity-server/templates/src/main/java/package/web/rest/EntityResource.java.ejs +2 -2
  112. package/generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIT.java.ejs +2 -2
  113. package/generators/generator-base-private.js +2 -1
  114. package/generators/generator-base.js +13 -3
  115. package/generators/generator-constants.js +7 -7
  116. package/generators/server/__snapshots__/generator.spec.mjs.snap +16 -15
  117. package/generators/server/cleanup.js +151 -0
  118. package/generators/server/files.js +16 -14
  119. package/generators/server/index.js +34 -23
  120. package/generators/server/templates/build.gradle.ejs +214 -188
  121. package/generators/server/templates/gradle.properties.ejs +8 -8
  122. package/generators/server/templates/npmw +7 -5
  123. package/generators/server/templates/npmw.cmd +12 -7
  124. package/generators/server/templates/pom.xml.ejs +419 -329
  125. package/generators/server/templates/src/main/docker/config/realm-config/jhipster-realm.json.ejs +2 -2
  126. package/generators/server/templates/src/main/java/package/config/LocaleConfiguration.java.ejs +3 -2
  127. package/generators/server/templates/src/main/java/package/config/OpenApiConfiguration.java.ejs +17 -54
  128. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration.java.ejs +5 -5
  129. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration_reactive.java.ejs +3 -5
  130. package/generators/server/templates/src/main/java/package/config/WebConfigurer.java.ejs +0 -2
  131. package/generators/server/templates/src/main/java/package/config/neo4j/Neo4jMigrations.java.ejs +19 -9
  132. package/generators/server/templates/src/main/java/package/repository/AuthorityRepository.java.ejs +2 -2
  133. package/generators/server/templates/src/main/java/package/repository/UserRepository.java.ejs +0 -2
  134. package/generators/server/templates/src/main/java/package/security/jwt/TokenProvider.java.ejs +6 -4
  135. package/generators/server/templates/src/main/java/package/security/oauth2/CustomClaimConverter.java.ejs +2 -2
  136. package/generators/server/templates/src/main/java/package/service/UserService.java.ejs +3 -3
  137. package/generators/server/templates/src/main/java/package/service/dto/UserDTO.java.ejs +6 -6
  138. package/generators/server/templates/src/main/java/package/web/filter/ModifyServersOpenApiFilter.java.ejs +3 -2
  139. package/generators/server/templates/src/main/java/package/web/filter/SpaWebFilter.java.ejs +1 -1
  140. package/generators/server/templates/src/main/java/package/web/rest/PublicUserResource.java.ejs +2 -2
  141. package/generators/server/templates/src/main/java/package/web/rest/UserResource.java.ejs +2 -2
  142. package/generators/server/templates/src/main/resources/config/application.yml.ejs +17 -3
  143. package/generators/server/templates/src/main/resources/logback-spring.xml.ejs +1 -2
  144. package/generators/server/templates/src/test/java/package/cucumber/CucumberIT.java.ejs +2 -6
  145. package/generators/server/templates/src/test/java/package/cucumber/CucumberTestContextConfiguration.java.ejs +2 -3
  146. package/generators/server/templates/src/test/java/package/cucumber/stepdefs/UserStepDefs.java.ejs +41 -6
  147. package/generators/server/templates/src/test/java/package/management/SecurityMetersServiceTests.java.ejs +7 -7
  148. package/generators/server/templates/src/test/java/package/security/jwt/TokenProviderSecurityMetersTests.java.ejs +10 -10
  149. package/generators/server/templates/src/test/java/package/security/oauth2/AuthorizationHeaderUtilTest.java.ejs +1 -1
  150. package/generators/server/templates/src/test/java/package/service/MailServiceIT.java.ejs +1 -1
  151. package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT.java.ejs +2 -3
  152. package/generators/server/templates/src/test/java/package/web/rest/ClientForwardControllerTest.java.ejs +9 -0
  153. package/generators/server/templates/src/test/resources/junit-platform.properties.ejs +2 -0
  154. package/generators/server/templates/src/test/resources/logback.xml.ejs +1 -1
  155. package/generators/server/templates/src/test/{features → resources/package/features}/gitkeep +0 -0
  156. package/generators/server/templates/src/test/{features → resources/package/features}/user/user.feature.ejs +0 -0
  157. package/generators/spring-controller/templates/src/test/java/package/web/rest/ResourceIT.java.ejs +1 -1
  158. package/package.json +9 -9
  159. package/utils/entity.js +1 -5
  160. package/generators/server/templates/src/main/java/package/config/apidocs/GatewaySwaggerResourcesProvider.java.ejs +0 -91
  161. package/generators/server/templates/src/test/java/package/config/apidocs/GatewaySwaggerResourcesProviderTest.java.ejs +0 -79
  162. package/generators/server/templates/src/test/resources/cucumber.properties.ejs +0 -1
@@ -18,7 +18,7 @@
18
18
  -%>
19
19
  import { Pipe, PipeTransform } from '@angular/core';
20
20
 
21
- import * as dayjs from 'dayjs';
21
+ import dayjs from 'dayjs/esm';
22
22
 
23
23
  @Pipe({
24
24
  name: 'formatMediumDate',
@@ -16,7 +16,7 @@
16
16
  See the License for the specific language governing permissions and
17
17
  limitations under the License.
18
18
  -%>
19
- import * as dayjs from 'dayjs';
19
+ import dayjs from 'dayjs/esm';
20
20
 
21
21
  import { FormatMediumDatetimePipe } from './format-medium-datetime.pipe';
22
22
 
@@ -18,7 +18,7 @@
18
18
  -%>
19
19
  import { Pipe, PipeTransform } from '@angular/core';
20
20
 
21
- import * as dayjs from 'dayjs';
21
+ import dayjs from 'dayjs/esm';
22
22
 
23
23
  @Pipe({
24
24
  name: 'formatMediumDatetime',
@@ -33,7 +33,7 @@ export class TranslateDirective implements OnChanges, OnInit, OnDestroy {
33
33
  @Input() <%= jhiPrefix %>Translate!: string;
34
34
  @Input() translateValues?: { [key: string]: unknown };
35
35
 
36
- private readonly directiveDestroyed = new Subject<never>();
36
+ private readonly directiveDestroyed = new Subject();
37
37
 
38
38
  constructor(private el: ElementRef, private translateService: TranslateService) {}
39
39
 
@@ -51,7 +51,7 @@ export class TranslateDirective implements OnChanges, OnInit, OnDestroy {
51
51
  }
52
52
 
53
53
  ngOnDestroy(): void {
54
- this.directiveDestroyed.next();
54
+ this.directiveDestroyed.next(null);
55
55
  this.directiveDestroyed.complete();
56
56
  }
57
57
 
@@ -59,11 +59,11 @@ export class TranslateDirective implements OnChanges, OnInit, OnDestroy {
59
59
  this.translateService
60
60
  .get(this.<%= jhiPrefix %>Translate, this.translateValues)
61
61
  .pipe(takeUntil(this.directiveDestroyed))
62
- .subscribe(
63
- value => {
62
+ .subscribe({
63
+ next: value => {
64
64
  this.el.nativeElement.innerHTML = value;
65
65
  },
66
- () => `${translationNotFoundMessage}[${this.<%= jhiPrefix %>Translate}]`
67
- );
66
+ error: () => `${translationNotFoundMessage}[${this.<%= jhiPrefix %>Translate}]`
67
+ });
68
68
  }
69
69
  }
@@ -0,0 +1,83 @@
1
+ <%#
2
+ Copyright 2013-2021 the original author or authors from the JHipster project.
3
+
4
+ This file is part of the JHipster project, see https://www.jhipster.tech/
5
+ for more information.
6
+
7
+ Licensed under the Apache License, Version 2.0 (the "License");
8
+ you may not use this file except in compliance with the License.
9
+ You may obtain a copy of the License at
10
+
11
+ https://www.apache.org/licenses/LICENSE-2.0
12
+
13
+ Unless required by applicable law or agreed to in writing, software
14
+ distributed under the License is distributed on an "AS IS" BASIS,
15
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ See the License for the specific language governing permissions and
17
+ limitations under the License.
18
+ -%>
19
+ import { NgModule } from '@angular/core';
20
+ import { HttpClient } from '@angular/common/http';
21
+ import { TranslateModule, TranslateService, TranslateLoader, MissingTranslationHandler } from '@ngx-translate/core';
22
+ <%_ if (applicationTypeMicroservice) { _%>import { TranslateHttpLoader } from '@ngx-translate/http-loader';<%_ } _%>
23
+ import { translatePartialLoader, missingTranslationHandler } from 'app/config/translation.config';
24
+ import { SessionStorageService } from 'ngx-webstorage';
25
+
26
+ <%_ if (applicationTypeMicroservice) { _%>
27
+ function lazyTranslatePartialLoader(http: HttpClient): TranslateLoader {
28
+ return new TranslateHttpLoader(http, 'services/<%= lowercaseBaseName %>/i18n/', `.json?_=${I18N_HASH}`);
29
+ }
30
+
31
+ @NgModule({
32
+ imports: [
33
+ TranslateModule.forChild({
34
+ loader: {
35
+ provide: TranslateLoader,
36
+ useFactory: (lazyTranslatePartialLoader),
37
+ deps: [HttpClient]
38
+ },
39
+ isolate: false,
40
+ extend: true,
41
+ }),
42
+ ],
43
+ })
44
+ export class LazyTranslationModule {
45
+ constructor(
46
+ private translateService: TranslateService,
47
+ private translateLoader: TranslateLoader,
48
+ sessionStorageService: SessionStorageService
49
+ ) {
50
+ const currentLang = translateService.store.currentLang;
51
+ this.translateLoader.getTranslation(currentLang).subscribe(translation => {
52
+ this.translateService.setTranslation(currentLang, translation);
53
+ });
54
+ }
55
+ }
56
+ <%_ } _%>
57
+
58
+ @NgModule({
59
+ imports: [
60
+ TranslateModule.forRoot({
61
+ loader: {
62
+ provide: TranslateLoader,
63
+ useFactory: translatePartialLoader,
64
+ deps: [HttpClient],
65
+ },
66
+ missingTranslationHandler: {
67
+ provide: MissingTranslationHandler,
68
+ useFactory: missingTranslationHandler,
69
+ },
70
+ }),
71
+ ],
72
+ })
73
+ export class TranslationModule {
74
+ constructor(
75
+ private translateService: TranslateService,
76
+ sessionStorageService: SessionStorageService
77
+ ) {
78
+ translateService.setDefaultLang('<%= nativeLanguage %>');
79
+ // if user have changed language and navigates away from the application and back to the application then use previously choosed language
80
+ const langKey = sessionStorageService.retrieve('locale') ?? '<%= nativeLanguage %>';
81
+ translateService.use(langKey);
82
+ }
83
+ }
@@ -4,9 +4,23 @@ declare const I18N_HASH: string;
4
4
  <%_ } _%>
5
5
  <%_ if (applicationTypeGateway && microfrontend) { _%>
6
6
 
7
- <%_ for (const entity of Object.values(this.configOptions.sharedEntities).filter(entity => entity.microserviceName)) { _%>
7
+ <%_ for (const remote of microfrontends) { _%>
8
+ declare module '<%= remote.lowercaseBaseName %>/entity-routing' {
9
+ export class EntityRoutingModule {}
10
+ }
11
+ declare module '<%= remote.lowercaseBaseName %>/entity-navbar-items' {
12
+ export const EntityNavbarItems : []
13
+ }
14
+ <%_ if (enableTranslation) { _%>
15
+ declare module '<%= remote.lowercaseBaseName %>/translation-module' {
16
+ export class LazyTranslationModule {}
17
+ }
18
+ <%_ } _%>
19
+
20
+ <%_ } _%>
21
+ <%_ for (const entity of Object.values(this.configOptions.sharedEntities).filter(entity => entity.microserviceName)) { _%>
8
22
  declare module '<%= entity.microserviceName %>/<%= entity.entityFileName %>' {
9
23
  export class <%= entity.microserviceName ? upperFirstCamelCase(entity.microserviceName) : '' %><%= entity.entityAngularName %>Module {}
10
24
  }
11
- <%_ } _%>
25
+ <%_ } _%>
12
26
  <%_ } _%>
@@ -33,6 +33,8 @@
33
33
  "experimentalDecorators": true,
34
34
  "moduleResolution": "node",
35
35
  "importHelpers": true,
36
+ "esModuleInterop": true,
37
+ "allowSyntheticDefaultImports": true,
36
38
  "target": "es2017",
37
39
  "module": "es2020",
38
40
  "lib": ["es2018", "dom"]
@@ -19,7 +19,6 @@
19
19
  {
20
20
  "extends": "./tsconfig.json",
21
21
  "compilerOptions": {
22
- "emitDecoratorMetadata": true,
23
22
  "outDir": "<%= BUILD_DIR %>out-tsc/spec",
24
23
  "types": ["jest", "node"]
25
24
  },
@@ -23,8 +23,6 @@ function setupProxy({ tls }) {
23
23
  '/api',
24
24
  '/services',
25
25
  '/management',
26
- '/swagger-resources',
27
- '/v2/api-docs',
28
26
  '/v3/api-docs',
29
27
  '/h2-console',
30
28
  <%_ if (authenticationTypeOauth2) { _%>
@@ -42,22 +42,6 @@ module.exports = async (config, options, targetOptions) => {
42
42
  });
43
43
 
44
44
  <%_ } _%>
45
- config.cache = {
46
- // 1. Set cache type to filesystem
47
- type: 'filesystem',
48
- cacheDirectory: path.resolve(__dirname, '../<%= buildDir %>webpack'),
49
- buildDependencies: {
50
- // 2. Add your config as buildDependency to get cache invalidation on config change
51
- config: [
52
- __filename,
53
- path.resolve(__dirname, 'webpack.custom.js'),
54
- path.resolve(__dirname, '../angular.json'),
55
- path.resolve(__dirname, '../tsconfig.app.json'),
56
- path.resolve(__dirname, '../tsconfig.json')
57
- ],
58
- },
59
- };
60
-
61
45
  // PLUGINS
62
46
  if (config.mode === 'development') {
63
47
  config.plugins.push(
@@ -28,16 +28,21 @@ module.exports = (config, options, targetOptions) => {
28
28
  name: '<%= lowercaseBaseName %>',
29
29
  filename: 'remoteEntry.js',
30
30
  exposes: {
31
- <%_ for (entity of Object.values(this.configOptions.sharedEntities || {}).filter(e => e.microserviceName)) { _%>
31
+ <%_ if (enableTranslation) { _%>
32
+ './translation-module': 'app/shared/language/translation.module.ts',
33
+ <%_ } _%>
34
+ './entity-navbar-items': 'app/entities/entity-navbar-items.ts',
35
+ './entity-routing': 'app/entities/entity-routing.module.ts',
36
+ <%_ for (entity of Object.values(this.configOptions.sharedEntities || {}).filter(e => e.microserviceName)) { _%>
32
37
  './<%= entity.entityFileName %>': 'app/entities/<%= entity.entityFolderName %>/<%= entity.entityFileName %>.module.ts',
33
- <%_ } _%>
38
+ <%_ } _%>
34
39
  },
35
40
  <%_ } _%>
36
41
  <%_ if (applicationTypeGateway) { _%>
37
42
  remotes: {
38
- <%_ for ([microserviceName, microserviceConfig] of Object.entries(jhipsterConfig.applications || {})) { _%>
39
- '<%= microserviceName %>': `<%= microserviceName %>@${targetOptions.target !== 'serve' ? '/services/<%= microserviceName %>' : 'http://localhost:<%= microserviceConfig.applicationIndex + devServerBasePort %>'}/remoteEntry.js`,
40
- <%_ } _%>
43
+ <%_ for (const remote of microfrontends) { _%>
44
+ '<%= remote.lowercaseBaseName %>': `<%= remote.lowercaseBaseName %>@/<%= remote.endpointPrefix %>/remoteEntry.js`,
45
+ <%_ } _%>
41
46
  },
42
47
  <%_ } _%>
43
48
  shared: {
@@ -141,6 +146,8 @@ module.exports = (config, options, targetOptions) => {
141
146
  ],
142
147
  output: {
143
148
  publicPath: 'auto',
149
+ uniqueName: '<%= lowercaseBaseName %>',
150
+ scriptType: 'text/javascript',
144
151
  },
145
152
  optimization: {
146
153
  runtimeChunk: false,
@@ -3,10 +3,10 @@
3
3
  "@cypress/code-coverage": "3.9.12",
4
4
  "babel-loader": "8.2.3",
5
5
  "babel-plugin-istanbul": "6.1.1",
6
- "cypress": "9.0.0",
6
+ "cypress": "9.2.0",
7
7
  "eslint-plugin-cypress": "2.12.1",
8
8
  "cypress-audit": "1.1.0",
9
- "lighthouse": "9.1.0",
9
+ "lighthouse": "9.2.0",
10
10
  "nyc": "15.1.0"
11
11
  },
12
12
  "dependencies": {
@@ -27,5 +27,4 @@ Disallow: /api/account/sessions
27
27
  Disallow: /api/logs/
28
28
  Disallow: /api/users/
29
29
  Disallow: /management/
30
- Disallow: /v2/api-docs/
31
30
  Disallow: /v3/api-docs/
@@ -48,7 +48,8 @@
48
48
  },
49
49
  };
50
50
  };
51
- window.onload = function () {
51
+
52
+ window.onload = async function () {
52
53
  <%_ if (authenticationTypeSession || authenticationTypeOauth2) { _%>
53
54
  function getCSRF() {
54
55
  var name = 'XSRF-TOKEN=';
@@ -60,14 +61,66 @@
60
61
  }
61
62
  return '';
62
63
  }
64
+ const axiosConfig = { timeout: 5000 };
65
+ <%_ } else { _%>
66
+ const getBearerToken = () => {
67
+ var authToken = localStorage.getItem('jhi-authenticationToken') || sessionStorage.getItem('jhi-authenticationToken');
68
+ if (authToken) {
69
+ <%_ if (clientFrameworkAngular || clientFrameworkReact) { _%>
70
+ authToken = JSON.parse(authToken);
71
+ <%_ } _%>
72
+ return `Bearer ${authToken}`;
73
+ }
74
+ return null;
75
+ };
76
+ const axiosConfig = {
77
+ headers: { timeout: 5000, Authorization: getBearerToken() },
78
+ };
63
79
  <%_ } _%>
64
80
 
65
- var urls = [];
66
- axios.get('/swagger-resources').then(function (response) {
67
- response.data.forEach(function (resource) {
68
- urls.push({ name: resource.name, url: resource.location });
69
- });
81
+ const baseUrl = '/v3/api-docs';
82
+ let services;
83
+ try {
84
+ const response = await axios.get('/management/health/discoveryComposite', axiosConfig);
85
+ services = response.data?.components?.discoveryClient?.details?.services;
86
+ console.log(`Services`, services);
87
+ } catch (error) {
88
+ console.log(error);
89
+ }
90
+
91
+ let urls;
92
+ try {
93
+ if (services && services.length > 0) {
94
+ urls = (
95
+ await Promise.allSettled(
96
+ services.map(async service => {
97
+ const response = await axios.get(`/services/${service}/management/jhiopenapigroups`, axiosConfig);
98
+ if (Array.isArray(response.data)) {
99
+ return response.data.map(({ group, description }) => ({
100
+ name: description,
101
+ url: `/services/${service}${baseUrl}/${group}`,
102
+ }));
103
+ }
104
+ return undefined;
105
+ })
106
+ )
107
+ )
108
+ .filter(settled => settled.status === 'fulfilled')
109
+ .map(settled => settled.value)
110
+ .filter(Array.isArray)
111
+ .flat();
112
+ } else {
113
+ const response = await axios.get('/management/jhiopenapigroups', axiosConfig);
114
+ if (Array.isArray(response.data)) {
115
+ urls = response.data.map(({ group, description }) => ({ name: description, url: `${baseUrl}/${group}` }));
116
+ }
117
+ }
118
+ console.log(`Swagger urls`, urls);
119
+ } catch (error) {
120
+ console.log(error);
121
+ }
70
122
 
123
+ if (urls) {
71
124
  urls.sort(function (a, b) {
72
125
  var x = a.name.toLowerCase(),
73
126
  y = b.name.toLowerCase();
@@ -77,60 +130,37 @@
77
130
  if (y.includes('(management)')) return 1;
78
131
  return x < y ? -1 : x > y ? 1 : 0;
79
132
  });
133
+ }
80
134
 
81
- // Build a system
82
- var ui = SwaggerUIBundle({
83
- urls: urls,
84
- dom_id: '#swagger-ui',
85
- deepLinking: true,
86
- filter: true,
87
- layout: 'StandaloneLayout',
88
- withCredentials: true,
89
- presets: [
90
- SwaggerUIBundle.presets.apis,
91
- SwaggerUIStandalonePreset
92
- ],
93
- plugins: [
94
- SwaggerUIBundle.plugins.DownloadUrl,
95
- AlwaysEnableTryItOutPlugin
96
- ],
135
+ // Build a system
136
+ var ui = SwaggerUIBundle({
137
+ urls: urls,
138
+ url: baseUrl,
139
+ dom_id: '#swagger-ui',
140
+ deepLinking: true,
141
+ filter: true,
142
+ layout: 'StandaloneLayout',
143
+ withCredentials: true,
144
+ presets: [SwaggerUIBundle.presets.apis, SwaggerUIStandalonePreset],
145
+ plugins: [SwaggerUIBundle.plugins.DownloadUrl, AlwaysEnableTryItOutPlugin],
146
+ requestInterceptor: function (req) {
97
147
  <%_ if (authenticationTypeSession || authenticationTypeOauth2) { _%>
98
- requestInterceptor: function(req) {
99
- req.headers['X-XSRF-TOKEN'] = getCSRF();
100
- // Remove the sample Swagger UI request body if present
101
- if (
102
- req.method === 'GET' &&
103
- req.body === '{"additionalProp1":"string","additionalProp2":"string","additionalProp3":"string"}'
104
- ) {
105
- req.body = undefined;
106
- }
107
- return req;
108
- },
109
- <%_ } _%>
110
- <%_ if (authenticationTypeJwt) { _%>
111
- requestInterceptor: function (req) {
112
- var authToken =
113
- localStorage.getItem('<%= jhiPrefixDashed %>-authenticationToken') || sessionStorage.getItem('<%= jhiPrefixDashed %>-authenticationToken');
114
- if (authToken) {
115
- <%_ if (clientFrameworkAngular || clientFrameworkReact) { _%>
116
- authToken = JSON.parse(authToken);
117
- <%_ } _%>
118
- req.headers['Authorization'] = 'Bearer ' + authToken;
119
- }
120
- // Remove the sample Swagger UI request body if present
121
- if (
122
- req.method === 'GET' &&
123
- req.body === '{"additionalProp1":"string","additionalProp2":"string","additionalProp3":"string"}'
124
- ) {
125
- req.body = undefined;
126
- }
127
- return req;
128
- },
148
+ req.headers['X-XSRF-TOKEN'] = getCSRF();
149
+ <%_ } else { _%>
150
+ req.headers['Authorization'] = getBearerToken();
129
151
  <%_ } _%>
130
- });
131
-
132
- window.ui = ui;
152
+ // Remove the sample Swagger UI request body if present
153
+ if (
154
+ req.method === 'GET' &&
155
+ req.body === '{"additionalProp1":"string","additionalProp2":"string","additionalProp3":"string"}'
156
+ ) {
157
+ req.body = undefined;
158
+ }
159
+ return req;
160
+ },
133
161
  });
162
+
163
+ window.ui = ui;
134
164
  };
135
165
  </script>
136
166
  </body>
@@ -3,7 +3,7 @@
3
3
  "@fortawesome/fontawesome-svg-core": "1.2.36",
4
4
  "@fortawesome/free-solid-svg-icons": "5.15.4",
5
5
  "@fortawesome/react-fontawesome": "0.1.16",
6
- "@reduxjs/toolkit": "1.6.2",
6
+ "@reduxjs/toolkit": "1.7.1",
7
7
  "axios": "0.24.0",
8
8
  "bootstrap": "5.1.3",
9
9
  "bootswatch": "5.1.3",
@@ -11,7 +11,7 @@
11
11
  "path-browserify": "1.0.1",
12
12
  "react": "17.0.2",
13
13
  "react-dom": "17.0.2",
14
- "react-hook-form": "7.20.5",
14
+ "react-hook-form": "7.22.5",
15
15
  "react-jhipster": "0.18.0",
16
16
  "react-loadable": "5.5.0",
17
17
  "react-redux": "7.2.6",
@@ -28,62 +28,62 @@
28
28
  },
29
29
  "devDependencies": {
30
30
  "@testing-library/react": "12.1.2",
31
- "@types/jest": "27.0.3",
32
- "@types/lodash": "4.14.177",
33
- "@types/node": "16.11.11",
34
- "@types/react": "17.0.37",
31
+ "@types/jest": "27.4.0",
32
+ "@types/lodash": "4.14.178",
33
+ "@types/node": "16.11.17",
34
+ "@types/react": "17.0.38",
35
35
  "@types/react-dom": "17.0.11",
36
- "@types/react-redux": "7.1.20",
36
+ "@types/react-redux": "7.1.21",
37
37
  "@types/react-router-dom": "5.3.2",
38
38
  "@types/redux": "3.6.31",
39
39
  "@types/webpack-env": "1.16.3",
40
- "@typescript-eslint/eslint-plugin": "5.5.0",
41
- "@typescript-eslint/parser": "5.5.0",
42
- "autoprefixer": "10.4.0",
40
+ "@typescript-eslint/eslint-plugin": "5.8.1",
41
+ "@typescript-eslint/parser": "5.8.1",
42
+ "autoprefixer": "10.4.1",
43
43
  "browser-sync": "2.27.7",
44
44
  "browser-sync-webpack-plugin": "2.3.0",
45
- "copy-webpack-plugin": "10.0.0",
46
- "core-js": "3.19.2",
45
+ "copy-webpack-plugin": "10.2.0",
46
+ "core-js": "3.20.1",
47
47
  "cross-env": "7.0.3",
48
48
  "css-loader": "6.5.1",
49
- "css-minimizer-webpack-plugin": "3.2.0",
50
- "eslint": "8.3.0",
49
+ "css-minimizer-webpack-plugin": "3.3.1",
50
+ "eslint": "8.5.0",
51
51
  "eslint-config-prettier": "8.3.0",
52
- "eslint-plugin-react": "7.27.1",
52
+ "eslint-plugin-react": "7.28.0",
53
53
  "eslint-webpack-plugin": "3.1.1",
54
54
  "folder-hash": "4.0.1",
55
55
  "fork-ts-checker-webpack-plugin": "6.5.0",
56
56
  "html-webpack-plugin": "5.5.0",
57
57
  "identity-obj-proxy": "3.0.0",
58
- "jest": "27.4.3",
58
+ "jest": "27.4.5",
59
59
  "jest-junit": "13.0.0",
60
60
  "jest-sonar-reporter": "2.0.0",
61
61
  "json-loader": "0.5.7",
62
62
  "merge-jsons-webpack-plugin": "2.0.1",
63
63
  "mini-css-extract-plugin": "2.4.5",
64
64
  "postcss-loader": "6.2.1",
65
- "postcss-rtlcss": "3.5.0",
65
+ "postcss-rtlcss": "3.5.1",
66
66
  "react-infinite-scroll-component": "6.1.0",
67
67
  "redux-mock-store": "1.5.4",
68
68
  "rimraf": "3.0.2",
69
- "sass": "1.44.0",
70
- "sass-loader": "12.3.0",
69
+ "sass": "1.45.2",
70
+ "sass-loader": "12.4.0",
71
71
  "simple-progress-webpack-plugin": "2.0.0",
72
72
  "sinon": "12.0.1",
73
73
  "source-map-loader": "3.0.0",
74
74
  "sourcemap-istanbul-instrumenter-loader": "0.2.0",
75
75
  "style-loader": "3.3.1",
76
- "swagger-ui-dist": "4.1.2",
77
- "terser-webpack-plugin": "5.2.5",
76
+ "swagger-ui-dist": "4.1.3",
77
+ "terser-webpack-plugin": "5.3.0",
78
78
  "thread-loader": "3.0.4",
79
- "ts-jest": "27.0.7",
79
+ "ts-jest": "27.1.2",
80
80
  "ts-loader": "9.2.6",
81
- "typescript": "4.5.2",
82
- "webpack": "5.64.4",
81
+ "typescript": "4.5.4",
82
+ "webpack": "5.65.0",
83
83
  "webpack-cli": "4.9.1",
84
- "webpack-dev-server": "4.6.0",
84
+ "webpack-dev-server": "4.7.2",
85
85
  "webpack-merge": "5.8.0",
86
- "webpack-notifier": "1.14.1",
87
- "workbox-webpack-plugin": "6.4.1"
86
+ "webpack-notifier": "1.15.0",
87
+ "workbox-webpack-plugin": "6.4.2"
88
88
  }
89
89
  }
@@ -179,6 +179,8 @@
179
179
  "lint:fix": "<%= clientPackageManager %> run lint -- --fix",
180
180
  "cleanup": "rimraf <%= DIST_DIR %>",
181
181
  "clean-www": "rimraf <%= DIST_DIR %>app/{src,<%= BUILD_DIR %>}",
182
+ "build": "<%= clientPackageManager %> run webapp:prod --",
183
+ "build-watch": "concurrently 'npm run webapp:build:dev -- --watch'<% if(!skipServer) { %> npm:backend:start<% } %>",
182
184
  <%_ if (protractorTests && !cypressTests) { _%>
183
185
  "e2e": "<%= clientPackageManager %> run e2e:protractor --",
184
186
  "e2e:headless": "<%= clientPackageManager %> run e2e:protractor:headless --",
@@ -36,13 +36,14 @@ describe('Axios Interceptor', () => {
36
36
  expect((client.interceptors.response as any).handlers[0].fulfilled({ data: 'foo' })).toEqual({ data: 'foo' });
37
37
  });
38
38
  it('onResponseError is called on rejected response', () => {
39
- (client.interceptors.response as any).handlers[0].rejected({
39
+ const rejectError = {
40
40
  response: {
41
41
  statusText: 'NotFound',
42
42
  status: 403,
43
43
  data: { message: 'Page not found' }
44
44
  }
45
- });
45
+ };
46
+ expect((client.interceptors.response as any).handlers[0].rejected(rejectError)).rejects.toEqual(rejectError);
46
47
  expect(onUnauthenticated.calledOnce).toBe(true);
47
48
  });
48
49
  });
@@ -95,6 +95,15 @@ Navbar styles
95
95
  }
96
96
  }
97
97
  <%_ } _%>
98
+ .navbar-brand {
99
+ overflow: hidden;
100
+ }
101
+
102
+ .jh-navbar .navbar-nav .nav-link {
103
+ padding-right: 0;
104
+ padding-left: 0;
105
+ }
106
+
98
107
  .navbar-version {
99
108
  font-size: 10px;
100
109
  color: $header-color-secondary;
@@ -89,7 +89,7 @@ const Header = (props: IHeaderProps) => {
89
89
  <div id="app-header">
90
90
  {renderDevRibbon()}
91
91
  <LoadingBar className="loading-bar"/>
92
- <Navbar data-cy="navbar" <% if (clientThemeNone || !clientThemeLight) { %>dark<% } else { %>light<% } %> expand="sm" fixed="top" className="<%_ if (clientThemeNone) { _%>jh-navbar<%_ } else { _%>bg-<%= clientThemeVariant %><%_ } _%>">
92
+ <Navbar data-cy="navbar" <% if (clientThemeNone || !clientThemeLight) { %>dark<% } else { %>light<% } %> expand="md" fixed="top" className="<%_ if (clientThemeNone) { _%>jh-navbar<%_ } else { _%>bg-<%= clientThemeVariant %><%_ } _%>">
93
93
  <NavbarToggler aria-label="Menu" onClick={toggleMenu} />
94
94
  <Brand />
95
95
  <Collapse isOpen={menuOpen} navbar>
@@ -218,7 +218,7 @@ describe('Authentication reducer tests', () => {
218
218
  type: getAccount.fulfilled.type,
219
219
  payload: resolvedObject
220
220
  },
221
- updateLocale('en'),
221
+ updateLocale('<%= nativeLanguage %>'),
222
222
  <%_ } _%>
223
223
  ];
224
224
  await store.dispatch(getSession());
@@ -82,8 +82,6 @@ module.exports = async (options) => webpackMerge(await commonConfig({ env: ENV }
82
82
  '/api',
83
83
  '/services',
84
84
  '/management',
85
- '/swagger-resources',
86
- '/v2/api-docs',
87
85
  '/v3/api-docs',
88
86
  '/h2-console',<% if (authenticationTypeOauth2) { %>
89
87
  '/oauth2',