diff --git a/goofy-client/apps/goofy-e2e/src/components/vorgang/vorgang.formular-daten.historie.e2e.component.ts b/goofy-client/apps/goofy-e2e/src/components/vorgang/vorgang.formular-daten.historie.e2e.component.ts index 4b4969801908f10f848a41e64438477932724045..aacf32c6360b98f94a23adb2ca3abe7d38b4f96d 100644 --- a/goofy-client/apps/goofy-e2e/src/components/vorgang/vorgang.formular-daten.historie.e2e.component.ts +++ b/goofy-client/apps/goofy-e2e/src/components/vorgang/vorgang.formular-daten.historie.e2e.component.ts @@ -149,6 +149,7 @@ export class KommentarHistorieItemE2EComponent { private readonly locatorRoot: string; private readonly locatorText: string = 'kommentar-text'; + private readonly locatorAttachment: string = 'historie-item-attachment'; constructor(rootLocator: string) { this.locatorRoot = rootLocator; @@ -161,4 +162,8 @@ export class KommentarHistorieItemE2EComponent { public getText() { return this.getRoot().findTestElementWithClass(this.locatorText); } + + public getAttachment() { + return this.getRoot().findTestElementWithClass(this.locatorAttachment); + } } \ No newline at end of file diff --git a/goofy-client/apps/goofy-e2e/src/integration/main-tests/historie/historie.e2e-spec.ts b/goofy-client/apps/goofy-e2e/src/integration/main-tests/historie/historie.e2e-spec.ts index 7b4607fc4dc2589c4bed33c7a38d07dc62743388..aa28e7a8285edc5677ebb80d737d3ea6b85293ce 100644 --- a/goofy-client/apps/goofy-e2e/src/integration/main-tests/historie/historie.e2e-spec.ts +++ b/goofy-client/apps/goofy-e2e/src/integration/main-tests/historie/historie.e2e-spec.ts @@ -63,15 +63,16 @@ describe('Historie', () => { createdAt: { $date: '2020-01-01T10:00:00.000Z' } }; - const kommentarCommandBody = { itemName: 'Kommentar', item: createKommentar() }; + const createKommentarCommandBody = { itemName: 'Kommentar', item: {...createKommentar(), attachments: 'DummyAttachment'} }; const createKommentarCommand: CommandE2E = { ...buildCommand(CommandOrderE2E.CREATE_ATTACHED_ITEM, vorgang._id.$oid, vorgang._id.$oid), - bodyObject: kommentarCommandBody, + bodyObject: createKommentarCommandBody, createdAt: { $date: '2020-01-01T10:01:00.000Z' } }; + const editKommentarCommandBody = { itemName: 'Kommentar', item: {...createKommentar(), attachments: ['DummyAttachment', 'DummyAttachment2']} }; const editKommentarCommand: CommandE2E = { ...buildCommand(CommandOrderE2E.UPDATE_ATTACHED_ITEM, vorgang._id.$oid, vorgang._id.$oid), - bodyObject: kommentarCommandBody, + bodyObject: editKommentarCommandBody, createdAt: { $date: '2020-01-01T10:02:00.000Z' } }; @@ -225,7 +226,9 @@ describe('Historie', () => { historieItem.getExpandButton().click(); const kommentarItem: KommentarHistorieItemE2EComponent = historieItem.getKommentar(); - contains(kommentarItem.getText(), kommentarCommandBody.item.text); + contains(kommentarItem.getText(), createKommentarCommandBody.item.text); + contains(kommentarItem.getAttachment(), HistorieAttachmentE2E.SINGLE_TEXT); + }) it('edit kommentar', () => { @@ -238,7 +241,8 @@ describe('Historie', () => { historieItem.getExpandButton().click(); const kommentarItem: KommentarHistorieItemE2EComponent = historieItem.getKommentar(); - contains(kommentarItem.getText(), kommentarCommandBody.item.text); + contains(kommentarItem.getText(), editKommentarCommandBody.item.text); + contains(kommentarItem.getAttachment(), HistorieAttachmentE2E.MULTIPLE_TEXT.replace('{countAttachments}', '2')); }) }) diff --git a/goofy-client/apps/goofy-e2e/src/integration/main-tests/vorgang-detailansicht/vorgang-detailansicht.e2e-spec.ts b/goofy-client/apps/goofy-e2e/src/integration/main-tests/vorgang-detailansicht/vorgang-detailansicht.e2e-spec.ts index 328063df8c8a887c983f204ac4856d7534f058a8..82df476384f17f85212b62299af593da6daae6a4 100644 --- a/goofy-client/apps/goofy-e2e/src/integration/main-tests/vorgang-detailansicht/vorgang-detailansicht.e2e-spec.ts +++ b/goofy-client/apps/goofy-e2e/src/integration/main-tests/vorgang-detailansicht/vorgang-detailansicht.e2e-spec.ts @@ -24,9 +24,6 @@ import { formatDate, registerLocaleData } from '@angular/common'; import localeDe from '@angular/common/locales/de'; import localeDeExtra from '@angular/common/locales/extra/de'; -import { SnackBarE2EComponent } from 'apps/goofy-e2e/src/components/ui/snackbar.e2e.component'; -import { WiedervorlageE2EComponent } from 'apps/goofy-e2e/src/components/wiedervorlage/wiedervorlage-page.e2e.component'; -import { WiedervorlagePage } from 'apps/goofy-e2e/src/page-objects/wiedervorlage.po'; import { ExpansionPanelE2Eomponent } from '../../../components/ui/expansion-panel.e2e.component'; import { AntragstellerE2EComponent } from '../../../components/vorgang/vorgang-antragsteller.e2e.component'; import { VorgangDetailHeaderE2EComponent } from '../../../components/vorgang/vorgang-detail-header.e2e.component'; @@ -45,14 +42,10 @@ registerLocaleData(localeDe, 'de', localeDeExtra); describe('Vorgang Detailansicht', () => { const mainPage: MainPage = new MainPage(); const vorgangList: VorgangListE2EComponent = mainPage.getVorgangList(); - const snackbar: SnackBarE2EComponent = mainPage.getSnackBar(); const vorgangPage: VorgangPage = new VorgangPage(); const vorgangDatenFormular: VorgangFormularDatenE2EComponent = vorgangPage.getFormularDatenContainer(); - const wiedervorlagePage = new WiedervorlagePage(); - const wiedervorlageContainer: WiedervorlageE2EComponent = wiedervorlagePage.getWiedervorlageContainer(); - const vorgangHeader: VorgangDetailHeaderE2EComponent = vorgangPage.getVorgangDetailHeader(); const expansionPanelContainer: ExpansionPanelE2Eomponent = vorgangPage.getFormularDatenContainer().getExpansionPanelContainer(); const antragsteller: AntragstellerE2EComponent = vorgangPage.getAntragstellerContainer(); diff --git a/goofy-client/apps/goofy/src/app/app.component.scss b/goofy-client/apps/goofy/src/app/app.component.scss index 225495f14823ad53940f6b125472d22fe27ecbfa..f042475b3c4d343ef23062199ecada3ffd912562 100644 --- a/goofy-client/apps/goofy/src/app/app.component.scss +++ b/goofy-client/apps/goofy/src/app/app.component.scss @@ -23,6 +23,7 @@ */ @import "breakpoints"; @import "include-media/dist/include-media"; +@import "variables"; :host { display: flex; @@ -36,7 +37,7 @@ justify-content: space-between; align-items: flex-start; flex-grow: 1; - margin-top: 64px; + margin-top: $header-height; } main { @@ -58,7 +59,7 @@ main { } .left-nav { - height: calc(100vh - 64px); + height: calc(100vh - $header-height); z-index: 1; } @@ -66,10 +67,10 @@ main { flex-shrink: 0; position: sticky; right: 0; - top: 64px; + top: $header-height; width: 20px; z-index: 1; - height: calc(100vh - 64px); + height: calc(100vh - $header-height); @include media('>largeDesktop') { //width: 360px; diff --git a/goofy-client/libs/binary-file-shared/src/lib/binary-file.repository.spec.ts b/goofy-client/libs/binary-file-shared/src/lib/binary-file.repository.spec.ts index 6d61888e51a9eaff1fa5c8f6fd97e06f91d507ae..dfa6cc3466c3cbb04ac07cde14a74ed3e00038d6 100644 --- a/goofy-client/libs/binary-file-shared/src/lib/binary-file.repository.spec.ts +++ b/goofy-client/libs/binary-file-shared/src/lib/binary-file.repository.spec.ts @@ -30,6 +30,9 @@ import { cold, hot } from 'jest-marbles'; import { DummyLinkRel } from 'libs/tech-shared/test/dummy'; import { createDummyListResource, createDummyResource } from 'libs/tech-shared/test/resource'; import { of } from 'rxjs'; +import { createBinaryFileResource } from '../../test/binary-file'; +import { BinaryFileLinkRel } from './binary-file.linkrel'; +import { BinaryFileResource } from './binary-file.model'; import { BinaryFileRepository, ContentType, GetRequestOptions } from './binary-file.repository'; describe('BinaryFileRepository', () => { @@ -85,8 +88,7 @@ describe('BinaryFileRepository', () => { describe('download', () => { const blob = {}; - const dummyLinkRel: string = DummyLinkRel.DUMMY; - const dummyResource: Resource = createDummyResource([dummyLinkRel]); + const binaryFileResource: BinaryFileResource = createBinaryFileResource([BinaryFileLinkRel.DOWNLOAD]); beforeEach(() => { httpClient.get.mockReturnValue(hot('a', { a: blob })); @@ -97,13 +99,13 @@ describe('BinaryFileRepository', () => { repository.buildRequestOptions = jest.fn(); (<any>repository.buildRequestOptions).mockReturnValue(requestOptions); - repository.download(dummyResource, dummyLinkRel); + repository.download(binaryFileResource); - expect(httpClient.get).toHaveBeenCalledWith(getUrl(dummyResource, dummyLinkRel), requestOptions); + expect(httpClient.get).toHaveBeenCalledWith(getUrl(binaryFileResource, BinaryFileLinkRel.DOWNLOAD), requestOptions); }) it('should return value', () => { - const result = repository.download(dummyResource, dummyLinkRel); + const result = repository.download(binaryFileResource); expect(result).toBeObservable(cold('b', { b: blob })); }) diff --git a/goofy-client/libs/binary-file-shared/src/lib/binary-file.repository.ts b/goofy-client/libs/binary-file-shared/src/lib/binary-file.repository.ts index 207ce943b3b47fdfe3130892e47d2be1f7289fbe..5fa2894a62106237d3385fabe465018d088db322 100644 --- a/goofy-client/libs/binary-file-shared/src/lib/binary-file.repository.ts +++ b/goofy-client/libs/binary-file-shared/src/lib/binary-file.repository.ts @@ -23,10 +23,10 @@ */ import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; +import { SkipInterceptor } from '@goofy-client/tech-shared'; import { getUrl, Resource, ResourceFactory, ResourceUri } from '@ngxp/rest'; -//TODO/FIXME Import sollte auch mit '@goofy-client/tech-shared' funktionieren -import { SkipInterceptor } from 'libs/tech-shared/src/lib/decorator/skip-error-interceptor.decorator'; import { Observable } from 'rxjs'; +import { BinaryFileLinkRel } from './binary-file.linkrel'; import { BinaryFileListResource, BinaryFileResource } from './binary-file.model'; @Injectable({ providedIn: 'root' }) @@ -42,8 +42,8 @@ export class BinaryFileRepository { return this.httpClient.post(getUrl(resource, linkRel), formData, { observe: 'response' }); } - public download(fileResource: Resource, linkRel: string): Observable<Blob> { - return this.doDownload(getUrl(fileResource, linkRel), this.buildRequestOptions()); + public download(fileResource: BinaryFileResource): Observable<Blob> { + return this.doDownload(getUrl(fileResource, BinaryFileLinkRel.DOWNLOAD), this.buildRequestOptions()); } buildRequestOptions(): GetRequestOptions { diff --git a/goofy-client/libs/binary-file-shared/src/lib/binary-file.service.spec.ts b/goofy-client/libs/binary-file-shared/src/lib/binary-file.service.spec.ts index b443155056178dafe4be3822a9b21e2368070905..7833758d840a40d813ae7c9e5565c765f8486483 100644 --- a/goofy-client/libs/binary-file-shared/src/lib/binary-file.service.spec.ts +++ b/goofy-client/libs/binary-file-shared/src/lib/binary-file.service.spec.ts @@ -28,10 +28,12 @@ import { Mock, mock, useFromMock } from '@goofy-client/test-utils'; import { SnackBarService } from '@goofy-client/ui'; import { Resource } from '@ngxp/rest'; import { cold, hot } from 'jest-marbles'; +import { createBinaryFileResource } from 'libs/binary-file-shared/test/binary-file'; import { ValidationMessageCode, VALIDATION_MESSAGES } from 'libs/tech-shared/src/lib/validation/tech.validation.messages'; import { DummyLinkRel } from 'libs/tech-shared/test/dummy'; import { createDummyResource } from 'libs/tech-shared/test/resource'; import { of } from 'rxjs'; +import { BinaryFileResource } from './binary-file.model'; import { BinaryFileRepository } from './binary-file.repository'; import { BinaryFileService } from './binary-file.service'; @@ -54,8 +56,8 @@ describe('BinaryFileService', () => { describe('download file', () => { - const dummyResource: Resource = <any>{ ...createDummyResource(), name: 'FileName' }; - const dummyLinkRel: string = DummyLinkRel.DUMMY; + const binaryFileResource: BinaryFileResource = createBinaryFileResource(); + const downloadNamePrefix: string = 'VorgangsNummerAsPrefix'; const blob = {}; @@ -65,32 +67,38 @@ describe('BinaryFileService', () => { }) it('should call repository', () => { - service.downloadFile(dummyResource, dummyLinkRel); + service.downloadFile(binaryFileResource, downloadNamePrefix); - expect(repository.download).toHaveBeenCalledWith(dummyResource, dummyLinkRel); + expect(repository.download).toHaveBeenCalledWith(binaryFileResource); }) describe('save file', () => { - describe('on existing reponse', () => { + describe('on existing response', () => { + + it('should save file without prefix', () => { + service.saveBinaryFile(blob, binaryFileResource, undefined); + + expect(service.save).toHaveBeenCalledWith(blob, binaryFileResource.name); + }) - it('should save file', () => { - service.saveBinaryFile(blob, dummyResource); + it('should save file with prefix', () => { + service.saveBinaryFile(blob, binaryFileResource, downloadNamePrefix); - expect(service.save).toHaveBeenCalled(); + expect(service.save).toHaveBeenCalledWith(blob, downloadNamePrefix + '_' + binaryFileResource.name); }) it('should return loaded stateResource', () => { - const result: StateResource<Blob> = service.saveBinaryFile(blob, dummyResource); + const result: StateResource<Blob> = service.saveBinaryFile(blob, binaryFileResource, downloadNamePrefix); expect(result).toEqual(createStateResource(blob)); }) }) - describe('on non existing reponse', () => { + describe('on non existing response', () => { - it('should return loading stateresource', () => { - const result: StateResource<Blob> = service.saveBinaryFile(undefined, dummyResource); + it('should return loading stateResource', () => { + const result: StateResource<Blob> = service.saveBinaryFile(undefined, binaryFileResource, downloadNamePrefix); expect(result).toEqual(createEmptyStateResource(true)); }) diff --git a/goofy-client/libs/binary-file-shared/src/lib/binary-file.service.ts b/goofy-client/libs/binary-file-shared/src/lib/binary-file.service.ts index fdab114892e1be579968418a28af4cb9ad8bfffc..7a5594e6fb64a5966e237bc7f03fed888d3d7a74 100644 --- a/goofy-client/libs/binary-file-shared/src/lib/binary-file.service.ts +++ b/goofy-client/libs/binary-file-shared/src/lib/binary-file.service.ts @@ -23,11 +23,10 @@ */ import { HttpErrorResponse, HttpResponse } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { createEmptyStateResource, createErrorStateResource, createStateResource, EMPTY_STRING, getMessageCode, getMessageForIssue, isUnprocessableEntity, StateResource } from '@goofy-client/tech-shared'; +import { createEmptyStateResource, createErrorStateResource, createStateResource, EMPTY_STRING, getMessageForIssue, isNotNil, isUnprocessableEntity, isValidationFieldFileSizeExceedError, sanitizeFileName, StateResource } from '@goofy-client/tech-shared'; import { SnackBarService } from '@goofy-client/ui'; import { Resource, ResourceUri } from '@ngxp/rest'; import { saveAs } from 'file-saver'; -import { ValidationMessageCode } from 'libs/tech-shared/src/lib/validation/tech.validation.messages'; import { isNil } from 'lodash-es'; import { Observable, of, throwError } from 'rxjs'; import { catchError, map, mergeMap, startWith } from 'rxjs/operators'; @@ -51,27 +50,34 @@ export class BinaryFileService { } handleErrorByStatus(error: HttpErrorResponse): StateResource<any> { - if (isUnprocessableEntity(error.status) && getMessageCode(error.error) === ValidationMessageCode.VALIDATION_FIELD_FILE_SIZE_EXCEEDED) { + if (isUnprocessableEntity(error.status) && isValidationFieldFileSizeExceedError(error.error)) { this.snackbarService.showError(getMessageForIssue(EMPTY_STRING, error.error.issues[0])); return createErrorStateResource(error.error); } throwError({ error }); } - public downloadFile(file: Resource, linkRel: string): Observable<StateResource<any>> { - return this.repository.download(file, linkRel).pipe( - map(data => this.saveBinaryFile(data, file)), + public downloadFile(file: BinaryFileResource, fileNamePrefix: string): Observable<StateResource<any>> { + return this.repository.download(file).pipe( + map(data => this.saveBinaryFile(data, file, fileNamePrefix)), startWith(createEmptyStateResource(true))); } - saveBinaryFile(data: any, file: Resource): StateResource<Blob> { + saveBinaryFile(data: any, file: BinaryFileResource, fileNamePrefix: string): StateResource<Blob> { if (isNil(data)) { return createEmptyStateResource(true); } - this.save(data, (<any>file).name); + this.save(data, this.buildFileName(file, fileNamePrefix)); return createStateResource(data); } + private buildFileName(file: BinaryFileResource, fileNamePrefix: string): string { + if(isNotNil(fileNamePrefix)){ + return sanitizeFileName(`${fileNamePrefix}_${file.name}`); + } + return file.name; + } + save(data: any, fileName: string): void { saveAs(data, fileName) } diff --git a/goofy-client/libs/binary-file-shared/src/test-setup.ts b/goofy-client/libs/binary-file-shared/src/test-setup.ts index 32096869a0084d5cdd50f8fd6f051a9f7afe7ed7..cbeefdc58031f06c736e48411560272e35e07476 100644 --- a/goofy-client/libs/binary-file-shared/src/test-setup.ts +++ b/goofy-client/libs/binary-file-shared/src/test-setup.ts @@ -24,14 +24,15 @@ import 'jest-preset-angular/setup-jest'; import { getTestBed } from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting, -} from '@angular/platform-browser-dynamic/testing'; +import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; getTestBed().resetTestEnvironment(); getTestBed().initTestEnvironment( BrowserDynamicTestingModule, platformBrowserDynamicTesting(), - { teardown: { destroyAfterEach: false } } -); + { + teardown: { destroyAfterEach: false }, + errorOnUnknownProperties: true, + errorOnUnknownElements: true + } +); \ No newline at end of file diff --git a/goofy-client/libs/binary-file/src/index.ts b/goofy-client/libs/binary-file/src/index.ts index 0bc4d8a80655514bbd692bbbbeb9a5807d59dbe1..dcb64fe7734d612f4b32126aa10986e96c30480c 100644 --- a/goofy-client/libs/binary-file/src/index.ts +++ b/goofy-client/libs/binary-file/src/index.ts @@ -23,5 +23,6 @@ */ export * from './lib/binary-file-attachment-container/binary-file-attachment-container.component'; export * from './lib/binary-file-container/binary-file-container.component'; -export * from './lib/binary-file-list/binary-file-list.component'; export * from './lib/binary-file.module'; +export * from './lib/horizontal-binary-file-list/horizontal-binary-file-list.component'; +export * from './lib/vertical-binary-file-list/vertical-binary-file-list.component'; diff --git a/goofy-client/libs/binary-file/src/lib/binary-file-container/binary-file-container.component.spec.ts b/goofy-client/libs/binary-file/src/lib/binary-file-container/binary-file-container.component.spec.ts index 4d386f0a3b86371f35721bae45f66f246f74e676..e26cd71ee088efb0180f846325c57efd4496b3a8 100644 --- a/goofy-client/libs/binary-file/src/lib/binary-file-container/binary-file-container.component.spec.ts +++ b/goofy-client/libs/binary-file/src/lib/binary-file-container/binary-file-container.component.spec.ts @@ -23,7 +23,7 @@ */ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ApiRootService } from '@goofy-client/api-root-shared'; -import { BinaryFileLinkRel, BinaryFileResource, BinaryFileService } from '@goofy-client/binary-file-shared'; +import { BinaryFileResource, BinaryFileService } from '@goofy-client/binary-file-shared'; import { ConvertForDataTestPipe } from '@goofy-client/tech-shared'; import { mock } from '@goofy-client/test-utils'; import { createBinaryFileResource } from 'libs/binary-file-shared/test/binary-file'; @@ -75,11 +75,14 @@ describe('BinaryFileContainerComponent', () => { describe('start download', () => { const file: BinaryFileResource = createBinaryFileResource(); + const fileNameDownloadPrefix: string = 'FileNamePrefixDummy'; it('should call file service downloadFile', () => { + component.downloadFileNamePrefix = fileNameDownloadPrefix; + component.startDownload(file); - expect(service.downloadFile).toHaveBeenCalledWith(file, BinaryFileLinkRel.DOWNLOAD); + expect(service.downloadFile).toHaveBeenCalledWith(file, fileNameDownloadPrefix); }) }) diff --git a/goofy-client/libs/binary-file/src/lib/binary-file-container/binary-file-container.component.ts b/goofy-client/libs/binary-file/src/lib/binary-file-container/binary-file-container.component.ts index 44a3799f9eae57a603f7b707ff7bed37554d80f7..631944be1e34175eb150b37f687af672e41c79af 100644 --- a/goofy-client/libs/binary-file/src/lib/binary-file-container/binary-file-container.component.ts +++ b/goofy-client/libs/binary-file/src/lib/binary-file-container/binary-file-container.component.ts @@ -23,7 +23,7 @@ */ import { Component, EventEmitter, Input, Output } from '@angular/core'; import { ApiDownloadToken, ApiRootService } from '@goofy-client/api-root-shared'; -import { BinaryFileLinkRel, BinaryFileResource, BinaryFileService } from '@goofy-client/binary-file-shared'; +import { BinaryFileResource, BinaryFileService } from '@goofy-client/binary-file-shared'; import { StateResource } from '@goofy-client/tech-shared'; import { Observable } from 'rxjs'; @@ -35,6 +35,7 @@ import { Observable } from 'rxjs'; export class BinaryFileContainerComponent { @Input() file: BinaryFileResource; + @Input() downloadFileNamePrefix: string; @Input() deletable: boolean = false; @Output() startDelete: EventEmitter<BinaryFileResource> = new EventEmitter(); @@ -47,7 +48,7 @@ export class BinaryFileContainerComponent { private apiRootService: ApiRootService) { } startDownload(file: BinaryFileResource): void { - this.fileStateResource$ = this.binaryFileService.downloadFile(file, BinaryFileLinkRel.DOWNLOAD); + this.fileStateResource$ = this.binaryFileService.downloadFile(file, this.downloadFileNamePrefix); } getDownloadToken(): void { diff --git a/goofy-client/libs/binary-file/src/lib/binary-file.module.ts b/goofy-client/libs/binary-file/src/lib/binary-file.module.ts index 37cc2237142a4e9a2b9d4e4a5c56759d989fe79b..a020fe99afa7243c17d272a9497701a08bfecb63 100644 --- a/goofy-client/libs/binary-file/src/lib/binary-file.module.ts +++ b/goofy-client/libs/binary-file/src/lib/binary-file.module.ts @@ -28,7 +28,8 @@ import { UiModule } from '@goofy-client/ui'; import { BinaryFileAttachmentContainerComponent } from './binary-file-attachment-container/binary-file-attachment-container.component'; import { BinaryFileContainerComponent } from './binary-file-container/binary-file-container.component'; import { BinaryFileComponent } from './binary-file-container/binary-file/binary-file.component'; -import { BinaryFileListComponent } from './binary-file-list/binary-file-list.component'; +import { HorizontalBinaryFileListComponent } from './horizontal-binary-file-list/horizontal-binary-file-list.component'; +import { VerticalBinaryFileListComponent } from './vertical-binary-file-list/vertical-binary-file-list.component'; @NgModule({ imports: [ @@ -38,14 +39,16 @@ import { BinaryFileListComponent } from './binary-file-list/binary-file-list.com ], declarations: [ BinaryFileAttachmentContainerComponent, - BinaryFileListComponent, BinaryFileComponent, - BinaryFileContainerComponent + BinaryFileContainerComponent, + HorizontalBinaryFileListComponent, + VerticalBinaryFileListComponent ], exports: [ BinaryFileAttachmentContainerComponent, - BinaryFileListComponent, - BinaryFileContainerComponent + BinaryFileContainerComponent, + HorizontalBinaryFileListComponent, + VerticalBinaryFileListComponent ] }) export class BinaryFileModule { } \ No newline at end of file diff --git a/goofy-client/libs/binary-file/src/lib/binary-file-list/binary-file-list.component.html b/goofy-client/libs/binary-file/src/lib/horizontal-binary-file-list/horizontal-binary-file-list.component.html similarity index 75% rename from goofy-client/libs/binary-file/src/lib/binary-file-list/binary-file-list.component.html rename to goofy-client/libs/binary-file/src/lib/horizontal-binary-file-list/horizontal-binary-file-list.component.html index d54be49e494685e6a2b1c9c07847a0d0941b1573..92b3991447bfe21c0d338778b03fddacb828db01 100644 --- a/goofy-client/libs/binary-file/src/lib/binary-file-list/binary-file-list.component.html +++ b/goofy-client/libs/binary-file/src/lib/horizontal-binary-file-list/horizontal-binary-file-list.component.html @@ -25,11 +25,13 @@ --> <goofy-client-spinner [stateResource]="fileListResource"> - <div class="container" data-test-id="file-list"> - <ng-container *ngFor="let binaryFileResource of (fileListResource.resource | toEmbeddedResources: fileListRel.FILE_LIST)"> - <goofy-client-binary-file-container class="files" [file]="binaryFileResource" [deletable]="deletable"> - </goofy-client-binary-file-container> - </ng-container> + <div class="horizontal" data-test-id="file-list"> + <goofy-client-binary-file-container + *ngFor="let binaryFileResource of (fileListResource.resource | toEmbeddedResources: fileListRel.FILE_LIST)" + class="files" + [file]="binaryFileResource" + [deletable]="deletable"> + </goofy-client-binary-file-container> </div> </goofy-client-spinner> \ No newline at end of file diff --git a/goofy-client/libs/binary-file/src/lib/horizontal-binary-file-list/horizontal-binary-file-list.component.scss b/goofy-client/libs/binary-file/src/lib/horizontal-binary-file-list/horizontal-binary-file-list.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..53fb392b447042cd8787ee5286e49167e892cebd --- /dev/null +++ b/goofy-client/libs/binary-file/src/lib/horizontal-binary-file-list/horizontal-binary-file-list.component.scss @@ -0,0 +1,28 @@ +/** + * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +.horizontal { + display: inline-flex; + flex-wrap: wrap; + gap: 4px; +} \ No newline at end of file diff --git a/goofy-client/libs/binary-file/src/lib/horizontal-binary-file-list/horizontal-binary-file-list.component.spec.ts b/goofy-client/libs/binary-file/src/lib/horizontal-binary-file-list/horizontal-binary-file-list.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..4ef31986eb5b2cd0ddf63d77d7376917f14523dc --- /dev/null +++ b/goofy-client/libs/binary-file/src/lib/horizontal-binary-file-list/horizontal-binary-file-list.component.spec.ts @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { createEmptyStateResource, ToEmbeddedResourcesPipe } from '@goofy-client/tech-shared'; +import { SpinnerComponent } from '@goofy-client/ui'; +import { MockComponent } from 'ng-mocks'; +import { BinaryFileContainerComponent } from './../binary-file-container/binary-file-container.component'; +import { HorizontalBinaryFileListComponent } from './horizontal-binary-file-list.component'; + +describe('HorizontalBinaryFileListComponent', () => { + let component: HorizontalBinaryFileListComponent; + let fixture: ComponentFixture<HorizontalBinaryFileListComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ + HorizontalBinaryFileListComponent, + ToEmbeddedResourcesPipe, + MockComponent(BinaryFileContainerComponent), + MockComponent(SpinnerComponent) + ] + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(HorizontalBinaryFileListComponent); + component = fixture.componentInstance; + component.fileListResource = createEmptyStateResource(); + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); \ No newline at end of file diff --git a/goofy-client/libs/binary-file/src/lib/binary-file-list/binary-file-list.component.ts b/goofy-client/libs/binary-file/src/lib/horizontal-binary-file-list/horizontal-binary-file-list.component.ts similarity index 86% rename from goofy-client/libs/binary-file/src/lib/binary-file-list/binary-file-list.component.ts rename to goofy-client/libs/binary-file/src/lib/horizontal-binary-file-list/horizontal-binary-file-list.component.ts index 9ecaa4d605c2c4ecdcf1f6aeeec2f41f934104bc..37f7b042ae12d03d6cb29b305b46d44cb5357fe7 100644 --- a/goofy-client/libs/binary-file/src/lib/binary-file-list/binary-file-list.component.ts +++ b/goofy-client/libs/binary-file/src/lib/horizontal-binary-file-list/horizontal-binary-file-list.component.ts @@ -26,11 +26,11 @@ import { BinaryFileListLinkRel, BinaryFileListResource } from '@goofy-client/bin import { createEmptyStateResource, StateResource } from '@goofy-client/tech-shared'; @Component({ - selector: 'goofy-client-binary-file-list', - templateUrl: './binary-file-list.component.html', - styleUrls: ['./binary-file-list.component.scss'], + selector: 'goofy-client-horizontal-binary-file-list', + templateUrl: './horizontal-binary-file-list.component.html', + styleUrls: ['./horizontal-binary-file-list.component.scss'] }) -export class BinaryFileListComponent { +export class HorizontalBinaryFileListComponent { @Input() fileListResource: StateResource<BinaryFileListResource> = createEmptyStateResource<BinaryFileListResource>(); @Input() deletable: boolean = false; diff --git a/goofy-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.html b/goofy-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.html new file mode 100644 index 0000000000000000000000000000000000000000..1e58020d03a6d75985b61d83841e36986742bad6 --- /dev/null +++ b/goofy-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.html @@ -0,0 +1,32 @@ +<!-- + + Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + Ministerpräsidenten des Landes Schleswig-Holstein + Staatskanzlei + Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + + Lizenziert unter der EUPL, Version 1.2 oder - sobald + diese von der Europäischen Kommission genehmigt wurden - + Folgeversionen der EUPL ("Lizenz"); + Sie dürfen dieses Werk ausschließlich gemäß + dieser Lizenz nutzen. + Eine Kopie der Lizenz finden Sie hier: + + https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + + Sofern nicht durch anwendbare Rechtsvorschriften + gefordert oder in schriftlicher Form vereinbart, wird + die unter der Lizenz verbreitete Software "so wie sie + ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + ausdrücklich oder stillschweigend - verbreitet. + Die sprachspezifischen Genehmigungen und Beschränkungen + unter der Lizenz sind dem Lizenztext zu entnehmen. + +--> +<goofy-client-spinner [stateResource]="fileListResource"> + <div class="vertical" data-test-id="file-list"> + <goofy-client-binary-file-container *ngFor="let binaryFileResource of fileListResource.resource | toEmbeddedResources: fileListRel.FILE_LIST" class="files" + [file]="binaryFileResource" [deletable]="deletable" [downloadFileNamePrefix]="downloadFileNamePrefix"> + </goofy-client-binary-file-container> + </div> +</goofy-client-spinner> diff --git a/goofy-client/libs/binary-file/src/lib/binary-file-list/binary-file-list.component.scss b/goofy-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.scss similarity index 95% rename from goofy-client/libs/binary-file/src/lib/binary-file-list/binary-file-list.component.scss rename to goofy-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.scss index ef99ddc66ed7ff778417abc358efbfb18b918072..16ae60cd3677305ceccf908539c4d116d9fbc29d 100644 --- a/goofy-client/libs/binary-file/src/lib/binary-file-list/binary-file-list.component.scss +++ b/goofy-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.scss @@ -21,19 +21,12 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -.files { +.vertical { display: flex; flex-direction: row; flex-wrap: wrap; max-width: 100%; align-items: flex-start; margin: 0 -4px; -} - -p { - color: #999; -} - -.container { margin-top: 1rem; } \ No newline at end of file diff --git a/goofy-client/libs/binary-file/src/lib/binary-file-list/binary-file-list.component.spec.ts b/goofy-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.spec.ts similarity index 76% rename from goofy-client/libs/binary-file/src/lib/binary-file-list/binary-file-list.component.spec.ts rename to goofy-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.spec.ts index 90b8ed6c898f29f9ecdabe15fe421951b0f9ecb8..25d6a750c2bdfef4bae17b8bbadd2e7e32a6fc0d 100644 --- a/goofy-client/libs/binary-file/src/lib/binary-file-list/binary-file-list.component.spec.ts +++ b/goofy-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.spec.ts @@ -23,38 +23,28 @@ */ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { createEmptyStateResource, ToEmbeddedResourcesPipe } from '@goofy-client/tech-shared'; -import { mock } from '@goofy-client/test-utils'; import { SpinnerComponent } from '@goofy-client/ui'; -import { VorgangService } from '@goofy-client/vorgang-shared'; import { MockComponent } from 'ng-mocks'; import { BinaryFileContainerComponent } from './../binary-file-container/binary-file-container.component'; -import { BinaryFileListComponent } from './binary-file-list.component'; +import { VerticalBinaryFileListComponent } from './vertical-binary-file-list.component'; -describe('BinaryFileListComponent', () => { - let component: BinaryFileListComponent; - let fixture: ComponentFixture<BinaryFileListComponent>; - - const vorgangService = mock(VorgangService); +describe('VerticalBinaryFileListComponent', () => { + let component: VerticalBinaryFileListComponent; + let fixture: ComponentFixture<VerticalBinaryFileListComponent>; beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [ - BinaryFileListComponent, + VerticalBinaryFileListComponent, ToEmbeddedResourcesPipe, MockComponent(BinaryFileContainerComponent), MockComponent(SpinnerComponent) - ], - providers: [ - { - provide: VorgangService, - useValue: vorgangService - } ] }).compileComponents(); }); beforeEach(() => { - fixture = TestBed.createComponent(BinaryFileListComponent); + fixture = TestBed.createComponent(VerticalBinaryFileListComponent); component = fixture.componentInstance; component.fileListResource = createEmptyStateResource(); fixture.detectChanges(); diff --git a/goofy-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.ts b/goofy-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..1addcc332697056060b2a0f1fc15730ac8603402 --- /dev/null +++ b/goofy-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.ts @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +import { Component, Input } from '@angular/core'; +import { BinaryFileListLinkRel, BinaryFileListResource } from '@goofy-client/binary-file-shared'; +import { createEmptyStateResource, StateResource } from '@goofy-client/tech-shared'; + +@Component({ + selector: 'goofy-client-vertical-binary-file-list', + templateUrl: './vertical-binary-file-list.component.html', + styleUrls: ['./vertical-binary-file-list.component.scss'], +}) +export class VerticalBinaryFileListComponent { + + @Input() fileListResource: StateResource<BinaryFileListResource> = createEmptyStateResource<BinaryFileListResource>(); + @Input() downloadFileNamePrefix: string; + @Input() deletable: boolean = false; + + readonly fileListRel = BinaryFileListLinkRel; +} \ No newline at end of file diff --git a/goofy-client/libs/binary-file/src/test-setup.ts b/goofy-client/libs/binary-file/src/test-setup.ts index edba2685f960439ffb067588883098c7f6a42c82..dc74cf29206a7ce287ef667322818782b2ba86b4 100644 --- a/goofy-client/libs/binary-file/src/test-setup.ts +++ b/goofy-client/libs/binary-file/src/test-setup.ts @@ -21,18 +21,19 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import 'jest-preset-angular/setup-jest'; import '@testing-library/jest-dom'; +import 'jest-preset-angular/setup-jest'; import { getTestBed } from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting, -} from '@angular/platform-browser-dynamic/testing'; +import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; getTestBed().resetTestEnvironment(); getTestBed().initTestEnvironment( BrowserDynamicTestingModule, platformBrowserDynamicTesting(), - { teardown: { destroyAfterEach: false } } + { + teardown: { destroyAfterEach: false }, + errorOnUnknownProperties: true, + errorOnUnknownElements: true + } ); diff --git a/goofy-client/libs/historie-shared/src/lib/+state/historie.facade.ts b/goofy-client/libs/historie-shared/src/lib/+state/historie.facade.ts index 52bfe7e56c08f805695bb8a91a55d1693e68e2e2..870f45d80ab443c908cb65db2fc84eb477b631f3 100644 --- a/goofy-client/libs/historie-shared/src/lib/+state/historie.facade.ts +++ b/goofy-client/libs/historie-shared/src/lib/+state/historie.facade.ts @@ -48,7 +48,6 @@ export class HistorieFacade { this.store.dispatch(HistorieActions.reloadHistorie()); } - //TODO sobald es eine userProfile State(ngrx) gibt, bitte den entsprechenden selector nutzen getAssignedTo(command: CommandResource): Observable<StateResource<UserProfileResource>> { return this.userProfileService.getAssignedUserProfile(command, 'assignedTo'); } diff --git a/goofy-client/libs/historie/src/lib/historie-container/historie-list/historie-item-kommentar/historie-item-kommentar.component.html b/goofy-client/libs/historie/src/lib/historie-container/historie-list/historie-item-kommentar/historie-item-kommentar.component.html index d6d837f368c8c182e4465e0e28492de9ec68c7e3..a5acd907c96a54a5cac1481dd046c0ade43924b0 100644 --- a/goofy-client/libs/historie/src/lib/historie-container/historie-list/historie-item-kommentar/historie-item-kommentar.component.html +++ b/goofy-client/libs/historie/src/lib/historie-container/historie-list/historie-item-kommentar/historie-item-kommentar.component.html @@ -25,4 +25,5 @@ --> <goofy-client-expansion-panel-with-user [headline]="headline" [resource]="command"> <p data-test-class="kommentar-text">{{ kommentar.text }}</p> -</goofy-client-expansion-panel-with-user> \ No newline at end of file + <goofy-client-historie-item-attachment *ngIf="kommentar.attachments" [attachments]="kommentar.attachments" data-test-class="historie-item-kommentar-attachment"></goofy-client-historie-item-attachment> +</goofy-client-expansion-panel-with-user> diff --git a/goofy-client/libs/historie/src/lib/historie-container/historie-list/historie-item-kommentar/historie-item-kommentar.component.spec.ts b/goofy-client/libs/historie/src/lib/historie-container/historie-list/historie-item-kommentar/historie-item-kommentar.component.spec.ts index 73167fb8e5675351332b22848798f94fb92783b4..c1c046ee9865b0394487f10df9e13bf5582a8819 100644 --- a/goofy-client/libs/historie/src/lib/historie-container/historie-list/historie-item-kommentar/historie-item-kommentar.component.spec.ts +++ b/goofy-client/libs/historie/src/lib/historie-container/historie-list/historie-item-kommentar/historie-item-kommentar.component.spec.ts @@ -23,9 +23,14 @@ */ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { CommandOrder, CommandResource } from '@goofy-client/command-shared'; +import { KommentarResource } from '@goofy-client/kommentar-shared'; +import { getElementFromFixture } from '@goofy-client/test-utils'; import { createCommandResource } from 'libs/command-shared/test/command'; +import { getDataTestClassOf } from 'libs/tech-shared/test/data-test'; import { MockComponent } from 'ng-mocks'; +import { createKommentarResource } from '../../../../../../kommentar-shared/test/kommentar'; import { ExpansionPanelWithUserComponent } from '../expansion-panel-with-user/expansion-panel-with-user.component'; +import { HistorieItemAttachmentComponent } from '../historie-item-attachment/historie-item-attachment.component'; import { HistorieItemKommentarComponent } from './historie-item-kommentar.component'; describe('HistorieItemKommentarComponent', () => { @@ -38,11 +43,14 @@ describe('HistorieItemKommentarComponent', () => { body: { item: { text: 'Beispiel text fuer einen Kommentar' } } }; + const attachment: string = getDataTestClassOf('historie-item-kommentar-attachment'); + beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [ HistorieItemKommentarComponent, - MockComponent(ExpansionPanelWithUserComponent) + MockComponent(ExpansionPanelWithUserComponent), + MockComponent(HistorieItemAttachmentComponent) ], }).compileComponents(); }); @@ -58,7 +66,7 @@ describe('HistorieItemKommentarComponent', () => { expect(component).toBeTruthy(); }); - describe('ngOnIniit', () => { + describe('ngOnInit', () => { it('should set headline for order ' + CommandOrder.CREATE_KOMMENTAR, () => { component.command = { ...kommentarCommand, order: CommandOrder.CREATE_KOMMENTAR }; @@ -76,4 +84,35 @@ describe('HistorieItemKommentarComponent', () => { expect(component.headline).toBe(`ein Kommentar bearbeitet.`); }) }) + + describe('attachments', () => { + + beforeEach(() => { + component.command = createCommand(createKommentarResource()); + }) + + it('should hide of NOT exists', () => { + const item: KommentarResource = createKommentarResource(); + delete item['attachments']; + component.command = createCommand(item); + fixture.detectChanges(); + + const attachmentElement = getElementFromFixture(fixture, attachment); + + expect(attachmentElement).not.toBeInstanceOf(HTMLElement); + }) + + it('should show if exists', () => { + component.command = createCommand(createKommentarResource()); + fixture.detectChanges(); + + const attachmentElement = getElementFromFixture(fixture, attachment); + + expect(attachmentElement).toBeInstanceOf(HTMLElement); + }) + + function createCommand(item: KommentarResource): CommandResource{ + return { ...createCommandResource(), order: CommandOrder.CREATE_KOMMENTAR, body: { item } }; + } + }) }); diff --git a/goofy-client/libs/historie/src/test-setup.ts b/goofy-client/libs/historie/src/test-setup.ts index 50e09a1cc5ecb5498c9613292b662da4c66011f0..a34d602adcc3acf9aca31a86021eff1f069e918d 100644 --- a/goofy-client/libs/historie/src/test-setup.ts +++ b/goofy-client/libs/historie/src/test-setup.ts @@ -21,4 +21,19 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import '@testing-library/jest-dom'; import 'jest-preset-angular/setup-jest'; + +import { getTestBed } from '@angular/core/testing'; +import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; + +getTestBed().resetTestEnvironment(); +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting(), + { + teardown: { destroyAfterEach: false }, + errorOnUnknownProperties: true, + errorOnUnknownElements: true + } +); \ No newline at end of file diff --git a/goofy-client/libs/kommentar-shared/src/lib/kommentar.service.spec.ts b/goofy-client/libs/kommentar-shared/src/lib/kommentar.service.spec.ts index 1f696d6d42694da8ed49fcc3b7c1d37aa7086e84..8a3fbd3b51bf873a2a57b79d4981c7be0ac83121 100644 --- a/goofy-client/libs/kommentar-shared/src/lib/kommentar.service.spec.ts +++ b/goofy-client/libs/kommentar-shared/src/lib/kommentar.service.spec.ts @@ -35,6 +35,7 @@ import { KommentarLinkRel, KommentarListLinkRel } from './kommentar.linkrel'; import { CreateKommentarCommand, Kommentar, KommentarListResource, KommentarResource } from './kommentar.model'; import { KommentarRepository } from './kommentar.repository'; import { KommentarService } from './kommentar.service'; +import { BinaryFileService } from '@goofy-client/binary-file-shared'; describe('KommentarService', () => { let service: KommentarService; @@ -42,6 +43,7 @@ describe('KommentarService', () => { let commandService: Mock<CommandService>; let navigationService: Mock<NavigationService>; let vorgangService: Mock<VorgangService>; + let binaryFileService: Mock<BinaryFileService>; const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource(); const kommentarList: KommentarListResource = createKommentarListResource(); @@ -55,10 +57,16 @@ describe('KommentarService', () => { commandService = mock(CommandService); navigationService = mock(NavigationService); vorgangService = mock(VorgangService); + binaryFileService = mock(BinaryFileService); navigationService.urlChanged.mockReturnValue(of({})); - service = new KommentarService(useFromMock(repository), useFromMock(commandService), useFromMock(navigationService), useFromMock(vorgangService)); + service = new KommentarService( + useFromMock(repository), + useFromMock(commandService), + useFromMock(navigationService), + useFromMock(vorgangService), + useFromMock(binaryFileService)); }) describe('getKommentareByVorgang', () => { @@ -258,4 +266,22 @@ describe('KommentarService', () => { }) }); }) + + describe('attachments', () => { + it('should be loaded if link avaible', () => { + const kommentarResource = createKommentarResource([KommentarLinkRel.ATTACHMENTS]); + service.getAttachments(kommentarResource); + + expect(binaryFileService.getFiles).toHaveBeenCalledWith( + kommentarResource, + KommentarLinkRel.ATTACHMENTS + ); + }); + + it('should not be loaded if no link available', () => { + service.getAttachments(kommentarResource); + + expect(binaryFileService.getFiles).not.toHaveBeenCalled(); + }) + }); }) \ No newline at end of file diff --git a/goofy-client/libs/kommentar-shared/src/lib/kommentar.service.ts b/goofy-client/libs/kommentar-shared/src/lib/kommentar.service.ts index 16cf1366d20aaf6b2b5bc8dc7093190ba5d86c6a..f96df621dfa57244570e5230a216dd3ba1f266b1 100644 --- a/goofy-client/libs/kommentar-shared/src/lib/kommentar.service.ts +++ b/goofy-client/libs/kommentar-shared/src/lib/kommentar.service.ts @@ -26,13 +26,14 @@ import { Params } from '@angular/router'; import { CommandOrder, CommandResource, CommandService, CreateCommand, isDone } from '@goofy-client/command-shared'; import { createEmptyStateResource, createStateResource, doIfLoadingRequired, NavigationService, StateResource } from '@goofy-client/tech-shared'; import { VorgangResource, VorgangService } from '@goofy-client/vorgang-shared'; -import { Resource } from '@ngxp/rest'; +import { hasLink, Resource } from '@ngxp/rest'; import { isNil } from 'lodash'; -import { BehaviorSubject, Observable, Subscription } from 'rxjs'; +import { BehaviorSubject, Observable, of, Subscription } from 'rxjs'; import { startWith, tap } from 'rxjs/operators'; import { KommentarLinkRel, KommentarListLinkRel } from './kommentar.linkrel'; import { CreateKommentarCommand, Kommentar, KommentarListResource, KommentarResource } from './kommentar.model'; import { KommentarRepository } from './kommentar.repository'; +import { BinaryFileListResource, BinaryFileService } from '@goofy-client/binary-file-shared'; @Injectable({ providedIn: 'root' }) export class KommentarService { @@ -46,7 +47,8 @@ export class KommentarService { private repository: KommentarRepository, private commandService: CommandService, private navigationService: NavigationService, - private vorgangService: VorgangService + private vorgangService: VorgangService, + private binaryFileService: BinaryFileService, ) { this.listenToNavigation(); } @@ -140,4 +142,11 @@ export class KommentarService { this.vorgangService.reloadCurrentVorgang(); } } + + getAttachments(kommentar: KommentarResource): Observable<StateResource<BinaryFileListResource>> { + if (hasLink(kommentar, KommentarLinkRel.ATTACHMENTS)) { + return this.binaryFileService.getFiles(kommentar, KommentarLinkRel.ATTACHMENTS); + } + return of(createEmptyStateResource()); + } } \ No newline at end of file diff --git a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.spec.ts b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.spec.ts index a384c32a9ae2b7ce7522a764d4b1c85a2b71db40..110928737df9c6f08d1e7f8aaa3698df988fcbff 100644 --- a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.spec.ts +++ b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.spec.ts @@ -24,18 +24,17 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { MatFormFieldModule } from '@angular/material/form-field'; +import { BinaryFileAttachmentContainerComponent } from '@goofy-client/binary-file'; import { KommentarLinkRel, KommentarService } from '@goofy-client/kommentar-shared'; +import { createStateResource } from '@goofy-client/tech-shared'; import { mock } from '@goofy-client/test-utils'; import { ButtonWithSpinnerComponent, TextAreaEditorComponent } from '@goofy-client/ui'; import { MockComponent } from 'ng-mocks'; +import { of } from 'rxjs'; +import { createBinaryFileListResource } from '../../../../../binary-file-shared/test/binary-file'; +import { createKommentarResource } from '../../../../../kommentar-shared/test/kommentar'; import { KommentarFormComponent } from './kommentar-form.component'; import { KommentarFormService } from './kommentar.formservice'; -import { createKommentarResource } from "../../../../../kommentar-shared/test/kommentar"; -import { BinaryFileAttachmentContainerComponent } from "@goofy-client/binary-file"; -import { BinaryFileService } from "@goofy-client/binary-file-shared"; -import { createStateResource } from "@goofy-client/tech-shared"; -import { of } from "rxjs"; -import { createBinaryFileListResource } from "../../../../../binary-file-shared/test/binary-file"; describe('KommentarFormComponent', () => { let component: KommentarFormComponent; @@ -43,7 +42,7 @@ describe('KommentarFormComponent', () => { const formService = mock(KommentarFormService); const service = mock(KommentarService); - const binaryFileService = mock(BinaryFileService); + const kommentarService = mock(KommentarService); beforeEach(async () => { await TestBed.configureTestingModule({ @@ -67,8 +66,8 @@ describe('KommentarFormComponent', () => { useValue: service }, { - provide: BinaryFileService, - useValue: binaryFileService + provide: KommentarService, + useValue: kommentarService } ] }) @@ -88,7 +87,7 @@ describe('KommentarFormComponent', () => { const patchSpy = jest.spyOn(KommentarFormService.prototype, 'patch').mockImplementation(); const kommentarResource = createKommentarResource([KommentarLinkRel.ATTACHMENTS]); component.kommentar = kommentarResource; - binaryFileService.getFiles.mockReturnValue( + kommentarService.getAttachments.mockReturnValue( of(createStateResource(createBinaryFileListResource()))); component.ngOnChanges(); @@ -98,7 +97,7 @@ describe('KommentarFormComponent', () => { it('should load attachments', done => { component.kommentar = createKommentarResource([KommentarLinkRel.ATTACHMENTS]); - binaryFileService.getFiles.mockReturnValue( + kommentarService.getAttachments.mockReturnValue( of(createStateResource(createBinaryFileListResource()))); component.ngOnChanges(); @@ -109,29 +108,14 @@ describe('KommentarFormComponent', () => { }); }); - it('should call binaryFileService', () => { + it('should call kommentarService', () => { const kommentarResource = createKommentarResource([KommentarLinkRel.ATTACHMENTS]); component.kommentar = kommentarResource; - binaryFileService.getFiles.mockReturnValue( + kommentarService.getAttachments.mockReturnValue( of(createStateResource(createBinaryFileListResource()))); component.ngOnChanges(); - expect(binaryFileService.getFiles).toHaveBeenCalledWith( - kommentarResource, - KommentarLinkRel.ATTACHMENTS); - }); - - it('should not load attachments if link rel does not exist', done => { - component.kommentar = createKommentarResource(); - binaryFileService.getFiles.mockClear(); - - component.ngOnChanges(); - - expect(binaryFileService.getFiles).not.toHaveBeenCalled(); - component.attachments$.subscribe(binaryFileResources => { - expect(binaryFileResources.length).toBe(0); - done(); - }); + expect(kommentarService.getAttachments).toHaveBeenCalledWith(kommentarResource); }); }); diff --git a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.ts b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.ts index 419ddb3e4650d7f8bb090a4d683d3779df8be54d..677f24bacf809dee0eba9b5a35fb47c383081a6a 100644 --- a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.ts +++ b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.ts @@ -23,27 +23,13 @@ */ import { Component, EventEmitter, Input, OnChanges, Output } from '@angular/core'; import { CommandResource } from '@goofy-client/command-shared'; -import { - KommentarLinkRel, - KommentarListLinkRel, - KommentarListResource, - KommentarResource -} from '@goofy-client/kommentar-shared'; -import { - createEmptyStateResource, - getEmbeddedResources, - StateResource -} from '@goofy-client/tech-shared'; +import { KommentarListLinkRel, KommentarListResource, KommentarResource, KommentarService } from '@goofy-client/kommentar-shared'; +import { createEmptyStateResource, getEmbeddedResources, StateResource } from '@goofy-client/tech-shared'; import { isNil } from 'lodash-es'; import { Observable, of } from 'rxjs'; import { KommentarFormService } from './kommentar.formservice'; -import { - BinaryFileListLinkRel, - BinaryFileResource, - BinaryFileService -} from "@goofy-client/binary-file-shared"; -import { map } from "rxjs/operators"; -import { hasLink } from "@ngxp/rest"; +import { BinaryFileListLinkRel, BinaryFileResource } from '@goofy-client/binary-file-shared'; +import { map } from 'rxjs/operators'; @Component({ selector: 'goofy-client-kommentar-form', @@ -67,7 +53,7 @@ export class KommentarFormComponent implements OnChanges { constructor( public formService: KommentarFormService, - public binaryFileService: BinaryFileService) { + public kommentarService: KommentarService) { } ngOnChanges(): void { @@ -78,16 +64,12 @@ export class KommentarFormComponent implements OnChanges { } private updateAttachments() { - if (hasLink(this.kommentar, KommentarLinkRel.ATTACHMENTS)) { - this.attachments$ = - this.binaryFileService.getFiles(this.kommentar, KommentarLinkRel.ATTACHMENTS) - .pipe(map(stateResource => - getEmbeddedResources<BinaryFileResource>( - stateResource, - BinaryFileListLinkRel.FILE_LIST))); - } else { - this.attachments$ = of([]); - } + this.attachments$ = + this.kommentarService.getAttachments(this.kommentar) + .pipe(map(stateResource => + getEmbeddedResources<BinaryFileResource>( + stateResource, + BinaryFileListLinkRel.FILE_LIST))); } patch(): void { diff --git a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang-container.component.html b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang-container.component.html index 0b80eac8c59295eb779b860dc1ec6fdba9d083be..e09f34c010c2f893bae50ad8ffc0156ba4c9d929 100644 --- a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang-container.component.html +++ b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang-container.component.html @@ -41,12 +41,12 @@ </goofy-client-kommentar-form> <goofy-client-button-with-spinner - *ngIf="!(showFormular$ | async)" - (clickEmitter)="showFormular()" - class="create-button" - text="Kommentar" - icon="add" - dataTestId="create-kommentar"> + *ngIf="!(showFormular$ | async)" + (clickEmitter)="showFormular()" + class="create-button" + text="Kommentar" + icon="add" + dataTestId="create-kommentar"> </goofy-client-button-with-spinner> </ng-container> diff --git a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-in-vorgang.component.spec.ts b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-in-vorgang.component.spec.ts index 3bb87ce56bfeb27332210456cc7b31a26c5df0a7..5b59dd8161435d5b0517990f0976c4eadc106ecf 100644 --- a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-in-vorgang.component.spec.ts +++ b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-in-vorgang.component.spec.ts @@ -25,6 +25,9 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MockComponent } from 'ng-mocks'; import { KommentarListInVorgangComponent } from './kommentar-list-in-vorgang.component'; import { KommentarListItemInVorgangComponent } from './kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component'; +import { createEmptyStateResource, createStateResource, EMPTY_ARRAY } from '@goofy-client/tech-shared'; +import { createKommentarListResource } from '../../../../../kommentar-shared/test/kommentar'; +import { KommentarListLinkRel } from '@goofy-client/kommentar-shared'; describe('KommentarListInVorgangComponent', () => { let component: KommentarListInVorgangComponent; @@ -47,4 +50,27 @@ describe('KommentarListInVorgangComponent', () => { it('should create', () => { expect(component).toBeTruthy(); }); + + describe('getKommentare', () => { + it('should return empty array if state resource is null', () => { + component.kommentarListStateResource = null; + + expect(component.getKommentare()).toEqual(EMPTY_ARRAY); + }); + + it('should return empty array if resource is null', () => { + component.kommentarListStateResource = createEmptyStateResource(); + + expect(component.getKommentare()).toEqual(EMPTY_ARRAY); + }); + + it('should return embedded resource', () => { + const kommentareListResource = createKommentarListResource(); + component.kommentarListStateResource = createStateResource(kommentareListResource); + + expect(component.getKommentare()).toEqual( + kommentareListResource._embedded[KommentarListLinkRel.KOMMENTAR_LIST]); + }) + + }); }); diff --git a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-in-vorgang.component.ts b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-in-vorgang.component.ts index a0f96c860bb8fc6d54f310b2800e28ea1ba82342..13548c6dc91432046ed0e3659be4e9cec5bf6b68 100644 --- a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-in-vorgang.component.ts +++ b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-in-vorgang.component.ts @@ -23,9 +23,8 @@ */ import { Component, Input, OnChanges } from '@angular/core'; import { KommentarListResource, KommentarResource } from '@goofy-client/kommentar-shared'; -import { getEmbeddedResource } from '@ngxp/rest'; import { KommentarListLinkRel } from 'libs/kommentar-shared/src/lib/kommentar.linkrel'; -import { EMPTY_ARRAY, StateResource } from "@goofy-client/tech-shared"; +import { getEmbeddedResources, StateResource } from "@goofy-client/tech-shared"; @Component({ selector: 'goofy-client-kommentar-list-in-vorgang', @@ -43,10 +42,8 @@ export class KommentarListInVorgangComponent implements OnChanges { } getKommentare(): KommentarResource[] { - return this.kommentarListStateResource - ? getEmbeddedResource( - this.kommentarListStateResource.resource, - KommentarListLinkRel.KOMMENTAR_LIST) - : EMPTY_ARRAY; + return getEmbeddedResources( + this.kommentarListStateResource, + KommentarListLinkRel.KOMMENTAR_LIST); } } \ No newline at end of file diff --git a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.html b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.html index ca31510b19e5589c4bd0fd252b2c5532b7667dec..f19898c4402b77b23fd33e545fd43983fbcd45e6 100644 --- a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.html +++ b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.html @@ -23,15 +23,26 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<button *ngIf="!editMode" [attr.data-test-id]="'kommentar-item-' + (kommentar.text | convertForDataTest)" - (click)="editMode = true" - class="plain-text"> - <div class="kommentar-head"> - <goofy-client-user-profile-in-kommentar-container *ngIf="kommentar | hasLink: kommentarLinkRel.CREATED_BY" [kommentar]="kommentar" data-test-class="kommentar-created-by"></goofy-client-user-profile-in-kommentar-container> - <span data-test-id="kommentar-created-at" class="date">{{ kommentar.createdAt | formatDateWithTimePipe: false }}</span> - </div> - <p>{{ kommentar.text }}</p> -</button> + +<div *ngIf="!editMode" class="plain-text"> + <button [attr.data-test-id]="'kommentar-item-' + (kommentar.text | convertForDataTest)" + (click)="editMode = true"> + <div class="kommentar-head"> + <goofy-client-user-profile-in-kommentar-container + *ngIf="kommentar | hasLink: kommentarLinkRel.CREATED_BY" [kommentar]="kommentar" + data-test-class="kommentar-created-by"></goofy-client-user-profile-in-kommentar-container> + <span data-test-id="kommentar-created-at" + class="date">{{ kommentar.createdAt | formatDateWithTimePipe: false }}</span> + </div> + <p class="text">{{ kommentar.text }}</p> + </button> + + <goofy-client-horizontal-binary-file-list + *ngIf="kommentar | hasLink: kommentarLinkRel.ATTACHMENTS" + [deletable]="false" + [fileListResource]="attachments$ | async"> + </goofy-client-horizontal-binary-file-list> +</div> <goofy-client-kommentar-form *ngIf="editMode" data-test-id="kommentar-list-item-form" @@ -39,4 +50,4 @@ [kommentarListStateResource]="kommentarListStateResource" (cancel)="editMode = false" class="edit-text"> -</goofy-client-kommentar-form> +</goofy-client-kommentar-form> \ No newline at end of file diff --git a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.scss b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.scss index 4729e8bf0862bd78eb38524ae4bca6ce950d3b85..d3307711b0cc08420c44fe92687148ad9be5e6bc 100644 --- a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.scss +++ b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.scss @@ -39,6 +39,7 @@ button { white-space: nowrap; align-items: center; opacity: 0.8; + cursor: pointer; ::ng-deep { goofy-client-user-icon { @@ -52,6 +53,13 @@ button { } } +.text { + &:hover, + &:focus-within { + cursor: pointer; + } +} + .plain-text { margin: -4px -8px 8px -8px; padding: 4px 8px; diff --git a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.spec.ts b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.spec.ts index 9e49eeabfeccaf6301d093dc79f434f2ec09aca8..b32e7b87d257669c4f152fcbd76632612e7b81f0 100644 --- a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.spec.ts +++ b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.spec.ts @@ -24,9 +24,9 @@ import { registerLocaleData } from '@angular/common'; import localeDe from '@angular/common/locales/de'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { KommentarLinkRel } from '@goofy-client/kommentar-shared'; +import { KommentarLinkRel, KommentarService } from '@goofy-client/kommentar-shared'; import { ConvertForDataTestPipe, FormatDateWithTimePipe, HasLinkPipe } from '@goofy-client/tech-shared'; -import { getElementFromFixture } from '@goofy-client/test-utils'; +import { getElementFromFixture, mock } from '@goofy-client/test-utils'; import { UserProfileInKommentarContainerComponent } from '@goofy-client/user-profile'; import { createKommentarResource } from 'libs/kommentar-shared/test/kommentar'; import { getDataTestClassOf } from 'libs/tech-shared/test/data-test'; @@ -41,6 +41,7 @@ describe('KommentarListItemInVorgangComponent', () => { let fixture: ComponentFixture<KommentarListItemInVorgangComponent>; const userProfile: string = getDataTestClassOf('kommentar-created-by'); + const kommentarService = mock(KommentarService); beforeEach(async () => { await TestBed.configureTestingModule({ @@ -51,7 +52,14 @@ describe('KommentarListItemInVorgangComponent', () => { FormatDateWithTimePipe, MockComponent(KommentarFormComponent), MockComponent(UserProfileInKommentarContainerComponent) + ], + providers: [ + { + provide: KommentarService, + useValue: kommentarService + } ] + }) }) @@ -86,4 +94,15 @@ describe('KommentarListItemInVorgangComponent', () => { expect(element).not.toBeInstanceOf(HTMLElement); }) }) + + describe('kommentare attachments', () => { + it('should be loaded', () => { + const kommentarResource = createKommentarResource(); + component.kommentar = kommentarResource; + + component.ngOnInit(); + + expect(kommentarService.getAttachments).toHaveBeenCalledWith(kommentarResource); + }); + }) }); diff --git a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.ts b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.ts index 8fea6441722e5b8ec037fa90106e245d98b0a052..fd7e27b30bd53859a02043a34f5cc8006411bcb6 100644 --- a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.ts +++ b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.ts @@ -21,25 +21,31 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, Input } from '@angular/core'; -import { - KommentarLinkRel, - KommentarListResource, - KommentarResource -} from '@goofy-client/kommentar-shared'; -import { StateResource } from "@goofy-client/tech-shared"; +import { Component, Input, OnInit } from '@angular/core'; +import { KommentarLinkRel, KommentarListResource, KommentarResource, KommentarService } from '@goofy-client/kommentar-shared'; +import { createEmptyStateResource, StateResource } from "@goofy-client/tech-shared"; +import { BinaryFileListResource } from '@goofy-client/binary-file-shared'; +import { Observable, of } from 'rxjs'; @Component({ selector: 'goofy-client-kommentar-list-item-in-vorgang', templateUrl: './kommentar-list-item-in-vorgang.component.html', styleUrls: ['./kommentar-list-item-in-vorgang.component.scss'] }) -export class KommentarListItemInVorgangComponent { - +export class KommentarListItemInVorgangComponent implements OnInit { @Input() kommentar: KommentarResource; + @Input() kommentarListStateResource: StateResource<KommentarListResource>; + attachments$: Observable<StateResource<BinaryFileListResource>> = of(createEmptyStateResource()); editMode: boolean = false; readonly kommentarLinkRel = KommentarLinkRel; + + constructor(public kommentarService: KommentarService) { + } + + ngOnInit(): void { + this.attachments$ = this.kommentarService.getAttachments(this.kommentar); + } } \ No newline at end of file diff --git a/goofy-client/libs/navigation/src/lib/header-container/header/header.component.scss b/goofy-client/libs/navigation/src/lib/header-container/header/header.component.scss index 5c891c2e9961f234333145cbd8ca425260d0157d..df30e073f5e771ca87aa35e1f7b1c70fedc9edca 100644 --- a/goofy-client/libs/navigation/src/lib/header-container/header/header.component.scss +++ b/goofy-client/libs/navigation/src/lib/header-container/header/header.component.scss @@ -21,6 +21,8 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +@import "breakpoints"; +@import "include-media/dist/include-media"; @import 'variables'; header { @@ -45,7 +47,9 @@ header { .left { display: flex; align-items: inherit; - min-width: 240px; + @include media('>desktop') { + min-width: 240px; + } } .right { diff --git a/goofy-client/libs/navigation/src/lib/navigation-container/navigation-container.component.scss b/goofy-client/libs/navigation/src/lib/navigation-container/navigation-container.component.scss index b49b082b655daddbfdad786f988e6bacb036a6b9..9c77a8c1f7a5249545aa14fc88726c51d9661a3c 100644 --- a/goofy-client/libs/navigation/src/lib/navigation-container/navigation-container.component.scss +++ b/goofy-client/libs/navigation/src/lib/navigation-container/navigation-container.component.scss @@ -21,7 +21,9 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +@import "variables"; + :host { position: sticky; - top: 64px; + top: $header-height; } \ No newline at end of file diff --git a/goofy-client/libs/navigation/src/lib/navigation-container/navigation/navigation.component.ts b/goofy-client/libs/navigation/src/lib/navigation-container/navigation/navigation.component.ts index b335b9875623c3615fc017e63fd85ce3bb6804b2..ad4b9ff71e36a290f01aee195f4a496e7282a83b 100644 --- a/goofy-client/libs/navigation/src/lib/navigation-container/navigation/navigation.component.ts +++ b/goofy-client/libs/navigation/src/lib/navigation-container/navigation/navigation.component.ts @@ -25,7 +25,6 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; import { ApiRootLinkRel, ApiRootResource } from '@goofy-client/api-root-shared'; import { NavigationItem, StateResource } from '@goofy-client/tech-shared'; -//TODO: Componente nach navigation-container verschieben @Component({ selector: 'goofy-client-navigation', templateUrl: './navigation.component.html', diff --git a/goofy-client/libs/navigation/src/test-setup.ts b/goofy-client/libs/navigation/src/test-setup.ts index 5870fdabb6470fd0f6f3f63be3d4f6b8041b4dd2..dc74cf29206a7ce287ef667322818782b2ba86b4 100644 --- a/goofy-client/libs/navigation/src/test-setup.ts +++ b/goofy-client/libs/navigation/src/test-setup.ts @@ -25,10 +25,7 @@ import '@testing-library/jest-dom'; import 'jest-preset-angular/setup-jest'; import { getTestBed } from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting -} from '@angular/platform-browser-dynamic/testing'; +import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; getTestBed().resetTestEnvironment(); getTestBed().initTestEnvironment( diff --git a/goofy-client/libs/postfach-shared/src/lib/postfach.model.ts b/goofy-client/libs/postfach-shared/src/lib/postfach.model.ts index 1b83dacdca07d9f27d901baf7e3516d9e6126bf3..b58fa81b26a1f2bd99808014be2219208b7ec477 100644 --- a/goofy-client/libs/postfach-shared/src/lib/postfach.model.ts +++ b/goofy-client/libs/postfach-shared/src/lib/postfach.model.ts @@ -75,4 +75,4 @@ export interface PostfachMailFormDialogData { vorgang: VorgangWithEingangResource, title: string, component: PostfachMailFormComponent -}; +} diff --git a/goofy-client/libs/postfach-shared/src/lib/postfach.service.ts b/goofy-client/libs/postfach-shared/src/lib/postfach.service.ts index dd052c70efddcfc44a4c7f4e3e2d36d82df41d13..c43ca16da8bcaa7cd60c1436600895b661e2cbe4 100644 --- a/goofy-client/libs/postfach-shared/src/lib/postfach.service.ts +++ b/goofy-client/libs/postfach-shared/src/lib/postfach.service.ts @@ -245,7 +245,6 @@ export class PostfachService { this.postfachMailList$.next(createStateResource(postfachMailList)); } - //TODO Sobald die postfach lib mit NGRX laeuft auf StateResource umstellen public loadAttachments(postfachNachricht: PostfachMailResource): Observable<StateResource<BinaryFileListResource>> { return this.binaryFileService.getFiles(postfachNachricht, PostfachMailLinkRel.ATTACHMENTS); } diff --git a/goofy-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/postfach-mail-attachments/postfach-mail-attachments.component.html b/goofy-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/postfach-mail-attachments/postfach-mail-attachments.component.html index 487a17a254780c4f525b36ec2f60a58058e7281d..2fd5229d6a0c5d960992dfd629adfc068d934783 100644 --- a/goofy-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/postfach-mail-attachments/postfach-mail-attachments.component.html +++ b/goofy-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/postfach-mail-attachments/postfach-mail-attachments.component.html @@ -23,4 +23,6 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<goofy-client-binary-file-list [fileListResource]="attachments$ | async"></goofy-client-binary-file-list> \ No newline at end of file +<goofy-client-vertical-binary-file-list + [fileListResource]="attachments$ | async"> +</goofy-client-vertical-binary-file-list> \ No newline at end of file diff --git a/goofy-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/postfach-mail-attachments/postfach-mail-attachments.component.spec.ts b/goofy-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/postfach-mail-attachments/postfach-mail-attachments.component.spec.ts index 4d5374c74f348f2a56bc0609fd48569a3d06de13..ff491e78dd7f966681d91201be39bd1c51943fe4 100644 --- a/goofy-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/postfach-mail-attachments/postfach-mail-attachments.component.spec.ts +++ b/goofy-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/postfach-mail-attachments/postfach-mail-attachments.component.spec.ts @@ -24,7 +24,6 @@ import { registerLocaleData } from '@angular/common'; import localeDe from '@angular/common/locales/de'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { BinaryFileListComponent } from '@goofy-client/binary-file'; import { BinaryFileListResource } from '@goofy-client/binary-file-shared'; import { PostfachMailResource, PostfachService } from '@goofy-client/postfach-shared'; import { ConvertForDataTestPipe, createStateResource } from '@goofy-client/tech-shared'; @@ -35,6 +34,7 @@ import { createPostfachMailResource } from 'libs/postfach-shared/test/postfach'; import { MockComponent } from 'ng-mocks'; import { of } from 'rxjs'; import { PostfachMailAttachmentsComponent } from './postfach-mail-attachments.component'; +import { VerticalBinaryFileListComponent } from '@goofy-client/binary-file'; registerLocaleData(localeDe); @@ -51,7 +51,7 @@ describe('PostfachMailAttachmentsComponent', () => { declarations: [ PostfachMailAttachmentsComponent, ConvertForDataTestPipe, - MockComponent(BinaryFileListComponent), + MockComponent(VerticalBinaryFileListComponent), MockComponent(SpinnerComponent) ], providers: [{ diff --git a/goofy-client/libs/tech-shared/src/lib/interceptor/http-binary-file.interceptor.ts b/goofy-client/libs/tech-shared/src/lib/interceptor/http-binary-file.interceptor.ts index 05d3180f3d201b230c8d331a0c04f5b7a0eb2015..69f4d0823774ea979f25be02eaaf6d5ab4cb71ca 100644 --- a/goofy-client/libs/tech-shared/src/lib/interceptor/http-binary-file.interceptor.ts +++ b/goofy-client/libs/tech-shared/src/lib/interceptor/http-binary-file.interceptor.ts @@ -57,7 +57,7 @@ export class HttpBinaryFileInterceptor implements HttpInterceptor { } }; reader.onerror = (e) => reject(errorResponse); - reader.readAsText((<HttpErrorResponse>errorResponse).error); + reader.readAsText((errorResponse).error); }); } 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 234a54a21ae425680f847523e8a8707bd3d354b4..d2c807a215b484206e98729cd346fafa8ee29f6c 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { EMPTY_ARRAY, encodeUrlForEmbedding, isNotNull } from '@goofy-client/tech-shared'; +import { encodeUrlForEmbedding, isNotNull } from '@goofy-client/tech-shared'; import { getEmbeddedResource, getUrl, Resource, ResourceUri } from '@ngxp/rest'; import { isNil } from 'lodash-es'; import { ApiError } from '../tech.model'; @@ -84,7 +84,7 @@ export function getEmbeddedResources<T>( linkRel: string): T[] { if (isNil(stateResource) || isNil(stateResource.resource)) { - return EMPTY_ARRAY; + return []; } return getEmbeddedResource<T[]>(stateResource.resource, linkRel); } \ No newline at end of file diff --git a/goofy-client/libs/tech-shared/src/lib/tech.util.ts b/goofy-client/libs/tech-shared/src/lib/tech.util.ts index a33a31e4eb6b23c709789526de110547434449c9..b61a3295c9a0d15e3d8f78c1a5959435e7471b51 100644 --- a/goofy-client/libs/tech-shared/src/lib/tech.util.ts +++ b/goofy-client/libs/tech-shared/src/lib/tech.util.ts @@ -23,6 +23,7 @@ */ import { Base64 } from 'js-base64'; import { isEmpty, isNil, isNull, isUndefined } from 'lodash-es'; +import { sanitize } from 'sanitize-filename-ts'; import { ApiError } from './tech.model'; export const EMPTY_STRING = ''; @@ -91,16 +92,20 @@ export function convertForDataTest(value: string): string { } export function getStringValue(value: null | undefined | string): string { - if (isNull(value) || isUndefined(value)) { + if (isNil(value)) { return EMPTY_STRING; } return value; } -export function encodeUrlForEmbedding(url: string) { +export function encodeUrlForEmbedding(url: string): string { return Base64.encodeURI(url); } -export function decodeUrlFromEmbedding(url: string) { +export function decodeUrlFromEmbedding(url: string): string { return Base64.decode(url); +} + +export function sanitizeFileName(value: any): string { + return sanitize(value); } \ No newline at end of file diff --git a/goofy-client/libs/tech-shared/src/lib/validation/tech.validation.util.ts b/goofy-client/libs/tech-shared/src/lib/validation/tech.validation.util.ts index 4f4b055d8129dae5eba38554b67df3b35095c866..05e3c6563273e182ceb101ca870b8a7c9d4680b7 100644 --- a/goofy-client/libs/tech-shared/src/lib/validation/tech.validation.util.ts +++ b/goofy-client/libs/tech-shared/src/lib/validation/tech.validation.util.ts @@ -25,7 +25,7 @@ import { AbstractControl, UntypedFormGroup } from '@angular/forms'; import { isNil } from 'lodash-es'; import { ApiError, Issue } from '../tech.model'; import { replacePlaceholder } from '../tech.util'; -import { VALIDATION_MESSAGES } from './tech.validation.messages'; +import { ValidationMessageCode, VALIDATION_MESSAGES } from './tech.validation.messages'; export function isValidationError(issue: Issue): boolean { return issue.messageCode.includes('javax.validation.constraints') @@ -64,4 +64,8 @@ export function getMessageForIssue(label: string, issue: Issue) { export function getMessageCode(apiError: ApiError): string { return apiError.issues[0].messageCode; +} + +export function isValidationFieldFileSizeExceedError(error: any){ + return getMessageCode(error) === ValidationMessageCode.VALIDATION_FIELD_FILE_SIZE_EXCEEDED; } \ No newline at end of file diff --git a/goofy-client/libs/ui/src/lib/ui/subnavigation/subnavigation.component.scss b/goofy-client/libs/ui/src/lib/ui/subnavigation/subnavigation.component.scss index 0ccdbe63e08c92237259520f055b6f0c56eaff2a..92f81b0ba17fd71bff9e895099893a7b401cce05 100644 --- a/goofy-client/libs/ui/src/lib/ui/subnavigation/subnavigation.component.scss +++ b/goofy-client/libs/ui/src/lib/ui/subnavigation/subnavigation.component.scss @@ -25,7 +25,7 @@ :host { position: sticky; - top: 64px; + top: $header-height; height: 48px; width: 100%; z-index: 2; diff --git a/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-formular-daten/vorgang-detail-attachment-list/vorgang-detail-attachment-list.component.html b/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-formular-daten/vorgang-detail-attachment-list/vorgang-detail-attachment-list.component.html index 3a9e87a8f1da2af7a812452d222519a8d67c8f8e..14c7e0771992354772908194ec215b6a902cb484 100644 --- a/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-formular-daten/vorgang-detail-attachment-list/vorgang-detail-attachment-list.component.html +++ b/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-formular-daten/vorgang-detail-attachment-list/vorgang-detail-attachment-list.component.html @@ -23,4 +23,8 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<goofy-client-binary-file-list [fileListResource]="fileListResource$ | async"></goofy-client-binary-file-list> \ No newline at end of file +<goofy-client-vertical-binary-file-list + [fileListResource]="fileListResource$ | async" + [downloadFileNamePrefix]="vorgangWithEingang.nummer" +> +</goofy-client-vertical-binary-file-list> diff --git a/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-formular-daten/vorgang-detail-attachment-list/vorgang-detail-attachment-list.component.spec.ts b/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-formular-daten/vorgang-detail-attachment-list/vorgang-detail-attachment-list.component.spec.ts index abf35e0ac3cb5fc58d70d16b828d104aae07bc67..be8ba08e0688f24128e14eebf4af095d3f38d043 100644 --- a/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-formular-daten/vorgang-detail-attachment-list/vorgang-detail-attachment-list.component.spec.ts +++ b/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-formular-daten/vorgang-detail-attachment-list/vorgang-detail-attachment-list.component.spec.ts @@ -22,7 +22,7 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { BinaryFileListComponent } from '@goofy-client/binary-file'; +import { VerticalBinaryFileListComponent } from '@goofy-client/binary-file'; import { mock } from '@goofy-client/test-utils'; import { VorgangService, VorgangWithEingangLinkRel, VorgangWithEingangResource } from '@goofy-client/vorgang-shared'; import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang'; @@ -40,7 +40,7 @@ describe('VorgangDetailAttachmentListComponent', () => { await TestBed.configureTestingModule({ declarations: [ VorgangDetailAttachmentListComponent, - MockComponent(BinaryFileListComponent) + MockComponent(VerticalBinaryFileListComponent) ], providers: [ { @@ -54,6 +54,7 @@ describe('VorgangDetailAttachmentListComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(VorgangDetailAttachmentListComponent); component = fixture.componentInstance; + component.vorgangWithEingang = createVorgangWithEingangResource(); fixture.detectChanges(); }); diff --git a/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-formular-daten/vorgang-detail-representation-list/vorgang-detail-representation-list.component.html b/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-formular-daten/vorgang-detail-representation-list/vorgang-detail-representation-list.component.html index 3a9e87a8f1da2af7a812452d222519a8d67c8f8e..14c7e0771992354772908194ec215b6a902cb484 100644 --- a/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-formular-daten/vorgang-detail-representation-list/vorgang-detail-representation-list.component.html +++ b/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-formular-daten/vorgang-detail-representation-list/vorgang-detail-representation-list.component.html @@ -23,4 +23,8 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<goofy-client-binary-file-list [fileListResource]="fileListResource$ | async"></goofy-client-binary-file-list> \ No newline at end of file +<goofy-client-vertical-binary-file-list + [fileListResource]="fileListResource$ | async" + [downloadFileNamePrefix]="vorgangWithEingang.nummer" +> +</goofy-client-vertical-binary-file-list> diff --git a/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-formular-daten/vorgang-detail-representation-list/vorgang-detail-representation-list.component.spec.ts b/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-formular-daten/vorgang-detail-representation-list/vorgang-detail-representation-list.component.spec.ts index 4fb540895402e28cbe71d0ed87e021ae26951e7d..7dad2679ad2864b7a0f146c50e3088d9b2074001 100644 --- a/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-formular-daten/vorgang-detail-representation-list/vorgang-detail-representation-list.component.spec.ts +++ b/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-formular-daten/vorgang-detail-representation-list/vorgang-detail-representation-list.component.spec.ts @@ -22,7 +22,7 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { BinaryFileListComponent } from '@goofy-client/binary-file'; +import { VerticalBinaryFileListComponent } from '@goofy-client/binary-file'; import { mock } from '@goofy-client/test-utils'; import { VorgangService, VorgangWithEingangLinkRel, VorgangWithEingangResource } from '@goofy-client/vorgang-shared'; import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang'; @@ -41,7 +41,7 @@ describe('VorgangDetailRepresentationListComponent', () => { await TestBed.configureTestingModule({ declarations: [ VorgangDetailRepresentationListComponent, - MockComponent(BinaryFileListComponent), + MockComponent(VerticalBinaryFileListComponent), ], providers: [ { @@ -57,6 +57,7 @@ describe('VorgangDetailRepresentationListComponent', () => { VorgangDetailRepresentationListComponent ); component = fixture.componentInstance; + component.vorgangWithEingang = createVorgangWithEingangResource(); fixture.detectChanges(); }); diff --git a/goofy-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search-autocomplete-options-content/vorgang-search-autocomplete-options-content.component.html b/goofy-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search-autocomplete-options-content/vorgang-search-autocomplete-options-content.component.html index 2231664f263d2e1aae9866445ed45b043f797e5a..d5d5f878e3892c97ddbbcc50b4d97bec3175cccc 100644 --- a/goofy-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search-autocomplete-options-content/vorgang-search-autocomplete-options-content.component.html +++ b/goofy-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search-autocomplete-options-content/vorgang-search-autocomplete-options-content.component.html @@ -23,21 +23,19 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<div class="line"> - <div> - </div> - <div> +<div class="line name-date"> + <span class="name" data-test-id="preview-list-item-vorgang-name">{{vorgang.name}}</span> + <div class="date"> <mat-icon svgIcon="incoming"></mat-icon> <span data-test-id="preview-list-item-created-at">{{ vorgang.createdAt | formatToPrettyDate }}</span> </div> </div> <div class="line full-width"> - <span class="name" data-test-id="preview-list-item-vorgang-name">{{vorgang.name}}</span> -</div> -<div class="line"> <div class="aktenzeichen" data-test-id="preview-list-item-vorgang-aktenzeichen"> <mat-icon svgIcon="az"></mat-icon> <span goofy-client-aktenzeichen [vorgang]="vorgang"></span> </div> +</div> +<div class="line full-width"> <goofy-client-vorgang-nummer [vorgang]="vorgang"></goofy-client-vorgang-nummer> </div> \ No newline at end of file diff --git a/goofy-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search-autocomplete-options-content/vorgang-search-autocomplete-options-content.component.scss b/goofy-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search-autocomplete-options-content/vorgang-search-autocomplete-options-content.component.scss index a6783f653fcf505cec4ae14e4fabe321891828f6..a94c091a17f43ec8129d958e2a075e860ef562cb 100644 --- a/goofy-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search-autocomplete-options-content/vorgang-search-autocomplete-options-content.component.scss +++ b/goofy-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search-autocomplete-options-content/vorgang-search-autocomplete-options-content.component.scss @@ -27,15 +27,42 @@ a { } .line { - > * { - width: 49%; - } + display: grid; + grid-auto-flow: column; + grid-auto-columns: 1fr; + gap: 0.5rem; + align-items: center; + padding: 0.188rem 0; + white-space: normal; + &.full-width > * { width: 100%; } + &.name-date { + grid-template-columns: 1fr auto; + &.date { + white-space: nowrap; + overflow: hidden; + } + } + + goofy-client-vorgang-nummer span { + white-space: normal; + overflow: auto; + text-overflow: unset; + word-break: break-all; + } } .aktenzeichen { display: flex; align-items: center; + span { + word-break: break-all; + } +} + +.name { + font-weight: bold; + white-space: normal; } \ No newline at end of file diff --git a/goofy-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search.component.scss b/goofy-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search.component.scss index cfb07792eabc0975cb6821061ee3125b8ef81207..7f7b2983c3b41c64a4c1bf5c86cb5cafdb765bb0 100644 --- a/goofy-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search.component.scss +++ b/goofy-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search.component.scss @@ -40,7 +40,8 @@ input { .search-field { border-radius: 20px; - max-width: 400px; + width: calc(600px - (800px - 100vw)); + max-width: 600px; display: flex; margin-left: 16px; position: relative; @@ -61,9 +62,7 @@ input { top: -6px; background: inherit; z-index: 2; - // background-color: white; } - } goofy-client-vorgang-search { @@ -72,7 +71,7 @@ input { } .mat-form-field-appearance-legacy { .mat-form-field-wrapper { - min-width: 400px; + min-width: 600px; padding-bottom: 0; font-size: 18px; @@ -89,7 +88,9 @@ input { } .mat-autocomplete-panel.vorgang-search { - max-height: none; + max-height: calc(100vh - $header-height); + max-width: 600px; + width: calc(600px - (800px - 100vw)); height: auto; box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.4); position: relative; @@ -109,17 +110,9 @@ input { padding: 0.5rem 1rem; .line { - display: flex; - justify-content: space-between; - padding: 0.188rem 0; - - .name { - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; - } mat-icon { margin-right: 0.25rem; + min-width: 1.5rem; } } } diff --git a/goofy-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.ts b/goofy-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.ts index 89f11606b77e2888a750ced4ac9e91032fccb989..b6eda6ddc6ca5b875e499077fdea61a99e64c261 100644 --- a/goofy-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.ts +++ b/goofy-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.ts @@ -100,7 +100,6 @@ export class WiedervorlageService implements OnDestroy { } } - //TODO Sobald wiedervorlage mit ngrx laeuft auf StateResource umstellen public loadWiedervorlagenByVorgangStrict(vorgangResource: VorgangResource): Observable<StateResource<WiedervorlageListResource>> { return this.repository.getWiedervorlageList(vorgangResource).pipe( map(wiedervorlagenList => createStateResource(wiedervorlagenList)), diff --git a/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.html b/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.html index 1b1e61222abb90784b3e245483333487de074c67..46157e1300bbd88563ab44fffe879d8d6398f2ac 100644 --- a/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.html +++ b/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.html @@ -23,4 +23,8 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<goofy-client-binary-file-list [fileListResource]="attachments$ | async" [deletable]="false" data-test-id="wiedervorlage-attachment-list"></goofy-client-binary-file-list> \ No newline at end of file +<goofy-client-vertical-binary-file-list + [fileListResource]="attachments$ | async" + [deletable]="false" + data-test-id="wiedervorlage-attachment-list"> +</goofy-client-vertical-binary-file-list> \ No newline at end of file diff --git a/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.spec.ts b/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.spec.ts index c543e64e31aa3ca78a747187f14c6663b2b1db59..a70ce0b645b502279fb681172294caf183c1194d 100644 --- a/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.spec.ts +++ b/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.spec.ts @@ -22,13 +22,13 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { BinaryFileListComponent } from '@goofy-client/binary-file'; import { ToEmbeddedResourcesPipe } from '@goofy-client/tech-shared'; import { mock } from '@goofy-client/test-utils'; import { WiedervorlageService } from '@goofy-client/wiedervorlage-shared'; import { MockComponent } from 'ng-mocks'; import { of } from 'rxjs'; import { WiedervorlageAttachmentListContainerComponent } from './wiedervorlage-attachment-list-container.component'; +import { VerticalBinaryFileListComponent } from '@goofy-client/binary-file'; describe('WiedervorlageAttachmentListContainerComponent', () => { let component: WiedervorlageAttachmentListContainerComponent; @@ -41,7 +41,7 @@ describe('WiedervorlageAttachmentListContainerComponent', () => { declarations: [ WiedervorlageAttachmentListContainerComponent, ToEmbeddedResourcesPipe, - MockComponent(BinaryFileListComponent) + MockComponent(VerticalBinaryFileListComponent) ], providers: [ { diff --git a/goofy-client/package-lock.json b/goofy-client/package-lock.json index 16760166918bf7cecab24e78fc57ddb4bcd188e4..da15a05e6432e1eabe648b5d264a448ec7d9c8db 100644 --- a/goofy-client/package-lock.json +++ b/goofy-client/package-lock.json @@ -36,6 +36,7 @@ "js-base64": "^3.7.3", "lodash-es": "4.17.21", "rxjs": "^6.6.0", + "sanitize-filename-ts": "^1.0.2", "tslib": "^2.0.0", "typeface-roboto": "1.1.13", "zone.js": "0.11.5" @@ -2731,7 +2732,7 @@ "version": "2.88.10", "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==", - "dev": true, + "devOptional": true, "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -3613,7 +3614,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, + "devOptional": true, "dependencies": { "debug": "^3.1.0", "lodash.once": "^4.1.1" @@ -3623,7 +3624,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, + "devOptional": true, "dependencies": { "ms": "^2.1.1" } @@ -3657,7 +3658,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", - "dev": true, + "devOptional": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -3680,7 +3681,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, + "devOptional": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3696,13 +3697,13 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "devOptional": true }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "devOptional": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3712,7 +3713,7 @@ "version": "13.19.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", - "dev": true, + "devOptional": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -3727,7 +3728,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "devOptional": true, "dependencies": { "argparse": "^2.0.1" }, @@ -3739,13 +3740,13 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "devOptional": true }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "devOptional": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3757,7 +3758,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" }, @@ -3785,7 +3786,7 @@ "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, + "devOptional": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -3799,7 +3800,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "devOptional": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3809,7 +3810,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "devOptional": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3821,7 +3822,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "devOptional": true }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", @@ -7051,13 +7052,13 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true + "devOptional": true }, "node_modules/@types/sizzle": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true + "devOptional": true }, "node_modules/@types/sockjs": { "version": "0.3.33", @@ -7869,7 +7870,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, + "devOptional": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -7940,7 +7941,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, + "devOptional": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -8123,7 +8124,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -8233,7 +8234,7 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, + "devOptional": true, "dependencies": { "safer-buffer": "~2.1.0" } @@ -8270,7 +8271,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.8" } @@ -8309,7 +8310,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -8335,7 +8336,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 4.0.0" } @@ -8387,7 +8388,7 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, + "devOptional": true, "engines": { "node": "*" } @@ -8396,7 +8397,7 @@ "version": "1.12.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true + "devOptional": true }, "node_modules/axios": { "version": "1.2.2", @@ -8745,7 +8746,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, + "devOptional": true, "dependencies": { "tweetnacl": "^0.14.3" } @@ -8790,7 +8791,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true + "devOptional": true }, "node_modules/bluebird": { "version": "3.7.1", @@ -9091,7 +9092,7 @@ "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, + "devOptional": true, "engines": { "node": "*" } @@ -9198,7 +9199,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=6" } @@ -9261,7 +9262,7 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true + "devOptional": true }, "node_modules/caw": { "version": "2.0.1", @@ -9317,7 +9318,7 @@ "version": "2.24.0", "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 0.8.0" } @@ -9496,7 +9497,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, + "devOptional": true, "engines": { "node": ">=6" } @@ -9527,7 +9528,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dev": true, + "devOptional": true, "dependencies": { "string-width": "^4.2.0" }, @@ -9542,7 +9543,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, + "devOptional": true, "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" @@ -9812,7 +9813,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 6" } @@ -9821,7 +9822,7 @@ "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=4.0.0" } @@ -10897,7 +10898,7 @@ "version": "9.7.0", "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.7.0.tgz", "integrity": "sha512-+1EE1nuuuwIt/N1KXRR2iWHU+OiIt7H28jJDyyI4tiUftId/DrXYEwoDa5+kH2pki1zxnA0r6HrUGHV5eLbF5Q==", - "dev": true, + "devOptional": true, "hasInstallScript": true, "dependencies": { "@cypress/request": "^2.88.10", @@ -10993,13 +10994,13 @@ "version": "14.18.36", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.36.tgz", "integrity": "sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ==", - "dev": true + "devOptional": true }, "node_modules/cypress/node_modules/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, + "devOptional": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -11014,13 +11015,13 @@ "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "devOptional": true }, "node_modules/cypress/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11036,7 +11037,7 @@ "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, + "devOptional": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -11048,7 +11049,7 @@ "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, + "devOptional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -11060,13 +11061,13 @@ "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 + "devOptional": true }, "node_modules/cypress/node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, + "devOptional": true, "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -11081,7 +11082,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -11090,7 +11091,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, + "devOptional": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -11111,7 +11112,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, + "devOptional": true, "dependencies": { "assert-plus": "^1.0.0" }, @@ -11171,7 +11172,7 @@ "version": "1.11.7", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==", - "dev": true + "devOptional": true }, "node_modules/debug": { "version": "4.3.4", @@ -11448,7 +11449,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "devOptional": true }, "node_modules/deepmerge": { "version": "4.2.2", @@ -11679,7 +11680,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, + "devOptional": true, "dependencies": { "esutils": "^2.0.2" }, @@ -11883,7 +11884,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, + "devOptional": true, "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -12565,7 +12566,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.15.0.tgz", "integrity": "sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==", - "dev": true, + "devOptional": true, "dependencies": { "@eslint/eslintrc": "^1.2.3", "@humanwhocodes/config-array": "^0.9.2", @@ -12653,7 +12654,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, + "devOptional": true, "dependencies": { "eslint-visitor-keys": "^2.0.0" }, @@ -12671,7 +12672,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" } @@ -12680,7 +12681,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, + "devOptional": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -12689,7 +12690,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, + "devOptional": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -12705,7 +12706,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -12720,13 +12721,13 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "devOptional": true }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "devOptional": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -12736,7 +12737,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12752,7 +12753,7 @@ "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, + "devOptional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -12764,13 +12765,13 @@ "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 + "devOptional": true }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" }, @@ -12782,7 +12783,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, + "devOptional": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -12795,7 +12796,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=4.0" } @@ -12804,7 +12805,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, + "devOptional": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -12816,7 +12817,7 @@ "version": "13.19.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", - "dev": true, + "devOptional": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -12831,7 +12832,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -12840,7 +12841,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "devOptional": true, "dependencies": { "argparse": "^2.0.1" }, @@ -12852,13 +12853,13 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "devOptional": true }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "devOptional": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -12870,7 +12871,7 @@ "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, + "devOptional": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -12882,7 +12883,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" }, @@ -12894,7 +12895,7 @@ "version": "9.4.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "dev": true, + "devOptional": true, "dependencies": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", @@ -12991,7 +12992,7 @@ "version": "6.4.9", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", - "dev": true + "devOptional": true }, "node_modules/eventemitter3": { "version": "4.0.7", @@ -13020,7 +13021,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, + "devOptional": true, "dependencies": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", @@ -13043,7 +13044,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, + "devOptional": true, "dependencies": { "pify": "^2.2.0" }, @@ -13401,7 +13402,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "devOptional": true }, "node_modules/extend-shallow": { "version": "3.0.2", @@ -13498,7 +13499,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, + "devOptional": true, "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -13518,7 +13519,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, + "devOptional": true, "engines": [ "node >=0.6.0" ] @@ -13567,7 +13568,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "devOptional": true }, "node_modules/fast-sha256": { "version": "1.3.0", @@ -13611,7 +13612,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, + "devOptional": true, "dependencies": { "pend": "~1.2.0" } @@ -13640,7 +13641,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, + "devOptional": true, "dependencies": { "flat-cache": "^3.0.4" }, @@ -13850,7 +13851,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, + "devOptional": true, "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -13863,7 +13864,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true + "devOptional": true }, "node_modules/flush-write-stream": { "version": "1.1.1", @@ -13937,7 +13938,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, + "devOptional": true, "engines": { "node": "*" } @@ -14100,7 +14101,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, + "devOptional": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -14306,7 +14307,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true + "devOptional": true }, "node_modules/gauge": { "version": "4.0.4", @@ -14380,7 +14381,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, + "devOptional": true, "dependencies": { "pump": "^3.0.0" }, @@ -14404,7 +14405,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, + "devOptional": true, "dependencies": { "async": "^3.2.0" } @@ -14413,7 +14414,7 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, + "devOptional": true, "dependencies": { "assert-plus": "^1.0.0" } @@ -14457,7 +14458,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, + "devOptional": true, "dependencies": { "ini": "2.0.0" }, @@ -14472,7 +14473,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" } @@ -15033,7 +15034,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dev": true, + "devOptional": true, "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^2.0.2", @@ -15066,7 +15067,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8.12.0" } @@ -15235,7 +15236,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -15425,7 +15426,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, + "devOptional": true, "dependencies": { "ci-info": "^3.2.0" }, @@ -15535,7 +15536,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, + "devOptional": true, "dependencies": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" @@ -15588,7 +15589,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -15643,7 +15644,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "devOptional": true }, "node_modules/is-unicode-supported": { "version": "0.1.0", @@ -15704,7 +15705,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true + "devOptional": true }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", @@ -18157,7 +18158,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true + "devOptional": true }, "node_modules/jsdom": { "version": "19.0.0", @@ -18275,7 +18276,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true + "devOptional": true }, "node_modules/json-schema-traverse": { "version": "1.0.0", @@ -18286,13 +18287,13 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "devOptional": true }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true + "devOptional": true }, "node_modules/json5": { "version": "2.2.3", @@ -18334,7 +18335,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, + "devOptional": true, "engines": [ "node >=0.6.0" ], @@ -18391,7 +18392,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true, + "devOptional": true, "engines": { "node": "> 0.8" } @@ -18498,7 +18499,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, + "devOptional": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -18540,7 +18541,7 @@ "version": "3.14.0", "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, + "devOptional": true, "dependencies": { "cli-truncate": "^2.1.0", "colorette": "^2.0.16", @@ -18567,7 +18568,7 @@ "version": "7.8.0", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", - "dev": true, + "devOptional": true, "dependencies": { "tslib": "^2.1.0" } @@ -18690,13 +18691,13 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "devOptional": true }, "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true + "devOptional": true }, "node_modules/lodash.uniq": { "version": "4.5.0", @@ -18786,7 +18787,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", @@ -18804,7 +18805,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -18819,7 +18820,7 @@ "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, + "devOptional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -18831,13 +18832,13 @@ "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 + "devOptional": true }, "node_modules/log-update/node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -18854,7 +18855,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -20933,7 +20934,7 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, + "devOptional": true, "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -21051,7 +21052,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true + "devOptional": true }, "node_modules/p-cancelable": { "version": "0.3.0", @@ -21126,7 +21127,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, + "devOptional": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -21449,13 +21450,13 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "devOptional": true }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true + "devOptional": true }, "node_modules/picocolors": { "version": "1.0.0", @@ -22648,7 +22649,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 0.8.0" } @@ -22666,7 +22667,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true, + "devOptional": true, "bin": { "prettier": "bin-prettier.js" }, @@ -22681,7 +22682,7 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, + "devOptional": true, "engines": { "node": ">=6" }, @@ -22825,7 +22826,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true + "devOptional": true }, "node_modules/prr": { "version": "1.0.1", @@ -22837,7 +22838,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "devOptional": true }, "node_modules/public-encrypt": { "version": "4.0.3", @@ -22863,7 +22864,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, + "devOptional": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -23265,7 +23266,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" }, @@ -23342,7 +23343,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, + "devOptional": true, "dependencies": { "throttleit": "^1.0.0" } @@ -23507,7 +23508,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true + "devOptional": true }, "node_modules/rimraf": { "version": "3.0.2", @@ -23667,6 +23668,14 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sanitize-filename-ts": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/sanitize-filename-ts/-/sanitize-filename-ts-1.0.2.tgz", + "integrity": "sha512-bON2VOJoappmaBHlnxvBNk5R7HkUAsirf5m1M5Kz15uZykDGbHfGPCQNcEQKR8HrQhgh9CmQ6Xe9y71yM9ywkw==", + "dependencies": { + "truncate-utf8-bytes": "^1.0.2" + } + }, "node_modules/saslprep": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", @@ -24141,7 +24150,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -24155,7 +24164,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -24170,7 +24179,7 @@ "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, + "devOptional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -24182,7 +24191,7 @@ "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 + "devOptional": true }, "node_modules/slugify": { "version": "1.6.5", @@ -24686,7 +24695,7 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, + "devOptional": true, "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -25566,13 +25575,13 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "devOptional": true }, "node_modules/throttleit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", - "dev": true + "devOptional": true }, "node_modules/through": { "version": "2.3.8", @@ -25752,7 +25761,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, + "devOptional": true, "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -25793,6 +25802,14 @@ "node": ">=0.10.0" } }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, "node_modules/ts-jest": { "version": "28.0.8", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.8.tgz", @@ -26195,7 +26212,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, + "devOptional": true, "dependencies": { "safe-buffer": "^5.0.1" }, @@ -26207,13 +26224,13 @@ "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true + "devOptional": true }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, + "devOptional": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -26272,7 +26289,6 @@ "version": "4.8.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -26448,7 +26464,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -26565,6 +26581,11 @@ "node": ">=0.10.0" } }, + "node_modules/utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" + }, "node_modules/util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", @@ -26667,7 +26688,7 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, + "devOptional": true, "engines": [ "node >=0.6.0" ], @@ -27446,7 +27467,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -27623,7 +27644,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, + "devOptional": true, "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -29378,19 +29399,21 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", - "dev": true + "dev": true, + "requires": {} }, "@csstools/selector-specificity": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", - "dev": true + "dev": true, + "requires": {} }, "@cypress/request": { "version": "2.88.10", "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==", - "dev": true, + "devOptional": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -30123,7 +30146,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, + "devOptional": true, "requires": { "debug": "^3.1.0", "lodash.once": "^4.1.1" @@ -30133,7 +30156,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, + "devOptional": true, "requires": { "ms": "^2.1.1" } @@ -30157,7 +30180,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", - "dev": true, + "devOptional": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -30174,7 +30197,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, + "devOptional": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -30186,13 +30209,13 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "devOptional": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "devOptional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -30202,7 +30225,7 @@ "version": "13.19.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", - "dev": true, + "devOptional": true, "requires": { "type-fest": "^0.20.2" } @@ -30211,7 +30234,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "devOptional": true, "requires": { "argparse": "^2.0.1" } @@ -30220,13 +30243,13 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "devOptional": true }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "devOptional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -30235,7 +30258,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "devOptional": true } } }, @@ -30255,7 +30278,7 @@ "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, + "devOptional": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -30266,7 +30289,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "devOptional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -30276,7 +30299,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "devOptional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -30287,7 +30310,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "devOptional": true }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", @@ -31129,7 +31152,8 @@ "version": "14.2.10", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.10.tgz", "integrity": "sha512-sLHapZLVub6mEz5b19tf1VfIV1w3tYfg7FNPLeni79aldxu1FbP1v2WmiFAnMzrswqyK0bhTtxrl+Z/CLKqyoQ==", - "dev": true + "dev": true, + "requires": {} }, "@ngxp/rest": { "version": "7.0.1", @@ -32726,13 +32750,13 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true + "devOptional": true }, "@types/sizzle": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true + "devOptional": true }, "@types/sockjs": { "version": "0.3.33", @@ -33357,13 +33381,15 @@ "acorn-import-assertions": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==" + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "requires": {} }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "devOptional": true, + "requires": {} }, "acorn-walk": { "version": "7.2.0", @@ -33418,7 +33444,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, + "devOptional": true, "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -33439,7 +33465,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true + "dev": true, + "requires": {} }, "ajv-formats": { "version": "2.1.1", @@ -33452,7 +33479,8 @@ "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "requires": {} }, "angular-oauth2-oidc": { "version": "13.0.1", @@ -33543,7 +33571,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true + "devOptional": true }, "are-we-there-yet": { "version": "3.0.1", @@ -33620,7 +33648,7 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, + "devOptional": true, "requires": { "safer-buffer": "~2.1.0" } @@ -33676,7 +33704,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true + "devOptional": true }, "assign-symbols": { "version": "1.0.0", @@ -33694,7 +33722,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true + "devOptional": true }, "async": { "version": "3.2.4", @@ -33717,7 +33745,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true + "devOptional": true }, "atob": { "version": "2.1.2", @@ -33741,13 +33769,13 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true + "devOptional": true }, "aws4": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true + "devOptional": true }, "axios": { "version": "1.2.2", @@ -34015,7 +34043,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, + "devOptional": true, "requires": { "tweetnacl": "^0.14.3" } @@ -34054,7 +34082,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true + "devOptional": true }, "bluebird": { "version": "3.7.1", @@ -34302,7 +34330,7 @@ "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true + "devOptional": true }, "buffer-fill": { "version": "1.0.0", @@ -34396,7 +34424,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true + "devOptional": true }, "call-bind": { "version": "1.0.2", @@ -34437,7 +34465,7 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true + "devOptional": true }, "caw": { "version": "2.0.1", @@ -34481,7 +34509,7 @@ "version": "2.24.0", "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true + "devOptional": true }, "chokidar": { "version": "3.5.3", @@ -34613,7 +34641,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true + "devOptional": true }, "cli-cursor": { "version": "3.1.0", @@ -34632,7 +34660,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dev": true, + "devOptional": true, "requires": { "@colors/colors": "1.5.0", "string-width": "^4.2.0" @@ -34642,7 +34670,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, + "devOptional": true, "requires": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" @@ -34710,13 +34738,15 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz", "integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==", - "dev": true + "dev": true, + "requires": {} }, "@angular/core": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz", "integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==", - "dev": true + "dev": true, + "requires": {} }, "aria-query": { "version": "3.0.0", @@ -34856,13 +34886,13 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true + "devOptional": true }, "common-tags": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true + "devOptional": true }, "commondir": { "version": "1.0.1", @@ -35432,7 +35462,8 @@ "css-declaration-sorter": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==" + "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", + "requires": {} }, "css-has-pseudo": { "version": "3.0.4", @@ -35525,7 +35556,8 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", - "dev": true + "dev": true, + "requires": {} }, "css-select": { "version": "4.3.0", @@ -35645,7 +35677,8 @@ "cssnano-utils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==" + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "requires": {} }, "csso": { "version": "4.2.0", @@ -35688,7 +35721,7 @@ "version": "9.7.0", "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.7.0.tgz", "integrity": "sha512-+1EE1nuuuwIt/N1KXRR2iWHU+OiIt7H28jJDyyI4tiUftId/DrXYEwoDa5+kH2pki1zxnA0r6HrUGHV5eLbF5Q==", - "dev": true, + "devOptional": true, "requires": { "@cypress/request": "^2.88.10", "@cypress/xvfb": "^1.2.4", @@ -35738,13 +35771,13 @@ "version": "14.18.36", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.36.tgz", "integrity": "sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ==", - "dev": true + "devOptional": true }, "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, + "devOptional": true, "requires": { "color-convert": "^2.0.1" } @@ -35753,13 +35786,13 @@ "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "devOptional": true }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -35769,7 +35802,7 @@ "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, + "devOptional": true, "requires": { "has-flag": "^4.0.0" } @@ -35780,7 +35813,7 @@ "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, + "devOptional": true, "requires": { "color-name": "~1.1.4" } @@ -35789,13 +35822,13 @@ "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 + "devOptional": true }, "fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, + "devOptional": true, "requires": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -35807,13 +35840,13 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "devOptional": true }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, + "devOptional": true, "requires": { "has-flag": "^4.0.0" } @@ -35824,7 +35857,8 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/cypress-file-upload/-/cypress-file-upload-5.0.8.tgz", "integrity": "sha512-+8VzNabRk3zG6x8f8BWArF/xA/W0VK4IZNx3MV0jFWrJS/qKn8eHfa5nU73P9fOQAgwHFJx7zjg4lwOnljMO8g==", - "dev": true + "dev": true, + "requires": {} }, "cypress-mochawesome-reporter": { "version": "3.0.1", @@ -35857,7 +35891,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, + "devOptional": true, "requires": { "assert-plus": "^1.0.0" } @@ -35900,7 +35934,7 @@ "version": "1.11.7", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==", - "dev": true + "devOptional": true }, "debug": { "version": "4.3.4", @@ -36130,7 +36164,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "devOptional": true }, "deepmerge": { "version": "4.2.2", @@ -36304,7 +36338,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, + "devOptional": true, "requires": { "esutils": "^2.0.2" } @@ -36469,7 +36503,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, + "devOptional": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -36894,7 +36928,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.15.0.tgz", "integrity": "sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==", - "dev": true, + "devOptional": true, "requires": { "@eslint/eslintrc": "^1.2.3", "@humanwhocodes/config-array": "^0.9.2", @@ -36937,7 +36971,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, + "devOptional": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -36949,7 +36983,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "requires": { "color-convert": "^2.0.1" } @@ -36958,13 +36992,13 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "devOptional": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "devOptional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -36974,7 +37008,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -36984,7 +37018,7 @@ "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, + "devOptional": true, "requires": { "color-name": "~1.1.4" } @@ -36993,19 +37027,19 @@ "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 + "devOptional": true }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true + "devOptional": true }, "eslint-scope": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, + "devOptional": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -37015,13 +37049,13 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "devOptional": true }, "glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, + "devOptional": true, "requires": { "is-glob": "^4.0.3" } @@ -37030,7 +37064,7 @@ "version": "13.19.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", - "dev": true, + "devOptional": true, "requires": { "type-fest": "^0.20.2" } @@ -37039,13 +37073,13 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "devOptional": true }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "devOptional": true, "requires": { "argparse": "^2.0.1" } @@ -37054,13 +37088,13 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "devOptional": true }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "devOptional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -37069,7 +37103,7 @@ "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, + "devOptional": true, "requires": { "has-flag": "^4.0.0" } @@ -37078,7 +37112,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "devOptional": true } } }, @@ -37086,7 +37120,8 @@ "version": "8.3.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true + "dev": true, + "requires": {} }, "eslint-plugin-cypress": { "version": "2.11.3", @@ -37110,7 +37145,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, + "devOptional": true, "requires": { "eslint-visitor-keys": "^2.0.0" }, @@ -37119,7 +37154,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true + "devOptional": true } } }, @@ -37127,13 +37162,13 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true + "devOptional": true }, "espree": { "version": "9.4.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "dev": true, + "devOptional": true, "requires": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", @@ -37200,7 +37235,7 @@ "version": "6.4.9", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", - "dev": true + "devOptional": true }, "eventemitter3": { "version": "4.0.7", @@ -37226,7 +37261,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, + "devOptional": true, "requires": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", @@ -37243,7 +37278,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, + "devOptional": true, "requires": { "pify": "^2.2.0" } @@ -37530,7 +37565,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "devOptional": true }, "extend-shallow": { "version": "3.0.2", @@ -37610,7 +37645,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, + "devOptional": true, "requires": { "@types/yauzl": "^2.9.1", "debug": "^4.1.1", @@ -37622,7 +37657,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true + "devOptional": true }, "fancy-log": { "version": "1.3.3", @@ -37662,7 +37697,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "devOptional": true }, "fast-sha256": { "version": "1.3.0", @@ -37703,7 +37738,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, + "devOptional": true, "requires": { "pend": "~1.2.0" } @@ -37726,7 +37761,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, + "devOptional": true, "requires": { "flat-cache": "^3.0.4" } @@ -37886,7 +37921,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, + "devOptional": true, "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -37896,7 +37931,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true + "devOptional": true }, "flush-write-stream": { "version": "1.1.1", @@ -37955,7 +37990,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true + "devOptional": true }, "fork-ts-checker-webpack-plugin": { "version": "7.2.13", @@ -38068,7 +38103,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, + "devOptional": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -38246,7 +38281,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true + "devOptional": true }, "gauge": { "version": "4.0.4", @@ -38302,7 +38337,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, + "devOptional": true, "requires": { "pump": "^3.0.0" } @@ -38317,7 +38352,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, + "devOptional": true, "requires": { "async": "^3.2.0" } @@ -38326,7 +38361,7 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, + "devOptional": true, "requires": { "assert-plus": "^1.0.0" } @@ -38361,7 +38396,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, + "devOptional": true, "requires": { "ini": "2.0.0" }, @@ -38370,7 +38405,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true + "devOptional": true } } }, @@ -38823,7 +38858,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dev": true, + "devOptional": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^2.0.2", @@ -38850,7 +38885,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true + "devOptional": true }, "humanize-ms": { "version": "1.2.1", @@ -38873,7 +38908,8 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true + "dev": true, + "requires": {} }, "identity-obj-proxy": { "version": "3.0.0", @@ -38959,7 +38995,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true + "devOptional": true }, "infer-owner": { "version": "1.0.4", @@ -39112,7 +39148,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, + "devOptional": true, "requires": { "ci-info": "^3.2.0" } @@ -39186,7 +39222,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, + "devOptional": true, "requires": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" @@ -39224,7 +39260,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true + "devOptional": true }, "is-plain-obj": { "version": "1.1.0", @@ -39261,7 +39297,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "devOptional": true }, "is-unicode-supported": { "version": "0.1.0", @@ -39307,7 +39343,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true + "devOptional": true }, "istanbul-lib-coverage": { "version": "3.2.0", @@ -39908,7 +39944,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/jest-createspyobj/-/jest-createspyobj-2.0.0.tgz", "integrity": "sha512-mFSKaPwJ9n6uqZ6mJlxr+rzHWEl+nGCdBc9Pqi4Nd4I8qFmSAgeMF2BUgOVBzmV9DIMmlKz0pevIpKehunhuvg==", - "dev": true + "dev": true, + "requires": {} }, "jest-diff": { "version": "28.1.3", @@ -40238,7 +40275,8 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/jest-marbles/-/jest-marbles-3.0.3.tgz", "integrity": "sha512-Ww6tInEuGzyQ2Y/czcXWbgtKQMjB1qFOMVsTBENoikUX9LthgERMlePQTjvTfGn2GYRZhXU+V88ZjlYZFBYbLw==", - "dev": true + "dev": true, + "requires": {} }, "jest-matcher-utils": { "version": "28.1.3", @@ -40369,7 +40407,8 @@ "jest-pnp-resolver": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==" + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "requires": {} }, "jest-preset-angular": { "version": "12.2.2", @@ -41108,7 +41147,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true + "devOptional": true }, "jsdom": { "version": "19.0.0", @@ -41202,7 +41241,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true + "devOptional": true }, "json-schema-traverse": { "version": "1.0.0", @@ -41213,13 +41252,13 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "devOptional": true }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true + "devOptional": true }, "json5": { "version": "2.2.3", @@ -41250,7 +41289,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, + "devOptional": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -41292,7 +41331,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true + "devOptional": true }, "less": { "version": "4.1.3", @@ -41364,7 +41403,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, + "devOptional": true, "requires": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -41392,7 +41431,7 @@ "version": "3.14.0", "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, + "devOptional": true, "requires": { "cli-truncate": "^2.1.0", "colorette": "^2.0.16", @@ -41408,7 +41447,7 @@ "version": "7.8.0", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", - "dev": true, + "devOptional": true, "requires": { "tslib": "^2.1.0" } @@ -41517,13 +41556,13 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "devOptional": true }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true + "devOptional": true }, "lodash.uniq": { "version": "4.5.0", @@ -41588,7 +41627,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, + "devOptional": true, "requires": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", @@ -41600,7 +41639,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "requires": { "color-convert": "^2.0.1" } @@ -41609,7 +41648,7 @@ "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, + "devOptional": true, "requires": { "color-name": "~1.1.4" } @@ -41618,13 +41657,13 @@ "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 + "devOptional": true }, "slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, + "devOptional": true, "requires": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -41635,7 +41674,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, + "devOptional": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -42619,7 +42658,8 @@ "version": "14.5.2", "resolved": "https://registry.npmjs.org/ng-mocks/-/ng-mocks-14.5.2.tgz", "integrity": "sha512-fS7rt4AAB8kzGDfpLURm9hec2VYAVl+lmTO92vOeCZn+iKIObR0nuGA8TZP+sb97lcjqtDGNLkAzcRElQhQbuw==", - "dev": true + "dev": true, + "requires": {} }, "nice-napi": { "version": "1.0.2", @@ -43281,7 +43321,7 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, + "devOptional": true, "requires": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -43368,7 +43408,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true + "devOptional": true }, "p-cancelable": { "version": "0.3.0", @@ -43421,7 +43461,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, + "devOptional": true, "requires": { "aggregate-error": "^3.0.0" } @@ -43697,13 +43737,13 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "devOptional": true }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true + "devOptional": true }, "picocolors": { "version": "1.0.0", @@ -43934,22 +43974,26 @@ "postcss-discard-comments": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==" + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "requires": {} }, "postcss-discard-duplicates": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==" + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "requires": {} }, "postcss-discard-empty": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==" + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "requires": {} }, "postcss-discard-overridden": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==" + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "requires": {} }, "postcss-double-position-gradients": { "version": "3.1.2", @@ -43992,13 +44036,15 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "dev": true + "dev": true, + "requires": {} }, "postcss-gap-properties": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", - "dev": true + "dev": true, + "requires": {} }, "postcss-image-set-function": { "version": "4.0.7", @@ -44024,7 +44070,8 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "dev": true + "dev": true, + "requires": {} }, "postcss-lab-function": { "version": "4.2.1", @@ -44051,13 +44098,15 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "dev": true + "dev": true, + "requires": {} }, "postcss-media-minmax": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "dev": true + "dev": true, + "requires": {} }, "postcss-merge-longhand": { "version": "5.1.7", @@ -44119,7 +44168,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true + "dev": true, + "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -44163,7 +44213,8 @@ "postcss-normalize-charset": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==" + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "requires": {} }, "postcss-normalize-display-values": { "version": "5.1.0", @@ -44235,7 +44286,8 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", - "dev": true + "dev": true, + "requires": {} }, "postcss-ordered-values": { "version": "5.1.3", @@ -44259,7 +44311,8 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "dev": true + "dev": true, + "requires": {} }, "postcss-place": { "version": "7.0.5", @@ -44357,7 +44410,8 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "dev": true + "dev": true, + "requires": {} }, "postcss-selector-not": { "version": "6.0.1", @@ -44403,7 +44457,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true + "devOptional": true }, "prepend-http": { "version": "1.0.4", @@ -44415,13 +44469,13 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true + "devOptional": true }, "pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true + "devOptional": true }, "pretty-format": { "version": "28.1.3", @@ -44535,7 +44589,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true + "devOptional": true }, "prr": { "version": "1.0.1", @@ -44547,7 +44601,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "devOptional": true }, "public-encrypt": { "version": "4.0.3", @@ -44575,7 +44629,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, + "devOptional": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -44894,7 +44948,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true + "devOptional": true }, "regexpu-core": { "version": "5.2.2", @@ -44952,7 +45006,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, + "devOptional": true, "requires": { "throttleit": "^1.0.0" } @@ -45075,7 +45129,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true + "devOptional": true }, "rimraf": { "version": "3.0.2", @@ -45192,6 +45246,14 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sanitize-filename-ts": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/sanitize-filename-ts/-/sanitize-filename-ts-1.0.2.tgz", + "integrity": "sha512-bON2VOJoappmaBHlnxvBNk5R7HkUAsirf5m1M5Kz15uZykDGbHfGPCQNcEQKR8HrQhgh9CmQ6Xe9y71yM9ywkw==", + "requires": { + "truncate-utf8-bytes": "^1.0.2" + } + }, "saslprep": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", @@ -45567,7 +45629,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, + "devOptional": true, "requires": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -45578,7 +45640,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "requires": { "color-convert": "^2.0.1" } @@ -45587,7 +45649,7 @@ "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, + "devOptional": true, "requires": { "color-name": "~1.1.4" } @@ -45596,7 +45658,7 @@ "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 + "devOptional": true } } }, @@ -46013,7 +46075,7 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, + "devOptional": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -46331,7 +46393,8 @@ "style-loader": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==" + "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", + "requires": {} }, "stylehacks": { "version": "5.1.1", @@ -46685,13 +46748,13 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "devOptional": true }, "throttleit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", - "dev": true + "devOptional": true }, "through": { "version": "2.3.8", @@ -46845,7 +46908,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, + "devOptional": true, "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -46874,6 +46937,14 @@ "escape-string-regexp": "^1.0.2" } }, + "truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "requires": { + "utf8-byte-length": "^1.0.1" + } + }, "ts-jest": { "version": "28.0.8", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.8.tgz", @@ -47151,7 +47222,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, + "devOptional": true, "requires": { "safe-buffer": "^5.0.1" } @@ -47160,13 +47231,13 @@ "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true + "devOptional": true }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, + "devOptional": true, "requires": { "prelude-ls": "^1.2.1" } @@ -47209,8 +47280,7 @@ "typescript": { "version": "4.8.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==" }, "unbzip2-stream": { "version": "1.4.3", @@ -47346,7 +47416,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true + "devOptional": true }, "upath": { "version": "1.2.0", @@ -47432,6 +47502,11 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, + "utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" + }, "util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", @@ -47518,7 +47593,7 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, + "devOptional": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -48129,7 +48204,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "devOptional": true }, "worker-farm": { "version": "1.7.0", @@ -48190,7 +48265,8 @@ "ws": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz", - "integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==" + "integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==", + "requires": {} }, "xml": { "version": "1.0.1", @@ -48254,7 +48330,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, + "devOptional": true, "requires": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" diff --git a/goofy-client/package.json b/goofy-client/package.json index edba69a384bf43c71550c6023d8e08dfcd2ceef0..8bb32c44fc186da0b6d54f3f38c9de529401fb91 100644 --- a/goofy-client/package.json +++ b/goofy-client/package.json @@ -75,6 +75,7 @@ "js-base64": "^3.7.3", "lodash-es": "4.17.21", "rxjs": "^6.6.0", + "sanitize-filename-ts": "^1.0.2", "tslib": "^2.0.0", "typeface-roboto": "1.1.13", "zone.js": "0.11.5" diff --git a/goofy-server/src/main/resources/application-e2e.yml b/goofy-server/src/main/resources/application-e2e.yml index 3ab8ea8cc5d1edecd02cc3d4709b109b9471aafa..536b1d81e83e8f1bf6b0fb0938a43d93db258dfa 100644 --- a/goofy-server/src/main/resources/application-e2e.yml +++ b/goofy-server/src/main/resources/application-e2e.yml @@ -1,6 +1,6 @@ keycloak: - realm: sh-e2e-dev - resource: sh-e2e-dev-goofy + realm: by-e2e-local-dev + resource: by-e2e-local-dev-goofy kop: forwarding: