diff --git a/goofy-client/apps/goofy/src/app/app.component.html b/goofy-client/apps/goofy/src/app/app.component.html index 6d8007d560c24970b771ab6b49cdcfeb2756844b..b726fdeafedf0fce54f231d119575ceaa55c62dc 100644 --- a/goofy-client/apps/goofy/src/app/app.component.html +++ b/goofy-client/apps/goofy/src/app/app.component.html @@ -1,16 +1,11 @@ <ng-container *ngIf="apiRoot$ | async as apiRoot"> <!-- TODO replace by spinner-component --> <ng-container *ngIf="apiRoot.loaded"> - <goofy-client-header - [darkMode]="darkMode$ | async" - [navigationCollapse]="navigationCollapse$ | async" - (toggleMenuEvent)="toggleNavigation($event)" - (darkModeEmitter)="changeColorMode($event)" - > - </goofy-client-header> + + <goofy-client-header-container></goofy-client-header-container> <div class="container"> - <goofy-client-navigation [isSmall]="navigationCollapse$ | async"></goofy-client-navigation> + <goofy-client-navigation></goofy-client-navigation> <main><router-outlet></router-outlet></main> <section> <goofy-client-build-info [apiRoot]="apiRoot.resource"></goofy-client-build-info> diff --git a/goofy-client/apps/goofy/src/app/app.component.ts b/goofy-client/apps/goofy/src/app/app.component.ts index 8be6a9867358547a915ee6dd79ee45434fb29213..74c8749c6ca733a74d2bd201a6b5f6f6587de844 100644 --- a/goofy-client/apps/goofy/src/app/app.component.ts +++ b/goofy-client/apps/goofy/src/app/app.component.ts @@ -1,10 +1,8 @@ -import { DOCUMENT } from '@angular/common'; -import { Component, Inject, Renderer2 } from '@angular/core'; +import { Component } from '@angular/core'; import { ApiRootResource, ApiRootService } from '@goofy-client/api-root-shared'; import { StateResource } from '@goofy-client/tech-shared'; import { IconService } from '@goofy-client/ui'; -import { Observable, of } from 'rxjs'; -import { AppService, localStorageDark } from '@goofy-client/app-shared'; +import { Observable } from 'rxjs'; @Component({ selector: 'goofy-client-root', @@ -16,42 +14,11 @@ export class AppComponent { apiRoot$: Observable<StateResource<ApiRootResource>>; - navigationCollapse$: Observable<boolean>; - darkMode$: Observable<boolean>; - constructor( - iconService: IconService, - private appService: AppService, - private renderer: Renderer2, - @Inject(DOCUMENT) private document: Document, - apiRootService: ApiRootService + apiRootService: ApiRootService, + iconServie: IconService ) { - this.navigationCollapse$ = this.appService.getNavigationCollapse(); - this.darkMode$ = this.appService.getDarkMode(); this.apiRoot$ = apiRootService.getApiRoot(); - - iconService.registerIcons(); - - this.subscribeToDarkMode(); - } - - private subscribeToDarkMode(): void { - this.darkMode$.subscribe(darkMode => darkMode ? this.addClass(localStorageDark) : this.removeClass(localStorageDark)); - } - - private addClass(styleClass: string): void { - this.renderer.addClass(this.document.body, styleClass); - } - - private removeClass(styleClass: string): void { - this.renderer.removeClass(this.document.body, styleClass); - } - - toggleNavigation(isToggle: boolean): void { - this.appService.setNavigationCollapse(isToggle); - } - - changeColorMode(darkMode: boolean): void { - this.appService.setDarkMode(darkMode); + iconServie.registerIcons(); } } \ No newline at end of file diff --git a/goofy-client/apps/goofy/src/styles/layout/_main.scss b/goofy-client/apps/goofy/src/styles/layout/_main.scss index 99ee47fc9cb37b092f95af2227a4a0110c2358fe..21e63680925abed2455de45ac261273fb146697f 100644 --- a/goofy-client/apps/goofy/src/styles/layout/_main.scss +++ b/goofy-client/apps/goofy/src/styles/layout/_main.scss @@ -1,7 +1,6 @@ .l-scroll-area { height: calc(100vh - 112px); background-color: #fff; - display: block; } body.dark .l-scroll-area { diff --git a/goofy-client/apps/goofy/src/styles/main.scss b/goofy-client/apps/goofy/src/styles/main.scss index 527d7ef204ec39cd46dbbf2d2225005849d8cfd3..0008c833f51751b842b57864b8132802ddbd861f 100644 --- a/goofy-client/apps/goofy/src/styles/main.scss +++ b/goofy-client/apps/goofy/src/styles/main.scss @@ -6,7 +6,7 @@ @import "layout/main"; @import "~libs/vorgang/src/lib/vorgang-detail/vorgang-detail.theme"; @import "~libs/navigation/src/lib/navigation/navigation.theme"; -@import "~libs/navigation/src/lib/header/header.theme"; +@import "~libs/navigation/src/lib/header-container/header/header.theme"; @import "~libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item"; @include mat-core(); diff --git a/goofy-client/libs/api-root-shared/src/lib/api-root.module.spec.ts b/goofy-client/libs/api-root-shared/src/lib/api-root.module.spec.ts index bc360c1cf70b23500362af1b7269e902e2fb51e6..59a08bfb706c0593453a4082ec347643ec3d4d0d 100644 --- a/goofy-client/libs/api-root-shared/src/lib/api-root.module.spec.ts +++ b/goofy-client/libs/api-root-shared/src/lib/api-root.module.spec.ts @@ -1,4 +1,4 @@ -import { TestBed } from "@angular/core/testing"; +import { TestBed } from '@angular/core/testing'; import { ApiRootModule } from './api-root.module'; describe('ApiRootModule', () => { diff --git a/goofy-client/libs/api-root-shared/src/lib/api-root.repository.spec.ts b/goofy-client/libs/api-root-shared/src/lib/api-root.repository.spec.ts index 6d01f78e8e407944b855ed6e845a4168787c7d69..e7ace8e186ae221f0b92bae80f462390063e37b1 100644 --- a/goofy-client/libs/api-root-shared/src/lib/api-root.repository.spec.ts +++ b/goofy-client/libs/api-root-shared/src/lib/api-root.repository.spec.ts @@ -1,8 +1,8 @@ import { Mock, mock, useFromMock } from '@goofy-client/test-utils'; import { HttpService } from '@ngxp/rest'; import { Environment } from 'libs/environment-shared/src/lib/environment.model'; -import { ApiRootRepository } from "./api-root.repository" -import { createEnvironment } from "../../../environment-shared/test/environment"; +import { createEnvironment } from '../../../environment-shared/test/environment'; +import { ApiRootRepository } from './api-root.repository'; var repository: ApiRootRepository; var httpService: Mock<HttpService>; diff --git a/goofy-client/libs/app-shared/src/lib/app-shared.module.spec.ts b/goofy-client/libs/app-shared/src/lib/app-shared.module.spec.ts index dedef893fb2d891acad18d07de492d94ad032cbc..781a06b3f046c12235539b4a4b53e68d9e818905 100644 --- a/goofy-client/libs/app-shared/src/lib/app-shared.module.spec.ts +++ b/goofy-client/libs/app-shared/src/lib/app-shared.module.spec.ts @@ -1,4 +1,4 @@ -import { TestBed } from "@angular/core/testing"; +import { TestBed } from '@angular/core/testing'; import { AppSharedModule } from './app-shared.module'; describe('AppSharedModule', () => { diff --git a/goofy-client/libs/app-shared/src/lib/app.service.spec.ts b/goofy-client/libs/app-shared/src/lib/app.service.spec.ts index 79826b49b8fd8a163c00bc05e65aa00ffe2041e0..1494779cfa209634a02a477ef4b2df9bb4e538a6 100644 --- a/goofy-client/libs/app-shared/src/lib/app.service.spec.ts +++ b/goofy-client/libs/app-shared/src/lib/app.service.spec.ts @@ -1,4 +1,4 @@ -import { AppService } from "./app.service"; +import { AppService } from './app.service'; describe('AppService', () => { let service: AppService; diff --git a/goofy-client/libs/navigation/src/lib/build-info/build-info.component.html b/goofy-client/libs/navigation/src/lib/build-info/build-info.component.html index de6b1597a0163e11642929c0fa288de2648769b7..e676042ec8adfd97593e95c622145c1101f0e5e9 100644 --- a/goofy-client/libs/navigation/src/lib/build-info/build-info.component.html +++ b/goofy-client/libs/navigation/src/lib/build-info/build-info.component.html @@ -1 +1 @@ -<p>Version: {{ apiRoot.version }} | BuildTime: {{ apiRoot.buildTime | date: 'dd.MM.yy HH:mm:ss' }}</p> \ No newline at end of file +<p>Version: {{ apiRoot.version }} | BuildTime: {{ apiRoot.buildTime | date: "dd.MM.yy HH:mm:ss" }}</p> \ No newline at end of file diff --git a/goofy-client/libs/navigation/src/lib/header-container/header-container.component.html b/goofy-client/libs/navigation/src/lib/header-container/header-container.component.html new file mode 100644 index 0000000000000000000000000000000000000000..cfefa65f52f169b1c4105aeaf60f207bfab3d7da --- /dev/null +++ b/goofy-client/libs/navigation/src/lib/header-container/header-container.component.html @@ -0,0 +1,6 @@ +<goofy-client-header + [darkMode]="darkMode$ | async" + [navigationCollapse]="navigationCollapse$ | async" + (toggleMenuEvent)="toggleNavigation($event)" + (darkModeEmitter)="changeColorMode($event)"> +</goofy-client-header> \ No newline at end of file diff --git a/goofy-client/libs/navigation/src/lib/header-container/header-container.component.scss b/goofy-client/libs/navigation/src/lib/header-container/header-container.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/goofy-client/libs/navigation/src/lib/header-container/header-container.component.spec.ts b/goofy-client/libs/navigation/src/lib/header-container/header-container.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..3b328594d3ee0aef55c8d6be8196ef9b22f284a1 --- /dev/null +++ b/goofy-client/libs/navigation/src/lib/header-container/header-container.component.spec.ts @@ -0,0 +1,39 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { AppService } from '@goofy-client/app-shared'; +import { BehaviorSubject } from 'rxjs'; +import { HeaderContainerComponent } from './header-container.component'; +import { mock, mockComponent, headerMockComponent } from '@goofy-client/test-utils'; + +describe('HeaderContainerComponent', () => { + let component: HeaderContainerComponent; + let fixture: ComponentFixture<HeaderContainerComponent>; + + const darkModeSubj: BehaviorSubject<boolean> = new BehaviorSubject(false); + const appService = { ...mock(AppService), getDarkMode: () => darkModeSubj }; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ + HeaderContainerComponent, + mockComponent(headerMockComponent), + ], + providers: [ + { + provide: AppService, + useValue: appService + } + ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(HeaderContainerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); \ No newline at end of file diff --git a/goofy-client/libs/navigation/src/lib/header-container/header-container.component.ts b/goofy-client/libs/navigation/src/lib/header-container/header-container.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..436f95c6574eb03c56f80c85ca4989367c89eb06 --- /dev/null +++ b/goofy-client/libs/navigation/src/lib/header-container/header-container.component.ts @@ -0,0 +1,46 @@ +import { DOCUMENT } from '@angular/common'; +import { Component, Inject, Renderer2 } from '@angular/core'; +import { Observable } from 'rxjs'; +import { AppService, localStorageDark } from '@goofy-client/app-shared'; + +@Component({ + selector: 'goofy-client-header-container', + templateUrl: './header-container.component.html', + styleUrls: ['./header-container.component.scss'] +}) +export class HeaderContainerComponent { + + navigationCollapse$: Observable<boolean>; + darkMode$: Observable<boolean>; + + constructor( + private appService: AppService, + private renderer: Renderer2, + @Inject(DOCUMENT) private document: Document, + ) { + this.navigationCollapse$ = this.appService.getNavigationCollapse(); + this.darkMode$ = this.appService.getDarkMode(); + + this.subscribeToDarkMode(); + } + + private subscribeToDarkMode(): void { + this.darkMode$.subscribe(darkMode => darkMode ? this.addClass(localStorageDark) : this.removeClass(localStorageDark)); + } + + private addClass(styleClass: string): void { + this.renderer.addClass(this.document.body, styleClass); + } + + private removeClass(styleClass: string): void { + this.renderer.removeClass(this.document.body, styleClass); + } + + toggleNavigation(isToggle: boolean): void { + this.appService.setNavigationCollapse(isToggle); + } + + changeColorMode(darkMode: boolean): void { + this.appService.setDarkMode(darkMode); + } +} \ No newline at end of file diff --git a/goofy-client/libs/navigation/src/lib/header/_header.theme.scss b/goofy-client/libs/navigation/src/lib/header-container/header/_header.theme.scss similarity index 100% rename from goofy-client/libs/navigation/src/lib/header/_header.theme.scss rename to goofy-client/libs/navigation/src/lib/header-container/header/_header.theme.scss diff --git a/goofy-client/libs/navigation/src/lib/header/header.component.html b/goofy-client/libs/navigation/src/lib/header-container/header/header.component.html similarity index 100% rename from goofy-client/libs/navigation/src/lib/header/header.component.html rename to goofy-client/libs/navigation/src/lib/header-container/header/header.component.html diff --git a/goofy-client/libs/navigation/src/lib/header/header.component.scss b/goofy-client/libs/navigation/src/lib/header-container/header/header.component.scss similarity index 100% rename from goofy-client/libs/navigation/src/lib/header/header.component.scss rename to goofy-client/libs/navigation/src/lib/header-container/header/header.component.scss diff --git a/goofy-client/libs/navigation/src/lib/header/header.component.spec.ts b/goofy-client/libs/navigation/src/lib/header-container/header/header.component.spec.ts similarity index 100% rename from goofy-client/libs/navigation/src/lib/header/header.component.spec.ts rename to goofy-client/libs/navigation/src/lib/header-container/header/header.component.spec.ts diff --git a/goofy-client/libs/navigation/src/lib/header/header.component.ts b/goofy-client/libs/navigation/src/lib/header-container/header/header.component.ts similarity index 100% rename from goofy-client/libs/navigation/src/lib/header/header.component.ts rename to goofy-client/libs/navigation/src/lib/header-container/header/header.component.ts diff --git a/goofy-client/libs/navigation/src/lib/header/settings/settings.component.html b/goofy-client/libs/navigation/src/lib/header-container/header/settings/settings.component.html similarity index 100% rename from goofy-client/libs/navigation/src/lib/header/settings/settings.component.html rename to goofy-client/libs/navigation/src/lib/header-container/header/settings/settings.component.html diff --git a/goofy-client/libs/navigation/src/lib/header/settings/settings.component.scss b/goofy-client/libs/navigation/src/lib/header-container/header/settings/settings.component.scss similarity index 100% rename from goofy-client/libs/navigation/src/lib/header/settings/settings.component.scss rename to goofy-client/libs/navigation/src/lib/header-container/header/settings/settings.component.scss diff --git a/goofy-client/libs/navigation/src/lib/header/settings/settings.component.spec.ts b/goofy-client/libs/navigation/src/lib/header-container/header/settings/settings.component.spec.ts similarity index 100% rename from goofy-client/libs/navigation/src/lib/header/settings/settings.component.spec.ts rename to goofy-client/libs/navigation/src/lib/header-container/header/settings/settings.component.spec.ts diff --git a/goofy-client/libs/navigation/src/lib/header/settings/settings.component.ts b/goofy-client/libs/navigation/src/lib/header-container/header/settings/settings.component.ts similarity index 100% rename from goofy-client/libs/navigation/src/lib/header/settings/settings.component.ts rename to goofy-client/libs/navigation/src/lib/header-container/header/settings/settings.component.ts diff --git a/goofy-client/libs/navigation/src/lib/navigation.module.spec.ts b/goofy-client/libs/navigation/src/lib/navigation.module.spec.ts index 5f94946de7649c93a9471476e4bf20177698deac..f6f240527ee0d8e3908afe11a24c1174d61ccf1a 100644 --- a/goofy-client/libs/navigation/src/lib/navigation.module.spec.ts +++ b/goofy-client/libs/navigation/src/lib/navigation.module.spec.ts @@ -1,4 +1,4 @@ -import { TestBed } from "@angular/core/testing"; +import { TestBed } from '@angular/core/testing'; import { NavigationModule } from './navigation.module'; describe('UiModule', () => { diff --git a/goofy-client/libs/navigation/src/lib/navigation.module.ts b/goofy-client/libs/navigation/src/lib/navigation.module.ts index ea90a8448eebb6865fae0aa5237db1bf8da907c5..f261c9cdc8faa0d82e4947809d900515b3a580ee 100644 --- a/goofy-client/libs/navigation/src/lib/navigation.module.ts +++ b/goofy-client/libs/navigation/src/lib/navigation.module.ts @@ -1,21 +1,23 @@ -import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { HeaderComponent } from './header/header.component'; -import { SettingsComponent } from './header/settings/settings.component'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { UiModule } from '@goofy-client/ui'; import { BuildInfoComponent } from './build-info/build-info.component'; +import { HeaderContainerComponent } from './header-container/header-container.component'; +import { HeaderComponent } from './header-container/header/header.component'; +import { SettingsComponent } from './header-container/header/settings/settings.component'; import { NavigationComponent } from './navigation/navigation.component'; -import { UiModule } from '@goofy-client/ui'; -import { RouterModule } from '@angular/router'; @NgModule({ declarations: [ BuildInfoComponent, HeaderComponent, NavigationComponent, - SettingsComponent + SettingsComponent, + HeaderContainerComponent ], - imports: [ - CommonModule, + imports: [ + CommonModule, UiModule, RouterModule ], @@ -23,7 +25,8 @@ import { RouterModule } from '@angular/router'; BuildInfoComponent, HeaderComponent, NavigationComponent, - SettingsComponent + SettingsComponent, + HeaderContainerComponent ] }) -export class NavigationModule {} +export class NavigationModule { } diff --git a/goofy-client/libs/navigation/src/lib/navigation/navigation.component.html b/goofy-client/libs/navigation/src/lib/navigation/navigation.component.html index 92b9d12df6c88b64ea910ed14b7c6791135e544a..c31f640aa4954daeab7dac7939f665569715932c 100644 --- a/goofy-client/libs/navigation/src/lib/navigation/navigation.component.html +++ b/goofy-client/libs/navigation/src/lib/navigation/navigation.component.html @@ -1,4 +1,4 @@ -<nav [ngClass]="{ small: isSmall }"> +<nav [ngClass]="{ small: navigationCollapse$ | async }"> <ul> <li> <a routerLink="/" routerLinkActive="active" [routerLinkActiveOptions]="{ exact: true }" matRipple matRippleColor="rgba(13,71,161, 0.08)"> diff --git a/goofy-client/libs/navigation/src/lib/navigation/navigation.component.spec.ts b/goofy-client/libs/navigation/src/lib/navigation/navigation.component.spec.ts index 494ef347aec5e74464b3d85a85cbc1d42e20c3fe..9264ca10c7a806305a4edb74e1865cfac5a24421 100644 --- a/goofy-client/libs/navigation/src/lib/navigation/navigation.component.spec.ts +++ b/goofy-client/libs/navigation/src/lib/navigation/navigation.component.spec.ts @@ -1,27 +1,35 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { NavigationComponent } from './navigation.component'; -import { BuildInfoComponent } from '../build-info/build-info.component'; -import { HeaderComponent } from '../header/header.component'; import { RouterTestingModule } from '@angular/router/testing'; import { UiModule } from '@goofy-client/ui'; -import { SettingsComponent } from '../header/settings/settings.component'; +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { AppService } from '@goofy-client/app-shared'; +import { mock } from '@goofy-client/test-utils'; +import { BehaviorSubject } from 'rxjs'; describe('NavigationComponent', () => { let component: NavigationComponent; let fixture: ComponentFixture<NavigationComponent>; + const navigationCollapseSubj: BehaviorSubject<boolean> = new BehaviorSubject(false); + const appService = { ...mock(AppService), getNavigationCollapse: () => navigationCollapseSubj }; + beforeEach(async () => { await TestBed.configureTestingModule({ imports: [ - RouterTestingModule, - UiModule + UiModule, + RouterTestingModule + ], + providers: [ + { + provide: AppService, + useValue: appService + } ], declarations: [ - NavigationComponent, - BuildInfoComponent, - HeaderComponent, - SettingsComponent - ] + NavigationComponent + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA] }) .compileComponents(); }); diff --git a/goofy-client/libs/navigation/src/lib/navigation/navigation.component.ts b/goofy-client/libs/navigation/src/lib/navigation/navigation.component.ts index 8c0a898bcea6e29c313d61ae12cd0039d2985f8a..f9102704cc1bf371df87871f2df29edb4142e400 100644 --- a/goofy-client/libs/navigation/src/lib/navigation/navigation.component.ts +++ b/goofy-client/libs/navigation/src/lib/navigation/navigation.component.ts @@ -1,4 +1,6 @@ -import { Component, Input } from '@angular/core'; +import { Component } from '@angular/core'; +import { AppService } from '@goofy-client/app-shared'; +import { Observable } from 'rxjs'; @Component({ selector: 'goofy-client-navigation', @@ -7,6 +9,9 @@ import { Component, Input } from '@angular/core'; }) export class NavigationComponent { - @Input() isSmall: boolean; + navigationCollapse$: Observable<boolean>; -} + constructor(private appService: AppService) { + this.navigationCollapse$ = this.appService.getNavigationCollapse(); + } +} \ No newline at end of file diff --git a/goofy-client/libs/tech-shared/src/lib/directives/observe-intersection.directive.ts b/goofy-client/libs/tech-shared/src/lib/directives/observe-intersection.directive.ts deleted file mode 100644 index f18ddaa04f9dd032a271fa6b2892cc26857defcd..0000000000000000000000000000000000000000 --- a/goofy-client/libs/tech-shared/src/lib/directives/observe-intersection.directive.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { Directive, ElementRef, EventEmitter, Input, Output } from '@angular/core'; -import { Subject } from 'rxjs'; -import { delay, filter } from 'rxjs/operators'; - -@Directive({ - selector: '[goofyClientObserveIntersection]' -}) -export class ObserveIntersectionDirective { - - @Input() debounceTime = 0; - @Input() threshold = 1; - - @Output() intersect = new EventEmitter<boolean>(); - - private observer: IntersectionObserver | undefined; - private subject$ = new Subject<{ - entry: IntersectionObserverEntry; - observer: IntersectionObserver; - }>(); - - constructor(private element: ElementRef) {} - - ngOnInit() { - this.createObserver(); - } - - ngAfterViewInit() { - this.startObservingElements(); - } - - private createObserver() { - const options = { - rootMargin: '0px', - threshold: this.threshold, - }; - - this.observer = new IntersectionObserver((entries, observer) => { - entries.forEach(entry => { - this.subject$.next({ entry, observer }); - }); - }, options); - } - - private isCompleteVisible(element: HTMLElement): Promise<boolean> { - return new Promise(resolve => { - const observer = new IntersectionObserver(([entry]) => { - resolve(entry.intersectionRatio === 1); - observer.disconnect(); - }); - - observer.observe(element); - }); - } - - private startObservingElements() { - if (!this.observer) { - return; - } - - this.observer.observe(this.element.nativeElement); - - this.subject$ - .pipe(delay(this.debounceTime), filter(Boolean)) - .subscribe(async ({ entry, observer }) => { - const target = entry.target as HTMLElement; - const isCompleteVisible = await this.isCompleteVisible(target); - this.intersect.emit(isCompleteVisible); - }); - } -} diff --git a/goofy-client/libs/tech-shared/src/lib/pipes/format-tooltip-list-date.spec.ts b/goofy-client/libs/tech-shared/src/lib/pipes/format-date-with-time.spec.ts similarity index 72% rename from goofy-client/libs/tech-shared/src/lib/pipes/format-tooltip-list-date.spec.ts rename to goofy-client/libs/tech-shared/src/lib/pipes/format-date-with-time.spec.ts index c373ff7f7bfbc949328d0481d2e7193611df8d91..23f93dfe265622f1e9cca6eae395df0df541d791 100644 --- a/goofy-client/libs/tech-shared/src/lib/pipes/format-tooltip-list-date.spec.ts +++ b/goofy-client/libs/tech-shared/src/lib/pipes/format-date-with-time.spec.ts @@ -1,12 +1,12 @@ -import { FormatTooltipListDatePipe } from './format-tooltip-list-date'; +import { FormatDateWithTimePipe } from './format-date-with-time'; import { registerLocaleData } from '@angular/common'; import localeDe from '@angular/common/locales/de'; import localeDeExtra from '@angular/common/locales/extra/de'; registerLocaleData(localeDe, 'de', localeDeExtra); -describe('FormatTooltipListDate', () => { - let pipe: FormatTooltipListDatePipe = new FormatTooltipListDatePipe(); +describe('FormatDateWithTimePipe', () => { + let pipe: FormatDateWithTimePipe = new FormatDateWithTimePipe(); it('should create', () => { expect(pipe).toBeTruthy(); diff --git a/goofy-client/libs/tech-shared/src/lib/pipes/format-tooltip-list-date.ts b/goofy-client/libs/tech-shared/src/lib/pipes/format-date-with-time.ts similarity index 68% rename from goofy-client/libs/tech-shared/src/lib/pipes/format-tooltip-list-date.ts rename to goofy-client/libs/tech-shared/src/lib/pipes/format-date-with-time.ts index b33f4a2d026d1f9a9fe3d07961379f90070c3030..c6286a0605047ab1577515e6e8ad6f1f95d52fc0 100644 --- a/goofy-client/libs/tech-shared/src/lib/pipes/format-tooltip-list-date.ts +++ b/goofy-client/libs/tech-shared/src/lib/pipes/format-date-with-time.ts @@ -1,8 +1,8 @@ import { formatDate } from '@angular/common'; import { Pipe, PipeTransform } from '@angular/core'; -@Pipe({ name: 'formatTooltipListDate' }) -export class FormatTooltipListDatePipe implements PipeTransform { +@Pipe({ name: 'formatDateWithTimePipe' }) +export class FormatDateWithTimePipe implements PipeTransform { dateFormat: string = 'EEEE, dd.MM.y, H:mm:ss'; transform(date: Date) { diff --git a/goofy-client/libs/tech-shared/src/lib/resource/resource.util.ts b/goofy-client/libs/tech-shared/src/lib/resource/resource.util.ts index ea29d13c2282eaf6b47e1bff18fc11ab29cbca0e..588db0f08ce4cb6c9fc3e8639b4be90864db89b1 100644 --- a/goofy-client/libs/tech-shared/src/lib/resource/resource.util.ts +++ b/goofy-client/libs/tech-shared/src/lib/resource/resource.util.ts @@ -1,9 +1,9 @@ -import { getUrl, Resource, ResourceUri } from '@ngxp/rest'; +import { getUrl, Resource } from '@ngxp/rest'; import { isNil } from 'lodash-es'; import { getLastValueFromLastIndexOf } from '../tech-shared.util'; export interface ListResource extends Resource { - _embedded_ + _embedded } export interface StateResource<T> { diff --git a/goofy-client/libs/tech-shared/src/lib/tech-shared.module.ts b/goofy-client/libs/tech-shared/src/lib/tech-shared.module.ts index 149461b3c07da9a7f71d92e5dade648864534312..81375873cb0f3cd9e31d484fb52c708454a11ee3 100644 --- a/goofy-client/libs/tech-shared/src/lib/tech-shared.module.ts +++ b/goofy-client/libs/tech-shared/src/lib/tech-shared.module.ts @@ -1,23 +1,20 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { ObserveIntersectionDirective } from './directives/observe-intersection.directive'; import { FormatListDatePipe } from './pipes/format-list-date.pipe'; import { EnumToLabelPipe } from './pipes/enum-to-label'; -import { FormatTooltipListDatePipe } from './pipes/format-tooltip-list-date'; +import { FormatDateWithTimePipe } from './pipes/format-date-with-time'; @NgModule({ imports: [CommonModule], declarations: [ - ObserveIntersectionDirective, FormatListDatePipe, EnumToLabelPipe, - FormatTooltipListDatePipe + FormatDateWithTimePipe ], exports: [ - ObserveIntersectionDirective, FormatListDatePipe, EnumToLabelPipe, - FormatTooltipListDatePipe + FormatDateWithTimePipe ] }) export class TechSharedModule {} diff --git a/goofy-client/libs/test-utils/src/index.ts b/goofy-client/libs/test-utils/src/index.ts index fb70f55dc0db7b09f9596282b28ed65f91a946b2..182bd8d95834429bf265ecd2e8f1fb1677509e2f 100644 --- a/goofy-client/libs/test-utils/src/index.ts +++ b/goofy-client/libs/test-utils/src/index.ts @@ -1,2 +1,3 @@ export * from './lib/test-utils.module'; -export * from './lib/mocking'; \ No newline at end of file +export * from './lib/mocking'; +export * from './lib/mock.components'; \ No newline at end of file diff --git a/goofy-client/libs/test-utils/src/lib/mock.components.ts b/goofy-client/libs/test-utils/src/lib/mock.components.ts new file mode 100644 index 0000000000000000000000000000000000000000..ce35f5144741260481700892cd42ab55530745d4 --- /dev/null +++ b/goofy-client/libs/test-utils/src/lib/mock.components.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +export const headerMockComponent: Component = { + selector: 'goofy-client-header', + inputs: ['darkMode', 'navigationCollapse'], + outputs: ['toggleMenuEvent', 'darkModeEmitter'] +} \ No newline at end of file diff --git a/goofy-client/libs/test-utils/src/lib/mocking.ts b/goofy-client/libs/test-utils/src/lib/mocking.ts index 28814edd041a704a0c720d0198ba4e76954ea840..ce6f16b63d0e4937b06ac8a4e9eafd4041d51fbf 100644 --- a/goofy-client/libs/test-utils/src/lib/mocking.ts +++ b/goofy-client/libs/test-utils/src/lib/mocking.ts @@ -1,8 +1,7 @@ -import { Type } from '@angular/core'; +import { Component, EventEmitter, Type } from '@angular/core'; export type Mock<T> = { [K in keyof T]: jest.Mock; }; - export function mock<T>(service: Type<T>): Mock<T> { return <Mock<T>>Object.getOwnPropertyNames(service.prototype).reduce((mock, key) => ({ ...mock, @@ -12,4 +11,23 @@ export function mock<T>(service: Type<T>): Mock<T> { export function useFromMock<T>(mock: Mock<T>): T { return <T><any>mock; +} + +export function mockComponent(options: Component): Component { + + const metadata: Component = { + selector: options.selector, + template: options.template || '', + inputs: options.inputs, + outputs: options.outputs || [], + exportAs: options.exportAs || '' + }; + + class Mock { } + + metadata.outputs.forEach(method => { + Mock.prototype[method] = new EventEmitter<any>(); + }); + + return Component(metadata)(Mock as any); } \ No newline at end of file diff --git a/goofy-client/libs/test-utils/src/lib/test-utils.module.spec.ts b/goofy-client/libs/test-utils/src/lib/test-utils.module.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..28b8b4ea34e00a69da1907d211c4dda646d332eb --- /dev/null +++ b/goofy-client/libs/test-utils/src/lib/test-utils.module.spec.ts @@ -0,0 +1,14 @@ +import { TestBed } from '@angular/core/testing'; +import { TestUtilsModule } from './test-utils.module'; + +describe('TestUtilsModule', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [TestUtilsModule], + }).compileComponents(); + }); + + it('should create', () => { + expect(TestUtilsModule).toBeDefined(); + }); +}); diff --git a/goofy-client/libs/ui/src/lib/ui/ui.module.spec.ts b/goofy-client/libs/ui/src/lib/ui/ui.module.spec.ts index 7569aa7daaa6eb82888a1557aa4ae0bc0dd32541..3550fdccc03d9104a1f7899da64178dc5401e0f5 100644 --- a/goofy-client/libs/ui/src/lib/ui/ui.module.spec.ts +++ b/goofy-client/libs/ui/src/lib/ui/ui.module.spec.ts @@ -1,4 +1,4 @@ -import { TestBed } from "@angular/core/testing"; +import { TestBed } from '@angular/core/testing'; import { UiModule } from './ui.module'; describe('UiModule', () => { diff --git a/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-container/vorgang-detail-container.component.ts b/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-container/vorgang-detail-container.component.ts index 542703e5a493278d227b11f989f0e26bd13af8da..10f0479836f35b77b1944b597a40de61902fd39e 100644 --- a/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-container/vorgang-detail-container.component.ts +++ b/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-container/vorgang-detail-container.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit } from '@angular/core'; @Component({ - selector: 'goofy-client-vorgang-detail-container', + selector: '[goofy-client-vorgang-detail-container]', templateUrl: './vorgang-detail-container.component.html', styleUrls: ['./vorgang-detail-container.component.scss'] }) diff --git a/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-page.component.html b/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-page.component.html index 3dafe0a6e8de15f3f9b233516c5a18c3bd467de5..99e0ca335a0ede65403bbe9f78ad0f2ddad583e1 100644 --- a/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-page.component.html +++ b/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-page.component.html @@ -3,4 +3,5 @@ <mat-icon>arrow_back</mat-icon> </a> </goofy-client-subnavigation> -<goofy-client-vorgang-detail-container class="l-scroll-area"></goofy-client-vorgang-detail-container> + +<div goofy-client-vorgang-detail-container class="l-scroll-area"></div> diff --git a/goofy-client/libs/vorgang-shared/src/lib/vorgang.service.spec.ts b/goofy-client/libs/vorgang-shared/src/lib/vorgang.service.spec.ts index 8b26f92390316a445d3091219e2d76b1c76f422d..3b88fb9a2096e3fd66848a64a90b97f4602330f3 100644 --- a/goofy-client/libs/vorgang-shared/src/lib/vorgang.service.spec.ts +++ b/goofy-client/libs/vorgang-shared/src/lib/vorgang.service.spec.ts @@ -1,15 +1,15 @@ +import { ApiRootResource } from '@goofy-client/api-root-shared'; import { createEmptyStateResource, createStateResource } from '@goofy-client/tech-shared'; -import { of } from 'rxjs'; -import { VorgangRepository } from './vorgang.repository'; -import { VorgangService } from './vorgang.service'; import { Mock, mock, useFromMock } from '@goofy-client/test-utils'; +import { getEmbeddedResource } from '@ngxp/rest'; import { ApiRootService } from 'libs/api-root-shared/src/lib/api-root.service'; import { createApiRootResource } from 'libs/api-root-shared/test/api-root'; -import { ApiRootResource } from '@goofy-client/api-root-shared'; import { createVorgangListResource } from 'libs/vorgang-shared/test/vorgang'; -import { VorgangListResource, VorgangResource } from './vorgang.model'; +import { of } from 'rxjs'; import { VorgangListLinkRel } from './vorgang.linkrels'; -import { getEmbeddedResource } from '@ngxp/rest'; +import { VorgangListResource, VorgangResource } from './vorgang.model'; +import { VorgangRepository } from './vorgang.repository'; +import { VorgangService } from './vorgang.service'; describe('VorgangService', () => { let service: VorgangService; @@ -19,28 +19,28 @@ describe('VorgangService', () => { beforeEach(() => { repository = mock(VorgangRepository); apiRootService = mock(ApiRootService); - + service = new VorgangService(useFromMock(apiRootService), useFromMock(repository)); }) - + describe('getCurrentVorgangList', () => { const apiRootResource: ApiRootResource = createApiRootResource(); const vorgangListResource: VorgangListResource = createVorgangListResource(); - + beforeEach(() => { (<any>apiRootService).getApiRoot.mockReturnValue(of(createStateResource(apiRootResource))); }) - + it('should call repository if not loaded', () => { - (<any>service).currentVorgangList$.next(of(null)); + (<any>service).currentList$.next(of(null)); service.getCurrentVorgangList(); - + expect(repository.loadVorgangList).toHaveBeenCalledWith(apiRootResource); }) - + it('should not call repository if already loading', () => { - (<any>service).currentVorgangList$.next(createEmptyStateResource(true)); + (<any>service).currentList$.next(createEmptyStateResource(true)); service.getCurrentVorgangList(); @@ -55,11 +55,11 @@ describe('VorgangService', () => { it('should set loading flag', () => { service.getCurrentVorgangList(); - - expect((<any>service).currentVorgangList$.value.loading).toBe(true); + + expect((<any>service).currentList$.value.loading).toBe(true); }); }) - + describe('check currentVorgangList after load ', () => { beforeEach(() => { @@ -69,32 +69,32 @@ describe('VorgangService', () => { it('should set loaded', () => { service.getCurrentVorgangList(); - expect((<any>service).currentVorgangList$.value.loaded).toBe(true); + expect((<any>service).currentList$.value.loaded).toBe(true); }); it('should set resource', () => { service.getCurrentVorgangList(); - expect((<any>service).currentVorgangList$.value.resource).toBe(vorgangListResource); + expect((<any>service).currentList$.value.resource).toBe(vorgangListResource); }); it('should unset loading', () => { service.getCurrentVorgangList(); - expect((<any>service).currentVorgangList$.value.loading).toBe(false); + expect((<any>service).currentList$.value.loading).toBe(false); }); }) - + describe('check vorgaenge after load', () => { const expected: VorgangResource[] = getEmbeddedResource(vorgangListResource, VorgangListLinkRel.VORGANG_HEADER_LIST); beforeEach(() => { repository.loadVorgangList.mockReturnValue(of(vorgangListResource)); }) - + it('should set vorgaenge to loaded vorgaenge', () => { service.getCurrentVorgangList(); - + expect((<any>service).vorgaenge$.value).toHaveLength(expected.length); expect((<any>service).vorgaenge$.value).toBe(expected); }) @@ -104,15 +104,15 @@ describe('VorgangService', () => { it('should be true if link exists', () => { repository.loadVorgangList.mockReturnValue(of(createVorgangListResource([VorgangListLinkRel.NEXT]))); - + service.getCurrentVorgangList(); expect((<any>service).hasNextPage$.value).toBe(true); }) - + it('should be false if link not exists', () => { repository.loadVorgangList.mockReturnValue(of(createVorgangListResource())); - + service.getCurrentVorgangList(); expect((<any>service).hasNextPage$.value).toBe(false); @@ -128,10 +128,10 @@ describe('VorgangService', () => { }) it('should call repository', () => { - (<any>service).currentVorgangList$.next(createStateResource(vorgangListResource)); + (<any>service).currentList$.next(createStateResource(vorgangListResource)); service.loadNextPage(); - + expect(repository.getNextVorgangListPage).toHaveBeenCalledWith(vorgangListResource); }) @@ -143,8 +143,8 @@ describe('VorgangService', () => { it('should set loading flag', () => { service.loadNextPage(); - - expect((<any>service).currentVorgangList$.value.loading).toBe(true); + + expect((<any>service).currentList$.value.loading).toBe(true); }); }) @@ -157,19 +157,19 @@ describe('VorgangService', () => { it('should set loaded', () => { service.loadNextPage(); - expect((<any>service).currentVorgangList$.value.loaded).toBe(true); + expect((<any>service).currentList$.value.loaded).toBe(true); }); it('should set resource', () => { service.loadNextPage(); - expect((<any>service).currentVorgangList$.value.resource).toBe(vorgangListResource); + expect((<any>service).currentList$.value.resource).toBe(vorgangListResource); }); it('should unset loading', () => { service.loadNextPage(); - expect((<any>service).currentVorgangList$.value.loading).toBe(false); + expect((<any>service).currentList$.value.loading).toBe(false); }); }) @@ -178,18 +178,18 @@ describe('VorgangService', () => { const additionalVorgangList: VorgangListResource = createVorgangListResource(); const additionalVorgaenge: VorgangResource[] = getEmbeddedResource(additionalVorgangList, VorgangListLinkRel.VORGANG_HEADER_LIST); - + beforeEach(() => { (<any>service).vorgaenge$.next([]); repository.getNextVorgangListPage.mockReturnValue(of(additionalVorgangList)); }) - + it('should add vorgaenge to exist vorgaenge', () => { (<any>service).vorgaenge$.next(vorgaenge); const expectedVorgaenge: VorgangResource[] = []; expectedVorgaenge.push.apply(expectedVorgaenge, vorgaenge); expectedVorgaenge.push.apply(expectedVorgaenge, additionalVorgaenge); - + service.loadNextPage(); expect((<any>service).vorgaenge$.value).toHaveLength(20); @@ -201,15 +201,15 @@ describe('VorgangService', () => { it('should be true if link exists', () => { repository.getNextVorgangListPage.mockReturnValue(of(createVorgangListResource([VorgangListLinkRel.NEXT]))); - + service.loadNextPage(); expect((<any>service).hasNextPage$.value).toBe(true); }) - + it('should be false if link not exists', () => { repository.getNextVorgangListPage.mockReturnValue(of(createVorgangListResource())); - + service.loadNextPage(); expect((<any>service).hasNextPage$.value).toBe(false); diff --git a/goofy-client/libs/vorgang-shared/src/lib/vorgang.service.ts b/goofy-client/libs/vorgang-shared/src/lib/vorgang.service.ts index d49f0e4f319075b256a67d8115e24bb463ef4f6d..9e277e3450f316010ea6cd4ffc9793a4c8e0ccdb 100644 --- a/goofy-client/libs/vorgang-shared/src/lib/vorgang.service.ts +++ b/goofy-client/libs/vorgang-shared/src/lib/vorgang.service.ts @@ -11,58 +11,82 @@ import { VorgangRepository } from './vorgang.repository'; @Injectable() export class VorgangService { - private readonly currentVorgangList$: BehaviorSubject<StateResource<VorgangListResource>> = new BehaviorSubject(createEmptyStateResource()); + private readonly currentList$: BehaviorSubject<StateResource<VorgangListResource>> = new BehaviorSubject(createEmptyStateResource()); private readonly vorgaenge$: BehaviorSubject<VorgangResource[]> = new BehaviorSubject([]); private readonly hasNextPage$: BehaviorSubject<boolean> = new BehaviorSubject(false); - constructor(private apiRootService: ApiRootService, private vorgangRepository: VorgangRepository) { } - - public getCurrentVorgangList(): Observable<StateResource<VorgangListResource>>{ - doIfLoadingRequired(this.currentVorgangList$.value, () => this.apiRootService.getApiRoot().subscribe(apiRoot => { + constructor( + private apiRootService: ApiRootService, + private vorgangRepository: VorgangRepository + ) { } + + public getCurrentVorgangList(): Observable<StateResource<VorgangListResource>> { + doIfLoadingRequired(this.currentList$.value, () => this.apiRootService.getApiRoot().subscribe(apiRoot => { this.loadVorgangList(apiRoot.resource) })); - return this.currentVorgangList$; - } + return this.currentList$; + } private loadVorgangList(apiRootResource: ApiRootResource): void { - this.currentVorgangList$.next({ ...this.currentVorgangList$.value, loading: true }) + this.setCurrentListLoading(); this.vorgangRepository.loadVorgangList(apiRootResource).subscribe(vorgangList => { if (vorgangList !== null) { - this.currentVorgangList$.next(createStateResource(vorgangList)); + this.updateCurrentList(vorgangList); this.vorgaenge$.next(getEmbeddedResource(vorgangList, VorgangListLinkRel.VORGANG_HEADER_LIST)); - this.hasNextPage$.next(hasLink(vorgangList, VorgangListLinkRel.NEXT)); } }) } - public getVorgaenge(): Observable<VorgangResource[]> { - return this.vorgaenge$; + public loadNextPage(): void { + //if (!this.isCurrenListResourceLoading()) { + this.loadNextListPage(); + //} } - public hasNextPage(): Observable<boolean> { - return this.hasNextPage$; + private isCurrenListResourceLoading(): boolean { + return this.currentList$.value.loaded; } - public loadNextPage(): void { - this.currentVorgangList$.next({ ...this.currentVorgangList$.value, loading: true }) + private loadNextListPage(): void { + this.setCurrentListLoading(); - this.vorgangRepository.getNextVorgangListPage(this.currentVorgangList$.value.resource).subscribe(vorgangList => { + this.vorgangRepository.getNextVorgangListPage(this.currentList$.value.resource).subscribe(vorgangList => { if (vorgangList !== null) { - this.currentVorgangList$.next(createStateResource(vorgangList)); - this.addVorgangPage(vorgangList); - this.hasNextPage$.next(hasLink(vorgangList, VorgangListLinkRel.NEXT)); + this.updateCurrentList(vorgangList); + this.addVorgangListToVorgaenge(vorgangList); } }) } + private setCurrentListLoading(): void { + this.currentList$.next({ ...this.currentList$.value, loading: true }) + } - private addVorgangPage(vorgangListResource: VorgangListResource): void { - const additionalVorgaenge: VorgangResource[] = getEmbeddedResource(vorgangListResource, VorgangListLinkRel.VORGANG_HEADER_LIST); + private updateCurrentList(vorgangList: VorgangListResource): void { + this.currentList$.next(createStateResource(vorgangList)); - const allVorgaenge: VorgangResource[] = []; - allVorgaenge.push.apply(allVorgaenge, this.vorgaenge$.value); - allVorgaenge.push.apply(allVorgaenge, additionalVorgaenge); + this.updateHasNextPage(); + } + + private updateHasNextPage(): void { + this.hasNextPage$.next(hasLink(this.currentList$.value.resource, VorgangListLinkRel.NEXT)); + } - this.vorgaenge$.next(allVorgaenge); + private addVorgangListToVorgaenge(vorgangList: VorgangListResource): void { + const additionalVorgaenge: VorgangResource[] = getEmbeddedResource(vorgangList, VorgangListLinkRel.VORGANG_HEADER_LIST); + + this.addVorgaenge(additionalVorgaenge); + } + + private addVorgaenge(additionalVorgaenge: VorgangResource[]): void { + this.vorgaenge$.next([...this.vorgaenge$.value].concat(additionalVorgaenge)); + } + + public getVorgaenge(): Observable<VorgangResource[]> { + return this.vorgaenge$; + } + + public hasNextPage(): Observable<boolean> { + return this.hasNextPage$; } } \ No newline at end of file diff --git a/goofy-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.html b/goofy-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.html index 4e30aef010b03059a7e74c08bc8171cae11feba6..614c6b3418423ee136b705dee24a0629832ee229 100644 --- a/goofy-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.html +++ b/goofy-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.html @@ -13,7 +13,7 @@ </div> <div class="dates column"> - <div class="row date" matTooltip="Eingang: {{vorgang.initialDate | formatTooltipListDate }}"> + <div class="row date" matTooltip="Eingang: {{vorgang.initialDate | formatDateWithTimePipe }}"> <mat-icon svgIcon="incoming"></mat-icon> <span>{{ vorgang.initialDate | formatListDate }}</span> </div> diff --git a/goofy-client/libs/vorgang/src/lib/vorgang.module.spec.ts b/goofy-client/libs/vorgang/src/lib/vorgang.module.spec.ts index 1e1e460ef8098da2e27999727bfe0ecd6d31ef10..62744d057e46f449709d7e88ebdc6103c7e6c4ba 100644 --- a/goofy-client/libs/vorgang/src/lib/vorgang.module.spec.ts +++ b/goofy-client/libs/vorgang/src/lib/vorgang.module.spec.ts @@ -1,4 +1,4 @@ -import { TestBed } from "@angular/core/testing"; +import { TestBed } from '@angular/core/testing'; import { VorgangModule } from './vorgang.module'; describe('VorgangModule', () => { diff --git a/goofy-client/package-lock.json b/goofy-client/package-lock.json index 2cec69b03ea28b0e9db32a9da12ee0e2ff6ee968..829e466d2b248c304588184bf690550f418fd5ef 100644 --- a/goofy-client/package-lock.json +++ b/goofy-client/package-lock.json @@ -4259,6 +4259,12 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -5761,6 +5767,93 @@ } } }, + "cypress-mochawesome-reporter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/cypress-mochawesome-reporter/-/cypress-mochawesome-reporter-1.3.0.tgz", + "integrity": "sha512-9EX5W+o49yqn0wmCQCYl2hZVRZNyg87fSciaLfbSqR9bybyACI0tecpQDQeAT76MFPhPFhEq8AdWvCgZyMtdew==", + "dev": true, + "requires": { + "fs-extra": "^9.0.0", + "mocha": "^7.1.1", + "mochawesome": "^6.1.0", + "mochawesome-merge": "^4.0.3", + "mochawesome-report-generator": "^5.1.0", + "yargs": "^15.3.1" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "d": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", @@ -5803,6 +5896,12 @@ "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", "dev": true }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -7709,6 +7808,12 @@ "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", "optional": true }, + "fsu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fsu/-/fsu-1.1.1.tgz", + "integrity": "sha512-xQVsnjJ/5pQtcKh+KjUoZGzVWn4uNkchxTF6Lwjr4Gf7nQr8fmUfhKJ62zE77+xQg9xnxi5KUps7XGs+VC986A==", + "dev": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -7846,6 +7951,12 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, "growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", @@ -7995,6 +8106,12 @@ "minimalistic-assert": "^1.0.1" } }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, "hex-color-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", @@ -9603,6 +9720,47 @@ } } }, + "jest-junit": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-12.0.0.tgz", + "integrity": "sha512-+8K35LlboWiPuCnXSyiid7rFdxNlpCWWM20WEYe6IZH6psfUWKZmSpSRQ5tk0C0cBeDsvsnIzcef5mYhyJsbug==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "strip-ansi": "^5.2.0", + "uuid": "^3.3.3", + "xml": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, "jest-leak-detector": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", @@ -11096,6 +11254,30 @@ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, + "lodash.isempty": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", + "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=", + "dev": true + }, + "lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "dev": true + }, + "lodash.isobject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", + "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=", + "dev": true + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -11679,110 +11861,707 @@ "minimist": "^1.2.5" } }, - "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "dev": true - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" + "mocha": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", + "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", + "dev": true, + "requires": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "chokidar": "3.3.0", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.5", + "ms": "2.1.1", + "node-environment-flags": "1.0.6", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" }, "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", "dev": true, "requires": { - "glob": "^7.1.3" + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" } - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "native-request": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.0.8.tgz", - "integrity": "sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag==", - "dev": true, - "optional": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "dev": true, + "requires": { + "picomatch": "^2.0.4" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "mochawesome": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-6.2.1.tgz", + "integrity": "sha512-zew/N1Gb4JYCTl3scu9i8OW0ay7b0ZOGczCrSW/P+XdBrLntqI5/JlJiYV1/Nn/SY4qahddsIE+qWL8ACNerPA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff": "^4.0.1", + "json-stringify-safe": "^5.0.1", + "lodash.isempty": "^4.4.0", + "lodash.isfunction": "^3.0.9", + "lodash.isobject": "^3.0.2", + "lodash.isstring": "^4.0.1", + "mochawesome-report-generator": "^5.1.0", + "strip-ansi": "^6.0.0", + "uuid": "^7.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", + "dev": true + } + } + }, + "mochawesome-merge": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mochawesome-merge/-/mochawesome-merge-4.2.0.tgz", + "integrity": "sha512-FSMzagh+8hTShhFXdBLE4/zS2WALcDruoD0bmtiwHEjfyQszR/iEGFTgbuM5ewA5At3qeSGwGsT0k2Stt64NdQ==", + "dev": true, + "requires": { + "fs-extra": "^7.0.1", + "glob": "^7.1.6", + "uuid": "^3.3.2", + "yargs": "^15.3.1" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "mochawesome-report-generator": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-5.1.0.tgz", + "integrity": "sha512-5cI4Jh+sD+jIxc7q94961vnm/6VKDI7TFUPt9dps6oAc4y4WMpEeeOlmgKKM81q2eGaviNUYw+acFalGK6EJ9g==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "dateformat": "^3.0.2", + "escape-html": "^1.0.3", + "fs-extra": "^7.0.0", + "fsu": "^1.0.2", + "lodash.isfunction": "^3.0.8", + "opener": "^1.4.2", + "prop-types": "^15.7.2", + "tcomb": "^3.2.17", + "tcomb-validation": "^3.3.0", + "validator": "^10.11.0", + "yargs": "^13.2.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "dev": true + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "native-request": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.0.8.tgz", + "integrity": "sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag==", + "dev": true, + "optional": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, @@ -11798,6 +12577,24 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "node-environment-flags": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", + "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, "node-fetch-npm": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz", @@ -12370,6 +13167,12 @@ "is-wsl": "^2.1.1" } }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, "opn": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", @@ -13850,6 +14653,17 @@ "sisteransi": "^1.0.5" } }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, "protoduck": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", @@ -16237,6 +17051,21 @@ } } }, + "tcomb": { + "version": "3.2.29", + "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz", + "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ==", + "dev": true + }, + "tcomb-validation": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tcomb-validation/-/tcomb-validation-3.4.1.tgz", + "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==", + "dev": true, + "requires": { + "tcomb": "^3.0.0" + } + }, "terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -17142,6 +17971,12 @@ "builtins": "^1.0.3" } }, + "validator": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", + "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==", + "dev": true + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -18527,6 +19362,48 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -18656,6 +19533,12 @@ "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==", "dev": true }, + "xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=", + "dev": true + }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", @@ -18728,6 +19611,171 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.0.0.tgz", "integrity": "sha512-8eblPHTL7ZWRkyjIZJjnGf+TijiKJSwA24svzLRVvtgoi/RZiKa9fFQTrlx0OKLnyHSdt/enrdadji6WFfESVA==" }, + "yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "requires": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "requires": { + "is-buffer": "~2.0.3" + } + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", diff --git a/goofy-server/Dockerfile b/goofy-server/Dockerfile index 9b1c71f288ddbe640f94eb0568a7680597c64f13..1fcf28c5022d3e97f4ab32dfa51d3a53cc622860 100644 --- a/goofy-server/Dockerfile +++ b/goofy-server/Dockerfile @@ -1,7 +1,7 @@ FROM openjdk:15-slim #COPY ${JAR_FILE} /opt/goofy.jar -COPY /target/goofy-server-0.0.1-SNAPSHOT.jar /opt/goofy.jar +COPY /target/goofy-server.jar /opt/goofy.jar WORKDIR /opt CMD java -jar goofy.jar \ No newline at end of file diff --git a/goofy-server/pom.xml b/goofy-server/pom.xml index f458c20b5aafcc71aef62552c646f359419341e7..1b598c996d5c5d752fe68a8b877a07ea5b787e37 100644 --- a/goofy-server/pom.xml +++ b/goofy-server/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>de.itvsh.ozg</groupId> <artifactId>goofy</artifactId> - <version>0.0.1-SNAPSHOT</version> + <version>0.2.0-SNAPSHOT</version> </parent> <artifactId>goofy-server</artifactId> @@ -43,7 +43,7 @@ <groupId>net.devh</groupId> <artifactId>grpc-client-spring-boot-starter</artifactId> </dependency> - + <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> @@ -115,6 +115,7 @@ </dependencies> <build> + <finalName>${project.artifactId}</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> diff --git a/pom.xml b/pom.xml index 5c6cd55a3114c6b71504e8d9102c4d34901403ef..8bb83ba6543232ba3c54b6d0d694e7b7202ec979 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>de.itvsh.ozg</groupId> <artifactId>goofy</artifactId> - <version>0.0.1-SNAPSHOT</version> + <version>0.2.0-SNAPSHOT</version> <name>Goofy Parent</name> <packaging>pom</packaging>